5 SUBROUTINE hbtm(knon, paprs, pplay, t2m, t10m, q2m, q10m, ustar, wstar, &
6 flux_t, flux_q,
u, v, t, q, pblh, cape, eauliq, ctei, pblt, therm, trmb1, &
65 REAL,
PARAMETER :: vk = 0.35
66 REAL,
PARAMETER :: ricr = 0.4
67 REAL,
PARAMETER :: fak = 8.5
68 REAL,
PARAMETER :: fakn = 7.2
69 REAL,
PARAMETER :: onet = 1.0/3.0
70 REAL,
PARAMETER :: t_coup = 273.15
71 REAL,
PARAMETER :: zkmin = 0.01
72 REAL,
PARAMETER :: betam = 15.0
73 REAL,
PARAMETER :: betah = 15.0
74 REAL,
PARAMETER :: betas = 5.0
75 REAL,
PARAMETER :: sffrac = 0.1
76 REAL,
PARAMETER :: usmin = 1.e-12
77 REAL,
PARAMETER :: binm = betam*sffrac
78 REAL,
PARAMETER :: binh = betah*sffrac
79 REAL,
PARAMETER :: ccon = fak*sffrac*vk
80 REAL,
PARAMETER :: b1 = 70., b2 = 20.
81 REAL,
PARAMETER :: zref = 2.
102 LOGICAL omegafl(
klon)
126 REAL the1, the2, aa, bb, zthvd, zthvu, xintpos, qqsat
130 REAL xhis, rnum, denom, th1, th2, thv1, thv2, ql2
131 REAL dqsat_dt, qsat2, qt1, q2, t1, t2, xnull, delt_the
132 REAL delt_qt, delt_2, quadsat, spblh, reduc
147 REAL zcor, zdelta, zcvm5
149 REAL fac, pblmin, zmzp, term
211 z(i, 1) = rd*t(i, 1)/(0.5*(paprs(i,1)+pplay(i,1)))*(paprs(i,1)-pplay(i,1) &
213 s(i, 1) = (pplay(i,1)/paprs(i,1))**rkappa
229 z(i, k) = z(i, k-1) + rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i,k-1 &
231 s(i, k) = (pplay(i,k)/paprs(i,1))**rkappa
294 khfs(i) = -flux_t(i, 1)*zxt*rd/(rcpd*paprs(i,1))
295 kqfs(i) = -flux_q(i, 1)*zxt*rd/(paprs(i,1))
297 heatv(i) = khfs(i) + 0.608*zxt*kqfs(i)
325 unsobklen(i) = -
rg*vk*heatv(i)/(t(i,1)*max(ustar(i),usmin)**3)
345 zdu2 = u(i, k)**2 + v(i, k)**2
346 zdu2 = max(zdu2, 1.0e-20)
348 zthvd = t(i, k)/s(i, k)*(1.+retv*q(i,k))
354 zthvu = th_th(i)*(1.+retv*qt_th(i))
359 rhino(i, k) = (z(i,k)-zref)*
rg*(zthvd-zthvu)/(zdu2*0.5*(zthvd+zthvu))
361 IF (rhino(i,k)>=ricr)
THEN
362 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rhino(i,k-1))/(rhino( &
365 pblh(i) = pblh(i) + 100.
366 pblt(i) = t(i, k-1) + (t(i,k)-t(i,k-1))*(pblh(i)-z(i,k-1))/(z(i,k)- &
379 IF (check(i)) pblh(i) = z(i, isommet)
386 IF (heatv(i)>0.)
THEN
400 phiminv(i) = (1.-binm*pblh(i)*unsobklen(i))**onet
420 wm(i) = ustar(i)*phiminv(i)
445 q_star = kqfs(i)/wm(i)
446 t_star = khfs(i)/wm(i)
449 IF (t_star<0. .OR. q_star<0.)
THEN
450 print *,
'i t_star q_star khfs kqfs wm', i, t_star, q_star, &
451 khfs(i), kqfs(i), wm(i)
461 a1 = b1*(1.+2.*retv*qt_th(i))*t_star**2
462 a2 = (retv*th_th(i))**2*b2*q_star*q_star
463 a3 = 2.*retv*th_th(i)*b212*q_star*t_star
467 print *,
'i a1 a2 a3 aa', i, a1, a2, a3, aa
468 print *,
'i qT_th Th_th t_star q_star RETV b1 b2 b212', i, &
469 qt_th(i), th_th(i), t_star, q_star, retv, b1, b2, b212
473 therm(i) = sqrt(b1*(1.+2.*retv*qt_th(i))*t_star**2+(retv*th_th( &
474 i))**2*b2*q_star*q_star &
476 +max(0.,2.*retv*th_th(i)*b212*q_star*t_star))
482 qt_th(i) = qt_th(i) + b2sr*q_star
503 zdu2 = u(i, k)**2 + v(i, k)**2
504 zdu2 = max(zdu2, 1.0e-20)
506 zthvd = t(i, k)/s(i, k)*(1.+retv*q(i,k))
510 zthvu = th_th(i)*(1.+retv*qt_th(i)) + therm(i)
517 rhino(i, k) = (z(i,k)-zref)*
rg*(zthvd-zthvu)/(zdu2*0.5*(zthvd+zthvu))
520 IF (rhino(i,k)>=ricr)
THEN
521 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rhino(i,k-1))/(rhino( &
524 pblh(i) = pblh(i) + 100.
525 pblt(i) = t(i, k-1) + (t(i,k)-t(i,k-1))*(pblh(i)-z(i,k-1))/(z(i,k)- &
531 IF (i==950 .OR. i==192 .OR. i==624 .OR. i==118)
THEN
532 print *,
' i,Th_th,Therm,qT :', i, th_th(i), therm(i), qt_th(i)
533 q_star = kqfs(i)/wm(i)
534 t_star = khfs(i)/wm(i)
535 print *,
'q* t*, b1,b2,b212 ', q_star, t_star, &
536 b1*(1.+2.*retv*qt_th(i))*t_star**2, &
537 (retv*th_th(i))**2*b2*q_star**2, 2.*retv*th_th(i)*b212*q_star &
539 print *,
'zdu2 ,100.*ustar(i)**2', zdu2, fac*ustar(i)**2
557 IF (check(i)) pblh(i) = z(i, isommet)
572 pblmin = 700.0*ustar(i)
573 pblh(i) = max(pblh(i), pblmin)
575 pblt(i) = t(i, 2) + (t(i,3)-t(i,2))*(pblh(i)-z(i,2))/(z(i,3)-z(i,2))
591 fak1(i) = ustar(i)*pblh(i)*vk
600 zxt = (th_th(i)-zref*0.5*
rg/rcpd/(1.+rvtmp2*qt_th(i)))* &
602 phiminv(i) = (1.-binm*pblh(i)*unsobklen(i))**onet
603 phihinv(i) = sqrt(1.-binh*pblh(i)*unsobklen(i))
604 wm(i) = ustar(i)*phiminv(i)
605 fak2(i) = wm(i)*pblh(i)*vk
606 wstar(i) = (heatv(i)*
rg*pblh(i)/zxt)**onet
607 fak3(i) = fakn*wstar(i)/wm(i)
613 the_th(i) = th_th(i) + therm(i) + rlvcp*qt_th(i)
629 IF (zkmin==0.0 .AND. zp(i)>pblh(i)) zp(i) = pblh(i)
630 IF (zm(i)<pblh(i))
THEN
631 zmzp = 0.5*(zm(i)+zp(i))
638 zl(i) = zmzp*unsobklen(i)
640 IF (zh(i)<=1.0) zzh(i) = (1.-zh(i))**2
660 pblk(i) = fak1(i)*zh(i)*zzh(i)/(1.+betas*zl(i))
662 pblk(i) = fak1(i)*zh(i)*zzh(i)/(betas+zl(i))
676 IF (zh(i)<sffrac)
THEN
688 term = (1.-betam*zl(i))**onet
689 pblk(i) = fak1(i)*zh(i)*zzh(i)*term
690 pr(i) = term/sqrt(1.-betah*zl(i))
699 pblk(i) = fak2(i)*zh(i)*zzh(i)
702 pr(i) = phiminv(i)/phihinv(i) + ccon*fak3(i)/fak
721 IF (check(i) .OR. omegafl(i))
THEN
722 IF (.NOT. zsat(i))
THEN
727 zdelta = max(0., sign(1.,rtt-t2))
728 qqsat = r2es*foeew(t2, zdelta)/pplay(i, k)
729 qqsat = min(0.5, qqsat)
730 zcor = 1./(1.-retv*qqsat)
733 IF (qqsat<qt_th(i))
THEN
738 plcl(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(qt_th(i)-qsatbef(i))/( &
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm u(l)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine hbtm(knon, paprs, pplay, t2m, t10m, q2m, q10m, ustar, wstar, flux_t, flux_q, u, v, t, q, pblh, cape, eauliq, ctei, pblt, therm, trmb1, trmb2, trmb3, plcl)