--- trunk/Sources/phylmd/hbtm.f 2016/03/21 15:36:26 186 +++ trunk/phylmd/Interface_surf/hbtm.f 2018/07/26 16:45:51 298 @@ -4,8 +4,8 @@ contains - SUBROUTINE HBTM(knon, paprs, pplay, t2m, q2m, ustar, flux_t, flux_q, u, v, & - t, q, pblh, cape, EauLiq, ctei, pblT, therm, trmb1, trmb2, trmb3, plcl) + SUBROUTINE HBTM(paprs, pplay, t2m, q2m, ustar, flux_t, flux_q, u, v, t, q, & + pblh, cape, EauLiq, ctei, pblT, therm, plcl) ! D'apr\'es Holstag et Boville et Troen et Mahrt ! JAS 47 BLM @@ -35,9 +35,6 @@ ! Arguments: - ! nombre de points a calculer - INTEGER, intent(in):: knon - ! pression a inter-couche (Pa) REAL, intent(in):: paprs(klon, klev+1) ! pression au milieu de couche (Pa) @@ -45,17 +42,12 @@ REAL, intent(in):: t2m(klon) ! temperature a 2 m ! q a 2 et 10m REAL, intent(in):: q2m(klon) - REAL, intent(in):: ustar(klon) - ! Flux - REAL, intent(in):: flux_t(klon, klev), flux_q(klon, klev) - ! vitesse U (m/s) - REAL, intent(in):: u(klon, klev) - ! vitesse V (m/s) - REAL, intent(in):: v(klon, klev) - ! temperature (K) - REAL, intent(in):: t(klon, klev) - ! vapeur d'eau (kg/kg) - REAL, intent(in):: q(klon, klev) + REAL, intent(in):: ustar(:) ! (knon) + REAL, intent(in):: flux_t(:), flux_q(:) ! (knon) flux à la surface + REAL, intent(in):: u(:, :) ! (knon, klev) vitesse U (m/s) + REAL, intent(in):: v(:, :) ! (knon, klev) vitesse V (m/s) + REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K) + REAL, intent(in):: q(:, :) ! (knon, klev) vapeur d'eau (kg/kg) REAL, intent(out):: pblh(:) ! (knon) ! Cape du thermique @@ -67,11 +59,11 @@ REAL pblT(klon) ! thermal virtual temperature excess REAL therm(klon) - REAL trmb1(klon), trmb2(klon), trmb3(klon) REAL plcl(klon) ! Local: - + + INTEGER knon ! nombre de points a calculer INTEGER isommet ! limite max sommet pbl PARAMETER (isommet=klev) @@ -80,36 +72,20 @@ PARAMETER (vk=0.35) REAL ricr PARAMETER (ricr=0.4) - REAL fak - ! b calcul du Prandtl et de dTetas - PARAMETER (fak=8.5) - REAL fakn ! a - PARAMETER (fakn=7.2) REAL onet PARAMETER (onet=1.0/3.0) - REAL t_coup - PARAMETER(t_coup=273.15) REAL zkmin PARAMETER (zkmin=0.01) REAL betam ! pour Phim / h dans la S.L stable 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) ! z/OBL<>1 REAL sffrac ! S.L. = z/h < .1 PARAMETER (sffrac=0.1) REAL binm PARAMETER (binm=betam*sffrac) - REAL binh - PARAMETER (binh=betah*sffrac) - REAL ccon - PARAMETER (ccon=fak*sffrac*vk) REAL q_star, t_star ! Lambert correlations T' q' avec T* q* @@ -166,6 +142,8 @@ !----------------------------------------------------------------- + knon = size(pblh) + ! initialisations q_star = 0 t_star = 0 @@ -203,8 +181,8 @@ zxt = t2m(i) ! convention >0 vers le bas ds lmdz - khfs(i) = - flux_t(i, 1)*zxt*Rd / (RCPD*paprs(i, 1)) - kqfs(i) = - flux_q(i, 1)*zxt*Rd / paprs(i, 1) + khfs(i) = - flux_t(i)*zxt*Rd / (RCPD*paprs(i, 1)) + kqfs(i) = - flux_q(i)*zxt*Rd / paprs(i, 1) ! verifier que khfs et kqfs sont bien de la forme w'l' heatv(i) = khfs(i) + 0.608*zxt*kqfs(i) ! a comparer aussi aux sorties de clqh : flux_T/RoCp et flux_q/RoLv @@ -223,9 +201,6 @@ plcl(i) = 6000. ! Lambda = -u*^3 / (alpha.g.kvon. obklen(i) = -t(i, 1)*ustar(i)**3/(RG*vk*heatv(i)) - trmb1(i) = 0. - trmb2(i) = 0. - trmb3(i) = 0. ENDDO ! PBL height calculation: Search for level of pbl. Scan upward