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 & 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 & do_canopy, cplaqm, claie, cfch, cfrt, cclu, cpopu, &
102 & ntqv,dtend,dtidx,index_of_temperature,index_of_x_wind, &
103 & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d, &
104 & ten_t, ten_u, ten_v, &
108 use machine ,
only : kind_phys
109 use funcphys ,
only : fpvs
114 integer,
intent(in) :: im, km, ntrac, ntcw, ntrw, ntiw, &
116 integer,
intent(in) :: sfc_rlm
117 integer,
intent(in) :: tc_pbl
118 integer,
intent(in) :: use_lpt
119 integer,
intent(in) :: kinver(:)
120 integer,
intent(out) :: kpbl(:)
121 logical,
intent(in) :: gen_tend,ldiag3d
123 real(kind=kind_phys),
intent(in) :: grav,pi,rd,cp,rv,hvap,hfus,fv, &
125 real(kind=kind_phys),
intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s
126 real(kind=kind_phys),
intent(in) :: dspfac, bl_upfr, bl_dnfr
127 real(kind=kind_phys),
intent(in) :: rlmx, elmx
129 logical,
intent(in) :: do_canopy, cplaqm
130 real(kind=kind_phys),
optional,
intent(in) :: claie(:), cfch(:), &
131 & cfrt(:), cclu(:), cpopu(:)
133 real(kind=kind_phys),
intent(inout) :: rtg(:,:,:), tkeh(:,:)
134 real(kind=kind_phys),
intent(in) :: &
135 & u1(:,:), v1(:,:), &
136 & usfco(:), vsfco(:), &
137 & t1(:,:), q1(:,:,:), &
139 & def_1(:,:), def_2(:,:), def_3(:,:), &
140 & swh(:,:), hlw(:,:), &
141 & xmu(:), garea(:), &
142 & zvfun(:), sigmaf(:), &
143 & psk(:), rbsoil(:), &
144 & zorl(:), tsea(:), &
145 & u10m(:), v10m(:), &
147 & evap(:), heat(:), &
148 & stress(:), spd1(:), &
149 & prsi(:,:), del(:,:), &
150 & prsl(:,:), prslk(:,:), &
151 & phii(:,:), phil(:,:)
152 real(kind=kind_phys),
intent(inout),
dimension(:,:,:),
optional ::&
154 integer,
intent(in) :: dtidx(:,:), index_of_temperature, &
155 & index_of_x_wind, index_of_y_wind, index_of_process_pbl
156 logical,
intent(in) :: use_oceanuv
157 real(kind=kind_phys),
intent(out) :: &
158 & dusfc(:), dvsfc(:), &
159 & dtsfc(:), dqsfc(:), &
161 real(kind=kind_phys),
intent(out) :: &
165 logical,
intent(in) :: sa3dtke
168 logical,
intent(in) :: dspheat
169 real(kind=kind_phys),
intent(out) :: ten_t(:,:), &
170 & ten_u(:,:), ten_v(:,:)
172 logical,
intent(in) :: tte_edmf
174 character(len=*),
intent(out) :: errmsg
175 integer,
intent(out) :: errflg
178 real(kind=kind_phys),
intent(out) ::
179 & dku3d_h(:,:),dku3d_e(:,:)
185 real(kind=kind_phys) spd1_m
187 integer i,is,k,n,ndt,km1,kmpbl,kmscu,ntrac1,idtend
189 integer lcld(im),kcld(im),krad(im),mrad(im)
190 integer kx1(im), kb1(im), kpblx(im)
192 real(kind=kind_phys) te(im,km), tei(im,km-1), tke(im,km),
193 & tteh(im,km), tesq(im,km-1),e2(im,0:km)
195 real(kind=kind_phys) theta(im,km),thvx(im,km), thlvx(im,km),
196 & qlx(im,km), thetae(im,km),thlx(im,km),
197 & slx(im,km), svx(im,km), qtx(im,km),
198 & tvx(im,km), pix(im,km), radx(im,km-1),
201 real(kind=kind_phys) plyr(im,km), rhly(im,km), cfly(im,km),
204 real(kind=kind_phys) dtdz1(im), gdx(im),
205 & phih(im), phim(im), phihs(im),
206 & phims(im), prn(im,km-1),
207 & rbdn(im), rbup(im), thermal(im),
208 & ustar(im), wstar(im), hpblx(im),
209 & ust3(im), wst3(im), rho_a(im),
210 & z0(im), crb(im), tkemean(im),
211 & hgamt(im), hgamq(im),
212 & wscale(im),vpert(im), thvs(im),
213 & zol(im), sflux(im), ris(im),
214 & sumx(im), tx1(im), tx2(im)
216 real(kind=kind_phys) radmin(im)
218 real(kind=kind_phys) zi(im,km+1), zl(im,km), zm(im,km),
219 & xkzo(im,km-1),xkzmo(im,km-1),
220 & xkzm_hx(im), xkzm_mx(im), tkmnz(im,km-1),
221 & rdzt(im,km-1),rlmnz(im,km),
222 & al(im,km-1), ad(im,km), au(im,km-1),
223 & f1(im,km), f2(im,km*(ntrac-1))
225 real(kind=kind_phys) elm(im,km), ele(im,km),
226 & ckz(im,km), chz(im,km),
227 & diss(im,km-1),prod(im,km-1),
228 & bf(im,km-1), shr2(im,km-1), wush(im,km),
229 & xlamue(im,km-1), xlamde(im,km-1),
230 & gotvx(im,km), rlam(im,km-1)
234 real(kind=kind_phys) tcko(im,km), qcko(im,km,ntrac),
235 & ucko(im,km), vcko(im,km),
236 & buou(im,km), xmf(im,km)
240 real(kind=kind_phys) tcdo(im,km), qcdo(im,km,ntrac),
241 & ucdo(im,km), vcdo(im,km),
242 & buod(im,km), xmfd(im,km)
246 real(kind=kind_phys) e_half(im,km-1), e_diff(im,0:km-1),
247 & q_half(im,km-1,ntrac-1),
248 & qh(im,km-1,ntrac-1),
249 & q_diff(im,0:km-1,ntrac-1)
250 real(kind=kind_phys) rrkp, phkp
251 real(kind=kind_phys) tsumn(im), tsump(im), rtnp(im)
252 real(kind=kind_phys) sfcpbl(im), vez0fun(im)
254 logical pblflg(im), sfcflg(im), flg(im)
255 logical scuflg(im), pcnvflg(im)
260 real(kind=kind_phys) aphi16, aphi5,
262 & gamcrt, gamcrq, sfcfrac,
264 & dsdz2, dsdzt, dkmax,
266 & dtodsu, g, factor, dz,
267 & gocp, gravi, zol1, zolcru,
269 & prnum, prmax, prmin, prtke,
272 & elmfac, elefac, dspmax,
274 & f0, robn, crbmin, crbmax,
275 & es, qs,
value, onemrh,
276 & cfh, gamma, elocp, el2orc,
277 & epsi, beta, chx, cqx,
278 & rdt, rdz, qmin, qlmin,
279 & rimin, rbcr, rbint, tdzmin,
280 & rlmn, rlmn0, rlmn1, rlmn2,
282 & zfac, zfmin, vk, spdk2,
283 & tkmin, tkbmx, disste, xkgdx,
285 & zlup, zldn, cs0, csmf,
286 & tem, tem1, tem2, tem3,
287 & ptem, ptem0, ptem1, ptem2
291 real(kind=kind_phys) thetal(im,km),dku_les(im,km),dkt_les(im,km),
292 & elmh(im,km),ele_les(im,km),pftke(im),
293 & dkq_les(im,km),pfl(im),pfdx(im),
294 & dku_h(im,km),dkq_h(im,km),
295 & elmhfac,elmhmx,ckh,elm_les,
296 & cpl1,cpl2,cpl3,cpl4,cpl5,cpl6,
297 & cptke1,cptke2,cptke3
299 real(kind=kind_phys) tkemax(im),scl(im)
300 real(kind=kind_phys) sclmax,sclmin,dkmaxles
303 real(kind=kind_phys) slfac
305 real(kind=kind_phys) vegflo, vegfup, z0lo, z0up, vc0, zc0
307 real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck
310 real(kind=kind_phys) epotte
312 real(kind=kind_phys) qlcr, zstblmax, hcrinv
314 real(kind=kind_phys) h1
316 real(kind=kind_phys) bfac, mffac
318 real(kind=kind_phys) qice(im,km),qliq(im,km)
321 integer COUNTCAN,KCAN
323 real(kind=kind_phys) fch, mol, hol, tlcan,
324 & sigmacan, rrcan, bbcan,
325 & aacan, zcan, zfl, botcan,
327 & eddyvest1, eddyvest_int
330 real(kind=kind_phys),
allocatable :: eddyvestx( : )
332 real(kind=kind_phys),
allocatable :: zcanx( : )
333 real(kind=kind_phys),
allocatable :: zooox( : )
335 integer,
parameter :: MAXCAN = 1000
336 integer,
parameter :: mvt = 30
338 real :: fch_table(mvt)
339 data ( fch_table(i),i=1,mvt) /
340 & 20.0, 20.0, 18.0, 16.0, 16.0, 1.10,
341 & 1.10, 13.0, 10.0, 1.00, 5.00, 2.00,
342 & 15.0, 1.50, 0.00, 0.00, 0.00, 4.00,
343 & 2.00, 0.50, 0.00, 0.00, 0.00, 0.00,
344 & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /
348 parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1)
349 parameter(vk=0.4,rimin=-100.,slfac=0.1)
350 parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3)
351 parameter(rlmn=30.,rlmn0=5.,rlmn1=5.,rlmn2=10.)
352 parameter(prmin=0.25)
353 parameter(pr0=1.0,prtke=1.0)
354 parameter(f0=1.e-4,crbmin=0.15,crbmax=0.35)
355 parameter(tkmin=1.e-9,tkbmx=0.2,dspmax=10.0)
356 parameter(qmin=1.e-8,qlmin=1.e-12,zfmin=1.e-8)
357 parameter(aphi5=5.,aphi16=16.)
358 parameter(elmfac=1.0,elefac=1.0,cql=100.)
359 parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=1000.)
360 parameter(qlcr=3.5e-5,zstblmax=2500.)
361 parameter(xkinv1=0.15,xkinv2=0.3)
362 parameter(h1=0.33333333,hcrinv=250.)
363 parameter(vegflo=0.1,vegfup=1.0,z0lo=0.1,z0up=1.0)
364 parameter(vc0=1.0,zc0=1.0)
365 parameter(cs0=0.4,csmf=0.5)
366 parameter(rchck=1.5,ndt=20)
368 parameter(cpl1=0.280,cpl2=0.870,cpl3=0.913)
369 parameter(cpl4=0.153,cpl5=0.278,cpl6=0.720)
370 parameter(cptke1=0.07,cptke2=0.142,cptke3=0.071)
371 parameter(dkmaxles=300.0,sclmin=500.,sclmax=2500.)
372 parameter(elmhfac=1.5,elmhmx=1000.,ckh=0.4)
376 if(.not.
allocated(eddyvestx))
377 &
allocate( eddyvestx( maxcan ) )
378 if(.not.
allocated(zcanx))
379 &
allocate( zcanx( maxcan ) )
380 if(.not.
allocated(zooox))
381 &
allocate( zooox( maxcan ) )
384 if (tc_pbl == 0)
then
388 else if (tc_pbl == 1)
then
412 el2orc = hvap * hvap / (rv * cp)
434 zi(i,k) = phii(i,k) * gravi
435 zl(i,k) = phil(i,k) * gravi
447 zi(i,km+1) = phii(i,km+1) * gravi
456 gdx(i) = sqrt(garea(i))
462 te(i,k) = max(q1(i,k,ntke), tkmin)
470 tteh(i,k) = 0.5 * (te(i,k) + te(i,k+1))
481 tkeh(i,k) = 0.5 * (tke(i,k) + tke(i,k+1))
488 rdzt(i,k) = 1.0 / (zl(i,k+1) - zl(i,k))
506 tx1(i) = 1.0 / prsi(i,1)
508 if(gdx(i) >= xkgdx)
then
513 xkzm_hx(i) = xkzm_h * tem
514 xkzm_mx(i) = xkzm_m * tem
521 if (k < kinver(i))
then
523 ptem = prsi(i,k+1) * tx1(i)
525 tem2 = tem1 * tem1 * 2.5
526 tem2 = min(1.0, exp(-tem2))
527 rlmnz(i,k)= rlmn * tem2
528 rlmnz(i,k)= max(rlmnz(i,k), rlmn0)
530 tem2 = tem1 * tem1 * 10.0
531 tem2 = min(1.0, exp(-tem2))
532 xkzo(i,k) = xkzm_hx(i) * tem2
535 if (ptem >= xkzm_s)
then
536 xkzmo(i,k) = xkzm_mx(i)
539 if (k == kx1(i) .and. k > 1) tx2(i) = 1.0 / prsi(i,k)
540 tem1 = 1.0 - prsi(i,k+1) * tx2(i)
541 tem1 = tem1 * tem1 * 5.0
542 xkzmo(i,k) = xkzm_mx(i) * min(1.0, exp(-tem1))
550 z0(i) = 0.01 * zorl(i)
551 rho_a(i) = prsl(i,1)/(rd*t1(i,1)*(1.+fv*max(q1(i,1,1),qmin)))
564 if(rbsoil(i) > 0.) sfcflg(i) = .false.
581 tem = (sigmaf(i) - vegflo) / (vegfup - vegflo)
582 tem = min(max(tem, 0.), 1.)
584 ptem = (z0(i) - z0lo) / (z0up - z0lo)
585 ptem = min(max(ptem, 0.), 1.)
586 vez0fun(i) = (1. + vc0 * tem1) * (1. + zc0 * ptem)
593 pix(i,k) = psk(i) / prslk(i,k)
594 theta(i,k) = t1(i,k) * pix(i,k)
598 tem = max(q1(i,k,ntcw),qlmin)
601 tem1=max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
604 tem1=max(q1(i,k,ntiw),qlmin)
607 qlx(i,k) = tem + tem1
608 ptem = hvap*tem + (hvap+hfus)*tem1
609 slx(i,k) = cp * t1(i,k) + phil(i,k) - ptem
611 qlx(i,k) = max(q1(i,k,ntcw),qlmin)
612 slx(i,k) = cp * t1(i,k) + phil(i,k) - hvap*qlx(i,k)
615 tem2 = 1.+fv*max(q1(i,k,1),qmin)-qlx(i,k)
616 thvx(i,k) = theta(i,k) * tem2
617 tvx(i,k) = t1(i,k) * tem2
618 qtx(i,k) = max(q1(i,k,1),qmin)+qlx(i,k)
619 thlx(i,k) = theta(i,k) - pix(i,k)*elocp*qlx(i,k)
620 thlvx(i,k) = thlx(i,k) * (1. + fv * qtx(i,k))
621 svx(i,k) = cp * tvx(i,k)
622 ptem1 = elocp * pix(i,k) * max(q1(i,k,1),qmin)
623 thetae(i,k)= theta(i,k) + ptem1
625 gotvx(i,k) = g / thvx(i,k)
633 plyr(i,k) = 0.01 * prsl(i,k)
635 es = 0.01 * fpvs(t1(i,k))
636 qs = max(qmin, eps * es / (plyr(i,k) + epsm1*es))
637 rhly(i,k) = max(0.0, min(1.0, max(qmin, q1(i,k,1))/qs))
645 clwt = 1.0e-6 * (plyr(i,k)*0.001)
646 if (qlx(i,k) > clwt)
then
647 onemrh = max(1.e-10, 1.0-rhly(i,k))
648 tem1 = min(max((onemrh*qstl(i,k))**0.49,0.0001),1.0)
650 value = max(min( tem1*qlx(i,k), 50.0), 0.0)
651 tem2 = sqrt(sqrt(rhly(i,k)))
652 cfly(i,k) = min(max(tem2*(1.0-exp(-
value)), 0.0), 1.0)
661 tem = 0.5 * (svx(i,k) + svx(i,k+1))
662 tem1 = 0.5 * (t1(i,k) + t1(i,k+1))
663 tem2 = 0.5 * (qstl(i,k) + qstl(i,k+1))
664 cfh = min(cfly(i,k+1),0.5*(cfly(i,k)+cfly(i,k+1)))
666 gamma = el2orc * tem2 / (tem1**2)
668 beta = (1. + gamma*epsi*(1.+fv)) / (1. + gamma)
669 chx = cfh * alp * beta + (1. - cfh) * alp
670 cqx = cfh * alp * hvap * (beta - epsi)
671 cqx = cqx + (1. - cfh) * fv * g
672 ptem1 = (slx(i,k+1)-slx(i,k))*rdzt(i,k)
673 ptem2 = (qtx(i,k+1)-qtx(i,k))*rdzt(i,k)
674 bf(i,k) = chx * ptem1 + cqx * ptem2
691 tem = zi(i,k+1)-zi(i,k)
692 radx(i,k) = tem*(swh(i,k)*xmu(i)+hlw(i,k))
699 sflux(i) = heat(i) + evap(i)*fv*theta(i,1)
700 if(.not.sfcflg(i) .or. sflux(i) <= 0.) pblflg(i)=.false.
721 thvs(i) = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
724 thermal(i) = thlvx(i,1)
728 tem = sqrt(u10m(i)**2+v10m(i)**2)
730 robn = tem / (f0 * z0(i))
732 crb(i) = 0.16 * (tem1 ** (-0.18))
733 crb(i) = max(min(crb(i), crbmax), crbmin)
738 dtdz1(i) = dt2 / (zi(i,2)-zi(i,1))
742 ustar(i) = sqrt(stress(i))
752 dw2 = (u1(i,k)-u1(i,k+1))**2
753 & + (v1(i,k)-v1(i,k+1))**2
754 shr2(i,k) = max(dw2,dw2min)*rdz*rdz
774 if (tc_pbl == 0)
then
775 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
778 rbup(i) = (thlvx(i,k)-thermal(i))*
779 & (g*zl(i,k)/thlvx(i,1))/spdk2
780 else if (tc_pbl == 1)
then
781 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
783 rbup(i) = (thlvx(i,k)-thermal(i))*
784 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
787 flg(i) = rbup(i) > crb(i)
795 if(kpblx(i) > 1)
then
797 if(rbdn(i) >= crb(i))
then
799 elseif(rbup(i) <= crb(i))
then
802 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
804 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
805 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
812 if(kpbl(i) <= 1) pblflg(i)=.false.
818 sfcpbl(i) = slfac * hpbl(i)
827 if (flg(i) .and. zl(i,k) <= sfcpbl(i))
then
835 if(pblflg(i)) kb1(i)=min(kb1(i),kpbl(i))
842 if(pblflg(i) .and. kb1(i) > 1)
then
846 thermal(i) = thlvx(i,kb1(i))
848 hpblx(i) = zl(i,kb1(i))
853 if(.not.flg(i) .and. k > kb1(i))
then
855 if (tc_pbl == 0)
then
856 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
859 rbup(i) = (thlvx(i,k)-thermal(i))*
860 & (g*zl(i,k)/thlvx(i,1))/spdk2
861 else if (tc_pbl == 1)
then
862 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
864 rbup(i) = (thlvx(i,k)-thermal(i))*
865 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
868 flg(i) = rbup(i) > crb(i)
873 if(pblflg(i) .and. kb1(i) > 1)
then
875 if(rbdn(i) >= crb(i))
then
877 elseif(rbup(i) <= crb(i))
then
880 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
882 hpblx(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
883 if(hpblx(i) < zi(i,kpblx(i))) kpblx(i)=kpblx(i)-1
889 if(.not.tte_edmf)
then
900 dz = zi(i,k+1) - zi(i,k)
901 tkemean(i) = tkemean(i) + tke(i,k) * dz
902 sumx(i) = sumx(i) + dz
907 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
908 tkemean(i) = tkemean(i) / sumx(i)
917 kps = max(kmpbl, kmscu)
920 dz = zi(i,k+1) - zi(i,k)
921 tem = (0.5*(u1(i,k-1)-u1(i,k+1))/dz)**2
922 tem1 = tem+(0.5*(v1(i,k-1)-v1(i,k+1))/dz)**2
923 wush(i,k) = csmf * sqrt(tem1)
937 zol(i) = max(rbsoil(i)*fm(i)*fm(i)/fh(i),rimin)
939 zol(i) = min(zol(i),-zfmin)
941 zol(i) = max(zol(i),zfmin)
954 zol1 = zol(i)*sfcfrac*hpbl(i)/zl(i,1)
956 tem = 1.0 / (1. - aphi16*zol1)
958 phim(i) = sqrt(phih(i))
959 tem1 = 1.0 / (1. - aphi16*zol(i))
960 phihs(i) = sqrt(tem1)
961 phims(i) = sqrt(phihs(i))
963 phim(i) = 1. + aphi5*zol1
965 phims(i) = 1. + aphi5*zol(i)
987 if(zol(i) < zolcru)
then
990 wst3(i) = gotvx(i,1)*sflux(i)*hpbl(i)
991 wstar(i)= wst3(i)**h1
992 ust3(i) = ustar(i)**3.
993 wscale(i)=(ust3(i)+wfac*vk*wst3(i)*sfcfrac)**h1
994 ptem = ustar(i)/aphi5
995 wscale(i) = max(wscale(i),ptem)
1004 hgamt(i) = heat(i)/wscale(i)
1005 hgamq(i) = evap(i)/wscale(i)
1006 vpert(i) = hgamt(i) + hgamq(i)*fv*theta(i,1)
1007 vpert(i) = max(vpert(i),0.)
1008 tem = min(cfac*vpert(i),gamcrt)
1009 thermal(i)= thermal(i) + tem
1025 if(.not.flg(i) .and. k > kb1(i))
then
1027 if (tc_pbl == 0)
then
1028 spdk2 = max((u1(i,k)**2+v1(i,k)**2),1.)
1029 rbup(i) = (thlvx(i,k)-thermal(i))*
1030 & (g*zl(i,k)/thlvx(i,1))/spdk2
1031 else if (tc_pbl == 1)
then
1032 spdk2 = max((u1(i,k)-u1(i,1))**2+(v1(i,k)-v1(i,1))**2,1.)
1033 & + bfac*ustar(i)**2
1034 rbup(i) = (thlvx(i,k)-thermal(i))*
1035 & (g*(zl(i,k)-zl(i,1))/thlvx(i,1))/spdk2
1038 flg(i) = rbup(i) > crb(i)
1045 if(rbdn(i) >= crb(i))
then
1047 elseif(rbup(i) <= crb(i))
then
1050 rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
1052 hpbl(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
1053 if(hpbl(i) < zi(i,kpbl(i)))
then
1054 kpbl(i) = kpbl(i) - 1
1056 if(kpbl(i) <= 1)
then
1057 pcnvflg(i) = .false.
1070 tem = phims(i) * phims(i)
1071 ris(i) = zol(i) * phihs(i) / tem
1072 ris(i) = max(ris(i), rimin)
1076 ptem = sfcfrac*hpbl(i)
1077 if (zl(i,k) <= ptem)
then
1081 tem = gotvx(i,1) * (thlvx(i,1)-thvs(i))
1082 tem1 = tem / zl(i,1)
1083 tem1 = 0.5 * (tem1 + bf(i,1))
1084 ptem = max((u1(i,1)**2+v1(i,1)**2), 1.)
1085 ptem1 = ptem / (zl(i,1) * zl(i,1))
1086 ptem1 = 0.5 * (ptem1 + shr2(i,1))
1087 ri = max(tem1/ptem1, rimin)
1089 tem1 = 0.5 * (bf(i,k-1) + bf(i,k))
1090 ptem1 = 0.5 * (shr2(i,k-1) + shr2(i,k))
1091 ri = max(tem1/ptem1, rimin)
1101 tke(i,k) = te(i,k) * (1. - epotte)
1105 tke(i,km) = tke(i,km1)
1116 if(k < kpbl(i))
then
1117 dz = zi(i,k+1) - zi(i,k)
1118 tkemean(i) = tkemean(i) + tke(i,k) * dz
1119 sumx(i) = sumx(i) + dz
1124 if(tkemean(i) > 0. .and. sumx(i) > 0.)
then
1125 tkemean(i) = tkemean(i) / sumx(i)
1142 if(flg(i).and.zl(i,k) >= zstblmax)
then
1153 if(flg(i) .and. k <= lcld(i))
then
1154 if(qlx(i,k) >= qlcr)
then
1162 if(scuflg(i) .and. kcld(i)==km1) scuflg(i)=.false.
1174 if(flg(i) .and. k <= kcld(i))
then
1175 if(qlx(i,k) >= qlcr)
then
1176 if(radx(i,k) < radmin(i))
then
1187 if(scuflg(i) .and. krad(i) <= 1) scuflg(i)=.false.
1188 if(scuflg(i) .and. radmin(i)>=0.) scuflg(i)=.false.
1214 qcko(i,k,n) = q1(i,k,n)
1217 qcdo(i,k,n) = q1(i,k,n)
1224 call mfpbltq(im,im,km,kmpbl,ntcw,ntrac1,dt2,
1225 & pcnvflg,zl,zm,q1,t1,u1,v1,plyr,pix,thlx,thvx,
1226 & gdx,hpbl,kpbl,vpert,buou,wush,tkemean,vez0fun,xmf,
1227 & tcko,qcko,ucko,vcko,xlamue,bl_upfr)
1230 call mfscuq(im,im,km,kmscu,ntcw,ntrac1,dt2,
1231 & scuflg,zl,zm,q1,t1,u1,v1,plyr,pix,
1232 & thlx,thvx,thlvx,gdx,thetae,
1233 & krad,mrad,radmin,buod,wush,tkemean,vez0fun,xmfd,
1234 & tcdo,qcdo,ucdo,vcdo,xlamde,bl_dnfr)
1236 if (tc_pbl == 1)
then
1239 if(zol(i) > -0.5)
then
1247 tem = sqrt(u10m(i)**2+v10m(i)**2)
1248 mffac = (1. - min(max(tem - 20.0, 0.0), 10.0)/10.)
1250 xmf(i,k) = xmf(i,k)*mffac
1251 xmfd(i,k) = xmfd(i,k)*mffac
1261 if(k < kpbl(i))
then
1262 tem = phih(i)/phim(i)
1263 ptem = sfcfrac*hpbl(i)
1264 tem1 = max(zi(i,k+1)-ptem, 0.)
1265 tem2 = tem1 / (hpbl(i) - ptem)
1268 prn(i,k) = tem + (pr0 - tem) * tem2
1273 prn(i,k) = min(prn(i,k),prmax)
1274 prn(i,k) = max(prn(i,k),prmin)
1276 ckz(i,k) = ck0 + (ck1 - ck0) * tem2
1277 ckz(i,k) = max(min(ckz(i,k), ck0), ck1)
1278 chz(i,k) = ch0 + (ch1 - ch0) * tem2
1279 chz(i,k) = max(min(chz(i,k), ch0), ch1)
1297 if(zi(i,k+1) > hcrinv)
then
1298 tem1 = tvx(i,k+1)-tvx(i,k)
1300 xkzo(i,k) = min(xkzo(i,k), xkinv1)
1301 xkzmo(i,k) = min(xkzmo(i,k), xkinv1)
1302 rlmnz(i,k) = min(rlmnz(i,k), rlmn1)
1305 tem1 = tvx(i,k+1)-tvx(i,k)
1307 ptem = xkzo(i,k) * zvfun(i)
1308 xkzo(i,k) = min(max(ptem, xkinv2), xkzo(i,k))
1309 ptem = xkzmo(i,k) * zvfun(i)
1310 xkzmo(i,k) = min(max(ptem, xkinv2), xkzmo(i,k))
1311 ptem = rlmnz(i,k) * zvfun(i)
1312 rlmnz(i,k) = min(max(ptem, rlmn2), rlmnz(i,k))
1319 rlmnz(i,k) = 0.5 * (rlmnz(i,k-1) + rlmnz(i,k))
1330 e2(i,k) = max(2.*tke(i,k), 0.001)
1333 dz = zl(i,n+1) - zl(i,n)
1334 tem1 = 2.*gotvx(i,n+1)*(thvx(i,k)-thvx(i,n+1))
1335 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n))
1336 e2(i,n+1) = e2(i,n) + (tem1 - tem2) * dz
1338 if(e2(i,n+1) < 0.)
then
1339 ptem = e2(i,n+1) / (e2(i,n+1) - e2(i,n))
1340 zlup = zlup - ptem * dz
1341 zlup = max(zlup, 0.)
1352 tem = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
1353 tem1 = 2.*gotvx(i,n)*(tem-thvx(i,k))
1354 tem2 = ustar(i)*phims(i)/(vk*dz)
1355 tem2 = cs0*sqrt(e2(i,n))*tem2
1356 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1358 dz = zl(i,n) - zl(i,n-1)
1359 tem1 = 2.*gotvx(i,n-1)*(thvx(i,n-1)-thvx(i,k))
1360 tem2 = cs0*sqrt(e2(i,n))*sqrt(shr2(i,n-1))
1361 e2(i,n-1) = e2(i,n) + (tem1 - tem2) * dz
1364 if(e2(i,n-1) < 0.)
then
1365 ptem = e2(i,n-1) / (e2(i,n-1) - e2(i,n))
1366 zldn = zldn - ptem * dz
1367 zldn = max(zldn, 0.)
1373 tem = 0.5 * (zi(i,k+1)-zi(i,k))
1374 tem1 = min(tem, rlmnz(i,k))
1391 ptem2 = min(zlup,zldn)
1392 rlam(i,k) = elmfac * ptem2
1393 rlam(i,k) = max(rlam(i,k), tem1)
1394 rlam(i,k) = min(rlam(i,k), rlmx)
1396 ptem2 = sqrt(zlup*zldn)
1397 ele(i,k) = elefac * ptem2
1398 ele(i,k) = max(ele(i,k), tem1)
1399 elmh(i,k)= elmhfac * ele(i,k)
1400 ele(i,k) = min(ele(i,k), elmx)
1401 elmh(i,k)= min(elmh(i,k), elmhmx)
1410 if (zol(i) < 0.)
then
1411 ptem = 1. - 100. * zol(i)
1414 elseif (zol(i) >= 1.)
then
1417 ptem = 1. + 2.7 * zol(i)
1421 if (tc_pbl == 0)
then
1422 elm(i,k) = zk*rlam(i,k)/(rlam(i,k)+zk)
1424 if ( sfc_rlm == 1 )
then
1425 if ( sfcflg(i) .and.
1426 & zl(i,k) < min(100.0,hpbl(i)*0.05) ) elm(i,k)=zk
1428 else if (tc_pbl == 1)
then
1430 elm(i,k) = sqrt( 1.0/( 1.0/(zk**2)+1.0/(rlam(i,k)**2) ) )
1434 if(k == 1) elm(i,k)=zk
1436 dz = zi(i,k+1) - zi(i,k)
1437 tem = max(gdx(i),dz)
1438 elm(i,k) = min(elm(i,k), tem)
1440 if (tc_pbl == 0)
then
1441 ele(i,k) = min(ele(i,k), tem)
1442 else if (tc_pbl == 1)
then
1449 elm(i,km) = elm(i,km1)
1450 ele(i,km) = ele(i,km1)
1451 elmh(i,km)= elmh(i,km1)
1462 ptem = sfcfrac*hpbl(i)
1463 if (zi(i,k+1) <= ptem)
then
1466 ri = max(bf(i,k)/shr2(i,k),rimin)
1475 tkeh(i,k) = tteh(i,k) * (1. - epotte)
1476 tesq(i,k) = tkeh(i,k) / sqrt(tteh(i,k))
1484 tesq(i,k) = sqrt(tkeh(i,k))
1492 tem = 0.5 * (elm(i,k) + elm(i,k+1))
1493 tem = tem * tesq(i,k)
1494 ri = max(bf(i,k)/shr2(i,k),rimin)
1495 if(k < kpbl(i))
then
1497 dku(i,k) = ckz(i,k) * tem
1498 dkt(i,k) = dku(i,k) / prn(i,k)
1501 dku(i,k) = ckz(i,k) * tem
1502 dkt(i,k) = dku(i,k) / prn(i,k)
1504 dkt(i,k) = chz(i,k) * tem
1505 dku(i,k) = dkt(i,k) * prn(i,k)
1510 dku(i,k) = ck1 * tem
1511 dkt(i,k) = rchck * dku(i,k)
1513 dkt(i,k) = ch1 * tem
1514 prnum = pr0 + 2.1 * ri
1515 prnum = min(prnum,prmax)
1516 dku(i,k) = dkt(i,k) * prnum
1521 if(k >= mrad(i) .and. k < krad(i))
then
1525 tem1 = ckz(i,k) * tem
1527 ptem1 = tem1 / prscu
1528 dku(i,k) = max(dku(i,k), tem1)
1529 dkt(i,k) = max(dkt(i,k), ptem1)
1533 dkq(i,k) = prtke * dkt(i,k)
1535 dkt(i,k) = min(dkt(i,k),dkmax)
1536 dkt(i,k) = max(dkt(i,k),xkzo(i,k))
1537 dkq(i,k) = min(dkq(i,k),dkmax)
1538 dkq(i,k) = max(dkq(i,k),xkzo(i,k))
1539 dku(i,k) = min(dku(i,k),dkmax)
1540 dku(i,k) = max(dku(i,k),xkzmo(i,k))
1551 pix(i,k) = psk(i) / prslk(i,k)
1552 theta(i,k) = t1(i,k) * pix(i,k)
1553 tem=theta(i,k)/t1(i,k)
1555 tem1=max(q1(i,k,ntcw),qlmin)+
1556 & max(q1(i,k,ntiw)+q1(i,k,5)+q1(i,k,6),qlmin)
1557 thetal(i,k)=theta(i,k)-(hvap+hfus)/cp*tem*tem1
1559 tem1=max(q1(i,k,ntcw),qlmin)
1560 thetal(i,k)=theta(i,k)-hvap/cp*tem*tem1
1577 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k))*rdzt(i,k)
1578 dz = zl(i,k+1) - zl(i,k)
1579 tem1=(garea(i)*dz)**h1
1582 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1583 elm_les=min(elm_les,tem1)
1588 dku_les(i,k)=0.1*elm_les*sqrt(tkeh(i,k))
1589 dkt_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1590 dkq_les(i,k)=dkt_les(i,k)
1591 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1592 dkt_les(i,k) = min(dkt_les(i,k),dkmaxles)
1593 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1600 tkemax(i) = tke(i,1)
1605 if(tke(i,k) > tkemax(i))
then
1606 tkemax(i) = tke(i,k)
1614 if(zl(i,ktkemax(i)) > sclmax)
then
1621 if(flg(i) .and. k > ktkemax(i))
then
1624 if(tke(i,k) < tem) flg(i) = .false.
1629 scl(i)=max(scl(i), sclmin)
1630 scl(i)=min(scl(i), sclmax)
1631 scl(i)=max(scl(i), hpbl(i))
1632 pfdx(i)=gdx(i)/scl(i)
1637 pfl(i)=cpl1*(pfdx(i)**2+cpl2*pfdx(i)**0.5-cpl3)/
1638 & (pfdx(i)**2+cpl4*pfdx(i)**0.5+cpl5)+cpl6
1639 pfl(i)=min(max(pfl(i),0.0),1.0)
1641 pftke(i)=(pfdx(i)**2+cptke1*pfdx(i)**(2./3.))/
1642 & (pfdx(i)**2+cptke2*pfdx(i)**(2./3.)+cptke3)
1643 pftke(i)=min(max(pftke(i),0.0),1.0)
1650 dkq(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq(i,k)
1651 dkt(i,k)=(1.0-pfl(i))*dkt_les(i,k)+pfl(i)*dkt(i,k)
1652 dku(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku(i,k)
1660 dku_h(i,k)=ckh*elmh(i,k)*sqrt(tke(i,k))
1661 dkq_h(i,k)=dku_h(i,k)
1670 dz = zl(i,k+1) - zl(i,k-1)
1671 tem=gotvx(i,k)*(thetal(i,k+1)-thetal(i,k-1))/dz
1674 tem=gotvx(i,k)*(thetal(i,k+1)-thvs(i))/dz
1676 dz = zi(i,k+1) - zi(i,k)
1677 tem1=(garea(i)*dz)**h1
1680 elm_les=0.76*sqrt(tke(i,k))/sqrt(tem)
1681 elm_les=min(elm_les,tem1)
1685 ele_les(i,k)=elm_les
1687 dku_les(i,k)=0.1*elm_les*sqrt(tke(i,k))
1688 dkq_les(i,k)=(1.0+2.0*elm_les/tem1)*dku_les(i,k)
1689 dku_les(i,k) = min(dku_les(i,k),dkmaxles)
1690 dkq_les(i,k) = min(dkq_les(i,k),dkmaxles)
1696 dku_h(i,k)=(1.0-pfl(i))*dku_les(i,k)+pfl(i)*dku_h(i,k)
1697 dkq_h(i,k)=(1.0-pfl(i))*dkq_les(i,k)+pfl(i)*dkq_h(i,k)
1701 dku_h(i,km)=dku_h(i,km1)
1702 dkq_h(i,km)=dkq_h(i,km1)
1708 if (do_canopy .and. cplaqm)
then
1721 IF ( cfch(i) .GT. zi(i,k)
1722 & .AND. cfch(i) .LE. zi(i,k+1) )
THEN
1729 IF (kcan .EQ. 1)
THEN
1733 IF ( claie(i) .LT. 0.1
1734 & .OR. cfch(i) .LT. 0.5
1735 & .OR. max(0.0, 1.0 - cfrt(i)) .GT. 0.75
1736 & .OR. cpopu(i) .GT. 10000.0
1737 & .OR. (exp(-0.5*claie(i)*cclu(i)) .GT. 0.45
1738 & .AND. cfch(i) .LT. 18.) )
THEN
1746 mol = zol(i)/zl(i,k)
1759 DO WHILE (zcan.GE.botcan)
1761 tlcan = (fch/ustar(i)) * (
1762 & (0.256 * (zcan-(0.75*fch))/fch ) +
1763 & (0.492*exp((-0.256*zcan/fch)/0.492)) )
1764 IF ( hol .LT. -0.1 )
THEN
1765 IF ( zcan/fch .GT. 1.25 )
THEN
1766 sigmacan = 1.25*ustar(i)
1768 IF ( zcan/fch .GE. 0.175
1769 & .AND. zcan/fch .LE. 1.25 )
THEN
1770 sigmacan = ustar(i) * ( 0.75 +
1771 & (0.5 * cos((pi/1.06818) *
1772 & (1.25 - (zcan/fch)))) )
1774 IF ( zcan/fch .LT. 0.175 )
THEN
1775 sigmacan = 0.25*ustar(i)
1778 IF ( hol .GE. -0.1 .AND. hol .LT. 0.1 )
THEN
1779 IF ( zcan/fch .GT. 1.25 )
THEN
1780 sigmacan = 1.0*ustar(i)
1782 IF ( zcan/fch .GE. 0.175
1783 & .AND. zcan/fch .LE. 1.25 )
THEN
1784 sigmacan = ustar(i) * ( 0.625 +
1785 & (0.375* cos((pi/1.06818) *
1786 & (1.25 - (zcan/fch)))) )
1788 IF ( zcan/fch .LT. 0.175 )
THEN
1789 sigmacan = 0.25*ustar(i)
1792 IF ( hol .GE. 0.1 .AND. hol .LT. 0.9 )
THEN
1793 IF ( zcan/fch .GT. 1.25 )
THEN
1794 sigmacan = 0.25*(4.375 - (3.75*hol))*ustar(i)
1796 IF ( zcan/fch .GE. 0.175
1797 & .AND. zcan/fch .LE. 1.25 )
THEN
1798 rrcan=4.375-(3.75*hol)
1799 aacan=(0.125*rrcan) + 0.125
1800 bbcan=(0.125*rrcan) - 0.125
1801 sigmacan = ustar(i) * ( aacan +
1802 & (bbcan * cos((pi/1.06818) *
1803 & (1.25 - (zcan/fch)))) )
1805 IF ( zcan/fch .LT. 0.175 )
THEN
1806 sigmacan = 0.25*ustar(i)
1809 IF ( hol .GE. 0.9 )
THEN
1810 sigmacan = 0.25*ustar(i)
1813 IF ( zcan .EQ. zfl )
1814 & eddyvest1 = (sigmacan*sigmacan)*tlcan
1819 IF ( zcan .LE. zfl )
THEN
1821 countcan = countcan + 1
1822 zcanx(countcan) = zcan
1823 eddyvestx(countcan) = (sigmacan*sigmacan)*tlcan
1831 IF (countcan > 0 )
THEN
1833 IF (countcan .EQ. 1)
THEN
1834 zz_int= zcanx(countcan)
1836 zz_int= integratetrapezoid(
1837 & zcanx(countcan:1:-1), zooox(countcan:1:-1))
1840 IF (countcan .EQ. 1)
THEN
1841 eddyvest_int = eddyvestx(countcan)
1844 eddyvest_int = integratetrapezoid((zcanx(countcan:1:-1)
1845 & ),eddyvestx(countcan:1:-1)) /
1875 tem1 = 0.5 * xkzmo(i,1)
1877 tem = 0.5 * (ckz(i,k-1) + ckz(i,k))
1878 tem1 = 0.5 * (xkzmo(i,k-1) + xkzmo(i,k))
1880 ptem = tem1 / (tem * elm(i,k))
1881 tkmnz(i,k) = ptem * ptem
1882 tkmnz(i,k) = min(tkmnz(i,k), tkbmx)
1883 tkmnz(i,k) = max(tkmnz(i,k), tkmin)
1894 tem = -dkt(i,1) * bf(i,1)
1900 if(scuflg(i) .and. mrad(i) == 1)
then
1901 ptem2 = xmfd(i,1) * buod(i,1)
1905 tem = tem + ptem1 + ptem2
1906 buop = 0.5 * (gotvx(i,1) * sflux(i) + tem)
1909 tem = 2. * dku_h(i,1)
1910 tem1 = dku(i,1)*def_1(i,1)+tem*def_2(i,1)
1912 tem1 = dku(i,1) * shr2(i,1)
1915 tem = (u1(i,2)-u1(i,1))*rdzt(i,1)
1922 if(scuflg(i) .and. mrad(i) == 1)
then
1923 ptem = ucdo(i,1)+ucdo(i,2)-u1(i,1)-u1(i,2)
1924 ptem = 0.5 * tem * xmfd(i,1) * ptem
1928 ptem1 = ptem1 + ptem
1930 tem = (v1(i,2)-v1(i,1))*rdzt(i,1)
1937 if(scuflg(i) .and. mrad(i) == 1)
then
1938 ptem = vcdo(i,1)+vcdo(i,2)-v1(i,1)-v1(i,2)
1939 ptem = 0.5 * tem * xmfd(i,1) * ptem
1943 ptem2 = ptem2 + ptem
1945 tem2 = stress(i)*ustar(i)*phims(i)/(vk*zl(i,1))
1946 shrp = 0.5 * (tem1 + ptem1 + ptem2 + tem2)
1948 tem1 = -dkt(i,k-1) * bf(i,k-1)
1949 tem2 = -dkt(i,k) * bf(i,k)
1950 tem = 0.5 * (tem1 + tem2)
1951 if(pcnvflg(i) .and. k <= kpbl(i))
then
1952 ptem = 0.5 * (xmf(i,k-1) + xmf(i,k))
1953 ptem1 = ptem * buou(i,k)
1958 if(k >= mrad(i) .and. k < krad(i))
then
1959 ptem0 = 0.5 * (xmfd(i,k-1) + xmfd(i,k))
1960 ptem2 = ptem0 * buod(i,k)
1967 buop = tem + ptem1 + ptem2
1971 tem2 = 2.*dku_h(i,k)
1972 tem1 = dku(i,k-1)*def_1(i,k-1)
1973 tem2 = dku(i,k)*def_1(i,k)+tem2*def_2(i,k)
1975 tem1 = dku(i,k-1) * shr2(i,k-1)
1976 tem2 = dku(i,k) * shr2(i,k)
1978 tem = 0.5 * (tem1 + tem2)
1979 tem1 = (u1(i,k+1)-u1(i,k))*rdzt(i,k)
1980 tem2 = (u1(i,k)-u1(i,k-1))*rdzt(i,k-1)
1981 if(pcnvflg(i) .and. k <= kpbl(i))
then
1982 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
1983 ptem1 = 0.5 * ptem * (u1(i,k)-ucko(i,k))
1988 if(k >= mrad(i) .and. k < krad(i))
then
1989 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
1990 ptem2 = 0.5 * ptem0 * (ucdo(i,k)-u1(i,k))
1997 shrp = tem + ptem1 + ptem2
1998 tem1 = (v1(i,k+1)-v1(i,k))*rdzt(i,k)
1999 tem2 = (v1(i,k)-v1(i,k-1))*rdzt(i,k-1)
2000 if(pcnvflg(i) .and. k <= kpbl(i))
then
2001 ptem = xmf(i,k) * tem1 + xmf(i,k-1) * tem2
2002 ptem1 = 0.5 * ptem * (v1(i,k)-vcko(i,k))
2007 if(k >= mrad(i) .and. k < krad(i))
then
2008 ptem0 = xmfd(i,k) * tem1 + xmfd(i,k-1) * tem2
2009 ptem2 = 0.5 * ptem0 * (vcdo(i,k)-v1(i,k))
2016 shrp = shrp + ptem1 + ptem2
2020 prod(i,k) = 2. * buop + shrp
2025 prod(i,k) = buop + shrp
2035 dtn = dt2 / float(ndt)
2041 ptem1 = ce0 / ele(i,k)
2042 dz = zi(i,k+1) - zi(i,k)
2043 tem1=(garea(i)*dz)**h1
2044 tem2=0.19+0.51*ele_les(i,k)/tem1
2045 ptem2= tem2 / ele_les(i,k)
2046 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
2047 disste = ptem * te(i,k) * tem
2048 tem1 = prod(i,k) + te(i,k) / dtn
2049 disste=max(min(disste, tem1), 0.)
2050 if(.not. tte_edmf) diss(i,k) = disste
2054 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste+tem)
2056 te(i,k) = max(te(i,k), tkmnz(i,k))
2061 dtn = dt2 / float(ndt)
2066 ptem = ce0 / ele(i,k)
2067 disste = ptem * te(i,k) * tem
2068 tem1 = prod(i,k) + te(i,k) / dtn
2069 disste = max(min(disste, tem1), 0.)
2070 if(.not. tte_edmf) diss(i,k) = disste
2071 te(i,k) = te(i,k) + dtn * (prod(i,k)-disste)
2072 te(i,k) = max(te(i,k), tkmnz(i,k))
2084 tem = sqrt(tke(i,k))
2086 ptem1 = ce0 / ele(i,k)
2087 dz = zi(i,k+1) - zi(i,k)
2088 tem1=(garea(i)*dz)**h1
2089 tem2=0.19+0.51*ele_les(i,k)/tem1
2090 ptem2= tem2 / ele_les(i,k)
2091 ptem=(1.0-pftke(i))*ptem2+pftke(i)*ptem1
2092 diss(i,k) = ptem * tke(i,k) * tem
2094 ptem = ce0 / ele(i,k)
2095 diss(i,k) = ptem * tke(i,k) * tem
2106 qcko(i,k,ntke) = te(i,k)
2109 qcdo(i,k,ntke) = te(i,k)
2115 if (pcnvflg(i) .and. k <= kpbl(i))
then
2116 dz = zl(i,k) - zl(i,k-1)
2117 tem = 0.5 * xlamue(i,k-1) * dz
2119 qcko(i,k,ntke)=((1.-tem)*qcko(i,k-1,ntke)+tem*
2120 & (te(i,k)+te(i,k-1)))/factor
2126 if (scuflg(i) .and. k < krad(i))
then
2127 if(k >= mrad(i))
then
2128 dz = zl(i,k+1) - zl(i,k)
2129 tem = 0.5 * xlamde(i,k) * dz
2131 qcdo(i,k,ntke)=((1.-tem)*qcdo(i,k+1,ntke)+tem*
2132 & (te(i,k)+te(i,k+1)))/factor
2142 kps = max(kmpbl, kmscu)
2149 qh(i,k,n) = 0.5 * (q1(i,k,n)+q1(i,k+1,n))
2154 q_diff(i,k,n) = q1(i,k,n) - q1(i,k+1,n)
2158 if(q1(i,1,n) >= 0.)
then
2159 q_diff(i,0,n) = max(0.,2.*q1(i,1,n)-q1(i,2,n))-
2162 q_diff(i,0,n) = min(0.,2.*q1(i,1,n)-q1(i,2,n))-
2172 kmx = max(kpbl(i), krad(i))
2173 q_half(i,k,n) = qh(i,k,n)
2174 if((pcnvflg(i) .or. scuflg(i)) .and. k < kmx)
then
2176 if(pcnvflg(i) .and. k < kpbl(i))
then
2180 & (k >= mrad(i) .and. k < krad(i)))
then
2181 tem = tem - xmfd(i,k)
2185 if(abs(q_diff(i,k,n)) > 1.e-22)
2186 & rrkp = q_diff(i,k+1,n) / q_diff(i,k,n)
2187 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2188 q_half(i,k,n) = q1(i,k+1,n) +
2189 & phkp*(qh(i,k,n)-q1(i,k+1,n))
2190 elseif (tem < 0.)
then
2192 if(abs(q_diff(i,k,n)) > 1.e-22)
2193 & rrkp = q_diff(i,k-1,n) / q_diff(i,k,n)
2194 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2195 q_half(i,k,n) = q1(i,k,n) +
2196 & phkp*(qh(i,k,n)-q1(i,k,n))
2208 tei(i,k) = 0.5 * (te(i,k)+te(i,k+1))
2214 e_diff(i,k) = te(i,k) - te(i,k+1)
2218 if(te(i,1) >= 0.)
then
2219 e_diff(i,0) = max(0.,2.*te(i,1)-te(i,2))-
2222 e_diff(i,0) = min(0.,2.*te(i,1)-te(i,2))-
2229 kmx = max(kpbl(i), krad(i))
2230 e_half(i,k) = tei(i,k)
2231 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2233 if(pcnvflg(i) .and. k < kpbl(i))
then
2237 & (k >= mrad(i) .and. k < krad(i)))
then
2238 tem = tem - xmfd(i,k)
2242 if(abs(e_diff(i,k)) > 1.e-22)
2243 & rrkp = e_diff(i,k+1) / e_diff(i,k)
2244 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2245 e_half(i,k) = te(i,k+1) +
2246 & phkp*(tei(i,k)-te(i,k+1))
2247 elseif (tem < 0.)
then
2249 if(abs(e_diff(i,k)) > 1.e-22)
2250 & rrkp = e_diff(i,k-1) / e_diff(i,k)
2251 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2252 e_half(i,k) = te(i,k) +
2253 & phkp*(tei(i,k)-te(i,k))
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 * dkq(i,k) * rdz
2275 au(i,k) = -dtodsd*dsdz2
2276 al(i,k) = -dtodsu*dsdz2
2277 ad(i,k) = ad(i,k)-au(i,k)
2278 ad(i,k+1)= 1.-al(i,k)
2281 if(pcnvflg(i) .and. k < kpbl(i))
then
2282 ptem = 0.5 * tem2 * xmf(i,k)
2283 ptem1 = dtodsd * ptem
2284 ptem2 = dtodsu * ptem
2285 ptem = qcko(i,k,ntke) + qcko(i,k+1,ntke)
2286 f1(i,k) = f1(i,k) - ptem * ptem1
2287 f1(i,k+1) = te(i,k+1) + ptem * ptem2
2289 f1(i,k+1) = te(i,k+1)
2293 if(k >= mrad(i) .and. k < krad(i))
then
2294 ptem = 0.5 * tem2 * xmfd(i,k)
2295 ptem1 = dtodsd * ptem
2296 ptem2 = dtodsu * ptem
2297 ptem = qcdo(i,k,ntke) + qcdo(i,k+1,ntke)
2298 f1(i,k) = f1(i,k) + ptem * ptem1
2299 f1(i,k+1) = f1(i,k+1) - ptem * ptem2
2303 kmx = max(kpbl(i), krad(i))
2304 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2305 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2306 ptem1 = dtodsd * ptem
2307 ptem2 = dtodsu * ptem
2308 f1(i,k) = f1(i,k) + e_half(i,k) * ptem1
2309 f1(i,k+1) = f1(i,k+1) - e_half(i,k) * ptem2
2317 call tridit(im,km,1,al,ad,au,f1,au,f1)
2329 if(pcnvflg(i) .and. scuflg(i))
then
2331 kmx = max(kpbl(i), krad(i))
2332 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2335 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2339 if((pcnvflg(i) .or. scuflg(i)) .and.
2340 & (k >= kbx .and. k <= kmx))
then
2341 tem = f1(i,k) * del(i,k) * gravi
2342 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2343 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2348 if(pcnvflg(i) .or. scuflg(i))
then
2349 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2350 if(tsump(i) > abs(tsumn(i)))
then
2351 rtnp(i) = tsumn(i) / tsump(i)
2353 rtnp(i) = tsump(i) / tsumn(i)
2360 if(pcnvflg(i) .and. scuflg(i))
then
2362 kmx = max(kpbl(i), krad(i))
2363 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2366 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2370 if((pcnvflg(i) .or. scuflg(i)) .and.
2371 & (k >= kbx .and. k <= kmx))
then
2372 if(rtnp(i) < 0.)
then
2373 if(tsump(i) > abs(tsumn(i)))
then
2374 if(f1(i,k) < 0.) f1(i,k) = 0.
2375 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2377 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2378 if(f1(i,k) > 0.) f1(i,k) = 0.
2396 tem = f1(i,k) * del(i,k) * gravi
2397 if(f1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2398 if(f1(i,k) > 0.) tsump(i) = tsump(i) + tem
2402 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2403 if(tsump(i) > abs(tsumn(i)))
then
2404 rtnp(i) = tsumn(i) / tsump(i)
2406 rtnp(i) = tsump(i) / tsumn(i)
2412 if(rtnp(i) < 0.)
then
2413 if(tsump(i) > abs(tsumn(i)))
then
2414 if(f1(i,k) < 0.) f1(i,k) = 0.
2415 if(f1(i,k) > 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2417 if(f1(i,k) < 0.) f1(i,k) = (1.+rtnp(i))*f1(i,k)
2418 if(f1(i,k) > 0.) f1(i,k) = 0.
2429 qtend = (f1(i,k)-q1(i,k,ntke))*rdt
2430 rtg(i,k,ntke) = rtg(i,k,ntke)+qtend
2434 idtend = dtidx(ntke+100,index_of_process_pbl)
2436 dtend(1:im,1:km,idtend) = dtend(1:im,1:km,idtend) + &
2437 & (f1(1:im,1:km)-q1(1:im,1:km,ntke))*rdt
2445 f1(i,1) = t1(i,1) + dtdz1(i) * heat(i)
2446 f2(i,1) = q1(i,1,1) + dtdz1(i) * evap(i)
2448 if(ntrac1 >= 2)
then
2452 f2(i,1+is) = q1(i,1,n)
2459 dtodsd = dt2/del(i,k)
2460 dtodsu = dt2/del(i,k+1)
2461 dsig = prsl(i,k)-prsl(i,k+1)
2463 tem1 = dsig * dkt(i,k) * rdz
2465 if (use_lpt > 0)
then
2466 dsdzt = dsdzt-tem1*elocp*(qliq(i,k+1)-qliq(i,k))*rdz
2467 & -(1+0.33/2.5)*tem1*elocp*(qice(i,k+1)-qice(i,k))*rdz
2470 au(i,k) = -dtodsd*dsdz2
2471 al(i,k) = -dtodsu*dsdz2
2472 ad(i,k) = ad(i,k)-au(i,k)
2473 ad(i,k+1)= 1.-al(i,k)
2476 if(pcnvflg(i) .and. k < kpbl(i))
then
2477 ptem = 0.5 * tem2 * xmf(i,k)
2478 ptem1 = dtodsd * ptem
2479 ptem2 = dtodsu * ptem
2480 tem = t1(i,k) + t1(i,k+1)
2481 ptem = tcko(i,k) + tcko(i,k+1)
2482 f1(i,k) = f1(i,k)+dtodsd*dsdzt-(ptem-tem)*ptem1
2483 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt+(ptem-tem)*ptem2
2484 ptem = qcko(i,k,1) + qcko(i,k+1,1)
2485 f2(i,k) = f2(i,k) - ptem * ptem1
2486 f2(i,k+1) = q1(i,k+1,1) + ptem * ptem2
2488 f1(i,k) = f1(i,k)+dtodsd*dsdzt
2489 f1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt
2490 f2(i,k+1) = q1(i,k+1,1)
2494 if(k >= mrad(i) .and. k < krad(i))
then
2495 ptem = 0.5 * tem2 * xmfd(i,k)
2496 ptem1 = dtodsd * ptem
2497 ptem2 = dtodsu * ptem
2498 ptem = tcdo(i,k) + tcdo(i,k+1)
2499 tem = t1(i,k) + t1(i,k+1)
2500 f1(i,k) = f1(i,k) + (ptem - tem) * ptem1
2501 f1(i,k+1) = f1(i,k+1) - (ptem - tem) * ptem2
2502 ptem = qcdo(i,k,1) + qcdo(i,k+1,1)
2503 f2(i,k) = f2(i,k) + ptem * ptem1
2504 f2(i,k+1) = f2(i,k+1) - ptem * ptem2
2508 kmx = max(kpbl(i), krad(i))
2509 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2510 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2511 ptem1 = dtodsd * ptem
2512 ptem2 = dtodsu * ptem
2513 f2(i,k) = f2(i,k) + q_half(i,k,1) * ptem1
2514 f2(i,k+1) = f2(i,k+1) - q_half(i,k,1) * ptem2
2520 if(ntrac1 >= 2)
then
2525 dtodsd = dt2/del(i,k)
2526 dtodsu = dt2/del(i,k+1)
2527 dsig = prsl(i,k)-prsl(i,k+1)
2528 tem2 = dsig * rdzt(i,k)
2530 if(pcnvflg(i) .and. k < kpbl(i))
then
2531 ptem = 0.5 * tem2 * xmf(i,k)
2532 ptem1 = dtodsd * ptem
2533 ptem2 = dtodsu * ptem
2534 ptem = qcko(i,k,n) + qcko(i,k+1,n)
2535 f2(i,k+is) = f2(i,k+is) - ptem * ptem1
2536 f2(i,k+1+is)= q1(i,k+1,n) + ptem * ptem2
2538 f2(i,k+1+is) = q1(i,k+1,n)
2542 if(k >= mrad(i) .and. k < krad(i))
then
2543 ptem = 0.5 * tem2 * xmfd(i,k)
2544 ptem1 = dtodsd * ptem
2545 ptem2 = dtodsu * ptem
2546 ptem = qcdo(i,k,n) + qcdo(i,k+1,n)
2547 f2(i,k+is) = f2(i,k+is) + ptem * ptem1
2548 f2(i,k+1+is)= f2(i,k+1+is) - ptem * ptem2
2552 kmx = max(kpbl(i), krad(i))
2553 if((pcnvflg(i) .or. scuflg(i)) .and. (k < kmx))
then
2554 ptem = tem2 * (xmf(i,k) - xmfd(i,k))
2555 ptem1 = dtodsd * ptem
2556 ptem2 = dtodsu * ptem
2557 f2(i,k+is) = f2(i,k+is) + q_half(i,k,n) * ptem1
2558 f2(i,k+1+is) = f2(i,k+1+is) - q_half(i,k,n) * ptem2
2568 call tridin(im,km,ntrac1,al,ad,au,f1,f2,au,f1,f2)
2580 if(pcnvflg(i) .and. scuflg(i))
then
2582 kmx = max(kpbl(i), krad(i))
2583 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2586 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2590 if((pcnvflg(i) .or. scuflg(i)) .and.
2591 & (k >= kbx .and. k <= kmx))
then
2592 tem = f2(i,k) * del(i,k) * gravi
2593 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2594 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2599 if(pcnvflg(i) .or. scuflg(i))
then
2600 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2601 if(tsump(i) > abs(tsumn(i)))
then
2602 rtnp(i) = tsumn(i) / tsump(i)
2604 rtnp(i) = tsump(i) / tsumn(i)
2611 if(pcnvflg(i) .and. scuflg(i))
then
2613 kmx = max(kpbl(i), krad(i))
2614 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2617 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2621 if((pcnvflg(i) .or. scuflg(i)) .and.
2622 & (k >= kbx .and. k <= kmx))
then
2623 if(rtnp(i) < 0.)
then
2624 if(tsump(i) > abs(tsumn(i)))
then
2625 if(f2(i,k) < 0.) f2(i,k) = 0.
2626 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2628 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2629 if(f2(i,k) > 0.) f2(i,k) = 0.
2648 tem = f2(i,k) * del(i,k) * gravi
2649 if(f2(i,k) < 0.) tsumn(i) = tsumn(i) + tem
2650 if(f2(i,k) > 0.) tsump(i) = tsump(i) + tem
2654 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2655 if(tsump(i) > abs(tsumn(i)))
then
2656 rtnp(i) = tsumn(i) / tsump(i)
2658 rtnp(i) = tsump(i) / tsumn(i)
2664 if(rtnp(i) < 0.)
then
2665 if(tsump(i) > abs(tsumn(i)))
then
2666 if(f2(i,k) < 0.) f2(i,k) = 0.
2667 if(f2(i,k) > 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2669 if(f2(i,k) < 0.) f2(i,k) = (1.+rtnp(i))*f2(i,k)
2670 if(f2(i,k) > 0.) f2(i,k) = 0.
2684 if(ntrac1 >= 2)
then
2688 if(pcnvflg(i) .and. scuflg(i))
then
2690 kmx = max(kpbl(i), krad(i))
2691 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2694 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2698 if((pcnvflg(i) .or. scuflg(i)) .and.
2699 & (k >= kbx .and. k <= kmx))
then
2700 if(f2(i,k+is) < 0.)
then
2701 tem = f2(i,k) + f2(i,k+is)
2704 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2706 elseif (f2(i,k) > 0.0)
then
2708 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2721 if(ntrac1 >= 2 .and. ntrw > 0)
then
2725 if(pcnvflg(i) .and. scuflg(i))
then
2727 kmx = max(kpbl(i), krad(i))
2728 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2731 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2735 if((pcnvflg(i) .or. scuflg(i)) .and.
2736 & (k >= kbx .and. k <= kmx))
then
2737 if(f2(i,k+is) < 0.)
then
2738 tem = f2(i,k) + f2(i,k+is)
2741 f1(i,k) = f1(i,k) - elocp * f2(i,k+is)
2743 elseif (f2(i,k) > 0.0)
then
2745 f1(i,k) = f1(i,k) + elocp * f2(i,k)
2754 if(ntrac1 >= 2)
then
2765 if(pcnvflg(i) .and. scuflg(i))
then
2767 kmx = max(kpbl(i), krad(i))
2768 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2771 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2775 if((pcnvflg(i) .or. scuflg(i)) .and.
2776 & (k >= kbx .and. k <= kmx))
then
2777 tem = f2(i,k+is) * del(i,k) * gravi
2778 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2779 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2784 if(pcnvflg(i) .or. scuflg(i))
then
2785 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2786 if(tsump(i) > abs(tsumn(i)))
then
2787 rtnp(i) = tsumn(i) / tsump(i)
2789 rtnp(i) = tsump(i) / tsumn(i)
2796 if(pcnvflg(i) .and. scuflg(i))
then
2798 kmx = max(kpbl(i), krad(i))
2799 elseif(pcnvflg(i) .and. .not. scuflg(i))
then
2802 elseif(.not. pcnvflg(i) .and. scuflg(i))
then
2806 if((pcnvflg(i) .or. scuflg(i)) .and.
2807 & (k >= kbx .and. k <= kmx))
then
2808 if(rtnp(i) < 0.)
then
2809 if(tsump(i) > abs(tsumn(i)))
then
2810 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2811 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2813 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2814 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2833 tem = f2(i,k+is) * del(i,k) * gravi
2834 if(f2(i,k+is) < 0.) tsumn(i) = tsumn(i) + tem
2835 if(f2(i,k+is) > 0.) tsump(i) = tsump(i) + tem
2839 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
2840 if(tsump(i) > abs(tsumn(i)))
then
2841 rtnp(i) = tsumn(i) / tsump(i)
2843 rtnp(i) = tsump(i) / tsumn(i)
2849 if(rtnp(i) < 0.)
then
2850 if(tsump(i) > abs(tsumn(i)))
then
2851 if(f2(i,k+is)<0.) f2(i,k+is)=0.
2852 if(f2(i,k+is)>0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2854 if(f2(i,k+is)<0.) f2(i,k+is)=(1.+rtnp(i))*f2(i,k+is)
2855 if(f2(i,k+is)>0.) f2(i,k+is)=0.
2868 ten_t(i,k) = (f1(i,k)-t1(i,k))*rdt
2869 qtend = (f2(i,k)-q1(i,k,1))*rdt
2870 rtg(i,k,1) = rtg(i,k,1)+qtend
2877 dtsfc(i) = rho_a(i) * cp * heat(i)
2878 dqsfc(i) = rho_a(i) * hvap * evap(i)
2881 if(ldiag3d .and. .not. gen_tend)
then
2882 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2886 dtend(i,k,idtend) = dtend(i,k,idtend)+ten_t(i,k)*delt
2891 idtend = dtidx(100+ntqv,index_of_process_pbl)
2895 qtend = (f2(i,k)-q1(i,k,1))*rdt
2896 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2902 if(ntrac1 >= 2)
then
2907 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2908 rtg(i,k,n) = rtg(i,k,n)+qtend
2912 if(ldiag3d .and. .not. gen_tend)
then
2916 idtend = dtidx(n+100,index_of_process_pbl)
2921 qtend = (f2(i,k+is)-q1(i,k,n))*rdt
2922 dtend(i,k,idtend) = dtend(i,k,idtend)+qtend*delt
2938 ten_t(i,k) = ten_t(i,k) + dspfac * diss(i,k) / cp
2941 if(ldiag3d .and. .not. gen_tend)
then
2942 idtend = dtidx(index_of_temperature,index_of_process_pbl)
2946 dtend(i,k,idtend) = dtend(i,k,idtend)+
2947 & (dspfac * diss(i,k) / cp)*delt
2957 ad(i,1) = 1.0 + dtdz1(i) * stress(i) / spd1(i)
2964 dtodsd = dt2/del(i,k)
2965 dtodsu = dt2/del(i,k+1)
2966 dsig = prsl(i,k)-prsl(i,k+1)
2968 tem1 = dsig * dku(i,k) * rdz
2970 au(i,k) = -dtodsd*dsdz2
2971 al(i,k) = -dtodsu*dsdz2
2972 ad(i,k) = ad(i,k)-au(i,k)
2973 ad(i,k+1)= 1.-al(i,k)
2976 if(pcnvflg(i) .and. k < kpbl(i))
then
2977 ptem = 0.5 * tem2 * xmf(i,k)
2978 ptem1 = dtodsd * ptem
2979 ptem2 = dtodsu * ptem
2980 tem = u1(i,k) + u1(i,k+1)
2981 ptem = ucko(i,k) + ucko(i,k+1)
2982 f1(i,k) = f1(i,k) - (ptem - tem) * ptem1
2983 f1(i,k+1) = u1(i,k+1) + (ptem - tem) * ptem2
2984 tem = v1(i,k) + v1(i,k+1)
2985 ptem = vcko(i,k) + vcko(i,k+1)
2986 f2(i,k) = f2(i,k) - (ptem - tem) * ptem1
2987 f2(i,k+1) = v1(i,k+1) + (ptem - tem) * ptem2
2989 f1(i,k+1) = u1(i,k+1)
2990 f2(i,k+1) = v1(i,k+1)
2994 if(k >= mrad(i) .and. k < krad(i))
then
2995 ptem = 0.5 * tem2 * xmfd(i,k)
2996 ptem1 = dtodsd * ptem
2997 ptem2 = dtodsu * ptem
2998 tem = u1(i,k) + u1(i,k+1)
2999 ptem = ucdo(i,k) + ucdo(i,k+1)
3000 f1(i,k) = f1(i,k) + (ptem - tem) *ptem1
3001 f1(i,k+1) = f1(i,k+1) - (ptem - tem) *ptem2
3002 tem = v1(i,k) + v1(i,k+1)
3003 ptem = vcdo(i,k) + vcdo(i,k+1)
3004 f2(i,k) = f2(i,k) + (ptem - tem) * ptem1
3005 f2(i,k+1) = f2(i,k+1) - (ptem - tem) * ptem2
3014 call tridi2(im,km,al,ad,au,f1,f2,au,f1,f2)
3020 ten_u(i,k) = (f1(i,k)-u1(i,k))*rdt
3021 ten_v(i,k) = (f2(i,k)-v1(i,k))*rdt
3026 if (use_oceanuv)
then
3028 spd1_m=sqrt( (u1(i,1)-usfco(i))**2+(v1(i,1)-vsfco(i))**2 )
3029 dusfc(i) = -1.*rho_a(i)*stress(i)*(u1(i,1)-usfco(i))/spd1_m
3030 dvsfc(i) = -1.*rho_a(i)*stress(i)*(v1(i,1)-vsfco(i))/spd1_m
3034 dusfc(i) = -1.*rho_a(i)*stress(i)*u1(i,1)/spd1(i)
3035 dvsfc(i) = -1.*rho_a(i)*stress(i)*v1(i,1)/spd1(i)
3039 if(ldiag3d .and. .not. gen_tend)
then
3040 idtend = dtidx(index_of_x_wind,index_of_process_pbl)
3044 dtend(i,k,idtend) = dtend(i,k,idtend) + ten_u(i,k)*delt
3049 idtend = dtidx(index_of_y_wind,index_of_process_pbl)
3053 dtend(i,k,idtend) = dtend(i,k,idtend) + ten_v(i,k)*delt
3069 dku3d_h(i,k) = dku_h(i,k)
3070 dku3d_e(i,k) = dkq_h(i,k)
3077 if(
allocated(eddyvestx))
deallocate(eddyvestx)
3078 if(
allocated(zcanx))
deallocate(zcanx)