70 use vrbls4d, only: smoke, fv3dust, coarsepm
71 use vrbls3d, only: zint, pint, t, pmid, q, f_rimef
72 use vrbls2d, only: ths, qs, qvg, qv2m, tsnow, tg, smstav, smstot, &
73 cmc, sno, snoavg, psfcavg, t10avg, snonc, ivgtyp, &
74 si, potevp, dzice, qwbs, vegfrc, isltyp, pshltr, &
75 tshltr, qshltr, mrshltr, maxtshltr, mintshltr, &
76 maxrhshltr, minrhshltr, u10, psfcavg, v10, u10max, &
77 v10max, th10, t10m, q10, wspd10max, &
78 wspd10umax, wspd10vmax, prec, sr, &
79 cprate, avgcprate, avgprec, acprec, cuprec, ancprc, &
80 lspa, acsnow, acsnom, snowfall,ssroff, bgroff, &
81 runoff, pcp_bucket, rainnc_bucket, snow_bucket, &
82 snownc, tmax, graup_bucket, graupelnc, qrmax, sfclhx,&
83 rainc_bucket, sfcshx, subshx, snopcx, sfcuvx, &
84 sfcvx, smcwlt, suntime, pd, sfcux, sfcuxi, sfcvxi, sfcevp, z0, &
85 ustar, mdltaux, mdltauy, gtaux, gtauy, twbs, &
86 sfcexc, grnflx, islope, czmean, czen, rswin,akhsavg ,&
87 akmsavg, u10h, v10h,snfden,sndepac,qvl1, &
88 spduv10mean,swradmean,swnormmean,prate_max,fprate_max &
89 ,fieldcapa,edir,ecan,etrans,esnow,u10mean,v10mean, &
90 avgedir,avgecan,avgetrans,avgesnow,acgraup,acfrain, &
91 acond,maxqshltr,minqshltr,avgpotevp,avgprec_cont, &
92 avgcprate_cont,sst,pcp_bucket1,rainnc_bucket1, &
93 snow_bucket1, rainc_bucket1, graup_bucket1, &
94 frzrn_bucket, snow_acm, snow_bkt, &
95 shdmin, shdmax, lai, ch10,cd10,landfrac,paha,pahi, &
96 tecan,tetran,tedir,twa,ifi_apcp
97 use soil, only: stc, sllevel, sldpth, smc, sh2o
98 use masks, only: lmh, sm, sice, htm, gdlat, gdlon
100 use params_mod, only: p1000, capa, h1m12, pq0, a2,a3, a4, h1, d00, d01,&
101 eps, oneps, d001, h99999, h100, small, h10e5, &
102 elocp, g, xlai, tfrz, rd
103 use ctlblk_mod, only: jsta, jend, lm, spval, grib, cfld, fld_info, &
104 datapd, nsoil, isf_surface_physics, tprec, ifmin,&
105 modelname, tmaxmin, pthresh, dtq2, dt, nphs, &
106 ifhr, prec_acc_dt, sdat, ihrst, jsta_2l, jend_2u,&
107 lp1, imp_physics, me, asrfc, tsrfc, pt, pdtop, &
108 mpi_comm_comp, im, jm, prec_acc_dt1, &
109 ista, iend, ista_2l, iend_2u
110 use rqstfld_mod, only: iget, lvls, id, iavblfld, lvlsxml
111 use grib2_module, only: read_grib2_head, read_grib2_sngle
125 real,
PARAMETER :: ptrace = 0.000254e0
128 integer,
parameter :: nalg=5, nosoiltype=9
129 real,
PARAMETER :: c2k = 273.15, sec2hr = 1./3600.
133 integer,
dimension(ista:iend,jsta:jend) :: nroots, iwx1
134 real,
allocatable,
dimension(:,:) :: zsfc, psfc, tsfc, qsfc, &
135 rhsfc, thsfc, dwpsfc, p1d, &
137 smcdry, smcmax,doms, domr, &
138 domip, domzr, rsmin, smcref,&
139 rcq, rct, rcsoil, gc, rcs
141 real,
dimension(ista:iend,jsta:jend) :: evp
142 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: egrid1, egrid2
143 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid2
144 real,
dimension(im,jm) :: grid1
145 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: iceg
147 real,
allocatable,
dimension(:,:,:) :: sleet, rain, freezr, snow
151 REAL totprcp, snowratio,t2,rainl
154 integer i,j,iwx,itmaxmin,ifincr,isvalue,ii,jj, &
155 itprec,itsrfc,l,ls,iveg,llmh, &
156 ivg,irtn,iseed, icat, cnt_snowratio(10),icnt_snow_rain_mixed
158 real rdtphs,tlow,tsfck,qsat,dtop,dbot,sneqv,rrnum,sfcprs,sfcq, &
159 rc,sfctmp,sncovr,factrs,solar, s,tk,tl,w,t2c,dlt,ape, &
160 qv,e,dwpt,dum1,dum2,dum3,dum1s,dum3s,dum21,dum216,es
162 character(len=256) :: ffgfile
163 character(len=256) :: arifile
165 logical file_exists, need_ifi
167 logical,
parameter :: debugprint = .false.
180 IF ( (iget(024)>0).OR.(iget(025)>0).OR. &
181 (iget(026)>0).OR.(iget(027)>0).OR. &
182 (iget(028)>0).OR.(iget(029)>0).OR. &
184 (iget(034)>0).OR.(iget(076)>0) )
THEN
186 allocate(zsfc(ista:iend,jsta:jend), psfc(ista:iend,jsta:jend), tsfc(ista:iend,jsta:jend)&
187 ,rhsfc(ista:iend,jsta:jend), thsfc(ista:iend,jsta:jend), qsfc(ista:iend,jsta:jend))
197 IF(zint(i,j,lm+1) < spval) &
198 zsfc(i,j) = zint(i,j,lm+1)
199 psfc(i,j) = pint(i,j,nint(lmh(i,j))+1)
202 thsfc(i,j) = ths(i,j)
204 IF(thsfc(i,j) /= spval .and. psfc(i,j) /= spval) &
205 tsfc(i,j) = thsfc(i,j)*(psfc(i,j)/p1000)**capa
214 IF(tsfc(i,j) < spval)
then
215 IF(qs(i,j)<spval) qsfc(i,j) = max(h1m12,qs(i,j))
218 IF(modelname ==
'RAPR')
THEN
219 qsat = max(0.0001,pq0/psfc(i,j)*exp(a2*(tsfck-a3)/(tsfck-a4)))
220 elseif (modelname ==
'GFS')
then
222 qsat = con_eps*es/(psfc(i,j)+con_epsm1*es)
224 qsat = pq0/psfc(i,j)*exp(a2*(tsfck-a3)/(tsfck-a4))
226 rhsfc(i,j) = max(d01, min(h1,qsfc(i,j)/qsat))
228 qsfc(i,j) = rhsfc(i,j)*qsat
229 rhsfc(i,j) = rhsfc(i,j) * 100.0
230 evp(i,j) = d001*psfc(i,j)*qsfc(i,j)/(eps+oneps*qsfc(i,j))
252 IF (iget(024)>0)
THEN
253 if(grib ==
'grib2')
then
255 fld_info(cfld)%ifld = iavblfld(iget(024))
261 datapd(i,j,cfld) = psfc(ii,jj)
268 IF (iget(025)>0)
THEN
270 if(grib ==
'grib2')
then
272 fld_info(cfld)%ifld = iavblfld(iget(025))
278 datapd(i,j,cfld) = zsfc(ii,jj)
283 if (
allocated(zsfc))
deallocate(zsfc)
284 if (
allocated(psfc))
deallocate(psfc)
287 IF (iget(026)>0)
THEN
288 if(grib ==
'grib2')
then
290 fld_info(cfld)%ifld = iavblfld(iget(026))
296 datapd(i,j,cfld) = tsfc(ii,jj)
301 if (
allocated(tsfc))
deallocate(tsfc)
304 IF (iget(027)>0)
THEN
305 if(grib==
'grib2')
then
307 fld_info(cfld)%ifld=iavblfld(iget(027))
313 datapd(i,j,cfld) = thsfc(ii,jj)
318 if (
allocated(thsfc))
deallocate(thsfc)
321 IF (iget(028)>0)
THEN
323 if(grib==
'grib2')
then
325 fld_info(cfld)%ifld=iavblfld(iget(028))
331 datapd(i,j,cfld) = qsfc(ii,jj)
336 if (
allocated(qsfc))
deallocate(qsfc)
339 IF (iget(029)>0)
THEN
340 allocate(dwpsfc(ista:iend,jsta:jend))
342 if(grib==
'grib2')
then
344 fld_info(cfld)%ifld=iavblfld(iget(029))
350 datapd(i,j,cfld) = dwpsfc(ii,jj)
354 if (
allocated(dwpsfc))
deallocate(dwpsfc)
358 IF (iget(076)>0)
THEN
359 if(grib==
'grib2')
then
361 fld_info(cfld)%ifld=iavblfld(iget(076))
367 if(rhsfc(ii,jj) /= spval)
then
368 datapd(i,j,cfld) = max(h1,min(h100,rhsfc(ii,jj)))
370 datapd(i,j,cfld) = spval
376 if (
allocated(rhsfc))
deallocate(rhsfc)
383 IF (iget(762)>0)
THEN
384 if(grib==
'grib2')
then
386 fld_info(cfld)%ifld=iavblfld(iget(762))
392 datapd(i,j,cfld) = qvg(ii,jj)
400 IF (iget(760)>0)
THEN
401 if(grib==
'grib2')
then
403 fld_info(cfld)%ifld=iavblfld(iget(760))
409 datapd(i,j,cfld) = qv2m(ii,jj)
416 IF (iget(761)>0)
THEN
417 if(grib==
'grib2')
then
419 fld_info(cfld)%ifld=iavblfld(iget(761))
425 datapd(i,j,cfld) = tsnow(ii,jj)
432 IF (iget(724)>0)
THEN
433 if(grib==
'grib2')
then
435 fld_info(cfld)%ifld=iavblfld(iget(724))
441 datapd(i,j,cfld) = snfden(ii,jj)
448 IF (iget(725)>0)
THEN
453 ifincr = mod(ifhr,itprec)
454 IF(ifmin >= 1)ifincr = mod(ifhr*60+ifmin,itprec*60)
461 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
467 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
469 IF (id(18)<0) id(18) = 0
470 if(grib==
'grib2')
then
472 fld_info(cfld)%ifld=iavblfld(iget(725))
473 fld_info(cfld)%ntrange=1
474 fld_info(cfld)%tinvstat=ifhr
480 if(sndepac(ii,jj)<spval)
then
481 if(modelname==
'FV3R')
then
482 datapd(i,j,cfld) = sndepac(ii,jj)/(1e3)
484 datapd(i,j,cfld) = sndepac(ii,jj)
487 datapd(i,j,cfld) = spval
503 IF (iget(116)>0)
THEN
504 IF (lvls(l,iget(116))>0)
THEN
505 IF(isf_surface_physics==3)
THEN
506 if(grib==
'grib2')
then
508 fld_info(cfld)%ifld=iavblfld(iget(116))
509 fld_info(cfld)%lvl=lvlsxml(l,iget(116))
515 datapd(i,j,cfld) = stc(ii,jj,l)
524 dtop = dtop + sldpth(ls)
526 dbot = dtop + sldpth(l)
527 if(grib==
'grib2')
then
529 fld_info(cfld)%ifld=iavblfld(iget(116))
530 fld_info(cfld)%lvl=lvlsxml(l,iget(116))
536 datapd(i,j,cfld) = stc(ii,jj,l)
546 IF (iget(117)>0)
THEN
547 IF (lvls(l,iget(117))>0)
THEN
548 IF(isf_surface_physics==3)
THEN
549 if(grib==
'grib2')
then
551 fld_info(cfld)%ifld=iavblfld(iget(117))
552 fld_info(cfld)%lvl=lvlsxml(l,iget(117))
558 datapd(i,j,cfld) = smc(ii,jj,l)
565 dtop = dtop + sldpth(ls)
567 dbot = dtop + sldpth(l)
568 if(grib==
'grib2')
then
570 fld_info(cfld)%ifld=iavblfld(iget(117))
571 fld_info(cfld)%lvl=lvlsxml(l,iget(117))
577 datapd(i,j,cfld) = smc(ii,jj,l)
585 IF (iget(225)>0)
THEN
586 IF (lvls(l,iget(225))>0)
THEN
587 IF(isf_surface_physics==3)
THEN
588 if(grib==
'grib2')
then
590 fld_info(cfld)%ifld=iavblfld(iget(225))
591 fld_info(cfld)%lvl=lvlsxml(l,iget(225))
597 datapd(i,j,cfld) = sh2o(ii,jj,l)
604 dtop = dtop + sldpth(ls)
606 dbot = dtop + sldpth(l)
607 if(grib==
'grib2')
then
609 fld_info(cfld)%ifld=iavblfld(iget(225))
610 fld_info(cfld)%lvl=lvlsxml(l,iget(225))
616 datapd(i,j,cfld) = sh2o(ii,jj,l)
627 IF (iget(115)>0.or.iget(571)>0)
THEN
629 if(grib==
'grib2')
then
631 fld_info(cfld)%ifld=iavblfld(iget(115))
637 datapd(i,j,cfld) = tg(ii,jj)
642 if(iget(571)>0.and.grib==
'grib2')
then
644 fld_info(cfld)%ifld=iavblfld(iget(571))
650 datapd(i,j,cfld) = tg(ii,jj)
657 IF (iget(171)>0)
THEN
661 IF(smstav(i,j) /= spval)
THEN
662 IF ( modelname ==
'FV3R')
THEN
663 grid1(i,j) = smstav(i,j)
665 grid1(i,j) = smstav(i,j)*100.
672 if(grib==
'grib2')
then
674 fld_info(cfld)%ifld=iavblfld(iget(171))
680 datapd(i,j,cfld) = grid1(ii,jj)
687 IF (iget(036)>0)
THEN
691 IF(smstot(i,j)/=spval)
THEN
692 IF(sm(i,j) > small .AND. sice(i,j) < small)
THEN
695 grid1(i,j) = smstot(i,j)
702 if(grib==
'grib2')
then
704 fld_info(cfld)%ifld=iavblfld(iget(036))
710 datapd(i,j,cfld) = grid1(ii,jj)
717 IF ( iget(118)>0 )
THEN
718 IF(modelname ==
'RAPR')
THEN
722 IF(cmc(i,j) /= spval)
then
723 grid1(i,j) = cmc(i,j)
733 IF(cmc(i,j) /= spval)
then
734 grid1(i,j) = cmc(i,j)*1000.
741 if(grib==
'grib2')
then
743 fld_info(cfld)%ifld=iavblfld(iget(118))
749 datapd(i,j,cfld) = grid1(ii,jj)
756 IF ( iget(119)>0 )
THEN
758 if(grib==
'grib2')
then
760 fld_info(cfld)%ifld=iavblfld(iget(119))
766 datapd(i,j,cfld) = sno(ii,jj)
773 IF ( iget(500)>0 )
THEN
779 grid1(i,j) = snoavg(i,j)
780 if (snoavg(i,j) /= spval) grid1(i,j) = 100.*snoavg(i,j)
783 CALL
bound(grid1,d00,h100)
787 ifincr = mod(ifhr,itsrfc)
788 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
793 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
799 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
801 IF (id(18)<0) id(18) = 0
802 if(grib==
'grib2')
then
804 fld_info(cfld)%ifld=iavblfld(iget(500))
806 fld_info(cfld)%ntrange=1
808 fld_info(cfld)%ntrange=0
810 fld_info(cfld)%tinvstat=ifhr-id(18)
818 datapd(i,j,cfld) = grid1(ii,jj)
825 IF ( iget(501)>0 )
THEN
836 if(grib==
'grib2')
then
838 fld_info(cfld)%ifld=iavblfld(iget(501))
840 fld_info(cfld)%ntrange=1
842 fld_info(cfld)%ntrange=0
844 fld_info(cfld)%tinvstat=ifhr-id(18)
850 datapd(i,j,cfld) = psfcavg(ii,jj)
857 IF ( iget(502)>0 )
THEN
868 id(10) = mod(isvalue/256,256)
869 id(11) = mod(isvalue,256)
871 if(grib==
'grib2')
then
873 fld_info(cfld)%ifld=iavblfld(iget(502))
875 fld_info(cfld)%ntrange=1
877 fld_info(cfld)%ntrange=0
879 fld_info(cfld)%tinvstat=ifhr-id(18)
885 datapd(i,j,cfld) = t10avg(ii,jj)
892 IF ( iget(244)>0 )
THEN
896 grid1(i,j) = snonc(i,j)
902 if (itprec /= 0)
then
903 ifincr = mod(ifhr,itprec)
904 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
911 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
917 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
919 IF (id(18)<0) id(18) = 0
921 if(grib==
'grib2')
then
923 fld_info(cfld)%ifld=iavblfld(iget(244))
924 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
929 IF ( iget(120)>0 )
THEN
934 IF ( sno(i,j) /= spval )
THEN
938 CALL snfrac(sneqv,iveg,sncovr)
939 grid1(i,j) = sncovr*100.
943 CALL
bound(grid1,d00,h100)
944 if(grib==
'grib2')
then
946 fld_info(cfld)%ifld=iavblfld(iget(120))
952 datapd(i,j,cfld) = grid1(ii,jj)
958 IF ( iget(224)>0 )
THEN
966 IF(si(i,j) /= spval) grid1(i,j) = si(i,j)*0.001
970 if(grib==
'grib2')
then
972 fld_info(cfld)%ifld=iavblfld(iget(224))
978 datapd(i,j,cfld) = grid1(ii,jj)
984 IF ( iget(242)>0 )
THEN
985 if(grib==
'grib2')
then
987 fld_info(cfld)%ifld=iavblfld(iget(242))
993 datapd(i,j,cfld) = potevp(ii,jj)
999 IF ( iget(349)>0 )
THEN
1000 if(grib==
'grib2')
then
1002 fld_info(cfld)%ifld=iavblfld(iget(349))
1008 datapd(i,j,cfld) = dzice(ii,jj)
1016 IF (modelname ==
'NCAR'.OR. modelname ==
'NMM' &
1017 .OR. modelname ==
'FV3R' .OR. modelname ==
'RAPR')
THEN
1026 IF ( iget(228)>0 .OR. iget(229)>0 &
1027 .OR.iget(230)>0 .OR. iget(231)>0 &
1028 .OR.iget(232)>0 .OR. iget(233)>0)
THEN
1030 allocate(smcdry(ista:iend,jsta:jend), &
1031 smcmax(ista:iend,jsta:jend))
1038 IF( (modelname/=
'RAPR') .AND. (abs(sm(i,j)-0.) < 1.0e-5) .AND. &
1039 & (abs(sice(i,j)-0.) < 1.0e-5) )
THEN
1040 CALL etcalc(qwbs(i,j),potevp(i,j),sno(i,j),vegfrc(i,j) &
1041 & , isltyp(i,j),sh2o(i,j,1:1),cmc(i,j) &
1042 & , ecan(i,j),edir(i,j),etrans(i,j),esnow(i,j) &
1043 & , smcdry(i,j),smcmax(i,j) )
1055 IF ( iget(228)>0 )
THEN
1056 if(grib==
'grib2')
then
1058 fld_info(cfld)%ifld=iavblfld(iget(228))
1064 datapd(i,j,cfld) = ecan(ii,jj)
1070 IF ( iget(229)>0 )
THEN
1071 if(grib==
'grib2')
then
1073 fld_info(cfld)%ifld=iavblfld(iget(229))
1079 datapd(i,j,cfld) = edir(ii,jj)
1085 IF ( iget(230)>0 )
THEN
1086 if(grib==
'grib2')
then
1088 fld_info(cfld)%ifld=iavblfld(iget(230))
1089 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = etrans(ista:iend,jsta:jend)
1093 IF ( iget(231)>0 )
THEN
1094 if(grib==
'grib2')
then
1096 fld_info(cfld)%ifld=iavblfld(iget(231))
1097 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = esnow(ista:iend,jsta:jend)
1101 IF ( iget(232)>0 )
THEN
1102 if(grib==
'grib2')
then
1104 fld_info(cfld)%ifld=iavblfld(iget(232))
1110 datapd(i,j,cfld) = smcdry(ii,jj)
1116 IF ( iget(233)>0 )
THEN
1117 if(grib==
'grib2')
then
1119 fld_info(cfld)%ifld=iavblfld(iget(233))
1125 datapd(i,j,cfld) = smcmax(ii,jj)
1136 if (
allocated(smcdry))
deallocate(smcdry)
1137 if (
allocated(smcmax))
deallocate(smcmax)
1141 IF ( iget(512)>0 )
THEN
1142 if(grib==
'grib2')
then
1144 fld_info(cfld)%ifld=iavblfld(iget(512))
1150 datapd(i,j,cfld) = acond(ii,jj)
1156 IF ( iget(513)>0 )
THEN
1158 itsrfc = nint(tsrfc)
1159 IF(itsrfc /= 0)
then
1160 ifincr = mod(ifhr,itsrfc)
1161 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
1166 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1169 id(18) = ifhr-itsrfc
1171 id(18) = ifhr-ifincr
1172 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1174 IF (id(18)<0) id(18) = 0
1175 if(grib==
'grib2')
then
1177 fld_info(cfld)%ifld=iavblfld(iget(513))
1179 fld_info(cfld)%ntrange=1
1181 fld_info(cfld)%ntrange=0
1183 fld_info(cfld)%tinvstat=ifhr-id(18)
1189 datapd(i,j,cfld) = avgecan(ii,jj)
1195 IF ( iget(514)>0 )
THEN
1197 itsrfc = nint(tsrfc)
1198 IF(itsrfc /= 0)
then
1199 ifincr = mod(ifhr,itsrfc)
1200 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
1205 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1208 id(18) = ifhr-itsrfc
1210 id(18) = ifhr-ifincr
1211 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1213 IF (id(18)<0) id(18) = 0
1214 if(grib==
'grib2')
then
1216 fld_info(cfld)%ifld=iavblfld(iget(514))
1218 fld_info(cfld)%ntrange=1
1220 fld_info(cfld)%ntrange=0
1222 fld_info(cfld)%tinvstat=ifhr-id(18)
1228 datapd(i,j,cfld) = avgedir(ii,jj)
1234 IF ( iget(515)>0 )
THEN
1236 itsrfc = nint(tsrfc)
1237 IF(itsrfc /= 0)
then
1238 ifincr = mod(ifhr,itsrfc)
1239 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
1244 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1247 id(18) = ifhr-itsrfc
1249 id(18) = ifhr-ifincr
1250 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1252 IF (id(18)<0) id(18) = 0
1253 if(grib==
'grib2')
then
1255 fld_info(cfld)%ifld=iavblfld(iget(515))
1257 fld_info(cfld)%ntrange=1
1259 fld_info(cfld)%ntrange=0
1261 fld_info(cfld)%tinvstat=ifhr-id(18)
1262 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = avgetrans(ista:iend,jsta:jend)
1266 IF ( iget(516)>0 )
THEN
1268 itsrfc = nint(tsrfc)
1269 IF(itsrfc /= 0)
then
1270 ifincr = mod(ifhr,itsrfc)
1271 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
1276 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1279 id(18) = ifhr-itsrfc
1281 id(18) = ifhr-ifincr
1282 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1284 IF (id(18)<0) id(18) = 0
1285 if(grib==
'grib2')
then
1287 fld_info(cfld)%ifld=iavblfld(iget(516))
1289 fld_info(cfld)%ntrange=1
1291 fld_info(cfld)%ntrange=0
1293 fld_info(cfld)%tinvstat=ifhr-id(18)
1294 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = avgesnow(ista:iend,jsta:jend)
1298 IF ( iget(996)>0 )
THEN
1299 if(grib==
'grib2')
then
1301 fld_info(cfld)%ifld=iavblfld(iget(996))
1307 datapd(i,j,cfld) = landfrac(ii,jj)
1313 IF ( iget(997)>0 )
THEN
1314 if(grib==
'grib2')
then
1316 fld_info(cfld)%ifld=iavblfld(iget(997))
1322 datapd(i,j,cfld) = pahi(ii,jj)
1328 IF ( iget(998)>0 )
THEN
1329 if(grib==
'grib2')
then
1331 fld_info(cfld)%ifld=iavblfld(iget(998))
1337 datapd(i,j,cfld) = twa(ii,jj)
1343 IF ( iget(999)>0 )
THEN
1347 grid1(i,j) = tecan(i,j)
1351 itprec = nint(tprec)
1352 if (itprec /= 0)
then
1353 ifincr = mod(ifhr,itprec)
1354 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
1360 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1363 id(18) = ifhr-itprec
1365 id(18) = ifhr-ifincr
1366 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1368 IF (id(18)<0) id(18) = 0
1369 if(grib==
'grib2')
then
1371 fld_info(cfld)%ifld=iavblfld(iget(999))
1372 fld_info(cfld)%ntrange=1
1373 fld_info(cfld)%tinvstat=ifhr-id(18)
1379 datapd(i,j,cfld) = grid1(ii,jj)
1385 IF ( iget(1000)>0 )
THEN
1389 grid1(i,j) = tetran(i,j)
1393 itprec = nint(tprec)
1394 if (itprec /= 0)
then
1395 ifincr = mod(ifhr,itprec)
1396 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
1402 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1405 id(18) = ifhr-itprec
1407 id(18) = ifhr-ifincr
1408 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1410 IF (id(18)<0) id(18) = 0
1411 if(grib==
'grib2')
then
1413 fld_info(cfld)%ifld=iavblfld(iget(1000))
1414 fld_info(cfld)%ntrange=1
1415 fld_info(cfld)%tinvstat=ifhr-id(18)
1421 datapd(i,j,cfld) = grid1(ii,jj)
1427 IF ( iget(1001)>0 )
THEN
1431 grid1(i,j) = tedir(i,j)
1435 itprec = nint(tprec)
1436 if (itprec /= 0)
then
1437 ifincr = mod(ifhr,itprec)
1438 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
1444 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1447 id(18) = ifhr-itprec
1449 id(18) = ifhr-ifincr
1450 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1452 IF (id(18)<0) id(18) = 0
1453 if(grib==
'grib2')
then
1455 fld_info(cfld)%ifld=iavblfld(iget(1001))
1456 fld_info(cfld)%ntrange=1
1457 fld_info(cfld)%tinvstat=ifhr-id(18)
1463 datapd(i,j,cfld) = grid1(ii,jj)
1470 IF (iget(1002)>0)
THEN
1478 IF(paha(i,j)/=spval)
THEN
1479 grid1(i,j)=-1.*paha(i,j)*rrnum
1481 grid1(i,j)=paha(i,j)
1486 itsrfc = nint(tsrfc)
1487 IF(itsrfc /= 0)
then
1488 ifincr = mod(ifhr,itsrfc)
1489 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
1494 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1497 id(18) = ifhr-itsrfc
1499 id(18) = ifhr-ifincr
1500 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1502 IF (id(18)<0) id(18) = 0
1503 if(grib==
'grib2')
then
1505 fld_info(cfld)%ifld=iavblfld(iget(1002))
1507 fld_info(cfld)%ntrange=1
1509 fld_info(cfld)%ntrange=0
1511 fld_info(cfld)%tinvstat=ifhr-id(18)
1512 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
1522 IF ( (iget(106)>0).OR.(iget(112)>0).OR. &
1523 (iget(113)>0).OR.(iget(114)>0).OR. &
1524 (iget(138)>0).OR.(iget(414)>0).OR. &
1525 (iget(546)>0).OR.(iget(547)>0).OR. &
1526 (iget(548)>0).OR.(iget(739)>0).OR. &
1527 (iget(744)>0).OR.(iget(771)>0))
THEN
1529 if (.not.
allocated(psfc))
allocate(psfc(ista:iend,jsta:jend))
1532 IF(modelname ==
'NCAR' .OR. modelname==
'RSM'.OR. modelname==
'RAPR')
THEN
1535 tlow = t(i,j,nint(lmh(i,j)))
1536 psfc(i,j) = pint(i,j,nint(lmh(i,j))+1)
1537 pshltr(i,j) = psfc(i,j)*exp(-0.068283/tlow)
1548 IF (iget(106)>0)
THEN
1554 if(tshltr(i,j)/=spval)grid1(i,j)=tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
1555 IF(grid1(i,j)<200)print*,
'ABNORMAL 2MT ',i,j, &
1556 tshltr(i,j),pshltr(i,j)
1562 if(grib==
'grib2')
then
1564 fld_info(cfld)%ifld=iavblfld(iget(106))
1565 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = grid1(ista:iend,jsta:jend)
1570 IF (iget(546)>0)
THEN
1577 if(grib==
'grib2')
then
1579 fld_info(cfld)%ifld=iavblfld(iget(546))
1580 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = tshltr(ista:iend,jsta:jend)
1585 IF (iget(112)>0)
THEN
1588 grid1(i,j) = qshltr(i,j)
1591 CALL
bound(grid1,h1m12,h99999)
1592 if(grib==
'grib2')
then
1594 fld_info(cfld)%ifld=iavblfld(iget(112))
1595 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = grid1(ista:iend,jsta:jend)
1600 IF (iget(414)>0)
THEN
1603 grid1(i,j) = mrshltr(i,j)
1606 if(grib==
'grib2')
then
1608 fld_info(cfld)%ifld=iavblfld(iget(414))
1609 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
1614 allocate(p1d(ista:iend,jsta:jend), t1d(ista:iend,jsta:jend))
1615 IF ((iget(113)>0) .OR.(iget(547)>0).OR.(iget(548)>0))
THEN
1622 qv = max(1.e-5,(qshltr(i,j)/(1.-qshltr(i,j))))
1623 e = pshltr(i,j)/100.*qv/(0.62197+qv)
1624 dwpt = (243.5*log(e)-440.8)/(19.48-log(e))+273.15
1632 IF(qshltr(i,j)<spval.and.pshltr(i,j)<spval)
THEN
1633 evp(i,j) = pshltr(i,j)*qshltr(i,j)/(eps+oneps*qshltr(i,j))
1634 evp(i,j) = evp(i,j)*d001
1640 CALL
dewpoint(evp,egrid1(ista:iend,jsta:jend))
1643 IF (iget(113)>0)
THEN
1645 if(modelname==
'RAPR')
THEN
1649 t2=tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
1650 if(qshltr(i,j)/=spval)grid1(i,j)=min(egrid1(i,j),t2)
1656 if(qshltr(i,j)/=spval) grid1(i,j) = egrid1(i,j)
1660 if(grib==
'grib2')
then
1662 fld_info(cfld)%ifld=iavblfld(iget(113))
1663 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
1670 IF (iget(771)>0)
THEN
1673 evp(i,j)=p1d(i,j)*qvl1(i,j)/(eps+oneps*qvl1(i,j))
1674 evp(i,j)=evp(i,j)*d001
1677 CALL
dewpoint(evp,egrid1(ista:iend,jsta:jend))
1683 if(qvl1(i,j)/=spval)grid1(i,j) = min(egrid1(i,j),t1d(i,j))
1686 if(grib==
'grib2')
then
1688 fld_info(cfld)%ifld=iavblfld(iget(771))
1689 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
1695 IF ((iget(547)>0).OR.(iget(548)>0))
THEN
1700 if(tshltr(i,j)/=spval.and.pshltr(i,j)/=spval.and.qshltr(i,j)/=spval)
then
1702 grid1(i,j)=max(0.,tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa-egrid1(i,j))
1705 ape=(h10e5/pshltr(i,j))**capa
1706 grid2(i,j)=tshltr(i,j)*exp(elocp*qshltr(i,j)*ape/tshltr(i,j))
1715 IF (iget(547)>0)
THEN
1716 if(grib==
'grib2')
then
1718 fld_info(cfld)%ifld=iavblfld(iget(547))
1719 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
1723 IF (iget(548)>0)
THEN
1724 if(grib==
'grib2')
then
1726 fld_info(cfld)%ifld=iavblfld(iget(548))
1727 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid2(ista:iend,jsta:jend)
1736 IF (iget(114) > 0 .OR. iget(808) > 0)
THEN
1737 allocate(q1d(ista:iend,jsta:jend))
1741 IF(modelname==
'RAPR')
THEN
1742 llmh = nint(lmh(i,j))
1744 p1d(i,j) = pmid(i,j,llmh)
1745 t1d(i,j) = t(i,j,llmh)
1747 p1d(i,j) = pshltr(i,j)
1748 t1d(i,j) = tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
1750 q1d(i,j) = qshltr(i,j)
1754 CALL
calrh(p1d,t1d,q1d,egrid1(ista:iend,jsta:jend))
1756 if (
allocated(q1d))
deallocate(q1d)
1760 if(qshltr(i,j) /= spval)
then
1761 grid1(i,j) = egrid1(i,j)*100.
1767 CALL
bound(grid1,h1,h100)
1768 IF (iget(114) > 0)
THEN
1769 if(grib ==
'grib2')
then
1771 fld_info(cfld)%ifld = iavblfld(iget(114))
1777 datapd(i,j,cfld) = grid1(ii,jj)
1788 if(t1d(i,j)/=spval.and.u10h(i,j)/=spval.and.v10h(i,j)<spval)
then
1789 dum1 = (t1d(i,j)-tfrz)*1.8+32.
1790 dum2 = sqrt(u10h(i,j)**2.0+v10h(i,j)**2.0)/0.44704
1791 dum3 = egrid1(i,j) * 100.0
1794 IF(dum1 <= 50.)
THEN
1796 grid2(i,j) = 35.74 + 0.6215*dum1 &
1797 - 35.75*dum216 + 0.4275*dum1*dum216
1798 grid2(i,j) =(grid2(i,j)-32.)/1.8+tfrz
1799 ELSE IF(dum1 > 80.)
THEN
1802 grid2(i,j) = -42.379 + 2.04901523*dum1 &
1803 + 10.14333127*dum3 &
1804 - 0.22475541*dum1*dum3 &
1805 - 0.00683783*dum1s &
1806 - 0.05481717*dum3s &
1807 + 0.00122874*dum1s*dum3 &
1808 + 0.00085282*dum1*dum3s &
1809 - 0.00000199*dum1s*dum3s
1810 grid2(i,j) = (grid2(i,j)-32.)/1.8 + tfrz
1812 grid2(i,j) = t1d(i,j)
1820 if(grib ==
'grib2')
then
1822 fld_info(cfld)%ifld = iavblfld(iget(808))
1828 datapd(i,j,cfld) = grid2(ii,jj)
1837 if (
allocated(p1d))
deallocate (p1d)
1838 if (
allocated(t1d))
deallocate (t1d)
1841 IF (iget(138)>0)
THEN
1847 if(grib==
'grib2')
then
1849 fld_info(cfld)%ifld=iavblfld(iget(138))
1855 datapd(i,j,cfld) = pshltr(ii,jj)
1864 IF (iget(345)>0)
THEN
1871 tmaxmin = max(tmaxmin,1.)
1873 itmaxmin = int(tmaxmin)
1874 IF(itmaxmin /= 0)
then
1875 ifincr = mod(ifhr,itmaxmin)
1876 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
1881 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1884 id(18) = ifhr-itmaxmin
1886 id(18) = ifhr-ifincr
1887 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1889 IF (id(18)<0) id(18) = 0
1890 if(grib==
'grib2')
then
1892 fld_info(cfld)%ifld=iavblfld(iget(345))
1893 if(itmaxmin==0)
then
1894 fld_info(cfld)%ntrange=0
1896 fld_info(cfld)%ntrange=1
1898 fld_info(cfld)%tinvstat=ifhr-id(18)
1899 if(ifhr==0) fld_info(cfld)%tinvstat=0
1905 datapd(i,j,cfld) = maxtshltr(ii,jj)
1912 IF (iget(346)>0)
THEN
1920 itmaxmin = int(tmaxmin)
1921 IF(itmaxmin /= 0)
then
1922 ifincr = mod(ifhr,itmaxmin)
1923 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
1928 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1931 id(18) = ifhr-itmaxmin
1933 id(18) = ifhr-ifincr
1934 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1936 IF (id(18)<0) id(18) = 0
1937 if(grib==
'grib2')
then
1939 fld_info(cfld)%ifld=iavblfld(iget(346))
1940 if(itmaxmin==0)
then
1941 fld_info(cfld)%ntrange=0
1943 fld_info(cfld)%ntrange=1
1945 fld_info(cfld)%tinvstat=ifhr-id(18)
1946 if(ifhr==0) fld_info(cfld)%tinvstat=0
1952 datapd(i,j,cfld) = mintshltr(ii,jj)
1959 IF (iget(347)>0)
THEN
1963 if(maxrhshltr(i,j)/=spval) grid1(i,j)=maxrhshltr(i,j)*100.
1968 itmaxmin = int(tmaxmin)
1969 IF(itmaxmin /= 0)
then
1970 ifincr = mod(ifhr,itmaxmin)
1971 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
1976 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
1979 id(18) = ifhr-itmaxmin
1981 id(18) = ifhr-ifincr
1982 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
1984 IF (id(18)<0) id(18) = 0
1985 if(grib==
'grib2')
then
1987 fld_info(cfld)%ifld=iavblfld(iget(347))
1988 if(itmaxmin==0)
then
1989 fld_info(cfld)%ntrange=0
1993 fld_info(cfld)%ntrange=1
1996 fld_info(cfld)%tinvstat=ifhr-id(18)
1997 if(ifhr==0) fld_info(cfld)%tinvstat=0
2005 datapd(i,j,cfld) = grid1(ii,jj)
2012 IF (iget(348)>0)
THEN
2016 if(minrhshltr(i,j)/=spval) grid1(i,j)=minrhshltr(i,j)*100.
2021 itmaxmin = int(tmaxmin)
2022 IF(itmaxmin /= 0)
then
2023 ifincr = mod(ifhr,itmaxmin)
2024 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
2029 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2032 id(18) = ifhr-itmaxmin
2034 id(18) = ifhr-ifincr
2035 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2037 IF (id(18)<0) id(18) = 0
2038 if(grib==
'grib2')
then
2040 fld_info(cfld)%ifld=iavblfld(iget(348))
2041 if(itmaxmin==0)
then
2042 fld_info(cfld)%ntrange=0
2046 fld_info(cfld)%ntrange=1
2049 fld_info(cfld)%tinvstat=ifhr-id(18)
2050 if(ifhr==0) fld_info(cfld)%tinvstat=0
2056 datapd(i,j,cfld) = grid1(ii,jj)
2064 IF (iget(510)>0)
THEN
2066 itmaxmin = int(tmaxmin)
2067 IF(itmaxmin /= 0)
then
2068 ifincr = mod(ifhr,itmaxmin)
2069 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
2074 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2077 id(18) = ifhr-itmaxmin
2079 id(18) = ifhr-ifincr
2080 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2082 IF (id(18)<0) id(18) = 0
2083 if(grib==
'grib2')
then
2085 fld_info(cfld)%ifld=iavblfld(iget(510))
2086 if(itmaxmin==0)
then
2087 fld_info(cfld)%ntrange=0
2089 fld_info(cfld)%ntrange=1
2091 fld_info(cfld)%tinvstat=ifhr-id(18)
2097 datapd(i,j,cfld) = maxqshltr(ii,jj)
2104 IF (iget(511)>0)
THEN
2106 itmaxmin = int(tmaxmin)
2107 IF(itmaxmin /= 0)
then
2108 ifincr = mod(ifhr,itmaxmin)
2109 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itmaxmin*60)
2114 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2117 id(18) = ifhr-itmaxmin
2119 id(18) = ifhr-ifincr
2120 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2122 IF (id(18)<0) id(18) = 0
2123 if(grib==
'grib2')
then
2125 fld_info(cfld)%ifld=iavblfld(iget(511))
2126 if(itmaxmin==0)
then
2127 fld_info(cfld)%ntrange=0
2129 fld_info(cfld)%ntrange=1
2131 fld_info(cfld)%tinvstat=ifhr-id(18)
2137 datapd(i,j,cfld) = minqshltr(ii,jj)
2145 IF (iget(739)>0)
THEN
2149 if(t(i,j,lm)/=spval.and.pmid(i,j,lm)/=spval.and.smoke(i,j,lm,1)/=spval)&
2150 grid1(i,j) = (1./rd)*(pmid(i,j,lm)/t(i,j,lm))*smoke(i,j,lm,1)/(1e9)
2153 if(grib==
'grib2')
then
2155 fld_info(cfld)%ifld=iavblfld(iget(739))
2156 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = grid1(ista:iend,jsta:jend)
2162 IF (iget(744)>0)
THEN
2166 if(t(i,j,lm)/=spval.and.pmid(i,j,lm)/=spval.and.fv3dust(i,j,lm,1)/=spval)&
2167 grid1(i,j) = (1./rd)*(pmid(i,j,lm)/t(i,j,lm))*fv3dust(i,j,lm,1)/(1e9)
2170 if(grib==
'grib2')
then
2172 fld_info(cfld)%ifld=iavblfld(iget(744))
2173 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = grid1(ista:iend,jsta:jend)
2179 IF (iget(1014)>0)
THEN
2183 if(t(i,j,lm)/=spval.and.pmid(i,j,lm)/=spval.and.coarsepm(i,j,lm,1)/=spval)&
2184 grid1(i,j) = (1./rd)*(pmid(i,j,lm)/t(i,j,lm))*coarsepm(i,j,lm,1)/(1e9)
2187 if(grib==
'grib2')
then
2189 fld_info(cfld)%ifld=iavblfld(iget(1014))
2190 datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = grid1(ista:iend,jsta:jend)
2197 IF ( (iget(064)>0).OR.(iget(065)>0).OR. &
2198 (iget(506)>0).OR.(iget(507)>0) )
THEN
2201 IF ((iget(064)>0).OR.(iget(065)>0))
THEN
2205 grid1(i,j) = u10(i,j)
2206 grid2(i,j) = v10(i,j)
2209 if(grib==
'grib2')
then
2211 fld_info(cfld)%ifld=iavblfld(iget(064))
2217 datapd(i,j,cfld) = grid1(ii,jj)
2221 fld_info(cfld)%ifld=iavblfld(iget(065))
2227 datapd(i,j,cfld) = grid2(ii,jj)
2233 IF (iget(730)>0)
THEN
2237 grid1(i,j)=spduv10mean(i,j)
2240 if(grib==
'grib2')
then
2243 fld_info(cfld)%ifld=iavblfld(iget(730))
2244 if(fld_info(cfld)%ntrange==0)
then
2245 if (ifhr==0 .and. ifmin==0)
then
2246 fld_info(cfld)%tinvstat=0
2248 fld_info(cfld)%tinvstat=ifincr
2250 fld_info(cfld)%ntrange=1
2252 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2257 IF (iget(731)>0)
THEN
2261 grid1(i,j)=u10mean(i,j)
2264 if(grib==
'grib2')
then
2266 fld_info(cfld)%ifld=iavblfld(iget(731))
2267 if(fld_info(cfld)%ntrange==0)
then
2268 if (ifhr==0 .and. ifmin==0)
then
2269 fld_info(cfld)%tinvstat=0
2271 fld_info(cfld)%tinvstat=ifincr
2273 fld_info(cfld)%ntrange=1
2275 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2279 IF (iget(732)>0)
THEN
2283 grid1(i,j)=v10mean(i,j)
2286 if(grib==
'grib2')
then
2288 fld_info(cfld)%ifld=iavblfld(iget(732))
2289 if(fld_info(cfld)%ntrange==0)
then
2290 if (ifhr==0 .and. ifmin==0)
then
2291 fld_info(cfld)%tinvstat=0
2293 fld_info(cfld)%tinvstat=ifincr
2295 fld_info(cfld)%ntrange=1
2297 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2301 IF (iget(733)>0 )
THEN
2305 grid1(i,j) = swradmean(i,j)
2308 if(grib==
'grib2')
then
2310 fld_info(cfld)%ifld=iavblfld(iget(733))
2311 if(fld_info(cfld)%ntrange==0)
then
2312 if (ifhr==0 .and. ifmin==0)
then
2313 fld_info(cfld)%tinvstat=0
2315 fld_info(cfld)%tinvstat=ifincr
2317 fld_info(cfld)%ntrange=1
2319 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2323 IF (iget(734)>0 )
THEN
2327 grid1(i,j) = swnormmean(i,j)
2330 if(grib==
'grib2')
then
2332 fld_info(cfld)%ifld=iavblfld(iget(734))
2333 if(fld_info(cfld)%ntrange==0)
then
2334 if (ifhr==0 .and. ifmin==0)
then
2335 fld_info(cfld)%tinvstat=0
2337 fld_info(cfld)%tinvstat=ifincr
2339 fld_info(cfld)%ntrange=1
2341 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2345 IF ((iget(506)>0).OR.(iget(507)>0))
THEN
2357 grid1(i,j) = u10max(i,j)
2358 grid2(i,j) = v10max(i,j)
2361 itsrfc = nint(tsrfc)
2362 if(grib==
'grib2')
then
2364 fld_info(cfld)%ifld=iavblfld(iget(506))
2366 fld_info(cfld)%ntrange=1
2368 fld_info(cfld)%ntrange=0
2370 fld_info(cfld)%tinvstat=ifhr-id(18)
2376 datapd(i,j,cfld) = grid1(ii,jj)
2380 fld_info(cfld)%ifld=iavblfld(iget(507))
2382 fld_info(cfld)%ntrange=1
2384 fld_info(cfld)%ntrange=0
2386 fld_info(cfld)%tinvstat=ifhr-id(18)
2392 datapd(i,j,cfld) = grid2(ii,jj)
2402 IF (iget(158)>0)
THEN
2406 grid1(i,j)=th10(i,j)
2409 if(grib==
'grib2')
then
2411 fld_info(cfld)%ifld=iavblfld(iget(158))
2417 datapd(i,j,cfld) = grid1(ii,jj)
2425 IF (iget(505)>0)
THEN
2429 grid1(i,j)=t10m(i,j)
2432 if(grib==
'grib2')
then
2434 fld_info(cfld)%ifld=iavblfld(iget(505))
2440 datapd(i,j,cfld) = grid1(ii,jj)
2448 IF (iget(159)>0)
THEN
2452 grid1(i,j) = q10(i,j)
2455 if(grib==
'grib2')
then
2457 fld_info(cfld)%ifld=iavblfld(iget(159))
2463 datapd(i,j,cfld) = grid1(ii,jj)
2473 IF (iget(422)>0)
THEN
2477 grid1(i,j) = wspd10max(i,j)
2480 if(grib==
'grib2')
then
2482 fld_info(cfld)%ifld=iavblfld(iget(422))
2484 fld_info(cfld)%tinvstat=0
2486 fld_info(cfld)%tinvstat=1
2488 fld_info(cfld)%ntrange=1
2494 datapd(i,j,cfld) = grid1(ii,jj)
2502 IF (iget(783)>0)
THEN
2506 grid1(i,j) = wspd10umax(i,j)
2509 if(grib==
'grib2')
then
2511 fld_info(cfld)%ifld=iavblfld(iget(783))
2513 fld_info(cfld)%tinvstat=0
2515 fld_info(cfld)%tinvstat=1
2517 fld_info(cfld)%ntrange=1
2523 datapd(i,j,cfld) = grid1(ii,jj)
2531 IF (iget(784)>0)
THEN
2535 grid1(i,j) = wspd10vmax(i,j)
2538 if(grib==
'grib2')
then
2540 fld_info(cfld)%ifld=iavblfld(iget(784))
2542 fld_info(cfld)%tinvstat=0
2544 fld_info(cfld)%tinvstat=1
2546 fld_info(cfld)%ntrange=1
2552 datapd(i,j,cfld) = grid1(i,jj)
2564 IF (iget(588)>0)
THEN
2566 CALL calvessel(iceg(ista:iend,jsta:jend))
2570 grid1(i,j) = iceg(i,j)
2574 if(grib==
'grib2')
then
2576 fld_info(cfld)%ifld=iavblfld(iget(588))
2578 fld_info(cfld)%tinvstat=0
2580 fld_info(cfld)%tinvstat=1
2582 fld_info(cfld)%ntrange=1
2589 datapd(i,j,cfld) = grid1(ii,jj)
2612 IF (iget(172)>0)
THEN
2616 IF (prec(i,j) <= pthresh .OR. sr(i,j)==spval)
THEN
2619 grid1(i,j) = sr(i,j)*100.
2623 if(grib==
'grib2')
then
2625 fld_info(cfld)%ifld=iavblfld(iget(172))
2631 datapd(i,j,cfld) = grid1(ii,jj)
2639 IF (iget(249)>0)
THEN
2646 if(cprate(i,j)/=spval) grid1(i,j) = cprate(i,j)*rdtphs
2650 if(grib==
'grib2')
then
2652 fld_info(cfld)%ifld=iavblfld(iget(249))
2658 datapd(i,j,cfld) = grid1(ii,jj)
2665 IF (iget(167)>0)
THEN
2673 if(prec(i,j)/=spval)
then
2674 IF(modelname /=
'RSM')
THEN
2675 grid1(i,j) = prec(i,j)*rdtphs*1000.
2677 grid1(i,j) = prec(i,j)
2682 if(grib==
'grib2')
then
2684 fld_info(cfld)%ifld=iavblfld(iget(167))
2690 datapd(i,j,cfld) = grid1(ii,jj)
2697 IF (iget(508)>0)
THEN
2702 if(prate_max(i,j)/=spval) grid1(i,j)=prate_max(i,j)*sec2hr
2705 if(grib==
'grib2')
then
2707 fld_info(cfld)%ifld=iavblfld(iget(508))
2708 fld_info(cfld)%lvl=lvlsxml(1,iget(508))
2709 fld_info(cfld)%tinvstat=1
2711 fld_info(cfld)%ntrange=1
2713 fld_info(cfld)%ntrange=0
2720 datapd(i,j,cfld) = grid1(ii,jj)
2727 IF (iget(509)>0)
THEN
2732 if(fprate_max(i,j)/=spval) grid1(i,j)=fprate_max(i,j)*sec2hr
2735 if(grib==
'grib2')
then
2737 fld_info(cfld)%ifld=iavblfld(iget(509))
2738 fld_info(cfld)%lvl=lvlsxml(1,iget(509))
2739 fld_info(cfld)%tinvstat=1
2741 fld_info(cfld)%ntrange=1
2743 fld_info(cfld)%ntrange=0
2750 datapd(i,j,cfld) = grid1(ii,jj)
2757 IF (iget(272)>0)
THEN
2760 itprec = nint(tprec)
2762 if (itprec /= 0)
then
2763 ifincr = mod(ifhr,itprec)
2764 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
2771 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2774 id(18) = ifhr-itprec
2776 id(18) = ifhr-ifincr
2777 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2779 IF (id(18)<0) id(18) = 0
2784 if(avgcprate(i,j)/=spval) grid1(i,j) = avgcprate(i,j)*rdtphs
2791 if(grib==
'grib2')
then
2793 fld_info(cfld)%ifld=iavblfld(iget(272))
2796 fld_info(cfld)%ntrange=0
2798 fld_info(cfld)%ntrange=1
2800 fld_info(cfld)%tinvstat=ifhr-id(18)
2807 datapd(i,j,cfld) = grid1(ii,jj)
2814 IF (iget(271)>0)
THEN
2818 itprec = nint(tprec)
2820 if (itprec /= 0)
then
2821 ifincr = mod(ifhr,itprec)
2822 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
2829 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2832 id(18) = ifhr-itprec
2834 id(18) = ifhr-ifincr
2835 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2837 IF (id(18)<0) id(18) = 0
2842 if(avgprec(i,j)/=spval) grid1(i,j) = avgprec(i,j)*rdtphs
2846 if(grib==
'grib2')
then
2848 fld_info(cfld)%ifld=iavblfld(iget(271))
2851 fld_info(cfld)%ntrange=0
2853 fld_info(cfld)%ntrange=1
2855 fld_info(cfld)%tinvstat=ifhr-id(18)
2862 datapd(i,j,cfld) = grid1(ii,jj)
2869 IF (iget(087)>0)
THEN
2871 itprec = nint(tprec)
2873 if (itprec /= 0)
then
2874 ifincr = mod(ifhr,itprec)
2875 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
2882 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2885 id(18) = ifhr-itprec
2887 id(18) = ifhr-ifincr
2888 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2890 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
2894 IF(avgprec(i,j) < spval)
THEN
2895 grid1(i,j) = avgprec(i,j)*float(id(19)-id(18))*3600.*1000./dtq2
2915 IF(acprec(i,j) < spval)
THEN
2916 grid1(i,j) = acprec(i,j)*1000.
2928 IF (id(18)<0) id(18) = 0
2930 if(grib==
'grib2')
then
2932 fld_info(cfld)%ifld=iavblfld(iget(087))
2933 fld_info(cfld)%ntrange=1
2934 fld_info(cfld)%tinvstat=ifhr-id(18)
2941 datapd(i,j,cfld) = grid1(ii,jj)
2963 IF (iget(417)>0)
THEN
2965 itprec = nint(tprec)
2967 if (itprec /= 0)
then
2968 ifincr = mod(ifhr,itprec)
2969 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
2976 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2979 id(18) = ifhr-itprec
2981 id(18) = ifhr-ifincr
2982 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2984 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
2989 IF(avgprec_cont(i,j) < spval)
THEN
2990 grid2(i,j) = avgprec_cont(i,j)*float(ifhr)*3600.*1000./dtq2
2997 IF (id(18)<0) id(18) = 0
2998 if(grib==
'grib2')
then
3000 if(modelname ==
'GFS' .OR. modelname ==
'FV3R')
then
3002 fld_info(cfld)%ifld=iavblfld(iget(417))
3003 fld_info(cfld)%ntrange=1
3004 fld_info(cfld)%tinvstat=ifhr
3011 datapd(i,j,cfld) = grid2(ii,jj)
3019 IF (iget(033)>0)
THEN
3021 itprec = nint(tprec)
3023 if (itprec /= 0)
then
3024 ifincr = mod(ifhr,itprec)
3025 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3032 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3035 id(18) = ifhr-itprec
3037 id(18) = ifhr-ifincr
3038 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3040 IF (id(18)<0) id(18) = 0
3041 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
3045 IF(avgcprate(i,j) < spval)
THEN
3046 grid1(i,j) = avgcprate(i,j)* &
3047 float(id(19)-id(18))*3600.*1000./dtq2
3067 IF(cuprec(i,j) < spval)
THEN
3068 grid1(i,j) = cuprec(i,j)*1000.
3076 if(grib==
'grib2')
then
3078 fld_info(cfld)%ifld=iavblfld(iget(033))
3079 fld_info(cfld)%ntrange=1
3080 fld_info(cfld)%tinvstat=ifhr-id(18)
3086 datapd(i,j,cfld) = grid1(ii,jj)
3106 IF (iget(418)>0)
THEN
3108 itprec = nint(tprec)
3110 if (itprec /= 0)
then
3111 ifincr = mod(ifhr,itprec)
3112 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3119 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3122 id(18) = ifhr-itprec
3124 id(18) = ifhr-ifincr
3125 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3127 IF (id(18)<0) id(18) = 0
3128 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
3133 IF(avgcprate_cont(i,j) < spval)
THEN
3134 grid2(i,j) = avgcprate_cont(i,j)*float(ifhr)*3600.*1000./dtq2
3142 if(grib==
'grib2')
then
3144 if(modelname ==
'GFS' .OR. modelname ==
'FV3R')
then
3146 fld_info(cfld)%ifld=iavblfld(iget(418))
3147 fld_info(cfld)%ntrange=1
3148 fld_info(cfld)%tinvstat=ifhr
3154 datapd(i,j,cfld) = grid2(ii,jj)
3162 IF (iget(034)>0)
THEN
3165 itprec = nint(tprec)
3167 if (itprec /= 0)
then
3168 ifincr = mod(ifhr,itprec)
3169 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3176 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3179 id(18) = ifhr-itprec
3181 id(18) = ifhr-ifincr
3182 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3184 IF (id(18)<0) id(18) = 0
3185 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
3189 IF(avgcprate(i,j) < spval .AND. avgprec(i,j) < spval)
then
3190 grid1(i,j) = ( avgprec(i,j) - avgcprate(i,j) ) * &
3191 float(id(19)-id(18))*3600.*1000./dtq2
3212 grid1(i,j) = ancprc(i,j)*1000.
3217 if(grib==
'grib2')
then
3219 fld_info(cfld)%ifld=iavblfld(iget(034))
3220 fld_info(cfld)%ntrange=1
3221 fld_info(cfld)%tinvstat=ifhr-id(18)
3227 datapd(i,j,cfld) = grid1(ii,jj)
3248 IF (iget(419)>0)
THEN
3250 itprec = nint(tprec)
3252 if (itprec /= 0)
then
3253 ifincr = mod(ifhr,itprec)
3254 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3261 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3264 id(18) = ifhr-itprec
3266 id(18) = ifhr-ifincr
3267 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3269 IF (id(18)<0) id(18) = 0
3270 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
3275 IF(avgcprate_cont(i,j) < spval .AND. avgprec_cont(i,j) < spval)
THEN
3276 grid2(i,j) = (avgprec_cont(i,j) - avgcprate_cont(i,j)) &
3277 *float(ifhr)*3600.*1000./dtq2
3285 if(grib==
'grib2')
then
3287 if(modelname ==
'GFS' .OR. modelname ==
'FV3R')
then
3289 fld_info(cfld)%ifld=iavblfld(iget(419))
3290 fld_info(cfld)%ntrange=1
3291 fld_info(cfld)%tinvstat=ifhr
3297 datapd(i,j,cfld) = grid2(ii,jj)
3305 IF (iget(256)>0)
THEN
3310 IF(lspa(i,j)<=-1.0e-6)
THEN
3311 if(acprec(i,j)/=spval) grid1(i,j) = acprec(i,j)*1000
3313 if(lspa(i,j)/=spval) grid1(i,j) = lspa(i,j)*1000.
3318 itprec = nint(tprec)
3320 if (itprec /= 0)
then
3321 ifincr = mod(ifhr,itprec)
3322 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3329 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3332 id(18) = ifhr-itprec
3334 id(18) = ifhr-ifincr
3335 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3337 IF (id(18)<0) id(18) = 0
3339 if(grib==
'grib2')
then
3341 fld_info(cfld)%ifld=iavblfld(iget(256))
3342 fld_info(cfld)%ntrange=1
3343 fld_info(cfld)%tinvstat=ifhr-id(18)
3349 datapd(i,j,cfld) = grid1(ii,jj)
3356 IF (iget(035)>0)
THEN
3361 grid1(i,j) = acsnow(i,j)
3365 itprec = nint(tprec)
3367 if (itprec /= 0)
then
3368 ifincr = mod(ifhr,itprec)
3369 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3376 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3379 id(18) = ifhr-itprec
3381 id(18) = ifhr-ifincr
3382 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3384 IF (id(18)<0) id(18) = 0
3385 if(grib==
'grib2')
then
3387 fld_info(cfld)%ifld=iavblfld(iget(035))
3388 fld_info(cfld)%ntrange=1
3389 fld_info(cfld)%tinvstat=ifhr
3395 datapd(i,j,cfld) = grid1(ii,jj)
3402 IF (iget(746)>0)
THEN
3406 grid1(i,j) = acgraup(i,j)
3410 itprec = nint(tprec)
3412 if (itprec /= 0)
then
3413 ifincr = mod(ifhr,itprec)
3414 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3421 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3424 id(18) = ifhr-itprec
3426 id(18) = ifhr-ifincr
3427 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3429 IF (id(18)<0) id(18) = 0
3430 if(grib==
'grib2')
then
3432 fld_info(cfld)%ifld=iavblfld(iget(746))
3433 fld_info(cfld)%ntrange=1
3434 fld_info(cfld)%tinvstat=ifhr-id(18)
3435 if(modelname==
'FV3R' .OR. modelname==
'GFS')fld_info(cfld)%tinvstat=ifhr
3441 datapd(i,j,cfld) = grid1(ii,jj)
3448 IF (iget(782)>0)
THEN
3452 grid1(i,j) = acfrain(i,j)
3456 itprec = nint(tprec)
3458 if (itprec /= 0)
then
3459 ifincr = mod(ifhr,itprec)
3460 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3467 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3470 id(18) = ifhr-itprec
3472 id(18) = ifhr-ifincr
3473 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3475 IF (id(18)<0) id(18) = 0
3476 if(grib==
'grib2')
then
3478 fld_info(cfld)%ifld=iavblfld(iget(782))
3479 fld_info(cfld)%ntrange=1
3480 fld_info(cfld)%tinvstat=ifhr-id(18)
3481 if(modelname==
'FV3R' .OR. modelname==
'GFS')fld_info(cfld)%tinvstat=ifhr
3487 datapd(i,j,cfld) = grid1(ii,jj)
3494 IF (iget(1004)>0)
THEN
3498 grid1(i,j) = snow_acm(i,j)
3502 itprec = nint(tprec)
3504 if (itprec /= 0)
then
3505 ifincr = mod(ifhr,itprec)
3506 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3513 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3516 id(18) = ifhr-itprec
3518 id(18) = ifhr-ifincr
3519 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3521 IF (id(18)<0) id(18) = 0
3522 if(grib==
'grib2')
then
3524 fld_info(cfld)%ifld=iavblfld(iget(1004))
3525 fld_info(cfld)%ntrange=1
3526 fld_info(cfld)%tinvstat=ifhr-id(18)
3527 if(modelname==
'FV3R' .or. modelname==
'GFS')fld_info(cfld)%tinvstat=ifhr
3534 datapd(i,j,cfld) = grid1(ii,jj)
3542 IF (iget(121)>0)
THEN
3547 grid1(i,j) = acsnom(i,j)
3551 itprec = nint(tprec)
3553 if (itprec /= 0)
then
3554 ifincr = mod(ifhr,itprec)
3555 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3562 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3565 id(18) = ifhr-itprec
3567 id(18) = ifhr-ifincr
3568 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3570 IF (id(18)<0) id(18) = 0
3571 if(grib==
'grib2')
then
3573 fld_info(cfld)%ifld=iavblfld(iget(121))
3574 fld_info(cfld)%ntrange=1
3575 fld_info(cfld)%tinvstat=ifhr-id(18)
3581 datapd(i,j,cfld) = grid1(ii,jj)
3588 IF (iget(405)>0)
THEN
3592 grid1(i,j) = snowfall(i,j)
3596 itprec = nint(tprec)
3598 if (itprec /= 0)
then
3599 ifincr = mod(ifhr,itprec)
3600 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3607 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3610 id(18) = ifhr-itprec
3612 id(18) = ifhr-ifincr
3613 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3615 IF (id(18)<0) id(18) = 0
3616 IF(itprec < 0)id(1:25)=0
3617 if(grib==
'grib2')
then
3619 fld_info(cfld)%ifld=iavblfld(iget(405))
3620 fld_info(cfld)%ntrange=1
3621 fld_info(cfld)%tinvstat=ifhr-id(18)
3627 datapd(i,j,cfld) = grid1(ii,jj)
3634 IF (iget(122)>0)
THEN
3639 grid1(i,j) = ssroff(i,j)
3643 itprec = nint(tprec)
3645 if (itprec /= 0)
then
3646 ifincr = mod(ifhr,itprec)
3647 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3654 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3657 id(18) = ifhr-itprec
3659 id(18) = ifhr-ifincr
3660 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3662 IF (id(18)<0) id(18) = 0
3664 IF (modelname==
'RAPR')
THEN
3671 if(grib==
'grib2')
then
3673 fld_info(cfld)%ifld=iavblfld(iget(122))
3674 fld_info(cfld)%ntrange=1
3675 fld_info(cfld)%tinvstat=ifhr-id(18)
3681 datapd(i,j,cfld) = grid1(ii,jj)
3688 IF (iget(123)>0)
THEN
3693 grid1(i,j) = bgroff(i,j)
3697 itprec = nint(tprec)
3699 if (itprec /= 0)
then
3700 ifincr = mod(ifhr,itprec)
3701 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3708 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3711 id(18) = ifhr-itprec
3713 id(18) = ifhr-ifincr
3714 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3716 IF (id(18)<0) id(18) = 0
3718 IF (modelname==
'RAPR')
THEN
3725 if(grib==
'grib2')
then
3727 fld_info(cfld)%ifld=iavblfld(iget(123))
3728 fld_info(cfld)%ntrange=1
3729 fld_info(cfld)%tinvstat=ifhr-id(18)
3735 datapd(i,j,cfld) = grid1(ii,jj)
3742 IF (iget(343)>0)
THEN
3746 grid1(i,j) = runoff(i,j)
3750 itprec = nint(tprec)
3753 if(modelname ==
'GFS')itprec=nint(tmaxmin)
3755 if (itprec /= 0)
then
3756 ifincr = mod(ifhr,itprec)
3757 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3764 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3767 id(18) = ifhr-itprec
3769 id(18) = ifhr-ifincr
3770 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3772 IF (id(18)<0) id(18) = 0
3773 if(grib==
'grib2')
then
3775 fld_info(cfld)%ifld=iavblfld(iget(343))
3776 fld_info(cfld)%ntrange=1
3777 fld_info(cfld)%tinvstat=ifhr-id(18)
3783 datapd(i,j,cfld) = grid1(ii,jj)
3791 need_ifi = iget(1007)>0 .or. iget(1008)>0 .or. iget(1009)>0 .or. iget(1010)>0
3792 IF (iget(434)>0. .or. need_ifi)
THEN
3799 ifi_apcp(i,j) = pcp_bucket(i,j)
3806 IF (iget(434)>0.)
THEN
3808 itprec = nint(tprec)
3810 if (itprec /= 0)
then
3811 ifincr = mod(ifhr,itprec)
3812 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3817 if(modelname==
'NCAR' .OR. modelname==
'RAPR') ifincr = nint(prec_acc_dt)/60
3820 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3823 id(18) = ifhr-itprec
3825 id(18) = ifhr-ifincr
3826 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3828 IF (id(18)<0) id(18) = 0
3829 if(grib==
'grib2' .and. iget(434)>0)
then
3831 fld_info(cfld)%ifld=iavblfld(iget(434))
3833 fld_info(cfld)%ntrange=(ifhr-id(18))/itprec
3835 fld_info(cfld)%ntrange=0
3837 fld_info(cfld)%tinvstat=itprec
3838 if(fld_info(cfld)%ntrange==0)
then
3840 fld_info(cfld)%tinvstat=0
3842 fld_info(cfld)%tinvstat=1
3844 fld_info(cfld)%ntrange=1
3851 datapd(i,j,cfld) = ifi_apcp(ii,jj)
3859 IF (iget(435)>0.)
THEN
3866 grid1(i,j) = rainc_bucket(i,j)
3871 itprec = nint(tprec)
3873 if (itprec /= 0)
then
3874 ifincr = mod(ifhr,itprec)
3875 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3880 if(modelname==
'NCAR' .OR. modelname==
'RAPR') ifincr = nint(prec_acc_dt)/60
3884 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3887 id(18) = ifhr-itprec
3889 id(18) = ifhr-ifincr
3890 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3892 IF (id(18)<0) id(18) = 0
3895 if(debugprint .and. me==0)
then
3896 print *,
'PREC_ACC_DT,ID(18),ID(19)',prec_acc_dt,id(18),id(19)
3899 if(grib==
'grib2')
then
3901 fld_info(cfld)%ifld=iavblfld(iget(435))
3903 fld_info(cfld)%ntrange=(ifhr-id(18))/itprec
3905 fld_info(cfld)%ntrange=0
3907 fld_info(cfld)%tinvstat=itprec
3908 if(fld_info(cfld)%ntrange==0)
then
3910 fld_info(cfld)%tinvstat=0
3912 fld_info(cfld)%tinvstat=1
3914 fld_info(cfld)%ntrange=1
3921 datapd(i,j,cfld) = grid1(ii,jj)
3928 IF (iget(436)>0.)
THEN
3935 grid1(i,j) = rainnc_bucket(i,j)
3940 itprec = nint(tprec)
3942 if (itprec /= 0)
then
3943 ifincr = mod(ifhr,itprec)
3944 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
3949 if(modelname==
'NCAR' .OR. modelname==
'RAPR') ifincr = nint(prec_acc_dt)/60
3952 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3955 id(18) = ifhr-itprec
3957 id(18) = ifhr-ifincr
3958 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3960 IF (id(18)<0) id(18) = 0
3961 if(grib==
'grib2')
then
3963 fld_info(cfld)%ifld=iavblfld(iget(436))
3965 fld_info(cfld)%ntrange=(ifhr-id(18))/itprec
3967 fld_info(cfld)%ntrange=0
3969 fld_info(cfld)%tinvstat=itprec
3970 if(fld_info(cfld)%ntrange==0)
then
3972 fld_info(cfld)%tinvstat=0
3974 fld_info(cfld)%tinvstat=1
3976 fld_info(cfld)%ntrange=1
3983 datapd(i,j,cfld) = grid1(ii,jj)
3990 IF (iget(437)>0.)
THEN
3994 grid1(i,j) = snow_bucket(i,j)
3998 itprec = nint(tprec)
4000 if (itprec /= 0)
then
4001 ifincr = mod(ifhr,itprec)
4002 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4007 if(modelname==
'NCAR' .OR. modelname==
'RAPR') ifincr = nint(prec_acc_dt)/60
4010 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4013 id(18) = ifhr-itprec
4015 id(18) = ifhr-ifincr
4016 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4018 IF (id(18)<0) id(18) = 0
4020 if(grib==
'grib2')
then
4022 fld_info(cfld)%ifld=iavblfld(iget(437))
4024 fld_info(cfld)%ntrange=(ifhr-id(18))/itprec
4026 fld_info(cfld)%ntrange=0
4028 fld_info(cfld)%tinvstat=itprec
4029 if(fld_info(cfld)%ntrange==0)
then
4031 fld_info(cfld)%tinvstat=0
4033 fld_info(cfld)%tinvstat=1
4035 fld_info(cfld)%ntrange=1
4042 datapd(i,j,cfld) = grid1(ii,jj)
4049 IF (iget(775)>0.)
THEN
4053 grid1(i,j) = graup_bucket(i,j)
4057 itprec = nint(tprec)
4059 if (itprec /= 0)
then
4060 ifincr = mod(ifhr,itprec)
4061 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4066 if(modelname==
'NCAR' .OR. modelname==
'RAPR') ifincr = nint(prec_acc_dt)/60
4069 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4072 id(18) = ifhr-itprec
4074 id(18) = ifhr-ifincr
4075 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4077 IF (id(18)<0) id(18) = 0
4079 if(grib==
'grib2')
then
4081 fld_info(cfld)%ifld=iavblfld(iget(775))
4083 fld_info(cfld)%ntrange=(ifhr-id(18))/itprec
4085 fld_info(cfld)%ntrange=0
4087 fld_info(cfld)%tinvstat=itprec
4088 if(fld_info(cfld)%ntrange==0)
then
4090 fld_info(cfld)%tinvstat=0
4092 fld_info(cfld)%tinvstat=1
4094 fld_info(cfld)%ntrange=1
4096 if(modelname ==
'GFS' .OR. modelname ==
'FV3R')
then
4097 fld_info(cfld)%ntrange=1
4098 fld_info(cfld)%tinvstat=ifhr-id(18)
4105 datapd(i,j,cfld) = grid1(ii,jj)
4112 IF (iget(1003)>0.)
THEN
4116 grid1(i,j) = frzrn_bucket(i,j)
4120 itprec = nint(tprec)
4122 if (itprec /= 0)
then
4123 ifincr = mod(ifhr,itprec)
4124 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4131 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4134 id(18) = ifhr-itprec
4136 id(18) = ifhr-ifincr
4137 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4139 IF (id(18)<0) id(18) = 0
4141 if(grib==
'grib2')
then
4143 fld_info(cfld)%ifld=iavblfld(iget(1003))
4144 fld_info(cfld)%ntrange=1
4145 fld_info(cfld)%tinvstat=ifhr-id(18)
4165 datapd(i,j,cfld) = grid1(ii,jj)
4172 IF (iget(1005)>0.)
THEN
4176 grid1(i,j) = snow_bkt(i,j)
4180 itprec = nint(tprec)
4182 if (itprec /= 0)
then
4183 ifincr = mod(ifhr,itprec)
4184 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4191 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4194 id(18) = ifhr-itprec
4196 id(18) = ifhr-ifincr
4197 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4199 IF (id(18)<0) id(18) = 0
4201 if(grib==
'grib2')
then
4203 fld_info(cfld)%ifld=iavblfld(iget(1005))
4204 fld_info(cfld)%ntrange=1
4205 fld_info(cfld)%tinvstat=ifhr-id(18)
4211 datapd(i,j,cfld) = grid1(ii,jj)
4220 IF (iget(913).GT.0)
THEN
4221 ffgfile=
'ffg_01h.grib2'
4224 IF (iget(914).GT.0)
THEN
4225 IF (ifhr .EQ. 1)
THEN
4226 ffgfile=
'ffg_01h.grib2'
4228 ELSEIF (ifhr .EQ. 3)
THEN
4229 ffgfile=
'ffg_03h.grib2'
4231 ELSEIF (ifhr .EQ. 6)
THEN
4232 ffgfile=
'ffg_06h.grib2'
4234 ELSEIF (ifhr .EQ. 12)
THEN
4235 ffgfile=
'ffg_12h.grib2'
4238 ffgfile=
'ffg_01h.grib2'
4246 IF (iget(915).GT.0)
THEN
4247 arifile=
'ari2y_01h.grib2'
4250 IF (iget(916).GT.0)
THEN
4251 IF (ifhr .EQ. 1)
THEN
4252 arifile=
'ari2y_01h.grib2'
4254 ELSEIF (ifhr .EQ. 3)
THEN
4255 arifile=
'ari2y_03h.grib2'
4257 ELSEIF (ifhr .EQ. 6)
THEN
4258 arifile=
'ari2y_06h.grib2'
4260 ELSEIF (ifhr .EQ. 12)
THEN
4261 arifile=
'ari2y_12h.grib2'
4263 ELSEIF (ifhr .EQ. 24)
THEN
4264 arifile=
'ari2y_24h.grib2'
4267 arifile=
'ari2y_01h.grib2'
4272 IF (iget(917).GT.0)
THEN
4273 arifile=
'ari5y_01h.grib2'
4276 IF (iget(918).GT.0)
THEN
4277 IF (ifhr .EQ. 1)
THEN
4278 arifile=
'ari5y_01h.grib2'
4280 ELSEIF (ifhr .EQ. 3)
THEN
4281 arifile=
'ari5y_03h.grib2'
4283 ELSEIF (ifhr .EQ. 6)
THEN
4284 arifile=
'ari5y_06h.grib2'
4286 ELSEIF (ifhr .EQ. 12)
THEN
4287 arifile=
'ari5y_12h.grib2'
4289 ELSEIF (ifhr .EQ. 24)
THEN
4290 arifile=
'ari5y_24h.grib2'
4293 arifile=
'ari5y_01h.grib2'
4298 IF (iget(919).GT.0)
THEN
4299 arifile=
'ari10y_01h.grib2'
4302 IF (iget(920).GT.0)
THEN
4303 IF (ifhr .EQ. 1)
THEN
4304 arifile=
'ari10y_01h.grib2'
4306 ELSEIF (ifhr .EQ. 3)
THEN
4307 arifile=
'ari10y_03h.grib2'
4309 ELSEIF (ifhr .EQ. 6)
THEN
4310 arifile=
'ari10y_06h.grib2'
4312 ELSEIF (ifhr .EQ. 12)
THEN
4313 arifile=
'ari10y_12h.grib2'
4315 ELSEIF (ifhr .EQ. 24)
THEN
4316 arifile=
'ari10y_24h.grib2'
4319 arifile=
'ari10y_01h.grib2'
4324 IF (iget(921).GT.0)
THEN
4325 arifile=
'ari100y_01h.grib2'
4328 IF (iget(922).GT.0)
THEN
4329 IF (ifhr .EQ. 1)
THEN
4330 arifile=
'ari100y_01h.grib2'
4332 ELSEIF (ifhr .EQ. 3)
THEN
4333 arifile=
'ari100y_03h.grib2'
4335 ELSEIF (ifhr .EQ. 6)
THEN
4336 arifile=
'ari100y_06h.grib2'
4338 ELSEIF (ifhr .EQ. 12)
THEN
4339 arifile=
'ari100y_12h.grib2'
4341 ELSEIF (ifhr .EQ. 24)
THEN
4342 arifile=
'ari100y_24h.grib2'
4345 arifile=
'ari100y_01h.grib2'
4353 IF (iget(526)>0.)
THEN
4357 IF (ifhr == 0 .AND. ifmin == 0)
THEN
4360 grid1(i,j) = pcp_bucket1(i,j)
4364 ifincr = nint(prec_acc_dt1)
4365 if(grib==
'grib2')
then
4367 fld_info(cfld)%ifld=iavblfld(iget(518))
4368 if(fld_info(cfld)%ntrange==0)
then
4369 if (ifhr==0 .and. ifmin==0)
then
4370 fld_info(cfld)%tinvstat=0
4372 fld_info(cfld)%tinvstat=ifincr
4374 fld_info(cfld)%ntrange=1
4381 datapd(i,j,cfld) = grid1(ii,jj)
4387 IF (iget(527)>0.)
THEN
4391 IF (ifhr == 0 .AND. ifmin == 0)
THEN
4394 grid1(i,j) = rainc_bucket1(i,j)
4398 ifincr = nint(prec_acc_dt1)
4399 if(grib==
'grib2')
then
4401 fld_info(cfld)%ifld=iavblfld(iget(519))
4402 if(fld_info(cfld)%ntrange==0)
then
4403 if (ifhr==0 .and. ifmin==0)
then
4404 fld_info(cfld)%tinvstat=0
4406 fld_info(cfld)%tinvstat=ifincr
4408 fld_info(cfld)%ntrange=1
4415 datapd(i,j,cfld) = grid1(ii,jj)
4421 IF (iget(528)>0.)
THEN
4425 IF (ifhr == 0 .AND. ifmin == 0)
THEN
4428 grid1(i,j) = rainnc_bucket1(i,j)
4432 ifincr = nint(prec_acc_dt1)
4433 if(grib==
'grib2')
then
4435 fld_info(cfld)%ifld=iavblfld(iget(520))
4436 if(fld_info(cfld)%ntrange==0)
then
4437 if (ifhr==0 .and. ifmin==0)
then
4438 fld_info(cfld)%tinvstat=0
4440 fld_info(cfld)%tinvstat=ifincr
4442 fld_info(cfld)%ntrange=1
4449 datapd(i,j,cfld) = grid1(ii,jj)
4455 IF (iget(529)>0.)
THEN
4459 IF (ifhr == 0 .AND. ifmin == 0)
THEN
4462 grid1(i,j) = snow_bucket1(i,j)
4466 ifincr = nint(prec_acc_dt1)
4468 if(grib==
'grib2')
then
4470 fld_info(cfld)%ifld=iavblfld(iget(521))
4471 if(fld_info(cfld)%ntrange==0)
then
4472 if (ifhr==0 .and. ifmin==0)
then
4473 fld_info(cfld)%tinvstat=0
4475 fld_info(cfld)%tinvstat=ifincr
4477 fld_info(cfld)%ntrange=1
4484 datapd(i,j,cfld) = grid1(ii,jj)
4490 IF (iget(530)>0.)
THEN
4494 IF (ifhr == 0 .AND. ifmin == 0)
THEN
4497 grid1(i,j) = graup_bucket1(i,j)
4501 ifincr = nint(prec_acc_dt1)
4503 if(grib==
'grib2')
then
4505 fld_info(cfld)%ifld=iavblfld(iget(522))
4506 if(fld_info(cfld)%ntrange==0)
then
4507 if (ifhr==0 .and. ifmin==0)
then
4508 fld_info(cfld)%tinvstat=0
4510 fld_info(cfld)%tinvstat=ifincr
4512 fld_info(cfld)%ntrange=1
4519 datapd(i,j,cfld) = grid1(ii,jj)
4527 IF (iget(160)>0 .OR.(iget(247)>0))
THEN
4529 allocate(sleet(ista:iend,jsta:jend,nalg), rain(ista:iend,jsta:jend,nalg), &
4530 freezr(ista:iend,jsta:jend,nalg), snow(ista:iend,jsta:jend,nalg))
4531 allocate(zwet(ista:iend,jsta:jend))
4532 CALL calwxt_post(t,q,pmid,pint,htm,lmh,prec,zint,iwx1,zwet)
4536 IF (iget(160)>0)
THEN
4540 IF(zwet(i,j)<spval)
THEN
4542 snow(i,j,1) = mod(iwx,2)
4543 sleet(i,j,1) = mod(iwx,4)/2
4544 freezr(i,j,1) = mod(iwx,8)/4
4548 sleet(i,j,1) = spval
4549 freezr(i,j,1) = spval
4557 IF (iget(247)>0)
THEN
4560 grid1(i,j) = zwet(i,j)
4563 if(grib==
'grib2')
then
4565 fld_info(cfld)%ifld=iavblfld(iget(247))
4571 datapd(i,j,cfld) = grid1(ii,jj)
4582 IF (iget(160)>0)
THEN
4584 CALL calwxt_ramer_post(t,q,pmid,pint,lmh,prec,iwx1)
4593 snow(i,j,2) = mod(iwx,2)
4594 sleet(i,j,2) = mod(iwx,4)/2
4595 freezr(i,j,2) = mod(iwx,8)/4
4601 iseed=44641*(int(sdat(1)-1)*24*31+int(sdat(2))*24+ihrst)+ &
4602 & mod(ifhr*60+ifmin,44641)+4357
4604 CALL calwxt_bourg_post(im,ista_2l,iend_2u,ista,iend,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1,&
4605 & iseed,g,pthresh, &
4606 & t,q,pmid,pint,lmh,prec,zint,iwx1,me)
4616 snow(i,j,3) = mod(iwx,2)
4617 sleet(i,j,3) = mod(iwx,4)/2
4618 freezr(i,j,3) = mod(iwx,8)/4
4624 CALL calwxt_revised_post(t,q,pmid,pint,htm,lmh,prec,zint,iwx1)
4632 snow(i,j,4) = mod(iwx,2)
4633 sleet(i,j,4) = mod(iwx,4)/2
4634 freezr(i,j,4) = mod(iwx,8)/4
4641 IF(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)
then
4642 CALL calwxt_explicit_post(lmh,ths,pmid,prec,sr,f_rimef,iwx1)
4658 snow(i,j,5) = mod(iwx,2)
4659 sleet(i,j,5) = mod(iwx,4)/2
4660 freezr(i,j,5) = mod(iwx,8)/4
4665 allocate(domr(ista:iend,jsta:jend), doms(ista:iend,jsta:jend), &
4666 domzr(ista:iend,jsta:jend), domip(ista:iend,jsta:jend))
4667 CALL calwxt_dominant_post(prec(ista_2l,jsta_2l),rain,freezr,sleet,snow, &
4668 domr,domzr,domip,doms)
4675 if(prec(i,j) /= spval) grid1(i,j) = doms(i,j)
4678 if(grib==
'grib2')
then
4680 fld_info(cfld)%ifld=iavblfld(iget(551))
4686 datapd(i,j,cfld) = grid1(ii,jj)
4695 if(prec(i,j)/=spval) grid1(i,j) = domip(i,j)
4698 if(grib==
'grib2')
then
4700 fld_info(cfld)%ifld=iavblfld(iget(552))
4706 datapd(i,j,cfld) = grid1(ii,jj)
4721 if(prec(i,j)/=spval)grid1(i,j) = domzr(i,j)
4724 if(grib==
'grib2')
then
4726 fld_info(cfld)%ifld=iavblfld(iget(553))
4732 datapd(i,j,cfld) = grid1(ii,jj)
4741 if(prec(i,j)/=spval)grid1(i,j) = domr(i,j)
4744 if(grib==
'grib2')
then
4746 fld_info(cfld)%ifld=iavblfld(iget(160))
4752 datapd(i,j,cfld) = grid1(ii,jj)
4760 IF (iget(317)>0)
THEN
4762 if (.not.
allocated(sleet))
allocate(sleet(ista:iend,jsta:jend,nalg))
4763 if (.not.
allocated(rain))
allocate(rain(ista:iend,jsta:jend,nalg))
4764 if (.not.
allocated(freezr))
allocate(freezr(ista:iend,jsta:jend,nalg))
4765 if (.not.
allocated(snow))
allocate(snow(ista:iend,jsta:jend,nalg))
4766 if (.not.
allocated(zwet))
allocate(zwet(ista:iend,jsta:jend))
4767 CALL calwxt_post(t,q,pmid,pint,htm,lmh,avgprec,zint,iwx1,zwet)
4772 IF(zwet(i,j)<spval)
THEN
4774 snow(i,j,1) = mod(iwx,2)
4775 sleet(i,j,1) = mod(iwx,4)/2
4776 freezr(i,j,1) = mod(iwx,8)/4
4780 sleet(i,j,1) = spval
4781 freezr(i,j,1) = spval
4786 if (
allocated(zwet))
deallocate(zwet)
4796 CALL calwxt_ramer_post(t,q,pmid,pint,lmh,avgprec,iwx1)
4805 snow(i,j,2) = mod(iwx,2)
4806 sleet(i,j,2) = mod(iwx,4)/2
4807 freezr(i,j,2) = mod(iwx,8)/4
4813 iseed=44641*(int(sdat(1)-1)*24*31+int(sdat(2))*24+ihrst)+ &
4814 & mod(ifhr*60+ifmin,44641)+4357
4816 CALL calwxt_bourg_post(im,ista_2l,iend_2u,ista,iend,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1,&
4817 & iseed,g,pthresh, &
4818 & t,q,pmid,pint,lmh,avgprec,zint,iwx1,me)
4828 snow(i,j,3) = mod(iwx,2)
4829 sleet(i,j,3) = mod(iwx,4)/2
4830 freezr(i,j,3) = mod(iwx,8)/4
4836 CALL calwxt_revised_post(t,q,pmid,pint,htm,lmh,avgprec,zint,iwx1)
4845 snow(i,j,4) = mod(iwx,2)
4846 sleet(i,j,4) = mod(iwx,4)/2
4847 freezr(i,j,4) = mod(iwx,8)/4
4855 IF(imp_physics == 5)
then
4856 CALL calwxt_explicit_post(lmh,ths,pmid,avgprec,sr,f_rimef,iwx1)
4872 snow(i,j,5) = mod(iwx,2)
4873 sleet(i,j,5) = mod(iwx,4)/2
4874 freezr(i,j,5) = mod(iwx,8)/4
4884 if (.not.
allocated(domr))
allocate(domr(ista:iend,jsta:jend))
4885 if (.not.
allocated(doms))
allocate(doms(ista:iend,jsta:jend))
4886 if (.not.
allocated(domzr))
allocate(domzr(ista:iend,jsta:jend))
4887 if (.not.
allocated(domip))
allocate(domip(ista:iend,jsta:jend))
4889 CALL calwxt_dominant_post(avgprec,rain,freezr,sleet,snow, &
4890 domr,domzr,domip,doms)
4893 itprec = nint(tprec)
4895 if (itprec /= 0)
then
4896 ifincr = mod(ifhr,itprec)
4897 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4904 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4907 id(18) = ifhr-itprec
4909 id(18) = ifhr-ifincr
4910 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4921 if(avgprec(i,j) /= spval) grid1(i,j) = doms(i,j)
4925 if(grib==
'grib2')
then
4927 fld_info(cfld)%ifld=iavblfld(iget(555))
4929 fld_info(cfld)%ntrange=0
4931 fld_info(cfld)%ntrange=1
4933 fld_info(cfld)%tinvstat=ifhr-id(18)
4940 datapd(i,j,cfld) = grid1(ii,jj)
4946 itprec = nint(tprec)
4948 if (itprec /= 0)
then
4949 ifincr = mod(ifhr,itprec)
4950 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
4957 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
4960 id(18) = ifhr-itprec
4962 id(18) = ifhr-ifincr
4963 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
4969 if(avgprec(i,j)/=spval) grid1(i,j) = domip(i,j)
4972 if(grib==
'grib2')
then
4974 fld_info(cfld)%ifld=iavblfld(iget(556))
4976 fld_info(cfld)%ntrange=0
4978 fld_info(cfld)%ntrange=1
4980 fld_info(cfld)%tinvstat=ifhr-id(18)
4987 datapd(i,j,cfld) = grid1(ii,jj)
4994 itprec = nint(tprec)
4996 if (itprec /= 0)
then
4997 ifincr = mod(ifhr,itprec)
4998 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
5005 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5008 id(18) = ifhr-itprec
5010 id(18) = ifhr-ifincr
5011 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5023 if(avgprec(i,j)/=spval) grid1(i,j) = domzr(i,j)
5026 if(grib==
'grib2')
then
5028 fld_info(cfld)%ifld=iavblfld(iget(557))
5030 fld_info(cfld)%ntrange=0
5032 fld_info(cfld)%ntrange=1
5034 fld_info(cfld)%tinvstat=ifhr-id(18)
5041 datapd(i,j,cfld) = grid1(ii,jj)
5048 itprec = nint(tprec)
5050 if (itprec /= 0)
then
5051 ifincr = mod(ifhr,itprec)
5052 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
5060 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5063 id(18) = ifhr-itprec
5065 id(18) = ifhr-ifincr
5066 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5072 if(avgprec(i,j)/=spval) grid1(i,j) = domr(i,j)
5075 if(grib==
'grib2')
then
5077 fld_info(cfld)%ifld=iavblfld(iget(317))
5079 fld_info(cfld)%ntrange=0
5081 fld_info(cfld)%ntrange=1
5083 fld_info(cfld)%tinvstat=ifhr-id(18)
5090 datapd(i,j,cfld) = grid1(ii,jj)
5097 if (
allocated(rain))
deallocate(rain)
5098 if (
allocated(snow))
deallocate(snow)
5099 if (
allocated(sleet))
deallocate(sleet)
5100 if (
allocated(freezr))
deallocate(freezr)
5103 IF (iget(407)>0 .or. iget(559)>0 .or. &
5104 iget(560)>0 .or. iget(561)>0)
THEN
5106 if (.not.
allocated(domr))
allocate(domr(ista:iend,jsta:jend))
5107 if (.not.
allocated(doms))
allocate(doms(ista:iend,jsta:jend))
5108 if (.not.
allocated(domzr))
allocate(domzr(ista:iend,jsta:jend))
5109 if (.not.
allocated(domip))
allocate(domip(ista:iend,jsta:jend))
5121 IF (modelname .eq.
'FV3R')
THEN
5124 snow_bucket(i,j) = snow_bkt(i,j)
5125 rainnc_bucket(i,j) = 0.0
5133 totprcp = (avgprec_cont(i,j)*float(ifhr)*3600./dtq2)
5135 if(graup_bucket(i,j)*1.e-3 > totprcp)
then
5136 print *,
'WARNING - Graupel is higher that total precip at point',i,j
5137 print *,
'totprcp,graup_bucket(i,j),snow_bucket(i,j),rainnc_bucket',&
5138 totprcp,graup_bucket(i,j),snow_bucket(i,j),rainnc_bucket(i,j)
5145 if (totprcp-graup_bucket(i,j)*1.e-3 > 0.0000001) &
5151 snowratio = snow_bucket(i,j)*1.e-3 / (totprcp-graup_bucket(i,j)*1.e-3)
5155 t2 = tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
5162 if( (snownc(i,j)/dt > 0.2e-9 .and. snowratio>=0.25) &
5164 (totprcp>0.00001.and.snowratio>=0.25))
then
5166 if (t2>=276.15)
then
5177 rainl = (1. - sr(i,j))*prec(i,j)/dt
5180 if((rainl > 2.8e-9 .and. snowratio<0.60) .or. &
5181 (totprcp>0.00001 .and. snowratio<0.60))
then
5183 if (t2>=273.15)
then
5198 if(graupelnc(i,j)/dt > 1.e-9)
then
5199 if (t2<=276.15)
then
5205 if (qrmax(i,j)>0.000005)
then
5206 if(graupelnc(i,j) > 0.5*snownc(i,j))
then
5215 if ((graupelnc(i,j)/dt) > rainl)
then
5222 else if (rainl > (4.*graupelnc(i,j)/dt))
then
5247 write (6,*)
' Snow/rain ratio'
5248 write (6,*)
' max/min 1h-SNOWFALL in [cm]', &
5249 maxval(snow_bucket)*0.1,minval(snow_bucket)*0.1
5254 if (snow_bucket(i,j)*0.1<0.1*float(icat).and. &
5255 snow_bucket(i,j)*0.1>0.1*float(icat-1))
then
5256 cnt_snowratio(icat)=cnt_snowratio(icat)+1
5262 write (6,*)
'Snow ratio point counts'
5264 write (6,*) icat, cnt_snowratio(icat)
5267 icnt_snow_rain_mixed = 0
5270 if (domr(i,j)==1 .and. doms(i,j)==1)
then
5271 icnt_snow_rain_mixed = icnt_snow_rain_mixed + 1
5276 write (6,*)
'No. of mixed snow/rain p-type diagnosed=', &
5277 icnt_snow_rain_mixed
5284 grid1(i,j)=doms(i,j)
5287 if(grib==
'grib2')
then
5289 fld_info(cfld)%ifld=iavblfld(iget(559))
5295 datapd(i,j,cfld) = grid1(ii,jj)
5303 grid1(i,j) = domip(i,j)
5309 if(grib==
'grib2')
then
5311 fld_info(cfld)%ifld=iavblfld(iget(560))
5317 datapd(i,j,cfld) = grid1(ii,jj)
5329 grid1(i,j) = domzr(i,j)
5332 if(grib==
'grib2')
then
5334 fld_info(cfld)%ifld=iavblfld(iget(561))
5340 datapd(i,j,cfld) = grid1(ii,jj)
5348 grid1(i,j) = domr(i,j)
5351 if(grib==
'grib2')
then
5353 fld_info(cfld)%ifld=iavblfld(iget(407))
5359 datapd(i,j,cfld) = grid1(ii,jj)
5366 if (
allocated(psfc))
deallocate(psfc)
5367 if (
allocated(domr))
deallocate(domr)
5368 if (
allocated(doms))
deallocate(doms)
5369 if (
allocated(domzr))
deallocate(domzr)
5370 if (
allocated(domip))
deallocate(domip)
5376 IF (iget(042)>0)
THEN
5377 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5378 modelname==
'RAPR')
THEN
5389 IF(sfclhx(i,j)/=spval)
THEN
5390 grid1(i,j)=-1.*sfclhx(i,j)*rrnum
5392 grid1(i,j)=sfclhx(i,j)
5397 itsrfc = nint(tsrfc)
5398 IF(itsrfc /= 0)
then
5399 ifincr = mod(ifhr,itsrfc)
5400 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5405 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5408 id(18) = ifhr-itsrfc
5410 id(18) = ifhr-ifincr
5411 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5413 IF (id(18)<0) id(18) = 0
5414 if(grib==
'grib2')
then
5416 fld_info(cfld)%ifld=iavblfld(iget(042))
5418 fld_info(cfld)%ntrange=1
5420 fld_info(cfld)%ntrange=0
5422 fld_info(cfld)%tinvstat=ifhr-id(18)
5423 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5429 IF (iget(043)>0)
THEN
5430 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5431 modelname==
'RAPR')
THEN
5442 IF(sfcshx(i,j)/=spval)
THEN
5443 grid1(i,j) = -1.* sfcshx(i,j)*rrnum
5445 grid1(i,j)=sfcshx(i,j)
5450 itsrfc = nint(tsrfc)
5451 IF(itsrfc /= 0)
then
5452 ifincr = mod(ifhr,itsrfc)
5453 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5458 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5461 id(18) = ifhr-itsrfc
5463 id(18) = ifhr-ifincr
5464 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5466 IF (id(18)<0) id(18) = 0
5468 if(grib==
'grib2')
then
5470 fld_info(cfld)%ifld=iavblfld(iget(043))
5472 fld_info(cfld)%ntrange=1
5474 fld_info(cfld)%ntrange=0
5476 fld_info(cfld)%tinvstat=ifhr-id(18)
5477 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5482 IF (iget(135)>0)
THEN
5483 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5484 modelname==
'RAPR')
THEN
5496 if(subshx(i,j)/=spval) grid1(i,j) = subshx(i,j)*rrnum
5500 itsrfc = nint(tsrfc)
5501 IF(itsrfc /= 0)
then
5502 ifincr = mod(ifhr,itsrfc)
5503 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5508 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5511 id(18) = ifhr-itsrfc
5513 id(18) = ifhr-ifincr
5514 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5516 IF (id(18)<0) id(18) = 0
5518 if(grib==
'grib2')
then
5520 fld_info(cfld)%ifld=iavblfld(iget(135))
5522 fld_info(cfld)%ntrange=1
5524 fld_info(cfld)%ntrange=0
5526 fld_info(cfld)%tinvstat=ifhr-id(18)
5527 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5532 IF (iget(136)>0)
THEN
5533 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5534 modelname==
'RAPR')
THEN
5546 if(snopcx(i,j)/=spval) grid1(i,j) = snopcx(i,j)*rrnum
5550 itsrfc = nint(tsrfc)
5551 IF(itsrfc /= 0)
then
5552 ifincr = mod(ifhr,itsrfc)
5553 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5558 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5561 id(18) = ifhr-itsrfc
5563 id(18) = ifhr-ifincr
5564 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5566 IF (id(18)<0) id(18) = 0
5568 if(grib==
'grib2')
then
5570 fld_info(cfld)%ifld=iavblfld(iget(136))
5572 fld_info(cfld)%ntrange=1
5574 fld_info(cfld)%ntrange=0
5576 fld_info(cfld)%tinvstat=ifhr-id(18)
5577 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5582 IF (iget(046)>0)
THEN
5583 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5584 modelname==
'RAPR')
THEN
5595 IF(sfcuvx(i,j)/=spval)
THEN
5596 grid1(i,j) = sfcuvx(i,j)*rrnum
5598 grid1(i,j) = sfcuvx(i,j)
5603 itsrfc = nint(tsrfc)
5604 IF(itsrfc /= 0)
then
5605 ifincr = mod(ifhr,itsrfc)
5606 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5611 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5614 id(18) = ifhr-itsrfc
5616 id(18) = ifhr-ifincr
5617 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5619 IF (id(18)<0) id(18) = 0
5621 if(grib==
'grib2')
then
5623 fld_info(cfld)%ifld=iavblfld(iget(046))
5625 fld_info(cfld)%ntrange=1
5627 fld_info(cfld)%ntrange=0
5629 fld_info(cfld)%tinvstat=ifhr-id(18)
5630 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5635 IF (iget(269)>0)
THEN
5636 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5637 modelname==
'RAPR')
THEN
5649 if(sfcux(i,j)/=spval) grid1(i,j) = sfcux(i,j)*rrnum
5653 itsrfc = nint(tsrfc)
5654 IF(itsrfc /= 0)
then
5655 ifincr = mod(ifhr,itsrfc)
5656 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5661 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5664 id(18) = ifhr-itsrfc
5666 id(18) = ifhr-ifincr
5667 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5669 IF (id(18)<0) id(18) = 0
5671 if(grib==
'grib2')
then
5673 fld_info(cfld)%ifld=iavblfld(iget(269))
5675 fld_info(cfld)%ntrange=1
5677 fld_info(cfld)%ntrange=0
5679 fld_info(cfld)%tinvstat=ifhr-id(18)
5680 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5685 IF (iget(270)>0)
THEN
5686 IF(modelname ==
'NCAR'.OR.modelname==
'RSM' .OR. &
5687 modelname==
'RAPR')
THEN
5699 if(sfcvx(i,j)/=spval) grid1(i,j) = sfcvx(i,j)*rrnum
5703 itsrfc = nint(tsrfc)
5704 IF(itsrfc /= 0)
then
5705 ifincr = mod(ifhr,itsrfc)
5706 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5711 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5714 id(18) = ifhr-itsrfc
5716 id(18) = ifhr-ifincr
5717 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5719 IF (id(18)<0) id(18) = 0
5721 if(grib==
'grib2')
then
5723 fld_info(cfld)%ifld=iavblfld(iget(270))
5725 fld_info(cfld)%ntrange=1
5727 fld_info(cfld)%ntrange=0
5729 fld_info(cfld)%tinvstat=ifhr-id(18)
5730 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5735 IF (iget(047)>0)
THEN
5739 if(sfcevp(i,j)/=spval) grid1(i,j) = sfcevp(i,j)*1000.
5743 itprec = nint(tprec)
5745 if (itprec /= 0)
then
5746 ifincr = mod(ifhr,itprec)
5747 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
5754 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5757 id(18) = ifhr-itprec
5759 id(18) = ifhr-ifincr
5760 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5762 IF (id(18)<0) id(18) = 0
5763 if(grib==
'grib2')
then
5765 fld_info(cfld)%ifld=iavblfld(iget(047))
5767 fld_info(cfld)%ntrange=1
5769 fld_info(cfld)%ntrange=0
5771 fld_info(cfld)%tinvstat=ifhr-id(18)
5772 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5778 IF (iget(137)>0)
THEN
5782 if(potevp(i,j)/=spval) grid1(i,j) = potevp(i,j)*1000.
5786 itprec = nint(tprec)
5788 if (itprec /= 0)
then
5789 ifincr = mod(ifhr,itprec)
5790 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
5797 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5800 id(18) = ifhr-itprec
5802 id(18) = ifhr-ifincr
5803 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5805 IF (id(18)<0) id(18) = 0
5806 if(grib==
'grib2')
then
5808 fld_info(cfld)%ifld=iavblfld(iget(137))
5810 fld_info(cfld)%ntrange=1
5812 fld_info(cfld)%ntrange=0
5814 fld_info(cfld)%tinvstat=ifhr-id(18)
5815 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5820 IF (iget(044)>0)
THEN
5823 grid1(i,j) = z0(i,j)
5826 if(grib==
'grib2')
then
5828 fld_info(cfld)%ifld=iavblfld(iget(044))
5829 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5834 IF (iget(045)>0)
THEN
5837 grid1(i,j) = ustar(i,j)
5840 if(grib==
'grib2')
then
5842 fld_info(cfld)%ifld=iavblfld(iget(045))
5843 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5849 IF (iget(132)>0)
THEN
5851 CALL
caldrg(egrid1(ista_2l:iend_2u,jsta_2l:jend_2u))
5854 IF(ustar(i,j) < spval) grid1(i,j)=egrid1(i,j)
5857 if(grib==
'grib2')
then
5859 fld_info(cfld)%ifld=iavblfld(iget(132))
5860 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5864 write_cd:
IF(iget(924)>0)
THEN
5867 grid1(i,j)=cd10(i,j)
5870 if(grib==
'grib2')
then
5872 fld_info(cfld)%ifld=iavblfld(iget(924))
5873 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5876 write_ch:
IF(iget(923)>0)
THEN
5879 grid1(i,j)=ch10(i,j)
5882 if(grib==
'grib2')
then
5884 fld_info(cfld)%ifld=iavblfld(iget(923))
5885 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5890 IF ( (iget(900)>0) .OR. (iget(901)>0) )
THEN
5893 IF (iget(900)>0)
THEN
5896 grid1(i,j)=mdltaux(i,j)
5899 if(grib==
'grib2')
then
5901 fld_info(cfld)%ifld=iavblfld(iget(900))
5902 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5908 IF (iget(901)>0)
THEN
5911 grid1(i,j)=mdltauy(i,j)
5914 if(grib==
'grib2')
then
5916 fld_info(cfld)%ifld=iavblfld(iget(901))
5917 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5923 IF ( (iget(133)>0) .OR. (iget(134)>0) )
THEN
5926 IF(modelname /=
'FV3R') &
5927 CALL caltau(egrid1(ista:iend,jsta:jend),egrid2(ista:iend,jsta:jend))
5931 IF (iget(133)>0)
THEN
5934 IF(modelname ==
'FV3R')
THEN
5935 grid1(i,j)=sfcuxi(i,j)
5937 grid1(i,j)=egrid1(i,j)
5942 if(grib==
'grib2')
then
5944 fld_info(cfld)%ifld=iavblfld(iget(133))
5945 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5950 IF (iget(134)>0)
THEN
5953 IF(modelname ==
'FV3R')
THEN
5954 grid1(i,j)=sfcvxi(i,j)
5956 grid1(i,j)=egrid2(i,j)
5960 if(grib==
'grib2')
then
5962 fld_info(cfld)%ifld=iavblfld(iget(134))
5963 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
5969 IF ( (iget(315)>0) .OR. (iget(316)>0) )
THEN
5972 IF (iget(315)>0)
THEN
5975 grid1(i,j) = gtaux(i,j)
5979 itsrfc = nint(tsrfc)
5980 IF(itsrfc /= 0)
then
5981 ifincr = mod(ifhr,itsrfc)
5982 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
5987 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
5990 id(18) = ifhr-itsrfc
5992 id(18) = ifhr-ifincr
5993 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
5995 IF (id(18)<0) id(18) = 0
5996 if(grib==
'grib2')
then
5998 fld_info(cfld)%ifld=iavblfld(iget(315))
6000 fld_info(cfld)%ntrange=0
6002 fld_info(cfld)%ntrange=1
6004 fld_info(cfld)%tinvstat=ifhr-id(18)
6005 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6010 IF (iget(316)>0)
THEN
6013 grid1(i,j)=gtauy(i,j)
6017 itsrfc = nint(tsrfc)
6018 IF(itsrfc /= 0)
then
6019 ifincr = mod(ifhr,itsrfc)
6020 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
6025 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
6028 id(18) = ifhr-itsrfc
6030 id(18) = ifhr-ifincr
6031 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
6033 IF (id(18)<0) id(18) = 0
6034 if(grib==
'grib2')
then
6036 fld_info(cfld)%ifld=iavblfld(iget(316))
6038 fld_info(cfld)%ntrange=0
6040 fld_info(cfld)%ntrange=1
6042 fld_info(cfld)%tinvstat=ifhr-id(18)
6043 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6049 IF (iget(154)>0)
THEN
6052 IF(modelname==
'NCAR'.OR.modelname==
'RSM' .OR. &
6053 modelname==
'RAPR')
THEN
6057 grid1(i,j) = twbs(i,j)
6064 IF(twbs(i,j) < spval) grid1(i,j) = -twbs(i,j)
6068 if(grib==
'grib2')
then
6070 fld_info(cfld)%ifld=iavblfld(iget(154))
6071 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6076 IF (iget(155)>0)
THEN
6079 IF(modelname==
'NCAR'.OR.modelname==
'RSM' .OR. &
6080 modelname==
'RAPR')
THEN
6084 grid1(i,j) = qwbs(i,j)
6091 IF(qwbs(i,j) < spval) grid1(i,j) = -qwbs(i,j)
6095 if(grib==
'grib2')
then
6097 fld_info(cfld)%ifld=iavblfld(iget(155))
6098 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6103 IF (iget(169)>0)
THEN
6106 grid1(i,j)=sfcexc(i,j)
6109 if(grib==
'grib2')
then
6111 fld_info(cfld)%ifld=iavblfld(iget(169))
6112 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6117 IF (iget(170)>0)
THEN
6121 if(vegfrc(i,j)/=spval) grid1(i,j)=vegfrc(i,j)*100.
6124 if(grib==
'grib2')
then
6126 fld_info(cfld)%ifld=iavblfld(iget(170))
6127 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6133 IF (iget(726)>0)
THEN
6137 if(shdmin(i,j)/=spval) grid1(i,j)=shdmin(i,j)*100.
6140 if(grib==
'grib2')
then
6142 fld_info(cfld)%ifld=iavblfld(iget(726))
6143 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6148 IF (iget(729)>0)
THEN
6152 if(shdmax(i,j)/=spval) grid1(i,j)=shdmax(i,j)*100.
6155 if(grib==
'grib2')
then
6157 fld_info(cfld)%ifld=iavblfld(iget(729))
6158 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6163 IF (modelname ==
'NCAR'.OR.modelname==
'NMM' .OR. &
6164 modelname ==
'FV3R' .OR. modelname==
'RAPR')
THEN
6165 IF (isf_surface_physics == 2 .OR. modelname==
'RAPR')
THEN
6166 IF (iget(254)>0)
THEN
6169 IF (modelname==
'RAPR')
THEN
6176 if(grib==
'grib2')
then
6178 fld_info(cfld)%ifld=iavblfld(iget(254))
6179 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6186 IF (iget(152)>0)
THEN
6189 grid1(i,j)=grnflx(i,j)
6192 if(grib==
'grib2')
then
6194 fld_info(cfld)%ifld=iavblfld(iget(152))
6195 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6199 IF (iget(218)>0)
THEN
6202 grid1(i,j) = float(ivgtyp(i,j))
6205 if(grib==
'grib2')
then
6207 fld_info(cfld)%ifld=iavblfld(iget(218))
6208 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6213 IF (iget(219)>0)
THEN
6216 grid1(i,j) = float(isltyp(i,j))
6219 if(grib==
'grib2')
then
6221 fld_info(cfld)%ifld=iavblfld(iget(219))
6222 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6226 IF (iget(223)>0)
THEN
6229 grid1(i,j) = float(islope(i,j))
6232 if(grib==
'grib2')
then
6234 fld_info(cfld)%ifld=iavblfld(iget(223))
6235 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6242 IF (modelname ==
'NCAR'.OR.modelname==
'NMM' .OR. &
6243 modelname ==
'FV3R' .OR. modelname==
'RAPR')
THEN
6244 IF (iget(220)>0 .OR. iget(234)>0 &
6245 & .OR. iget(235)>0 .OR. iget(236)>0 &
6246 & .OR. iget(237)>0 .OR. iget(238)>0 &
6247 & .OR. iget(239)>0 .OR. iget(240)>0 &
6248 & .OR. iget(241)>0 )
THEN
6249 IF (isf_surface_physics == 2)
THEN
6251 allocate(rsmin(ista:iend,jsta:jend), smcref(ista:iend,jsta:jend), gc(ista:iend,jsta:jend), &
6252 rcq(ista:iend,jsta:jend), rct(ista:iend,jsta:jend), rcsoil(ista:iend,jsta:jend), rcs(ista:iend,jsta:jend))
6255 IF( (abs(sm(i,j)-0.) < 1.0e-5) .AND. &
6256 & (abs(sice(i,j)-0.) < 1.0e-5) )
THEN
6257 IF(czmean(i,j)>1.e-6)
THEN
6258 factrs = czen(i,j)/czmean(i,j)
6263 llmh = nint(lmh(i,j))
6264 solar = rswin(i,j)*factrs
6265 sfctmp = t(i,j,llmh)
6267 sfcprs = pint(i,j,llmh+1)
6275 CALL canres(solar,sfctmp,sfcq,sfcprs &
6276 & ,sh2o(i,j,1:nsoil),gc(i,j),rc,ivg,isltyp(i,j) &
6277 & ,rsmin(i,j),nroots(i,j),smcwlt(i,j),smcref(i,j) &
6278 & ,rcs(i,j),rcq(i,j),rct(i,j),rcsoil(i,j),sldpth)
6279 IF(abs(smcwlt(i,j)-0.5)<1.e-5)print*, &
6280 &
'LARGE SMCWLT',i,j,sm(i,j),isltyp(i,j),smcwlt(i,j)
6295 IF (iget(220)>0 )
THEN
6298 grid1(i,j) = gc(i,j)
6301 if(grib==
'grib2')
then
6303 fld_info(cfld)%ifld=iavblfld(iget(220))
6304 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6308 IF (iget(234)>0 )
THEN
6311 grid1(i,j) = rsmin(i,j)
6314 if(grib==
'grib2')
then
6316 fld_info(cfld)%ifld=iavblfld(iget(234))
6317 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6321 IF (iget(235)>0 )
THEN
6324 grid1(i,j) = float(nroots(i,j))
6327 if(grib==
'grib2')
then
6329 fld_info(cfld)%ifld=iavblfld(iget(235))
6330 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6334 IF (iget(236)>0 )
THEN
6337 grid1(i,j) = smcwlt(i,j)
6340 if(grib==
'grib2')
then
6342 fld_info(cfld)%ifld=iavblfld(iget(236))
6343 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6347 IF (iget(237)>0 )
THEN
6350 grid1(i,j) = smcref(i,j)
6353 if(grib==
'grib2')
then
6355 fld_info(cfld)%ifld=iavblfld(iget(237))
6356 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6360 IF (iget(238)>0 )
THEN
6363 grid1(i,j) = rcs(i,j)
6366 if(grib==
'grib2')
then
6368 fld_info(cfld)%ifld=iavblfld(iget(238))
6369 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6373 IF (iget(239)>0 )
THEN
6376 grid1(i,j) = rct(i,j)
6379 if(grib==
'grib2')
then
6381 fld_info(cfld)%ifld=iavblfld(iget(239))
6382 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6386 IF (iget(240)>0 )
THEN
6389 grid1(i,j) = rcq(i,j)
6392 if(grib==
'grib2')
then
6394 fld_info(cfld)%ifld=iavblfld(iget(240))
6395 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6399 IF (iget(241)>0 )
THEN
6402 grid1(i,j) = rcsoil(i,j)
6405 if(grib==
'grib2')
then
6407 fld_info(cfld)%ifld=iavblfld(iget(241))
6408 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6412 if (
allocated(rsmin))
deallocate(rsmin)
6413 if (
allocated(smcref))
deallocate(smcref)
6414 if (
allocated(rcq))
deallocate(rcq)
6415 if (
allocated(rct))
deallocate(rct)
6416 if (
allocated(rcsoil))
deallocate(rcsoil)
6417 if (
allocated(rcs))
deallocate(rcs)
6418 if (
allocated(gc))
deallocate(gc)
6425 IF(modelname ==
'GFS')
THEN
6431 grid1(i,j) = smcwlt(i,j)
6439 if(grib==
'grib2')
then
6441 fld_info(cfld)%ifld=iavblfld(iget(236))
6447 datapd(i,j,cfld) = grid1(ii,jj)
6457 grid1(i,j) = fieldcapa(i,j)
6465 if(grib==
'grib2')
then
6467 fld_info(cfld)%ifld=iavblfld(iget(397))
6473 datapd(i,j,cfld) = grid1(ii,jj)
6483 grid1(i,j) = suntime(i,j)
6487 itsrfc = nint(tsrfc)
6488 IF(itsrfc /= 0)
then
6489 ifincr = mod(ifhr,itsrfc)
6490 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
6495 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
6498 id(18) = ifhr-itsrfc
6500 id(18) = ifhr-ifincr
6501 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
6503 IF (id(18)<0) id(18) = 0
6504 if(grib==
'grib2')
then
6506 fld_info(cfld)%ifld=iavblfld(iget(396))
6508 fld_info(cfld)%ntrange=1
6510 fld_info(cfld)%ntrange=0
6512 fld_info(cfld)%tinvstat=ifhr-id(18)
6518 datapd(i,j,cfld) = grid1(ii,jj)
6528 grid1(i,j) = avgpotevp(i,j)
6532 itsrfc = nint(tsrfc)
6533 IF(itsrfc /= 0)
then
6534 ifincr = mod(ifhr,itsrfc)
6535 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itsrfc*60)
6540 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
6543 id(18) = ifhr-itsrfc
6545 id(18) = ifhr-ifincr
6546 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
6548 IF (id(18)<0) id(18) = 0
6549 if(grib==
'grib2')
then
6551 fld_info(cfld)%ifld=iavblfld(iget(517))
6553 fld_info(cfld)%ntrange=1
6555 fld_info(cfld)%ntrange=0
6557 fld_info(cfld)%tinvstat=ifhr-id(18)
6563 datapd(i,j,cfld) = grid1(ii,jj)
6572 IF (iget(282)>0)
THEN
6579 if(grib==
'grib2')
then
6581 fld_info(cfld)%ifld=iavblfld(iget(282))
6582 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6587 IF (iget(283)>0)
THEN
6596 IF(pmid(1,1,l)>=(pdtop+pt))
EXIT
6600 CALL mpi_bcast(l,1,mpi_integer,0,mpi_comm_comp,irtn)
6601 if(grib==
'grib2')
then
6603 fld_info(cfld)%ifld=iavblfld(iget(283))
6604 fld_info(cfld)%lvl1=1
6605 fld_info(cfld)%lvl2=l
6606 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6611 IF (iget(273)>0)
THEN
6620 IF((pint(1,1,lm+1)-pd(1,1))<=(pint(1,1,l)+1.00))
EXIT
6624 CALL mpi_bcast(l,1,mpi_integer,0,mpi_comm_comp,irtn)
6625 if(grib==
'grib2')
then
6627 fld_info(cfld)%ifld=iavblfld(iget(273))
6628 fld_info(cfld)%lvl1=l
6629 fld_info(cfld)%lvl2=lm+1
6630 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6636 IF (iget(503)>0)
THEN
6639 grid1(i,j)=akhsavg(i,j)
6651 itsrfc = nint(tsrfc)
6652 if(grib==
'grib2')
then
6654 fld_info(cfld)%ifld=iavblfld(iget(503))
6656 fld_info(cfld)%ntrange=1
6658 fld_info(cfld)%ntrange=0
6660 fld_info(cfld)%tinvstat=ifhr-id(18)
6661 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6666 IF (iget(504)>0)
THEN
6669 grid1(i,j)=akmsavg(i,j)
6681 itsrfc = nint(tsrfc)
6682 if(grib==
'grib2')
then
6684 fld_info(cfld)%ifld=iavblfld(iget(504))
6686 fld_info(cfld)%ntrange=1
6688 fld_info(cfld)%ntrange=0
6690 fld_info(cfld)%tinvstat=ifhr-id(18)
6691 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
6707 use ctlblk_mod, only: spval,jsta,jend,im,dtq2,ifhr,ifmin,tprec,grib, &
6708 modelname,jm,cfld,datapd,fld_info,jsta_2l,jend_2u,&
6709 ista,iend,ista_2l,iend_2u
6711 use grib2_module, only: read_grib2_head, read_grib2_sngle
6712 use vrbls2d, only: avgprec, avgprec_cont
6714 character(len=256),
intent(in) :: compfile
6715 integer,
intent(in) :: igetfld,fcst
6716 integer :: trange,invstat
6717 real,
dimension(ista:iend,jsta:jend) :: outgrid
6719 real,
allocatable,
dimension(:,:) :: mscvalue
6721 integer :: nx, ny, nz, ntot, mscnlon, mscnlat, height
6722 integer :: itprec, ifincr
6723 real :: rlonmin, rlatmax
6726 logical :: file_exists
6728 integer :: i, j, k, ii, jj
6733 INQUIRE(file=compfile, exist=file_exists)
6734 if (file_exists)
then
6735 call read_grib2_head(compfile,nx,ny,nz,rlonmin,rlatmax,&
6739 if (.not.
allocated(mscvalue))
then
6740 allocate(mscvalue(mscnlon,mscnlat))
6743 call read_grib2_sngle(compfile,ntot,height,mscvalue)
6745 write(*,*)
'WARNING: FFG file not available for hour: ', fcst
6750 itprec = nint(tprec)
6751 if (itprec /= 0)
then
6752 ifincr = mod(ifhr,itprec)
6753 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itprec*60)
6759 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
6762 id(18) = ifhr-itprec
6764 id(18) = ifhr-ifincr
6765 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
6769 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
6771 IF (file_exists)
THEN
6774 IF (ifhr .EQ. 0 .OR. fcst .EQ. 0)
THEN
6776 ELSE IF (mscvalue(i,j) .LE. 0.0)
THEN
6778 ELSE IF (fcst .EQ. 1 .AND. avgprec(i,j)*float(id(19)-id(18))*3600.*1000./dtq2 .GT. mscvalue(i,j))
THEN
6780 ELSE IF (fcst .GT. 1 .AND. avgprec_cont(i,j)*float(ifhr)*3600.*1000./dtq2 .GT. mscvalue(i,j))
THEN
6789 IF (id(18).LT.0) id(18) = 0
6792 IF(fcst .EQ. 1)
THEN
6794 trange = (ifhr-id(18))/itprec
6799 IF(trange .EQ. 0)
THEN
6800 IF (ifhr .EQ. 0)
THEN
6809 IF (ifhr .EQ. fcst)
THEN
6816 IF(grib==
'grib2')
then
6818 fld_info(cfld)%ifld=iavblfld(iget(igetfld))
6819 fld_info(cfld)%ntrange=trange
6820 fld_info(cfld)%tinvstat=invstat
6826 datapd(i,j,cfld) = outgrid(ii,jj)
subroutine qpf_comp(igetfld, compfile, fcst)
qpf_comp() Read in QPF threshold for exceedance grid.
subroutine caldrg(DRAGCO)
This rountine computes a surface layer drag coefficient using equation (7.4.1A) in ["An introduction ...
subroutine dewpoint(VP, TD)
DEWPOINT() Subroutine that computes dewpoints from vapor pressure.
subroutine surfce
SURFCE posts surface-based fields.
subroutine bound(FLD, FMIN, FMAX)
This routine bounds data in the passed array FLD (im x jm elements long) and clips data values such t...
subroutine, public calrh(P1, T1, Q1, RH)
CALRH() computes relative humidity.
elemental real function, public fpvsnew(t)