SUBROUTINE IJKGDS0(KGDS,IJKGDSA) !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! ! $Revision: 71314 $ ! ! SUBPROGRAM: IJKGDS0 SET UP PARAMETERS FOR FUNCTION IJKGDS1 ! PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-04-10 ! ! ABSTRACT: THIS SUBPROGRAM DECODES THE GRIB GRID DESCRIPTION SECTION ! AND RETURNS A NAVIGATION PARAMETER ARRAY TO ALLOW FUNCTION ! IJKGDS1 TO DECODE THE FIELD POSITION FOR A GIVEN GRID POINT. ! ! PROGRAM HISTORY LOG: ! 96-04-10 IREDELL ! 97-03-11 IREDELL ALLOWED HEMISPHERIC GRIDS TO WRAP OVER ONE POLE ! 98-07-13 BALDWIN ADD 2D STAGGERED ETA GRID INDEXING (203) ! 1999-04-08 IREDELL SPLIT IJKGDS INTO TWO ! 2015-01-27 GAYNO REMOVE REFERENCES TO OBSOLETE NCEP GRIDS 201 ! AND 202. ! ! USAGE: CALL IJKGDS0(KGDS,IJKGDSA) ! ! INPUT ARGUMENT LIST: ! KGDS - INTEGER (200) GDS PARAMETERS AS DECODED BY W3FI63 ! ! OUTPUT ARGUMENT LIST: ! IJKGDSA - INTEGER (20) NAVIGATION PARAMETER ARRAY ! IJKGDSA(1) IS NUMBER OF X POINTS ! IJKGDSA(2) IS NUMBER OF Y POINTS ! IJKGDSA(3) IS X WRAPAROUND INCREMENT ! (0 IF NO WRAPAROUND) ! IJKGDSA(4) IS Y WRAPAROUND LOWER PIVOT POINT ! (0 IF NO WRAPAROUND) ! IJKGDSA(5) IS Y WRAPAROUND UPPER PIVOT POINT ! (0 IF NO WRAPAROUND) ! IJKGDSA(6) IS SCANNING MODE ! (0 IF X FIRST THEN Y; 1 IF Y FIRST THEN X; ! 3 IF STAGGERED DIAGONAL LIKE PROJECTION 203) ! IJKGDSA(7) IS MASS/WIND FLAG FOR STAGGERED DIAGONAL ! (0 IF MASS; 1 IF WIND) ! IJKGDSA(8:20) ARE UNUSED AT THE MOMENT ! ! ATTRIBUTES: ! LANGUAGE: FORTRAN 90 ! !$$$ IMPLICIT NONE ! INTEGER, INTENT(IN ):: KGDS(200) INTEGER, INTENT( OUT):: IJKGDSA(20) ! INTEGER :: IM, JM, IWRAP, JG INTEGER :: ISCAN, KSCAN, NSCAN INTEGER :: JWRAP1, JWRAP2 ! REAL :: DLAT, DLON REAL :: RLAT1, RLAT2 REAL :: RLON1, RLON2 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! SET USUAL VALUES IM=KGDS(2) JM=KGDS(3) IWRAP=0 JWRAP1=0 JWRAP2=0 NSCAN=MOD(KGDS(11)/32,2) KSCAN=0 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! SET EXCEPTIONAL VALUES FOR PROJECTION 000 IF(KGDS(1).EQ.0) THEN RLON1=KGDS(5)*1.E-3 RLON2=KGDS(8)*1.E-3 ISCAN=MOD(KGDS(11)/128,2) IF(ISCAN.EQ.0) THEN DLON=(MOD(RLON2-RLON1-1+3600,360.)+1)/(IM-1) ELSE DLON=-(MOD(RLON1-RLON2-1+3600,360.)+1)/(IM-1) ENDIF IWRAP=NINT(360/ABS(DLON)) IF(IM.LT.IWRAP) IWRAP=0 IF(IWRAP.GT.0.AND.MOD(IWRAP,2).EQ.0) THEN RLAT1=KGDS(4)*1.E-3 RLAT2=KGDS(7)*1.E-3 DLAT=ABS(RLAT2-RLAT1)/(JM-1) IF(ABS(RLAT1).GT.90-0.25*DLAT) THEN JWRAP1=2 ELSEIF(ABS(RLAT1).GT.90-0.75*DLAT) THEN JWRAP1=1 ENDIF IF(ABS(RLAT2).GT.90-0.25*DLAT) THEN JWRAP2=2*JM ELSEIF(ABS(RLAT2).GT.90-0.75*DLAT) THEN JWRAP2=2*JM+1 ENDIF ENDIF ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! SET EXCEPTIONAL VALUES FOR PROJECTION 001 ELSEIF(KGDS(1).EQ.1) THEN RLON1=KGDS(5)*1.E-3 RLON2=KGDS(8)*1.E-3 ISCAN=MOD(KGDS(11)/128,2) IF(ISCAN.EQ.0) THEN DLON=(MOD(RLON2-RLON1-1+3600,360.)+1)/(IM-1) ELSE DLON=-(MOD(RLON1-RLON2-1+3600,360.)+1)/(IM-1) ENDIF IWRAP=NINT(360/ABS(DLON)) IF(IM.LT.IWRAP) IWRAP=0 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! SET EXCEPTIONAL VALUES FOR PROJECTION 004 ELSEIF(KGDS(1).EQ.4) THEN RLON1=KGDS(5)*1.E-3 RLON2=KGDS(8)*1.E-3 ISCAN=MOD(KGDS(11)/128,2) IF(ISCAN.EQ.0) THEN DLON=(MOD(RLON2-RLON1-1+3600,360.)+1)/(IM-1) ELSE DLON=-(MOD(RLON1-RLON2-1+3600,360.)+1)/(IM-1) ENDIF IWRAP=NINT(360/ABS(DLON)) IF(IM.LT.IWRAP) IWRAP=0 IF(IWRAP.GT.0.AND.MOD(IWRAP,2).EQ.0) THEN JG=KGDS(10)*2 IF(JM.EQ.JG) THEN JWRAP1=1 JWRAP2=2*JM+1 ENDIF ENDIF ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! SET EXCEPTIONAL VALUES FOR PROJECTION 203 ELSEIF(KGDS(1).EQ.203) THEN NSCAN=3 KSCAN=MOD(KGDS(11)/256,2) ENDIF ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! FILL NAVIGATION PARAMETER ARRAY IJKGDSA(1)=IM IJKGDSA(2)=JM IJKGDSA(3)=IWRAP IJKGDSA(4)=JWRAP1 IJKGDSA(5)=JWRAP2 IJKGDSA(6)=NSCAN IJKGDSA(7)=KSCAN ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END SUBROUTINE IJKGDS0