35 SUBROUTINE mdl2p(iostatusD3D)
40 use vrbls3d, only: pint, o3, pmid, t, q, uh, vh, wh, omga, q2, cwm, &
41 qqw, qqi, qqr, qqs, qqg, dbz, f_rimef, ttnd, cfr, &
42 rlwtt, rswtt, vdifftt, tcucn, tcucns, &
43 train, vdiffmois, dconvmois, sconvmois,nradtt, &
44 o3vdiff, o3prod, o3tndy, mwpv, unknown, vdiffzacce, &
45 zgdrag, cnvctvmmixing, vdiffmacce, mgdrag, &
46 cnvctummixing, ncnvctcfrac, cnvctumflx, cnvctdetmflx, &
47 cnvctzgdrag, cnvctmgdrag, zmid, zint, pmidv, &
49 use vrbls2d, only: t500,t700,w_up_max,w_dn_max,w_mean,pslp,fis,z1000,z700,&
51 use masks, only: lmh, sm
52 use physcons_post,only: con_fvirt, con_rog, con_eps, con_epsm1
53 use params_mod, only: h1m12, dbzmin, h1, pq0, a2, a3, a4, rhmin, g, &
54 rgamog, rd, d608, gi, erad, pi, small, h100, &
56 use ctlblk_mod
, only: modelname, lp1, me, jsta, jend, lm, spval, spl, &
57 alsl, jend_m, smflag, grib, cfld, fld_info, datapd,&
58 td3d, ifhr, ifmin, im, jm, nbin_du, jsta_2l, &
59 jend_2u, lsm, d3d_on, gocart_on, ioform, nbin_sm, &
60 imp_physics, ista, iend, ista_m, iend_m, ista_2l, iend_2u
61 use rqstfld_mod
, only: iget, lvls, id, iavblfld, lvlsxml
62 use gridspec_mod
, only: gridtype, maptype, dxval
73 real,
parameter:: gammam=-1*gamma,zshul=75.,tvshul=290.66
77 real,
PARAMETER :: capa=0.28589641,p1000=1000.e2
79 real,
dimension(im,jm) :: grid1, grid2
80 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: fsl, tsl, qsl, osl, usl, vsl &
81 &, Q2SL, WSL, CFRSL, O3SL, TDSL &
83 &, FSL_OLD, USL_OLD, VSL_OLD &
86 REAL,
allocatable :: d3dsl(:,:,:), dustsl(:,:,:), smokesl(:,:,:)
88 integer,
intent(in) :: iostatusd3d
89 INTEGER,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: nl1x, nl1xf
90 real,
dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM) :: tprs, qprs, fprs
104 REAL,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: c1d, qw1, qi1, qr1, qs1, qg1, dbz1 &
110 REAL savrh(ista:iend,jsta:jend)
112 integer i,j,l,lp,ll,llmh,jjb,jje,ii,jj,li,ifincr,itd3d,istaa,imois,luhi,la
113 real fact,alpsl,psfc,qblo,pnl1,tblo,tvrl,tvrblo,fac,pslpij, &
114 alpth,ahf,pdv,ql,tvu,tvd,gammas,qsat,rhl,zl,tl,pl,es,part,dum1
122 if(me==0) print*,
'MDL2P SMFLAG=',smflag
124 if (modelname ==
'GFS')
then
130 if (.not.
allocated(d3dsl))
allocate(d3dsl(im,jm,27))
141 if (.not.
allocated(dustsl))
allocate(dustsl(im,jm,nbin_du))
146 dustsl(i,j,l) = spval
151 if (.not.
allocated(smokesl))
allocate(smokesl(im,jm,nbin_sm))
156 smokesl(i,j,l) = spval
170 IF((iget(012) > 0) .OR. (iget(013) > 0) .OR. &
171 (iget(014) > 0) .OR. (iget(015) > 0) .OR. &
172 (iget(016) > 0) .OR. (iget(017) > 0) .OR. &
173 (iget(018) > 0) .OR. (iget(019) > 0) .OR. &
174 (iget(020) > 0) .OR. (iget(030) > 0) .OR. &
175 (iget(021) > 0) .OR. (iget(022) > 0) .OR. &
176 (iget(023) > 0) .OR. (iget(085) > 0) .OR. &
177 (iget(086) > 0) .OR. (iget(284) > 0) .OR. &
178 (iget(153) > 0) .OR. (iget(166) > 0) .OR. &
179 (iget(183) > 0) .OR. (iget(184) > 0) .OR. &
180 (iget(198) > 0) .OR. (iget(251) > 0) .OR. &
181 (iget(257) > 0) .OR. (iget(258) > 0) .OR. &
182 (iget(294) > 0) .OR. (iget(268) > 0) .OR. &
183 (iget(331) > 0) .OR. (iget(326) > 0) .OR. &
185 (iget(354) > 0) .OR. (iget(355) > 0) .OR. &
186 (iget(356) > 0) .OR. (iget(357) > 0) .OR. &
187 (iget(358) > 0) .OR. (iget(359) > 0) .OR. &
188 (iget(360) > 0) .OR. (iget(361) > 0) .OR. &
189 (iget(362) > 0) .OR. (iget(363) > 0) .OR. &
190 (iget(364) > 0) .OR. (iget(365) > 0) .OR. &
191 (iget(366) > 0) .OR. (iget(367) > 0) .OR. &
192 (iget(368) > 0) .OR. (iget(369) > 0) .OR. &
193 (iget(370) > 0) .OR. (iget(371) > 0) .OR. &
194 (iget(372) > 0) .OR. (iget(373) > 0) .OR. &
195 (iget(374) > 0) .OR. (iget(375) > 0) .OR. &
196 (iget(391) > 0) .OR. (iget(392) > 0) .OR. &
197 (iget(393) > 0) .OR. (iget(394) > 0) .OR. &
198 (iget(395) > 0) .OR. (iget(379) > 0) .OR. &
200 (iget(438) > 0) .OR. (iget(439) > 0) .OR. &
201 (iget(440) > 0) .OR. (iget(441) > 0) .OR. &
202 (iget(442) > 0) .OR. (iget(455) > 0) .OR. &
204 (iget(738) > 0) .OR. (modelname ==
'RAPR') .OR.&
206 (iget(030)>0) .OR. (iget(031)>0) .OR. (iget(075)>0))
THEN
216 if(gridtype ==
'B' .or. gridtype ==
'E') &
217 call exch(pint(ista_2l:iend_2u,jsta_2l:jend_2u,lp1))
256 IF(nl1x(i,j) == lp1 .AND. pmid(i,j,l) > spl(lp))
THEN
266 IF(nl1x(i,j) == lp1 .AND. pint(i,j,lp1) > spl(lp))
THEN
272 IF(nl1xf(i,j) == (lp1+1) .AND. pint(i,j,l) > spl(lp))
THEN
302 llmh = nint(lmh(i,j))
306 IF(spl(lp) < pint(i,j,2))
THEN
307 IF(t(i,j,1) < spval) tsl(i,j) = t(i,j,1)
308 IF(q(i,j,1) < spval) qsl(i,j) = q(i,j,1)
310 IF(gridtype ==
'A')
THEN
311 IF(uh(i,j,1) < spval) usl(i,j) = uh(i,j,1)
312 IF(vh(i,j,1) < spval) vsl(i,j) = vh(i,j,1)
318 IF(wh(i,j,1) < spval) wsl(i,j) = wh(i,j,1)
319 IF(omga(i,j,1) < spval) osl(i,j) = omga(i,j,1)
320 IF(q2(i,j,1) < spval) q2sl(i,j) = q2(i,j,1)
321 IF(cwm(i,j,1) < spval) c1d(i,j) = cwm(i,j,1)
322 c1d(i,j) = max(c1d(i,j),zero)
323 IF(qqw(i,j,1) < spval) qw1(i,j) = qqw(i,j,1)
324 qw1(i,j) = max(qw1(i,j),zero)
325 IF(qqi(i,j,1) < spval) qi1(i,j) = qqi(i,j,1)
326 qi1(i,j) = max(qi1(i,j),zero)
327 IF(qqr(i,j,1) < spval) qr1(i,j) = qqr(i,j,1)
328 qr1(i,j) = max(qr1(i,j),zero)
329 IF(qqs(i,j,1) < spval) qs1(i,j) = qqs(i,j,1)
330 qs1(i,j) = max(qs1(i,j),zero)
331 IF(qqg(i,j,1) < spval) qg1(i,j) = qqg(i,j,1)
332 qg1(i,j) = max(qg1(i,j),zero)
333 IF(dbz(i,j,1) < spval) dbz1(i,j) = dbz(i,j,1)
334 dbz1(i,j) = max(dbz1(i,j),dbzmin)
335 IF(f_rimef(i,j,1) < spval) frime(i,j) = f_rimef(i,j,1)
336 frime(i,j) = max(frime(i,j),h1)
337 IF(ttnd(i,j,1) < spval) rad(i,j) = ttnd(i,j,1)
338 IF(o3(i,j,1) < spval) o3sl(i,j) = o3(i,j,1)
339 IF(cfr(i,j,1) < spval) cfrsl(i,j) = cfr(i,j,1)
343 IF(dust(i,j,1,k) < spval) dustsl(i,j,k) = dust(i,j,1,k)
347 IF(smoke(i,j,1,k) < spval) smokesl(i,j,k)=smoke(i,j,1,k)
353 IF((iget(354) > 0) .OR. (iget(355) > 0) .OR. &
354 (iget(356) > 0) .OR. (iget(357) > 0) .OR. &
355 (iget(358) > 0) .OR. (iget(359) > 0) .OR. &
356 (iget(360) > 0) .OR. (iget(361) > 0) .OR. &
357 (iget(362) > 0) .OR. (iget(363) > 0) .OR. &
358 (iget(364) > 0) .OR. (iget(365) > 0) .OR. &
359 (iget(366) > 0) .OR. (iget(367) > 0) .OR. &
360 (iget(368) > 0) .OR. (iget(369) > 0) .OR. &
361 (iget(370) > 0) .OR. (iget(371) > 0) .OR. &
362 (iget(372) > 0) .OR. (iget(373) > 0) .OR. &
363 (iget(374) > 0) .OR. (iget(375) > 0) .OR. &
364 (iget(391) > 0) .OR. (iget(392) > 0) .OR. &
365 (iget(393) > 0) .OR. (iget(394) > 0) .OR. &
366 (iget(395) > 0) .OR. (iget(379) > 0))
THEN
367 d3dsl(i,j,1) = rlwtt(i,j,1)
368 d3dsl(i,j,2) = rswtt(i,j,1)
369 d3dsl(i,j,3) = vdifftt(i,j,1)
370 d3dsl(i,j,4) = tcucn(i,j,1)
371 d3dsl(i,j,5) = tcucns(i,j,1)
372 d3dsl(i,j,6) = train(i,j,1)
373 d3dsl(i,j,7) = vdiffmois(i,j,1)
374 d3dsl(i,j,8) = dconvmois(i,j,1)
375 d3dsl(i,j,9) = sconvmois(i,j,1)
376 d3dsl(i,j,10) = nradtt(i,j,1)
377 d3dsl(i,j,11) = o3vdiff(i,j,1)
378 d3dsl(i,j,12) = o3prod(i,j,1)
379 d3dsl(i,j,13) = o3tndy(i,j,1)
380 d3dsl(i,j,14) = mwpv(i,j,1)
381 d3dsl(i,j,15) = unknown(i,j,1)
382 d3dsl(i,j,16) = vdiffzacce(i,j,1)
383 d3dsl(i,j,17) = zgdrag(i,j,1)
384 d3dsl(i,j,18) = cnvctummixing(i,j,1)
385 d3dsl(i,j,19) = vdiffmacce(i,j,1)
386 d3dsl(i,j,20) = mgdrag(i,j,1)
387 d3dsl(i,j,21) = cnvctvmmixing(i,j,1)
388 d3dsl(i,j,22) = ncnvctcfrac(i,j,1)
389 d3dsl(i,j,23) = cnvctumflx(i,j,1)
390 d3dsl(i,j,24) = cnvctdmflx(i,j,1)
391 d3dsl(i,j,25) = cnvctdetmflx(i,j,1)
392 d3dsl(i,j,26) = cnvctzgdrag(i,j,1)
393 d3dsl(i,j,27) = cnvctmgdrag(i,j,1)
397 ELSE IF(ll <= llmh)
THEN
407 IF (modelname ==
'RAPR' .OR. modelname ==
'NCAR' .OR. modelname ==
'NMM')
THEN
408 fact = (alsl(lp)-log(pmid(i,j,ll)))/ &
409 max(1.e-6,(log(pmid(i,j,ll))-log(pmid(i,j,ll-1))))
410 fact = max(-10.0,min(fact, 10.0))
411 ELSEIF (modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
412 fact = (alsl(lp)-log(pmid(i,j,ll)))/ &
413 max(1.e-6,(log(pmid(i,j,ll))-log(pmid(i,j,ll-1))))
414 fact = max(-10.0,min(fact, 10.0))
415 IF ( abs(pmid(i,j,ll)-pmid(i,j,ll-1)) < 0.5 )
THEN
419 fact = (alsl(lp)-log(pmid(i,j,ll)))/ &
420 (log(pmid(i,j,ll))-log(pmid(i,j,ll-1)))
422 IF(t(i,j,ll) < spval .AND. t(i,j,ll-1) < spval) &
423 tsl(i,j) = t(i,j,ll)+(t(i,j,ll)-t(i,j,ll-1))*fact
424 IF(q(i,j,ll) < spval .AND. q(i,j,ll-1) < spval) &
425 qsl(i,j) = q(i,j,ll)+(q(i,j,ll)-q(i,j,ll-1))*fact
427 IF(gridtype==
'A')
THEN
428 IF(uh(i,j,ll) < spval .AND. uh(i,j,ll-1) < spval) &
429 usl(i,j) = uh(i,j,ll)+(uh(i,j,ll)-uh(i,j,ll-1))*fact
430 IF(vh(i,j,ll) < spval .AND. vh(i,j,ll-1) < spval) &
431 vsl(i,j) = vh(i,j,ll)+(vh(i,j,ll)-vh(i,j,ll-1))*fact
434 IF(wh(i,j,ll) < spval .AND. wh(i,j,ll-1) < spval) &
435 wsl(i,j) = wh(i,j,ll)+(wh(i,j,ll)-wh(i,j,ll-1))*fact
436 IF(omga(i,j,ll) < spval .AND. omga(i,j,ll-1) < spval) &
437 osl(i,j) = omga(i,j,ll)+(omga(i,j,ll)-omga(i,j,ll-1))*fact
438 IF(q2(i,j,ll) < spval .AND. q2(i,j,ll-1) < spval) &
439 q2sl(i,j) = q2(i,j,ll)+(q2(i,j,ll)-q2(i,j,ll-1))*fact
445 if (modelname ==
'GFS')
then
446 es = min(
fpvsnew(tsl(i,j)), spl(lp))
447 qsat = con_eps*es/(spl(lp)+con_epsm1*es)
449 qsat = pq0/spl(lp)*exp(a2*(tsl(i,j)-a3)/(tsl(i,j)-a4))
452 rhl = max(rhmin, min(1.0, qsl(i,j)/qsat))
459 IF(q2sl(i,j) < 0.0) q2sl(i,j) = 0.0
462 IF(cwm(i,j,ll) < spval .AND. cwm(i,j,ll-1) < spval) &
463 c1d(i,j) = cwm(i,j,ll) + (cwm(i,j,ll)-cwm(i,j,ll-1))*fact
464 c1d(i,j) = max(c1d(i,j),zero)
466 IF(qqw(i,j,ll) < spval .AND. qqw(i,j,ll-1) < spval) &
467 qw1(i,j) = qqw(i,j,ll) + (qqw(i,j,ll)-qqw(i,j,ll-1))*fact
468 qw1(i,j) = max(qw1(i,j),zero)
470 IF(qqi(i,j,ll) < spval .AND. qqi(i,j,ll-1) < spval) &
471 qi1(i,j) = qqi(i,j,ll) + (qqi(i,j,ll)-qqi(i,j,ll-1))*fact
472 qi1(i,j) = max(qi1(i,j),zero)
474 IF(qqr(i,j,ll) < spval .AND. qqr(i,j,ll-1) < spval) &
475 qr1(i,j) = qqr(i,j,ll) + (qqr(i,j,ll)-qqr(i,j,ll-1))*fact
476 qr1(i,j) = max(qr1(i,j),zero)
478 IF(qqs(i,j,ll) < spval .AND. qqs(i,j,ll-1) < spval) &
479 qs1(i,j) = qqs(i,j,ll) + (qqs(i,j,ll)-qqs(i,j,ll-1))*fact
480 qs1(i,j) = max(qs1(i,j),zero)
482 IF(qqg(i,j,ll) < spval .AND. qqg(i,j,ll-1) < spval) &
483 qg1(i,j) = qqg(i,j,ll) + (qqg(i,j,ll)-qqg(i,j,ll-1))*fact
484 qg1(i,j) = max(qg1(i,j),zero)
486 IF(dbz(i,j,ll) < spval .AND. dbz(i,j,ll-1) < spval) &
487 dbz1(i,j) = dbz(i,j,ll) + (dbz(i,j,ll)-dbz(i,j,ll-1))*fact
488 dbz1(i,j) = max(dbz1(i,j),dbzmin)
490 IF(f_rimef(i,j,ll) < spval .AND. f_rimef(i,j,ll-1) < spval) &
491 frime(i,j) = f_rimef(i,j,ll) + (f_rimef(i,j,ll) - f_rimef(i,j,ll-1))*fact
492 frime(i,j)=max(frime(i,j),h1)
494 IF(ttnd(i,j,ll) < spval .AND. ttnd(i,j,ll-1) < spval) &
495 rad(i,j) = ttnd(i,j,ll) + (ttnd(i,j,ll)-ttnd(i,j,ll-1))*fact
497 IF(o3(i,j,ll) < spval .AND. o3(i,j,ll-1) < spval) &
498 o3sl(i,j) = o3(i,j,ll) + (o3(i,j,ll)-o3(i,j,ll-1))*fact
500 IF(cfr(i,j,ll) < spval .AND. cfr(i,j,ll-1) < spval) &
501 cfrsl(i,j) = cfr(i,j,ll) + (cfr(i,j,ll)-cfr(i,j,ll-1))*fact
505 IF(dust(i,j,ll,k) < spval .AND. dust(i,j,ll-1,k) < spval) &
506 dustsl(i,j,k) = dust(i,j,ll,k) + (dust(i,j,ll,k)-dust(i,j,ll-1,k))*fact
510 IF(smoke(i,j,ll,k) < spval .AND. smoke(i,j,ll-1,k) < spval) &
511 smokesl(i,j,k)=smoke(i,j,ll,k)+(smoke(i,j,ll,k)-smoke(i,j,ll-1,k))*fact
517 IF((iget(354) > 0) .OR. (iget(355) > 0) .OR. &
518 (iget(356) > 0) .OR. (iget(357) > 0) .OR. &
519 (iget(358) > 0) .OR. (iget(359) > 0) .OR. &
520 (iget(360) > 0) .OR. (iget(361) > 0) .OR. &
521 (iget(362) > 0) .OR. (iget(363) > 0) .OR. &
522 (iget(364) > 0) .OR. (iget(365) > 0) .OR. &
523 (iget(366) > 0) .OR. (iget(367) > 0) .OR. &
524 (iget(368) > 0) .OR. (iget(369) > 0) .OR. &
525 (iget(370) > 0) .OR. (iget(371) > 0) .OR. &
526 (iget(372) > 0) .OR. (iget(373) > 0) .OR. &
527 (iget(374) > 0) .OR. (iget(375) > 0) .OR. &
528 (iget(391) > 0) .OR. (iget(392) > 0) .OR. &
529 (iget(393) > 0) .OR. (iget(394) > 0) .OR. &
530 (iget(395) > 0) .OR. (iget(379) > 0))
THEN
531 d3dsl(i,j,1) = rlwtt(i,j,ll)+(rlwtt(i,j,ll) &
532 - rlwtt(i,j,ll-1))*fact
533 d3dsl(i,j,2) = rswtt(i,j,ll)+(rswtt(i,j,ll) &
534 - rswtt(i,j,ll-1))*fact
535 d3dsl(i,j,3) = vdifftt(i,j,ll)+(vdifftt(i,j,ll) &
536 - vdifftt(i,j,ll-1))*fact
537 d3dsl(i,j,4) = tcucn(i,j,ll)+(tcucn(i,j,ll) &
538 - tcucn(i,j,ll-1))*fact
539 d3dsl(i,j,5) = tcucns(i,j,ll)+(tcucns(i,j,ll) &
540 - tcucns(i,j,ll-1))*fact
541 d3dsl(i,j,6) = train(i,j,ll)+(train(i,j,ll) &
542 - train(i,j,ll-1))*fact
543 d3dsl(i,j,7) = vdiffmois(i,j,ll)+ &
544 (vdiffmois(i,j,ll)-vdiffmois(i,j,ll-1))*fact
545 d3dsl(i,j,8) = dconvmois(i,j,ll)+ &
546 (dconvmois(i,j,ll)-dconvmois(i,j,ll-1))*fact
547 d3dsl(i,j,9) = sconvmois(i,j,ll)+ &
548 (sconvmois(i,j,ll)-sconvmois(i,j,ll-1))*fact
549 d3dsl(i,j,10) = nradtt(i,j,ll)+ &
550 (nradtt(i,j,ll)-nradtt(i,j,ll-1))*fact
551 d3dsl(i,j,11) = o3vdiff(i,j,ll)+ &
552 (o3vdiff(i,j,ll)-o3vdiff(i,j,ll-1))*fact
553 d3dsl(i,j,12) = o3prod(i,j,ll)+ &
554 (o3prod(i,j,ll)-o3prod(i,j,ll-1))*fact
555 d3dsl(i,j,13) = o3tndy(i,j,ll)+ &
556 (o3tndy(i,j,ll)-o3tndy(i,j,ll-1))*fact
557 d3dsl(i,j,14) = mwpv(i,j,ll)+ &
558 (mwpv(i,j,ll)-mwpv(i,j,ll-1))*fact
559 d3dsl(i,j,15) = unknown(i,j,ll)+ &
560 (unknown(i,j,ll)-unknown(i,j,ll-1))*fact
561 d3dsl(i,j,16) = vdiffzacce(i,j,ll)+ &
562 (vdiffzacce(i,j,ll)-vdiffzacce(i,j,ll-1))*fact
563 d3dsl(i,j,17) = zgdrag(i,j,ll)+ &
564 (zgdrag(i,j,ll)-zgdrag(i,j,ll-1))*fact
565 d3dsl(i,j,18) = cnvctummixing(i,j,ll)+ &
566 (cnvctummixing(i,j,ll)-cnvctummixing(i,j,ll-1))*fact
567 d3dsl(i,j,19) = vdiffmacce(i,j,ll)+ &
568 (vdiffmacce(i,j,ll)-vdiffmacce(i,j,ll-1))*fact
569 d3dsl(i,j,20) = mgdrag(i,j,ll)+ &
570 (mgdrag(i,j,ll)-mgdrag(i,j,ll-1))*fact
571 d3dsl(i,j,21) = cnvctvmmixing(i,j,ll)+ &
572 (cnvctvmmixing(i,j,ll)-cnvctvmmixing(i,j,ll-1))*fact
573 d3dsl(i,j,22) = ncnvctcfrac(i,j,ll)+ &
574 (ncnvctcfrac(i,j,ll)-ncnvctcfrac(i,j,ll-1))*fact
575 d3dsl(i,j,23) = cnvctumflx(i,j,ll)+ &
576 (cnvctumflx(i,j,ll)-cnvctumflx(i,j,ll-1))*fact
577 d3dsl(i,j,24) = cnvctdmflx(i,j,ll)+ &
578 (cnvctdmflx(i,j,ll)-cnvctdmflx(i,j,ll-1))*fact
579 d3dsl(i,j,25) = cnvctdetmflx(i,j,ll)+ &
580 (cnvctdetmflx(i,j,ll)-cnvctdetmflx(i,j,ll-1))*fact
581 d3dsl(i,j,26) = cnvctzgdrag(i,j,ll)+ &
582 (cnvctzgdrag(i,j,ll)-cnvctzgdrag(i,j,ll-1))*fact
583 d3dsl(i,j,27) = cnvctmgdrag(i,j,ll)+ &
584 (cnvctmgdrag(i,j,ll)-cnvctmgdrag(i,j,ll-1))*fact
593 IF(modelname ==
'GFS')
THEN
594 tvu = t(i,j,lm) * (1.+con_fvirt*q(i,j,lm))
595 if(zmid(i,j,lm) > zshul)
then
596 tvd = tvu + gamma*zmid(i,j,lm)
597 if(tvd > tvshul)
then
598 if(tvu > tvshul)
then
599 tvd = tvshul - 5.e-3*(tvu-tvshul)*(tvu-tvshul)
604 gammas = (tvu-tvd)/zmid(i,j,lm)
608 part = con_rog*(alsl(lp)-log(pmid(i,j,lm)))
609 fsl(i,j) = zmid(i,j,lm) - tvu*part/(1.+0.5*gammas*part)
611 tsl(i,j) = t(i,j,lm) - gamma*(fsl(i,j)-zmid(i,j,lm))
612 fsl(i,j) = fsl(i,j)*g
616 es = min(
fpvsnew(t(i,j,lm)), pmid(i,j,lm))
617 qsat = con_eps*es/(pmid(i,j,lm)+con_epsm1*es)
620 es = min(
fpvsnew(tsl(i,j)), spl(lp))
621 qsat = con_eps*es/(spl(lp)+con_epsm1*es)
628 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
629 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
639 qsat = pq0/pl*exp(a2*(tl-a3)/(tl-a4))
652 tvrl = tl*(1.+0.608*ql)
653 tvrblo = tvrl*(spl(lp)/pl)**rgamog
654 tblo = tvrblo/(1.+0.608*ql)
665 qsat = pq0/spl(lp)*exp(a2*(tblo-a3)/(tblo-a4))
668 qsl(i,j) = max(1.e-12,qblo)
674 IF(gridtype ==
'A')
THEN
675 usl(i,j) = uh(i,j,llmh)
676 vsl(i,j) = vh(i,j,llmh)
680 wsl(i,j) = wh(i,j,llmh)
681 osl(i,j) = omga(i,j,llmh)
682 q2sl(i,j) = max(0.0,0.5*(q2(i,j,llmh-1)+q2(i,j,llmh)))
720 o3sl(i,j) = o3(i,j,llmh)
726 IF(modelname ==
'GFS')
then
728 IF(spl(lp) < pmid(i,j,1))
THEN
729 tvd = t(i,j,1)*(1+con_fvirt*q(i,j,1))
730 fsl(i,j) = zmid(i,j,1)-con_rog*tvd *(alsl(lp)-log(pmid(i,j,1)))
731 fsl(i,j) = fsl(i,j)*g
732 ELSE IF(l <= llmh)
THEN
733 tvd = t(i,j,l)*(1+con_fvirt*q(i,j,l))
734 tvu = tsl(i,j)*(1+con_fvirt*qsl(i,j))
735 fsl(i,j) = zmid(i,j,l)-con_rog*0.5*(tvd+tvu) &
736 * (alsl(lp)-log(pmid(i,j,l)))
737 fsl(i,j) = fsl(i,j)*g
741 IF(nl1xf(i,j)<=(llmh+1))
THEN
742 fact = (alsl(lp)-log(pint(i,j,la)))/ &
743 (log(pint(i,j,la))-log(pint(i,j,la-1)))
744 IF(zint(i,j,la) < spval .AND. zint(i,j,la-1) < spval) &
745 fsl(i,j) = zint(i,j,la)+(zint(i,j,la)-zint(i,j,la-1))*fact
746 fsl(i,j) = fsl(i,j)*g
748 fsl(i,j) = fprs(i,j,lp-1)-rd*(tprs(i,j,lp-1) &
749 * (h1+d608*qprs(i,j,lp-1)) &
750 + tsl(i,j)*(h1+d608*qsl(i,j))) &
751 * log(spl(lp)/spl(lp-1))/2.0
764 tprs(i,j,lp) = tsl(i,j)
765 qprs(i,j,lp) = qsl(i,j)
766 fprs(i,j,lp) = fsl(i,j)
772 IF(gridtype ==
'E')
THEN
775 DO i=ista_m,iend-mod(j,2)
811 IF(nl1x(i,j) == lp1.AND.pmidv(i,j,l) > spl(lp))
THEN
824 IF(nl1x(i,j) == lp1)
THEN
825 IF(j == jsta .AND. i < iend)
THEN
826 pdv = 0.5*(pint(i,j,lp1)+pint(i+1,j,lp1))
827 ELSE IF(j == jend .AND. i < iend)
THEN
828 pdv = 0.5*(pint(i,j,lp1)+pint(i+1,j,lp1))
829 ELSE IF(i == ista .AND. mod(j,2) == 0)
THEN
830 pdv = 0.5*(pint(i,j-1,lp1)+pint(i,j+1,lp1))
831 ELSE IF(i == iend .AND. mod(j,2) == 0)
THEN
832 pdv = 0.5*(pint(i,j-1,lp1)+pint(i,j+1,lp1))
833 ELSE IF (mod(j,2) < 1)
THEN
834 pdv = 0.25*(pint(i,j,lp1)+pint(i-1,j,lp1) &
835 + pint(i,j+1,lp1)+pint(i,j-1,lp1))
837 pdv = 0.25*(pint(i,j,lp1)+pint(i+1,j,lp1) &
838 + pint(i,j+1,lp1)+pint(i,j-1,lp1))
840 IF(pdv > spl(lp))
THEN
850 DO i=ista,iend-mod(j,2)
857 llmh = nint(lmh(i,j))
859 IF(spl(lp) < pint(i,j,2))
THEN
860 IF(uh(i,j,1) < spval) usl(i,j) = uh(i,j,1)
861 IF(vh(i,j,1) < spval) vsl(i,j) = vh(i,j,1)
863 ELSE IF(nl1x(i,j)<=llmh)
THEN
873 fact = (alsl(lp)-log(pmidv(i,j,ll)))/ &
874 (log(pmidv(i,j,ll))-log(pmidv(i,j,ll-1)))
875 IF(uh(i,j,ll) < spval .AND. uh(i,j,ll-1) < spval) &
876 usl(i,j) = uh(i,j,ll)+(uh(i,j,ll)-uh(i,j,ll-1))*fact
877 IF(vh(i,j,ll) < spval .AND. vh(i,j,ll-1) < spval) &
878 vsl(i,j) = vh(i,j,ll)+(vh(i,j,ll)-vh(i,j,ll-1))*fact
887 IF(uh(i,j,llmh) < spval) usl(i,j) = uh(i,j,llmh)
888 IF(vh(i,j,llmh) < spval) vsl(i,j) = vh(i,j,llmh)
895 IF(mod(jsta,2) == 0) jjb = jsta+1
897 IF(mod(jend,2) == 0) jje = jend-1
899 usl(iend,j) = usl(iend-1,j)
900 vsl(iend,j) = vsl(iend-1,j)
902 ELSE IF(gridtype==
'B')
THEN
911 IF(nl1x(i,j) == lp1.AND.pmidv(i,j,l) > spl(lp))
THEN
923 IF(nl1x(i,j)==lp1)
THEN
924 pdv = 0.25*(pint(i,j,lp1)+pint(i+1,j,lp1) &
925 + pint(i,j+1,lp1)+pint(i+1,j+1,lp1))
926 IF(pdv > spl(lp))
THEN
943 llmh = nint(lmh(i,j))
945 IF(spl(lp) < pint(i,j,2))
THEN
946 IF(uh(i,j,1) < spval) usl(i,j) = uh(i,j,1)
947 IF(vh(i,j,1) < spval) vsl(i,j) = vh(i,j,1)
949 ELSE IF(nl1x(i,j)<=llmh)
THEN
959 fact = (alsl(lp)-log(pmidv(i,j,ll)))/ &
960 (log(pmidv(i,j,ll))-log(pmidv(i,j,ll-1)))
961 IF(uh(i,j,ll) < spval .AND. uh(i,j,ll-1) < spval) &
962 usl(i,j)=uh(i,j,ll)+(uh(i,j,ll)-uh(i,j,ll-1))*fact
963 IF(vh(i,j,ll) < spval .AND. vh(i,j,ll-1) < spval) &
964 vsl(i,j)=vh(i,j,ll)+(vh(i,j,ll)-vh(i,j,ll-1))*fact
973 IF(uh(i,j,llmh) < spval)usl(i,j)=uh(i,j,llmh)
974 IF(vh(i,j,llmh) < spval)vsl(i,j)=vh(i,j,llmh)
990 IF(nint(spl(lp)) == 50000)
THEN
995 z500(i,j) = fsl(i,j)*gi
1003 IF(nint(spl(lp)) == 70000)
THEN
1007 t700(i,j) = tsl(i,j)
1008 z700(i,j) = fsl(i,j)*gi
1071 IF(iget(012) > 0)
THEN
1072 IF(lvls(lp,iget(012)) > 0)
THEN
1073 IF((iget(023) > 0 .OR. iget(445) > 0) .AND. nint(spl(lp)) == 100000)
THEN
1079 IF(fsl(i,j) < spval)
THEN
1080 grid1(i,j) = fsl(i,j)*gi
1089 if(maptype == 6)
then
1090 if(grib==
'grib2')
then
1091 dxm = (dxval / 360.)*(erad*2.*pi)/1.d6
1096 if(grib ==
'grib2')
then
1100 nsmooth = nint(5.*(13500./dxm))
1101 call allgetherv(grid1)
1103 CALL smooth(grid1,sdummy,im,jm,0.5)
1106 if(grib ==
'grib2')
then
1108 fld_info(cfld)%ifld=iavblfld(iget(012))
1109 fld_info(cfld)%lvl=lvlsxml(lp,iget(012))
1115 datapd(i,j,cfld) = grid1(ii,jj)
1126 IF(iget(013) > 0)
THEN
1127 IF(lvls(lp,iget(013)) > 0)
THEN
1131 grid1(i,j) = tsl(i,j)
1136 nsmooth = nint(3.*(13500./dxm))
1137 call allgetherv(grid1)
1139 CALL smooth(grid1,sdummy,im,jm,0.5)
1143 if(grib ==
'grib2')
then
1145 fld_info(cfld)%ifld = iavblfld(iget(013))
1146 fld_info(cfld)%lvl = lvlsxml(lp,iget(013))
1152 datapd(i,j,cfld) = grid1(ii,jj)
1161 IF(iget(910)>0)
THEN
1162 IF(lvls(lp,iget(910))>0)
THEN
1166 IF(tsl(i,j) < spval .AND. qsl(i,j) < spval)
THEN
1167 grid1(i,j) = tsl(i,j)*(1.+0.608*qsl(i,j))
1175 nsmooth = nint(3.*(13500./dxm))
1176 call allgetherv(grid1)
1178 CALL smooth(grid1,sdummy,im,jm,0.5)
1182 if(grib==
'grib2')
then
1184 fld_info(cfld)%ifld = iavblfld(iget(910))
1185 fld_info(cfld)%lvl = lvlsxml(lp,iget(910))
1191 datapd(i,j,cfld) = grid1(ii,jj)
1201 IF(iget(014) > 0)
THEN
1202 IF(lvls(lp,iget(014)) > 0)
THEN
1204 tem = (p1000/spl(lp)) ** capa
1208 IF(tsl(i,j) < spval)
THEN
1209 grid1(i,j) = tsl(i,j) * tem
1230 if(grib ==
'grib2')
then
1232 fld_info(cfld)%ifld=iavblfld(iget(014))
1233 fld_info(cfld)%lvl=lvlsxml(lp,iget(014))
1239 datapd(i,j,cfld) = grid1(ii,jj)
1249 IF(iget(017) > 0 .OR. iget(257) > 0)
THEN
1253 IF(iget(017) > 0.)
then
1254 if(lvls(lp,iget(017)) > 0 ) log1=.true.
1256 IF(iget(257) > 0)
then
1257 if(lvls(lp,iget(257)) > 0 ) log1=.true.
1263 egrid2(i,j) = spl(lp)
1267 CALL calrh(egrid2(ista:iend,jsta:jend),tsl(ista:iend,jsta:jend),qsl(ista:iend,jsta:jend),egrid1(ista:iend,jsta:jend))
1272 IF(egrid1(i,j) < spval)
THEN
1273 grid1(i,j) = egrid1(i,j)*100.
1275 grid1(i,j) = egrid1(i,j)
1281 nsmooth=nint(2.*(13500./dxm))
1282 call allgetherv(grid1)
1284 CALL smooth(grid1,sdummy,im,jm,0.5)
1287 if(grib ==
'grib2')
then
1289 fld_info(cfld)%ifld=iavblfld(iget(017))
1290 fld_info(cfld)%lvl=lvlsxml(lp,iget(017))
1296 datapd(i,j,cfld) = grid1(ii,jj)
1304 savrh(i,j) = grid1(i,j)
1313 IF(iget(331) > 0)
THEN
1314 IF(lvls(lp,iget(331)) > 0)
THEN
1319 cfrsl(i,j) = min(max(0.0,cfrsl(i,j)),1.0)
1320 IF(abs(cfrsl(i,j)-spval) > small) &
1321 grid1(i,j) = cfrsl(i,j)*h100
1324 if(grib ==
'grib2')
then
1326 fld_info(cfld)%ifld = iavblfld(iget(331))
1327 fld_info(cfld)%lvl = lvlsxml(lp,iget(331))
1333 datapd(i,j,cfld) = grid1(ii,jj)
1342 IF(iget(015) > 0)
THEN
1343 IF(lvls(lp,iget(015)) > 0)
THEN
1347 egrid2(i,j) = spl(lp)
1351 CALL caldwp(egrid2(ista:iend,jsta:jend),qsl(ista:iend,jsta:jend),egrid1(ista:iend,jsta:jend),tsl(ista:iend,jsta:jend))
1355 IF(tsl(i,j) < spval)
THEN
1356 grid1(i,j) = egrid1(i,j)
1362 if(grib ==
'grib2')
then
1364 fld_info(cfld)%ifld=iavblfld(iget(015))
1365 fld_info(cfld)%lvl=lvlsxml(lp,iget(015))
1371 datapd(i,j,cfld) = grid1(ii,jj)
1380 IF(iget(016) > 0)
THEN
1381 IF(lvls(lp,iget(016)) > 0)
THEN
1385 grid1(i,j) = qsl(i,j)
1388 CALL bound(grid1,zero,h99999)
1389 if(grib ==
'grib2')
then
1391 fld_info(cfld)%ifld=iavblfld(iget(016))
1392 fld_info(cfld)%lvl=lvlsxml(lp,iget(016))
1398 datapd(i,j,cfld) = grid1(ii,jj)
1407 IF(iget(020) > 0)
THEN
1408 IF(lvls(lp,iget(020)) > 0)
THEN
1412 grid1(i,j) = osl(i,j)
1416 IF (smflag .or. ioform ==
'binarympiio' )
THEN
1417 call allgetherv(grid1)
1418 if (ioform ==
'binarympiio')
then
1421 CALL smoothc(grid1,sdummy,im,jm,0.5)
1422 CALL smoothc(grid1,sdummy,im,jm,-0.5)
1425 nsmooth = nint(3.*(13500./dxm))
1428 CALL smooth(grid1,sdummy,im,jm,0.5)
1433 if(grib ==
'grib2')
then
1435 fld_info(cfld)%ifld=iavblfld(iget(020))
1436 fld_info(cfld)%lvl=lvlsxml(lp,iget(020))
1442 datapd(i,j,cfld) = grid1(ii,jj)
1451 IF(iget(284) > 0)
THEN
1452 IF(lvls(lp,iget(284)) > 0)
THEN
1456 grid1(i,j) = wsl(i,j)
1459 if(grib ==
'grib2')
then
1461 fld_info(cfld)%ifld=iavblfld(iget(284))
1462 fld_info(cfld)%lvl=lvlsxml(lp,iget(284))
1468 datapd(i,j,cfld) = grid1(ii,jj)
1477 IF(iget(085) > 0)
THEN
1478 IF(lvls(lp,iget(085)) > 0)
THEN
1479 CALL calmcvg(qsl(ista_2l,jsta_2l),usl(ista_2l,jsta_2l),vsl(ista_2l,jsta_2l),egrid1(ista_2l,jsta_2l))
1484 grid1(i,j) = egrid1(i,j)
1492 if(grib ==
'grib2')
then
1494 fld_info(cfld)%ifld=iavblfld(iget(085))
1495 fld_info(cfld)%lvl=lvlsxml(lp,iget(085))
1501 datapd(i,j,cfld) = grid1(ii,jj)
1511 IF(iget(018) > 0.OR.iget(019) > 0)
THEN
1513 IF(iget(018) > 0.)
then
1514 if(lvls(lp,iget(018)) > 0 ) log1=.true.
1516 IF(iget(019) > 0)
then
1517 if(lvls(lp,iget(019)) > 0 ) log1=.true.
1523 grid1(i,j) = usl(i,j)
1524 grid2(i,j) = vsl(i,j)
1529 nsmooth=nint(5.*(13500./dxm))
1530 call allgetherv(grid1)
1532 CALL smooth(grid1,sdummy,im,jm,0.5)
1534 nsmooth=nint(5.*(13500./dxm))
1535 call allgetherv(grid2)
1537 CALL smooth(grid2,sdummy,im,jm,0.5)
1541 if(grib ==
'grib2')
then
1543 fld_info(cfld)%ifld=iavblfld(iget(018))
1544 fld_info(cfld)%lvl=lvlsxml(lp,iget(018))
1550 datapd(i,j,cfld) = grid1(ii,jj)
1555 fld_info(cfld)%ifld=iavblfld(iget(019))
1556 fld_info(cfld)%lvl=lvlsxml(lp,iget(019))
1562 datapd(i,j,cfld) = grid2(ii,jj)
1571 IF (iget(021) > 0)
THEN
1572 IF (lvls(lp,iget(021)) > 0)
THEN
1573 CALL calvor(usl,vsl,egrid1)
1578 grid1(i,j) = egrid1(i,j)
1582 IF (smflag .or. ioform ==
'binarympiio' )
THEN
1583 call allgetherv(grid1)
1584 if (ioform ==
'binarympiio')
then
1587 CALL smoothc(grid1,sdummy,im,jm,0.5)
1588 CALL smoothc(grid1,sdummy,im,jm,-0.5)
1591 nsmooth = nint(4.*(13500./dxm))
1594 CALL smooth(grid1,sdummy,im,jm,0.5)
1599 if(grib ==
'grib2')
then
1601 fld_info(cfld)%ifld=iavblfld(iget(021))
1602 fld_info(cfld)%lvl=lvlsxml(lp,iget(021))
1608 datapd(i,j,cfld) = grid1(ii,jj)
1616 IF (iget(086) > 0)
THEN
1617 IF (lvls(lp,iget(086)) > 0)
THEN
1621 IF(fsl(i,j)<spval)
THEN
1622 egrid2(i,j) = fsl(i,j)*gi
1626 CALL calstrm(egrid2(ista:iend,jsta:jend),egrid1(ista:iend,jsta:jend))
1630 IF(fsl(i,j) < spval)
THEN
1631 grid1(i,j) = egrid1(i,j)
1637 if(grib ==
'grib2')
then
1639 fld_info(cfld)%ifld=iavblfld(iget(086))
1640 fld_info(cfld)%lvl=lvlsxml(lp,iget(086))
1646 datapd(i,j,cfld) = grid1(ii,jj)
1655 IF (iget(022) > 0)
THEN
1656 IF (lvls(lp,iget(022)) > 0)
THEN
1660 grid1(i,j) = q2sl(i,j)
1663 if(grib ==
'grib2')
then
1665 fld_info(cfld)%ifld=iavblfld(iget(022))
1666 fld_info(cfld)%lvl=lvlsxml(lp,iget(022))
1672 datapd(i,j,cfld) = grid1(ii,jj)
1681 IF (iget(153) > 0)
THEN
1682 IF (lvls(lp,iget(153)) > 0)
THEN
1683 IF(imp_physics==99 .or. imp_physics==98)
then
1688 IF(qw1(i,j) < spval .AND. qi1(i,j) < spval)
THEN
1689 grid1(i,j) = qw1(i,j) + qi1(i,j)
1700 grid1(i,j) = qw1(i,j)
1704 if(grib ==
'grib2')
then
1706 fld_info(cfld)%ifld=iavblfld(iget(153))
1707 fld_info(cfld)%lvl=lvlsxml(lp,iget(153))
1713 datapd(i,j,cfld) = grid1(ii,jj)
1722 IF (iget(166) > 0)
THEN
1723 IF (lvls(lp,iget(166)) > 0)
THEN
1727 grid1(i,j) = qi1(i,j)
1730 if(grib ==
'grib2')
then
1732 fld_info(cfld)%ifld=iavblfld(iget(166))
1733 fld_info(cfld)%lvl=lvlsxml(lp,iget(166))
1739 datapd(i,j,cfld) = grid1(ii,jj)
1747 IF (iget(183) > 0)
THEN
1748 IF (lvls(lp,iget(183)) > 0)
THEN
1752 grid1(i,j) = qr1(i,j)
1755 if(grib ==
'grib2')
then
1757 fld_info(cfld)%ifld=iavblfld(iget(183))
1758 fld_info(cfld)%lvl=lvlsxml(lp,iget(183))
1764 datapd(i,j,cfld) = grid1(ii,jj)
1772 IF (iget(184) > 0)
THEN
1773 IF (lvls(lp,iget(184)) > 0)
THEN
1777 grid1(i,j) = qs1(i,j)
1780 if(grib ==
'grib2')
then
1782 fld_info(cfld)%ifld=iavblfld(iget(184))
1783 fld_info(cfld)%lvl=lvlsxml(lp,iget(184))
1789 datapd(i,j,cfld) = grid1(ii,jj)
1797 IF (iget(416) > 0)
THEN
1798 IF (lvls(lp,iget(416)) > 0)
THEN
1802 grid1(i,j) = qg1(i,j)
1805 if(grib ==
'grib2')
then
1807 fld_info(cfld)%ifld=iavblfld(iget(416))
1808 fld_info(cfld)%lvl=lvlsxml(lp,iget(416))
1814 datapd(i,j,cfld) = grid1(ii,jj)
1823 IF (iget(198) > 0)
THEN
1824 IF (lvls(lp,iget(198)) > 0)
THEN
1828 grid1(i,j) = c1d(i,j)
1831 if(grib ==
'grib2')
then
1833 fld_info(cfld)%ifld=iavblfld(iget(198))
1834 fld_info(cfld)%lvl=lvlsxml(lp,iget(198))
1840 datapd(i,j,cfld) = grid1(ii,jj)
1848 IF (iget(263) > 0)
THEN
1849 IF (lvls(lp,iget(263)) > 0)
THEN
1853 grid1(i,j) = frime(i,j)
1856 if(grib ==
'grib2')
then
1858 fld_info(cfld)%ifld=iavblfld(iget(263))
1859 fld_info(cfld)%lvl=lvlsxml(lp,iget(263))
1865 datapd(i,j,cfld) = grid1(ii,jj)
1873 IF (iget(294) > 0)
THEN
1874 IF (lvls(lp,iget(294)) > 0)
THEN
1878 grid1(i,j) = rad(i,j)
1881 if(grib ==
'grib2')
then
1883 fld_info(cfld)%ifld=iavblfld(iget(294))
1884 fld_info(cfld)%lvl=lvlsxml(lp,iget(294))
1890 datapd(i,j,cfld) = grid1(ii,jj)
1898 IF (iget(251) > 0)
THEN
1899 IF (lvls(lp,iget(251)) > 0)
THEN
1903 grid1(i,j) = dbz1(i,j)
1906 if(grib ==
'grib2')
then
1908 fld_info(cfld)%ifld=iavblfld(iget(251))
1909 fld_info(cfld)%lvl=lvlsxml(lp,iget(251))
1915 datapd(i,j,cfld) = grid1(ii,jj)
1923 IF(iget(257) > 0)
THEN
1924 IF(lvls(lp,iget(257)) > 0)
THEN
1925 CALL calicing(tsl(ista:iend,jsta:jend), savrh, osl(ista:iend,jsta:jend), egrid1(ista:iend,jsta:jend))
1930 grid1(i,j) = egrid1(i,j)
1933 if(grib ==
'grib2')
then
1935 fld_info(cfld)%ifld=iavblfld(iget(257))
1936 fld_info(cfld)%lvl=lvlsxml(lp,iget(257))
1942 datapd(i,j,cfld) = grid1(ii,jj)
1953 IF(iget(258) > 0)
THEN
1954 IF(lvls(lp,iget(258)) > 0)
THEN
1958 IF(fsl(i,j)<spval)
THEN
1959 grid1(i,j) = fsl(i,j)*gi
1966 CALL calcat(usl(ista_2l,jsta_2l),vsl(ista_2l,jsta_2l),grid1(ista_2l,jsta_2l) &
1967 ,usl_old(ista_2l,jsta_2l),vsl_old(ista_2l,jsta_2l) &
1968 ,fsl_old(ista_2l,jsta_2l),egrid1(ista_2l,jsta_2l))
1972 grid1(i,j) = egrid1(i,j)
1977 if(grib ==
'grib2')
then
1979 fld_info(cfld)%ifld=iavblfld(iget(258))
1980 fld_info(cfld)%lvl=lvlsxml(lp,iget(258))
1986 datapd(i,j,cfld) = grid1(ii,jj)
1996 DO j=jsta_2l,jend_2u
1997 DO i=ista_2l,iend_2u
1998 usl_old(i,j) = usl(i,j)
1999 vsl_old(i,j) = vsl(i,j)
2000 IF(fsl(i,j)<spval)
THEN
2001 fsl_old(i,j) = fsl(i,j)*gi
2003 fsl_old(i,j) = spval
2009 IF (iget(268) > 0)
THEN
2010 IF (lvls(lp,iget(268)) > 0)
THEN
2014 grid1(i,j) = o3sl(i,j)
2019 if(grib ==
'grib2')
then
2021 fld_info(cfld)%ifld=iavblfld(iget(268))
2022 fld_info(cfld)%lvl=lvlsxml(lp,iget(268))
2028 datapd(i,j,cfld) = grid1(ii,jj)
2036 IF (iget(738) > 0)
THEN
2037 IF (lvls(lp,iget(738)) > 0)
THEN
2041 IF(smokesl(i,j,1)<spval.and.spl(lp)<spval.and.tsl(i,j)<spval)
THEN
2042 grid1(i,j) = (1./rd)*smokesl(i,j,1)*(spl(lp)/tsl(i,j))
2048 if(grib ==
'grib2')
then
2050 fld_info(cfld)%ifld=iavblfld(iget(738))
2051 fld_info(cfld)%lvl=lvlsxml(lp,iget(738))
2057 datapd(i,j,cfld) = grid1(ii,jj)
2065 IF (iget(438) > 0)
THEN
2066 IF (lvls(lp,iget(438)) > 0)
THEN
2070 grid1(i,j) = dustsl(i,j,1)
2073 if(grib ==
'grib2')
then
2075 fld_info(cfld)%ifld=iavblfld(iget(438))
2076 fld_info(cfld)%lvl=lvlsxml(lp,iget(438))
2082 datapd(i,j,cfld) = grid1(ii,jj)
2089 IF (iget(439) > 0)
THEN
2090 IF (lvls(lp,iget(439)) > 0)
THEN
2094 grid1(i,j) = dustsl(i,j,2)
2097 if(grib ==
'grib2')
then
2099 fld_info(cfld)%ifld=iavblfld(iget(439))
2100 fld_info(cfld)%lvl=lvlsxml(lp,iget(439))
2106 datapd(i,j,cfld) = grid1(ii,jj)
2113 IF (iget(440) > 0)
THEN
2114 IF (lvls(lp,iget(440)) > 0)
THEN
2118 grid1(i,j) = dustsl(i,j,3)
2121 if(grib ==
'grib2')
then
2123 fld_info(cfld)%ifld=iavblfld(iget(440))
2124 fld_info(cfld)%lvl=lvlsxml(lp,iget(440))
2130 datapd(i,j,cfld) = grid1(ii,jj)
2137 IF (iget(441) > 0)
THEN
2138 IF (lvls(lp,iget(441)) > 0)
THEN
2142 grid1(i,j) = dustsl(i,j,4)
2145 if(grib ==
'grib2')
then
2147 fld_info(cfld)%ifld=iavblfld(iget(441))
2148 fld_info(cfld)%lvl=lvlsxml(lp,iget(441))
2154 datapd(i,j,cfld) = grid1(ii,jj)
2161 IF (iget(442) > 0)
THEN
2162 IF (lvls(lp,iget(442)) > 0)
THEN
2166 grid1(i,j) = dustsl(i,j,5)
2169 if(grib ==
'grib2')
then
2171 fld_info(cfld)%ifld=iavblfld(iget(442))
2172 fld_info(cfld)%lvl=lvlsxml(lp,iget(442))
2178 datapd(i,j,cfld) = grid1(ii,jj)
2187 if(iostatusd3d==0 .and. d3d_on)
then
2189 IF (iget(355) > 0)
THEN
2190 IF (lvls(lp,iget(355)) > 0)
THEN
2194 grid1(i,j) = d3dsl(i,j,1)
2199 if (itd3d /= 0)
then
2200 ifincr = mod(ifhr,itd3d)
2201 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2207 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2209 IF (ifincr == 0)
THEN
2212 id(18) = ifhr-ifincr
2213 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2215 if(grib ==
'grib2')
then
2217 fld_info(cfld)%ifld=iavblfld(iget(355))
2218 fld_info(cfld)%lvl=lvlsxml(lp,iget(355))
2220 fld_info(cfld)%ntrange=0
2222 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2224 fld_info(cfld)%tinvstat=itd3d
2230 datapd(i,j,cfld) = grid1(ii,jj)
2237 IF (iget(354) > 0)
THEN
2238 IF (lvls(lp,iget(354)) > 0)
THEN
2242 grid1(i,j) = d3dsl(i,j,2)
2247 if (itd3d /= 0)
then
2248 ifincr = mod(ifhr,itd3d)
2249 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2255 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2257 IF (ifincr == 0)
THEN
2260 id(18) = ifhr-ifincr
2261 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2263 if(grib ==
'grib2')
then
2265 fld_info(cfld)%ifld=iavblfld(iget(354))
2266 fld_info(cfld)%lvl=lvlsxml(lp,iget(354))
2268 fld_info(cfld)%ntrange=0
2270 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2272 fld_info(cfld)%tinvstat=itd3d
2278 datapd(i,j,cfld) = grid1(ii,jj)
2285 IF (iget(356) > 0)
THEN
2286 IF (lvls(lp,iget(356)) > 0)
THEN
2290 grid1(i,j) = d3dsl(i,j,3)
2295 if (itd3d /= 0)
then
2296 ifincr = mod(ifhr,itd3d)
2297 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2303 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2305 IF (ifincr == 0)
THEN
2308 id(18) = ifhr-ifincr
2309 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2311 if(grib ==
'grib2')
then
2313 fld_info(cfld)%ifld=iavblfld(iget(356))
2314 fld_info(cfld)%lvl=lvlsxml(lp,iget(356))
2316 fld_info(cfld)%ntrange=0
2318 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2320 fld_info(cfld)%tinvstat=itd3d
2326 datapd(i,j,cfld) = grid1(ii,jj)
2333 IF (iget(357) > 0)
THEN
2334 IF (lvls(lp,iget(357)) > 0)
THEN
2338 grid1(i,j) = d3dsl(i,j,4)
2343 if (itd3d /= 0)
then
2344 ifincr = mod(ifhr,itd3d)
2345 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2351 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2353 IF (ifincr == 0)
THEN
2356 id(18) = ifhr-ifincr
2357 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2359 if(grib ==
'grib2')
then
2361 fld_info(cfld)%ifld=iavblfld(iget(357))
2362 fld_info(cfld)%lvl=lvlsxml(lp,iget(357))
2364 fld_info(cfld)%ntrange=0
2366 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2368 fld_info(cfld)%tinvstat=itd3d
2374 datapd(i,j,cfld) = grid1(ii,jj)
2381 IF (iget(358) > 0)
THEN
2382 IF (lvls(lp,iget(358)) > 0)
THEN
2386 grid1(i,j) = d3dsl(i,j,5)
2391 if (itd3d /= 0)
then
2392 ifincr = mod(ifhr,itd3d)
2393 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2399 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2401 IF (ifincr == 0)
THEN
2404 id(18) = ifhr-ifincr
2405 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2407 if(grib ==
'grib2')
then
2409 fld_info(cfld)%ifld=iavblfld(iget(358))
2410 fld_info(cfld)%lvl=lvlsxml(lp,iget(358))
2412 fld_info(cfld)%ntrange=0
2414 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2416 fld_info(cfld)%tinvstat=itd3d
2422 datapd(i,j,cfld) = grid1(ii,jj)
2429 IF (iget(359) > 0)
THEN
2430 IF (lvls(lp,iget(359)) > 0)
THEN
2434 grid1(i,j) = d3dsl(i,j,6)
2439 if (itd3d /= 0)
then
2440 ifincr = mod(ifhr,itd3d)
2441 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2447 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2449 IF (ifincr == 0)
THEN
2452 id(18) = ifhr-ifincr
2453 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2455 if(grib ==
'grib2')
then
2457 fld_info(cfld)%ifld=iavblfld(iget(359))
2458 fld_info(cfld)%lvl=lvlsxml(lp,iget(359))
2460 fld_info(cfld)%ntrange=0
2462 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2464 fld_info(cfld)%tinvstat=itd3d
2470 datapd(i,j,cfld) = grid1(ii,jj)
2477 IF (iget(360) > 0)
THEN
2478 IF (lvls(lp,iget(360)) > 0)
THEN
2482 grid1(i,j) = d3dsl(i,j,7)
2487 if (itd3d /= 0)
then
2488 ifincr = mod(ifhr,itd3d)
2489 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2495 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2497 IF (ifincr == 0)
THEN
2500 id(18) = ifhr-ifincr
2501 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2503 if(grib ==
'grib2')
then
2505 fld_info(cfld)%ifld=iavblfld(iget(360))
2506 fld_info(cfld)%lvl=lvlsxml(lp,iget(360))
2508 fld_info(cfld)%ntrange=0
2510 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2512 fld_info(cfld)%tinvstat=itd3d
2518 datapd(i,j,cfld) = grid1(ii,jj)
2525 IF (iget(361) > 0)
THEN
2526 IF (lvls(lp,iget(361)) > 0)
THEN
2530 grid1(i,j) = d3dsl(i,j,8)
2535 if (itd3d /= 0)
then
2536 ifincr = mod(ifhr,itd3d)
2537 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2543 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2545 IF (ifincr == 0)
THEN
2548 id(18) = ifhr-ifincr
2549 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2551 if(grib ==
'grib2')
then
2553 fld_info(cfld)%ifld=iavblfld(iget(361))
2554 fld_info(cfld)%lvl=lvlsxml(lp,iget(361))
2556 fld_info(cfld)%ntrange=0
2558 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2560 fld_info(cfld)%tinvstat=itd3d
2566 datapd(i,j,cfld) = grid1(ii,jj)
2573 IF (iget(362) > 0)
THEN
2574 IF (lvls(lp,iget(362)) > 0)
THEN
2578 grid1(i,j) = d3dsl(i,j,9)
2583 if (itd3d /= 0)
then
2584 ifincr = mod(ifhr,itd3d)
2585 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2591 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2593 IF (ifincr == 0)
THEN
2596 id(18) = ifhr-ifincr
2597 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2599 if(grib ==
'grib2')
then
2601 fld_info(cfld)%ifld=iavblfld(iget(362))
2602 fld_info(cfld)%lvl=lvlsxml(lp,iget(362))
2604 fld_info(cfld)%ntrange=0
2606 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2608 fld_info(cfld)%tinvstat=itd3d
2614 datapd(i,j,cfld) = grid1(ii,jj)
2621 IF (iget(363) > 0)
THEN
2622 IF (lvls(lp,iget(363)) > 0)
THEN
2626 grid1(i,j) = d3dsl(i,j,10)
2631 if (itd3d /= 0)
then
2632 ifincr = mod(ifhr,itd3d)
2633 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2640 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2642 IF (ifincr == 0)
THEN
2645 id(18) = ifhr-ifincr
2646 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2648 if(grib ==
'grib2')
then
2650 fld_info(cfld)%ifld=iavblfld(iget(363))
2651 fld_info(cfld)%lvl=lvlsxml(lp,iget(363))
2653 fld_info(cfld)%ntrange=0
2655 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2657 fld_info(cfld)%tinvstat=itd3d
2663 datapd(i,j,cfld) = grid1(ii,jj)
2670 IF (iget(364) > 0)
THEN
2671 IF (lvls(lp,iget(364)) > 0)
THEN
2675 grid1(i,j) = d3dsl(i,j,11)
2680 if (itd3d /= 0)
then
2681 ifincr = mod(ifhr,itd3d)
2682 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2689 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2691 IF (ifincr == 0)
THEN
2694 id(18) = ifhr-ifincr
2695 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2697 if(grib ==
'grib2')
then
2699 fld_info(cfld)%ifld=iavblfld(iget(364))
2700 fld_info(cfld)%lvl=lvlsxml(lp,iget(364))
2702 fld_info(cfld)%ntrange=0
2704 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2706 fld_info(cfld)%tinvstat=itd3d
2712 datapd(i,j,cfld) = grid1(ii,jj)
2719 IF (iget(365) > 0)
THEN
2720 IF (lvls(lp,iget(365)) > 0)
THEN
2724 grid1(i,j) = d3dsl(i,j,12)
2729 if (itd3d /= 0)
then
2730 ifincr = mod(ifhr,itd3d)
2731 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2738 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2740 IF (ifincr == 0)
THEN
2743 id(18) = ifhr-ifincr
2744 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2746 if(grib ==
'grib2')
then
2748 fld_info(cfld)%ifld=iavblfld(iget(365))
2749 fld_info(cfld)%lvl=lvlsxml(lp,iget(365))
2751 fld_info(cfld)%ntrange=0
2753 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2755 fld_info(cfld)%tinvstat=itd3d
2761 datapd(i,j,cfld) = grid1(ii,jj)
2768 IF (iget(366) > 0)
THEN
2769 IF (lvls(lp,iget(366)) > 0)
THEN
2773 grid1(i,j) = d3dsl(i,j,13)
2778 if (itd3d /= 0)
then
2779 ifincr = mod(ifhr,itd3d)
2780 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2787 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2789 IF (ifincr == 0)
THEN
2792 id(18) = ifhr-ifincr
2793 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2795 if(grib ==
'grib2')
then
2797 fld_info(cfld)%ifld=iavblfld(iget(366))
2798 fld_info(cfld)%lvl=lvlsxml(lp,iget(366))
2800 fld_info(cfld)%ntrange=0
2802 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2804 fld_info(cfld)%tinvstat=itd3d
2810 datapd(i,j,cfld) = grid1(ii,jj)
2817 IF (iget(367) > 0)
THEN
2818 IF (lvls(lp,iget(367)) > 0)
THEN
2822 grid1(i,j) = d3dsl(i,j,14)
2827 if (itd3d /= 0)
then
2828 ifincr = mod(ifhr,itd3d)
2829 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2836 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2838 IF (ifincr == 0)
THEN
2841 id(18) = ifhr-ifincr
2842 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2844 if(grib ==
'grib2')
then
2846 fld_info(cfld)%ifld=iavblfld(iget(367))
2847 fld_info(cfld)%lvl=lvlsxml(lp,iget(367))
2849 fld_info(cfld)%ntrange=0
2851 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2853 fld_info(cfld)%tinvstat=itd3d
2859 datapd(i,j,cfld) = grid1(ii,jj)
2866 IF (iget(368) > 0)
THEN
2867 IF (lvls(lp,iget(368)) > 0)
THEN
2871 grid1(i,j) = d3dsl(i,j,15)
2876 if (itd3d /= 0)
then
2877 ifincr = mod(ifhr,itd3d)
2878 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2885 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2887 IF (ifincr == 0)
THEN
2890 id(18) = ifhr-ifincr
2891 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2893 if(grib ==
'grib2')
then
2895 fld_info(cfld)%ifld=iavblfld(iget(368))
2896 fld_info(cfld)%lvl=lvlsxml(lp,iget(368))
2898 fld_info(cfld)%ntrange=0
2900 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2902 fld_info(cfld)%tinvstat=itd3d
2908 datapd(i,j,cfld) = grid1(ii,jj)
2915 IF (iget(369) > 0)
THEN
2916 IF (lvls(lp,iget(369)) > 0)
THEN
2920 grid1(i,j) = d3dsl(i,j,16)
2925 if (itd3d /= 0)
then
2926 ifincr = mod(ifhr,itd3d)
2927 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2933 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2935 IF (ifincr == 0)
THEN
2938 id(18) = ifhr-ifincr
2939 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2941 if(grib ==
'grib2')
then
2943 fld_info(cfld)%ifld=iavblfld(iget(369))
2944 fld_info(cfld)%lvl=lvlsxml(lp,iget(369))
2946 fld_info(cfld)%ntrange=0
2948 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2950 fld_info(cfld)%tinvstat=itd3d
2956 datapd(i,j,cfld) = grid1(ii,jj)
2963 IF (iget(370) > 0)
THEN
2964 IF (lvls(lp,iget(370)) > 0)
THEN
2968 grid1(i,j) = d3dsl(i,j,17)
2973 if (itd3d /= 0)
then
2974 ifincr = mod(ifhr,itd3d)
2975 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
2982 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
2984 IF (ifincr == 0)
THEN
2987 id(18) = ifhr-ifincr
2988 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
2990 if(grib ==
'grib2')
then
2992 fld_info(cfld)%ifld=iavblfld(iget(370))
2993 fld_info(cfld)%lvl=lvlsxml(lp,iget(370))
2995 fld_info(cfld)%ntrange=0
2997 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
2999 fld_info(cfld)%tinvstat=itd3d
3005 datapd(i,j,cfld) = grid1(ii,jj)
3012 IF (iget(371) > 0)
THEN
3013 IF (lvls(lp,iget(371)) > 0)
THEN
3017 grid1(i,j) = d3dsl(i,j,18)
3022 if (itd3d /= 0)
then
3023 ifincr = mod(ifhr,itd3d)
3024 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3031 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3033 IF (ifincr == 0)
THEN
3036 id(18) = ifhr-ifincr
3037 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3039 if(grib ==
'grib2')
then
3041 fld_info(cfld)%ifld=iavblfld(iget(371))
3042 fld_info(cfld)%lvl=lvlsxml(lp,iget(371))
3044 fld_info(cfld)%ntrange=0
3046 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3048 fld_info(cfld)%tinvstat=itd3d
3054 datapd(i,j,cfld) = grid1(ii,jj)
3061 IF (iget(372) > 0)
THEN
3062 IF (lvls(lp,iget(372)) > 0)
THEN
3066 grid1(i,j) = d3dsl(i,j,19)
3071 if (itd3d /= 0)
then
3072 ifincr = mod(ifhr,itd3d)
3073 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3079 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3081 IF (ifincr == 0)
THEN
3084 id(18) = ifhr-ifincr
3085 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3087 if(grib ==
'grib2')
then
3089 fld_info(cfld)%ifld=iavblfld(iget(372))
3090 fld_info(cfld)%lvl=lvlsxml(lp,iget(372))
3092 fld_info(cfld)%ntrange=0
3094 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3096 fld_info(cfld)%tinvstat=itd3d
3102 datapd(i,j,cfld) = grid1(ii,jj)
3109 IF (iget(373) > 0)
THEN
3110 IF (lvls(lp,iget(373)) > 0)
THEN
3114 grid1(i,j) = d3dsl(i,j,20)
3119 if (itd3d /= 0)
then
3120 ifincr = mod(ifhr,itd3d)
3121 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3128 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3130 IF (ifincr == 0)
THEN
3133 id(18) = ifhr-ifincr
3134 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3136 if(grib ==
'grib2')
then
3138 fld_info(cfld)%ifld=iavblfld(iget(373))
3139 fld_info(cfld)%lvl=lvlsxml(lp,iget(373))
3141 fld_info(cfld)%ntrange=0
3143 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3145 fld_info(cfld)%tinvstat=itd3d
3151 datapd(i,j,cfld) = grid1(ii,jj)
3158 IF (iget(374) > 0)
THEN
3159 IF (lvls(lp,iget(374)) > 0)
THEN
3163 grid1(i,j) = d3dsl(i,j,21)
3168 if (itd3d /= 0)
then
3169 ifincr = mod(ifhr,itd3d)
3170 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3177 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3179 IF (ifincr == 0)
THEN
3182 id(18) = ifhr-ifincr
3183 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3185 if(grib ==
'grib2')
then
3187 fld_info(cfld)%ifld=iavblfld(iget(374))
3188 fld_info(cfld)%lvl=lvlsxml(lp,iget(374))
3190 fld_info(cfld)%ntrange=0
3192 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3194 fld_info(cfld)%tinvstat=itd3d
3200 datapd(i,j,cfld) = grid1(ii,jj)
3207 IF (iget(375) > 0)
THEN
3208 IF (lvls(lp,iget(375)) > 0)
THEN
3212 grid1(i,j) = d3dsl(i,j,22)
3217 if (itd3d /= 0)
then
3218 ifincr = mod(ifhr,itd3d)
3219 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3225 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3227 IF (ifincr == 0)
THEN
3230 id(18) = ifhr-ifincr
3231 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3233 if(grib ==
'grib2')
then
3235 fld_info(cfld)%ifld=iavblfld(iget(375))
3236 fld_info(cfld)%lvl=lvlsxml(lp,iget(375))
3238 fld_info(cfld)%ntrange=0
3240 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3242 fld_info(cfld)%tinvstat=itd3d
3248 datapd(i,j,cfld) = grid1(ii,jj)
3255 IF (iget(379) > 0)
THEN
3256 IF (lvls(lp,iget(379)) > 0)
THEN
3260 IF(d3dsl(i,j,1)/=spval)
THEN
3261 grid1(i,j) = d3dsl(i,j,1) + d3dsl(i,j,2) &
3262 + d3dsl(i,j,3) + d3dsl(i,j,4) &
3263 + d3dsl(i,j,5) + d3dsl(i,j,6)
3271 if (itd3d /= 0)
then
3272 ifincr = mod(ifhr,itd3d)
3273 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3279 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3281 IF (ifincr == 0)
THEN
3284 id(18) = ifhr-ifincr
3285 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3287 if(grib ==
'grib2')
then
3289 fld_info(cfld)%ifld=iavblfld(iget(379))
3290 fld_info(cfld)%lvl=lvlsxml(lp,iget(379))
3292 fld_info(cfld)%ntrange=0
3294 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3296 fld_info(cfld)%tinvstat=itd3d
3302 datapd(i,j,cfld) = grid1(ii,jj)
3309 IF (iget(391) > 0)
THEN
3310 IF (lvls(lp,iget(391)) > 0)
THEN
3314 grid1(i,j) = d3dsl(i,j,23)
3319 if (itd3d /= 0)
then
3320 ifincr = mod(ifhr,itd3d)
3321 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3328 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3330 IF (ifincr == 0)
THEN
3333 id(18) = ifhr-ifincr
3334 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3336 if(grib ==
'grib2')
then
3338 fld_info(cfld)%ifld=iavblfld(iget(391))
3339 fld_info(cfld)%lvl=lvlsxml(lp,iget(391))
3341 fld_info(cfld)%ntrange=0
3343 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3345 fld_info(cfld)%tinvstat=itd3d
3351 datapd(i,j,cfld) = grid1(ii,jj)
3358 IF (iget(392) > 0)
THEN
3359 IF (lvls(lp,iget(392)) > 0)
THEN
3363 grid1(i,j) = d3dsl(i,j,24)
3368 if (itd3d /= 0)
then
3369 ifincr = mod(ifhr,itd3d)
3370 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3377 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3379 IF (ifincr == 0)
THEN
3382 id(18) = ifhr-ifincr
3383 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3385 if(grib ==
'grib2')
then
3387 fld_info(cfld)%ifld=iavblfld(iget(392))
3388 fld_info(cfld)%lvl=lvlsxml(lp,iget(392))
3390 fld_info(cfld)%ntrange=0
3392 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3394 fld_info(cfld)%tinvstat=itd3d
3400 datapd(i,j,cfld) = grid1(ii,jj)
3407 IF (iget(393) > 0)
THEN
3408 IF (lvls(lp,iget(393)) > 0)
THEN
3412 grid1(i,j) = d3dsl(i,j,25)
3417 if (itd3d /= 0)
then
3418 ifincr = mod(ifhr,itd3d)
3419 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3426 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3428 IF (ifincr == 0)
THEN
3431 id(18) = ifhr-ifincr
3432 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3434 if(grib ==
'grib2')
then
3436 fld_info(cfld)%ifld=iavblfld(iget(393))
3437 fld_info(cfld)%lvl=lvlsxml(lp,iget(393))
3439 fld_info(cfld)%ntrange=0
3441 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3443 fld_info(cfld)%tinvstat=itd3d
3449 datapd(i,j,cfld) = grid1(ii,jj)
3456 IF (iget(394) > 0)
THEN
3457 IF (lvls(lp,iget(394)) > 0)
THEN
3461 grid1(i,j) = d3dsl(i,j,26)
3466 if (itd3d /= 0)
then
3467 ifincr = mod(ifhr,itd3d)
3468 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3475 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3477 IF (ifincr == 0)
THEN
3480 id(18) = ifhr-ifincr
3481 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3483 if(grib ==
'grib2')
then
3485 fld_info(cfld)%ifld=iavblfld(iget(394))
3486 fld_info(cfld)%lvl=lvlsxml(lp,iget(394))
3488 fld_info(cfld)%ntrange=0
3490 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3492 fld_info(cfld)%tinvstat=itd3d
3498 datapd(i,j,cfld) = grid1(ii,jj)
3505 IF (iget(395) > 0)
THEN
3506 IF (lvls(lp,iget(395)) > 0)
THEN
3510 grid1(i,j) = d3dsl(i,j,27)
3515 if (itd3d /= 0)
then
3516 ifincr = mod(ifhr,itd3d)
3517 IF(ifmin >= 1)ifincr= mod(ifhr*60+ifmin,itd3d*60)
3524 IF(ifmin >= 1)id(19)=ifhr*60+ifmin
3526 IF (ifincr == 0)
THEN
3529 id(18) = ifhr-ifincr
3530 IF(ifmin >= 1)id(18)=ifhr*60+ifmin-ifincr
3532 if(grib ==
'grib2')
then
3534 fld_info(cfld)%ifld=iavblfld(iget(395))
3535 fld_info(cfld)%lvl=lvlsxml(lp,iget(395))
3537 fld_info(cfld)%ntrange=0
3539 fld_info(cfld)%ntrange=(ifhr-id(18))/itd3d
3541 fld_info(cfld)%tinvstat=itd3d
3547 datapd(i,j,cfld) = grid1(ii,jj)
3556 IF (iget(455) > 0)
THEN
3557 ii=(ista+iend)/2+100
3558 jj=(jsta+jend)/2-100
3559 IF(abs(spl(lp)-50000.)<small) luhi=lp
3560 IF(abs(spl(lp)-70000.)<small)
THEN
3567 egrid2(i,j) = spl(lp)
3570 CALL caldwp(egrid2(ista:iend,jsta:jend),qsl(ista:iend,jsta:jend),tdsl(ista:iend,jsta:jend),tsl(ista:iend,jsta:jend))
3575 IF(sm(i,j) < 1.0 .AND. zint(i,j,lm+1) < fsl(i,j)*gi)
THEN
3576 dum1 = tsl(i,j)-tprs(i,j,luhi)
3579 ELSE IF(dum1 > 17. .AND. dum1 <= 21.)
THEN
3584 dum1 = tsl(i,j)-tdsl(i,j)
3585 IF(dum1 <= 14.)
THEN
3587 ELSE IF(dum1>14. .AND. dum1<=20.)
THEN
3592 IF(tsl(i,j)<spval.and.tprs(i,j,luhi)<spval.and.tdsl(i,j)<spval)
THEN
3593 haines(i,j) = istaa + imois
3606 IF(abs(spl(lp)-85000.)<small)
THEN
3611 egrid2(i,j) = spl(lp)
3614 CALL caldwp(egrid2(ista:iend,jsta:jend),qsl(ista:iend,jsta:jend),tdsl(ista:iend,jsta:jend),tsl(ista:iend,jsta:jend))
3619 IF(sm(i,j) < 1.0 .AND. zint(i,j,lm+1) < fsl(i,j)*gi)
THEN
3620 dum1 = tsl(i,j)-tprs(i,j,luhi)
3623 ELSE IF(dum1 > 5. .AND. dum1 <= 10.)
THEN
3628 dum1 = tsl(i,j)-tdsl(i,j)
3631 ELSE IF(dum1 > 5. .AND. dum1 <= 12.)
THEN
3638 IF(tsl(i,j)<spval.and.tprs(i,j,luhi)<spval.and.tdsl(i,j)<spval)
THEN
3639 haines(i,j) = istaa + imois
3650 IF(abs(spl(lp)-95000.)<small)
THEN
3658 CALL caldwp(egrid2(ista:iend,jsta:jend),qsl(ista:iend,jsta:jend),tdsl(ista:iend,jsta:jend),tsl(ista:iend,jsta:jend))
3663 IF(sm(i,j) < 1.0 .AND. zint(i,j,lm+1) < fsl(i,j)*gi)
THEN
3664 dum1 = tsl(i,j)-tprs(i,j,luhi)
3667 ELSE IF(dum1 > 3. .AND. dum1 <=7. )
THEN
3672 dum1 = tsl(i,j)-tdsl(i,j)
3675 ELSE IF(dum1 > 5. .AND. dum1 <= 9.)
THEN
3682 IF(tsl(i,j)<spval.and.tprs(i,j,luhi)<spval.and.tdsl(i,j)<spval)
THEN
3683 haines(i,j) = istaa + imois
3691 if(grib ==
'grib2')
then
3693 fld_info(cfld)%ifld=iavblfld(iget(455))
3699 datapd(i,j,cfld) = haines(ii,jj)
3715 IF (iget(423) > 0)
THEN
3721 grid1(i,j) = w_up_max(i,j)
3725 if(grib ==
'grib2')
then
3727 fld_info(cfld)%ifld = iavblfld(iget(423))
3728 fld_info(cfld)%lvl = lvlsxml(lp,iget(423))
3730 fld_info(cfld)%tinvstat=1
3732 fld_info(cfld)%tinvstat=0
3734 fld_info(cfld)%ntrange=1
3740 datapd(i,j,cfld) = grid1(ii,jj)
3748 IF (iget(424) > 0)
THEN
3753 grid1(i,j) = w_dn_max(i,j)
3756 if(grib ==
'grib2')
then
3758 fld_info(cfld)%ifld=iavblfld(iget(424))
3759 fld_info(cfld)%lvl=lvlsxml(lp,iget(424))
3761 fld_info(cfld)%tinvstat=1
3763 fld_info(cfld)%tinvstat=0
3765 fld_info(cfld)%ntrange=1
3771 datapd(i,j,cfld) = grid1(ii,jj)
3784 IF (iget(425) > 0)
THEN
3789 grid1(i,j) = w_mean(i,j)
3792 if(grib ==
'grib2')
then
3794 fld_info(cfld)%ifld = iavblfld(iget(425))
3795 fld_info(cfld)%lvl = lvlsxml(lp,iget(425))
3797 fld_info(cfld)%tinvstat = 0
3799 fld_info(cfld)%tinvstat = 1
3801 fld_info(cfld)%ntrange = 1
3807 datapd(i,j,cfld) = grid1(ii,jj)
3818 IF(iget(023) > 0)
THEN
3819 IF(gridtype ==
'A'.OR. gridtype ==
'B')
then
3820 if(me==0)print*,
'CALLING MEMSLP for A or B grid'
3821 CALL memslp(tprs,qprs,fprs)
3822 if(me==0)print*,
'aft CALLING MEMSLP for A or B grid,pslp=', &
3823 maxval(pslp(ista:iend,jsta:jend)),minval(pslp(ista:iend,jsta:jend)),pslp((ista+iend)/2,(jsta+jend)/2)
3824 ELSE IF (gridtype ==
'E')
THEN
3825 if(me==0)print*,
'CALLING MEMSLP_NMM for E grid'
3828 print*,
'unknow grid type-> WONT DERIVE MESINGER SLP'
3833 grid1(i,j) = pslp(i,j)
3838 if(grib ==
'grib2')
then
3840 fld_info(cfld)%ifld = iavblfld(iget(023))
3846 datapd(i,j,cfld) = grid1(ii,jj)
3853 IF(iget(445) > 0)
THEN
3854 if(me==0)print*,
'CALLING MAPS SLP'
3859 grid1(i,j) = pslp(i,j)
3862 if(grib ==
'grib2')
then
3864 fld_info(cfld)%ifld = iavblfld(iget(445))
3870 datapd(i,j,cfld) = grid1(ii,jj)
3878 IF(iget(023) > 0.OR.iget(445) > 0)
THEN
3879 IF(iget(012) > 0)
THEN
3883 IF(abs(spl(lp)-1.0e5) <= 1.0e-5)
THEN
3884 IF(lvls(lp,iget(012)) > 0)
THEN
3886 IF(modelname ==
'GFS')
THEN
3892 IF(fsl(i,j)<spval)
THEN
3893 grid1(i,j) = fsl(i,j)*gi
3903 IF(pslp(i,j) < spval)
THEN
3906 psfc = pint(i,j,nint(lmh(i,j))+1)
3907 IF(abs(pslpij-psfc) < 5.e2)
THEN
3908 grid1(i,j) = rd*tprs(i,j,lp)*(alpsl-alpth)
3910 grid1(i,j) = fis(i,j)/(alpsl-log(psfc))*(alpsl-alpth)
3912 z1000(i,j) = grid1(i,j)*gi
3913 grid1(i,j) = z1000(i,j)
3923 nsmooth = nint(5.*(13500./dxm))
3924 call allgetherv(grid1)
3926 CALL smooth(grid1,sdummy,im,jm,0.5)
3930 if(grib ==
'grib2')
then
3932 fld_info(cfld)%ifld = iavblfld(iget(012))
3933 fld_info(cfld)%lvl = lvlsxml(lp,iget(012))
3939 datapd(i,j,cfld) = grid1(ii,jj)
3950 if(
allocated(d3dsl))
deallocate(d3dsl)
3951 if(
allocated(dustsl))
deallocate(dustsl)
3952 if(
allocated(smokesl))
deallocate(smokesl)
elemental real function, public fpvsnew(t)
calcape() computes CAPE/CINS and other storm related variables.