4 SUBROUTINE hbtm2l(knon, paprs, pplay, t2m, t10m, q2m, q10m, ustar, flux_t, flux_q, u, v, t, q, pblh, therm, plcl, cape, &
5 cin, eauliq, ctei, d_qt, d_thv, dlt_2, xhis, posint, omega, diagok)
73 REAL b1, b2, b212, b2sr
117 REAL the1, the2, aa, bb, zthvd, zthvu, qsat, chi, rh, zxt, zdu2
118 REAL rnum, denom, th1, th2, tv1, tv2, thv1, thv2, ql1, ql2, dt
119 REAL dqsat_dt, qsat2, qt1, q1, q2, t1, t2, tl1, te2, xnull, delt_the
120 REAL delt_qt, quadsat, spblh, reduc
128 REAL zcor, zdelta, zcvm5
149 cape(:) = missing_val
152 eauliq(:) = missing_val
153 ctei(:) = missing_val
154 d_qt(:) = missing_val
155 d_thv(:) = missing_val
156 dlt_2(:) = missing_val
157 xhis(:) = missing_val
158 posint(:) = missing_val
160 omega(:) = missing_val
166 z(i, 1) = rd*t(i, 1)/(0.5*(paprs(i,1)+pplay(i,1)))*(paprs(i,1)-pplay(i,1))/
rg
167 s(i, 1) = (pplay(i,1)/paprs(i,1))**rkappa
183 z(i, k) = z(i, k-1) + rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i,k-1)-pplay(i,k))/
rg
184 s(i, k) = (pplay(i,k)/paprs(i,1))**rkappa
214 khfs(i) = -flux_t(i, 1)*zxt*rd/(rcpd*paprs(i,1))
215 kqfs(i) = -flux_q(i, 1)*zxt*rd/(paprs(i,1))
217 heatv(i) = khfs(i) + retv*zxt*kqfs(i)
233 IF (heatv(i)>0.0001)
THEN
235 obklen(i) = -t(i, 1)*ustar(i)**3/(
rg*vk*heatv(i))
238 pblh(i) = 700.0*ustar(i)
254 zdu2 = u(i, k)**2 + v(i, k)**2
255 zdu2 = max(zdu2, 1.0e-20)
257 zthvd = t(i, k)/s(i, k)*(1.+retv*q(i,k))
258 zthvu = th_th(i)*(1.+retv*qt_th(i))
260 rhino(i, k) = (z(i,k)-zref)*
rg*(zthvd-zthvu)/(zdu2*0.5*(zthvd+zthvu))
262 IF (rhino(i,k)>=ricr)
THEN
263 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rhino(i,k-1))/(rhino(i,k-1)-rhino(i,k))
265 pblh(i) = pblh(i) + 100.
279 IF (check(i)) pblh(i) = z(i, isommet)
286 IF (heatv(i)>0.)
THEN
300 phiminv(i) = (1.-binm*pblh(i)/obklen(i))**onet
319 wm(i) = ustar(i)*phiminv(i)
345 q_star = max(0., kqfs(i)/wm(i))
346 t_star = max(0., khfs(i)/wm(i))
351 therm(i) = sqrt(b1*(1.+2.*retv*qt_th(i))*t_star**2+(retv*th_th(i))**2*b2*q_star*q_star+2.*retv*th_th(i)*b212* &
358 qt_th(i) = qt_th(i) + b2sr*q_star
374 zdu2 = u(i, k)**2 + v(i, k)**2
375 zdu2 = max(zdu2, 1.0e-20)
377 zthvd = t(i, k)/s(i, k)*(1.+retv*q(i,k))
381 zthvu = th_th(i)*(1.+retv*qt_th(i)) + therm(i)
386 rhino(i, k) = (z(i,k)-zref)*
rg*(zthvd-zthvu)/(zdu2*0.5*(zthvd+zthvu))
389 IF (rhino(i,k)>=ricr)
THEN
390 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rhino(i,k-1))/(rhino(i,k-1)-rhino(i,k))
392 pblh(i) = pblh(i) + 100.
405 IF (check(i)) pblh(i) = z(i, isommet)
420 pblmin = 700.0*ustar(i)
421 IF (pblh(i)<pblmin) check(i) = .
true.
425 pblh(i) = 700.0*ustar(i)
447 zxt = (th_th(i)-zref*0.5*
rg/rcpd/(1.+rvtmp2*qt_th(i)))*(1.+retv*qt_th(i))
448 phiminv(i) = (1.-binm*pblh(i)/obklen(i))**onet
449 phihinv(i) = sqrt(1.-binh*pblh(i)/obklen(i))
450 wm(i) = ustar(i)*phiminv(i)
478 phiminv(i) = (1.-binm*pblh(i)/obklen(i))**onet
479 wm(i) = ustar(i)*phiminv(i)
480 q_star = max(0., kqfs(i)/wm(i))
481 t_star = max(0., khfs(i)/wm(i))
482 therm(i) = sqrt(b1*(1.+2.*retv*qt_th(i))*t_star**2+(retv*th_th(i))**2*b2*q_star*q_star+2.*retv*th_th(i)*b212* &
491 th_th(i) = th_th(i) + therm(i)
496 the_th(i) = th_th(i) + rlvcp*qt_th(i)
501 zdelta = max(0., sign(1.,rtt-t2))
502 qsat = r2es*foeew(t2, zdelta)/paprs(i, 1)
503 qsat = min(0.5, qsat)
504 zcor = 1./(1.-retv*qsat)
508 chi = t2/(1669.0-122.0*rh-t2)
509 plcl(i) = paprs(i, 1)*(rh**chi)
516 IF (heatv(i)>0.) check(i) = .
true.
525 IF (check(i) .OR. omegafl(i))
THEN
533 zdelta = max(0., sign(1.,rtt-t1))
534 qsat = r2es*foeew(t1, zdelta)/pplay(i, k)
535 qsat = min(0.5, qsat)
536 zcor = 1./(1.-retv*qsat)
538 q1 = min(q(i,k), qsat)
539 ql1 = max(0., q(i,k)-q1)
542 DO WHILE (abs(dt)>=dt0)
544 zdelta = max(0., sign(1.,rtt-t1))
545 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
546 qsat = r2es*foeew(t1, zdelta)/pplay(i, k)
547 qsat = min(0.5, qsat)
548 zcor = 1./(1.-retv*qsat)
550 dqsat_dt = foede(t1, zdelta, zcvm5, qsat, zcor)
553 denom = 1. + rlvcp*dqsat_dt
554 q1 = min(q(i,k), qsat)
556 rnum = tl1 - t1 + rlvcp*ql1
560 tv1 = t1*(1.+retv*q1-ql1)
564 IF (.NOT. zsat(i))
THEN
566 t2 = s(i, k)*the_th(i) - rlvcp*qt_th(i)
567 zdelta = max(0., sign(1.,rtt-t2))
568 qsat = r2es*foeew(t2, zdelta)/pplay(i, k)
569 qsat = min(0.5, qsat)
570 zcor = 1./(1.-retv*qsat)
572 q2 = min(qt_th(i), qsat)
573 ql2 = max(0., qt_th(i)-q2)
574 IF (ql2>0.0001) zsat(i) = .
true.
577 IF (zm(i)<pblh(i) .AND. zp(i)>=pblh(i))
THEN
578 reduc = (pblh(i)-zm(i))/(zp(i)-zm(i))
579 spblh = s(i, k-1) + reduc*(s(i,k)-s(i,k-1))
581 t1 = (t(i,k-1)+reduc*(t(i,k)-t(i,k-1)))
582 thv1 = t1*(1.+retv*q(i,k))/spblh
584 thv2 = t2/spblh*(1.+retv*qt_th(i))
585 ctei(i) = thv1 - thv2
586 tv2 = t2*(1.+retv*q2-ql2)
598 te2 = s(i, k)*the_th(i)
599 DO WHILE (abs(dt)>=dt0)
600 zdelta = max(0., sign(1.,rtt-t2))
601 zcvm5 = r5les*(1.-zdelta) + r5ies*zdelta
602 qsat = r2es*foeew(t2, zdelta)/pplay(i, k)
603 qsat = min(0.5, qsat)
604 zcor = 1./(1.-retv*qsat)
606 dqsat_dt = foede(t2, zdelta, zcvm5, qsat, zcor)
609 denom = 1. + rlvcp*dqsat_dt
610 rnum = te2 - t2 - rlvcp*qsat
614 q2 = min(qt_th(i), qsat)
615 ql2 = max(0., qt_th(i)-q2)
617 IF (zm(i)<pblh(i))
THEN
620 IF (zp(i)>=pblh(i))
THEN
621 reduc = (pblh(i)-zm(i))/(zp(i)-zm(i))
622 spblh = s(i, k-1) + reduc*(s(i,k)-s(i,k-1))
624 cape(i) = kape(i) + reduc*(zp(i)-zm(i))*
rg*.5/(tv2+tv1)*max(0., (tv2-tv1))
625 eauliq(i) = eauliq(i) + reduc*(paprs(i,k-1)-paprs(i,k))*ql2/
rg
627 the2 = (t2+rlvcp*q2)/spblh
629 t1 = (t(i,k-1)+reduc*(t(i,k)-t(i,k-1)))
630 the1 = (t1+rlvcp*q(i,k))/spblh
634 delt_the = the1 - the2
635 delt_qt = q(i, k) - qt_th(i)
637 dlt_2(i) = .63*delt_the - the2*delt_qt
640 IF (dlt_2(i)<-0.1)
THEN
642 aa = delt_the - delt_qt*(rlvcp-retv*the2)
643 bb = (rlvcp-(1.+retv)*the2)*ql2
646 xhis(i) = bb/(aa-dlt_2(i))
650 IF (xhis(i)>0.1)
THEN
651 ctei(i) = dlt_2(i)*xhis(i) + aa*(1.-xhis(i)) + bb*alog(xhis(i))
653 ctei(i) = .5*(dlt_2(i)+aa-bb)
656 posint(i) = aa - bb + bb*alog(xnull)
667 IF (check(i)) eauliq(i) = eauliq(i) + (paprs(i,k)-paprs(i,k+1))*ql2/
rg
673 tv2 = t2*(1.+retv*q2-ql2)
677 kape(i) = kape(i) + (zp(i)-zm(i))*
rg*.5/(tv2+tv1)*max(0., (tv2-tv1))
679 IF (zcin(i) .AND. tv2-tv1>0.)
THEN
683 IF (.NOT. zcin(i) .AND. tv2-tv1<0.)
THEN
685 kin(i) = kin(i) + (zp(i)-zm(i))*
rg*.5/(tv2+tv1)*min(0., (tv2-tv1))
687 IF (kape(i)+kin(i)<0.)
THEN
subroutine hbtm2l(knon, paprs, pplay, t2m, t10m, q2m, q10m, ustar, flux_t, flux_q, u, v, t, q, pblh, therm, plcl, cape, cin, eauliq, ctei, d_qt, d_thv, dlt_2, xhis, posint, omega, diagok)
!$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
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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