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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (hide annotations)
Fri Apr 20 14:58:43 2012 UTC (12 years, 1 month ago) by guez
File size: 11064 byte(s)
No more included file in LMDZE, not even "netcdf.inc".

Created a variable containing the list of common source files in
GNUmakefile. So we now also see clearly files that are specific to
each program.

Split module "histcom". Assembled resulting files in directory
"Histcom".

Removed aliasing in calls to "laplacien".

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

  ViewVC Help
Powered by ViewVC 1.1.21