1 C***********************************************************************
3 USE module_wave2grid_kma
5 ! PARAMETER ( KMAX=30 )
6 ! PARAMETER ( IMAX=640, JMAX=320 )
7 ! PARAMETER ( IMAXE=640, JMAXE=321 )
8 ! PARAMETER ( ISST=360, JSST=181 )
9 ! PARAMETER ( ISNW=360, JSNW=180 )
10 ! PARAMETER ( IDIM=428, JDIM=214 ) ! MAX(MAX,SST,SNW)
11 ! PARAMETER ( MAXJZ=16 )
12 ! PARAMETER (MEND1 =214,NEND1=214,JEND1=214)
13 ! PARAMETER (JMAXHF= JMAX/2)
14 ! PARAMETER (MNWAV =MEND1*(MEND1+1)/2)
15 ! PARAMETER (IVAR=6,IMX=IMAX+2)
17 INTEGER IDATE(5), IDGES(5), IDSST(5)
18 CHARACTER*8 FILE, MODEL, RESL
20 CHARACTER*4 TYPE, EXPR, KTUNIT, NPROD, NPROM, VCODD, VCODM
21 CHARACTER*4 LEVEL, ELEM
29 CHARACTER*10 FROMUNPACK
32 DIMENSION A(KMAX+1), B(KMAX+1), AAM(KMAX+1), BBM(KMAX+1)
33 DIMENSION AGD(KMAX+1), BGD(KMAX+1), AGM(KMAX+1), BGM(KMAX+1)
34 DIMENSION GPHIS(IMAX*JMAX)
35 REAL, DIMENSION(IMAX,JMAX) :: GAU
36 REAL, DIMENSION(JMAX) :: SINCLT,COSCLT,GW,DGW,DCOSCL,COLRAD,DY
38 COMMON PSE (IMAXE,JMAXE),
39 1 GZE (IMAXE,JMAXE,KMAX), GTE (IMAXE,JMAXE,KMAX),
40 2 GUE (IMAXE,JMAXE,KMAX), GVE (IMAXE,JMAXE,KMAX),
41 3 GQE (IMAXE,JMAXE,KMAX)
42 COMMON PS (IMAX,JMAX),
43 1 GZ (IMAX,JMAX,KMAX), GT (IMAX,JMAX,KMAX),
44 2 GU (IMAX,JMAX,KMAX), GV (IMAX,JMAX,KMAX),
45 3 GQ (IMAX,JMAX,KMAX), AGT (IMAX,JMAX,KMAX),
46 4 GCWC(IMAX,JMAX,KMAX), GCVR(IMAX,JMAX,KMAX),
47 5 GUMB(IMAX,JMAX,KMAX),
48 6 GSST(IMAX,JMAX) , GSNW(IMAX,JMAX)
49 DIMENSION VLG(IMAX,JMAX,KMAX)
50 C DIMENSION WRK1(IMAX,JMAX,KMAX), WRK2(IMAX,JMAX,KMAX),
51 REAL * 8 WRK1(IMAX,JMAX,KMAX), WRK2(IMAX,JMAX,KMAX)
52 DIMENSION WRK3(IMAX,JMAX,KMAX), WRK4(IMAX,JMAX,KMAX),
53 2 WRK5(IMAX,JMAX,KMAX), WRK6(IMAX,JMAX,KMAX)
55 INTEGER*2 I2(IDIM*JDIM)
57 DIMENSION SSTA(ISST*JSST), SEWA(ISNW,JSNW)
58 DIMENSION COLRAD(JMAX), DY(JMAX), LY(JMAX)
59 DIMENSION WORK(362,182),DP(4,IMAX,JMAX)
60 INTEGER*2 IP(2,IMAX,JMAX)
61 REAL*8 GAUL(JMAX),GAUW(JMAX),COCOT(JMAX)
62 COMMON/CTETEN/TABLE(25000)
63 COMMON/DTETEN/DTABLE(25000)
64 REAL*8 TABLE,DTABLE,RGSA,G
65 DIMENSION RLAT(MAXJZ), ZDAT(MAXJZ,KMAX)
67 NAMELIST /NAMFIL/ NALFL,NVPFL,NGSFL,NSSTFL,NSNWFL,NINFL,
68 1 KTLAG,IDCHCK,NDIGFL,NTPFL,NALOT,NRSFL
69 NAMELIST /HEADIN/ TYPE,FILE,KTUNIT,IDTYPE,
71 C------------------------------------------------------------------------
72 C NALFL : 3DOI INPUT FILE
73 C NVPFL : VERTIAL LEVEL DEF. FILE
75 C NALOT : 3DOI INPUT SAVE FILE
76 C NRSFL : UNPACK INPUT FILE
77 C------------------------------------------------------------------------
78 NAMELIST /NAMVER/ MODEL, RESL, EXPR, CINF
81 DATA GRAV,ER,GASR,GAMMA/9.80665,6371.E3,287.04,0.0050/
82 DATA TLAPS,QCONS,QMIN,KST,ITERMX/2.0E-3,2.5E-6,1.0E-10,10,3/
84 DATA NALFL ,NGSFL ,NSSTFL,NSNWFL,NINFL ,NVPFL ,NALOT,NRSFL
85 1 / 1, 2, -1, -1, 11, 21, 12, -1/
88 DATA A/0.00000000000D+00,0.00000000000D+00,0.00000000000D+00,
89 & 0.00000000000D+00,1.546082500000000,5.614406590000000,
90 & 12.42546270000000,21.63197330000000,32.59785460000000,
91 & 44.61235050000000,57.01704410000000,69.26280210000000,
92 & 80.92097470000000,91.66931150000001,101.2670900000000,
93 & 109.5278170000000,116.2947540000000,121.4214780000000,
94 & 124.7591550000000,126.1514430000000,125.4377290000000,
95 & 122.4657440000000,117.1135710000000,109.3194430000000,
96 & 99.11479190000000,86.65005490000000,72.19601440000000,
97 & 56.09729000000000,38.66041560000000,19.99998470000000,
99 DATA B/1.0000000000000,0.9889042970000000,0.9682830569999999,
100 & 0.9399999980000000,0.9042294030000000,0.8613848090000000,
101 & 0.8124753240000000,0.7589231130000000,0.7022829060000000,
102 & 0.6440208549999999,0.5853865740000000,0.5273658630000000,
103 & 0.4706876280000000,0.4158638720000000,0.3632441160000000,
104 & 0.3130739930000000,0.2655510310000000,0.2208738920000000,
105 & 0.1792818900000000,0.1410827640000000,0.1066635850000000,
106 & 7.647979300000D-02,5.101471400000D-02,3.070007300000D-02,
107 & 1.579232499999D-02,6.205350000000D-03,1.324939000000D-03,
108 & 0.000000000000D+00,0.000000000000D+00,0.000000000000D+00,
109 & 0.000000000000D+00/
111 C =================================================================
112 C >>> READ ANAL TIME <<<
113 C =================================================================
114 READ(94,'(I4,3I2)') (IDATE(I),I=1,4)
116 C =================================================================
117 C >>> NAMELIST (NAMFIL) <<<
118 C =================================================================
123 C =================================================================
124 C >>> Select Input Source <<<
125 C =================================================================
126 CALL GETENV('FROMUNPACK',FROMUNPACK)
127 IF (LEN_TRIM(FROMUNPACK).EQ.0) THEN
130 READ(FROMUNPACK,'(I1)') IUNPACK
132 WRITE(6,*)'IUNPACK=',IUNPACK
133 C =================================================================
134 C >>> GENERATE GAUSSIAN LATITUDES <<<
135 C =================================================================
136 CALL GAUSS(GAUL,GAUW,JMAX)
138 COLRAD(J)=ACOS(GAUL(J))
143 GW (JMAX+1-J)=0.5*DGW (J)
144 COSCLT( J)= DCOSCL(J)
145 COSCLT(JMAX+1-J)= -DCOSCL(J)
146 SINCLT( J)=SQRT(1.0-DCOSCL(J)**2)
147 SINCLT(JMAX+1-J)=SQRT(1.0-DCOSCL(J)**2)
149 CALL ZMNLAT( RLAT, MAXJZ, COLRAD, JMAX )
151 C =================================================================
153 C =================================================================
156 C =================================================================
158 C =================================================================
160 READ(NTPFL)NWV,DUM,IGRD,JGRD
161 IF ((IGRD.NE.IMAX).OR.(JGRD.NE.JMAX)) THEN
162 WRITE(*,*)' TOPO DIM DOES NOT MATCH'
163 WRITE(*,*)'IMAX=',IMAX,' IGRD=',IGRD
164 WRITE(*,*)'JMAX=',JMAX,' JGRD=',JGRD
170 WRITE(*,*)'GRID DISTANCE=',DUM
172 C---------------------------------------------------------------------
174 C---------------------------------------------------------------------
179 I(NALFL ,IMAXE ,JMAXE ,KMAX , PSE,
180 O GTE ,GUE ,GVE ,GQE )
181 C---------------------------------------------------------------------
182 C +++ CONVERT LAT/LON to GAUSS
183 C---------------------------------------------------------------------
184 CALL LT2GAU (PSE,IMAXE,JMAXE,IMAX,JMAX,
187 CALL LT2GAU (GTE(:,:,K),IMAXE,JMAXE,IMAX,JMAX,
188 1 COLRAD,GT(:,:,K),DY,LY)
189 CALL LT2GAU (GUE(:,:,K),IMAXE,JMAXE,IMAX,JMAX,
190 1 COLRAD,GU(:,:,K),DY,LY)
191 CALL LT2GAU (GVE(:,:,K),IMAXE,JMAXE,IMAX,JMAX,
192 1 COLRAD,GV(:,:,K),DY,LY)
193 CALL LT2GAU (GQE(:,:,K),IMAXE,JMAXE,IMAX,JMAX,
194 1 COLRAD,GQ(:,:,K),DY,LY)
196 C =================================================================
197 C >>> PS, TEMP, Q -> Z
198 C =================================================================
202 I (PS,GT,GQ,GPHIS,IMAX,JMAX,KMAX,RGAS,G,A,B,
208 CLSW write(99,FMT='(10F12.5,1x)') (GZ(I,J,K),I=1,IMAX)
211 C ==================================================================
212 C >>> SAVE INPUT DATA
213 C ==================================================================
222 ELSE ! START WITH UNPACK FILE
232 END IF ! READ ANAL FINISH
234 CLSW write(99,*) ' Gauss GT'
237 CLSW write(99,FMT='(10F12.5,1x)') (GT(I,J,k),I=1,IMAX)
240 C---------------------------------------------------------------------
242 C write(99,FMT='(10F12.5,1x)') (GAU(I,J),I=1,IMAX)
247 C =================================================================
248 C >>> NAMELIST (NAMVER) <<<
249 C =================================================================
250 CINF(1)=' ';CINF(2)=' ';CINF(3)=' ';CINF(4)=' ';CINF(5)=' '
251 CINF(6)=' ';CINF(7)=' ';CINF(8)=' ';CINF(9)=' ';CINF(10)=' '
254 C =================================================================
257 I(NGSFL ,IMAX ,JMAX ,KMAX ,KTLAG ,IDATE ,IDCHCK,
258 O IDGES ,AGD ,BGD ,AGM ,BGM ,GCWC ,GCVR ,GUMB ,
261 C =================================================================
263 C =================================================================
264 C CALL CTIME( 4, 'ZE2TVE ' )
265 C >>> GT IS TV (OUTPUT)
267 CALL GH2TV(GZ, GT, PS, GPHIS, A, B,
268 1 IMAX , JMAX , KMAX ,WRK1 , WRK2 , WRK3 , WRK4)
270 CALL ZE2TVE( GZ , GT , PS , A , B ,
271 I IMAX , JMAX , KMAX ,
272 W VLG , WRK1 , WRK2 , WRK3 , WRK4 , WRK5 ,
275 CLSW write(99,*) ' Z->TV'
278 CLSW write(99,FMT='(10F12.5,1x)') (GT(I,J,K),I=1,IMAX)
282 CLSW CALL ZMNT( ZDAT, MAXJZ, KMAX, GT , IMAX, JMAX )
283 CLSW CALL OUTZ( ZDAT, MAXJZ, KMAX, 'TV ',
285 CLSW 2 0, RLAT, 'KMAX' )
287 C =================================================================
288 C >>> RH, TV -> Q, T <<<
289 C =================================================================
292 I(IMAX*JMAX, KMAX, PS, A, B, GRAV,GASR,TLAPS,QCONS,QMIN,KST,ITERMX,
295 write(99,*) ' after RH, TV -> Q, T'
298 write(99,FMT='(10F12.5,1x)') (GT(I,J,K),I=1,IMAX)
302 C *****************************************************************
303 C >>> OUTPUT INITIAL VALUE <<<
304 C *****************************************************************
305 C =================================================================
307 C =================================================================
310 I 'GVS1',IDATE ,'INITETA ',MODEL, RESL,
311 I EXPR ,'HOUR',1 ,0 ,0 ,
312 I IMAX ,JMAX ,'GAUS',360.0/IMAX, REAL(JMAX),
313 I 1.0 ,(JMAX+1)/2.0, 0.0 ,0.0 ,
314 I 'ETA ',KMAX ,A ,B ,
315 I IMAX ,JMAX ,'GAUS',360.0/IMAX, REAL(JMAX),
316 I 1.0 ,(JMAX+1)/2.0, 0.0 ,0.0 ,
317 I 'ETA ',KMAX ,A ,B ,
320 C =================================================================
322 C =================================================================
323 CALL MOVERD(PS, WRK, IMAX*JMAX)
325 1(NINFL , IDATE , -1 , 'SURF', 'P ',
327 3 0 , 0 , WRK , IMAX , JMAX , I2 )
329 C =================================================================
331 C =================================================================
333 CALL MOVERD(GU(1,1,K), WRK, IMAX*JMAX)
334 WRITE(ALVL(1:4), '(I4)') K
336 1 (NINFL , IDATE , -1 , ALVL , 'U ',
338 3 0 , 0 , WRK , IMAX , JMAX , I2 )
341 CALL MOVERD(GV(1,1,K), WRK, IMAX*JMAX)
342 WRITE(ALVL(1:4), '(I4)') K
344 1 (NINFL , IDATE , -1 , ALVL , 'V ',
346 3 0 , 0 , WRK , IMAX , JMAX , I2 )
348 C =================================================================
350 C =================================================================
352 CALL MOVERD(GT(1,1,K), WRK, IMAX*JMAX)
353 WRITE(ALVL(1:4), '(I4)') K
355 1 (NINFL , IDATE , -1 , ALVL , 'T ',
357 3 0 , 0 , WRK , IMAX , JMAX , I2 )
360 CALL MOVERD(GQ(1,1,K), WRK, IMAX*JMAX)
361 WRITE(ALVL(1:4), '(I4)') K
363 1 (NINFL , IDATE , -1 , ALVL , 'Q ',
365 3 0 , 0 , WRK , IMAX , JMAX , I2 )
367 C =================================================================
368 C >>> SAVE INPUT FIELD FOR DIAG.
369 C =================================================================
370 IF (NDIGFL.GT.0) THEN
375 C =================================================================
377 C =================================================================
380 CALL MOVERD(GCWC(1,1,K), WRK, IMAX*JMAX)
381 WRITE(ALVL(1:4), '(I4)') K
383 1 (NINFL , IDATE , -1 , ALVL , 'CWC ',
384 2 'CLOUD WATER CONTENT ', 'KG/KG ',
385 3 0 , 0 , WRK , IMAX , JMAX , I2 )
388 CALL MOVERD(GCVR(1,1,K), WRK, IMAX*JMAX)
389 WRITE(ALVL(1:4), '(I4)') K
391 1 (NINFL , IDATE , -1 , ALVL , 'CVR ',
392 2 'CLOUD COVER ', '- ',
393 3 0 , 0 , WRK , IMAX , JMAX , I2 )
396 C =================================================================
398 C =================================================================
400 CALL MOVERD(GUMB(1,1,K), WRK, IMAX*JMAX)
401 WRITE(ALVL(1:4), '(I4)') K
403 1 (NINFL , IDATE , -1 , ALVL , 'UMB ',
404 2 'UPWARD MASS FLUX AT CLOUD BASE ', 'KG/S/M**2 ',
405 3 0 , 0 , WRK , IMAX , JMAX , I2 )
409 C *****************************************************************
410 C >>> SST ANOMALY <<<
411 C *****************************************************************
412 IF( NSSTFL.NE.-1 ) THEN
413 CALL GETTYP(NSSTFL,IOTYP)
416 C CALL GVDFIR(NSSTFL,
417 C 1 IDSST,IBACK,IM,JM,MDLINF,DTHPRO,CINF,ITYP,IRTN)
418 C WRITE(6,*) 'GVDFIR:IRTN=',IRTN
419 C CALL GVDFNR(NSSTFL,IDSST,0,'SURF','SSTA',
420 C 1 LABEL,JTINF,SSTA,IRTN)
421 C WRITE(6,*) 'GVDFNR:IRTN=',IRTN
422 WRITE(*,*)' UNKNOWN IOTYP:1'
424 ELSE IF(IOTYP.EQ.3) THEN
425 C =================================================================
427 C =================================================================
430 O TYPE ,IDSST ,FILE ,MODEL ,RESL ,EXPR ,KTUNIT,IDTYPE,
432 O IMD ,JMD ,NPROD ,FLONID, FLATID,
433 O XID ,XJD ,XLATD ,XLOND ,
435 O IMM ,JMM ,NPROM ,FLONIM, FLATIM,
436 O XIM ,XJM ,XLATM ,XLONM ,
437 O VCODM ,KMM ,AAM ,BBM ,
439 C =================================================================
440 C >>> SST ANOMALLY <<<
441 C =================================================================
448 O LEVEL , ELEM , TITLE , UNIT , KTSD , KTSA ,
452 IF(ELEM.NE.'SSTA') GOTO 3001
453 WRITE(6,*) '## ', TITLE, '(',UNIT,')'
456 WRITE(6,*) '## ', IDSST, KT
457 IF( IDCHCK.EQ.1 ) THEN
458 CALL CVDATE( IDGES, IDSST, 24 )
459 IF( IDATE(1).NE.IDGES(1).OR.IDATE(2).NE.IDGES(2).OR.
460 1 IDATE(3).NE.IDGES(3) ) THEN
461 WRITE(6,*) 'SSTA : DATE CHECK ERROR'
466 CALL LT2GAU(SSTA,ISST,JSST,IMAX,JMAX,COLRAD,GSST,DY,LY)
467 CALL MOVERD(GSST, WRK, IMAX*JMAX)
469 1(NINFL , IDATE , -1 , 'SURF', 'SSTA',
470 2 'SST ANOMALLY ', 'K ',
471 3 0 , 0 , WRK , IMAX , JMAX , I2 )
472 WRITE(6,*) '## SST ANOMALLY WAS WRITTEN'
476 C *****************************************************************
477 C >>> SNOW ANALYSIS <<<
478 C *****************************************************************
479 IF( NSNWFL.NE.-1 ) THEN
480 C =================================================================
482 C =================================================================
485 O TYPE ,IDSST ,FILE ,MODEL ,RESL ,EXPR ,KTUNIT,IDTYPE,
487 O IMD ,JMD ,NPROD ,FLONID, FLATID,
488 O XID ,XJD ,XLATD ,XLOND ,
490 O IMM ,JMM ,NPROM ,FLONIM, FLATIM,
491 O XIM ,XJM ,XLATM ,XLONM ,
492 O VCODM ,KMM ,AAM ,BBM ,
497 C =================================================================
498 C >>> SNOW ANALYSIS <<<
499 C =================================================================
503 O LEVEL , ELEM , TITLE , UNIT , KTSD , KTSA ,
507 WRITE(6,*) '## ', TITLE, '(',UNIT,')'
508 WRITE(6,*) '## ', IDSST, KT
509 IF( IDCHCK.EQ.1 ) THEN
510 CALL CVDATE( IDGES, IDSST, 24 )
511 IF( IDATE(1).NE.IDGES(1).OR.IDATE(2).NE.IDGES(2).OR.
512 1 IDATE(3).NE.IDGES(3) ) THEN
513 WRITE(6,*) 'SNOW : DATE CHECK ERROR'
518 CALL SETWHT (IMAX,JMAX,DP,IP,GAUL,GAUW,COCOT)
521 WORK(I+1,J+1)=SEWA(I,J)
524 WORK( 1,J+1)=WORK(361,J+1)
525 WORK(362,J+1)=WORK( 2,J+1)
528 WORK(I, 1)=WORK(I, 2)
529 WORK(I,182)=WORK(I,181)
531 CALL INTERP(WORK,GSNW,IMAX,JMAX,DP,IP)
535 GSNW(I,J)=GSNW(I,J)/100.0
539 CALL MOVERD(GSNW, WRK, IMAX*JMAX)
541 1(NINFL , IDATE , -1 , 'SURF', 'SEW ',
542 2 'SNOW EQUIVALENT WATER ', 'M ',
543 3 0 , 0 , WRK , IMAX , JMAX , I2 )
544 WRITE(6,*) '## SNOW ANALYSIS WAS WRITTEN'
546 C =================================================================
548 C =================================================================
549 WRITE(6,*) '## PREGSM IS NORMAL ENDED'