/[lmdze]/trunk/Sources/phylmd/hbtm.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/hbtm.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 178 by guez, Fri Mar 11 18:47:26 2016 UTC revision 206 by guez, Tue Aug 30 12:52:46 2016 UTC
# Line 4  module HBTM_m Line 4  module HBTM_m
4    
5  contains  contains
6    
7    SUBROUTINE HBTM(knon, paprs, pplay, t2m, q2m, ustar, flux_t, &    SUBROUTINE HBTM(paprs, pplay, t2m, q2m, ustar, flux_t, flux_q, u, v, t, q, &
8         flux_q, u, v, t, q, pblh, cape, EauLiq, ctei, pblT, therm, trmb1, &         pblh, cape, EauLiq, ctei, pblT, therm, trmb1, trmb2, trmb3, plcl)
        trmb2, trmb3, plcl)  
9    
10      ! D'apr\'es Holstag et Boville et Troen et Mahrt      ! D'apr\'es Holstag et Boville et Troen et Mahrt
11      ! JAS 47 BLM      ! JAS 47 BLM
12      ! Algorithme th\'ese Anne Mathieu  
13      ! Crit\'ere d'entra\^inement Peter Duynkerke (JAS 50)      ! Algorithme th\'ese Anne Mathieu. Crit\'ere d'entra\^inement
14      ! written by: Anne MATHIEU and Alain LAHELLEC, 22nd November 1999      ! Peter Duynkerke (JAS 50).  Written by: Anne MATHIEU and Alain
15      ! features : implem. exces Mathieu      ! LAHELLEC, 22nd November 1999.
16    
17      ! modifications : decembre 99 passage th a niveau plus bas. voir fixer      ! Modifications : d\'ecembre 99 passage th \`a niveau plus bas. Voir fixer
18      ! la prise du th a z/Lambda = -.2 (max Ray)      ! la prise du th \`a z/Lambda = -.2 (max Ray)
19      ! Autre algo : entrainement ~ Theta+v =cste mais comment=>The?      ! Autre algorithme : entra\^inement ~ Theta + v =constante
20      ! on peut fixer q a .7 qsat (cf. non adiabatique) => T2 et The2      !  mais comment ? The ?
21      ! voir aussi //KE pblh = niveau The_e ou l = env.      ! On peut fixer q \`a 0.7 qsat (cf. non adiabatique) d'où T2 et The2.
22        ! Voir aussi KE pblh = niveau The_e ou l = env.
23      ! fin therm a la HBTM passage a forme Mathieu 12/09/2001  
24        ! Adaptation \`a LMDZ version coupl\'ee. Pour le moment on fait
25      ! Adaptation a LMDZ version couplee Pour le moment on fait passer      ! passer en argument les grandeurs de surface : flux, t, q2m. On
26      ! en argument les grandeurs de surface : flux, t, q2m, t, on va      ! va utiliser syst\'ematiquement les grandeurs \`a 2 m mais on
27      ! utiliser systematiquement les grandeurs a 2m mais on garde la      ! garde la possibilit\'e de changer si besoin (jusqu'\`a pr\'esent
28      ! possibilit\'e de changer si besoin est (jusqu'\`a pr\'esent la      ! la forme de HB avec le premier niveau mod\`ele \'etait
29      ! forme de HB avec le 1er niveau modele etait conservee)      ! conserv\'ee).
30    
31      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
32      USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rtt      USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rtt
# Line 36  contains Line 35  contains
35    
36      ! Arguments:      ! Arguments:
37    
     ! nombre de points a calculer  
     INTEGER, intent(in):: knon  
   
     REAL, intent(in):: t2m(klon) ! temperature a 2 m  
     ! q a 2 et 10m  
     REAL q2m(klon)  
     REAL ustar(klon)  
38      ! pression a inter-couche (Pa)      ! pression a inter-couche (Pa)
39      REAL paprs(klon, klev+1)      REAL, intent(in):: paprs(klon, klev+1)
40      ! pression au milieu de couche (Pa)      ! pression au milieu de couche (Pa)
41      REAL pplay(klon, klev)      REAL, intent(in):: pplay(klon, klev)
42      ! Flux      REAL, intent(in):: t2m(klon) ! temperature a 2 m
43      REAL flux_t(klon, klev), flux_q(klon, klev)      ! q a 2 et 10m
44        REAL, intent(in):: q2m(klon)
45        REAL, intent(in):: ustar(klon)
46        REAL, intent(in):: flux_t(:), flux_q(:) ! (knon) flux à la surface
47    
48      ! vitesse U (m/s)      ! vitesse U (m/s)
49      REAL u(klon, klev)      REAL, intent(in):: u(klon, klev)
50      ! vitesse V (m/s)      ! vitesse V (m/s)
51      REAL v(klon, klev)      REAL, intent(in):: v(klon, klev)
52      ! temperature (K)      ! temperature (K)
53      REAL t(klon, klev)      REAL, intent(in):: t(klon, klev)
54      ! vapeur d'eau (kg/kg)      ! vapeur d'eau (kg/kg)
55      REAL q(klon, klev)      REAL, intent(in):: q(klon, klev)
56    
57        REAL, intent(out):: pblh(:) ! (knon)
58        ! Cape du thermique
59        REAL Cape(klon)
60        ! Eau liqu integr du thermique
61        REAL EauLiq(klon)
62        ! Critere d'instab d'entrainmt des nuages de
63        REAL ctei(klon)
64        REAL pblT(klon)
65        ! thermal virtual temperature excess
66        REAL therm(klon)
67        REAL trmb1(klon), trmb2(klon), trmb3(klon)
68        REAL plcl(klon)
69    
70        ! Local:
71        
72        INTEGER knon ! nombre de points a calculer
73      INTEGER isommet      INTEGER isommet
74      ! limite max sommet pbl      ! limite max sommet pbl
75      PARAMETER (isommet=klev)      PARAMETER (isommet=klev)
# Line 66  contains Line 78  contains
78      PARAMETER (vk=0.35)      PARAMETER (vk=0.35)
79      REAL ricr      REAL ricr
80      PARAMETER (ricr=0.4)      PARAMETER (ricr=0.4)
     REAL fak  
     ! b calcul du Prandtl et de dTetas  
     PARAMETER (fak=8.5)  
     REAL fakn  
81      ! a      ! a
     PARAMETER (fakn=7.2)  
82      REAL onet      REAL onet
83      PARAMETER (onet=1.0/3.0)      PARAMETER (onet=1.0/3.0)
     REAL t_coup  
     PARAMETER(t_coup=273.15)  
84      REAL zkmin      REAL zkmin
85      PARAMETER (zkmin=0.01)      PARAMETER (zkmin=0.01)
86      REAL betam      REAL betam
87      ! pour Phim / h dans la S.L stable      ! pour Phim / h dans la S.L stable
88      PARAMETER (betam=15.0)      PARAMETER (betam=15.0)
     REAL betah  
     PARAMETER (betah=15.0)  
     REAL betas  
     ! Phit dans la S.L. stable (mais 2 formes /  
     PARAMETER (betas=5.0)  
89      ! z/OBL<>1      ! z/OBL<>1
90      REAL sffrac      REAL sffrac
91      ! S.L. = z/h < .1      ! S.L. = z/h < .1
92      PARAMETER (sffrac=0.1)      PARAMETER (sffrac=0.1)
93      REAL binm      REAL binm
94      PARAMETER (binm=betam*sffrac)      PARAMETER (binm=betam*sffrac)
     REAL binh  
     PARAMETER (binh=betah*sffrac)  
     REAL ccon  
     PARAMETER (ccon=fak*sffrac*vk)  
95    
96      REAL q_star, t_star      REAL q_star, t_star
97      ! Lambert correlations T' q' avec T* q*      ! Lambert correlations T' q' avec T* q*
# Line 124  contains Line 120  contains
120      LOGICAL check(klon) ! Richardson number > critical      LOGICAL check(klon) ! Richardson number > critical
121      ! flag de prolongerment cape pour pt Omega      ! flag de prolongerment cape pour pt Omega
122      LOGICAL omegafl(klon)      LOGICAL omegafl(klon)
     REAL pblh(klon)  
     REAL pblT(klon)  
     REAL plcl(klon)  
123    
124      ! Monin-Obukhov lengh      ! Monin-Obukhov lengh
125      REAL obklen(klon)      REAL obklen(klon)
126    
127      REAL zdu2      REAL zdu2
     ! thermal virtual temperature excess  
     REAL therm(klon)  
     REAL trmb1(klon), trmb2(klon), trmb3(klon)  
128      ! Algorithme thermique      ! Algorithme thermique
129      REAL s(klon, klev) ! [P/Po]^Kappa milieux couches      REAL s(klon, klev) ! [P/Po]^Kappa milieux couches
130      ! total water of thermal      ! total water of thermal
# Line 143  contains Line 133  contains
133      REAL qsatbef(klon)      REAL qsatbef(klon)
134      ! le thermique est sature      ! le thermique est sature
135      LOGICAL Zsat(klon)      LOGICAL Zsat(klon)
     ! Cape du thermique  
     REAL Cape(klon)  
     ! Eau liqu integr du thermique  
     REAL EauLiq(klon)  
     ! Critere d'instab d'entrainmt des nuages de  
     REAL ctei(klon)  
136      REAL zthvd, zthvu, qqsat      REAL zthvd, zthvu, qqsat
137      REAL t2      REAL t2
138    
# Line 164  contains Line 148  contains
148    
149      !-----------------------------------------------------------------      !-----------------------------------------------------------------
150    
151        knon = size(pblh)
152    
153      ! initialisations      ! initialisations
154      q_star = 0      q_star = 0
155      t_star = 0      t_star = 0
# Line 201  contains Line 187  contains
187         zxt = t2m(i)         zxt = t2m(i)
188    
189         ! convention >0 vers le bas ds lmdz         ! convention >0 vers le bas ds lmdz
190         khfs(i) = - flux_t(i, 1)*zxt*Rd / (RCPD*paprs(i, 1))         khfs(i) = - flux_t(i)*zxt*Rd / (RCPD*paprs(i, 1))
191         kqfs(i) = - flux_q(i, 1)*zxt*Rd / (paprs(i, 1))         kqfs(i) = - flux_q(i)*zxt*Rd / paprs(i, 1)
192         ! verifier que khfs et kqfs sont bien de la forme w'l'         ! verifier que khfs et kqfs sont bien de la forme w'l'
193         heatv(i) = khfs(i) + 0.608*zxt*kqfs(i)         heatv(i) = khfs(i) + 0.608*zxt*kqfs(i)
194         ! a comparer aussi aux sorties de clqh : flux_T/RoCp et flux_q/RoLv         ! a comparer aussi aux sorties de clqh : flux_T/RoCp et flux_q/RoLv

Legend:
Removed from v.178  
changed lines
  Added in v.206

  ViewVC Help
Powered by ViewVC 1.1.21