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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (hide annotations)
Thu Jul 26 14:37:37 2012 UTC (11 years, 10 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 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 guez 62 ! 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 62 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 62 REAL, INTENT (IN):: pmfu(klon, klev) ! flux de masse dans le panache montant
34 guez 32 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 62 REAL, save:: mfu(klon, klev) ! flux de masse dans le panache montant
80 guez 32 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 62 INTEGER:: iadvtr = 0, irec = 1
95 guez 32 REAL zmin, zmax
96     LOGICAL ok_sync
97 guez 3
98 guez 62 SAVE t, mfd, en_u, de_u, en_d, de_d, coefh, dtcum
99 guez 32 SAVE fm_therm, entr_therm
100     SAVE pyu1, pyv1, pftsol, ppsrf
101 guez 3
102 guez 32 !------------------------------------------------------
103 guez 3
104 guez 32 ! 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 guez 62 IF (mod(iadvtr, istphy) == 1 .OR. istphy == 1) THEN
124     PRINT *, 'reinitialisation des champs cumules a iadvtr =', iadvtr
125 guez 32 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 guez 62 ! normalisation par le temps cumule
182 guez 32 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 guez 62 PRINT *, 'coefs de lessivage (min et max)'
294 guez 32 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