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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (show annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
File size: 13534 byte(s)
Initial import
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 ioipsl
14 USE histcom
15
16 use dimens_m
17 use indicesol
18 use dimphy
19 use conf_gcm_m
20 use tracstoke
21 IMPLICIT none
22
23 c======================================================================
24 c Auteur(s) FH
25 c Objet: Moniteur general des tendances traceurs
26 c
27
28 c======================================================================
29 c======================================================================
30
31 c Arguments:
32 c
33 c EN ENTREE:
34 c ==========
35 c
36 c divers:
37 c -------
38 c
39 real pdtphys ! pas d'integration pour la physique (seconde)
40 c
41 integer physid, 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 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 print*,'Dans phystokenc.F'
120 print*,'iadvtr= ',iadvtr
121 print*,'istphy= ',istphy
122 print*,'istdyn= ',istdyn
123
124 IF (iadvtr.eq.0) THEN
125
126 CALL initphysto('phystoke',
127 . rlon,rlat,dtime, dtime*istphy,dtime*istphy,nqmx,physid)
128
129 write(*,*) 'apres initphysto ds phystokenc'
130
131
132 ENDIF
133 c
134 ndex2d = 0
135 ndex3d = 0
136 i=itap
137 CALL gr_fi_ecrit(1,klon,iim,jjm+1,pphis,zx_tmp_2d)
138 CALL histwrite(physid,"phis",i,zx_tmp_2d,iim*(jjm+1),ndex2d)
139 c
140 i=itap
141 CALL gr_fi_ecrit(1,klon,iim,jjm+1,paire,zx_tmp_2d)
142 CALL histwrite(physid,"aire",i,zx_tmp_2d,iim*(jjm+1),ndex2d)
143
144 iadvtr=iadvtr+1
145 c
146 if (mod(iadvtr,istphy).eq.1.or.istphy.eq.1) then
147 print*,'reinitialisation des champs cumules
148 s a iadvtr=',iadvtr
149 do k=1,klev
150 do i=1,klon
151 mfu(i,k)=0.
152 mfd(i,k)=0.
153 en_u(i,k)=0.
154 de_u(i,k)=0.
155 en_d(i,k)=0.
156 de_d(i,k)=0.
157 coefh(i,k)=0.
158 t(i,k)=0.
159 fm_therm(i,k)=0.
160 entr_therm(i,k)=0.
161 enddo
162 enddo
163 do i=1,klon
164 pyv1(i)=0.
165 pyu1(i)=0.
166 end do
167 do k=1,nbsrf
168 do i=1,klon
169 pftsol(i,k)=0.
170 ppsrf(i,k)=0.
171 enddo
172 enddo
173
174 dtcum=0.
175 endif
176
177 do k=1,klev
178 do i=1,klon
179 mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys
180 mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys
181 en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys
182 de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys
183 en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys
184 de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys
185 coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys
186 t(i,k)=t(i,k)+pt(i,k)*pdtphys
187 fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys
188 entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys
189 enddo
190 enddo
191 do i=1,klon
192 pyv1(i)=pyv1(i)+yv1(i)*pdtphys
193 pyu1(i)=pyu1(i)+yu1(i)*pdtphys
194 end do
195 do k=1,nbsrf
196 do i=1,klon
197 pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys
198 ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys
199 enddo
200 enddo
201
202 dtcum=dtcum+pdtphys
203
204 IF(mod(iadvtr,istphy).eq.0) THEN
205 c
206 c normalisation par le temps cumule
207 do k=1,klev
208 do i=1,klon
209 mfu(i,k)=mfu(i,k)/dtcum
210 mfd(i,k)=mfd(i,k)/dtcum
211 en_u(i,k)=en_u(i,k)/dtcum
212 de_u(i,k)=de_u(i,k)/dtcum
213 en_d(i,k)=en_d(i,k)/dtcum
214 de_d(i,k)=de_d(i,k)/dtcum
215 coefh(i,k)=coefh(i,k)/dtcum
216 c Unitel a enlever
217 t(i,k)=t(i,k)/dtcum
218 fm_therm(i,k)=fm_therm(i,k)/dtcum
219 entr_therm(i,k)=entr_therm(i,k)/dtcum
220 enddo
221 enddo
222 do i=1,klon
223 pyv1(i)=pyv1(i)/dtcum
224 pyu1(i)=pyu1(i)/dtcum
225 end do
226 do k=1,nbsrf
227 do i=1,klon
228 pftsol(i,k)=pftsol(i,k)/dtcum
229 pftsol1(i) = pftsol(i,1)
230 pftsol2(i) = pftsol(i,2)
231 pftsol3(i) = pftsol(i,3)
232 pftsol4(i) = pftsol(i,4)
233
234 ppsrf(i,k)=ppsrf(i,k)/dtcum
235 ppsrf1(i) = ppsrf(i,1)
236 ppsrf2(i) = ppsrf(i,2)
237 ppsrf3(i) = ppsrf(i,3)
238 ppsrf4(i) = ppsrf(i,4)
239
240 enddo
241 enddo
242 c
243 c ecriture des champs
244 c
245 irec=irec+1
246
247 ccccc
248 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, t, zx_tmp_3d)
249 CALL histwrite(physid,"t",itap,zx_tmp_3d,
250 . iim*(jjm+1)*klev,ndex3d)
251
252 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfu, zx_tmp_3d)
253 CALL histwrite(physid,"mfu",itap,zx_tmp_3d,
254 . iim*(jjm+1)*klev,ndex3d)
255 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfd, zx_tmp_3d)
256 CALL histwrite(physid,"mfd",itap,zx_tmp_3d,
257 . iim*(jjm+1)*klev,ndex3d)
258 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_u, zx_tmp_3d)
259 CALL histwrite(physid,"en_u",itap,zx_tmp_3d,
260 . iim*(jjm+1)*klev,ndex3d)
261 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_u, zx_tmp_3d)
262 CALL histwrite(physid,"de_u",itap,zx_tmp_3d,
263 . iim*(jjm+1)*klev,ndex3d)
264 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_d, zx_tmp_3d)
265 CALL histwrite(physid,"en_d",itap,zx_tmp_3d,
266 . iim*(jjm+1)*klev,ndex3d)
267 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_d, zx_tmp_3d)
268 CALL histwrite(physid,"de_d",itap,zx_tmp_3d,
269 . iim*(jjm+1)*klev,ndex3d)
270 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, coefh, zx_tmp_3d)
271 CALL histwrite(physid,"coefh",itap,zx_tmp_3d,
272 . iim*(jjm+1)*klev,ndex3d)
273
274 c ajou...
275 do k=1,klev
276 do i=1,klon
277 fm_therm1(i,k)=fm_therm(i,k)
278 enddo
279 enddo
280
281 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, fm_therm1, zx_tmp_3d)
282 CALL histwrite(physid,"fm_th",itap,zx_tmp_3d,
283 . iim*(jjm+1)*klev,ndex3d)
284 c
285 CALL gr_fi_ecrit(klev,klon,iim,jjm+1, entr_therm, zx_tmp_3d)
286 CALL histwrite(physid,"en_th",itap,zx_tmp_3d,
287 . iim*(jjm+1)*klev,ndex3d)
288 cccc
289 CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_impa,zx_tmp_3d)
290 CALL histwrite(physid,"frac_impa",itap,zx_tmp_3d,
291 . iim*(jjm+1)*klev,ndex3d)
292
293 CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_nucl,zx_tmp_3d)
294 CALL histwrite(physid,"frac_nucl",itap,zx_tmp_3d,
295 . iim*(jjm+1)*klev,ndex3d)
296
297 CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyu1,zx_tmp_2d)
298 CALL histwrite(physid,"pyu1",itap,zx_tmp_2d,iim*(jjm+1),
299 . ndex2d)
300
301 CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyv1,zx_tmp_2d)
302 CALL histwrite(physid,"pyv1",itap,zx_tmp_2d,iim*(jjm+1)
303 . ,ndex2d)
304
305 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol1, zx_tmp_2d)
306 CALL histwrite(physid,"ftsol1",itap,zx_tmp_2d,
307 . iim*(jjm+1),ndex2d)
308 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol2, zx_tmp_2d)
309 CALL histwrite(physid,"ftsol2",itap,zx_tmp_2d,
310 . iim*(jjm+1),ndex2d)
311 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol3, zx_tmp_2d)
312 CALL histwrite(physid,"ftsol3",itap,zx_tmp_2d,
313 . iim*(jjm+1),ndex2d)
314 CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol4, zx_tmp_2d)
315 CALL histwrite(physid,"ftsol4",itap,zx_tmp_2d,
316 . iim*(jjm+1),ndex2d)
317
318 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf1, zx_tmp_2d)
319 CALL histwrite(physid,"psrf1",itap,zx_tmp_2d,
320 . iim*(jjm+1),ndex2d)
321 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf2, zx_tmp_2d)
322 CALL histwrite(physid,"psrf2",itap,zx_tmp_2d,
323 . iim*(jjm+1),ndex2d)
324 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf3, zx_tmp_2d)
325 CALL histwrite(physid,"psrf3",itap,zx_tmp_2d,
326 . iim*(jjm+1),ndex2d)
327 CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf4, zx_tmp_2d)
328 CALL histwrite(physid,"psrf4",itap,zx_tmp_2d,
329 . iim*(jjm+1),ndex2d)
330
331 if (ok_sync) call histsync(physid)
332 c if (ok_sync) call histsync
333
334 c
335 cAA Test sur la valeur des coefficients de lessivage
336 c
337 zmin=1e33
338 zmax=-1e33
339 do k=1,klev
340 do i=1,klon
341 zmax=max(zmax,frac_nucl(i,k))
342 zmin=min(zmin,frac_nucl(i,k))
343 enddo
344 enddo
345 Print*,'------ coefs de lessivage (min et max) --------'
346 Print*,'facteur de nucleation ',zmin,zmax
347 zmin=1e33
348 zmax=-1e33
349 do k=1,klev
350 do i=1,klon
351 zmax=max(zmax,frac_impa(i,k))
352 zmin=min(zmin,frac_impa(i,k))
353 enddo
354 enddo
355 Print*,'facteur d impaction ',zmin,zmax
356
357 ENDIF
358
359 c reinitialisation des champs cumules
360 go to 768
361 if (mod(iadvtr,istphy).eq.1) then
362 do k=1,klev
363 do i=1,klon
364 mfu(i,k)=0.
365 mfd(i,k)=0.
366 en_u(i,k)=0.
367 de_u(i,k)=0.
368 en_d(i,k)=0.
369 de_d(i,k)=0.
370 coefh(i,k)=0.
371 t(i,k)=0.
372 fm_therm(i,k)=0.
373 entr_therm(i,k)=0.
374 enddo
375 enddo
376 do i=1,klon
377 pyv1(i)=0.
378 pyu1(i)=0.
379 end do
380 do k=1,nbsrf
381 do i=1,klon
382 pftsol(i,k)=0.
383 ppsrf(i,k)=0.
384 enddo
385 enddo
386
387 dtcum=0.
388 endif
389
390 do k=1,klev
391 do i=1,klon
392 mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys
393 mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys
394 en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys
395 de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys
396 en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys
397 de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys
398 coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys
399 t(i,k)=t(i,k)+pt(i,k)*pdtphys
400 fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys
401 entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys
402 enddo
403 enddo
404 do i=1,klon
405 pyv1(i)=pyv1(i)+yv1(i)*pdtphys
406 pyu1(i)=pyu1(i)+yu1(i)*pdtphys
407 end do
408 do k=1,nbsrf
409 do i=1,klon
410 pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys
411 ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys
412 enddo
413 enddo
414
415 dtcum=dtcum+pdtphys
416 768 continue
417
418 RETURN
419 END

  ViewVC Help
Powered by ViewVC 1.1.21