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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (show annotations)
Thu Apr 1 14:59:19 2010 UTC (14 years, 1 month ago) by guez
Original Path: trunk/libf/phylmd/phystokenc.f
File size: 12011 byte(s)
Split "vlsplt.f" in single-procedure files. Gathered the files in
directory "dyn3d/Vlsplt".

Defined "pbarum(:, 1, :)" and "pbarum(:, jjm + 1, :)" in procedure
"groupe".

1 !
2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/phystokenc.F,v 1.2 2004/06/22 11:45:35 lmdzadmin Exp $
3 !
4 c
5 c
6 SUBROUTINE phystokenc (
7 I pdtphys,rlon,rlat,
8 I pt,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
9 I pfm_therm,pentr_therm,
10 I pcoefh,yu1,yv1,ftsol,pctsrf,
11 I frac_impa,frac_nucl,
12 I pphis,paire,dtime,itap)
13 USE histwrite_m
14 use histcom
15 use dimens_m
16 use indicesol
17 use dimphy
18 use conf_gcm_m
19 use tracstoke
20 IMPLICIT none
21
22 c======================================================================
23 c Auteur(s) FH
24 c Objet: Moniteur general des tendances traceurs
25 c
26
27 c======================================================================
28 c======================================================================
29
30 c Arguments:
31 c
32 c EN ENTREE:
33 c ==========
34 c
35 c divers:
36 c -------
37 c
38 real, intent(in):: pdtphys ! pas d'integration pour la physique (seconde)
39 c
40 integer physid
41 integer, intent(in):: itap
42 save physid
43 integer ndex2d(iim*(jjm+1)),ndex3d(iim*(jjm+1)*klev)
44
45 c convection:
46 c -----------
47 c
48 REAL pmfu(klon,klev) ! flux de masse dans le panache montant
49 REAL pmfd(klon,klev) ! flux de masse dans le panache descendant
50 REAL pen_u(klon,klev) ! flux entraine dans le panache montant
51 REAL pde_u(klon,klev) ! flux detraine dans le panache montant
52 REAL pen_d(klon,klev) ! flux entraine dans le panache descendant
53 REAL pde_d(klon,klev) ! flux detraine dans le panache descendant
54 real pt(klon,klev),t(klon,klev)
55 c
56 REAL, intent(in):: rlon(klon), rlat(klon)
57 real, intent(in):: dtime
58 REAL zx_tmp_3d(iim,jjm+1,klev),zx_tmp_2d(iim,jjm+1)
59
60 c Couche limite:
61 c --------------
62 c
63 REAL pcoefh(klon,klev) ! coeff melange CL
64 REAL yv1(klon)
65 REAL yu1(klon),pphis(klon),paire(klon)
66
67 c Les Thermiques : (Abderr 25 11 02)
68 c ---------------
69 REAL pfm_therm(klon,klev+1)
70 real fm_therm1(klon,klev)
71 REAL pentr_therm(klon,klev)
72 REAL entr_therm(klon,klev)
73 REAL fm_therm(klon,klev)
74 c
75 c Lessivage:
76 c ----------
77 c
78 REAL frac_impa(klon,klev)
79 REAL frac_nucl(klon,klev)
80 c
81 c Arguments necessaires pour les sources et puits de traceur
82 C
83 real ftsol(klon,nbsrf) ! Temperature du sol (surf)(Kelvin)
84 real pctsrf(klon,nbsrf) ! Pourcentage de sol f(nature du sol)
85 c======================================================================
86 c
87 INTEGER i, k
88 c
89 REAL mfu(klon,klev) ! flux de masse dans le panache montant
90 REAL mfd(klon,klev) ! flux de masse dans le panache descendant
91 REAL en_u(klon,klev) ! flux entraine dans le panache montant
92 REAL de_u(klon,klev) ! flux detraine dans le panache montant
93 REAL en_d(klon,klev) ! flux entraine dans le panache descendant
94 REAL de_d(klon,klev) ! flux detraine dans le panache descendant
95 REAL coefh(klon,klev) ! flux detraine dans le panache descendant
96
97 REAL pyu1(klon),pyv1(klon)
98 REAL pftsol(klon,nbsrf),ppsrf(klon,nbsrf)
99 real pftsol1(klon),pftsol2(klon),pftsol3(klon),pftsol4(klon)
100 real ppsrf1(klon),ppsrf2(klon),ppsrf3(klon),ppsrf4(klon)
101
102 REAL dtcum
103
104 integer iadvtr,irec
105 real zmin,zmax
106 logical ok_sync
107
108 save t,mfu,mfd,en_u,de_u,en_d,de_d,coefh,dtcum
109 save fm_therm,entr_therm
110 save iadvtr,irec
111 save pyu1,pyv1,pftsol,ppsrf
112
113 data iadvtr,irec/0,1/
114 c
115 c Couche limite:
116 c======================================================================
117
118 ok_sync = .true.
119
120 IF (iadvtr.eq.0) THEN
121 CALL initphysto('phystoke',
122 . rlon,rlat,dtime, dtime*istphy,dtime*istphy,nqmx,physid)
123 ENDIF
124 c
125 ndex2d = 0
126 ndex3d = 0
127 i=itap
128 CALL gr_fi_ecrit(1,klon,iim,jjm+1,pphis,zx_tmp_2d)
129 CALL histwrite(physid,"phis",i,zx_tmp_2d)
130 c
131 i=itap
132 CALL gr_fi_ecrit(1,klon,iim,jjm+1,paire,zx_tmp_2d)
133 CALL histwrite(physid,"aire",i,zx_tmp_2d)
134
135 iadvtr=iadvtr+1
136 c
137 if (mod(iadvtr,istphy).eq.1.or.istphy.eq.1) then
138 print*,'reinitialisation des champs cumules
139 s a iadvtr=',iadvtr
140 do k=1,klev
141 do i=1,klon
142 mfu(i,k)=0.
143 mfd(i,k)=0.
144 en_u(i,k)=0.
145 de_u(i,k)=0.
146 en_d(i,k)=0.
147 de_d(i,k)=0.
148 coefh(i,k)=0.
149 t(i,k)=0.
150 fm_therm(i,k)=0.
151 entr_therm(i,k)=0.
152 enddo
153 enddo
154 do i=1,klon
155 pyv1(i)=0.
156 pyu1(i)=0.
157 end do
158 do k=1,nbsrf
159 do i=1,klon
160 pftsol(i,k)=0.
161 ppsrf(i,k)=0.
162 enddo
163 enddo
164
165 dtcum=0.
166 endif
167
168 do k=1,klev
169 do i=1,klon
170 mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys
171 mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys
172 en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys
173 de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys
174 en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys
175 de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys
176 coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys
177 t(i,k)=t(i,k)+pt(i,k)*pdtphys
178 fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys
179 entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys
180 enddo
181 enddo
182 do i=1,klon
183 pyv1(i)=pyv1(i)+yv1(i)*pdtphys
184 pyu1(i)=pyu1(i)+yu1(i)*pdtphys
185 end do
186 do k=1,nbsrf
187 do i=1,klon
188 pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys
189 ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys
190 enddo
191 enddo
192
193 dtcum=dtcum+pdtphys
194
195 IF(mod(iadvtr,istphy).eq.0) THEN
196 c
197 c normalisation par le temps cumule
198 do k=1,klev
199 do i=1,klon
200 mfu(i,k)=mfu(i,k)/dtcum
201 mfd(i,k)=mfd(i,k)/dtcum
202 en_u(i,k)=en_u(i,k)/dtcum
203 de_u(i,k)=de_u(i,k)/dtcum
204 en_d(i,k)=en_d(i,k)/dtcum
205 de_d(i,k)=de_d(i,k)/dtcum
206 coefh(i,k)=coefh(i,k)/dtcum
207 c Unitel a enlever
208 t(i,k)=t(i,k)/dtcum
209 fm_therm(i,k)=fm_therm(i,k)/dtcum
210 entr_therm(i,k)=entr_therm(i,k)/dtcum
211 enddo
212 enddo
213 do i=1,klon
214 pyv1(i)=pyv1(i)/dtcum
215 pyu1(i)=pyu1(i)/dtcum
216 end do
217 do k=1,nbsrf
218 do i=1,klon
219 pftsol(i,k)=pftsol(i,k)/dtcum
220 pftsol1(i) = pftsol(i,1)
221 pftsol2(i) = pftsol(i,2)
222 pftsol3(i) = pftsol(i,3)
223 pftsol4(i) = pftsol(i,4)
224
225 ppsrf(i,k)=ppsrf(i,k)/dtcum
226 ppsrf1(i) = ppsrf(i,1)
227 ppsrf2(i) = ppsrf(i,2)
228 ppsrf3(i) = ppsrf(i,3)
229 ppsrf4(i) = ppsrf(i,4)
230
231 enddo
232 enddo
233 c
234 c ecriture des champs
235 c
236 irec=irec+1
237
238 ccccc
239 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, t, zx_tmp_3d)
240 CALL histwrite(physid,"t",itap,zx_tmp_3d)
241
242 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfu, zx_tmp_3d)
243 CALL histwrite(physid,"mfu",itap,zx_tmp_3d)
244 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfd, zx_tmp_3d)
245 CALL histwrite(physid,"mfd",itap,zx_tmp_3d)
246 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_u, zx_tmp_3d)
247 CALL histwrite(physid,"en_u",itap,zx_tmp_3d)
248 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_u, zx_tmp_3d)
249 CALL histwrite(physid,"de_u",itap,zx_tmp_3d)
250 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_d, zx_tmp_3d)
251 CALL histwrite(physid,"en_d",itap,zx_tmp_3d)
252 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_d, zx_tmp_3d)
253 CALL histwrite(physid,"de_d",itap,zx_tmp_3d)
254 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, coefh, zx_tmp_3d)
255 CALL histwrite(physid,"coefh",itap,zx_tmp_3d)
256
257 c ajou...
258 do k=1,klev
259 do i=1,klon
260 fm_therm1(i,k)=fm_therm(i,k)
261 enddo
262 enddo
263
264 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, fm_therm1, zx_tmp_3d)
265 CALL histwrite(physid,"fm_th",itap,zx_tmp_3d)
266 c
267 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, entr_therm, zx_tmp_3d)
268 CALL histwrite(physid,"en_th",itap,zx_tmp_3d)
269 cccc
270 CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_impa,zx_tmp_3d)
271 CALL histwrite(physid,"frac_impa",itap,zx_tmp_3d)
272
273 CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_nucl,zx_tmp_3d)
274 CALL histwrite(physid,"frac_nucl",itap,zx_tmp_3d)
275
276 CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyu1,zx_tmp_2d)
277 CALL histwrite(physid,"pyu1",itap,zx_tmp_2d)
278
279 CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyv1,zx_tmp_2d)
280 CALL histwrite(physid,"pyv1",itap,zx_tmp_2d)
281
282 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol1, zx_tmp_2d)
283 CALL histwrite(physid,"ftsol1",itap,zx_tmp_2d)
284 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol2, zx_tmp_2d)
285 CALL histwrite(physid,"ftsol2",itap,zx_tmp_2d)
286 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol3, zx_tmp_2d)
287 CALL histwrite(physid,"ftsol3",itap,zx_tmp_2d)
288 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol4, zx_tmp_2d)
289 CALL histwrite(physid,"ftsol4",itap,zx_tmp_2d)
290
291 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf1, zx_tmp_2d)
292 CALL histwrite(physid,"psrf1",itap,zx_tmp_2d)
293 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf2, zx_tmp_2d)
294 CALL histwrite(physid,"psrf2",itap,zx_tmp_2d)
295 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf3, zx_tmp_2d)
296 CALL histwrite(physid,"psrf3",itap,zx_tmp_2d)
297 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf4, zx_tmp_2d)
298 CALL histwrite(physid,"psrf4",itap,zx_tmp_2d)
299
300 if (ok_sync) call histsync(physid)
301 c if (ok_sync) call histsync
302
303 c
304 cAA Test sur la valeur des coefficients de lessivage
305 c
306 zmin=1e33
307 zmax=-1e33
308 do k=1,klev
309 do i=1,klon
310 zmax=max(zmax,frac_nucl(i,k))
311 zmin=min(zmin,frac_nucl(i,k))
312 enddo
313 enddo
314 Print*,'------ coefs de lessivage (min et max) --------'
315 Print*,'facteur de nucleation ',zmin,zmax
316 zmin=1e33
317 zmax=-1e33
318 do k=1,klev
319 do i=1,klon
320 zmax=max(zmax,frac_impa(i,k))
321 zmin=min(zmin,frac_impa(i,k))
322 enddo
323 enddo
324 Print*,'facteur d impaction ',zmin,zmax
325
326 ENDIF
327
328 c reinitialisation des champs cumules
329 go to 768
330 if (mod(iadvtr,istphy).eq.1) then
331 do k=1,klev
332 do i=1,klon
333 mfu(i,k)=0.
334 mfd(i,k)=0.
335 en_u(i,k)=0.
336 de_u(i,k)=0.
337 en_d(i,k)=0.
338 de_d(i,k)=0.
339 coefh(i,k)=0.
340 t(i,k)=0.
341 fm_therm(i,k)=0.
342 entr_therm(i,k)=0.
343 enddo
344 enddo
345 do i=1,klon
346 pyv1(i)=0.
347 pyu1(i)=0.
348 end do
349 do k=1,nbsrf
350 do i=1,klon
351 pftsol(i,k)=0.
352 ppsrf(i,k)=0.
353 enddo
354 enddo
355
356 dtcum=0.
357 endif
358
359 do k=1,klev
360 do i=1,klon
361 mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys
362 mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys
363 en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys
364 de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys
365 en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys
366 de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys
367 coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys
368 t(i,k)=t(i,k)+pt(i,k)*pdtphys
369 fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys
370 entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys
371 enddo
372 enddo
373 do i=1,klon
374 pyv1(i)=pyv1(i)+yv1(i)*pdtphys
375 pyu1(i)=pyu1(i)+yu1(i)*pdtphys
376 end do
377 do k=1,nbsrf
378 do i=1,klon
379 pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys
380 ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys
381 enddo
382 enddo
383
384 dtcum=dtcum+pdtphys
385 768 continue
386
387 RETURN
388 END

  ViewVC Help
Powered by ViewVC 1.1.21