/[lmdze]/trunk/phylmd/Conflx/conflx.f
ViewVC logotype

Annotation of /trunk/phylmd/Conflx/conflx.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 91 - (hide annotations)
Wed Mar 26 17:18:58 2014 UTC (10 years, 1 month ago) by guez
File size: 5708 byte(s)
Removed unused variables lock_startdate and time_stamp of module
calendar.

Noticed that physiq does not change the surface pressure. So removed
arguments ps and dpfi of subroutine addfi. dpfi was always 0. The
computation of ps in addfi included some averaging at the poles. In
principle, this does not change ps but in practice it does because of
finite numerical precision. So the results of the simulation are
changed. Removed arguments ps and dpfi of calfis. Removed argument
d_ps of physiq.

du at the poles is not computed by dudv1, so declare only the
corresponding latitudes in dudv1. caldyn passes only a section of the
array dudyn as argument.

Removed variable niadv of module iniadvtrac_m.

Declared arguments of exner_hyb as assumed-shape arrays and made all
other horizontal sizes in exner_hyb dynamic. This allows the external
program test_disvert to use exner_hyb at a single horizontal position.

1 guez 62 module conflx_m
2 guez 3
3 guez 62 IMPLICIT none
4 guez 3
5 guez 62 contains
6 guez 3
7 guez 91 SUBROUTINE conflx(dtime, pres_h, pres_f, t, q, con_t, con_q, qhfl, w, &
8 guez 71 d_t, d_q, rain, snow, mfu, mfd, pen_u, pde_u, pen_d, pde_d, kcbot, &
9 guez 62 kctop, kdtop, pmflxr, pmflxs)
10 guez 3
11 guez 62 ! From LMDZ4/libf/phylmd/conflx.F, version 1.1.1.1 2004/05/19 12:53:08
12 guez 3
13 guez 62 ! Author: Z. X. Li (LMD/CNRS)
14 guez 70 ! Date: 1994/10/14
15 guez 52
16 guez 70 ! Objet: schéma en flux de masse pour la convection (schéma de
17 guez 62 ! Tiedtke avec quelques modifications mineures)
18 guez 52
19 guez 62 ! Décembre 1997 : prise en compte des modifications introduites
20 guez 70 ! par Olivier Boucher et Alexandre Armengaud pour le mélange et le
21 guez 62 ! lessivage des traceurs passifs.
22    
23     use flxmain_m, only: flxmain
24     USE dimphy, ONLY: klev, klon
25     USE suphec_m, ONLY: rd, retv, rtt
26     USE yoethf_m, ONLY: r2es
27     USE fcttre, ONLY: foeew
28    
29 guez 70 REAL, intent(in):: dtime ! pas d'integration (s)
30 guez 78 REAL, intent(in):: pres_h(:, :) ! (klon, klev + 1) pression half-level (Pa)
31 guez 70 REAL, intent(in):: pres_f(:, :) ! (klon, klev) pression full-level (Pa)
32     REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)
33 guez 71 REAL, intent(in):: q(:, :) ! (klon, klev) humidité spécifique (no dimension)
34 guez 62
35 guez 70 REAL, intent(in):: con_t(:, :)
36     ! (klon, klev) convergence de temperature (K/s)
37 guez 62
38 guez 70 REAL, intent(in):: con_q(:, :)
39     ! (klon, klev) convergence de l'eau vapeur (g/g/s)
40    
41     REAL, intent(in):: qhfl(:) ! (klon) evaporation (negative vers haut) mm/s
42     REAL, intent(in):: w(:, :) ! (klon, klev) vitesse verticale (Pa/s)
43    
44     REAL, intent(out):: d_t(:, :) ! (klon, klev) incrementation de temperature
45     REAL, intent(out):: d_q(:, :) ! (klon, klev) incrementation d'humidite
46     REAL, intent(out):: rain(:) ! (klon) pluie (mm/s)
47     REAL, intent(out):: snow(:) ! (klon) neige (mm/s)
48    
49 guez 71 REAL, intent(out):: mfu(:, :) ! (klon, klev)
50     ! flux de masse (kg/m2/s) panache ascendant
51 guez 70
52 guez 71 REAL, intent(out):: mfd(:, :) ! (klon, klev)
53     ! flux de masse (kg/m2/s) panache descendant
54 guez 62
55 guez 70 REAL, intent(out):: pen_u(:, :) ! (klon, klev)
56     REAL, intent(out):: pde_u(:, :) ! (klon, klev)
57     REAL, intent(out):: pen_d(:, :) ! (klon, klev)
58     REAL, intent(out):: pde_d(:, :) ! (klon, klev)
59     INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection
60     INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection
61     INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts
62 guez 78 REAL, intent(out):: pmflxr(:, :) ! (klon, klev + 1)
63     REAL, intent(out):: pmflxs(:, :) ! (klon, klev + 1)
64 guez 62
65     ! Local:
66    
67 guez 71 REAL qsen(klon, klev)
68 guez 62 REAL pvervel(klon, klev)
69     LOGICAL land(klon)
70    
71     REAL d_t_bis(klon, klev)
72     REAL d_q_bis(klon, klev)
73 guez 78 REAL paprs(klon, klev + 1)
74 guez 62 REAL paprsf(klon, klev)
75     REAL zgeom(klon, klev)
76     REAL zcvgq(klon, klev)
77     REAL zcvgt(klon, klev)
78    
79     REAL zen_u(klon, klev)
80     REAL zen_d(klon, klev)
81     REAL zde_u(klon, klev)
82     REAL zde_d(klon, klev)
83 guez 78 REAL zmflxr(klon, klev + 1)
84     REAL zmflxs(klon, klev + 1)
85 guez 62
86     INTEGER i, k
87 guez 70 REAL zqsat
88 guez 62
89     !--------------------------------------------------------------------
90    
91 guez 78 ! Initialiser les variables de sortie (pour securité):
92     rain = 0.
93     snow = 0.
94     kcbot = 0
95     kctop = 0
96     kdtop = 0
97     d_t = 0.
98     d_q = 0.
99 guez 62
100 guez 78 zen_u = 0.
101     zde_u = 0.
102     zen_d = 0.
103     zde_d = 0.
104     zmflxr = 0.
105     zmflxs = 0.
106 guez 62
107 guez 78 ! Calculer la nature du sol (pour l'instant, océan partout):
108     land = .FALSE.
109    
110     ! Préparer les variables d'entrée (attention: l'indice des niveaux
111     ! verticaux augmente du haut vers le bas) :
112 guez 62 DO k = 1, klev
113     DO i = 1, klon
114 guez 78 paprsf(i, k) = pres_f(i, klev-k + 1)
115     paprs(i, k) = pres_h(i, klev + 1-k + 1)
116     pvervel(i, k) = w(i, klev + 1-k)
117     zcvgt(i, k) = con_t(i, klev-k + 1)
118     zcvgq(i, k) = con_q(i, klev-k + 1)
119 guez 62
120 guez 70 zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &
121     merge(0., 1., rtt < t(i, k))) / paprsf(i, k))
122 guez 71 qsen(i, k) = zqsat / (1. - RETV * zqsat)
123 guez 62 ENDDO
124     ENDDO
125     DO i = 1, klon
126 guez 78 paprs(i, klev + 1) = pres_h(i, 1)
127 guez 70 zgeom(i, klev) = RD * t(i, klev) &
128 guez 78 / (0.5*(paprs(i, klev + 1) + paprsf(i, klev))) &
129     * (paprs(i, klev + 1)-paprsf(i, klev))
130 guez 62 ENDDO
131     DO k = klev-1, 1, -1
132     DO i = 1, klon
133 guez 78 zgeom(i, k) = zgeom(i, k + 1) &
134     + RD * 0.5*(t(i, k + 1) + t(i, k)) / paprs(i, k + 1) &
135     * (paprsf(i, k + 1)-paprsf(i, k))
136 guez 62 ENDDO
137     ENDDO
138    
139 guez 70 ! Appeler la routine principale :
140 guez 71 CALL flxmain(dtime, t, q, qsen, qhfl, paprsf, paprs, zgeom, land, &
141     zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, mfu, mfd, &
142 guez 62 zen_u, zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)
143    
144     ! De la même façon que l'on effectue le réindiçage pour la
145     ! température t et le champ q, on réindice les flux nécessaires à
146     ! la convection des traceurs.
147     DO k = 1, klev
148     DO i = 1, klon
149 guez 78 d_q(i, klev + 1-k) = dtime*d_q_bis(i, k)
150     d_t(i, klev + 1-k) = dtime*d_t_bis(i, k)
151 guez 62 ENDDO
152     ENDDO
153    
154 guez 71 mfu = eoshift(mfu, shift=1, dim=2)
155     mfd = eoshift(mfd, shift=1, dim=2)
156     pen_d(:, 1)= 0.
157     pde_d(:, 1)= 0.
158 guez 62
159     DO k = 1, klev
160     DO i = 1, klon
161 guez 78 pen_u(i, klev + 1-k)= zen_u(i, k)
162     pde_u(i, klev + 1-k)= zde_u(i, k)
163 guez 62 ENDDO
164     ENDDO
165    
166     DO k = 1, klev-1
167     DO i = 1, klon
168 guez 78 pen_d(i, klev + 1-k)= -zen_d(i, k + 1)
169     pde_d(i, klev + 1-k)= -zde_d(i, k + 1)
170 guez 62 ENDDO
171     ENDDO
172    
173 guez 78 DO k = 1, klev + 1
174 guez 62 DO i = 1, klon
175 guez 78 pmflxr(i, klev + 2-k)= zmflxr(i, k)
176     pmflxs(i, klev + 2-k)= zmflxs(i, k)
177 guez 62 ENDDO
178     ENDDO
179    
180     END SUBROUTINE conflx
181    
182     end module conflx_m

  ViewVC Help
Powered by ViewVC 1.1.21