44 SUBROUTINE fdlvl(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD)
49 use vrbls3d, only: zmid, t, q, pmid, icing_gfip, uh, vh
53 use ctlblk_mod
, only: jsta, jend, spval, jsta_2l, jend_2u, lm, jsta_m, &
54 jend_m, htfd, nfd, im, jm, nbin_du, gocart_on, &
55 modelname, ista, iend, ista_2l, iend_2u, ista_m, iend_m
56 use gridspec_mod
, only: gridtype
65 integer,
intent(in) :: itype(nfd)
67 real,
dimension(ISTA:IEND,JSTA:JEND,NFD),
intent(out) :: tfd,qfd,ufd,vfd,pfd,icingfd
68 real,
dimension(ISTA:IEND,JSTA:JEND,NFD,NBIN_DU),
intent(out) :: aerfd
70 INTEGER lvl(nfd),lhl(nfd)
71 INTEGER ive(jm),ivw(jm)
72 REAL dzabv(nfd), dzabh(nfd)
75 integer i,j,jvs,jvn,ie,iw,jn,js,jnt,l,llmh,ifd,n
76 integer istart,istop,jstart,jstop
77 real htt,htsfc,httuv,dz,rdz,delt,delq,delu,delv,z1,z2,htabv,htabh,htsfcv
97 icingfd(i,j,ifd) = spval
106 aerfd(i,j,ifd,n) = spval
113 IF(gridtype ==
'E')
THEN
122 IF(gridtype /=
'A')
THEN
123 CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
125 CALL exch(zmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
141 IF (itype(ifd)==1)
THEN
149 llmh = nint(lmh(i,j))
160 IF(gridtype ==
'E')
THEN
165 httuv = 0.25*(zmid(iw,j,l) &
166 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
167 ELSE IF(gridtype==
'B')
THEN
172 httuv = 0.25*(zmid(iw,j,l) &
173 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
178 IF (.NOT. doneh .AND. htt>htfd(ifd))
THEN
180 dzabh(ifd) = htt-htfd(ifd)
183 IF(htsfc > htfd(ifd))
THEN
193 IF (.NOT. donev .AND. httuv>htfd(ifd))
THEN
195 dzabv(ifd) = httuv-htfd(ifd)
198 IF(htsfc>htfd(ifd))
THEN
208 IF(doneh .AND. donev)
exit
218 dz = zmid(i,j,l)-zmid(i,j,l+1)
220 delt = t(i,j,l)-t(i,j,l+1)
221 delq = q(i,j,l)-q(i,j,l+1)
222 tfd(i,j,ifd) = t(i,j,l) - delt*rdz*dzabh(ifd)
223 qfd(i,j,ifd) = q(i,j,l) - delq*rdz*dzabh(ifd)
224 pfd(i,j,ifd) = pmid(i,j,l) - (pmid(i,j,l)-pmid(i,j,l+1))*rdz*dzabh(ifd)
225 icingfd(i,j,ifd) = icing_gfip(i,j,l) - &
226 (icing_gfip(i,j,l)-icing_gfip(i,j,l+1))*rdz*dzabh(ifd)
229 aerfd(i,j,ifd,n) = dust(i,j,l,n) - &
230 (dust(i,j,l,n)-dust(i,j,l+1,n))*rdz*dzabh(ifd)
233 ELSEIF (l == lm)
THEN
234 tfd(i,j,ifd) = t(i,j,l)
235 qfd(i,j,ifd) = q(i,j,l)
236 pfd(i,j,ifd) = pmid(i,j,l)
237 icingfd(i,j,ifd) = icing_gfip(i,j,l)
240 aerfd(i,j,ifd,n) = dust(i,j,l,n)
247 IF(gridtype ==
'E')
THEN
252 z1 = 0.25*(zmid(iw,j,l) &
253 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
254 z2 = 0.25*(zmid(iw,j,l+1) &
255 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
258 ELSE IF(gridtype==
'B')
THEN
263 z1 = 0.25*(zmid(iw,j,l) &
264 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
265 z2 = 0.25*(zmid(iw,j,l+1) &
266 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
269 dz = zmid(i,j,l)-zmid(i,j,l+1)
272 delu = uh(i,j,l) - uh(i,j,l+1)
273 delv = vh(i,j,l) - vh(i,j,l+1)
274 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
275 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
277 ufd(i,j,ifd)=uh(i,j,l)
278 vfd(i,j,ifd)=vh(i,j,l)
298 IF(gridtype ==
'E')
THEN
303 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))*(0.25/g)
304 ELSE IF(gridtype ==
'B')
THEN
309 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))*(0.25/g)
311 llmh = nint(lmh(i,j))
321 htabh = zmid(i,j,l)-htsfc
323 IF(gridtype==
'E')
THEN
324 htabv = 0.25*(zmid(iw,j,l) &
325 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))-htsfcv
326 ELSE IF(gridtype==
'B')
THEN
327 htabv = 0.25*(zmid(iw,j,l) &
328 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))-htsfcv
333 IF (.NOT. doneh .AND. htabh>htfd(ifd))
THEN
335 dzabh(ifd) = htabh-htfd(ifd)
341 IF (.NOT. donev .AND. htabv>htfd(ifd))
THEN
343 dzabv(ifd) = htabv-htfd(ifd)
348 IF(doneh .AND. donev)
exit
358 dz = zmid(i,j,l)-zmid(i,j,l+1)
360 delt = t(i,j,l)-t(i,j,l+1)
361 delq = q(i,j,l)-q(i,j,l+1)
362 tfd(i,j,ifd) = t(i,j,l) - delt*rdz*dzabh(ifd)
363 qfd(i,j,ifd) = q(i,j,l) - delq*rdz*dzabh(ifd)
364 pfd(i,j,ifd) = pmid(i,j,l) - (pmid(i,j,l)-pmid(i,j,l+1))*rdz*dzabh(ifd)
365 icingfd(i,j,ifd) = icing_gfip(i,j,l) - &
366 (icing_gfip(i,j,l)-icing_gfip(i,j,l+1))*rdz*dzabh(ifd)
369 aerfd(i,j,ifd,n) = dust(i,j,l,n) - &
370 (dust(i,j,l,n)-dust(i,j,l+1,n))*rdz*dzabh(ifd)
374 tfd(i,j,ifd) = t(i,j,l)
375 qfd(i,j,ifd) = q(i,j,l)
376 pfd(i,j,ifd) = pmid(i,j,l)
377 icingfd(i,j,ifd) = icing_gfip(i,j,l)
380 aerfd(i,j,ifd,n) = dust(i,j,l,n)
387 IF(gridtype ==
'E')
THEN
392 z1 = 0.25*(zmid(iw,j,l) &
393 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
394 z2 = 0.25*(zmid(iw,j,l+1) &
395 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
397 ELSE IF(gridtype==
'B')
THEN
402 z1 = 0.25*(zmid(iw,j,l) &
403 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
404 z2 = 0.25*(zmid(iw,j,l+1) &
405 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
408 dz = zmid(i,j,l)-zmid(i,j,l+1)
411 delu = uh(i,j,l)-uh(i,j,l+1)
412 delv = vh(i,j,l)-vh(i,j,l+1)
413 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
414 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
416 ufd(i,j,ifd) = uh(i,j,l)
417 vfd(i,j,ifd) = vh(i,j,l)
430 !krf: need ncar and nmm wrf cores in this check as well?
431 IF(modelname==
'RAPR' .OR. modelname==
'NCAR' .OR. modelname==
'NMM')
THEN
435 if(qfd(i,j,ifd) < 1.0e-8) qfd(i,j,ifd)=0.0
487 SUBROUTINE fdlvl_uv(ITYPE,NFD,HTFD,UFD,VFD)
490 use vrbls3d, only: zmid, pmid, uh, vh
494 use ctlblk_mod
, only: jsta, jend, spval, jsta_2l, jend_2u, lm, jsta_m, &
495 jend_m, im, jm, modelname, &
496 ista, iend, ista_2l, iend_2u, ista_m, iend_m
497 use gridspec_mod
, only: gridtype
503 integer,
intent(in) :: itype(nfd)
504 integer,
intent(in) :: nfd
505 real,
intent(in) :: htfd(nfd)
506 real,
dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NFD),
intent(out) :: ufd,vfd
509 INTEGER ive(jm),ivw(jm)
512 integer i,j,jvs,jvn,ie,iw,jn,js,l,llmh,ifd,n
513 integer istart,istop,jstart,jstop
514 real htt,htsfc,httuv,dz,rdz,delu,delv,z1,z2,htabv,htabh,htsfcv
531 IF(gridtype ==
'E')
THEN
540 IF(gridtype /=
'A')
THEN
541 CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
543 CALL exch(zmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
559 IF (itype(ifd) == 1)
THEN
567 llmh = nint(lmh(i,j))
574 IF(gridtype ==
'E')
THEN
579 httuv = 0.25*(zmid(iw,j,l) &
580 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
581 ELSE IF(gridtype==
'B')
THEN
586 httuv = 0.25*(zmid(iw,j,l) &
587 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
592 IF (httuv > htfd(ifd))
THEN
594 dzabv(ifd) = httuv-htfd(ifd)
596 IF(htsfc > htfd(ifd))
THEN
611 IF(gridtype ==
'E')
THEN
616 z1 = 0.25*(zmid(iw,j,l) &
617 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
618 z2 = 0.25*(zmid(iw,j,l+1) &
619 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
622 ELSE IF(gridtype==
'B')
THEN
627 z1 = 0.25*(zmid(iw,j,l) &
628 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
629 z2 = 0.25*(zmid(iw,j,l+1) &
630 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
633 dz = zmid(i,j,l)-zmid(i,j,l+1)
636 delu = uh(i,j,l) - uh(i,j,l+1)
637 delv = vh(i,j,l) - vh(i,j,l+1)
638 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
639 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
640 ELSEIF (l == lm)
THEN
641 ufd(i,j,ifd)=uh(i,j,l)
642 vfd(i,j,ifd)=vh(i,j,l)
644 ufd(i,j,ifd)=uh(i,j,lm)
645 vfd(i,j,ifd)=vh(i,j,lm)
662 IF(gridtype ==
'E')
THEN
667 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))*(0.25/g)
668 ELSE IF(gridtype ==
'B')
THEN
673 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))*(0.25/g)
675 llmh = nint(lmh(i,j))
681 htabh = zmid(i,j,l)-htsfc
682 IF(gridtype==
'E')
THEN
683 htabv = 0.25*(zmid(iw,j,l) &
684 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))-htsfcv
685 ELSE IF(gridtype==
'B')
THEN
686 htabv = 0.25*(zmid(iw,j,l) &
687 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))-htsfcv
692 IF (htabv > htfd(ifd))
THEN
694 dzabv(ifd) = htabv-htfd(ifd)
704 IF(gridtype ==
'E')
THEN
709 z1 = 0.25*(zmid(iw,j,l) &
710 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
711 z2 = 0.25*(zmid(iw,j,l+1) &
712 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
714 ELSE IF(gridtype==
'B')
THEN
719 z1 = 0.25*(zmid(iw,j,l) &
720 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
721 z2 = 0.25*(zmid(iw,j,l+1) &
722 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
725 dz = zmid(i,j,l)-zmid(i,j,l+1)
728 delu = uh(i,j,l)-uh(i,j,l+1)
729 delv = vh(i,j,l)-vh(i,j,l+1)
730 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
731 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
733 ufd(i,j,ifd) = uh(i,j,l)
734 vfd(i,j,ifd) = vh(i,j,l)
817 SUBROUTINE fdlvl_mass(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD)
818 use vrbls3d, only: t,q,zmid,pmid,pint,zint
821 use params_mod, only: gi, g, gamma,pq0, a2, a3, a4, rhmin,rgamog
822 use ctlblk_mod
, only: jsta, jend, spval, jsta_2l, jend_2u, lm, jsta_m, &
823 jend_m, im, jm,global,modelname, &
824 ista, iend, ista_2l, iend_2u, ista_m, iend_m
825 use gridspec_mod
, only: gridtype
826 use physcons_post,only: con_fvirt, con_rog, con_eps, con_epsm1
835 real,
parameter:: zshul=75.,tvshul=290.66
837 integer,
intent(in) :: itype(nfd)
838 integer,
intent(in) :: nfd
839 real,
intent(in) :: ptfd(nfd)
840 real,
intent(in) :: htfd(nfd)
841 integer,
intent(in) :: nin
842 real,
intent(in) :: qin(ista:iend,jsta:jend,lm,nin)
843 character,
intent(in) :: qtype(nin)
844 real,
intent(out) :: qfd(ista:iend,jsta:jend,nfd,nin)
850 integer i,j,l,llmh,ifd,n
851 integer istart,istop,jstart,jstop
852 real htt,htsfc,dz,rdz,delq,htabh
854 real :: tvu,tvd,gammas,part,es,qsat,rhl,pl,zl,tl,ql
855 real :: tvrl,tvrblo,tblo,qblo
867 qfd(i,j,ifd,n) = spval
873 IF(gridtype /=
'A')
THEN
890 IF (itype(ifd) == 1)
THEN
898 llmh = nint(lmh(i,j))
906 IF (htt > htfd(ifd))
THEN
908 dzabh(ifd) = htt-htfd(ifd)
910 IF(htsfc > htfd(ifd))
THEN
926 dz = zmid(i,j,l)-zmid(i,j,l+1)
929 if(qin(i,j,l,n)<spval)
then
930 qfd(i,j,ifd,n)=qin(i,j,l+1,n)
931 elseif(qin(i,j,l+1,n)<spval)
then
932 qfd(i,j,ifd,n)=qin(i,j,l,n)
934 qfd(i,j,ifd,n) = qin(i,j,l,n) - &
935 (qin(i,j,l,n)-qin(i,j,l+1,n))*rdz*dzabh(ifd)
938 ELSEIF (l == lm)
THEN
940 qfd(i,j,ifd,n) = qin(i,j,l,n)
945 IF(modelname ==
'GFS')
THEN
946 if(qtype(n) ==
"T" .or. qtype(n) ==
"Q")
then
947 tvu = t(i,j,lm) * (1.+con_fvirt*q(i,j,lm))
948 if(zmid(i,j,lm) > zshul)
then
949 tvd = tvu + gamma*zmid(i,j,lm)
950 if(tvd > tvshul)
then
951 if(tvu > tvshul)
then
952 tvd = tvshul - 5.e-3*(tvu-tvshul)*(tvu-tvshul)
957 gammas = (tvu-tvd)/zmid(i,j,lm)
961 part = con_rog*(log(ptfd(ifd))-log(pmid(i,j,lm)))
962 part = zmid(i,j,lm) - tvu*part/(1.+0.5*gammas*part)
963 part = t(i,j,lm) - gamma*(part-zmid(i,j,lm))
965 if(qtype(n) ==
"T") qfd(i,j,ifd,n) = part
967 if(qtype(n) ==
"Q")
then
971 es = min(
fpvsnew(t(i,j,lm)), pmid(i,j,lm))
972 qsat = con_eps*es/(pmid(i,j,lm)+con_epsm1*es)
975 es = min(
fpvsnew(part), ptfd(ifd))
976 qsat = con_eps*es/(ptfd(ifd)+con_epsm1*es)
978 qfd(i,j,ifd,n) = rhl*qsat
983 if(qtype(n) ==
"T" .or. qtype(n) ==
"Q")
then
986 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
987 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
989 qsat = pq0/pl*exp(a2*(tl-a3)/(tl-a4))
1002 tvrl = tl*(1.+0.608*ql)
1003 tvrblo = tvrl*(ptfd(ifd)/pl)**rgamog
1004 tblo = tvrblo/(1.+0.608*ql)
1006 qsat = pq0/ptfd(ifd)*exp(a2*(tblo-a3)/(tblo-a4))
1007 if(qtype(n) ==
"T") qfd(i,j,ifd,n) = tblo
1009 if(qtype(n) ==
"Q") qfd(i,j,ifd,n) = max(1.e-12,qblo)
1013 if(qtype(n) ==
"W") qfd(i,j,ifd,n)=qin(i,j,lm,n)
1014 if(qtype(n) ==
"K") qfd(i,j,ifd,n)= max(0.0,0.5*(qin(i,j,lm,n)+qin(i,j,lm-1,n)))
1015 if(qtype(n) ==
"C") qfd(i,j,ifd,n)=0.0
1037 llmh = nint(lmh(i,j))
1043 htabh = zmid(i,j,l)-htsfc
1045 IF ( htabh > htfd(ifd))
THEN
1047 dzabh(ifd) = htabh-htfd(ifd)
1057 dz = zmid(i,j,l)-zmid(i,j,l+1)
1060 if(qin(i,j,l,n)<spval)
then
1061 qfd(i,j,ifd,n)=qin(i,j,l+1,n)
1062 elseif(qin(i,j,l+1,n)<spval)
then
1063 qfd(i,j,ifd,n)=qin(i,j,l,n)
1065 qfd(i,j,ifd,n) = qin(i,j,l,n) - &
1066 (qin(i,j,l,n)-qin(i,j,l+1,n))*rdz*dzabh(ifd)
1071 qfd(i,j,ifd,n) = qin(i,j,l,n)
elemental real function, public fpvsnew(t)
calcape() computes CAPE/CINS and other storm related variables.