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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
File size: 13534 byte(s)
Initial import
1 guez 3 !
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