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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 206 - (show annotations)
Tue Aug 30 12:52:46 2016 UTC (7 years, 7 months ago) by guez
File size: 3566 byte(s)
Removed dimension klev of flux_[tquv] and y_flux_[tquv] in
clmain. Removed dimension klev of flux_[tquv] in physiq. Removed
dimension klev of flux_[tq] in hbtm. Removed dimension klev of
flux_[tq] in clqh and computations for layers other than the surface
layer. Removed dimension klev of flux_v in clvent and computations for
layers other than the surface layer. Values for layers other than the
surface layer were not used nor output (not even in LMDZ).

Removed argument dnwd0 of concvl. Simply write - mp in physiq
(following LMDZ).

Removed useless intermediary variables zxflux[tquv] in physiq.

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

  ViewVC Help
Powered by ViewVC 1.1.21