17 SUBROUTINE mdl2std_p()
20 use vrbls3d, only: pint, pmid, zmid
21 use vrbls3d, only: t, q, uh, vh, omga, cwm, qqw, qqi, qqr, qqs, qqg
23 use vrbls3d, only: icing_gfip, icing_gfis, catedr, mwt, gtg
24 use ctlblk_mod
, only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, &
25 lm, htfd, spval, nfd, me,&
26 jsta_2l, jend_2u, modelname,&
27 ista, iend, ista_2l, iend_2u
28 use rqstfld_mod
, only: iget, lvls, iavblfld, lvlsxml
36 real,
external :: p2h, relabel
38 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid1
39 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: egrid1,egrid2,egrid3,egrid4
42 integer i,j,ii,jj,l,itype,ifd,itypefdlvl(nfd)
46 REAL,
allocatable :: htfdctl(:)
47 integer,
allocatable :: itypefdlvlctl(:)
48 real,
allocatable :: qin(:,:,:,:), qfd(:,:,:,:)
49 character,
allocatable :: qtype(:)
50 real,
allocatable :: var3d1(:,:,:), var3d2(:,:,:)
52 integer,
parameter :: nfdmax=50
53 integer :: ids(nfdmax)
77 IF(iget(450)>0 .or. iget(480)>0 .or. &
78 iget(464)>0 .or. iget(465)>0 .or. iget(466)>0 .or. &
79 iget(518)>0 .or. iget(519)>0 .or. iget(520)>0 .or. &
80 iget(521)>0 .or. iget(522)>0 .or. iget(523)>0 .or. &
81 iget(524)>0 .or. iget(525)>0)
then
84 IF(iget(520)>0 .or. iget(521)>0 .or. iget(524) > 0 )
THEN
87 n = iavblfld(iget(iid))
88 nfdctl=
size(pset%param(n)%level)
89 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
90 allocate(itypefdlvlctl(nfdctl))
92 itypefdlvlctl(ifd)=lvls(ifd,iget(iid))
94 if(
allocated(htfdctl))
deallocate(htfdctl)
95 allocate(htfdctl(nfdctl))
96 htfdctl=pset%param(n)%level
98 htfdctl(i)=p2h(htfdctl(i)/100.)
100 if(
allocated(var3d1))
deallocate(var3d1)
101 if(
allocated(var3d2))
deallocate(var3d2)
102 allocate(var3d1(ista_2l:iend_2u,jsta_2l:jend_2u,nfdctl))
103 allocate(var3d2(ista_2l:iend_2u,jsta_2l:jend_2u,nfdctl))
107 call fdlvl_uv(itypefdlvlctl,nfdctl,htfdctl,var3d1,var3d2)
111 IF (lvls(ifd,iget(520)) > 0)
THEN
115 grid1(i,j)=var3d1(i,j,ifd)
118 if(grib==
'grib2')
then
120 fld_info(cfld)%ifld=iavblfld(iget(520))
121 fld_info(cfld)%lvl=lvlsxml(ifd,iget(520))
127 datapd(i,j,cfld) = grid1(ii,jj)
133 IF (lvls(ifd,iget(521)) > 0)
THEN
137 grid1(i,j)=var3d2(i,j,ifd)
140 if(grib==
'grib2')
then
142 fld_info(cfld)%ifld=iavblfld(iget(521))
143 fld_info(cfld)%lvl=lvlsxml(ifd,iget(521))
149 datapd(i,j,cfld) = grid1(ii,jj)
155 IF (lvls(ifd,iget(524)) > 0)
THEN
156 egrid1=var3d1(ista_2l:iend_2u,jsta_2l:jend_2u,ifd)
157 egrid2=var3d2(ista_2l:iend_2u,jsta_2l:jend_2u,ifd)
158 call calvor(egrid1,egrid2,egrid3)
162 grid1(i,j)=egrid3(i,j)
165 if(grib==
'grib2')
then
167 fld_info(cfld)%ifld=iavblfld(iget(524))
168 fld_info(cfld)%lvl=lvlsxml(ifd,iget(524))
174 datapd(i,j,cfld) = grid1(ii,jj)
190 if(
allocated(qin))
deallocate(qin)
191 if(
allocated(qtype))
deallocate(qtype)
192 ALLOCATE(qin(ista:iend,jsta:jend,lm,nfdmax))
193 ALLOCATE(qtype(nfdmax))
197 IF(iget(450) > 0)
THEN
200 qin(ista:iend,jsta:jend,1:lm,nfds)=icing_gfip(ista:iend,jsta:jend,1:lm)
203 IF(iget(480) > 0)
THEN
206 qin(ista:iend,jsta:jend,1:lm,nfds)=icing_gfis(ista:iend,jsta:jend,1:lm)
209 IF(iget(464) > 0)
THEN
212 qin(ista:iend,jsta:jend,1:lm,nfds)=gtg(ista:iend,jsta:jend,1:lm)
215 IF(iget(465) > 0)
THEN
218 qin(ista:iend,jsta:jend,1:lm,nfds)=catedr(ista:iend,jsta:jend,1:lm)
221 IF(iget(466) > 0)
THEN
224 qin(ista:iend,jsta:jend,1:lm,nfds)=mwt(ista:iend,jsta:jend,1:lm)
227 IF(iget(519) > 0)
THEN
230 qin(ista:iend,jsta:jend,1:lm,nfds)=t(ista:iend,jsta:jend,1:lm)
233 IF(iget(523) > 0)
THEN
236 qin(ista:iend,jsta:jend,1:lm,nfds)=omga(ista:iend,jsta:jend,1:lm)
239 IF(iget(525) > 0)
THEN
242 qin(ista:iend,jsta:jend,1:lm,nfds)=qqw(ista:iend,jsta:jend,1:lm)+ &
243 qqr(ista:iend,jsta:jend,1:lm)+ &
244 qqs(ista:iend,jsta:jend,1:lm)+ &
245 qqg(ista:iend,jsta:jend,1:lm)+ &
246 qqi(ista:iend,jsta:jend,1:lm)
252 n = iavblfld(iget(iid))
253 nfdctl=
size(pset%param(n)%level)
254 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
255 allocate(itypefdlvlctl(nfdctl))
257 itypefdlvlctl(ifd)=lvls(ifd,iget(iid))
259 if(
allocated(htfdctl))
deallocate(htfdctl)
260 allocate(htfdctl(nfdctl))
261 htfdctl=pset%param(n)%level
263 htfdctl(i)=p2h(htfdctl(i)/100.)
266 if(
allocated(qfd))
deallocate(qfd)
267 ALLOCATE(qfd(ista:iend,jsta:jend,nfdctl,nfds))
270 call fdlvl_mass(itypefdlvlctl,nfdctl,pset%param(n)%level,htfdctl,nfds,qin,qtype,qfd)
283 if(qfd(i,j,ifd,n) < spval)
then
284 qfd(i,j,ifd,n)=max(0.0,qfd(i,j,ifd,n))
285 qfd(i,j,ifd,n)=min(1.0,qfd(i,j,ifd,n))
298 if(qfd(i,j,ifd,n) < spval)
then
299 qfd(i,j,ifd,n)=max(0.0,qfd(i,j,ifd,n))
319 if(qfd(i,j,ifd,n1) < 0.001) qfd(i,j,ifd,n)=0.
321 if(qfd(i,j,ifd,n) == spval) cycle
322 if (qfd(i,j,ifd,n) < 0.08)
then
324 elseif (qfd(i,j,ifd,n) <= 0.21)
then
326 else if(qfd(i,j,ifd,n) <= 0.37)
then
328 else if(qfd(i,j,ifd,n) <= 0.67)
then
339 if(iid==464 .or. iid==465 .or. iid==466)
then
343 if(qfd(i,j,ifd,n) < spval)
then
344 qfd(i,j,ifd,n)=max(0.0,qfd(i,j,ifd,n))
345 qfd(i,j,ifd,n)=min(1.0,qfd(i,j,ifd,n))
358 IF (lvls(ifd,iget(iid)) > 0)
THEN
362 grid1(i,j)=qfd(i,j,ifd,n)
365 if(grib==
'grib2')
then
367 fld_info(cfld)%ifld=iavblfld(iget(iid))
368 fld_info(cfld)%lvl=lvlsxml(ifd,iget(iid))
374 datapd(i,j,cfld) = grid1(ii,jj)
389 IF(iget(518) > 0)
THEN
391 n = iavblfld(iget(iid))
392 nfdctl=
size(pset%param(n)%level)
393 if(
allocated(htfdctl))
deallocate(htfdctl)
394 allocate(htfdctl(nfdctl))
395 htfdctl=pset%param(n)%level
397 htfdctl(i)=p2h(htfdctl(i)/100.)
401 IF (lvls(ifd,iget(iid)) > 0)
THEN
405 grid1(i,j)=htfdctl(ifd)
408 if(grib==
'grib2')
then
410 fld_info(cfld)%ifld=iavblfld(iget(iid))
411 fld_info(cfld)%lvl=lvlsxml(ifd,iget(iid))
417 datapd(i,j,cfld) = grid1(ii,jj)
426 IF(iget(522) > 0)
THEN
428 n = iavblfld(iget(iid))
429 nfdctl=
size(pset%param(n)%level)
430 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
431 allocate(itypefdlvlctl(nfdctl))
433 itypefdlvlctl(ifd)=lvls(ifd,iget(iid))
435 if(
allocated(htfdctl))
deallocate(htfdctl)
436 allocate(htfdctl(nfdctl))
437 htfdctl=pset%param(n)%level
439 htfdctl(i)=p2h(htfdctl(i)/100.)
442 if(
allocated(qin))
deallocate(qin)
443 if(
allocated(qtype))
deallocate(qtype)
444 ALLOCATE(qin(ista:iend,jsta:jend,lm,2))
446 qin(ista:iend,jsta:jend,1:lm,1)=t(ista:iend,jsta:jend,1:lm)
447 qin(ista:iend,jsta:jend,1:lm,2)=q(ista:iend,jsta:jend,1:lm)
451 if(
allocated(qfd))
deallocate(qfd)
452 ALLOCATE(qfd(ista:iend,jsta:jend,nfdctl,2))
455 print *,
"wafs levels",pset%param(n)%level
456 call fdlvl_mass(itypefdlvlctl,nfdctl,pset%param(n)%level,htfdctl,2,qin,qtype,qfd)
458 htfdctl=pset%param(n)%level
461 IF (lvls(ifd,iget(iid)) > 0)
THEN
465 egrid2(i,j) = htfdctl(ifd)
469 egrid3(ista:iend,jsta:jend)=qfd(ista:iend,jsta:jend,ifd,1)
470 egrid4(ista:iend,jsta:jend)=qfd(ista:iend,jsta:jend,ifd,2)
473 CALL calrh(egrid2(ista:iend,jsta:jend),egrid3(ista:iend,jsta:jend),egrid4(ista:iend,jsta:jend),egrid1(ista:iend,jsta:jend))
478 IF(egrid1(i,j) < spval)
THEN
479 grid1(i,j) = egrid1(i,j)*100.
481 grid1(i,j) = egrid1(i,j)
486 if(grib==
'grib2')
then
488 fld_info(cfld)%ifld=iavblfld(iget(iid))
489 fld_info(cfld)%lvl=lvlsxml(ifd,iget(iid))
495 datapd(i,j,cfld) = grid1(i,jj)
508 ids = (/ 450,480,464,465,466,518,519,520,521,522,523,524,525,(0,i=14,50) /)
512 n = iavblfld(iget(iid))
513 nfdctl=
size(pset%param(n)%level)
515 pset%param(n)%level(j) = relabel(pset%param(n)%level(j))
529 real,
intent(in) :: p
534 real,
parameter :: lapse = 0.0065
535 real,
parameter :: surf_temp = 288.15
536 real,
parameter :: gravity = 9.80665
537 real,
parameter :: moles_dry_air = 0.02896442
538 real,
parameter :: gas_const = 8.31432
539 real,
parameter :: surf_pres = 1013.25
540 real,
parameter :: power_const = (gravity * moles_dry_air) &
541 / (gas_const * lapse)
543 p2h = (surf_temp/lapse)*(1-(p/surf_pres)**(1/power_const))
548 real,
intent(in) :: p
551 if(p == 10040.) relabel=10000
552 if(p == 12770.) relabel=12500
553 if(p == 14750.) relabel=15000
554 if(p == 17870.) relabel=17500
555 if(p == 19680.) relabel=20000
556 if(p == 22730.) relabel=22500
557 if(p == 27450.) relabel=27500
558 if(p == 30090.) relabel=30000
559 if(p == 34430.) relabel=35000
560 if(p == 39270.) relabel=40000
561 if(p == 44650.) relabel=45000
562 if(p == 50600.) relabel=50000
563 if(p == 59520.) relabel=60000
564 if(p == 69680.) relabel=70000
565 if(p == 75260.) relabel=75000
566 if(p == 81200.) relabel=80000
567 if(p == 84310.) relabel=85000
calcape() computes CAPE/CINS and other storm related variables.