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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 189 - (show annotations)
Tue Mar 29 15:20:23 2016 UTC (8 years, 2 months ago) by guez
File size: 9672 byte(s)
There was a function gr_phy_write_3d in dyn3d and a function
gr_phy_write_2d in module grid_change. Moved them into a new module
gr_phy_write_m under a generic interface gr_phy_write. Replaced calls
to gr_fi_ecrit by calls to gr_phy_write.

Removed arguments len, nloc and nd of cv30_compress.

Removed arguments wd and wd1 of cv30_uncompress, wd of cv30_yield, wd
of concvl, wd1 of cv_driver. Was just filled with 0. Removed option
ok_gust in physiq, never used.

In cv30_unsat, cv30_yield and cv_driver, we only need to define b to
level nl - 1.

1 module phystokenc_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE phystokenc(pdtphys, rlon, rlat, pt, pmfu, pmfd, pen_u, pde_u, &
8 pen_d, pde_d, pfm_therm, pentr_therm, pcoefh, yu1, yv1, ftsol, pctsrf, &
9 frac_impa, frac_nucl, pphis, paire, dtime, itap)
10
11 ! From phylmd/phystokenc.F, version 1.2 2004/06/22 11:45:35
12 ! Author: Fr\'ed\'eric Hourdin
13 ! Objet : \'ecriture des variables pour transport offline
14
15 use gr_phy_write_m, only: gr_phy_write
16 USE histwrite_m, ONLY: histwrite
17 USE histsync_m, ONLY: histsync
18 USE dimens_m, ONLY: iim, jjm
19 USE indicesol, ONLY: nbsrf
20 use initphysto_m, only: initphysto
21 USE dimphy, ONLY: klev, klon
22 USE tracstoke, ONLY: istphy
23
24 REAL, INTENT (IN):: pdtphys ! pas d'integration pour la physique (seconde)
25 REAL, INTENT (IN):: rlon(klon), rlat(klon)
26 REAL, intent(in):: pt(klon, klev)
27
28 ! convection:
29
30 REAL, INTENT (IN):: pmfu(klon, klev) ! flux de masse dans le panache montant
31
32 REAL, intent(in):: pmfd(klon, klev)
33 ! flux de masse dans le panache descendant
34
35 REAL, intent(in):: pen_u(klon, klev) ! flux entraine dans le panache montant
36 REAL, intent(in):: pde_u(klon, klev) ! flux detraine dans le panache montant
37
38 REAL, intent(in):: pen_d(klon, klev)
39 ! flux entraine dans le panache descendant
40
41 REAL, intent(in):: pde_d(klon, klev)
42 ! flux detraine dans le panache descendant
43
44 ! Les Thermiques
45 REAL pfm_therm(klon, klev+1)
46 REAL pentr_therm(klon, klev)
47
48 ! Couche limite:
49
50 REAL pcoefh(klon, klev) ! coeff melange Couche limite
51 REAL yu1(klon)
52 REAL yv1(klon)
53
54 ! Arguments necessaires pour les sources et puits de traceur
55
56 REAL ftsol(klon, nbsrf) ! Temperature du sol (surf)(Kelvin)
57 REAL pctsrf(klon, nbsrf) ! Pourcentage de sol f(nature du sol)
58
59 ! Lessivage:
60
61 REAL frac_impa(klon, klev)
62 REAL frac_nucl(klon, klev)
63
64 REAL, INTENT(IN):: pphis(klon)
65 real paire(klon)
66 REAL, INTENT (IN):: dtime
67 INTEGER, INTENT (IN):: itap
68
69 ! Variables local to the procedure:
70
71 real t(klon, klev)
72 INTEGER, SAVE:: physid
73 REAL zx_tmp_3d(iim, jjm+1, klev), zx_tmp_2d(iim, jjm+1)
74
75 ! Les Thermiques
76
77 REAL fm_therm1(klon, klev)
78 REAL entr_therm(klon, klev)
79 REAL fm_therm(klon, klev)
80
81 INTEGER i, k
82
83 REAL, save:: mfu(klon, klev) ! flux de masse dans le panache montant
84 REAL mfd(klon, klev) ! flux de masse dans le panache descendant
85 REAL en_u(klon, klev) ! flux entraine dans le panache montant
86 REAL de_u(klon, klev) ! flux detraine dans le panache montant
87 REAL en_d(klon, klev) ! flux entraine dans le panache descendant
88 REAL de_d(klon, klev) ! flux detraine dans le panache descendant
89 REAL coefh(klon, klev) ! flux detraine dans le panache descendant
90
91 REAL pyu1(klon), pyv1(klon)
92 REAL pftsol(klon, nbsrf), ppsrf(klon, nbsrf)
93 REAL pftsol1(klon), pftsol2(klon), pftsol3(klon), pftsol4(klon)
94 REAL ppsrf1(klon), ppsrf2(klon), ppsrf3(klon), ppsrf4(klon)
95
96 REAL dtcum
97
98 INTEGER:: iadvtr = 0, irec = 1
99 REAL zmin, zmax
100 LOGICAL ok_sync
101
102 SAVE t, mfd, en_u, de_u, en_d, de_d, coefh, dtcum
103 SAVE fm_therm, entr_therm
104 SAVE pyu1, pyv1, pftsol, ppsrf
105
106 !------------------------------------------------------
107
108 ! Couche limite:
109
110 ok_sync = .TRUE.
111
112 IF (iadvtr==0) THEN
113 CALL initphysto('phystoke', rlon, rlat, dtime, dtime*istphy, &
114 dtime*istphy, physid)
115 END IF
116
117 i = itap
118 zx_tmp_2d = gr_phy_write(pphis)
119 CALL histwrite(physid, 'phis', i, zx_tmp_2d)
120
121 i = itap
122 zx_tmp_2d = gr_phy_write(paire)
123 CALL histwrite(physid, 'aire', i, zx_tmp_2d)
124
125 iadvtr = iadvtr + 1
126
127 IF (mod(iadvtr, istphy) == 1 .OR. istphy == 1) THEN
128 PRINT *, 'reinitialisation des champs cumules a iadvtr =', iadvtr
129 DO k = 1, klev
130 DO i = 1, klon
131 mfu(i, k) = 0.
132 mfd(i, k) = 0.
133 en_u(i, k) = 0.
134 de_u(i, k) = 0.
135 en_d(i, k) = 0.
136 de_d(i, k) = 0.
137 coefh(i, k) = 0.
138 t(i, k) = 0.
139 fm_therm(i, k) = 0.
140 entr_therm(i, k) = 0.
141 END DO
142 END DO
143 DO i = 1, klon
144 pyv1(i) = 0.
145 pyu1(i) = 0.
146 END DO
147 DO k = 1, nbsrf
148 DO i = 1, klon
149 pftsol(i, k) = 0.
150 ppsrf(i, k) = 0.
151 END DO
152 END DO
153
154 dtcum = 0.
155 END IF
156
157 DO k = 1, klev
158 DO i = 1, klon
159 mfu(i, k) = mfu(i, k) + pmfu(i, k)*pdtphys
160 mfd(i, k) = mfd(i, k) + pmfd(i, k)*pdtphys
161 en_u(i, k) = en_u(i, k) + pen_u(i, k)*pdtphys
162 de_u(i, k) = de_u(i, k) + pde_u(i, k)*pdtphys
163 en_d(i, k) = en_d(i, k) + pen_d(i, k)*pdtphys
164 de_d(i, k) = de_d(i, k) + pde_d(i, k)*pdtphys
165 coefh(i, k) = coefh(i, k) + pcoefh(i, k)*pdtphys
166 t(i, k) = t(i, k) + pt(i, k)*pdtphys
167 fm_therm(i, k) = fm_therm(i, k) + pfm_therm(i, k)*pdtphys
168 entr_therm(i, k) = entr_therm(i, k) + pentr_therm(i, k)*pdtphys
169 END DO
170 END DO
171 DO i = 1, klon
172 pyv1(i) = pyv1(i) + yv1(i)*pdtphys
173 pyu1(i) = pyu1(i) + yu1(i)*pdtphys
174 END DO
175 DO k = 1, nbsrf
176 DO i = 1, klon
177 pftsol(i, k) = pftsol(i, k) + ftsol(i, k)*pdtphys
178 ppsrf(i, k) = ppsrf(i, k) + pctsrf(i, k)*pdtphys
179 END DO
180 END DO
181
182 dtcum = dtcum + pdtphys
183
184 IF (mod(iadvtr, istphy) == 0) THEN
185 ! normalisation par le temps cumule
186 DO k = 1, klev
187 DO i = 1, klon
188 mfu(i, k) = mfu(i, k)/dtcum
189 mfd(i, k) = mfd(i, k)/dtcum
190 en_u(i, k) = en_u(i, k)/dtcum
191 de_u(i, k) = de_u(i, k)/dtcum
192 en_d(i, k) = en_d(i, k)/dtcum
193 de_d(i, k) = de_d(i, k)/dtcum
194 coefh(i, k) = coefh(i, k)/dtcum
195 ! Unitel a enlever
196 t(i, k) = t(i, k)/dtcum
197 fm_therm(i, k) = fm_therm(i, k)/dtcum
198 entr_therm(i, k) = entr_therm(i, k)/dtcum
199 END DO
200 END DO
201 DO i = 1, klon
202 pyv1(i) = pyv1(i)/dtcum
203 pyu1(i) = pyu1(i)/dtcum
204 END DO
205 DO k = 1, nbsrf
206 DO i = 1, klon
207 pftsol(i, k) = pftsol(i, k)/dtcum
208 pftsol1(i) = pftsol(i, 1)
209 pftsol2(i) = pftsol(i, 2)
210 pftsol3(i) = pftsol(i, 3)
211 pftsol4(i) = pftsol(i, 4)
212
213 ppsrf(i, k) = ppsrf(i, k)/dtcum
214 ppsrf1(i) = ppsrf(i, 1)
215 ppsrf2(i) = ppsrf(i, 2)
216 ppsrf3(i) = ppsrf(i, 3)
217 ppsrf4(i) = ppsrf(i, 4)
218 END DO
219 END DO
220
221 ! ecriture des champs
222
223 irec = irec + 1
224
225 zx_tmp_3d = gr_phy_write(t)
226 CALL histwrite(physid, 't', itap, zx_tmp_3d)
227
228 zx_tmp_3d = gr_phy_write(mfu)
229 CALL histwrite(physid, 'mfu', itap, zx_tmp_3d)
230 zx_tmp_3d = gr_phy_write(mfd)
231 CALL histwrite(physid, 'mfd', itap, zx_tmp_3d)
232 zx_tmp_3d = gr_phy_write(en_u)
233 CALL histwrite(physid, 'en_u', itap, zx_tmp_3d)
234 zx_tmp_3d = gr_phy_write(de_u)
235 CALL histwrite(physid, 'de_u', itap, zx_tmp_3d)
236 zx_tmp_3d = gr_phy_write(en_d)
237 CALL histwrite(physid, 'en_d', itap, zx_tmp_3d)
238 zx_tmp_3d = gr_phy_write(de_d)
239 CALL histwrite(physid, 'de_d', itap, zx_tmp_3d)
240 zx_tmp_3d = gr_phy_write(coefh)
241 CALL histwrite(physid, 'coefh', itap, zx_tmp_3d)
242
243 DO k = 1, klev
244 DO i = 1, klon
245 fm_therm1(i, k) = fm_therm(i, k)
246 END DO
247 END DO
248
249 zx_tmp_3d = gr_phy_write(fm_therm1)
250 CALL histwrite(physid, 'fm_th', itap, zx_tmp_3d)
251
252 zx_tmp_3d = gr_phy_write(entr_therm)
253 CALL histwrite(physid, 'en_th', itap, zx_tmp_3d)
254 !ccc
255 zx_tmp_3d = gr_phy_write(frac_impa)
256 CALL histwrite(physid, 'frac_impa', itap, zx_tmp_3d)
257
258 zx_tmp_3d = gr_phy_write(frac_nucl)
259 CALL histwrite(physid, 'frac_nucl', itap, zx_tmp_3d)
260
261 zx_tmp_2d = gr_phy_write(pyu1)
262 CALL histwrite(physid, 'pyu1', itap, zx_tmp_2d)
263
264 zx_tmp_2d = gr_phy_write(pyv1)
265 CALL histwrite(physid, 'pyv1', itap, zx_tmp_2d)
266
267 zx_tmp_2d = gr_phy_write(pftsol1)
268 CALL histwrite(physid, 'ftsol1', itap, zx_tmp_2d)
269 zx_tmp_2d = gr_phy_write(pftsol2)
270 CALL histwrite(physid, 'ftsol2', itap, zx_tmp_2d)
271 zx_tmp_2d = gr_phy_write(pftsol3)
272 CALL histwrite(physid, 'ftsol3', itap, zx_tmp_2d)
273 zx_tmp_2d = gr_phy_write(pftsol4)
274 CALL histwrite(physid, 'ftsol4', itap, zx_tmp_2d)
275
276 zx_tmp_2d = gr_phy_write(ppsrf1)
277 CALL histwrite(physid, 'psrf1', itap, zx_tmp_2d)
278 zx_tmp_2d = gr_phy_write(ppsrf2)
279 CALL histwrite(physid, 'psrf2', itap, zx_tmp_2d)
280 zx_tmp_2d = gr_phy_write(ppsrf3)
281 CALL histwrite(physid, 'psrf3', itap, zx_tmp_2d)
282 zx_tmp_2d = gr_phy_write(ppsrf4)
283 CALL histwrite(physid, 'psrf4', itap, zx_tmp_2d)
284
285 IF (ok_sync) CALL histsync(physid)
286
287 ! Test sur la valeur des coefficients de lessivage
288
289 zmin = 1E33
290 zmax = -1E33
291 DO k = 1, klev
292 DO i = 1, klon
293 zmax = max(zmax, frac_nucl(i, k))
294 zmin = min(zmin, frac_nucl(i, k))
295 END DO
296 END DO
297 PRINT *, 'coefs de lessivage (min et max)'
298 PRINT *, 'facteur de nucleation ', zmin, zmax
299 zmin = 1E33
300 zmax = -1E33
301 DO k = 1, klev
302 DO i = 1, klon
303 zmax = max(zmax, frac_impa(i, k))
304 zmin = min(zmin, frac_impa(i, k))
305 END DO
306 END DO
307 PRINT *, 'facteur d impaction ', zmin, zmax
308 END IF
309
310 END SUBROUTINE phystokenc
311
312 end module phystokenc_m

  ViewVC Help
Powered by ViewVC 1.1.21