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

Legend:
Removed from v.12  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21