45 SUBROUTINE fdlvl(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD)
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, &
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
69 INTEGER lvl(nfd),lhl(nfd)
70 INTEGER ive(jm),ivw(jm)
71 REAL dzabv(nfd), dzabh(nfd)
74 integer i,j,jvs,jvn,ie,iw,jn,js,jnt,l,llmh,ifd,n
75 integer istart,istop,jstart,jstop
76 real htt,htsfc,httuv,dz,rdz,delt,delq,delu,delv,z1,z2,htabv,htabh,htsfcv
96 icingfd(i,j,ifd) = spval
101 IF(gridtype ==
'E')
THEN
110 IF(gridtype /=
'A')
THEN
111 CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
113 CALL exch(zmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
129 IF (itype(ifd)==1)
THEN
137 llmh = nint(lmh(i,j))
148 IF(gridtype ==
'E')
THEN
153 httuv = 0.25*(zmid(iw,j,l) &
154 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
155 ELSE IF(gridtype==
'B')
THEN
160 httuv = 0.25*(zmid(iw,j,l) &
161 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
166 IF (.NOT. doneh .AND. htt>htfd(ifd))
THEN
168 dzabh(ifd) = htt-htfd(ifd)
171 IF(htsfc > htfd(ifd))
THEN
181 IF (.NOT. donev .AND. httuv>htfd(ifd))
THEN
183 dzabv(ifd) = httuv-htfd(ifd)
186 IF(htsfc>htfd(ifd))
THEN
196 IF(doneh .AND. donev)
exit
206 dz = zmid(i,j,l)-zmid(i,j,l+1)
208 delt = t(i,j,l)-t(i,j,l+1)
209 delq = q(i,j,l)-q(i,j,l+1)
210 tfd(i,j,ifd) = t(i,j,l) - delt*rdz*dzabh(ifd)
211 qfd(i,j,ifd) = q(i,j,l) - delq*rdz*dzabh(ifd)
212 pfd(i,j,ifd) = pmid(i,j,l) - (pmid(i,j,l)-pmid(i,j,l+1))*rdz*dzabh(ifd)
213 icingfd(i,j,ifd) = icing_gfip(i,j,l) - &
214 (icing_gfip(i,j,l)-icing_gfip(i,j,l+1))*rdz*dzabh(ifd)
215 ELSEIF (l == lm)
THEN
216 tfd(i,j,ifd) = t(i,j,l)
217 qfd(i,j,ifd) = q(i,j,l)
218 pfd(i,j,ifd) = pmid(i,j,l)
219 icingfd(i,j,ifd) = icing_gfip(i,j,l)
224 IF(gridtype ==
'E')
THEN
229 z1 = 0.25*(zmid(iw,j,l) &
230 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
231 z2 = 0.25*(zmid(iw,j,l+1) &
232 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
235 ELSE IF(gridtype==
'B')
THEN
240 z1 = 0.25*(zmid(iw,j,l) &
241 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
242 z2 = 0.25*(zmid(iw,j,l+1) &
243 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
246 dz = zmid(i,j,l)-zmid(i,j,l+1)
249 delu = uh(i,j,l) - uh(i,j,l+1)
250 delv = vh(i,j,l) - vh(i,j,l+1)
251 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
252 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
254 ufd(i,j,ifd)=uh(i,j,l)
255 vfd(i,j,ifd)=vh(i,j,l)
275 IF(gridtype ==
'E')
THEN
280 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))*(0.25/g)
281 ELSE IF(gridtype ==
'B')
THEN
286 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))*(0.25/g)
288 llmh = nint(lmh(i,j))
298 htabh = zmid(i,j,l)-htsfc
300 IF(gridtype==
'E')
THEN
301 htabv = 0.25*(zmid(iw,j,l) &
302 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))-htsfcv
303 ELSE IF(gridtype==
'B')
THEN
304 htabv = 0.25*(zmid(iw,j,l) &
305 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))-htsfcv
310 IF (.NOT. doneh .AND. htabh>htfd(ifd))
THEN
312 dzabh(ifd) = htabh-htfd(ifd)
318 IF (.NOT. donev .AND. htabv>htfd(ifd))
THEN
320 dzabv(ifd) = htabv-htfd(ifd)
325 IF(doneh .AND. donev)
exit
335 dz = zmid(i,j,l)-zmid(i,j,l+1)
337 delt = t(i,j,l)-t(i,j,l+1)
338 delq = q(i,j,l)-q(i,j,l+1)
339 tfd(i,j,ifd) = t(i,j,l) - delt*rdz*dzabh(ifd)
340 qfd(i,j,ifd) = q(i,j,l) - delq*rdz*dzabh(ifd)
341 pfd(i,j,ifd) = pmid(i,j,l) - (pmid(i,j,l)-pmid(i,j,l+1))*rdz*dzabh(ifd)
342 icingfd(i,j,ifd) = icing_gfip(i,j,l) - &
343 (icing_gfip(i,j,l)-icing_gfip(i,j,l+1))*rdz*dzabh(ifd)
345 tfd(i,j,ifd) = t(i,j,l)
346 qfd(i,j,ifd) = q(i,j,l)
347 pfd(i,j,ifd) = pmid(i,j,l)
348 icingfd(i,j,ifd) = icing_gfip(i,j,l)
353 IF(gridtype ==
'E')
THEN
358 z1 = 0.25*(zmid(iw,j,l) &
359 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
360 z2 = 0.25*(zmid(iw,j,l+1) &
361 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
363 ELSE IF(gridtype==
'B')
THEN
368 z1 = 0.25*(zmid(iw,j,l) &
369 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
370 z2 = 0.25*(zmid(iw,j,l+1) &
371 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
374 dz = zmid(i,j,l)-zmid(i,j,l+1)
377 delu = uh(i,j,l)-uh(i,j,l+1)
378 delv = vh(i,j,l)-vh(i,j,l+1)
379 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
380 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
382 ufd(i,j,ifd) = uh(i,j,l)
383 vfd(i,j,ifd) = vh(i,j,l)
396 !krf: need ncar and nmm wrf cores in this check as well?
397 IF(modelname==
'RAPR' .OR. modelname==
'NCAR' .OR. modelname==
'NMM')
THEN
401 if(qfd(i,j,ifd) < 1.0e-8) qfd(i,j,ifd)=0.0
456 use vrbls3d, only: zmid, pmid, uh, vh
460 use ctlblk_mod, only: jsta, jend, spval, jsta_2l, jend_2u, lm, jsta_m, &
461 jend_m, im, jm, modelname, &
462 ista, iend, ista_2l, iend_2u, ista_m, iend_m
463 use gridspec_mod
, only: gridtype
469 integer,
intent(in) :: itype(nfd)
470 integer,
intent(in) :: nfd
471 real,
intent(in) :: htfd(nfd)
472 real,
dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NFD),
intent(out) :: ufd,vfd
475 INTEGER ive(jm),ivw(jm)
478 integer i,j,jvs,jvn,ie,iw,jn,js,l,llmh,ifd,n
479 integer istart,istop,jstart,jstop
480 real htt,htsfc,httuv,dz,rdz,delu,delv,z1,z2,htabv,htabh,htsfcv
497 IF(gridtype ==
'E')
THEN
506 IF(gridtype /=
'A')
THEN
507 CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
509 CALL exch(zmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
525 IF (itype(ifd) == 1)
THEN
533 llmh = nint(lmh(i,j))
540 IF(gridtype ==
'E')
THEN
545 httuv = 0.25*(zmid(iw,j,l) &
546 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
547 ELSE IF(gridtype==
'B')
THEN
552 httuv = 0.25*(zmid(iw,j,l) &
553 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
558 IF (httuv > htfd(ifd))
THEN
560 dzabv(ifd) = httuv-htfd(ifd)
562 IF(htsfc > htfd(ifd))
THEN
577 IF(gridtype ==
'E')
THEN
582 z1 = 0.25*(zmid(iw,j,l) &
583 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
584 z2 = 0.25*(zmid(iw,j,l+1) &
585 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
588 ELSE IF(gridtype==
'B')
THEN
593 z1 = 0.25*(zmid(iw,j,l) &
594 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
595 z2 = 0.25*(zmid(iw,j,l+1) &
596 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
599 dz = zmid(i,j,l)-zmid(i,j,l+1)
602 delu = uh(i,j,l) - uh(i,j,l+1)
603 delv = vh(i,j,l) - vh(i,j,l+1)
604 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
605 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
606 ELSEIF (l == lm)
THEN
607 ufd(i,j,ifd)=uh(i,j,l)
608 vfd(i,j,ifd)=vh(i,j,l)
610 ufd(i,j,ifd)=uh(i,j,lm)
611 vfd(i,j,ifd)=vh(i,j,lm)
628 IF(gridtype ==
'E')
THEN
633 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))*(0.25/g)
634 ELSE IF(gridtype ==
'B')
THEN
639 htsfcv = (fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))*(0.25/g)
641 llmh = nint(lmh(i,j))
647 htabh = zmid(i,j,l)-htsfc
648 IF(gridtype==
'E')
THEN
649 htabv = 0.25*(zmid(iw,j,l) &
650 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))-htsfcv
651 ELSE IF(gridtype==
'B')
THEN
652 htabv = 0.25*(zmid(iw,j,l) &
653 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))-htsfcv
658 IF (htabv > htfd(ifd))
THEN
660 dzabv(ifd) = htabv-htfd(ifd)
670 IF(gridtype ==
'E')
THEN
675 z1 = 0.25*(zmid(iw,j,l) &
676 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(i,js,l))
677 z2 = 0.25*(zmid(iw,j,l+1) &
678 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(i,js,l+1))
680 ELSE IF(gridtype==
'B')
THEN
685 z1 = 0.25*(zmid(iw,j,l) &
686 + zmid(ie,j,l)+zmid(i,jn,l)+zmid(ie,jn,l))
687 z2 = 0.25*(zmid(iw,j,l+1) &
688 + zmid(ie,j,l+1)+zmid(i,jn,l+1)+zmid(ie,jn,l+1))
691 dz = zmid(i,j,l)-zmid(i,j,l+1)
694 delu = uh(i,j,l)-uh(i,j,l+1)
695 delv = vh(i,j,l)-vh(i,j,l+1)
696 ufd(i,j,ifd) = uh(i,j,l) - delu*rdz*dzabv(ifd)
697 vfd(i,j,ifd) = vh(i,j,l) - delv*rdz*dzabv(ifd)
699 ufd(i,j,ifd) = uh(i,j,l)
700 vfd(i,j,ifd) = vh(i,j,l)
785 use vrbls3d, only: t,q,zmid,pmid,pint,zint
788 use params_mod, only: gi, g, gamma,pq0, a2, a3, a4, rhmin,rgamog
789 use ctlblk_mod, only: jsta, jend, spval, jsta_2l, jend_2u, lm, jsta_m, &
790 jend_m, im, jm,global,modelname, &
791 ista, iend, ista_2l, iend_2u, ista_m, iend_m
792 use gridspec_mod
, only: gridtype
793 use physcons_post,only: con_fvirt, con_rog, con_eps, con_epsm1
802 real,
parameter:: zshul=75.,tvshul=290.66
804 integer,
intent(in) :: itype(nfd)
805 integer,
intent(in) :: nfd
806 real,
intent(in) :: ptfd(nfd)
807 real,
intent(in) :: htfd(nfd)
808 integer,
intent(in) :: nin
809 real,
intent(in) :: qin(ista:iend,jsta:jend,lm,nin)
810 character,
intent(in) :: qtype(nin)
811 real,
intent(out) :: qfd(ista:iend,jsta:jend,nfd,nin)
817 integer i,j,l,llmh,ifd,n
818 integer istart,istop,jstart,jstop
819 real htt,htsfc,dz,rdz,delq,htabh
821 real :: tvu,tvd,gammas,part,es,qsat,rhl,pl,zl,tl,ql
822 real :: tvrl,tvrblo,tblo,qblo
834 qfd(i,j,ifd,n) = spval
840 IF(gridtype /=
'A')
THEN
857 IF (itype(ifd) == 1)
THEN
865 llmh = nint(lmh(i,j))
873 IF (htt > htfd(ifd))
THEN
875 dzabh(ifd) = htt-htfd(ifd)
877 IF(htsfc > htfd(ifd))
THEN
893 dz = zmid(i,j,l)-zmid(i,j,l+1)
896 if(qin(i,j,l,n)<spval)
then
897 qfd(i,j,ifd,n)=qin(i,j,l+1,n)
898 elseif(qin(i,j,l+1,n)<spval)
then
899 qfd(i,j,ifd,n)=qin(i,j,l,n)
901 qfd(i,j,ifd,n) = qin(i,j,l,n) - &
902 (qin(i,j,l,n)-qin(i,j,l+1,n))*rdz*dzabh(ifd)
905 ELSEIF (l == lm)
THEN
907 qfd(i,j,ifd,n) = qin(i,j,l,n)
912 IF(modelname ==
'GFS')
THEN
913 if(qtype(n) ==
"T" .or. qtype(n) ==
"Q")
then
914 tvu = t(i,j,lm) * (1.+con_fvirt*q(i,j,lm))
915 if(zmid(i,j,lm) > zshul)
then
916 tvd = tvu + gamma*zmid(i,j,lm)
917 if(tvd > tvshul)
then
918 if(tvu > tvshul)
then
919 tvd = tvshul - 5.e-3*(tvu-tvshul)*(tvu-tvshul)
924 gammas = (tvu-tvd)/zmid(i,j,lm)
928 part = con_rog*(log(ptfd(ifd))-log(pmid(i,j,lm)))
929 part = zmid(i,j,lm) - tvu*part/(1.+0.5*gammas*part)
930 part = t(i,j,lm) - gamma*(part-zmid(i,j,lm))
932 if(qtype(n) ==
"T") qfd(i,j,ifd,n) = part
934 if(qtype(n) ==
"Q")
then
938 es = min(
fpvsnew(t(i,j,lm)), pmid(i,j,lm))
939 qsat = con_eps*es/(pmid(i,j,lm)+con_epsm1*es)
942 es = min(
fpvsnew(part), ptfd(ifd))
943 qsat = con_eps*es/(ptfd(ifd)+con_epsm1*es)
945 qfd(i,j,ifd,n) = rhl*qsat
950 if(qtype(n) ==
"T" .or. qtype(n) ==
"Q")
then
953 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
954 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
956 qsat = pq0/pl*exp(a2*(tl-a3)/(tl-a4))
969 tvrl = tl*(1.+0.608*ql)
970 tvrblo = tvrl*(ptfd(ifd)/pl)**rgamog
971 tblo = tvrblo/(1.+0.608*ql)
973 qsat = pq0/ptfd(ifd)*exp(a2*(tblo-a3)/(tblo-a4))
974 if(qtype(n) ==
"T") qfd(i,j,ifd,n) = tblo
976 if(qtype(n) ==
"Q") qfd(i,j,ifd,n) = max(1.e-12,qblo)
980 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)))
1002 llmh = nint(lmh(i,j))
1008 htabh = zmid(i,j,l)-htsfc
1010 IF ( htabh > htfd(ifd))
THEN
1012 dzabh(ifd) = htabh-htfd(ifd)
1022 dz = zmid(i,j,l)-zmid(i,j,l+1)
1025 if(qin(i,j,l,n)<spval)
then
1026 qfd(i,j,ifd,n)=qin(i,j,l+1,n)
1027 elseif(qin(i,j,l+1,n)<spval)
then
1028 qfd(i,j,ifd,n)=qin(i,j,l,n)
1030 qfd(i,j,ifd,n) = qin(i,j,l,n) - &
1031 (qin(i,j,l,n)-qin(i,j,l+1,n))*rdz*dzabh(ifd)
1036 qfd(i,j,ifd,n) = qin(i,j,l,n)
subroutine fdlvl_uv(ITYPE, NFD, HTFD, UFD, VFD)
Computes FD level for u,v.
subroutine fdlvl_mass(ITYPE, NFD, PTFD, HTFD, NIN, QIN, QTYPE, QFD)
Computes FD level for mass variables.
elemental real function, public fpvsnew(t)