90 & ntiw,ntke,grav,pi,rd,cp,rv,hvap,hfus,fv,eps,epsm1, &
91!The following three variables are for SA-3D-TKE
92 & def_1,def_2,def_3,sa3dtke,dku3d_h,dku3d_e, &
93 & dv,du,tdt,rtg,u1,v1,t1,q1,usfco,vsfco,use_oceanuv, &
94 & swh,hlw,xmu,garea,zvfun,sigmaf, &
95 & psk,rbsoil,zorl,u10m,v10m,fm,fh, &
96 & tsea,heat,evap,stress,spd1,kpbl, &
97 & prsi,del,prsl,prslk,phii,phil,delt,tte_edmf, &
98 & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl,dkt,dku,tkeh, &
99 & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr, &
100 & rlmx,elmx,sfc_rlm,tc_pbl,use_lpt, &
101!IVAI: canopy inputs from AQM
102 & do_canopy, cplaqm, claie, cfch, cfrt, cclu, cpopu, &
104 & ntqv,dtend,dtidx,index_of_temperature,index_of_x_wind, &
105 & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d, &
111 use machine ,
only : kind_phys
112 use funcphys ,
only : fpvs
117 integer,
intent(in) :: im, km, ntrac, ntcw, ntrw, ntiw, &
119 integer,
intent(in) :: sfc_rlm
120 integer,
intent(in) :: tc_pbl
121 integer,
intent(in) :: use_lpt
122 integer,
intent(in) :: kinver(:)
123 integer,
intent(out) :: kpbl(:)
124 logical,
intent(in) :: gen_tend,ldiag3d
126 real(kind=kind_phys),
intent(in) :: grav,pi,rd,cp,rv,hvap,hfus,fv, &
128 real(kind=kind_phys),
intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s
129 real(kind=kind_phys),
intent(in) :: dspfac, bl_upfr, bl_dnfr
130 real(kind=kind_phys),
intent(in) :: rlmx, elmx
132 logical,
intent(in) :: do_canopy, cplaqm
134 real(kind=kind_phys),
optional,
intent(in) :: claie(:), cfch(:), &
135 & cfrt(:), cclu(:), cpopu(:)
137 real(kind=kind_phys),
intent(inout) :: dv(:,:), du(:,:), &
138 & tdt(:,:), rtg(:,:,:), tkeh(:,:)
139 real(kind=kind_phys),
intent(in) :: &
140 & u1(:,:), v1(:,:), &
141 & usfco(:), vsfco(:), &
142 & t1(:,:), q1(:,:,:), &
144 & def_1(:,:), def_2(:,:), def_3(:,:), &
145 & swh(:,:), hlw(:,:), &
146 & xmu(:), garea(:), &
147 & zvfun(:), sigmaf(:), &
148 & psk(:), rbsoil(:), &
149 & zorl(:), tsea(:), &
150 & u10m(:), v10m(:), &
152 & evap(:), heat(:), &
153 & stress(:), spd1(:), &
154 & prsi(:,:), del(:,:), &
155 & prsl(:,:), prslk(:,:), &
156 & phii(:,:), phil(:,:)
157 real(kind=kind_phys),
intent(inout),
dimension(:,:,:),
optional ::&
159 integer,
intent(in) :: dtidx(:,:), index_of_temperature, &
160 & index_of_x_wind, index_of_y_wind, index_of_process_pbl
161 logical,
intent(in) :: use_oceanuv
162 real(kind=kind_phys),
intent(out) :: &
163 & dusfc(:), dvsfc(:), &
164 & dtsfc(:), dqsfc(:), &
166 real(kind=kind_phys),
intent(out) :: &
170 logical,
intent(in) :: sa3dtke
173 logical,
intent(in) :: dspheat
175 logical,
intent(in) :: tte_edmf
177 character(len=*),
intent(out) :: errmsg
178 integer,
intent(out) :: errflg
181 real(kind=kind_phys),
intent(out) ::
182 & dku3d_h(:,:),dku3d_e(:,:)
188 real(kind=kind_phys) spd1_m
190 integer i,is,k,n,ndt,km1,kmpbl,kmscu,ntrac1,idtend
192 integer lcld(im),kcld(im),krad(im),mrad(im)
193 integer kx1(im), kb1(im), kpblx(im)
195 real(kind=kind_phys) te(im,km), tei(im,km-1), tke(im,km),
196 & tteh(im,km), tesq(im,km-1),e2(im,0:km)
198 real(kind=kind_phys) theta(im,km),thvx(im,km), thlvx(im,km),
199 & qlx(im,km), thetae(im,km),thlx(im,km),
200 & slx(im,km), svx(im,km), qtx(im,km),
201 & tvx(im,km), pix(im,km), radx(im,km-1),
204 real(kind=kind_phys) plyr(im,km), rhly(im,km), cfly(im,km),
207 real(kind=kind_phys) dtdz1(im), gdx(im),
208 & phih(im), phim(im), phihs(im),
209 & phims(im), prn(im,km-1),
210 & rbdn(im), rbup(im), thermal(im),
211 & ustar(im), wstar(im), hpblx(im),
212 & ust3(im), wst3(im), rho_a(im),
213 & z0(im), crb(im), tkemean(im),
214 & hgamt(im), hgamq(im),
215 & wscale(im),vpert(im), thvs(im),
216 & zol(im), sflux(im), ris(im),
217 & sumx(im), tx1(im), tx2(im)
219 real(kind=kind_phys) radmin(im)
221 real(kind=kind_phys) zi(im,km+1), zl(im,km), zm(im,km),
222 & xkzo(im,km-1),xkzmo(im,km-1),
223 & xkzm_hx(im), xkzm_mx(im), tkmnz(im,km-1),
224 & rdzt(im,km-1),rlmnz(im,km),
225 & al(im,km-1), ad(im,km), au(im,km-1),
226 & f1(im,km), f2(im,km*(ntrac-1))
228 real(kind=kind_phys) elm(im,km), ele(im,km),
229 & ckz(im,km), chz(im,km),
230 & diss(im,km-1),prod(im,km-1),
231 & bf(im,km-1), shr2(im,km-1), wush(im,km),
232 & xlamue(im,km-1), xlamde(im,km-1),
233 & gotvx(im,km), rlam(im,km-1)
237 real(kind=kind_phys) tcko(im,km), qcko(im,km,ntrac),
238 & ucko(im,km), vcko(im,km),
239 & buou(im,km), xmf(im,km)
243 real(kind=kind_phys) tcdo(im,km), qcdo(im,km,ntrac),
244 & ucdo(im,km), vcdo(im,km),
245 & buod(im,km), xmfd(im,km)
249 real(kind=kind_phys) e_half(im,km-1), e_diff(im,0:km-1),
250 & q_half(im,km-1,ntrac-1),
251 & qh(im,km-1,ntrac-1),
252 & q_diff(im,0:km-1,ntrac-1)
253 real(kind=kind_phys) rrkp, phkp
254 real(kind=kind_phys) tsumn(im), tsump(im), rtnp(im)
255 real(kind=kind_phys) sfcpbl(im), vez0fun(im)
257 logical pblflg(im), sfcflg(im), flg(im)
258 logical scuflg(im), pcnvflg(im)
263 real(kind=kind_phys) aphi16, aphi5,
265 & gamcrt, gamcrq, sfcfrac,
267 & dsdz2, dsdzt, dkmax,
269 & dtodsu, g, factor, dz,
270 & gocp, gravi, zol1, zolcru,
272 & prnum, prmax, prmin, prtke,
275 & elmfac, elefac, dspmax,
277 & f0, robn, crbmin, crbmax,
278 & es, qs,
value, onemrh,
279 & cfh, gamma, elocp, el2orc,
280 & epsi, beta, chx, cqx,
281 & rdt, rdz, qmin, qlmin,
282 & rimin, rbcr, rbint, tdzmin,
283 & rlmn, rlmn0, rlmn1, rlmn2,
284 & ttend, utend, vtend, qtend,
285 & zfac, zfmin, vk, spdk2,
286 & tkmin, tkbmx, disste, xkgdx,
288 & zlup, zldn, cs0, csmf,
289 & tem, tem1, tem2, tem3,
290 & ptem, ptem0, ptem1, ptem2
294 real(kind=kind_phys) thetal(im,km),dku_les(im,km),dkt_les(im,km),
295 & elmh(im,km),ele_les(im,km),pftke(im),
296 & dkq_les(im,km),pfl(im),pfdx(im),
297 & dku_h(im,km),dkq_h(im,km),
298 & elmhfac,elmhmx,ckh,elm_les,
299 & cpl1,cpl2,cpl3,cpl4,cpl5,cpl6,
300 & cptke1,cptke2,cptke3
302 real(kind=kind_phys) tkemax(im),scl(im)
303 real(kind=kind_phys) sclmax,sclmin,dkmaxles
306 real(kind=kind_phys) slfac
308 real(kind=kind_phys) vegflo, vegfup, z0lo, z0up, vc0, zc0
310 real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck
313 real(kind=kind_phys) epotte
315 real(kind=kind_phys) qlcr, zstblmax, hcrinv
317 real(kind=kind_phys) h1
319 real(kind=kind_phys) bfac, mffac
321 real(kind=kind_phys) qice(im,km),qliq(im,km)
324 integer COUNTCAN,KCAN
326 real(kind=kind_phys) fch, mol, hol, tlcan,
327 & sigmacan, rrcan, bbcan,
328 & aacan, zcan, zfl, botcan,
329 & eddyvest1, eddyvest_int
332 real(kind=kind_phys),
allocatable :: eddyvestx( : )
334 real(kind=kind_phys),
allocatable :: zcanx( : )
336 integer,
parameter :: MAXCAN = 1000
337 integer,
parameter :: mvt = 30
339 real :: fch_table(mvt)
340 data ( fch_table(i),i=1,mvt) /
341 & 20.0, 20.0, 18.0, 16.0, 16.0, 1.10,
342 & 1.10, 13.0, 10.0, 1.00, 5.00, 2.00,
343 & 15.0, 1.50, 0.00, 0.00, 0.00, 4.00,
344 & 2.00, 0.50, 0.00, 0.00, 0.00, 0.00,
345 & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /
357 parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1)
358 parameter(vk=0.4,rimin=-100.,slfac=0.1)
359 parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3)
360 parameter(rlmn=30.,rlmn0=5.,rlmn1=5.,rlmn2=10.)
361 parameter(prmin=0.25)
362 parameter(pr0=1.0,prtke=1.0)
363 parameter(f0=1.e-4,crbmin=0.15,crbmax=0.35)
364 parameter(tkmin=1.e-9,tkbmx=0.2,dspmax=10.0)
365 parameter(qmin=1.e-8,qlmin=1.e-12,zfmin=1.e-8)
366 parameter(aphi5=5.,aphi16=16.)
367 parameter(elmfac=1.0,elefac=1.0,cql=100.)
368 parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=1000.)
369 parameter(qlcr=3.5e-5,zstblmax=2500.)
370 parameter(xkinv1=0.15,xkinv2=0.3)
371 parameter(h1=0.33333333,hcrinv=250.)
372 parameter(vegflo=0.1,vegfup=1.0,z0lo=0.1,z0up=1.0)
373 parameter(vc0=1.0,zc0=1.0)
374 parameter(cs0=0.4,csmf=0.5)
375 parameter(rchck=1.5,ndt=20)
377 parameter(cpl1=0.280,cpl2=0.870,cpl3=0.913)
378 parameter(cpl4=0.153,cpl5=0.278,cpl6=0.720)
379 parameter(cptke1=0.07,cptke2=0.142,cptke3=0.071)
380 parameter(dkmaxles=300.0,sclmin=500.,sclmax=2500.)
381 parameter(elmhfac=1.5,elmhmx=1000.,ckh=0.4)
385 if(.not.
allocated(eddyvestx))
386 &
allocate( eddyvestx( maxcan ) )
387 if(.not.
allocated(zcanx))
388 &
allocate( zcanx( maxcan ) )
391 if (tc_pbl == 0)
then
395 else if (tc_pbl == 1)
then
423 el2orc = hvap * hvap / (rv * cp)
445 zi(i,k) = phii(i,k) * gravi
446 zl(i,k) = phil(i,k) * gravi
458 zi(i,km+1) = phii(i,km+1) * gravi
467 gdx(i) = sqrt(garea(i))
473 te(i,k) = max(q1(i,k,ntke), tkmin)
481 tteh(i,k) = 0.5 * (te(i,k) + te(i,k+1))
492 tkeh(i,k) = 0.5 * (tke(i,k) + tke(i,k+1))
499 rdzt(i,k) = 1.0 / (zl(i,k+1) - zl(i,k))
517 tx1(i) = 1.0 / prsi(i,1)
519 if(gdx(i) >= xkgdx)
then
524 xkzm_hx(i) = xkzm_h * tem
525 xkzm_mx(i) = xkzm_m * tem
532 if (k < kinver(i))
then
534 ptem = prsi(i,k+1) * tx1(i)
536 tem2 = tem1 * tem1 * 2.5
537 tem2 = min(1.0, exp(-tem2))
538 rlmnz(i,k)= rlmn * tem2
539 rlmnz(i,k)= max(rlmnz(i,k), rlmn0)
541 tem2 = tem1 * tem1 * 10.0
542 tem2 = min(1.0, exp(-tem2))
543 xkzo(i,k) = xkzm_hx(i) * tem2
546 if (ptem >= xkzm_s)
then
547 xkzmo(i,k) = xkzm_mx(i)
550 if (k == kx1(i) .and. k > 1) tx2(i) = 1.0 / prsi(i,k)
551 tem1 = 1.0 - prsi(i,k+1) * tx2(i)
552 tem1 = tem1 * tem1 * 5.0
553 xkzmo(i,k) = xkzm_mx(i) * min(1.0, exp(-tem1))
561 z0(i) = 0.01 * zorl(i)
562 rho_a(i) = prsl(i,1)/(rd*t1(i,1)*(1.+fv*max(q1(i,1,1),qmin)))
575 if(rbsoil(i) > 0.) sfcflg(i) = .false.
592 tem = (sigmaf(i) - vegflo) / (vegfup - vegflo)
593 tem = min(max(tem, 0.), 1.)
595 ptem = (z0(i) - z0lo) / (z0up - z0lo)
596 ptem = min(max(ptem, 0.), 1.)
597 vez0fun(i) = (1. + vc0 * tem1) * (1. + zc0 * ptem)
604 pix(i,k) = psk(i) / prslk(i,k)
605 theta(i,k) = t1(i,k) * pix(i,k)
609 tem = max(q1(i,k,ntcw),qlmin)
612 tem1=max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
615 tem1=max(q1(i,k,ntiw),qlmin)
618 qlx(i,k) = tem + tem1
619 ptem = hvap*tem + (hvap+hfus)*tem1
620 slx(i,k) = cp * t1(i,k) + phil(i,k) - ptem
622 qlx(i,k) = max(q1(i,k,ntcw),qlmin)
623 slx(i,k) = cp * t1(i,k) + phil(i,k) - hvap*qlx(i,k)
626 tem2 = 1.+fv*max(q1(i,k,1),qmin)-qlx(i,k)
627 thvx(i,k) = theta(i,k) * tem2
628 tvx(i,k) = t1(i,k) * tem2
629 qtx(i,k) = max(q1(i,k,1),qmin)+qlx(i,k)
630 thlx(i,k) = theta(i,k) - pix(i,k)*elocp*qlx(i,k)
631 thlvx(i,k) = thlx(i,k) * (1. + fv * qtx(i,k))
632 svx(i,k) = cp * tvx(i,k)
633 ptem1 = elocp * pix(i,k) * max(q1(i,k,1),qmin)
634 thetae(i,k)= theta(i,k) + ptem1
636 gotvx(i,k) = g / thvx(i,k)
644 plyr(i,k) = 0.01 * prsl(i,k)
646 es = 0.01 * fpvs(t1(i,k))
647 qs = max(qmin, eps * es / (plyr(i,k) + epsm1*es))
648 rhly(i,k) = max(0.0, min(1.0, max(qmin, q1(i,k,1))/qs))
656 clwt = 1.0e-6 * (plyr(i,k)*0.001)
657 if (qlx(i,k) > clwt)
then
658 onemrh = max(1.e-10, 1.0-rhly(i,k))
659 tem1 = min(max((onemrh*qstl(i,k))**0.49,0.0001),1.0)
661 value = max(min( tem1*qlx(i,k), 50.0), 0.0)
662 tem2 = sqrt(sqrt(rhly(i,k)))
663 cfly(i,k) = min(max(tem2*(1.0-exp(-
value)), 0.0), 1.0)
672 tem = 0.5 * (svx(i,k) + svx(i,k+1))
673 tem1 = 0.5 * (t1(i,k) + t1(i,k+1))
674 tem2 = 0.5 * (qstl(i,k) + qstl(i,k+1))
675 cfh = min(cfly(i,k+1),0.5*(cfly(i,k)+cfly(i,k+1)))
677 gamma = el2orc * tem2 / (tem1**2)
679 beta = (1. + gamma*epsi*(1.+fv)) / (1. + gamma)
680 chx = cfh * alp * beta + (1. - cfh) * alp
681 cqx = cfh * alp * hvap * (beta - epsi)
682 cqx = cqx + (1. - cfh) * fv * g
683 ptem1 = (slx(i,k+1)-slx(i,k))*rdzt(i,k)
684 ptem2 = (qtx(i,k+1)-qtx(i,k))*rdzt(i,k)
685 bf(i,k) = chx * ptem1 + cqx * ptem2
702 tem = zi(i,k+1)-zi(i,k)
703 radx(i,k) = tem*(swh(i,k)*xmu(i)+hlw(i,k))
710 sflux(i) = heat(i) + evap(i)*fv*theta(i,1)
711 if(.not.sfcflg(i) .or. sflux(i) <= 0.) pblflg(i)=.false.
732 thvs(i) = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
735 thermal(i) = thlvx(i,1)
739 tem = sqrt(u10m(i)**2+v10m(i)**2)
741 robn = tem / (f0 * z0(i))
743 crb(i) = 0.16 * (tem1 ** (-0.18))
744 crb(i) = max(min(crb(i), crbmax), crbmin)
749 dtdz1(i) = dt2 / (zi(i,2)-zi(i,1))
753 ustar(i) = sqrt(stress(i))
763 dw2 = (u1(i,k)-u1(i,k+1))**2
764 & + (v1(i,k)-v1(i,k+1))**2
765 shr2(i,k) = max(dw2,dw2min)*rdz*rdz
785 if (tc_pbl == 0)
then
786 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
789 rbup(i) = (thlvx(i,k)-thermal(i))*
790 & (g*zl(i,k)/thlvx(i,1))/spdk2
791 else if (tc_pbl == 1)
then
792 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
794 rbup(i) = (thlvx(i,k)-thermal(i))*
795 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
798 flg(i) = rbup(i) > crb(i)
806 if(kpblx(i) > 1)
then
808 if(rbdn(i) >= crb(i))
then
810 elseif(rbup(i) <= crb(i))
then
813 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
815 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
816 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
823 if(kpbl(i) <= 1) pblflg(i)=.false.
829 sfcpbl(i) = slfac * hpbl(i)
838 if (flg(i) .and. zl(i,k) <= sfcpbl(i))
then
846 if(pblflg(i)) kb1(i)=min(kb1(i),kpbl(i))
853 if(pblflg(i) .and. kb1(i) > 1)
then
857 thermal(i) = thlvx(i,kb1(i))
859 hpblx(i) = zl(i,kb1(i))
864 if(.not.flg(i) .and. k > kb1(i))
then
866 if (tc_pbl == 0)
then
867 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
870 rbup(i) = (thlvx(i,k)-thermal(i))*
871 & (g*zl(i,k)/thlvx(i,1))/spdk2
872 else if (tc_pbl == 1)
then
873 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
875 rbup(i) = (thlvx(i,k)-thermal(i))*
876 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
879 flg(i) = rbup(i) > crb(i)
884 if(pblflg(i) .and. kb1(i) > 1)
then
886 if(rbdn(i) >= crb(i))
then
888 elseif(rbup(i) <= crb(i))
then
891 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
893 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
894 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
900 if(.not.tte_edmf)
then
911 dz = zi(i,k+1) - zi(i,k)
912 tkemean(i) = tkemean(i) + tke(i,k) * dz
913 sumx(i) = sumx(i) + dz
918 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
919 tkemean(i) = tkemean(i) / sumx(i)
928 kps = max(kmpbl, kmscu)
931 dz = zi(i,k+1) - zi(i,k)
932 tem = (0.5*(u1(i,k-1)-u1(i,k+1))/dz)**2
933 tem1 = tem+(0.5*(v1(i,k-1)-v1(i,k+1))/dz)**2
934 wush(i,k) = csmf * sqrt(tem1)
948 zol(i) = max(rbsoil(i)*fm(i)*fm(i)/fh(i),rimin)
950 zol(i) = min(zol(i),-zfmin)
952 zol(i) = max(zol(i),zfmin)
965 zol1 = zol(i)*sfcfrac*hpbl(i)/zl(i,1)
967 tem = 1.0 / (1. - aphi16*zol1)
969 phim(i) = sqrt(phih(i))
970 tem1 = 1.0 / (1. - aphi16*zol(i))
971 phihs(i) = sqrt(tem1)
972 phims(i) = sqrt(phihs(i))
974 phim(i) = 1. + aphi5*zol1
976 phims(i) = 1. + aphi5*zol(i)
998 if(zol(i) < zolcru)
then
1001 wst3(i) = gotvx(i,1)*sflux(i)*hpbl(i)
1002 wstar(i)= wst3(i)**h1
1003 ust3(i) = ustar(i)**3.
1004 wscale(i)=(ust3(i)+wfac*vk*wst3(i)*sfcfrac)**h1
1005 ptem = ustar(i)/aphi5
1006 wscale(i) = max(wscale(i),ptem)
1015 hgamt(i) = heat(i)/wscale(i)
1016 hgamq(i) = evap(i)/wscale(i)
1017 vpert(i) = hgamt(i) + hgamq(i)*fv*theta(i,1)
1018 vpert(i) = max(vpert(i),0.)
1019 tem = min(cfac*vpert(i),gamcrt)
1020 thermal(i)= thermal(i) + tem
1036 if(.not.flg(i) .and. k > kb1(i))
then
1038 if (tc_pbl == 0)
then
1039 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
1040 rbup(i) = (thlvx(i,k)-thermal(i))*
1041 & (g*zl(i,k)/thlvx(i,1))/spdk2
1042 else if (tc_pbl == 1)
then
1043 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
1044 & + bfac*ustar(i)**2
1045 rbup(i) = (thlvx(i,k)-thermal(i))*
1046 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
1049 flg(i) = rbup(i) > crb(i)
1056 if(rbdn(i) >= crb(i))
then
1058 elseif(rbup(i) <= crb(i))
then
1061 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
1063 hpbl(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
1064 if(hpbl(i) < zi(i,kpbl(i)))
then
1065 kpbl(i) = kpbl(i) - 1
1067 if(kpbl(i) <= 1)
then
1068 pcnvflg(i) = .false.
1081 tem = phims(i) * phims(i)
1082 ris(i) = zol(i) * phihs(i) / tem
1083 ris(i) = max(ris(i), rimin)
1087 ptem = sfcfrac*hpbl(i)
1088 if (zl(i,k) <= ptem)
then
1092 tem = gotvx(i,1) * (thlvx(i,1)-thvs(i))
1093 tem1 = tem / zl(i,1)
1094 tem1 = 0.5 * (tem1 + bf(i,1))
1095 ptem = max((u1(i,1)**2+v1(i,1)**2), 1.)
1096 ptem1 = ptem / (zl(i,1) * zl(i,1))
1097 ptem1 = 0.5 * (ptem1 + shr2(i,1))
1098 ri = max(tem1/ptem1, rimin)
1100 tem1 = 0.5 * (bf(i,k-1) + bf(i,k))
1101 ptem1 = 0.5 * (shr2(i,k-1) + shr2(i,k))
1102 ri = max(tem1/ptem1, rimin)
1112 tke(i,k) = te(i,k) * (1. - epotte)
1116 tke(i,km) = tke(i,km1)
1127 if(k < kpbl(i))
then
1128 dz = zi(i,k+1) - zi(i,k)
1129 tkemean(i) = tkemean(i) + tke(i,k) * dz
1130 sumx(i) = sumx(i) + dz
1135 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
1136 tkemean(i) = tkemean(i) / sumx(i)
1153 if(flg(i).and.zl(i,k) >= zstblmax)
then
1164 if(flg(i) .and. k <= lcld(i))
then
1165 if(qlx(i,k) >= qlcr)
then
1173 if(scuflg(i) .and. kcld(i)==km1) scuflg(i)=.false.
1185 if(flg(i) .and. k <= kcld(i))
then
1186 if(qlx(i,k) >= qlcr)
then
1187 if(radx(i,k) < radmin(i))
then
1198 if(scuflg(i) .and. krad(i) <= 1) scuflg(i)=.false.
1199 if(scuflg(i) .and. radmin(i)>=0.) scuflg(i)=.false.
1225 qcko(i,k,n) = q1(i,k,n)
1228 qcdo(i,k,n) = q1(i,k,n)
1235 call mfpbltq(im,im,km,kmpbl,ntcw,ntrac1,dt2,
1236 & pcnvflg,zl,zm,q1,t1,u1,v1,plyr,pix,thlx,thvx,
1237 & gdx,hpbl,kpbl,vpert,buou,wush,tkemean,vez0fun,xmf,
1238 & tcko,qcko,ucko,vcko,xlamue,bl_upfr)
1241 call mfscuq(im,im,km,kmscu,ntcw,ntrac1,dt2,
1242 & scuflg,zl,zm,q1,t1,u1,v1,plyr,pix,
1243 & thlx,thvx,thlvx,gdx,thetae,
1244 & krad,mrad,radmin,buod,wush,tkemean,vez0fun,xmfd,
1245 & tcdo,qcdo,ucdo,vcdo,xlamde,bl_dnfr)
1247 if (tc_pbl == 1)
then
1250 if(zol(i) > -0.5)
then
1258 tem = sqrt(u10m(i)**2+v10m(i)**2)
1259 mffac = (1. - min(max(tem - 20.0, 0.0), 10.0)/10.)
1261 xmf(i,k) = xmf(i,k)*mffac
1262 xmfd(i,k) = xmfd(i,k)*mffac
1272 if(k < kpbl(i))
then
1273 tem = phih(i)/phim(i)
1274 ptem = sfcfrac*hpbl(i)
1275 tem1 = max(zi(i,k+1)-ptem, 0.)
1276 tem2 = tem1 / (hpbl(i) - ptem)
1279 prn(i,k) = tem + (pr0 - tem) * tem2
1284 prn(i,k) = min(prn(i,k),prmax)
1285 prn(i,k) = max(prn(i,k),prmin)
1287 ckz(i,k) = ck0 + (ck1 - ck0) * tem2
1288 ckz(i,k) = max(min(ckz(i,k), ck0), ck1)
1289 chz(i,k) = ch0 + (ch1 - ch0) * tem2
1290 chz(i,k) = max(min(chz(i,k), ch0), ch1)
1308 if(zi(i,k+1) > hcrinv)
then
1309 tem1 = tvx(i,k+1)-tvx(i,k)
1311 xkzo(i,k) = min(xkzo(i,k), xkinv1)
1312 xkzmo(i,k) = min(xkzmo(i,k), xkinv1)
1313 rlmnz(i,k) = min(rlmnz(i,k), rlmn1)
1316 tem1 = tvx(i,k+1)-tvx(i,k)
1318 ptem = xkzo(i,k) * zvfun(i)
1319 xkzo(i,k) = min(max(ptem, xkinv2), xkzo(i,k))
1320 ptem = xkzmo(i,k) * zvfun(i)
1321 xkzmo(i,k) = min(max(ptem, xkinv2), xkzmo(i,k))
1322 ptem = rlmnz(i,k) * zvfun(i)
1323 rlmnz(i,k) = min(max(ptem, rlmn2), rlmnz(i,k))
1330 rlmnz(i,k) = 0.5 * (rlmnz(i,k-1) + rlmnz(i,k))
1341 e2(i,k) = max(2.*tke(i,k), 0.001)
1344 dz = zl(i,n+1) - zl(i,n)
1345 tem1 = 2.*gotvx(i,n+1)*(thvx(i,k)-thvx(i,n+1))
1346 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n))
1347 e2(i,n+1) = e2(i,n) + (tem1 - tem2) * dz
1349 if(e2(i,n+1) < 0.)
then
1350 ptem = e2(i,n+1) / (e2(i,n+1) - e2(i,n))
1351 zlup = zlup - ptem * dz
1352 zlup = max(zlup, 0.)
1363 tem = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
1364 tem1 = 2.*gotvx(i,n)*(tem-thvx(i,k))
1365 tem2 = ustar(i)*phims(i)/(vk*dz)
1366 tem2 = cs0*sqrt(e2(i,n))*tem2
1367 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1369 dz = zl(i,n) - zl(i,n-1)
1370 tem1 = 2.*gotvx(i,n-1)*(thvx(i,n-1)-thvx(i,k))
1371 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n-1))
1372 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1375 if(e2(i,n-1) < 0.)
then
1376 ptem = e2(i,n-1) / (e2(i,n-1) - e2(i,n))
1377 zldn = zldn - ptem * dz
1378 zldn = max(zldn, 0.)
1384 tem = 0.5 * (zi(i,k+1)-zi(i,k))
1385 tem1 = min(tem, rlmnz(i,k))
1402 ptem2 = min(zlup,zldn)
1403 rlam(i,k) = elmfac * ptem2
1404 rlam(i,k) = max(rlam(i,k), tem1)
1405 rlam(i,k) = min(rlam(i,k), rlmx)
1407 ptem2 = sqrt(zlup*zldn)
1408 ele(i,k) = elefac * ptem2
1409 ele(i,k) = max(ele(i,k), tem1)
1410 elmh(i,k)= elmhfac * ele(i,k)
1411 ele(i,k) = min(ele(i,k), elmx)
1412 elmh(i,k)= min(elmh(i,k), elmhmx)
1421 if (zol(i) < 0.)
then
1422 ptem = 1. - 100. * zol(i)
1425 elseif (zol(i) >= 1.)
then
1428 ptem = 1. + 2.7 * zol(i)
1432 if (tc_pbl == 0)
then
1433 elm(i,k) = zk*rlam(i,k)/(rlam(i,k)+zk)
1435 if ( sfc_rlm == 1 )
then
1436 if ( sfcflg(i) .and.
1437 & zl(i,k) < min(100.0,hpbl(i)*0.05) ) elm(i,k)=zk
1439 else if (tc_pbl == 1)
then
1441 elm(i,k) = sqrt( 1.0/( 1.0/(zk**2)+1.0/(rlam(i,k)**2) ) )
1445 if(k == 1) elm(i,k)=zk
1447 dz = zi(i,k+1) - zi(i,k)
1448 tem = max(gdx(i),dz)
1449 elm(i,k) = min(elm(i,k), tem)
1451 if (tc_pbl == 0)
then
1452 ele(i,k) = min(ele(i,k), tem)
1453 else if (tc_pbl == 1)
then
1460 elm(i,km) = elm(i,km1)
1461 ele(i,km) = ele(i,km1)
1462 elmh(i,km)= elmh(i,km1)
1473 ptem = sfcfrac*hpbl(i)
1474 if (zi(i,k+1) <= ptem)
then
1477 ri = max(bf(i,k)/shr2(i,k),rimin)
1486 tkeh(i,k) = tteh(i,k) * (1. - epotte)
1487 tesq(i,k) = tkeh(i,k) / sqrt(tteh(i,k))
1495 tesq(i,k) = sqrt(tkeh(i,k))
1503 tem = 0.5 * (elm(i,k) + elm(i,k+1))
1504 tem = tem * tesq(i,k)
1505 ri = max(bf(i,k)/shr2(i,k),rimin)
1506 if(k < kpbl(i))
then
1508 dku(i,k) = ckz(i,k) * tem
1509 dkt(i,k) = dku(i,k) / prn(i,k)
1512 dku(i,k) = ckz(i,k) * tem
1513 dkt(i,k) = dku(i,k) / prn(i,k)
1515 dkt(i,k) = chz(i,k) * tem
1516 dku(i,k) = dkt(i,k) * prn(i,k)
1521 dku(i,k) = ck1 * tem
1522 dkt(i,k) = rchck * dku(i,k)
1524 dkt(i,k) = ch1 * tem
1525 prnum = pr0 + 2.1 * ri
1526 prnum = min(prnum,prmax)
1527 dku(i,k) = dkt(i,k) * prnum
1532 if(k >= mrad(i) .and. k < krad(i))
then
1536 tem1 = ckz(i,k) * tem
1538 ptem1 = tem1 / prscu
1539 dku(i,k) = max(dku(i,k), tem1)
1540 dkt(i,k) = max(dkt(i,k), ptem1)
1544 dkq(i,k) = prtke * dkt(i,k)
1546 dkt(i,k) = min(dkt(i,k),dkmax)
1547 dkt(i,k) = max(dkt(i,k),xkzo(i,k))
1548 dkq(i,k) = min(dkq(i,k),dkmax)
1549 dkq(i,k) = max(dkq(i,k),xkzo(i,k))
1550 dku(i,k) = min(dku(i,k),dkmax)
1551 dku(i,k) = max(dku(i,k),xkzmo(i,k))
1562 pix(i,k) = psk(i) / prslk(i,k)
1563 theta(i,k) = t1(i,k) * pix(i,k)
1564 tem=theta(i,k)/t1(i,k)
1566 tem1=max(q1(i,k,ntcw),qlmin)+
1567 & max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
1568 thetal(i,k)=theta(i,k)-(hvap+hfus)/cp*tem*tem1
1570 tem1=max(q1(i,k,ntcw),qlmin)
1571 thetal(i,k)=theta(i,k)-hvap/cp*tem*tem1
1588 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k))*rdzt(i,k)
1589 dz = zl(i,k+1) - zl(i,k)
1590 tem1=(garea(i)*dz)**h1
1593 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1594 elm_les=min(elm_les,tem1)
1599 dku_les(i,k)=0.1*elm_les*sqrt(tkeh(i,k))
1600 dkt_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1601 dkq_les(i,k)=dkt_les(i,k)
1602 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1603 dkt_les(i,k) = min(dkt_les(i,k),dkmaxles)
1604 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1611 tkemax(i) = tke(i,1)
1616 if(tke(i,k) > tkemax(i))
then
1617 tkemax(i) = tke(i,k)
1625 if(zl(i,ktkemax(i)) > sclmax)
then
1632 if(flg(i) .and. k > ktkemax(i))
then
1635 if(tke(i,k) < tem) flg(i) = .false.
1640 scl(i)=max(scl(i), sclmin)
1641 scl(i)=min(scl(i), sclmax)
1642 scl(i)=max(scl(i), hpbl(i))
1643 pfdx(i)=gdx(i)/scl(i)
1648 pfl(i)=cpl1*(pfdx(i)**2+cpl2*pfdx(i)**0.5-cpl3)/
1649 & (pfdx(i)**2+cpl4*pfdx(i)**0.5+cpl5)+cpl6
1650 pfl(i)=min(max(pfl(i),0.0),1.0)
1652 pftke(i)=(pfdx(i)**2+cptke1*pfdx(i)**(2./3.))/
1653 & (pfdx(i)**2+cptke2*pfdx(i)**(2./3.)+cptke3)
1654 pftke(i)=min(max(pftke(i),0.0),1.0)
1661 dkq(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq(i,k)
1662 dkt(i,k)=(1.0-pfl(i))*dkt_les(i,k)+pfl(i)*dkt(i,k)
1663 dku(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku(i,k)
1671 dku_h(i,k)=ckh*elmh(i,k)*sqrt(tke(i,k))
1672 dkq_h(i,k)=dku_h(i,k)
1681 dz = zl(i,k+1) - zl(i,k-1)
1682 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k-1))/dz
1685 tem=gotvx(i,k)*(thetal(i,k+1)-thvs(i))/dz
1687 dz = zi(i,k+1) - zi(i,k)
1688 tem1=(garea(i)*dz)**h1
1691 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1692 elm_les=min(elm_les,tem1)
1696 ele_les(i,k)=elm_les
1698 dku_les(i,k)=0.1*elm_les*sqrt(tke(i,k))
1699 dkq_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1700 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1701 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1707 dku_h(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku_h(i,k)
1708 dkq_h(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq_h(i,k)
1712 dku_h(i,km)=dku_h(i,km1)
1713 dkq_h(i,km)=dkq_h(i,km1)
1720 if (do_canopy .and. cplaqm)
then
1747 IF ( cfch(i) .GT. zi(i,k)
1748 & .AND. cfch(i) .LE. zi(i,k+1) )
THEN
1755 IF (kcan .EQ. 1)
THEN
1759 IF ( claie(i) .LT. 0.1
1760 & .OR. cfch(i) .LT. 0.5
1763 & .OR. max(0.0, 1.0 - cfrt(i)) .GT. 0.75
1765 & .OR. cpopu(i) .GT. 10000.0
1766 & .OR. (exp(-0.5*claie(i)*cclu(i)) .GT. 0.45
1767 & .AND. cfch(i) .LT. 18.) )
THEN
1792 mol = zol(i)/zl(i,k)
1805 DO WHILE (zcan.GE.botcan)
1807 tlcan = (fch/ustar(i)) * (
1808 & (0.256 * (zcan-(0.75*fch))/fch ) +
1809 & (0.492*exp((-0.256*zcan/fch)/0.492)) )
1810 IF ( hol .LT. -0.1 )
THEN
1811 IF ( zcan/fch .GT. 1.25 )
THEN
1812 sigmacan = 1.25*ustar(i)
1814 IF ( zcan/fch .GE. 0.175
1815 & .AND. zcan/fch .LE. 1.25 )
THEN
1816 sigmacan = ustar(i) * ( 0.75 +
1817 & (0.5 * cos((pi/1.06818) *
1818 & (1.25 - (zcan/fch)))) )
1820 IF ( zcan/fch .LT. 0.175 )
THEN
1821 sigmacan = 0.25*ustar(i)
1824 IF ( hol .GE. -0.1 .AND. hol .LT. 0.1 )
THEN
1825 IF ( zcan/fch .GT. 1.25 )
THEN
1826 sigmacan = 1.0*ustar(i)
1828 IF ( zcan/fch .GE. 0.175
1829 & .AND. zcan/fch .LE. 1.25 )
THEN
1830 sigmacan = ustar(i) * ( 0.625 +
1831 & (0.375* cos((pi/1.06818) *
1832 & (1.25 - (zcan/fch)))) )
1834 IF ( zcan/fch .LT. 0.175 )
THEN
1835 sigmacan = 0.25*ustar(i)
1838 IF ( hol .GE. 0.1 .AND. hol .LT. 0.9 )
THEN
1839 IF ( zcan/fch .GT. 1.25 )
THEN
1840 sigmacan = 0.25*(4.375 - (3.75*hol))*ustar(i)
1842 IF ( zcan/fch .GE. 0.175
1843 & .AND. zcan/fch .LE. 1.25 )
THEN
1844 rrcan=4.375-(3.75*hol)
1845 aacan=(0.125*rrcan) + 0.125
1846 bbcan=(0.125*rrcan) - 0.125
1847 sigmacan = ustar(i) * ( aacan +
1848 & (bbcan * cos((pi/1.06818) *
1849 & (1.25 - (zcan/fch)))) )
1851 IF ( zcan/fch .LT. 0.175 )
THEN
1852 sigmacan = 0.25*ustar(i)
1855 IF ( hol .GE. 0.9 )
THEN
1856 sigmacan = 0.25*ustar(i)
1858 IF ( zcan .EQ. zfl )
THEN
1859 eddyvest1 = (sigmacan*sigmacan)*tlcan
1860 ELSE IF ( zcan .LE. fch )
THEN
1861 countcan = countcan + 1
1862 zcanx(countcan) = zcan
1863 eddyvestx(countcan) = (sigmacan*sigmacan)*tlcan
1867 eddyvest_int = integratetrapezoid((zcanx(countcan:1:-1)
1868 & ),eddyvestx(countcan:1:-1)) / zfl
1869 dkt(i,k)= (dkt(i,k)/eddyvest1) * eddyvest_int
1870 dkq(i,k)= (dkq(i,k)/eddyvest1) * eddyvest_int
1871 dku(i,k)= (dku(i,k)/eddyvest1) * eddyvest_int
1898 tem1 = 0.5 * xkzmo(i,1)
1900 tem = 0.5 * (ckz(i,k-1) + ckz(i,k))
1901 tem1 = 0.5 * (xkzmo(i,k-1) + xkzmo(i,k))
1903 ptem = tem1 / (tem * elm(i,k))
1904 tkmnz(i,k) = ptem * ptem
1905 tkmnz(i,k) = min(tkmnz(i,k), tkbmx)
1906 tkmnz(i,k) = max(tkmnz(i,k), tkmin)
1917 tem = -dkt(i,1) * bf(i,1)
1923 if(scuflg(i) .and. mrad(i) == 1)
then
1924 ptem2 = xmfd(i,1) * buod(i,1)
1928 tem = tem + ptem1 + ptem2
1929 buop = 0.5 * (gotvx(i,1) * sflux(i) + tem)
1932 tem = 2. * dku_h(i,1)
1933 tem1 = dku(i,1)*def_1(i,1)+tem*def_2(i,1)
1935 tem1 = dku(i,1) * shr2(i,1)
1938 tem = (u1(i,2)-u1(i,1))*rdzt(i,1)
1945 if(scuflg(i) .and. mrad(i) == 1)
then
1946 ptem = ucdo(i,1)+ucdo(i,2)-u1(i,1)-u1(i,2)
1947 ptem = 0.5 * tem * xmfd(i,1) * ptem
1951 ptem1 = ptem1 + ptem
1953 tem = (v1(i,2)-v1(i,1))*rdzt(i,1)
1960 if(scuflg(i) .and. mrad(i) == 1)
then
1961 ptem = vcdo(i,1)+vcdo(i,2)-v1(i,1)-v1(i,2)
1962 ptem = 0.5 * tem * xmfd(i,1) * ptem
1966 ptem2 = ptem2 + ptem
1968 tem2 = stress(i)*ustar(i)*phims(i)/(vk*zl(i,1))
1969 shrp = 0.5 * (tem1 + ptem1 + ptem2 + tem2)
1971 tem1 = -dkt(i,k-1) * bf(i,k-1)
1972 tem2 = -dkt(i,k) * bf(i,k)
1973 tem = 0.5 * (tem1 + tem2)
1974 if(pcnvflg(i) .and. k <= kpbl(i))
then
1975 ptem = 0.5 * (xmf(i,k-1) + xmf(i,k))
1976 ptem1 = ptem * buou(i,k)
1981 if(k >= mrad(i) .and. k < krad(i))
then
1982 ptem0 = 0.5 * (xmfd(i,k-1) + xmfd(i,k))
1983 ptem2 = ptem0 * buod(i,k)
1990 buop = tem + ptem1 + ptem2
1994 tem2 = 2.*dku_h(i,k)
1995 tem1 = dku(i,k-1)*def_1(i,k-1)
1996 tem2 = dku(i,k)*def_1(i,k)+tem2*def_2(i,k)
1998 tem1 = dku(i,k-1) * shr2(i,k-1)
1999 tem2 = dku(i,k) * shr2(i,k)
2001 tem = 0.5 * (tem1 + tem2)
2002 tem1 = (u1(i,k+1)-u1(i,k))*rdzt(i,k)
2003 tem2 = (u1(i,k)-u1(i,k-1))*rdzt(i,k-1)
2004 if(pcnvflg(i) .and. k <= kpbl(i))
then
2005 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
2006 ptem1 = 0.5 * ptem * (u1(i,k)-ucko(i,k))
2011 if(k >= mrad(i) .and. k < krad(i))
then
2012 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
2013 ptem2 = 0.5 * ptem0 * (ucdo(i,k)-u1(i,k))
2020 shrp = tem + ptem1 + ptem2
2021 tem1 = (v1(i,k+1)-v1(i,k))*rdzt(i,k)
2022 tem2 = (v1(i,k)-v1(i,k-1))*rdzt(i,k-1)
2023 if(pcnvflg(i) .and. k <= kpbl(i))
then
2024 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
2025 ptem1 = 0.5 * ptem * (v1(i,k)-vcko(i,k))
2030 if(k >= mrad(i) .and. k < krad(i))
then
2031 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
2032 ptem2 = 0.5 * ptem0 * (vcdo(i,k)-v1(i,k))
2039 shrp = shrp + ptem1 + ptem2
2043 prod(i,k) = 2. * buop + shrp
2048 prod(i,k) = buop + shrp
2058 dtn = dt2 / float(ndt)
2064 ptem1 = ce0 / ele(i,k)
2065 dz = zi(i,k+1) - zi(i,k)
2066 tem1=(garea(i)*dz)**h1
2067 tem2=0.19+0.51*ele_les(i,k)/tem1
2068 ptem2= tem2 / ele_les(i,k)
2069 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
2070 disste = ptem * te(i,k) * tem
2071 tem1 = prod(i,k) + te(i,k) / dtn
2072 disste=max(min(disste, tem1), 0.)
2073 if(.not. tte_edmf) diss(i,k) = disste
2077 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste+tem)
2079 te(i,k) = max(te(i,k), tkmnz(i,k))
2084 dtn = dt2 / float(ndt)
2089 ptem = ce0 / ele(i,k)
2090 disste = ptem * te(i,k) * tem
2091 tem1 = prod(i,k) + te(i,k) / dtn
2092 disste = max(min(disste, tem1), 0.)
2093 if(.not. tte_edmf) diss(i,k) = disste
2094 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste)
2095 te(i,k) = max(te(i,k), tkmnz(i,k))
2107 tem = sqrt(tke(i,k))
2109 ptem1 = ce0 / ele(i,k)
2110 dz = zi(i,k+1) - zi(i,k)
2111 tem1=(garea(i)*dz)**h1
2112 tem2=0.19+0.51*ele_les(i,k)/tem1
2113 ptem2= tem2 / ele_les(i,k)
2114 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
2115 diss(i,k) = ptem * tke(i,k) * tem
2117 ptem = ce0 / ele(i,k)
2118 diss(i,k) = ptem * tke(i,k) * tem
2129 qcko(i,k,ntke) = te(i,k)
2132 qcdo(i,k,ntke) = te(i,k)
2138 if (pcnvflg(i) .and. k <= kpbl(i))
then
2139 dz = zl(i,k) - zl(i,k-1)
2140 tem = 0.5 * xlamue(i,k-1) * dz
2142 qcko(i,k,ntke)=((1.-tem)*qcko(i,k-1,ntke)+tem*
2143 & (te(i,k)+te(i,k-1)))/factor
2149 if (scuflg(i) .and. k < krad(i))
then
2150 if(k >= mrad(i))
then
2151 dz = zl(i,k+1) - zl(i,k)
2152 tem = 0.5 * xlamde(i,k) * dz
2154 qcdo(i,k,ntke)=((1.-tem)*qcdo(i,k+1,ntke)+tem*
2155 & (te(i,k)+te(i,k+1)))/factor
2165 kps = max(kmpbl, kmscu)
2172 qh(i,k,n) = 0.5 * (q1(i,k,n)+q1(i,k+1,n))
2177 q_diff(i,k,n) = q1(i,k,n) - q1(i,k+1,n)
2181 if(q1(i,1,n) >= 0.)
then
2182 q_diff(i,0,n) = max(0.,2.*q1(i,1,n)-q1(i,2,n))-
2185 q_diff(i,0,n) = min(0.,2.*q1(i,1,n)-q1(i,2,n))-
2195 kmx = max(kpbl(i), krad(i))
2196 q_half(i,k,n) = qh(i,k,n)
2197 if((pcnvflg(i) .or. scuflg(i)) .and. k < kmx)
then
2199 if(pcnvflg(i) .and. k < kpbl(i))
then
2203 & (k >= mrad(i) .and. k < krad(i)))
then
2204 tem = tem - xmfd(i,k)
2208 if(abs(q_diff(i,k,n)) > 1.e-22)
2209 & rrkp = q_diff(i,k+1,n) / q_diff(i,k,n)
2210 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2211 q_half(i,k,n) = q1(i,k+1,n) +
2212 & phkp*(qh(i,k,n)-q1(i,k+1,n))
2213 elseif (tem < 0.)
then
2215 if(abs(q_diff(i,k,n)) > 1.e-22)
2216 & rrkp = q_diff(i,k-1,n) / q_diff(i,k,n)
2217 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2218 q_half(i,k,n) = q1(i,k,n) +
2219 & phkp*(qh(i,k,n)-q1(i,k,n))
2231 tei(i,k) = 0.5 * (te(i,k)+te(i,k+1))
2237 e_diff(i,k) = te(i,k) - te(i,k+1)
2241 if(te(i,1) >= 0.)
then
2242 e_diff(i,0) = max(0.,2.*te(i,1)-te(i,2))-
2245 e_diff(i,0) = min(0.,2.*te(i,1)-te(i,2))-
2252 kmx = max(kpbl(i), krad(i))
2253 e_half(i,k) = tei(i,k)
2254 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2256 if(pcnvflg(i) .and. k < kpbl(i))
then
2260 & (k >= mrad(i) .and. k < krad(i)))
then
2261 tem = tem - xmfd(i,k)
2265 if(abs(e_diff(i,k)) > 1.e-22)
2266 & rrkp = e_diff(i,k+1) / e_diff(i,k)
2267 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2268 e_half(i,k) = te(i,k+1) +
2269 & phkp*(tei(i,k)-te(i,k+1))
2270 elseif (tem < 0.)
then
2272 if(abs(e_diff(i,k)) > 1.e-22)
2273 & rrkp = e_diff(i,k-1) / e_diff(i,k)
2274 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2275 e_half(i,k) = te(i,k) +
2276 & phkp*(tei(i,k)-te(i,k))
2292 dtodsd = dt2/del(i,k)
2293 dtodsu = dt2/del(i,k+1)
2294 dsig = prsl(i,k)-prsl(i,k+1)
2296 tem1 = dsig * dkq(i,k) * rdz
2298 au(i,k) = -dtodsd*dsdz2
2299 al(i,k) = -dtodsu*dsdz2
2300 ad(i,k) = ad(i,k)-au(i,k)
2301 ad(i,k+1)= 1.-al(i,k)
2304 if(pcnvflg(i) .and. k < kpbl(i))
then
2305 ptem = 0.5 * tem2 * xmf(i,k)
2306 ptem1 = dtodsd * ptem
2307 ptem2 = dtodsu * ptem
2308 ptem = qcko(i,k,ntke) + qcko(i,k+1,ntke)
2309 f1(i,k) = f1(i,k) - ptem * ptem1
2310 f1(i,k+1) = te(i,k+1) + ptem * ptem2
2312 f1(i,k+1) = te(i,k+1)
2316 if(k >= mrad(i) .and. k < krad(i))
then
2317 ptem = 0.5 * tem2 * xmfd(i,k)
2318 ptem1 = dtodsd * ptem
2319 ptem2 = dtodsu * ptem
2320 ptem = qcdo(i,k,ntke) + qcdo(i,k+1,ntke)
2321 f1(i,k) = f1(i,k) + ptem * ptem1
2322 f1(i,k+1) = f1(i,k+1) - ptem * ptem2
2326 kmx = max(kpbl(i), krad(i))
2327 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2328 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2329 ptem1 = dtodsd * ptem
2330 ptem2 = dtodsu * ptem
2331 f1(i,k) = f1(i,k) + e_half(i,k) * ptem1
2332 f1(i,k+1) = f1(i,k+1) - e_half(i,k) * ptem2
2340 call tridit(im,km,1,al,ad,au,f1,au,f1)
2352 if(pcnvflg(i) .and. scuflg(i))
then
2354 kmx = max(kpbl(i), krad(i))
2355 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2358 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2362 if((pcnvflg(i) .or. scuflg(i)) .and.
2363 & (k >= kbx .and. k <= kmx))
then
2364 tem = f1(i,k) * del(i,k) * gravi
2365 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2366 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2371 if(pcnvflg(i) .or. scuflg(i))
then
2372 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2373 if(tsump(i) > abs(tsumn(i)))
then
2374 rtnp(i) = tsumn(i) / tsump(i)
2376 rtnp(i) = tsump(i) / tsumn(i)
2383 if(pcnvflg(i) .and. scuflg(i))
then
2385 kmx = max(kpbl(i), krad(i))
2386 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2389 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2393 if((pcnvflg(i) .or. scuflg(i)) .and.
2394 & (k >= kbx .and. k <= kmx))
then
2395 if(rtnp(i) < 0.)
then
2396 if(tsump(i) > abs(tsumn(i)))
then
2397 if(f1(i,k) < 0.) f1(i,k) = 0.
2398 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2400 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2401 if(f1(i,k) > 0.) f1(i,k) = 0.
2419 tem = f1(i,k) * del(i,k) * gravi
2420 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2421 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2425 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2426 if(tsump(i) > abs(tsumn(i)))
then
2427 rtnp(i) = tsumn(i) / tsump(i)
2429 rtnp(i) = tsump(i) / tsumn(i)
2435 if(rtnp(i) < 0.)
then
2436 if(tsump(i) > abs(tsumn(i)))
then
2437 if(f1(i,k) < 0.) f1(i,k) = 0.
2438 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2440 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2441 if(f1(i,k) > 0.) f1(i,k) = 0.
2452 qtend = (f1(i,k)-q1(i,k,ntke))*rdt
2453 rtg(i,k,ntke) = rtg(i,k,ntke)+qtend
2457 idtend = dtidx(ntke+100,index_of_process_pbl)
2459 dtend(1:im,1:km,idtend) = dtend(1:im,1:km,idtend) + &
2460 & (f1(1:im,1:km)-q1(1:im,1:km,ntke))*rdt
2468 f1(i,1) = t1(i,1) + dtdz1(i) * heat(i)
2469 f2(i,1) = q1(i,1,1) + dtdz1(i) * evap(i)
2471 if(ntrac1 >= 2)
then
2475 f2(i,1+is) = q1(i,1,n)
2482 dtodsd = dt2/del(i,k)
2483 dtodsu = dt2/del(i,k+1)
2484 dsig = prsl(i,k)-prsl(i,k+1)
2486 tem1 = dsig * dkt(i,k) * rdz
2488 if (use_lpt > 0)
then
2489 dsdzt = dsdzt-tem1*elocp*(qliq(i,k+1)-qliq(i,k))*rdz
2490 & -(1+0.33/2.5)*tem1*elocp*(qice(i,k+1)-qice(i,k))*rdz
2493 au(i,k) = -dtodsd*dsdz2
2494 al(i,k) = -dtodsu*dsdz2
2495 ad(i,k) = ad(i,k)-au(i,k)
2496 ad(i,k+1)= 1.-al(i,k)
2499 if(pcnvflg(i) .and. k < kpbl(i))
then
2500 ptem = 0.5 * tem2 * xmf(i,k)
2501 ptem1 = dtodsd * ptem
2502 ptem2 = dtodsu * ptem
2503 tem = t1(i,k) + t1(i,k+1)
2504 ptem = tcko(i,k) + tcko(i,k+1)
2505 f1(i,k) = f1(i,k)+dtodsd*dsdzt-(ptem-tem)*ptem1
2506 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt+(ptem-tem)*ptem2
2507 ptem = qcko(i,k,1) + qcko(i,k+1,1)
2508 f2(i,k) = f2(i,k) - ptem * ptem1
2509 f2(i,k+1) = q1(i,k+1,1) + ptem * ptem2
2511 f1(i,k) = f1(i,k)+dtodsd*dsdzt
2512 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt
2513 f2(i,k+1) = q1(i,k+1,1)
2517 if(k >= mrad(i) .and. k < krad(i))
then
2518 ptem = 0.5 * tem2 * xmfd(i,k)
2519 ptem1 = dtodsd * ptem
2520 ptem2 = dtodsu * ptem
2521 ptem = tcdo(i,k) + tcdo(i,k+1)
2522 tem = t1(i,k) + t1(i,k+1)
2523 f1(i,k) = f1(i,k) + (ptem - tem) * ptem1
2524 f1(i,k+1) = f1(i,k+1) - (ptem - tem) * ptem2
2525 ptem = qcdo(i,k,1) + qcdo(i,k+1,1)
2526 f2(i,k) = f2(i,k) + ptem * ptem1
2527 f2(i,k+1) = f2(i,k+1) - ptem * ptem2
2531 kmx = max(kpbl(i), krad(i))
2532 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2533 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2534 ptem1 = dtodsd * ptem
2535 ptem2 = dtodsu * ptem
2536 f2(i,k) = f2(i,k) + q_half(i,k,1) * ptem1
2537 f2(i,k+1) = f2(i,k+1) - q_half(i,k,1) * ptem2
2543 if(ntrac1 >= 2)
then
2548 dtodsd = dt2/del(i,k)
2549 dtodsu = dt2/del(i,k+1)
2550 dsig = prsl(i,k)-prsl(i,k+1)
2551 tem2 = dsig * rdzt(i,k)
2553 if(pcnvflg(i) .and. k < kpbl(i))
then
2554 ptem = 0.5 * tem2 * xmf(i,k)
2555 ptem1 = dtodsd * ptem
2556 ptem2 = dtodsu * ptem
2557 ptem = qcko(i,k,n) + qcko(i,k+1,n)
2558 f2(i,k+is) = f2(i,k+is) - ptem * ptem1
2559 f2(i,k+1+is)= q1(i,k+1,n) + ptem * ptem2
2561 f2(i,k+1+is) = q1(i,k+1,n)
2565 if(k >= mrad(i) .and. k < krad(i))
then
2566 ptem = 0.5 * tem2 * xmfd(i,k)
2567 ptem1 = dtodsd * ptem
2568 ptem2 = dtodsu * ptem
2569 ptem = qcdo(i,k,n) + qcdo(i,k+1,n)
2570 f2(i,k+is) = f2(i,k+is) + ptem * ptem1
2571 f2(i,k+1+is)= f2(i,k+1+is) - ptem * ptem2
2575 kmx = max(kpbl(i), krad(i))
2576 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2577 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2578 ptem1 = dtodsd * ptem
2579 ptem2 = dtodsu * ptem
2580 f2(i,k+is) = f2(i,k+is) + q_half(i,k,n) * ptem1
2581 f2(i,k+1+is) = f2(i,k+1+is) - q_half(i,k,n) * ptem2
2591 call tridin(im,km,ntrac1,al,ad,au,f1,f2,au,f1,f2)
2603 if(pcnvflg(i) .and. scuflg(i))
then
2605 kmx = max(kpbl(i), krad(i))
2606 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2609 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2613 if((pcnvflg(i) .or. scuflg(i)) .and.
2614 & (k >= kbx .and. k <= kmx))
then
2615 tem = f2(i,k) * del(i,k) * gravi
2616 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2617 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2622 if(pcnvflg(i) .or. scuflg(i))
then
2623 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2624 if(tsump(i) > abs(tsumn(i)))
then
2625 rtnp(i) = tsumn(i) / tsump(i)
2627 rtnp(i) = tsump(i) / tsumn(i)
2634 if(pcnvflg(i) .and. scuflg(i))
then
2636 kmx = max(kpbl(i), krad(i))
2637 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2640 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2644 if((pcnvflg(i) .or. scuflg(i)) .and.
2645 & (k >= kbx .and. k <= kmx))
then
2646 if(rtnp(i) < 0.)
then
2647 if(tsump(i) > abs(tsumn(i)))
then
2648 if(f2(i,k) < 0.) f2(i,k) = 0.
2649 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2651 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2652 if(f2(i,k) > 0.) f2(i,k) = 0.
2671 tem = f2(i,k) * del(i,k) * gravi
2672 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2673 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2677 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2678 if(tsump(i) > abs(tsumn(i)))
then
2679 rtnp(i) = tsumn(i) / tsump(i)
2681 rtnp(i) = tsump(i) / tsumn(i)
2687 if(rtnp(i) < 0.)
then
2688 if(tsump(i) > abs(tsumn(i)))
then
2689 if(f2(i,k) < 0.) f2(i,k) = 0.
2690 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2692 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2693 if(f2(i,k) > 0.) f2(i,k) = 0.
2707 if(ntrac1 >= 2)
then
2711 if(pcnvflg(i) .and. scuflg(i))
then
2713 kmx = max(kpbl(i), krad(i))
2714 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2717 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2721 if((pcnvflg(i) .or. scuflg(i)) .and.
2722 & (k >= kbx .and. k <= kmx))
then
2723 if(f2(i,k+is) < 0.)
then
2724 tem = f2(i,k) + f2(i,k+is)
2727 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2729 elseif (f2(i,k) > 0.0)
then
2731 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2744 if(ntrac1 >= 2 .and. ntrw > 0)
then
2748 if(pcnvflg(i) .and. scuflg(i))
then
2750 kmx = max(kpbl(i), krad(i))
2751 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2754 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2758 if((pcnvflg(i) .or. scuflg(i)) .and.
2759 & (k >= kbx .and. k <= kmx))
then
2760 if(f2(i,k+is) < 0.)
then
2761 tem = f2(i,k) + f2(i,k+is)
2764 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2766 elseif (f2(i,k) > 0.0)
then
2768 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2777 if(ntrac1 >= 2)
then
2788 if(pcnvflg(i) .and. scuflg(i))
then
2790 kmx = max(kpbl(i), krad(i))
2791 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2794 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2798 if((pcnvflg(i) .or. scuflg(i)) .and.
2799 & (k >= kbx .and. k <= kmx))
then
2800 tem = f2(i,k+is) * del(i,k) * gravi
2801 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2802 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2807 if(pcnvflg(i) .or. scuflg(i))
then
2808 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2809 if(tsump(i) > abs(tsumn(i)))
then
2810 rtnp(i) = tsumn(i) / tsump(i)
2812 rtnp(i) = tsump(i) / tsumn(i)
2819 if(pcnvflg(i) .and. scuflg(i))
then
2821 kmx = max(kpbl(i), krad(i))
2822 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2825 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2829 if((pcnvflg(i) .or. scuflg(i)) .and.
2830 & (k >= kbx .and. k <= kmx))
then
2831 if(rtnp(i) < 0.)
then
2832 if(tsump(i) > abs(tsumn(i)))
then
2833 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2834 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2836 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2837 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2856 tem = f2(i,k+is) * del(i,k) * gravi
2857 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2858 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2862 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2863 if(tsump(i) > abs(tsumn(i)))
then
2864 rtnp(i) = tsumn(i) / tsump(i)
2866 rtnp(i) = tsump(i) / tsumn(i)
2872 if(rtnp(i) < 0.)
then
2873 if(tsump(i) > abs(tsumn(i)))
then
2874 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2875 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2877 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2878 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2891 ttend = (f1(i,k)-t1(i,k))*rdt
2892 qtend = (f2(i,k)-q1(i,k,1))*rdt
2893 tdt(i,k) = tdt(i,k)+ttend
2894 rtg(i,k,1) = rtg(i,k,1)+qtend
2901 dtsfc(i) = rho_a(i) * cp * heat(i)
2902 dqsfc(i) = rho_a(i) * hvap * evap(i)
2905 if(ldiag3d .and. .not. gen_tend)
then
2906 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2910 ttend = (f1(i,k)-t1(i,k))*rdt
2911 dtend(i,k,idtend) = dtend(i,k,idtend)+ttend*delt
2916 idtend = dtidx(100+ntqv,index_of_process_pbl)
2920 qtend = (f2(i,k)-q1(i,k,1))*rdt
2921 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2927 if(ntrac1 >= 2)
then
2932 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2933 rtg(i,k,n) = rtg(i,k,n)+qtend
2937 if(ldiag3d .and. .not. gen_tend)
then
2941 idtend = dtidx(n+100,index_of_process_pbl)
2946 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2947 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2963 ttend = diss(i,k) / cp
2964 tdt(i,k) = tdt(i,k) + dspfac * ttend
2967 if(ldiag3d .and. .not. gen_tend)
then
2968 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2972 ttend = diss(i,k) / cp
2973 dtend(i,k,idtend) = dtend(i,k,idtend)+dspfac*ttend*delt
2983 ad(i,1) = 1.0 + dtdz1(i) * stress(i) / spd1(i)
2990 dtodsd = dt2/del(i,k)
2991 dtodsu = dt2/del(i,k+1)
2992 dsig = prsl(i,k)-prsl(i,k+1)
2994 tem1 = dsig * dku(i,k) * rdz
2996 au(i,k) = -dtodsd*dsdz2
2997 al(i,k) = -dtodsu*dsdz2
2998 ad(i,k) = ad(i,k)-au(i,k)
2999 ad(i,k+1)= 1.-al(i,k)
3002 if(pcnvflg(i) .and. k < kpbl(i))
then
3003 ptem = 0.5 * tem2 * xmf(i,k)
3004 ptem1 = dtodsd * ptem
3005 ptem2 = dtodsu * ptem
3006 tem = u1(i,k) + u1(i,k+1)
3007 ptem = ucko(i,k) + ucko(i,k+1)
3008 f1(i,k) = f1(i,k) - (ptem - tem) * ptem1
3009 f1(i,k+1) = u1(i,k+1) + (ptem - tem) * ptem2
3010 tem = v1(i,k) + v1(i,k+1)
3011 ptem = vcko(i,k) + vcko(i,k+1)
3012 f2(i,k) = f2(i,k) - (ptem - tem) * ptem1
3013 f2(i,k+1) = v1(i,k+1) + (ptem - tem) * ptem2
3015 f1(i,k+1) = u1(i,k+1)
3016 f2(i,k+1) = v1(i,k+1)
3020 if(k >= mrad(i) .and. k < krad(i))
then
3021 ptem = 0.5 * tem2 * xmfd(i,k)
3022 ptem1 = dtodsd * ptem
3023 ptem2 = dtodsu * ptem
3024 tem = u1(i,k) + u1(i,k+1)
3025 ptem = ucdo(i,k) + ucdo(i,k+1)
3026 f1(i,k) = f1(i,k) + (ptem - tem) *ptem1
3027 f1(i,k+1) = f1(i,k+1) - (ptem - tem) *ptem2
3028 tem = v1(i,k) + v1(i,k+1)
3029 ptem = vcdo(i,k) + vcdo(i,k+1)
3030 f2(i,k) = f2(i,k) + (ptem - tem) * ptem1
3031 f2(i,k+1) = f2(i,k+1) - (ptem - tem) * ptem2
3040 call tridi2(im,km,al,ad,au,f1,f2,au,f1,f2)
3046 utend = (f1(i,k)-u1(i,k))*rdt
3047 vtend = (f2(i,k)-v1(i,k))*rdt
3048 du(i,k) = du(i,k)+utend
3049 dv(i,k) = dv(i,k)+vtend
3054 if (use_oceanuv)
then
3056 spd1_m=sqrt( (u1(i,1)-usfco(i))**2+(v1(i,1)-vsfco(i))**2 )
3057 dusfc(i) = -1.*rho_a(i)*stress(i)*(u1(i,1)-usfco(i))/spd1_m
3058 dvsfc(i) = -1.*rho_a(i)*stress(i)*(v1(i,1)-vsfco(i))/spd1_m
3062 dusfc(i) = -1.*rho_a(i)*stress(i)*u1(i,1)/spd1(i)
3063 dvsfc(i) = -1.*rho_a(i)*stress(i)*v1(i,1)/spd1(i)
3067 if(ldiag3d .and. .not. gen_tend)
then
3068 idtend = dtidx(index_of_x_wind,index_of_process_pbl)
3072 utend = (f1(i,k)-u1(i,k))*rdt
3073 dtend(i,k,idtend) = dtend(i,k,idtend) + utend*delt
3078 idtend = dtidx(index_of_y_wind,index_of_process_pbl)
3082 vtend = (f2(i,k)-v1(i,k))*rdt
3083 dtend(i,k,idtend) = dtend(i,k,idtend) + vtend*delt
3099 dku3d_h(i,k) = dku_h(i,k)
3100 dku3d_e(i,k) = dkq_h(i,k)