--- trunk/libf/phylmd/clvent.f90 2012/07/26 14:37:37 62 +++ trunk/Sources/phylmd/clvent.f 2017/10/16 12:35:41 225 @@ -7,37 +7,39 @@ SUBROUTINE clvent(knon, dtime, u1lay, v1lay, coef, t, ven, paprs, pplay, & delp, d_ven, flux_v) - ! Author: Z. X. Li (LMD/CNRS) date: 1993/08/18 + ! Author: Z. X. Li (LMD/CNRS) + ! Date: 1993/08/18 ! Objet : diffusion verticale de la vitesse USE dimphy, ONLY: klev, klon USE suphec_m, ONLY: rd, rg - ! Arguments: - ! dtime----input-R- intervalle du temps (en second) - ! u1lay----input-R- vent u de la premiere couche (m/s) - ! v1lay----input-R- vent v de la premiere couche (m/s) - ! coef-----input-R- le coefficient d'echange (m**2/s) multiplie par - ! le cisaillement du vent (dV/dz); la premiere - ! valeur indique la valeur de Cdrag (sans unite) + INTEGER knon + REAL, intent(in):: dtime ! intervalle de temps (en s) + + REAL, intent(in):: u1lay(:), v1lay(:) ! (knon) + ! vent de la premiere couche (m/s) + + REAL, intent(in):: coef(:, :) ! (knon, klev) + ! Coefficient d'echange (m**2/s) multiplié par le cisaillement du + ! vent (dV/dz). La première valeur indique la valeur de Cdrag (sans + ! unité). + + REAL t(klon, klev), ven(klon, klev) ! t--------input-R- temperature (K) ! ven------input-R- vitesse horizontale (m/s) + REAL paprs(klon, klev+1), pplay(klon, klev), delp(klon, klev) ! paprs----input-R- pression a inter-couche (Pa) ! pplay----input-R- pression au milieu de couche (Pa) ! delp-----input-R- epaisseur de couche (Pa) - + REAL d_ven(klon, klev) ! d_ven----output-R- le changement de "ven" - ! flux_v---output-R- (diagnostic) flux du vent: (kg m/s)/(m**2 s) - INTEGER knon - REAL, intent(in):: dtime - REAL u1lay(klon), v1lay(klon) - REAL coef(klon, klev) - REAL t(klon, klev), ven(klon, klev) - REAL paprs(klon, klev+1), pplay(klon, klev), delp(klon, klev) - REAL d_ven(klon, klev) - REAL flux_v(klon, klev) + REAL, intent(out):: flux_v(:) ! (knon) + ! (diagnostic) flux du vent à la surface, en (kg m/s)/(m**2 s) + ! flux_v est le flux de moment angulaire (positif vers bas) + ! Local: INTEGER i, k REAL zx_cv(klon, 2:klev) REAL zx_dv(klon, 2:klev) @@ -57,17 +59,16 @@ DO i = 1, knon zx_alf1(i) = 1.0 zx_alf2(i) = 1.0 - zx_alf1(i) - zx_coef(i, 1) = coef(i, 1) & - * (1.0+SQRT(u1lay(i)**2+v1lay(i)**2)) & - * pplay(i, 1)/(RD*t(i, 1)) - zx_coef(i, 1) = zx_coef(i, 1) * dtime*RG + zx_coef(i, 1) = coef(i, 1) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) & + * pplay(i, 1) / (RD * t(i, 1)) + zx_coef(i, 1) = zx_coef(i, 1) * dtime * RG ENDDO DO k = 2, klev DO i = 1, knon - zx_coef(i, k) = coef(i, k)*RG/(pplay(i, k-1)-pplay(i, k)) & - *(paprs(i, k)*2/(t(i, k)+t(i, k-1))/RD)**2 - zx_coef(i, k) = zx_coef(i, k) * dtime*RG + zx_coef(i, k) = coef(i, k) * RG / (pplay(i, k-1) - pplay(i, k)) & + * (paprs(i, k) * 2 / (t(i, k) + t(i, k - 1)) / RD)**2 + zx_coef(i, k) = zx_coef(i, k) * dtime * RG ENDDO ENDDO @@ -98,19 +99,11 @@ ENDDO ENDDO - ! flux_v est le flux de moment angulaire (positif vers bas) dont - ! l'unite est: (kg m/s)/(m**2 s) DO i = 1, knon - flux_v(i, 1) = zx_coef(i, 1)/(RG*dtime) & + flux_v(i) = zx_coef(i, 1)/(RG*dtime) & *(local_ven(i, 1)*zx_alf1(i) & +local_ven(i, 2)*zx_alf2(i)) ENDDO - DO k = 2, klev - DO i = 1, knon - flux_v(i, k) = zx_coef(i, k)/(RG*dtime) & - * (local_ven(i, k)-local_ven(i, k-1)) - ENDDO - ENDDO DO k = 1, klev DO i = 1, knon