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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (hide annotations)
Thu Jul 26 14:37:37 2012 UTC (11 years, 9 months ago) by guez
Original Path: trunk/libf/phylmd/clvent.f90
File size: 3806 byte(s)
Changed handling of compiler in compilation system.

Removed the prefix letters "y", "p", "t" or "z" in some names of variables.

Replaced calls to NetCDF by calls to NetCDF95.

Extracted "ioget_calendar" procedures from "calendar.f90" into a
separate file.

Extracted to a separate file, "mathop2.f90", procedures that were not
part of the generic interface "mathop" in "mathop.f90".

Removed computation of "dq" in "bilan_dyn", which was not used.

In "iniadvtrac", removed schemes 20 Slopes and 30 Prather. Was not
compatible with declarations of array sizes.

In "clcdrag", "ustarhb", "vdif_kcay", "yamada4" and "coefkz", changed
the size of some arrays from "klon" to "knon".

Removed possible call to "conema3" in "physiq".

Removed unused argument "cd" in "yamada".

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

  ViewVC Help
Powered by ViewVC 1.1.21