5 SUBROUTINE hbtm(knon, paprs, pplay,
6 . t2m,t10m,q2m,q10m,ustar,
7 . flux_t,flux_q,
u,
v,t,
q,
8 . pblh,cape,eauliq,ctei,pblt,
9 . therm,trmb1,trmb2,trmb3,plcl)
53 REAL t2m(klon), t10m(klon)
54 REAL q2m(klon), q10m(klon)
56 REAL paprs(klon,
klev+1)
58 REAL flux_t(klon,
klev), flux_q(klon,
klev)
116 REAL rhino(klon,
klev)
123 LOGICAL omegafl(klon)
134 REAL trmb1(klon),trmb2(klon),trmb3(klon)
147 REAL the1,the2,aa,bb,zthvd,zthvu,xintpos,qqsat
151 REAL xhis,rnum,denom,th1,th2,thv1,thv2,ql2
152 REAL dqsat_dt,qsat2,qt1,q2,t1,t2,xnull,delt_the
153 REAL delt_qt,delt_2,quadsat,spblh,reduc
169 REAL zcor, zdelta, zcvm5
171 REAL fac, pblmin, zmzp, term
233 z(
i,1) = rd * t(
i,1) / (0.5*(paprs(
i,1)+
pplay(
i,1)))
234 . * (paprs(
i,1)-
pplay(
i,1)) / rg
235 s(
i,1) = (
pplay(
i,1)/paprs(
i,1))**rkappa
252 . + rd * 0.5*(t(
i,
k-1)+t(
i,
k)) / paprs(
i,
k)
316 khfs(
i) = - flux_t(
i,1)*zxt*rd / (rcpd*paprs(
i,1))
317 kqfs(
i) = - flux_q(
i,1)*zxt*rd / (paprs(
i,1))
319 heatv(
i) = khfs(
i) + 0.608*zxt*kqfs(
i)
347 obklen(
i) = -t(
i,1)*ustar(
i)**3/(rg*vk*heatv(
i))
366 zdu2 =
u(
i,
k)**2+
v(
i,
k)**2
367 zdu2 = max(zdu2,1.0e-20)
369 zthvd=t(
i,
k)/s(
i,
k)*(1.+retv*
q(
i,
k))
375 zthvu = th_th(
i)*(1.+retv*qt_th(
i))
380 rhino(
i,
k) = (
z(
i,
k)-zref)*rg*(zthvd-zthvu)
381 . /(zdu2*0.5*(zthvd+zthvu))
383 IF (rhino(
i,
k).GE.ricr)
THEN
385 . (ricr-rhino(
i,
k-1))/(rhino(
i,
k-1)-rhino(
i,
k))
387 pblh(
i) = pblh(
i) + 100.
388 pblt(
i) = t(
i,
k-1) + (t(
i,
k)-t(
i,
k-1)) *
401 if (check(
i)) pblh(
i) =
z(
i,isommet)
408 IF (heatv(
i) .GT. 0.)
THEN
422 phiminv(
i) = (1.-binm*pblh(
i)/obklen(
i))**onet
441 wm(
i)= ustar(
i)*phiminv(
i)
465 q_star = kqfs(
i)/wm(
i)
466 t_star = khfs(
i)/wm(
i)
469 IF(t_star.LT.0..OR.q_star.LT.0.)
THEN
470 print*,
'i t_star q_star khfs kqfs wm',
i,t_star,q_star,
471 $ khfs(
i),kqfs(
i),wm(
i)
481 a1=b1*(1.+2.*retv*qt_th(
i))*t_star**2
482 a2=(retv*th_th(
i))**2*b2*q_star*q_star
483 a3=2.*retv*th_th(
i)*b212*q_star*t_star
487 print*,
'i a1 a2 a3 aa',
i,a1,a2,a3,aa
488 print*,
'i qT_th Th_th t_star q_star RETV b1 b2 b212',
489 $
i,qt_th(
i),th_th(
i),t_star,q_star,retv,b1,b2,b212
493 therm(
i) = sqrt( b1*(1.+2.*retv*qt_th(
i))*t_star**2
494 + + (retv*th_th(
i))**2*b2*q_star*q_star
496 + + max(0.,2.*retv*th_th(
i)*b212*q_star*t_star)
503 qt_th(
i) = qt_th(
i) + b2sr*q_star
522 zdu2 =
u(
i,
k)**2+
v(
i,
k)**2
523 zdu2 = max(zdu2,1.0e-20)
525 zthvd=t(
i,
k)/s(
i,
k)*(1.+retv*
q(
i,
k))
529 zthvu = th_th(
i)*(1.+retv*qt_th(
i)) + therm(
i)
536 rhino(
i,
k) = (
z(
i,
k)-zref)*rg*(zthvd-zthvu)
537 . /(zdu2*0.5*(zthvd+zthvu))
540 IF (rhino(
i,
k).GE.ricr)
THEN
542 . (ricr-rhino(
i,
k-1))/(rhino(
i,
k-1)-rhino(
i,
k))
544 pblh(
i) = pblh(
i) + 100.
545 pblt(
i) = t(
i,
k-1) + (t(
i,
k)-t(
i,
k-1)) *
551 if (
i.eq.950.or.
i.eq.192.or.
i.eq.624.or.
i.eq.118)
then
552 print*,
' i,Th_th,Therm,qT :',
i,th_th(
i),therm(
i),qt_th(
i)
553 q_star = kqfs(
i)/wm(
i)
554 t_star = khfs(
i)/wm(
i)
555 print*,
'q* t*, b1,b2,b212 ',q_star,t_star
556 - , b1*(1.+2.*retv*qt_th(
i))*t_star**2
557 - , (retv*th_th(
i))**2*b2*q_star**2
558 - , 2.*retv*th_th(
i)*b212*q_star*t_star
559 print*,
'zdu2 ,100.*ustar(i)**2',zdu2 ,fac*ustar(
i)**2
577 if (check(
i)) pblh(
i) =
z(
i,isommet)
592 pblmin = 700.0*ustar(
i)
593 pblh(
i) = max(pblh(
i),pblmin)
595 pblt(
i) = t(
i,2) + (t(
i,3)-t(
i,2)) *
596 . (pblh(
i)-
z(
i,2))/(
z(
i,3)-
z(
i,2))
612 fak1(
i) = ustar(
i)*pblh(
i)*vk
621 zxt=(th_th(
i)-zref*0.5*rg/rcpd/(1.+rvtmp2*qt_th(
i)))
622 . *(1.+retv*qt_th(
i))
623 phiminv(
i) = (1. - binm*pblh(
i)/obklen(
i))**onet
624 phihinv(
i) = sqrt(1. - binh*pblh(
i)/obklen(
i))
625 wm(
i) = ustar(
i)*phiminv(
i)
626 fak2(
i) = wm(
i)*pblh(
i)*vk
627 wstr(
i) = (heatv(
i)*rg*pblh(
i)/zxt)**onet
628 fak3(
i) = fakn*wstr(
i)/wm(
i)
632 the_th(
i) = th_th(
i) + therm(
i) + rlvcp*qt_th(
i)
639 DO 1000
k = 2, isommet
648 IF (zkmin.EQ.0.0 .AND. zp(
i).GT.pblh(
i)) zp(
i) = pblh(
i)
649 IF (zm(
i) .LT. pblh(
i))
THEN
650 zmzp = 0.5*(zm(
i) + zp(
i))
657 zl(
i) = zmzp/obklen(
i)
659 IF (zh(
i).LE.1.0) zzh(
i) = (1. - zh(
i))**2
678 IF (zl(
i).LE.1.)
THEN
679 pblk(
i) = fak1(
i)*zh(
i)*zzh(
i)/(1. +
betas*zl(
i))
681 pblk(
i) = fak1(
i)*zh(
i)*zzh(
i)/(
betas + zl(
i))
695 IF (zh(
i).lt.sffrac)
THEN
707 term = (1. - betam*zl(
i))**onet
708 pblk(
i) = fak1(
i)*zh(
i)*zzh(
i)*term
709 pr(
i) = term/sqrt(1. - betah*zl(
i))
718 pblk(
i) = fak2(
i)*zh(
i)*zzh(
i)
721 pr(
i) = phiminv(
i)/phihinv(
i) + ccon*fak3(
i)/fak
740 if (check(
i).or.omegafl(
i))
then
741 if (.not.zsat(
i))
then
746 zdelta=max(0.,sign(1.,rtt-t2))
747 qqsat= r2es * foeew(t2,zdelta)/
pplay(
i,
k)
749 zcor=1./(1.-retv*qqsat)
752 if (qqsat.lt.qt_th(
i))
then
758 . (qt_th(
i)-qsatbef(
i))/(qsatbef(
i)-qqsat)