4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE HBTM(knon, paprs, pplay, t2m, t10m, q2m, q10m, ustar, flux_t, & |
SUBROUTINE HBTM(knon, paprs, pplay, t2m, q2m, ustar, flux_t, & |
8 |
flux_q, u, v, t, q, pblh, cape, EauLiq, ctei, pblT, therm, trmb1, & |
flux_q, u, v, t, q, pblh, cape, EauLiq, ctei, pblT, therm, trmb1, & |
9 |
trmb2, trmb3, plcl) |
trmb2, trmb3, plcl) |
10 |
|
|
11 |
! D'après Holstag et Boville et Troen et Mahrt |
! D'apr\'es Holstag et Boville et Troen et Mahrt |
12 |
! JAS 47 BLM |
! JAS 47 BLM |
13 |
! Algorithme thèse Anne Mathieu |
! Algorithme th\'ese Anne Mathieu |
14 |
! Critère d'entraînement Peter Duynkerke (JAS 50) |
! Crit\'ere d'entra\^inement Peter Duynkerke (JAS 50) |
15 |
! written by: Anne MATHIEU and Alain LAHELLEC, 22nd November 1999 |
! written by: Anne MATHIEU and Alain LAHELLEC, 22nd November 1999 |
16 |
! features : implem. exces Mathieu |
! features : implem. exces Mathieu |
17 |
|
|
23 |
|
|
24 |
! fin therm a la HBTM passage a forme Mathieu 12/09/2001 |
! fin therm a la HBTM passage a forme Mathieu 12/09/2001 |
25 |
|
|
26 |
! Adaptation a LMDZ version couplee |
! Adaptation a LMDZ version couplee Pour le moment on fait passer |
27 |
! Pour le moment on fait passer en argument les grandeurs de surface : |
! en argument les grandeurs de surface : flux, t, q2m, t, on va |
28 |
! flux, t, q2m, t, q10m, on va utiliser systematiquement les grandeurs a 2m |
! utiliser systematiquement les grandeurs a 2m mais on garde la |
29 |
! mais on garde la possibilité de changer si besoin est (jusqu'à présent |
! possibilit\'e de changer si besoin est (jusqu'à pr\'esent la |
30 |
! la forme de HB avec le 1er niveau modele etait conservee) |
! forme de HB avec le 1er niveau modele etait conservee) |
31 |
|
|
32 |
USE dimphy, ONLY: klev, klon, max |
USE dimphy, ONLY: klev, klon |
33 |
USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlvtt, rtt, rv |
USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlvtt, rtt, rv |
34 |
USE yoethf_m, ONLY: r2es, rvtmp2 |
USE yoethf_m, ONLY: r2es, rvtmp2 |
35 |
USE fcttre, ONLY: foeew |
USE fcttre, ONLY: foeew |
41 |
INTEGER, intent(in):: knon |
INTEGER, intent(in):: knon |
42 |
|
|
43 |
REAL, intent(in):: t2m(klon) ! temperature a 2 m |
REAL, intent(in):: t2m(klon) ! temperature a 2 m |
|
real t10m(klon) ! temperature a 10 m |
|
44 |
! q a 2 et 10m |
! q a 2 et 10m |
45 |
REAL q2m(klon), q10m(klon) |
REAL q2m(klon) |
46 |
REAL ustar(klon) |
REAL ustar(klon) |
47 |
! pression a inter-couche (Pa) |
! pression a inter-couche (Pa) |
48 |
REAL paprs(klon, klev+1) |
REAL paprs(klon, klev+1) |
163 |
REAL EauLiq(klon) |
REAL EauLiq(klon) |
164 |
! Critere d'instab d'entrainmt des nuages de |
! Critere d'instab d'entrainmt des nuages de |
165 |
REAL ctei(klon) |
REAL ctei(klon) |
166 |
REAL the1, the2, aa, zthvd, zthvu, xintpos, qqsat |
REAL aa, zthvd, zthvu, qqsat |
167 |
REAL a1, a2, a3 |
REAL a1, a2, a3 |
168 |
REAL xhis, rnum, th1, thv1, thv2, ql2 |
REAL t2 |
|
REAL qsat2, qT1, q2, t1, t2, xnull |
|
|
REAL quadsat, spblh, reduc |
|
169 |
|
|
170 |
! inverse phi function for momentum |
! inverse phi function for momentum |
171 |
REAL phiminv(klon) |
REAL phiminv(klon) |
195 |
REAL zm(klon) |
REAL zm(klon) |
196 |
! current level height + one level up |
! current level height + one level up |
197 |
REAL zp(klon) |
REAL zp(klon) |
198 |
REAL zcor, zdelta, zcvm5 |
REAL zcor |
199 |
|
|
200 |
REAL fac, pblmin, zmzp, term |
REAL fac, pblmin, zmzp, term |
201 |
|
|
517 |
if (.not. Zsat(i)) then |
if (.not. Zsat(i)) then |
518 |
T2 = T2m(i) * s(i, k) |
T2 = T2m(i) * s(i, k) |
519 |
! thermodyn functions |
! thermodyn functions |
520 |
zdelta=MAX(0., SIGN(1., RTT - T2)) |
qqsat= r2es * FOEEW(T2, RTT >= T2) / pplay(i, k) |
|
qqsat= r2es * FOEEW(T2, zdelta) / pplay(i, k) |
|
521 |
qqsat=MIN(0.5, qqsat) |
qqsat=MIN(0.5, qqsat) |
522 |
zcor=1./(1.-retv*qqsat) |
zcor=1./(1.-retv*qqsat) |
523 |
qqsat=qqsat*zcor |
qqsat=qqsat*zcor |