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

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

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

trunk/libf/phylmd/clvent.f revision 57 by guez, Mon Jan 30 12:54:02 2012 UTC trunk/libf/phylmd/clvent.f90 revision 62 by guez, Thu Jul 26 14:37:37 2012 UTC
# Line 1  Line 1 
1        SUBROUTINE clvent(knon,dtime, u1lay,v1lay,coef,t,ven,  module clvent_m
2       e                  paprs,pplay,delp,  
3       s                  d_ven,flux_v)    IMPLICIT none
4        use dimens_m  
5        use dimphy  contains
6        use conf_gcm_m  
7        use SUPHEC_M    SUBROUTINE clvent(knon, dtime, u1lay, v1lay, coef, t, ven, paprs, pplay, &
8        IMPLICIT none         delp, d_ven, flux_v)
9  c======================================================================  
10  c Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818      ! Author: Z. X. Li (LMD/CNRS) date: 1993/08/18
11  c Objet: diffusion vertical de la vitesse "ven"      ! Objet : diffusion verticale de la vitesse
12  c======================================================================  
13  c Arguments:      USE dimphy, ONLY: klev, klon
14  c dtime----input-R- intervalle du temps (en second)      USE suphec_m, ONLY: rd, rg
15  c u1lay----input-R- vent u de la premiere couche (m/s)  
16  c v1lay----input-R- vent v de la premiere couche (m/s)      ! Arguments:
17  c coef-----input-R- le coefficient d'echange (m**2/s) multiplie par      ! dtime----input-R- intervalle du temps (en second)
18  c                   le cisaillement du vent (dV/dz); la premiere      ! u1lay----input-R- vent u de la premiere couche (m/s)
19  c                   valeur indique la valeur de Cdrag (sans unite)      ! v1lay----input-R- vent v de la premiere couche (m/s)
20  c t--------input-R- temperature (K)      ! coef-----input-R- le coefficient d'echange (m**2/s) multiplie par
21  c ven------input-R- vitesse horizontale (m/s)      !                   le cisaillement du vent (dV/dz); la premiere
22  c paprs----input-R- pression a inter-couche (Pa)      !                   valeur indique la valeur de Cdrag (sans unite)
23  c pplay----input-R- pression au milieu de couche (Pa)      ! t--------input-R- temperature (K)
24  c delp-----input-R- epaisseur de couche (Pa)      ! ven------input-R- vitesse horizontale (m/s)
25  c      ! paprs----input-R- pression a inter-couche (Pa)
26  c      ! pplay----input-R- pression au milieu de couche (Pa)
27  c d_ven----output-R- le changement de "ven"      ! delp-----input-R- epaisseur de couche (Pa)
28  c flux_v---output-R- (diagnostic) flux du vent: (kg m/s)/(m**2 s)  
29  c======================================================================      ! d_ven----output-R- le changement de "ven"
30        INTEGER knon      ! flux_v---output-R- (diagnostic) flux du vent: (kg m/s)/(m**2 s)
31        REAL, intent(in):: dtime  
32        REAL u1lay(klon), v1lay(klon)      INTEGER knon
33        REAL coef(klon,klev)      REAL, intent(in):: dtime
34        REAL t(klon,klev), ven(klon,klev)      REAL u1lay(klon), v1lay(klon)
35        REAL paprs(klon,klev+1), pplay(klon,klev), delp(klon,klev)      REAL coef(klon, klev)
36        REAL d_ven(klon,klev)      REAL t(klon, klev), ven(klon, klev)
37        REAL flux_v(klon,klev)      REAL paprs(klon, klev+1), pplay(klon, klev), delp(klon, klev)
38  c======================================================================      REAL d_ven(klon, klev)
39  c======================================================================      REAL flux_v(klon, klev)
40        INTEGER i, k  
41        REAL zx_cv(klon,2:klev)      INTEGER i, k
42        REAL zx_dv(klon,2:klev)      REAL zx_cv(klon, 2:klev)
43        REAL zx_buf(klon)      REAL zx_dv(klon, 2:klev)
44        REAL zx_coef(klon,klev)      REAL zx_buf(klon)
45        REAL local_ven(klon,klev)      REAL zx_coef(klon, klev)
46        REAL zx_alf1(klon), zx_alf2(klon)      REAL local_ven(klon, klev)
47  c======================================================================      REAL zx_alf1(klon), zx_alf2(klon)
48        DO k = 1, klev  
49        DO i = 1, knon      !------------------------------------------------------------------
50           local_ven(i,k) = ven(i,k)  
51        ENDDO      DO k = 1, klev
52        ENDDO         DO i = 1, knon
53  c======================================================================            local_ven(i, k) = ven(i, k)
54        DO i = 1, knon         ENDDO
55  ccc         zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))      ENDDO
56           zx_alf1(i) = 1.0  
57           zx_alf2(i) = 1.0 - zx_alf1(i)      DO i = 1, knon
58           zx_coef(i,1) = coef(i,1)         zx_alf1(i) = 1.0
59       .                 * (1.0+SQRT(u1lay(i)**2+v1lay(i)**2))         zx_alf2(i) = 1.0 - zx_alf1(i)
60       .                 * pplay(i,1)/(RD*t(i,1))         zx_coef(i, 1) = coef(i, 1) &
61           zx_coef(i,1) = zx_coef(i,1) * dtime*RG              * (1.0+SQRT(u1lay(i)**2+v1lay(i)**2)) &
62        ENDDO              * pplay(i, 1)/(RD*t(i, 1))
63  c======================================================================         zx_coef(i, 1) = zx_coef(i, 1) * dtime*RG
64        DO k = 2, klev      ENDDO
65        DO i = 1, knon  
66           zx_coef(i,k) = coef(i,k)*RG/(pplay(i,k-1)-pplay(i,k))      DO k = 2, klev
67       .                  *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/RD)**2         DO i = 1, knon
68           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)) &
69        ENDDO                 *(paprs(i, k)*2/(t(i, k)+t(i, k-1))/RD)**2
70        ENDDO            zx_coef(i, k) = zx_coef(i, k) * dtime*RG
71  c======================================================================         ENDDO
72        DO i = 1, knon      ENDDO
73           zx_buf(i) = delp(i,1) + zx_coef(i,1)*zx_alf1(i)+zx_coef(i,2)  
74           zx_cv(i,2) = local_ven(i,1)*delp(i,1) / zx_buf(i)      DO i = 1, knon
75           zx_dv(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1))         zx_buf(i) = delp(i, 1) + zx_coef(i, 1)*zx_alf1(i)+zx_coef(i, 2)
76       .                /zx_buf(i)         zx_cv(i, 2) = local_ven(i, 1)*delp(i, 1) / zx_buf(i)
77        ENDDO         zx_dv(i, 2) = (zx_coef(i, 2)-zx_alf2(i)*zx_coef(i, 1)) &
78        DO k = 3, klev              /zx_buf(i)
79        DO i = 1, knon      ENDDO
80           zx_buf(i) = delp(i,k-1) + zx_coef(i,k)      DO k = 3, klev
81       .                         + zx_coef(i,k-1)*(1.-zx_dv(i,k-1))         DO i = 1, knon
82           zx_cv(i,k) = (local_ven(i,k-1)*delp(i,k-1)            zx_buf(i) = delp(i, k-1) + zx_coef(i, k) &
83       .                  +zx_coef(i,k-1)*zx_cv(i,k-1) )/zx_buf(i)                 + zx_coef(i, k-1)*(1.-zx_dv(i, k-1))
84           zx_dv(i,k) = zx_coef(i,k)/zx_buf(i)            zx_cv(i, k) = (local_ven(i, k-1)*delp(i, k-1) &
85        ENDDO                 +zx_coef(i, k-1)*zx_cv(i, k-1) )/zx_buf(i)
86        ENDDO            zx_dv(i, k) = zx_coef(i, k)/zx_buf(i)
87        DO i = 1, knon         ENDDO
88           local_ven(i,klev) = ( local_ven(i,klev)*delp(i,klev)      ENDDO
89       .                        +zx_coef(i,klev)*zx_cv(i,klev) )      DO i = 1, knon
90       .                   / ( delp(i,klev) + zx_coef(i,klev)         local_ven(i, klev) = ( local_ven(i, klev)*delp(i, klev) &
91       .                       -zx_coef(i,klev)*zx_dv(i,klev) )              +zx_coef(i, klev)*zx_cv(i, klev) ) &
92        ENDDO              / ( delp(i, klev) + zx_coef(i, klev) &
93        DO k = klev-1, 1, -1              -zx_coef(i, klev)*zx_dv(i, klev) )
94        DO i = 1, knon      ENDDO
95           local_ven(i,k) = zx_cv(i,k+1) + zx_dv(i,k+1)*local_ven(i,k+1)      DO k = klev-1, 1, -1
96        ENDDO         DO i = 1, knon
97        ENDDO            local_ven(i, k) = zx_cv(i, k+1) + zx_dv(i, k+1)*local_ven(i, k+1)
98  c======================================================================         ENDDO
99  c== flux_v est le flux de moment angulaire (positif vers bas)      ENDDO
100  c== dont l'unite est: (kg m/s)/(m**2 s)  
101        DO i = 1, knon      ! flux_v est le flux de moment angulaire (positif vers bas) dont
102           flux_v(i,1) = zx_coef(i,1)/(RG*dtime)      ! l'unite est: (kg m/s)/(m**2 s)
103       .                 *(local_ven(i,1)*zx_alf1(i)      DO i = 1, knon
104       .                  +local_ven(i,2)*zx_alf2(i))         flux_v(i, 1) = zx_coef(i, 1)/(RG*dtime) &
105        ENDDO              *(local_ven(i, 1)*zx_alf1(i) &
106        DO k = 2, klev              +local_ven(i, 2)*zx_alf2(i))
107        DO i = 1, knon      ENDDO
108           flux_v(i,k) = zx_coef(i,k)/(RG*dtime)      DO k = 2, klev
109       .               * (local_ven(i,k)-local_ven(i,k-1))         DO i = 1, knon
110        ENDDO            flux_v(i, k) = zx_coef(i, k)/(RG*dtime) &
111        ENDDO                 * (local_ven(i, k)-local_ven(i, k-1))
112  c         ENDDO
113        DO k = 1, klev      ENDDO
114        DO i = 1, knon  
115           d_ven(i,k) = local_ven(i,k) - ven(i,k)      DO k = 1, klev
116        ENDDO         DO i = 1, knon
117        ENDDO            d_ven(i, k) = local_ven(i, k) - ven(i, k)
118  c         ENDDO
119        RETURN      ENDDO
120        END  
121      END SUBROUTINE clvent
122    
123    end module clvent_m

Legend:
Removed from v.57  
changed lines
  Added in v.62

  ViewVC Help
Powered by ViewVC 1.1.21