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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (show 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 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