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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (hide annotations)
Thu Jan 6 17:52:19 2011 UTC (13 years, 3 months ago) by guez
Original Path: trunk/libf/phylmd/clvent.f
File size: 4569 byte(s)
Extracted ASCII art from "inigeom" into a separate text file in the
documentation.

"test_disvert" now creates a separate file for layer thicknesses.

Moved variables from module "yomcst" to module "suphec_m" because this
is where those variables are defined. Kept in "yomcst" only parameters
of Earth orbit. Gave the attribute "parameter" to some variables of
module "suphec_m".

Variables of module "yoethf" were defined in procedure "suphec". Moved
these definitions to a new procedure "yoethf" in module "yoethf_m".

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

  ViewVC Help
Powered by ViewVC 1.1.21