/[lmdze]/trunk/libf/phylmd/phystokenc.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/phystokenc.f90

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

  ViewVC Help
Powered by ViewVC 1.1.21