51 & ntiw,ntke,grav,pi,rd,cp,rv,hvap,hfus,fv,eps,epsm1,
52!The following three variables are for SA-3D-TKE
53 & def_1,def_2,def_3,sa3dtke,dku3d_h,dku3d_e,
54 & dv,du,tdt,rtg,u1,v1,t1,q1,usfco,vsfco,use_oceanuv,
55 & swh,hlw,xmu,garea,zvfun,sigmaf,
56 & psk,rbsoil,zorl,u10m,v10m,fm,fh,
57 & tsea,heat,evap,stress,spd1,kpbl,
58 & prsi,del,prsl,prslk,phii,phil,delt,tte_edmf,
59 & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl,dkt,dku,tkeh,
61 & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr,
62 & rlmx,elmx,sfc_rlm,tc_pbl,use_lpt,
64 & ntqv,dtend,dtidx,index_of_temperature,index_of_x_wind,
65 & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d,
71 use machine ,
only : kind_phys
72 use funcphys ,
only : fpvs
83 integer,
intent(in) :: im, km, ntrac, ntcw, ntrw, ntiw,
85 integer,
intent(in) :: sfc_rlm
86 integer,
intent(in) :: tc_pbl
87 integer,
intent(in) :: use_lpt
88 integer,
intent(in) :: kinver(:)
89 integer,
intent(out) :: kpbl(:)
90 logical,
intent(in) :: gen_tend,ldiag3d
92 real(kind=kind_phys),
intent(in) :: grav,pi,rd,cp,rv,hvap,hfus,fv,
94 real(kind=kind_phys),
intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s
95 real(kind=kind_phys),
intent(in) :: dspfac, bl_upfr, bl_dnfr
96 real(kind=kind_phys),
intent(in) :: rlmx, elmx
98 logical,
intent(in) :: do_canopy, cplaqm
99 real(kind=kind_phys),
optional,
intent(in) ::
100 & dkt_can(:,:), dku_can(:,:)
102 real(kind=kind_phys),
intent(inout) :: dv(:,:), du(:,:),
103 & tdt(:,:), rtg(:,:,:), tkeh(:,:)
104 real(kind=kind_phys),
intent(in) ::
106 & usfco(:), vsfco(:),
107 & t1(:,:), q1(:,:,:),
109 & def_1(:,:), def_2(:,:), def_3(:,:),
110 & swh(:,:), hlw(:,:),
112 & zvfun(:), sigmaf(:),
118 & stress(:), spd1(:),
119 & prsi(:,:), del(:,:),
120 & prsl(:,:), prslk(:,:),
121 & phii(:,:), phil(:,:)
122 real(kind=kind_phys),
intent(inout),
dimension(:,:,:),
optional ::
124 integer,
intent(in) :: dtidx(:,:), index_of_temperature,
125 & index_of_x_wind, index_of_y_wind, index_of_process_pbl
126 logical,
intent(in) :: use_oceanuv
127 real(kind=kind_phys),
intent(out) ::
128 & dusfc(:), dvsfc(:),
129 & dtsfc(:), dqsfc(:),
131 real(kind=kind_phys),
intent(out) ::
135 logical,
intent(in) :: sa3dtke
138 logical,
intent(in) :: dspheat
140 logical,
intent(in) :: tte_edmf
142 character(len=*),
intent(out) :: errmsg
143 integer,
intent(out) :: errflg
146 real(kind=kind_phys),
intent(out) ::
147 & dku3d_h(:,:),dku3d_e(:,:)
153 real(kind=kind_phys) spd1_m
155 integer i,is,k,n,ndt,km1,kmpbl,kmscu,ntrac1,idtend
157 integer lcld(im),kcld(im),krad(im),mrad(im)
158 integer kx1(im), kb1(im), kpblx(im)
160 real(kind=kind_phys) te(im,km), tei(im,km-1), tke(im,km),
161 & tteh(im,km), tesq(im,km-1),e2(im,0:km)
163 real(kind=kind_phys) theta(im,km),thvx(im,km), thlvx(im,km),
164 & qlx(im,km), thetae(im,km),thlx(im,km),
165 & slx(im,km), svx(im,km), qtx(im,km),
166 & tvx(im,km), pix(im,km), radx(im,km-1),
169 real(kind=kind_phys) plyr(im,km), rhly(im,km), cfly(im,km),
172 real(kind=kind_phys) dtdz1(im), gdx(im),
173 & phih(im), phim(im), phihs(im),
174 & phims(im), prn(im,km-1),
175 & rbdn(im), rbup(im), thermal(im),
176 & ustar(im), wstar(im), hpblx(im),
177 & ust3(im), wst3(im), rho_a(im),
178 & z0(im), crb(im), tkemean(im),
179 & hgamt(im), hgamq(im),
180 & wscale(im),vpert(im), thvs(im),
181 & zol(im), sflux(im), ris(im),
182 & sumx(im), tx1(im), tx2(im)
184 real(kind=kind_phys) radmin(im)
186 real(kind=kind_phys) zi(im,km+1), zl(im,km), zm(im,km),
187 & xkzo(im,km-1),xkzmo(im,km-1),
188 & xkzm_hx(im), xkzm_mx(im), tkmnz(im,km-1),
189 & rdzt(im,km-1),rlmnz(im,km),
190 & al(im,km-1), ad(im,km), au(im,km-1),
191 & f1(im,km), f2(im,km*(ntrac-1))
193 real(kind=kind_phys) elm(im,km), ele(im,km),
194 & ckz(im,km), chz(im,km),
195 & diss(im,km-1),prod(im,km-1),
196 & bf(im,km-1), shr2(im,km-1), wush(im,km),
197 & xlamue(im,km-1), xlamde(im,km-1),
198 & gotvx(im,km), rlam(im,km-1)
202 real(kind=kind_phys) tcko(im,km), qcko(im,km,ntrac),
203 & ucko(im,km), vcko(im,km),
204 & buou(im,km), xmf(im,km)
208 real(kind=kind_phys) tcdo(im,km), qcdo(im,km,ntrac),
209 & ucdo(im,km), vcdo(im,km),
210 & buod(im,km), xmfd(im,km)
214 real(kind=kind_phys) e_half(im,km-1), e_diff(im,0:km-1),
215 & q_half(im,km-1,ntrac-1),
216 & qh(im,km-1,ntrac-1),
217 & q_diff(im,0:km-1,ntrac-1)
218 real(kind=kind_phys) rrkp, phkp
219 real(kind=kind_phys) tsumn(im), tsump(im), rtnp(im)
220 real(kind=kind_phys) sfcpbl(im), vez0fun(im)
222 logical pblflg(im), sfcflg(im), flg(im)
223 logical scuflg(im), pcnvflg(im)
228 real(kind=kind_phys) aphi16, aphi5,
230 & gamcrt, gamcrq, sfcfrac,
232 & dsdz2, dsdzt, dkmax,
234 & dtodsu, g, factor, dz,
235 & gocp, gravi, zol1, zolcru,
237 & prnum, prmax, prmin, prtke,
240 & elmfac, elefac, dspmax,
242 & f0, robn, crbmin, crbmax,
243 & es, qs,
value, onemrh,
244 & cfh, gamma, elocp, el2orc,
245 & epsi, beta, chx, cqx,
246 & rdt, rdz, qmin, qlmin,
247 & rimin, rbcr, rbint, tdzmin,
248 & rlmn, rlmn0, rlmn1, rlmn2,
249 & ttend, utend, vtend, qtend,
250 & zfac, zfmin, vk, spdk2,
251 & tkmin, tkbmx, disste, xkgdx,
253 & zlup, zldn, cs0, csmf,
254 & tem, tem1, tem2, tem3,
255 & ptem, ptem0, ptem1, ptem2
259 real(kind=kind_phys) thetal(im,km),dku_les(im,km),dkt_les(im,km),
260 & elmh(im,km),ele_les(im,km),pftke(im),
261 & dkq_les(im,km),pfl(im),pfdx(im),
262 & dku_h(im,km),dkq_h(im,km),
263 & elmhfac,elmhmx,ckh,elm_les,
264 & cpl1,cpl2,cpl3,cpl4,cpl5,cpl6,
265 & cptke1,cptke2,cptke3
267 real(kind=kind_phys) tkemax(im),scl(im)
268 real(kind=kind_phys) sclmax,sclmin,dkmaxles
271 real(kind=kind_phys) slfac
273 real(kind=kind_phys) vegflo, vegfup, z0lo, z0up, vc0, zc0
275 real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck
278 real(kind=kind_phys) epotte
280 real(kind=kind_phys) qlcr, zstblmax, hcrinv
282 real(kind=kind_phys) h1
284 real(kind=kind_phys) bfac, mffac
286 real(kind=kind_phys) qice(im,km),qliq(im,km)
301 parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1)
302 parameter(vk=0.4,rimin=-100.,slfac=0.1)
303 parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3)
304 parameter(rlmn=30.,rlmn0=5.,rlmn1=5.,rlmn2=10.)
305 parameter(prmin=0.25)
306 parameter(pr0=1.0,prtke=1.0)
307 parameter(f0=1.e-4,crbmin=0.15,crbmax=0.35)
308 parameter(tkmin=1.e-9,tkbmx=0.2,dspmax=10.0)
309 parameter(qmin=1.e-8,qlmin=1.e-12,zfmin=1.e-8)
310 parameter(aphi5=5.,aphi16=16.)
311 parameter(elmfac=1.0,elefac=1.0,cql=100.)
312 parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=1000.)
313 parameter(qlcr=3.5e-5,zstblmax=2500.)
314 parameter(xkinv1=0.15,xkinv2=0.3)
315 parameter(h1=0.33333333,hcrinv=250.)
316 parameter(vegflo=0.1,vegfup=1.0,z0lo=0.1,z0up=1.0)
317 parameter(vc0=1.0,zc0=1.0)
318 parameter(cs0=0.4,csmf=0.5)
319 parameter(rchck=1.5,ndt=20)
321 parameter(cpl1=0.280,cpl2=0.870,cpl3=0.913)
322 parameter(cpl4=0.153,cpl5=0.278,cpl6=0.720)
323 parameter(cptke1=0.07,cptke2=0.142,cptke3=0.071)
324 parameter(dkmaxles=300.0,sclmin=500.,sclmax=2500.)
325 parameter(elmhfac=1.5,elmhmx=1000.,ckh=0.4)
333 if (tc_pbl == 0)
then
337 else if (tc_pbl == 1)
then
365 el2orc = hvap * hvap / (rv * cp)
387 zi(i,k) = phii(i,k) * gravi
388 zl(i,k) = phil(i,k) * gravi
400 zi(i,km+1) = phii(i,km+1) * gravi
409 gdx(i) = sqrt(garea(i))
415 te(i,k) = max(q1(i,k,ntke), tkmin)
423 tteh(i,k) = 0.5 * (te(i,k) + te(i,k+1))
434 tkeh(i,k) = 0.5 * (tke(i,k) + tke(i,k+1))
441 rdzt(i,k) = 1.0 / (zl(i,k+1) - zl(i,k))
459 tx1(i) = 1.0 / prsi(i,1)
461 if(gdx(i) >= xkgdx)
then
466 xkzm_hx(i) = xkzm_h * tem
467 xkzm_mx(i) = xkzm_m * tem
474 if (k < kinver(i))
then
476 ptem = prsi(i,k+1) * tx1(i)
478 tem2 = tem1 * tem1 * 2.5
479 tem2 = min(1.0, exp(-tem2))
480 rlmnz(i,k)= rlmn * tem2
481 rlmnz(i,k)= max(rlmnz(i,k), rlmn0)
483 tem2 = tem1 * tem1 * 10.0
484 tem2 = min(1.0, exp(-tem2))
485 xkzo(i,k) = xkzm_hx(i) * tem2
488 if (ptem >= xkzm_s)
then
489 xkzmo(i,k) = xkzm_mx(i)
492 if (k == kx1(i) .and. k > 1) tx2(i) = 1.0 / prsi(i,k)
493 tem1 = 1.0 - prsi(i,k+1) * tx2(i)
494 tem1 = tem1 * tem1 * 5.0
495 xkzmo(i,k) = xkzm_mx(i) * min(1.0, exp(-tem1))
503 z0(i) = 0.01 * zorl(i)
504 rho_a(i) = prsl(i,1)/(rd*t1(i,1)*(1.+fv*max(q1(i,1,1),qmin)))
517 if(rbsoil(i) > 0.) sfcflg(i) = .false.
534 tem = (sigmaf(i) - vegflo) / (vegfup - vegflo)
535 tem = min(max(tem, 0.), 1.)
537 ptem = (z0(i) - z0lo) / (z0up - z0lo)
538 ptem = min(max(ptem, 0.), 1.)
539 vez0fun(i) = (1. + vc0 * tem1) * (1. + zc0 * ptem)
546 pix(i,k) = psk(i) / prslk(i,k)
547 theta(i,k) = t1(i,k) * pix(i,k)
551 tem = max(q1(i,k,ntcw),qlmin)
554 tem1=max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
557 tem1=max(q1(i,k,ntiw),qlmin)
560 qlx(i,k) = tem + tem1
561 ptem = hvap*tem + (hvap+hfus)*tem1
562 slx(i,k) = cp * t1(i,k) + phil(i,k) - ptem
564 qlx(i,k) = max(q1(i,k,ntcw),qlmin)
565 slx(i,k) = cp * t1(i,k) + phil(i,k) - hvap*qlx(i,k)
568 tem2 = 1.+fv*max(q1(i,k,1),qmin)-qlx(i,k)
569 thvx(i,k) = theta(i,k) * tem2
570 tvx(i,k) = t1(i,k) * tem2
571 qtx(i,k) = max(q1(i,k,1),qmin)+qlx(i,k)
572 thlx(i,k) = theta(i,k) - pix(i,k)*elocp*qlx(i,k)
573 thlvx(i,k) = thlx(i,k) * (1. + fv * qtx(i,k))
574 svx(i,k) = cp * tvx(i,k)
575 ptem1 = elocp * pix(i,k) * max(q1(i,k,1),qmin)
576 thetae(i,k)= theta(i,k) + ptem1
578 gotvx(i,k) = g / thvx(i,k)
586 plyr(i,k) = 0.01 * prsl(i,k)
588 es = 0.01 * fpvs(t1(i,k))
589 qs = max(qmin, eps * es / (plyr(i,k) + epsm1*es))
590 rhly(i,k) = max(0.0, min(1.0, max(qmin, q1(i,k,1))/qs))
598 clwt = 1.0e-6 * (plyr(i,k)*0.001)
599 if (qlx(i,k) > clwt)
then
600 onemrh = max(1.e-10, 1.0-rhly(i,k))
601 tem1 = min(max((onemrh*qstl(i,k))**0.49,0.0001),1.0)
603 value = max(min( tem1*qlx(i,k), 50.0), 0.0)
604 tem2 = sqrt(sqrt(rhly(i,k)))
605 cfly(i,k) = min(max(tem2*(1.0-exp(-
value)), 0.0), 1.0)
614 tem = 0.5 * (svx(i,k) + svx(i,k+1))
615 tem1 = 0.5 * (t1(i,k) + t1(i,k+1))
616 tem2 = 0.5 * (qstl(i,k) + qstl(i,k+1))
617 cfh = min(cfly(i,k+1),0.5*(cfly(i,k)+cfly(i,k+1)))
619 gamma = el2orc * tem2 / (tem1**2)
621 beta = (1. + gamma*epsi*(1.+fv)) / (1. + gamma)
622 chx = cfh * alp * beta + (1. - cfh) * alp
623 cqx = cfh * alp * hvap * (beta - epsi)
624 cqx = cqx + (1. - cfh) * fv * g
625 ptem1 = (slx(i,k+1)-slx(i,k))*rdzt(i,k)
626 ptem2 = (qtx(i,k+1)-qtx(i,k))*rdzt(i,k)
627 bf(i,k) = chx * ptem1 + cqx * ptem2
644 tem = zi(i,k+1)-zi(i,k)
645 radx(i,k) = tem*(swh(i,k)*xmu(i)+hlw(i,k))
652 sflux(i) = heat(i) + evap(i)*fv*theta(i,1)
653 if(.not.sfcflg(i) .or. sflux(i) <= 0.) pblflg(i)=.false.
674 thvs(i) = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
677 thermal(i) = thlvx(i,1)
681 tem = sqrt(u10m(i)**2+v10m(i)**2)
683 robn = tem / (f0 * z0(i))
685 crb(i) = 0.16 * (tem1 ** (-0.18))
686 crb(i) = max(min(crb(i), crbmax), crbmin)
691 dtdz1(i) = dt2 / (zi(i,2)-zi(i,1))
695 ustar(i) = sqrt(stress(i))
705 dw2 = (u1(i,k)-u1(i,k+1))**2
706 & + (v1(i,k)-v1(i,k+1))**2
707 shr2(i,k) = max(dw2,dw2min)*rdz*rdz
727 if (tc_pbl == 0)
then
728 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
731 rbup(i) = (thlvx(i,k)-thermal(i))*
732 & (g*zl(i,k)/thlvx(i,1))/spdk2
733 else if (tc_pbl == 1)
then
734 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
736 rbup(i) = (thlvx(i,k)-thermal(i))*
737 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
740 flg(i) = rbup(i) > crb(i)
748 if(kpblx(i) > 1)
then
750 if(rbdn(i) >= crb(i))
then
752 elseif(rbup(i) <= crb(i))
then
755 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
757 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
758 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
765 if(kpbl(i) <= 1) pblflg(i)=.false.
771 sfcpbl(i) = slfac * hpbl(i)
780 if (flg(i) .and. zl(i,k) <= sfcpbl(i))
then
788 if(pblflg(i)) kb1(i)=min(kb1(i),kpbl(i))
795 if(pblflg(i) .and. kb1(i) > 1)
then
799 thermal(i) = thlvx(i,kb1(i))
801 hpblx(i) = zl(i,kb1(i))
806 if(.not.flg(i) .and. k > kb1(i))
then
808 if (tc_pbl == 0)
then
809 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
812 rbup(i) = (thlvx(i,k)-thermal(i))*
813 & (g*zl(i,k)/thlvx(i,1))/spdk2
814 else if (tc_pbl == 1)
then
815 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
817 rbup(i) = (thlvx(i,k)-thermal(i))*
818 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
821 flg(i) = rbup(i) > crb(i)
826 if(pblflg(i) .and. kb1(i) > 1)
then
828 if(rbdn(i) >= crb(i))
then
830 elseif(rbup(i) <= crb(i))
then
833 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
835 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
836 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
842 if(.not.tte_edmf)
then
853 dz = zi(i,k+1) - zi(i,k)
854 tkemean(i) = tkemean(i) + tke(i,k) * dz
855 sumx(i) = sumx(i) + dz
860 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
861 tkemean(i) = tkemean(i) / sumx(i)
870 kps = max(kmpbl, kmscu)
873 dz = zi(i,k+1) - zi(i,k)
874 tem = (0.5*(u1(i,k-1)-u1(i,k+1))/dz)**2
875 tem1 = tem+(0.5*(v1(i,k-1)-v1(i,k+1))/dz)**2
876 wush(i,k) = csmf * sqrt(tem1)
890 zol(i) = max(rbsoil(i)*fm(i)*fm(i)/fh(i),rimin)
892 zol(i) = min(zol(i),-zfmin)
894 zol(i) = max(zol(i),zfmin)
907 zol1 = zol(i)*sfcfrac*hpbl(i)/zl(i,1)
909 tem = 1.0 / (1. - aphi16*zol1)
911 phim(i) = sqrt(phih(i))
912 tem1 = 1.0 / (1. - aphi16*zol(i))
913 phihs(i) = sqrt(tem1)
914 phims(i) = sqrt(phihs(i))
916 phim(i) = 1. + aphi5*zol1
918 phims(i) = 1. + aphi5*zol(i)
940 if(zol(i) < zolcru)
then
943 wst3(i) = gotvx(i,1)*sflux(i)*hpbl(i)
944 wstar(i)= wst3(i)**h1
945 ust3(i) = ustar(i)**3.
946 wscale(i)=(ust3(i)+wfac*vk*wst3(i)*sfcfrac)**h1
947 ptem = ustar(i)/aphi5
948 wscale(i) = max(wscale(i),ptem)
957 hgamt(i) = heat(i)/wscale(i)
958 hgamq(i) = evap(i)/wscale(i)
959 vpert(i) = hgamt(i) + hgamq(i)*fv*theta(i,1)
960 vpert(i) = max(vpert(i),0.)
961 tem = min(cfac*vpert(i),gamcrt)
962 thermal(i)= thermal(i) + tem
978 if(.not.flg(i) .and. k > kb1(i))
then
980 if (tc_pbl == 0)
then
981 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
982 rbup(i) = (thlvx(i,k)-thermal(i))*
983 & (g*zl(i,k)/thlvx(i,1))/spdk2
984 else if (tc_pbl == 1)
then
985 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
987 rbup(i) = (thlvx(i,k)-thermal(i))*
988 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
991 flg(i) = rbup(i) > crb(i)
998 if(rbdn(i) >= crb(i))
then
1000 elseif(rbup(i) <= crb(i))
then
1003 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
1005 hpbl(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
1006 if(hpbl(i) < zi(i,kpbl(i)))
then
1007 kpbl(i) = kpbl(i) - 1
1009 if(kpbl(i) <= 1)
then
1010 pcnvflg(i) = .false.
1023 tem = phims(i) * phims(i)
1024 ris(i) = zol(i) * phihs(i) / tem
1025 ris(i) = max(ris(i), rimin)
1029 ptem = sfcfrac*hpbl(i)
1030 if (zl(i,k) <= ptem)
then
1034 tem = gotvx(i,1) * (thlvx(i,1)-thvs(i))
1035 tem1 = tem / zl(i,1)
1036 tem1 = 0.5 * (tem1 + bf(i,1))
1037 ptem = max((u1(i,1)**2+v1(i,1)**2), 1.)
1038 ptem1 = ptem / (zl(i,1) * zl(i,1))
1039 ptem1 = 0.5 * (ptem1 + shr2(i,1))
1040 ri = max(tem1/ptem1, rimin)
1042 tem1 = 0.5 * (bf(i,k-1) + bf(i,k))
1043 ptem1 = 0.5 * (shr2(i,k-1) + shr2(i,k))
1044 ri = max(tem1/ptem1, rimin)
1054 tke(i,k) = te(i,k) * (1. - epotte)
1058 tke(i,km) = tke(i,km1)
1069 if(k < kpbl(i))
then
1070 dz = zi(i,k+1) - zi(i,k)
1071 tkemean(i) = tkemean(i) + tke(i,k) * dz
1072 sumx(i) = sumx(i) + dz
1077 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
1078 tkemean(i) = tkemean(i) / sumx(i)
1095 if(flg(i).and.zl(i,k) >= zstblmax)
then
1106 if(flg(i) .and. k <= lcld(i))
then
1107 if(qlx(i,k) >= qlcr)
then
1115 if(scuflg(i) .and. kcld(i)==km1) scuflg(i)=.false.
1127 if(flg(i) .and. k <= kcld(i))
then
1128 if(qlx(i,k) >= qlcr)
then
1129 if(radx(i,k) < radmin(i))
then
1140 if(scuflg(i) .and. krad(i) <= 1) scuflg(i)=.false.
1141 if(scuflg(i) .and. radmin(i)>=0.) scuflg(i)=.false.
1167 qcko(i,k,n) = q1(i,k,n)
1170 qcdo(i,k,n) = q1(i,k,n)
1177 call mfpbltq(im,im,km,kmpbl,ntcw,ntrac1,dt2,
1178 & pcnvflg,zl,zm,q1,t1,u1,v1,plyr,pix,thlx,thvx,
1179 & gdx,hpbl,kpbl,vpert,buou,wush,tkemean,vez0fun,xmf,
1180 & tcko,qcko,ucko,vcko,xlamue,bl_upfr)
1183 call mfscuq(im,im,km,kmscu,ntcw,ntrac1,dt2,
1184 & scuflg,zl,zm,q1,t1,u1,v1,plyr,pix,
1185 & thlx,thvx,thlvx,gdx,thetae,
1186 & krad,mrad,radmin,buod,wush,tkemean,vez0fun,xmfd,
1187 & tcdo,qcdo,ucdo,vcdo,xlamde,bl_dnfr)
1189 if (tc_pbl == 1)
then
1192 if(zol(i) > -0.5)
then
1200 tem = sqrt(u10m(i)**2+v10m(i)**2)
1201 mffac = (1. - min(max(tem - 20.0, 0.0), 10.0)/10.)
1203 xmf(i,k) = xmf(i,k)*mffac
1204 xmfd(i,k) = xmfd(i,k)*mffac
1214 if(k < kpbl(i))
then
1215 tem = phih(i)/phim(i)
1216 ptem = sfcfrac*hpbl(i)
1217 tem1 = max(zi(i,k+1)-ptem, 0.)
1218 tem2 = tem1 / (hpbl(i) - ptem)
1221 prn(i,k) = tem + (pr0 - tem) * tem2
1226 prn(i,k) = min(prn(i,k),prmax)
1227 prn(i,k) = max(prn(i,k),prmin)
1229 ckz(i,k) = ck0 + (ck1 - ck0) * tem2
1230 ckz(i,k) = max(min(ckz(i,k), ck0), ck1)
1231 chz(i,k) = ch0 + (ch1 - ch0) * tem2
1232 chz(i,k) = max(min(chz(i,k), ch0), ch1)
1250 if(zi(i,k+1) > hcrinv)
then
1251 tem1 = tvx(i,k+1)-tvx(i,k)
1253 xkzo(i,k) = min(xkzo(i,k), xkinv1)
1254 xkzmo(i,k) = min(xkzmo(i,k), xkinv1)
1255 rlmnz(i,k) = min(rlmnz(i,k), rlmn1)
1258 tem1 = tvx(i,k+1)-tvx(i,k)
1260 ptem = xkzo(i,k) * zvfun(i)
1261 xkzo(i,k) = min(max(ptem, xkinv2), xkzo(i,k))
1262 ptem = xkzmo(i,k) * zvfun(i)
1263 xkzmo(i,k) = min(max(ptem, xkinv2), xkzmo(i,k))
1264 ptem = rlmnz(i,k) * zvfun(i)
1265 rlmnz(i,k) = min(max(ptem, rlmn2), rlmnz(i,k))
1272 rlmnz(i,k) = 0.5 * (rlmnz(i,k-1) + rlmnz(i,k))
1283 e2(i,k) = max(2.*tke(i,k), 0.001)
1286 dz = zl(i,n+1) - zl(i,n)
1287 tem1 = 2.*gotvx(i,n+1)*(thvx(i,k)-thvx(i,n+1))
1288 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n))
1289 e2(i,n+1) = e2(i,n) + (tem1 - tem2) * dz
1291 if(e2(i,n+1) < 0.)
then
1292 ptem = e2(i,n+1) / (e2(i,n+1) - e2(i,n))
1293 zlup = zlup - ptem * dz
1294 zlup = max(zlup, 0.)
1305 tem = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
1306 tem1 = 2.*gotvx(i,n)*(tem-thvx(i,k))
1307 tem2 = ustar(i)*phims(i)/(vk*dz)
1308 tem2 = cs0*sqrt(e2(i,n))*tem2
1309 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1311 dz = zl(i,n) - zl(i,n-1)
1312 tem1 = 2.*gotvx(i,n-1)*(thvx(i,n-1)-thvx(i,k))
1313 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n-1))
1314 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1317 if(e2(i,n-1) < 0.)
then
1318 ptem = e2(i,n-1) / (e2(i,n-1) - e2(i,n))
1319 zldn = zldn - ptem * dz
1320 zldn = max(zldn, 0.)
1326 tem = 0.5 * (zi(i,k+1)-zi(i,k))
1327 tem1 = min(tem, rlmnz(i,k))
1344 ptem2 = min(zlup,zldn)
1345 rlam(i,k) = elmfac * ptem2
1346 rlam(i,k) = max(rlam(i,k), tem1)
1347 rlam(i,k) = min(rlam(i,k), rlmx)
1349 ptem2 = sqrt(zlup*zldn)
1350 ele(i,k) = elefac * ptem2
1351 ele(i,k) = max(ele(i,k), tem1)
1352 elmh(i,k)= elmhfac * ele(i,k)
1353 ele(i,k) = min(ele(i,k), elmx)
1354 elmh(i,k)= min(elmh(i,k), elmhmx)
1363 if (zol(i) < 0.)
then
1364 ptem = 1. - 100. * zol(i)
1367 elseif (zol(i) >= 1.)
then
1370 ptem = 1. + 2.7 * zol(i)
1374 if (tc_pbl == 0)
then
1375 elm(i,k) = zk*rlam(i,k)/(rlam(i,k)+zk)
1377 if ( sfc_rlm == 1 )
then
1378 if ( sfcflg(i) .and.
1379 & zl(i,k) < min(100.0,hpbl(i)*0.05) ) elm(i,k)=zk
1381 else if (tc_pbl == 1)
then
1383 elm(i,k) = sqrt( 1.0/( 1.0/(zk**2)+1.0/(rlam(i,k)**2) ) )
1387 if(k == 1) elm(i,k)=zk
1389 dz = zi(i,k+1) - zi(i,k)
1390 tem = max(gdx(i),dz)
1391 elm(i,k) = min(elm(i,k), tem)
1393 if (tc_pbl == 0)
then
1394 ele(i,k) = min(ele(i,k), tem)
1395 else if (tc_pbl == 1)
then
1402 elm(i,km) = elm(i,km1)
1403 ele(i,km) = ele(i,km1)
1404 elmh(i,km)= elmh(i,km1)
1415 ptem = sfcfrac*hpbl(i)
1416 if (zi(i,k+1) <= ptem)
then
1419 ri = max(bf(i,k)/shr2(i,k),rimin)
1428 tkeh(i,k) = tteh(i,k) * (1. - epotte)
1429 tesq(i,k) = tkeh(i,k) / sqrt(tteh(i,k))
1437 tesq(i,k) = sqrt(tkeh(i,k))
1445 tem = 0.5 * (elm(i,k) + elm(i,k+1))
1446 tem = tem * tesq(i,k)
1447 ri = max(bf(i,k)/shr2(i,k),rimin)
1448 if(k < kpbl(i))
then
1450 dku(i,k) = ckz(i,k) * tem
1451 dkt(i,k) = dku(i,k) / prn(i,k)
1454 dku(i,k) = ckz(i,k) * tem
1455 dkt(i,k) = dku(i,k) / prn(i,k)
1457 dkt(i,k) = chz(i,k) * tem
1458 dku(i,k) = dkt(i,k) * prn(i,k)
1463 dku(i,k) = ck1 * tem
1464 dkt(i,k) = rchck * dku(i,k)
1466 dkt(i,k) = ch1 * tem
1467 prnum = pr0 + 2.1 * ri
1468 prnum = min(prnum,prmax)
1469 dku(i,k) = dkt(i,k) * prnum
1474 if(k >= mrad(i) .and. k < krad(i))
then
1478 tem1 = ckz(i,k) * tem
1480 ptem1 = tem1 / prscu
1481 dku(i,k) = max(dku(i,k), tem1)
1482 dkt(i,k) = max(dkt(i,k), ptem1)
1486 dkq(i,k) = prtke * dkt(i,k)
1488 dkt(i,k) = min(dkt(i,k),dkmax)
1489 dkt(i,k) = max(dkt(i,k),xkzo(i,k))
1490 dkq(i,k) = min(dkq(i,k),dkmax)
1491 dkq(i,k) = max(dkq(i,k),xkzo(i,k))
1492 dku(i,k) = min(dku(i,k),dkmax)
1493 dku(i,k) = max(dku(i,k),xkzmo(i,k))
1504 pix(i,k) = psk(i) / prslk(i,k)
1505 theta(i,k) = t1(i,k) * pix(i,k)
1506 tem=theta(i,k)/t1(i,k)
1508 tem1=max(q1(i,k,ntcw),qlmin)+
1509 & max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
1510 thetal(i,k)=theta(i,k)-(hvap+hfus)/cp*tem*tem1
1512 tem1=max(q1(i,k,ntcw),qlmin)
1513 thetal(i,k)=theta(i,k)-hvap/cp*tem*tem1
1530 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k))*rdzt(i,k)
1531 dz = zl(i,k+1) - zl(i,k)
1532 tem1=(garea(i)*dz)**h1
1535 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1536 elm_les=min(elm_les,tem1)
1541 dku_les(i,k)=0.1*elm_les*sqrt(tkeh(i,k))
1542 dkt_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1543 dkq_les(i,k)=dkt_les(i,k)
1544 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1545 dkt_les(i,k) = min(dkt_les(i,k),dkmaxles)
1546 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1553 tkemax(i) = tke(i,1)
1558 if(tke(i,k) > tkemax(i))
then
1559 tkemax(i) = tke(i,k)
1567 if(zl(i,ktkemax(i)) > sclmax)
then
1574 if(flg(i) .and. k > ktkemax(i))
then
1577 if(tke(i,k) < tem) flg(i) = .false.
1582 scl(i)=max(scl(i), sclmin)
1583 scl(i)=min(scl(i), sclmax)
1584 scl(i)=max(scl(i), hpbl(i))
1585 pfdx(i)=gdx(i)/scl(i)
1590 pfl(i)=cpl1*(pfdx(i)**2+cpl2*pfdx(i)**0.5-cpl3)/
1591 & (pfdx(i)**2+cpl4*pfdx(i)**0.5+cpl5)+cpl6
1592 pfl(i)=min(max(pfl(i),0.0),1.0)
1594 pftke(i)=(pfdx(i)**2+cptke1*pfdx(i)**(2./3.))/
1595 & (pfdx(i)**2+cptke2*pfdx(i)**(2./3.)+cptke3)
1596 pftke(i)=min(max(pftke(i),0.0),1.0)
1603 dkq(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq(i,k)
1604 dkt(i,k)=(1.0-pfl(i))*dkt_les(i,k)+pfl(i)*dkt(i,k)
1605 dku(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku(i,k)
1613 dku_h(i,k)=ckh*elmh(i,k)*sqrt(tke(i,k))
1614 dkq_h(i,k)=dku_h(i,k)
1623 dz = zl(i,k+1) - zl(i,k-1)
1624 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k-1))/dz
1627 tem=gotvx(i,k)*(thetal(i,k+1)-thvs(i))/dz
1629 dz = zi(i,k+1) - zi(i,k)
1630 tem1=(garea(i)*dz)**h1
1633 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1634 elm_les=min(elm_les,tem1)
1638 ele_les(i,k)=elm_les
1640 dku_les(i,k)=0.1*elm_les*sqrt(tke(i,k))
1641 dkq_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1642 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1643 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1649 dku_h(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku_h(i,k)
1650 dkq_h(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq_h(i,k)
1654 dku_h(i,km)=dku_h(i,km1)
1655 dkq_h(i,km)=dkq_h(i,km1)
1662 if (do_canopy .and. cplaqm)
then
1670 if (
present(dku_can)) dku(:,1:km) = dku_can(:,1:km)
1671 if (
present(dkt_can))
then
1672 dkt(:,1:km) = dkt_can(:,1:km)
1673 dkq(:,1:km-1) = prtke * dkt_can(:,1:km-1)
1685 tem1 = 0.5 * xkzmo(i,1)
1687 tem = 0.5 * (ckz(i,k-1) + ckz(i,k))
1688 tem1 = 0.5 * (xkzmo(i,k-1) + xkzmo(i,k))
1690 ptem = tem1 / (tem * elm(i,k))
1691 tkmnz(i,k) = ptem * ptem
1692 tkmnz(i,k) = min(tkmnz(i,k), tkbmx)
1693 tkmnz(i,k) = max(tkmnz(i,k), tkmin)
1704 tem = -dkt(i,1) * bf(i,1)
1710 if(scuflg(i) .and. mrad(i) == 1)
then
1711 ptem2 = xmfd(i,1) * buod(i,1)
1715 tem = tem + ptem1 + ptem2
1716 buop = 0.5 * (gotvx(i,1) * sflux(i) + tem)
1719 tem = 2. * dku_h(i,1)
1720 tem1 = dku(i,1)*def_1(i,1)+tem*def_2(i,1)
1722 tem1 = dku(i,1) * shr2(i,1)
1725 tem = (u1(i,2)-u1(i,1))*rdzt(i,1)
1732 if(scuflg(i) .and. mrad(i) == 1)
then
1733 ptem = ucdo(i,1)+ucdo(i,2)-u1(i,1)-u1(i,2)
1734 ptem = 0.5 * tem * xmfd(i,1) * ptem
1738 ptem1 = ptem1 + ptem
1740 tem = (v1(i,2)-v1(i,1))*rdzt(i,1)
1747 if(scuflg(i) .and. mrad(i) == 1)
then
1748 ptem = vcdo(i,1)+vcdo(i,2)-v1(i,1)-v1(i,2)
1749 ptem = 0.5 * tem * xmfd(i,1) * ptem
1753 ptem2 = ptem2 + ptem
1755 tem2 = stress(i)*ustar(i)*phims(i)/(vk*zl(i,1))
1756 shrp = 0.5 * (tem1 + ptem1 + ptem2 + tem2)
1758 tem1 = -dkt(i,k-1) * bf(i,k-1)
1759 tem2 = -dkt(i,k) * bf(i,k)
1760 tem = 0.5 * (tem1 + tem2)
1761 if(pcnvflg(i) .and. k <= kpbl(i))
then
1762 ptem = 0.5 * (xmf(i,k-1) + xmf(i,k))
1763 ptem1 = ptem * buou(i,k)
1768 if(k >= mrad(i) .and. k < krad(i))
then
1769 ptem0 = 0.5 * (xmfd(i,k-1) + xmfd(i,k))
1770 ptem2 = ptem0 * buod(i,k)
1777 buop = tem + ptem1 + ptem2
1781 tem2 = 2.*dku_h(i,k)
1782 tem1 = dku(i,k-1)*def_1(i,k-1)
1783 tem2 = dku(i,k)*def_1(i,k)+tem2*def_2(i,k)
1785 tem1 = dku(i,k-1) * shr2(i,k-1)
1786 tem2 = dku(i,k) * shr2(i,k)
1788 tem = 0.5 * (tem1 + tem2)
1789 tem1 = (u1(i,k+1)-u1(i,k))*rdzt(i,k)
1790 tem2 = (u1(i,k)-u1(i,k-1))*rdzt(i,k-1)
1791 if(pcnvflg(i) .and. k <= kpbl(i))
then
1792 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
1793 ptem1 = 0.5 * ptem * (u1(i,k)-ucko(i,k))
1798 if(k >= mrad(i) .and. k < krad(i))
then
1799 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
1800 ptem2 = 0.5 * ptem0 * (ucdo(i,k)-u1(i,k))
1807 shrp = tem + ptem1 + ptem2
1808 tem1 = (v1(i,k+1)-v1(i,k))*rdzt(i,k)
1809 tem2 = (v1(i,k)-v1(i,k-1))*rdzt(i,k-1)
1810 if(pcnvflg(i) .and. k <= kpbl(i))
then
1811 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
1812 ptem1 = 0.5 * ptem * (v1(i,k)-vcko(i,k))
1817 if(k >= mrad(i) .and. k < krad(i))
then
1818 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
1819 ptem2 = 0.5 * ptem0 * (vcdo(i,k)-v1(i,k))
1826 shrp = shrp + ptem1 + ptem2
1830 prod(i,k) = 2. * buop + shrp
1835 prod(i,k) = buop + shrp
1845 dtn = dt2 / float(ndt)
1851 ptem1 = ce0 / ele(i,k)
1852 dz = zi(i,k+1) - zi(i,k)
1853 tem1=(garea(i)*dz)**h1
1854 tem2=0.19+0.51*ele_les(i,k)/tem1
1855 ptem2= tem2 / ele_les(i,k)
1856 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
1857 disste = ptem * te(i,k) * tem
1858 tem1 = prod(i,k) + te(i,k) / dtn
1859 disste=max(min(disste, tem1), 0.)
1860 if(.not. tte_edmf) diss(i,k) = disste
1864 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste+tem)
1866 te(i,k) = max(te(i,k), tkmnz(i,k))
1871 dtn = dt2 / float(ndt)
1876 ptem = ce0 / ele(i,k)
1877 disste = ptem * te(i,k) * tem
1878 tem1 = prod(i,k) + te(i,k) / dtn
1879 disste = max(min(disste, tem1), 0.)
1880 if(.not. tte_edmf) diss(i,k) = disste
1881 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste)
1882 te(i,k) = max(te(i,k), tkmnz(i,k))
1894 tem = sqrt(tke(i,k))
1896 ptem1 = ce0 / ele(i,k)
1897 dz = zi(i,k+1) - zi(i,k)
1898 tem1=(garea(i)*dz)**h1
1899 tem2=0.19+0.51*ele_les(i,k)/tem1
1900 ptem2= tem2 / ele_les(i,k)
1901 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
1902 diss(i,k) = ptem * tke(i,k) * tem
1904 ptem = ce0 / ele(i,k)
1905 diss(i,k) = ptem * tke(i,k) * tem
1916 qcko(i,k,ntke) = te(i,k)
1919 qcdo(i,k,ntke) = te(i,k)
1925 if (pcnvflg(i) .and. k <= kpbl(i))
then
1926 dz = zl(i,k) - zl(i,k-1)
1927 tem = 0.5 * xlamue(i,k-1) * dz
1929 qcko(i,k,ntke)=((1.-tem)*qcko(i,k-1,ntke)+tem*
1930 & (te(i,k)+te(i,k-1)))/factor
1936 if (scuflg(i) .and. k < krad(i))
then
1937 if(k >= mrad(i))
then
1938 dz = zl(i,k+1) - zl(i,k)
1939 tem = 0.5 * xlamde(i,k) * dz
1941 qcdo(i,k,ntke)=((1.-tem)*qcdo(i,k+1,ntke)+tem*
1942 & (te(i,k)+te(i,k+1)))/factor
1952 kps = max(kmpbl, kmscu)
1959 qh(i,k,n) = 0.5 * (q1(i,k,n)+q1(i,k+1,n))
1964 q_diff(i,k,n) = q1(i,k,n) - q1(i,k+1,n)
1968 if(q1(i,1,n) >= 0.)
then
1969 q_diff(i,0,n) = max(0.,2.*q1(i,1,n)-q1(i,2,n))-
1972 q_diff(i,0,n) = min(0.,2.*q1(i,1,n)-q1(i,2,n))-
1982 kmx = max(kpbl(i), krad(i))
1983 q_half(i,k,n) = qh(i,k,n)
1984 if((pcnvflg(i) .or. scuflg(i)) .and. k < kmx)
then
1986 if(pcnvflg(i) .and. k < kpbl(i))
then
1990 & (k >= mrad(i) .and. k < krad(i)))
then
1991 tem = tem - xmfd(i,k)
1995 if(abs(q_diff(i,k,n)) > 1.e-22)
1996 & rrkp = q_diff(i,k+1,n) / q_diff(i,k,n)
1997 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
1998 q_half(i,k,n) = q1(i,k+1,n) +
1999 & phkp*(qh(i,k,n)-q1(i,k+1,n))
2000 elseif (tem < 0.)
then
2002 if(abs(q_diff(i,k,n)) > 1.e-22)
2003 & rrkp = q_diff(i,k-1,n) / q_diff(i,k,n)
2004 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2005 q_half(i,k,n) = q1(i,k,n) +
2006 & phkp*(qh(i,k,n)-q1(i,k,n))
2018 tei(i,k) = 0.5 * (te(i,k)+te(i,k+1))
2024 e_diff(i,k) = te(i,k) - te(i,k+1)
2028 if(te(i,1) >= 0.)
then
2029 e_diff(i,0) = max(0.,2.*te(i,1)-te(i,2))-
2032 e_diff(i,0) = min(0.,2.*te(i,1)-te(i,2))-
2039 kmx = max(kpbl(i), krad(i))
2040 e_half(i,k) = tei(i,k)
2041 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2043 if(pcnvflg(i) .and. k < kpbl(i))
then
2047 & (k >= mrad(i) .and. k < krad(i)))
then
2048 tem = tem - xmfd(i,k)
2052 if(abs(e_diff(i,k)) > 1.e-22)
2053 & rrkp = e_diff(i,k+1) / e_diff(i,k)
2054 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2055 e_half(i,k) = te(i,k+1) +
2056 & phkp*(tei(i,k)-te(i,k+1))
2057 elseif (tem < 0.)
then
2059 if(abs(e_diff(i,k)) > 1.e-22)
2060 & rrkp = e_diff(i,k-1) / e_diff(i,k)
2061 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2062 e_half(i,k) = te(i,k) +
2063 & phkp*(tei(i,k)-te(i,k))
2079 dtodsd = dt2/del(i,k)
2080 dtodsu = dt2/del(i,k+1)
2081 dsig = prsl(i,k)-prsl(i,k+1)
2083 tem1 = dsig * dkq(i,k) * rdz
2085 au(i,k) = -dtodsd*dsdz2
2086 al(i,k) = -dtodsu*dsdz2
2087 ad(i,k) = ad(i,k)-au(i,k)
2088 ad(i,k+1)= 1.-al(i,k)
2091 if(pcnvflg(i) .and. k < kpbl(i))
then
2092 ptem = 0.5 * tem2 * xmf(i,k)
2093 ptem1 = dtodsd * ptem
2094 ptem2 = dtodsu * ptem
2095 ptem = qcko(i,k,ntke) + qcko(i,k+1,ntke)
2096 f1(i,k) = f1(i,k) - ptem * ptem1
2097 f1(i,k+1) = te(i,k+1) + ptem * ptem2
2099 f1(i,k+1) = te(i,k+1)
2103 if(k >= mrad(i) .and. k < krad(i))
then
2104 ptem = 0.5 * tem2 * xmfd(i,k)
2105 ptem1 = dtodsd * ptem
2106 ptem2 = dtodsu * ptem
2107 ptem = qcdo(i,k,ntke) + qcdo(i,k+1,ntke)
2108 f1(i,k) = f1(i,k) + ptem * ptem1
2109 f1(i,k+1) = f1(i,k+1) - ptem * ptem2
2113 kmx = max(kpbl(i), krad(i))
2114 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2115 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2116 ptem1 = dtodsd * ptem
2117 ptem2 = dtodsu * ptem
2118 f1(i,k) = f1(i,k) + e_half(i,k) * ptem1
2119 f1(i,k+1) = f1(i,k+1) - e_half(i,k) * ptem2
2127 call tridit(im,km,1,al,ad,au,f1,au,f1)
2139 if(pcnvflg(i) .and. scuflg(i))
then
2141 kmx = max(kpbl(i), krad(i))
2142 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2145 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2149 if((pcnvflg(i) .or. scuflg(i)) .and.
2150 & (k >= kbx .and. k <= kmx))
then
2151 tem = f1(i,k) * del(i,k) * gravi
2152 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2153 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2158 if(pcnvflg(i) .or. scuflg(i))
then
2159 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2160 if(tsump(i) > abs(tsumn(i)))
then
2161 rtnp(i) = tsumn(i) / tsump(i)
2163 rtnp(i) = tsump(i) / tsumn(i)
2170 if(pcnvflg(i) .and. scuflg(i))
then
2172 kmx = max(kpbl(i), krad(i))
2173 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2176 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2180 if((pcnvflg(i) .or. scuflg(i)) .and.
2181 & (k >= kbx .and. k <= kmx))
then
2182 if(rtnp(i) < 0.)
then
2183 if(tsump(i) > abs(tsumn(i)))
then
2184 if(f1(i,k) < 0.) f1(i,k) = 0.
2185 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2187 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2188 if(f1(i,k) > 0.) f1(i,k) = 0.
2206 tem = f1(i,k) * del(i,k) * gravi
2207 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2208 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2212 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2213 if(tsump(i) > abs(tsumn(i)))
then
2214 rtnp(i) = tsumn(i) / tsump(i)
2216 rtnp(i) = tsump(i) / tsumn(i)
2222 if(rtnp(i) < 0.)
then
2223 if(tsump(i) > abs(tsumn(i)))
then
2224 if(f1(i,k) < 0.) f1(i,k) = 0.
2225 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2227 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2228 if(f1(i,k) > 0.) f1(i,k) = 0.
2239 qtend = (f1(i,k)-q1(i,k,ntke))*rdt
2240 rtg(i,k,ntke) = rtg(i,k,ntke)+qtend
2243 if(ldiag3d .and.
present(dtend))
then
2244 idtend = dtidx(ntke+100,index_of_process_pbl)
2246 dtend(1:im,1:km,idtend) = dtend(1:im,1:km,idtend) +
2247 & (f1(1:im,1:km)-q1(1:im,1:km,ntke))*rdt
2255 f1(i,1) = t1(i,1) + dtdz1(i) * heat(i)
2256 f2(i,1) = q1(i,1,1) + dtdz1(i) * evap(i)
2258 if(ntrac1 >= 2)
then
2262 f2(i,1+is) = q1(i,1,n)
2269 dtodsd = dt2/del(i,k)
2270 dtodsu = dt2/del(i,k+1)
2271 dsig = prsl(i,k)-prsl(i,k+1)
2273 tem1 = dsig * dkt(i,k) * rdz
2275 if (use_lpt > 0)
then
2276 dsdzt = dsdzt-tem1*elocp*(qliq(i,k+1)-qliq(i,k))*rdz
2277 & -(1+0.33/2.5)*tem1*elocp*(qice(i,k+1)-qice(i,k))*rdz
2280 au(i,k) = -dtodsd*dsdz2
2281 al(i,k) = -dtodsu*dsdz2
2282 ad(i,k) = ad(i,k)-au(i,k)
2283 ad(i,k+1)= 1.-al(i,k)
2286 if(pcnvflg(i) .and. k < kpbl(i))
then
2287 ptem = 0.5 * tem2 * xmf(i,k)
2288 ptem1 = dtodsd * ptem
2289 ptem2 = dtodsu * ptem
2290 tem = t1(i,k) + t1(i,k+1)
2291 ptem = tcko(i,k) + tcko(i,k+1)
2292 f1(i,k) = f1(i,k)+dtodsd*dsdzt-(ptem-tem)*ptem1
2293 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt+(ptem-tem)*ptem2
2294 ptem = qcko(i,k,1) + qcko(i,k+1,1)
2295 f2(i,k) = f2(i,k) - ptem * ptem1
2296 f2(i,k+1) = q1(i,k+1,1) + ptem * ptem2
2298 f1(i,k) = f1(i,k)+dtodsd*dsdzt
2299 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt
2300 f2(i,k+1) = q1(i,k+1,1)
2304 if(k >= mrad(i) .and. k < krad(i))
then
2305 ptem = 0.5 * tem2 * xmfd(i,k)
2306 ptem1 = dtodsd * ptem
2307 ptem2 = dtodsu * ptem
2308 ptem = tcdo(i,k) + tcdo(i,k+1)
2309 tem = t1(i,k) + t1(i,k+1)
2310 f1(i,k) = f1(i,k) + (ptem - tem) * ptem1
2311 f1(i,k+1) = f1(i,k+1) - (ptem - tem) * ptem2
2312 ptem = qcdo(i,k,1) + qcdo(i,k+1,1)
2313 f2(i,k) = f2(i,k) + ptem * ptem1
2314 f2(i,k+1) = f2(i,k+1) - ptem * ptem2
2318 kmx = max(kpbl(i), krad(i))
2319 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2320 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2321 ptem1 = dtodsd * ptem
2322 ptem2 = dtodsu * ptem
2323 f2(i,k) = f2(i,k) + q_half(i,k,1) * ptem1
2324 f2(i,k+1) = f2(i,k+1) - q_half(i,k,1) * ptem2
2330 if(ntrac1 >= 2)
then
2335 dtodsd = dt2/del(i,k)
2336 dtodsu = dt2/del(i,k+1)
2337 dsig = prsl(i,k)-prsl(i,k+1)
2338 tem2 = dsig * rdzt(i,k)
2340 if(pcnvflg(i) .and. k < kpbl(i))
then
2341 ptem = 0.5 * tem2 * xmf(i,k)
2342 ptem1 = dtodsd * ptem
2343 ptem2 = dtodsu * ptem
2344 ptem = qcko(i,k,n) + qcko(i,k+1,n)
2345 f2(i,k+is) = f2(i,k+is) - ptem * ptem1
2346 f2(i,k+1+is)= q1(i,k+1,n) + ptem * ptem2
2348 f2(i,k+1+is) = q1(i,k+1,n)
2352 if(k >= mrad(i) .and. k < krad(i))
then
2353 ptem = 0.5 * tem2 * xmfd(i,k)
2354 ptem1 = dtodsd * ptem
2355 ptem2 = dtodsu * ptem
2356 ptem = qcdo(i,k,n) + qcdo(i,k+1,n)
2357 f2(i,k+is) = f2(i,k+is) + ptem * ptem1
2358 f2(i,k+1+is)= f2(i,k+1+is) - ptem * ptem2
2362 kmx = max(kpbl(i), krad(i))
2363 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2364 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2365 ptem1 = dtodsd * ptem
2366 ptem2 = dtodsu * ptem
2367 f2(i,k+is) = f2(i,k+is) + q_half(i,k,n) * ptem1
2368 f2(i,k+1+is) = f2(i,k+1+is) - q_half(i,k,n) * ptem2
2378 call tridin(im,km,ntrac1,al,ad,au,f1,f2,au,f1,f2)
2390 if(pcnvflg(i) .and. scuflg(i))
then
2392 kmx = max(kpbl(i), krad(i))
2393 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2396 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2400 if((pcnvflg(i) .or. scuflg(i)) .and.
2401 & (k >= kbx .and. k <= kmx))
then
2402 tem = f2(i,k) * del(i,k) * gravi
2403 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2404 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2409 if(pcnvflg(i) .or. scuflg(i))
then
2410 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2411 if(tsump(i) > abs(tsumn(i)))
then
2412 rtnp(i) = tsumn(i) / tsump(i)
2414 rtnp(i) = tsump(i) / tsumn(i)
2421 if(pcnvflg(i) .and. scuflg(i))
then
2423 kmx = max(kpbl(i), krad(i))
2424 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2427 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2431 if((pcnvflg(i) .or. scuflg(i)) .and.
2432 & (k >= kbx .and. k <= kmx))
then
2433 if(rtnp(i) < 0.)
then
2434 if(tsump(i) > abs(tsumn(i)))
then
2435 if(f2(i,k) < 0.) f2(i,k) = 0.
2436 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2438 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2439 if(f2(i,k) > 0.) f2(i,k) = 0.
2458 tem = f2(i,k) * del(i,k) * gravi
2459 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2460 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2464 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2465 if(tsump(i) > abs(tsumn(i)))
then
2466 rtnp(i) = tsumn(i) / tsump(i)
2468 rtnp(i) = tsump(i) / tsumn(i)
2474 if(rtnp(i) < 0.)
then
2475 if(tsump(i) > abs(tsumn(i)))
then
2476 if(f2(i,k) < 0.) f2(i,k) = 0.
2477 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2479 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2480 if(f2(i,k) > 0.) f2(i,k) = 0.
2494 if(ntrac1 >= 2)
then
2498 if(pcnvflg(i) .and. scuflg(i))
then
2500 kmx = max(kpbl(i), krad(i))
2501 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2504 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2508 if((pcnvflg(i) .or. scuflg(i)) .and.
2509 & (k >= kbx .and. k <= kmx))
then
2510 if(f2(i,k+is) < 0.)
then
2511 tem = f2(i,k) + f2(i,k+is)
2514 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2516 elseif (f2(i,k) > 0.0)
then
2518 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2531 if(ntrac1 >= 2 .and. ntrw > 0)
then
2535 if(pcnvflg(i) .and. scuflg(i))
then
2537 kmx = max(kpbl(i), krad(i))
2538 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2541 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2545 if((pcnvflg(i) .or. scuflg(i)) .and.
2546 & (k >= kbx .and. k <= kmx))
then
2547 if(f2(i,k+is) < 0.)
then
2548 tem = f2(i,k) + f2(i,k+is)
2551 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2553 elseif (f2(i,k) > 0.0)
then
2555 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2564 if(ntrac1 >= 2)
then
2575 if(pcnvflg(i) .and. scuflg(i))
then
2577 kmx = max(kpbl(i), krad(i))
2578 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2581 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2585 if((pcnvflg(i) .or. scuflg(i)) .and.
2586 & (k >= kbx .and. k <= kmx))
then
2587 tem = f2(i,k+is) * del(i,k) * gravi
2588 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2589 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2594 if(pcnvflg(i) .or. scuflg(i))
then
2595 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2596 if(tsump(i) > abs(tsumn(i)))
then
2597 rtnp(i) = tsumn(i) / tsump(i)
2599 rtnp(i) = tsump(i) / tsumn(i)
2606 if(pcnvflg(i) .and. scuflg(i))
then
2608 kmx = max(kpbl(i), krad(i))
2609 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2612 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2616 if((pcnvflg(i) .or. scuflg(i)) .and.
2617 & (k >= kbx .and. k <= kmx))
then
2618 if(rtnp(i) < 0.)
then
2619 if(tsump(i) > abs(tsumn(i)))
then
2620 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2621 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2623 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2624 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2643 tem = f2(i,k+is) * del(i,k) * gravi
2644 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2645 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2649 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2650 if(tsump(i) > abs(tsumn(i)))
then
2651 rtnp(i) = tsumn(i) / tsump(i)
2653 rtnp(i) = tsump(i) / tsumn(i)
2659 if(rtnp(i) < 0.)
then
2660 if(tsump(i) > abs(tsumn(i)))
then
2661 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2662 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2664 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2665 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2678 ttend = (f1(i,k)-t1(i,k))*rdt
2679 qtend = (f2(i,k)-q1(i,k,1))*rdt
2680 tdt(i,k) = tdt(i,k)+ttend
2681 rtg(i,k,1) = rtg(i,k,1)+qtend
2688 dtsfc(i) = rho_a(i) * cp * heat(i)
2689 dqsfc(i) = rho_a(i) * hvap * evap(i)
2692 if(ldiag3d .and. .not. gen_tend .and.
present(dtend))
then
2693 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2697 ttend = (f1(i,k)-t1(i,k))*rdt
2698 dtend(i,k,idtend) = dtend(i,k,idtend)+ttend*delt
2703 idtend = dtidx(100+ntqv,index_of_process_pbl)
2707 qtend = (f2(i,k)-q1(i,k,1))*rdt
2708 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2714 if(ntrac1 >= 2)
then
2719 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2720 rtg(i,k,n) = rtg(i,k,n)+qtend
2724 if(ldiag3d .and. .not. gen_tend .and.
present(dtend))
then
2728 idtend = dtidx(n+100,index_of_process_pbl)
2733 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2734 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2758 ttend = diss(i,k) / cp
2759 tdt(i,k) = tdt(i,k) + dspfac * ttend
2762 if(ldiag3d .and. .not. gen_tend .and.
present(dtend))
then
2763 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2767 ttend = diss(i,k) / cp
2768 dtend(i,k,idtend) = dtend(i,k,idtend)+dspfac*ttend*delt
2778 ad(i,1) = 1.0 + dtdz1(i) * stress(i) / spd1(i)
2785 dtodsd = dt2/del(i,k)
2786 dtodsu = dt2/del(i,k+1)
2787 dsig = prsl(i,k)-prsl(i,k+1)
2789 tem1 = dsig * dku(i,k) * rdz
2791 au(i,k) = -dtodsd*dsdz2
2792 al(i,k) = -dtodsu*dsdz2
2793 ad(i,k) = ad(i,k)-au(i,k)
2794 ad(i,k+1)= 1.-al(i,k)
2797 if(pcnvflg(i) .and. k < kpbl(i))
then
2798 ptem = 0.5 * tem2 * xmf(i,k)
2799 ptem1 = dtodsd * ptem
2800 ptem2 = dtodsu * ptem
2801 tem = u1(i,k) + u1(i,k+1)
2802 ptem = ucko(i,k) + ucko(i,k+1)
2803 f1(i,k) = f1(i,k) - (ptem - tem) * ptem1
2804 f1(i,k+1) = u1(i,k+1) + (ptem - tem) * ptem2
2805 tem = v1(i,k) + v1(i,k+1)
2806 ptem = vcko(i,k) + vcko(i,k+1)
2807 f2(i,k) = f2(i,k) - (ptem - tem) * ptem1
2808 f2(i,k+1) = v1(i,k+1) + (ptem - tem) * ptem2
2810 f1(i,k+1) = u1(i,k+1)
2811 f2(i,k+1) = v1(i,k+1)
2815 if(k >= mrad(i) .and. k < krad(i))
then
2816 ptem = 0.5 * tem2 * xmfd(i,k)
2817 ptem1 = dtodsd * ptem
2818 ptem2 = dtodsu * ptem
2819 tem = u1(i,k) + u1(i,k+1)
2820 ptem = ucdo(i,k) + ucdo(i,k+1)
2821 f1(i,k) = f1(i,k) + (ptem - tem) *ptem1
2822 f1(i,k+1) = f1(i,k+1) - (ptem - tem) *ptem2
2823 tem = v1(i,k) + v1(i,k+1)
2824 ptem = vcdo(i,k) + vcdo(i,k+1)
2825 f2(i,k) = f2(i,k) + (ptem - tem) * ptem1
2826 f2(i,k+1) = f2(i,k+1) - (ptem - tem) * ptem2
2835 call tridi2(im,km,al,ad,au,f1,f2,au,f1,f2)
2841 utend = (f1(i,k)-u1(i,k))*rdt
2842 vtend = (f2(i,k)-v1(i,k))*rdt
2843 du(i,k) = du(i,k)+utend
2844 dv(i,k) = dv(i,k)+vtend
2849 if (use_oceanuv)
then
2851 spd1_m=sqrt( (u1(i,1)-usfco(i))**2+(v1(i,1)-vsfco(i))**2 )
2852 dusfc(i) = -1.*rho_a(i)*stress(i)*(u1(i,1)-usfco(i))/spd1_m
2853 dvsfc(i) = -1.*rho_a(i)*stress(i)*(v1(i,1)-vsfco(i))/spd1_m
2857 dusfc(i) = -1.*rho_a(i)*stress(i)*u1(i,1)/spd1(i)
2858 dvsfc(i) = -1.*rho_a(i)*stress(i)*v1(i,1)/spd1(i)
2862 if(ldiag3d .and. .not. gen_tend .and.
present(dtend))
then
2863 idtend = dtidx(index_of_x_wind,index_of_process_pbl)
2867 utend = (f1(i,k)-u1(i,k))*rdt
2868 dtend(i,k,idtend) = dtend(i,k,idtend) + utend*delt
2873 idtend = dtidx(index_of_y_wind,index_of_process_pbl)
2877 vtend = (f2(i,k)-v1(i,k))*rdt
2878 dtend(i,k,idtend) = dtend(i,k,idtend) + vtend*delt
2894 dku3d_h(i,k) = dku_h(i,k)
2895 dku3d_e(i,k) = dkq_h(i,k)