SUBROUTINE gtgdef(igrid,istat,imax,jmax,alat1,elon1,dxx,dyy,elonv, + alatan,latlong,lambert,polarstereo) C . . . . C SUBPROGRAM: GTGDEF RETRIEVE grid definition parameters C PRGMMR: Geoff DiMego ORG: W/NP22 DATE: 97-12-29 C C ABSTRACT: RETRIEVES grid definition parameters C C PROGRAM HISTORY LOG: C 98-01-04 Geoff DiMego Brand new code C 2006-10-10 Binbin Z. Add grid#255 for HYSPLIT MODEL C C USAGE: CALL GTGDEF(IGRID,ISTAT,IMAX,JMAX,ALAT1,ELON1, C 1 DXX,DYY,ELONV,ALATAN,LATLONG,LAMBERT,POLARSTEREO) C C INPUT ARGUMENT LIST: C IGRID - INTEGER NUMBER OF desired grid C C OUTPUT ARGUMENT LIST: C ISTAT - INTEGER =0 MEANS SUCCESSFUL COMPLETION C = 1 MEANS GRID NOT currently supported C IMAX,JMAX- DIMENSIONS OF GRID C ALAT1,ELON1 LOCATION OF ORIGIN PT(1,1) C DXX,DYY - MESH LENGTHS C ELONV - VERTICAL LONGITUDE C ALATAN - REFERENCE LATITUDE (FOR LAMBERT) C LATLONG,LAMBERT,POLARSTEREO PROJECTION-TYPE SWITCHES C WHERE LATLONG,LAMBERT,POLARSTEREO are type LOGICAL C C REMARKS: C ATTRIBUTES: C LANGUAGE: FORTRAN-77 C MACHINE: CRAY C-90 C$$$ LOGICAL latlong, lambert, polarstereo INTEGER kgds(91) C istat = 0 C C USE W3FI71 WITH THE INPUT GRID NUMBER TO GET THE PDS C FROM WHICH TO EXTRACT THE GRID DEFINITION PARAMETERS C if(igrid.lt.255) then CALL w3fi71(igrid,kgds,istat) IF (istat.ne.0) RETURN else if(gribid.eq.255) then kgds(2+1)=3 !specific for MATT's Hiresolution WRF selfdefined 255 grid C kgds(2+2)=940 !Matt's Central C kgds(2+3)=739 !Matt's Central kgds(2+2)=1295 !Matt's CONUS kgds(2+3)=854 !Matt's CONUS kgds(2+4)=23200 kgds(2+5)=-108900 kgds(2+6)=0 kgds(2+7)=-91000 kgds(2+8)=4000 kgds(2+9)=4000 kgds(2+10)=0 kgds(2+11)=64 kgds(2+12)=0 kgds(2+13)=38000 kgds(2+14)=0 kgds(2+15)=0 kgds(2+16)=0 kgds(2+17)=-1 kgds(2+18)=-1 kgds(2+19)=0 kgds(2+20)=255 kgds(2+21)=-1 kgds(2+22)=-1 kgds(2+23)=-1 kgds(2+24)=-1 kgds(2+25)=-1 else if(gribid.eq.256) then kgds(2+1)=3 !specific for AWC ADDS kgds(2+2)=1073 kgds(2+3)=689 kgds(2+4)=20192 kgds(2+5)=238446 kgds(2+6)=128 kgds(2+7)=265000 kgds(2+8)=5079 kgds(2+9)=5079 kgds(2+10)=0 kgds(2+11)=64 kgds(2+12)=25000 kgds(2+13)=25000 kgds(2+14)=0 kgds(2+15)=0 kgds(2+16)=0 kgds(2+17)=-1 kgds(2+18)=-1 kgds(2+19)=0 kgds(2+20)=255 kgds(2+21)=-1 kgds(2+22)=-1 kgds(2+23)=-1 kgds(2+24)=-1 kgds(2+25)=-1 else if(gribid.eq.258) then kgds(2+1)=3 !specific for reflectivity on Hi-res WRF (5km) west region kgds(2+2)=884 kgds(2+3)=614 kgds(2+4)=24500 kgds(2+5)=-129200 kgds(2+6)=8 kgds(2+7)=-108000 kgds(2+8)=5000 kgds(2+9)=5000 kgds(2+10)=0 kgds(2+11)=64 kgds(2+12)=40500 kgds(2+13)=40500 kgds(2+14)=0 kgds(2+15)=0 kgds(2+16)=0 kgds(2+17)=-1 kgds(2+18)=-1 kgds(2+19)=0 kgds(2+20)=255 kgds(2+21)=-1 kgds(2+22)=-1 kgds(2+23)=-1 kgds(2+24)=-1 kgds(2+25)=-1 else if(gribid.eq.257) then kgds(2+1)=3 !specific for reflectivity on Hi-res WRF (5km) east region kgds(2+2)=884 kgds(2+3)=614 kgds(2+4)=22100 kgds(2+5)=-109800 kgds(2+6)=8 kgds(2+7)=-89000 kgds(2+8)=5000 kgds(2+9)=5000 kgds(2+10)=0 kgds(2+11)=64 kgds(2+12)=38000 kgds(2+13)=38000 kgds(2+14)=0 kgds(2+15)=0 kgds(2+16)=0 kgds(2+17)=-1 kgds(2+18)=-1 kgds(2+19)=0 kgds(2+20)=255 kgds(2+21)=-1 kgds(2+22)=-1 kgds(2+23)=-1 kgds(2+24)=-1 kgds(2+25)=-1 else if(gribid.eq.189) then kgds(2+1)=3 !specific for reflectivity on Hi-res WRF (5km) central region (CONUS) defined by Matt Pyle kgds(2+2)=1295 kgds(2+3)=854 kgds(2+4)=20800 kgds(2+5)=-122000 kgds(2+6)=8 kgds(2+7)=-98000 kgds(2+8)=4000 kgds(2+9)=4000 kgds(2+10)=0 kgds(2+11)=64 kgds(2+12)=39000 kgds(2+13)=39000 kgds(2+14)=0 kgds(2+15)=0 kgds(2+16)=0 kgds(2+17)=-1 kgds(2+18)=-1 kgds(2+19)=0 kgds(2+20)=255 kgds(2+21)=-1 kgds(2+22)=-1 kgds(2+23)=-1 kgds(2+24)=-1 kgds(2+25)=-1 end if C C FILL IN GRIDEF COMMON BLOCK C W3FI71 RETURNS 2 EXTRA VALUES AT BEGINNING OF ARRAY KGDS C THE FOLLOWING DEFINED REGARDLESS OF GRID PROJECTION C imax = kgds(2+2) jmax = kgds(3+2) C C USE KGDS(1+2) TO DETERMINE GRID PROJECTION C C KGDS(1+2) = 0 ----> LATITUDE/LONGITUDE C KGDS(1+2) = 1 ----> MERCATOR (NOT YET USED) C KGDS(1+2) = 3 ----> LAMBERT CONFORMAL C KGDS(1+2) = 5 ----> POLAR STEREOGRAPHIC C IF (kgds(1+2).eq.0) THEN latlong = .true. lambert = .false. polarstereo = .false. ELSE IF (kgds(1+2).eq.3) THEN latlong = .false. lambert = .true. polarstereo = .false. ELSE IF (kgds(1+2).eq.5) THEN latlong = .false. lambert = .false. polarstereo = .true. ELSE iret = 99 WRITE (6,*) ' KGDS(1+2) = ', kgds(1+2) WRITE (6,*) ' GRID CAN NOT BE USED IN THIS CODE IRET= ', iret istat = 1 RETURN END IF C C SET THE REST OF THE GRID PARAMETERS BASED ON PROJECTION TYPE C C Change has been made for LATLON definition --- Yuejian Zhu C Changed back with checking -- K. Brill C IF (latlong) THEN alat1 = kgds(4+2) * 0.001 elon1 = kgds(5+2) * 0.001 IF ( elon1 .lt. 0.0 ) elon1 = elon1 + 360 elonv = 0.0 alatan = 0.0 dyy = kgds(9+2) * 0.001 dxx = kgds(10+2) * 0.001 END IF C IF (lambert) THEN alat1 = kgds(4+2) * 0.001 elon1 = kgds(5+2) * 0.001 IF ( elon1 .lt. 0.0 ) elon1 = elon1 + 360 elonv = kgds(7+2) * 0.001 IF ( elonv .lt. 0.0 ) elonv = elonv + 360 alatan = kgds(12+3) * 0.001 dxx = kgds(8+2) * 0.001 dyy = kgds(9+2) * 0.001 END IF C IF (polarstereo) THEN alat1 = kgds(4+2) * 0.001 elon1 = kgds(5+2) * 0.001 IF ( elon1 .lt. 0.0 ) elon1 = elon1 + 360 elonv = kgds(7+2) * 0.001 IF ( elonv .lt. 0.0 ) elonv = elonv + 360 alatan = 0.0 dxx = kgds(8+2) * 0.001 dyy = kgds(9+2) * 0.001 END IF C PRINT *, 'gridspecs ', lambert, alat1, elon1, elonv, alatan, dxx, + dyy C WRITE (6,*) ' GREETINGS FROM THE GRID-DEFINITION CODE! ' WRITE (6,*) ' THE GRID YOU HAVE CHOSEN IS NUMBER ', igrid IF (latlong) THEN WRITE (6,*) ' A LAT/LON GRID WITH RES= ', dxx, ' BY ', dyy, + ' DEG' ELSE IF (polarstereo) THEN WRITE (6,*) ' A POLAR STEREO GRID CENTERED AT ', elonv, ' DEG E' WRITE (6,*) ' AND A HORIZONTAL RESOLUTION OF ', dxx, ' KM' ELSE IF (lambert) THEN WRITE (6,*) ' A LAMBERT CONFORMAL GRID CENTERED AT ', elonv, + ' DEG E' WRITE (6,*) ' AND A HORIZONTAL RESOLUTION OF ', dxx, ' KM' END IF WRITE (6,*) ' HORIZONTAL DIMENSIONS ARE ', imax, ' X', jmax RETURN END