source: LMDZ.3.3/trunk/libf/phylmd/phytrac.F @ 207

Last change on this file since 207 was 207, checked in by lmdz, 23 years ago

petit detail
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 25.9 KB
Line 
1c
2c $Header$
3c
4      SUBROUTINE phytrac (rnpb,
5     I                   debutphy,lafin,
6     I                   nqmax,
7     I                   nlon,nlev,pdtphys,
8     I                   t_seri,paprs,pplay,
9     I                   pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
10     I                   coefh,yu1,yv1,ftsol,pctsrf,xlat,
11     I                   frac_impa, frac_nucl,
12     I                   xlon,presnivs,paire,pphis,
13     O                   tr_seri)
14      USE ioipsl
15      IMPLICIT none
16c======================================================================
17c Auteur(s) FH
18c Objet: Moniteur general des tendances traceurs
19c
20cAA Remarques en vrac:
21cAA--------------------
22cAA 1/ le call phytrac se fait avec nqmax-2 donc nous avons bien
23cAA les vrais traceurs (nbtr) dans phytrac (pas la vapeur ni eau liquide)
24cAA 2/ Le choix du radon et du pb se fait juste avec un data
25cAA    (peu propre). Peut-etre pourrait-on prevoir dans l'avenir
26cAA    une variable "type de traceur"
27c======================================================================
28#include "YOMCST.h"
29#include "dimensions.h"
30#include "dimphy.h"
31#include "indicesol.h"
32c======================================================================
33
34c Arguments:
35c
36c   EN ENTREE:
37c   ==========
38c
39c   divers:
40c   -------
41c
42      integer nlon  ! nombre de points horizontaux
43      integer nlev  ! nombre de couches verticales
44      integer nqmax ! nombre de traceurs auxquels on applique la physique
45      real pdtphys  ! pas d'integration pour la physique (seconde)
46      real t_seri(nlon,nlev) ! temperature
47      real tr_seri(nlon,nlev,nbtr) ! traceur 
48      real paprs(nlon,nlev+1)  ! pression pour chaque inter-couche (en Pa)
49      real pplay(nlon,nlev)  ! pression pour le mileu de chaque couche (en Pa)
50      real presnivs(klev) ! pressions approximat. des milieux couches ( en PA)
51      real paire(klon)
52      real pphis(klon)
53      logical debutphy       ! le flag de l'initialisation de la physique
54      logical lafin          ! le flag de la fin de la physique
55
56      integer ll
57c
58cAA Rem : nbtr : nombre de vrais traceurs est defini dans dimphy.h
59c
60c   convection:
61c   -----------
62c
63      REAL pmfu(nlon,nlev)  ! flux de masse dans le panache montant
64      REAL pmfd(nlon,nlev)  ! flux de masse dans le panache descendant
65      REAL pen_u(nlon,nlev) ! flux entraine dans le panache montant
66      REAL pde_u(nlon,nlev) ! flux detraine dans le panache montant
67      REAL pen_d(nlon,nlev) ! flux entraine dans le panache descendant
68      REAL pde_d(nlon,nlev) ! flux detraine dans le panache descendant
69c
70c   Couche limite:
71c   --------------
72c
73      REAL coefh(nlon,nlev) ! coeff melange CL
74      REAL yu1(nlon)        ! vents au premier niveau
75      REAL yv1(nlon)        ! vents au premier niveau
76      REAL xlat(nlon)       ! latitudes pour chaque point
77      REAL xlon(nlon)       ! longitudes pour chaque point
78
79c
80c   Lessivage:
81c   ----------
82c
83c pour le ON-LINE
84c
85      REAL frac_impa(nlon,nlev)  ! fraction d'aerosols impactes
86      REAL frac_nucl(nlon,nlev)  ! fraction d'aerosols nuclees
87c
88cAA
89cAA Arguments necessaires pour les sources et puits de traceur:
90cAA ----------------
91cAA
92      real ftsol(nlon,nbsrf)  ! Temperature du sol (surf)(Kelvin)
93      real pctsrf(nlon,nbsrf) ! Pourcentage de sol f(nature du sol)
94c abder
95      real pftsol1(nlon),pftsol2(nlon),pftsol3(nlon),pftsol4(nlon)
96      real ppsrf1(nlon),ppsrf2(nlon),ppsrf3(nlon),ppsrf4(nlon)
97c fin
98cAA ----------------------------
99cAA  VARIABLES LOCALES TRACEURS
100cAA ----------------------------
101cAA
102cAA Sources et puits des traceurs:
103cAA ------------------------------
104cAA
105cAA Pour l'instant seuls les cas du rn et du pb ont ete envisages.
106
107      REAL source(klon)       ! a voir lorsque le flux est prescrit
108      REAL topuits(klev,nbtr)  ! a voir
109cAA
110cAA Pour la source de radon et son reservoir de sol
111cAA ................................................
112 
113      REAL trs(klon,nbtr)    ! Conc. radon ds le sol
114      SAVE trs
115
116      REAL masktr(klon,nbtr) ! Masque reservoir de sol traceur
117c                            Masque de l'echange avec la surface
118c                           (1 = reservoir) ou (possible => 1 )
119      SAVE masktr
120      REAL fshtr(klon,nbtr)  ! Flux surfacique dans le reservoir de sol
121      SAVE fshtr
122      REAL hsoltr(nbtr)      ! Epaisseur equivalente du reservoir de sol
123      SAVE hsoltr
124      REAL tautr(nbtr)       ! Constante de decroissance radioactive
125      SAVE tautr
126      REAL vdeptr(nbtr)      ! Vitesse de depot sec dans la couche Brownienne
127      SAVE vdeptr
128      REAL scavtr(nbtr)      ! Coefficient de lessivage
129      SAVE scavtr
130cAA
131      CHARACTER*1 itn
132C maf ioipsl
133      CHARACTER*2 str2
134      INTEGER nhori, nvert
135      REAL zsto, zout, zjulian
136      INTEGER nid_tra
137      SAVE nid_tra
138c     REAL x(klon,klev,nbtr+2) ! traceurs
139      INTEGER ndex(1)
140      REAL zx_tmp_2d(iim,jjm+1), zx_tmp_3d(iim,jjm+1,klev)
141      REAL zx_lon(iim,jjm+1), zx_lat(iim,jjm+1)
142      INTEGER itra
143      SAVE itra                   ! compteur pour la physique
144C
145C Variables liees a l'ecriture de la bande histoire : phytrac.nc
146c
147      INTEGER ecrit_tra
148      SAVE ecrit_tra   
149      logical ok_sync
150      parameter (ok_sync = .true.)
151C
152C nature du traceur
153c
154      logical aerosol(nbtr)  ! Nature du traceur
155c                            ! aerosol(it) = true  => aerosol
156c                            ! aerosol(it) = false => gaz
157c                            ! nat_trac(it) = 1. aerosolc
158      logical clsol(nbtr)    ! clsol(it) = true => CL sol calculee
159      logical radio(nbtr)    ! radio(it)=true => decroisssance radioactive
160      save aerosol,clsol,radio
161C
162c======================================================================
163c
164c Declaration des procedures appelees
165c
166c--modif convection tiedtke
167      INTEGER i, k, it,itap
168        save itap
169      REAL delp(klon,klev)
170c--end modif
171c
172c Variables liees a l'ecriture de la bande histoire physique
173c
174c Variables locales pour effectuer les appels en serie
175c----------------------------------------------------
176c
177      REAL d_tr(klon,klev), d_trs(klon) ! tendances de traceurs
178      REAL d_tr_cl(klon,klev) ! tendance de traceurs  couche limite
179      REAL d_tr_cv(klon,klev) ! tendance de traceurs  convection
180      REAL d_tr_dec(klon,klev,nbtr) ! la tendance de la decroissance
181c                                   ! radioactive du rn - > pb
182      REAL d_tr_lessi_impa(klon,klev,nbtr) ! la tendance du lessivage
183c                                          ! par impaction
184      REAL d_tr_lessi_nucl(klon,klev,nbtr) ! la tendance du lessivage
185c                                          ! par nucleation
186      REAL fluxrn(klon,klev)
187      REAL fluxpb(klon,klev)
188      REAL pbimpa(klon,klev)
189      REAL pbnucl(klon,klev)
190      REAL rn(klon,klev)
191      REAL pb(klon,klev)
192      REAL flestottr(klon,klev,nbtr) ! flux de lessivage
193c                                    ! dans chaque couche
194
195C
196      character*20 modname
197      character*80 abort_message
198c
199c   Controles
200c-------------
201      logical first,couchelimite,convection,lessivage,sorties,
202     s        rnpb,inirnpb
203      save first,couchelimite,convection,lessivage,sorties,
204     s     inirnpb
205      data first,couchelimite,convection,lessivage,sorties
206     s     /.true.,.true.,.true.,.true.,.true./
207c
208c======================================================================
209c         ecrit_tra = NINT(86400./pdtphys *1.0)  ! tous les jours
210         modname='phytrac'
211
212c        print*,'DANS PHYTRAC debutphy=',debutphy
213
214         if (debutphy) then
215
216          print*,'dans phytrac ',pdtphys,ecritphy,ecrit_tra
217          ecrit_tra = NINT(86400./pdtphys/2.) ! tous les 12H
218c         ecrit_tra = NINT(86400./pdtphys) ! tous les 24H
219
220         if(nbtr.lt.nqmax) then
221           print*,'NQMAX=',nqmax
222           print*,'NBTR=',nbtr
223           abort_message='See above'
224           call abort_gcm(modname,abort_message,1)
225         endif
226
227         inirnpb=rnpb
228         PRINT*, 'La frequence de sortie traceurs est  ', ecrit_tra
229         itra=0
230         itap=0
231C         
232         CALL ymds2ju(anne_ini, 1, 1, 0.0, zjulian)
233         zjulian = zjulian + day_ini
234c
235         CALL gr_fi_ecrit(1,klon,iim,jjm+1,xlon,zx_lon)
236         DO i = 1, iim
237            zx_lon(i,1) = xlon(i+1)
238            zx_lon(i,jjm+1) = xlon(i+1)
239         ENDDO
240         DO ll=1,klev
241            znivsig(ll)=float(ll)
242         ENDDO
243         CALL gr_fi_ecrit(1,klon,iim,jjm+1,xlat,zx_lat)
244         CALL histbeg("histrac", iim,zx_lon, jjm+1,zx_lat,
245     .                 1,iim,1,jjm+1, 0, zjulian, pdtphys,
246     .                 nhori, nid_tra)
247         CALL histvert(nid_tra, "presnivs", "Vertical levels", "mb",
248     .                 klev, presnivs, nvert)
249         zsto = pdtphys
250         zout = pdtphys * FLOAT(ecrit_tra)
251c
252         CALL histdef(nid_tra, "phis", "Surface geop. height", "-",
253     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
254     .                "once",  zsto,zout)
255c
256         CALL histdef(nid_tra, "aire", "Grid area", "-",
257     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
258     .                "once",  zsto,zout)
259
260        goto 666
261         CALL histdef(nid_tra, "pyu1", "Vent niv 1", "-",
262     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
263     .                "inst(X)",  zsto,zout)
264
265         CALL histdef(nid_tra, "pyv1", "Vent niv 1", "-",
266     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
267     .                "inst(X)",  zsto,zout)
268         CALL histdef(nid_tra, "psrf1", "nature sol", "-",
269     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
270     .                "inst(X)",  zsto,zout)
271         CALL histdef(nid_tra, "psrf2", "nature sol", "-",
272     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
273     .                "inst(X)",  zsto,zout)
274         CALL histdef(nid_tra, "psrf3", "nature sol", "-",
275     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
276     .                "inst(X)",  zsto,zout)
277         CALL histdef(nid_tra, "psrf4", "nature sol", "-",
278     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
279     .                "inst(X)",  zsto,zout)
280         CALL histdef(nid_tra, "ftsol1", "temper sol", "-",
281     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
282     .                "inst(X)",  zsto,zout)
283         CALL histdef(nid_tra, "ftsol2", "temper sol", "-",
284     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
285     .                "inst(X)",  zsto,zout)
286         CALL histdef(nid_tra, "ftsol3", "temper sol", "-",
287     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
288     .                "inst",  zsto,zout)
289         CALL histdef(nid_tra, "ftsol4", "temper sol", "-",
290     .                iim,jjm+1,nhori, 1,1,1, -99, 32,
291     .                "inst(X)",  zsto,zout)
292         CALL histdef(nid_tra, "pplay", "flux u mont","-",
293     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
294     .                "inst(X)", zsto,zout)
295         CALL histdef(nid_tra, "t", "flux u mont","-",
296     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
297     .                "inst(X)", zsto,zout)
298         CALL histdef(nid_tra, "mfu", "flux u mont","-",
299     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
300     .                "ave(X)", zsto,zout)
301         CALL histdef(nid_tra, "mfd", "flux u decen","-",
302     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
303     .                "ave(X)", zsto,zout)
304         CALL histdef(nid_tra, "en_u", "flux u mont","-",
305     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
306     .                "ave(X)", zsto,zout)
307         CALL histdef(nid_tra, "en_d", "flux u mont","-",
308     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
309     .                "ave(X)", zsto,zout)
310         CALL histdef(nid_tra, "de_u", "flux u mont","-",
311     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
312     .                "ave(X)", zsto,zout)
313         CALL histdef(nid_tra, "de_d", "flux u mont","-",
314     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
315     .                "ave(X)", zsto,zout)
316         CALL histdef(nid_tra, "coefh", "turbulent coef","-",
317     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
318     .                "ave(X)", zsto,zout)
319
320666     continue
321c
322         DO it=1,nqmax
323         IF (it.LE.99) THEN
324         WRITE(str2,'(i2.2)') it
325C champ 3D
326         CALL histdef(nid_tra, "tr"//str2, "Tracer No."//str2, "U/kga",
327     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
328     .                "ave(X)", zsto,zout)
329         IF (lessivage) THEN
330         CALL histdef(nid_tra, "fl"//str2, "Tracer Flux No."//str2,
331     .                "U/m2/s",iim,jjm+1,nhori, klev,1,klev,nvert, 32,
332     .                "ave(X)", zsto,zout)
333         ENDIF
334         ELSE
335         PRINT*, "Trop de traceurs"
336         CALL abort
337         ENDIF
338         ENDDO
339         CALL histend(nid_tra)
340         ndex(1) = 0
341c
342         i = NINT(zout/zsto)
343         CALL gr_fi_ecrit(1,klon,iim,jjm+1,pphis,zx_tmp_2d)
344         CALL histwrite(nid_tra,"phis",i,zx_tmp_2d,iim*(jjm+1),ndex)
345C
346         i = NINT(zout/zsto)
347         CALL gr_fi_ecrit(1,klon,iim,jjm+1,paire,zx_tmp_2d)
348         CALL histwrite(nid_tra,"aire",i,zx_tmp_2d,iim*(jjm+1),ndex)
349
350c======================================================================
351c   Initialisation de certaines variables pour le Rn et le Pb
352c======================================================================
353
354c Initialisation du traceur dans le sol (couche limite radonique)
355c
356c        print*,'valeur de debut dans phytrac :',debutphy
357         do it=1,nqmax
358            do i=1,klon
359               trs(i,it) = 0.
360            enddo
361         END DO
362
363         open (99,file='starttrac',status='old',
364     .         err=999,form='formatted')
365         read(99,*) (trs(i,1),i=1,klon)
366999      close(99)
367         print*, 'apres starttrac'
368
369c Initialisation de la fraction d'aerosols lessivee
370c
371         DO it=1,nqmax
372           DO k = 1, nlev
373              DO i = 1, klon
374                 d_tr_lessi_impa(i,k,it) =  0.0
375                 d_tr_lessi_nucl(i,k,it) =  0.0
376             ENDDO
377           ENDDO
378         ENDDO
379c
380c Initialisation de la nature des traceurs
381c
382         DO it = 1, nqmax
383            aerosol(it) = .FALSE.  ! Tous les traceurs sont des gaz par defaut
384            radio(it) = .FALSE.    ! Par defaut pas de passage par radiornpb
385            clsol(it) = .FALSE.  ! Par defaut couche limite avec flux prescrit
386         ENDDO
387c
388      ENDIF  ! fin debutphy
389c Initialisation du traceur dans le sol (couche limite radonique)
390      if(inirnpb) THEN
391c
392         radio(1)= .true.
393         radio(2)= .true.
394         clsol(1)= .true.
395         clsol(2)= .true.
396         aerosol(2) = .TRUE. ! le Pb est un aerosol
397c
398         call initrrnpb (ftsol,pctsrf,masktr,fshtr,hsoltr,tautr
399     .                   ,vdeptr,scavtr)
400         inirnpb=.false.
401      endif
402      if(nqmax.gt.2) aerosol(3)=.true.
403
404
405c  abder
406        goto 777
407            do i=1,nlon
408               pftsol1(i) = ftsol(i,1)
409               pftsol2(i) = ftsol(i,2)
410               pftsol3(i) = ftsol(i,3)
411               pftsol4(i) = ftsol(i,4)
412
413               ppsrf1(i) = pctsrf(i,1)
414               ppsrf2(i) = pctsrf(i,2)
415               ppsrf3(i) = pctsrf(i,3)
416               ppsrf4(i) = pctsrf(i,4)
417
418            enddo
419         ndex(1)=0
420         itap=itap+1
421         CALL gr_fi_ecrit(1,klon,iim,jjm+1,yu1,zx_tmp_2d)
422         CALL histwrite(nid_tra,"pyu1",itap,zx_tmp_2d,
423     s                                  iim*(jjm+1),ndex)
424         
425         CALL gr_fi_ecrit(1,klon,iim,jjm+1,yv1,zx_tmp_2d)
426         CALL histwrite(nid_tra,"pyv1",itap,zx_tmp_2d,
427     s                                  iim*(jjm+1),ndex)
428
429         CALL gr_fi_ecrit(1,klon,iim,jjm+1,pftsol1,zx_tmp_2d)
430         CALL histwrite(nid_tra,"ftsol1",itap,zx_tmp_2d,
431     s                                       iim*(jjm+1),ndex)
432
433         CALL gr_fi_ecrit(1,klon,iim,jjm+1,pftsol2,zx_tmp_2d)
434         CALL histwrite(nid_tra,"ftsol2",itap,zx_tmp_2d,
435     s                                       iim*(jjm+1),ndex)
436
437         CALL gr_fi_ecrit(1,klon,iim,jjm+1,pftsol3,zx_tmp_2d)
438         CALL histwrite(nid_tra,"ftsol3",itap,zx_tmp_2d,
439     s                                      iim*(jjm+1),ndex)
440
441         CALL gr_fi_ecrit(1,klon,iim,jjm+1,pftsol4,zx_tmp_2d)
442         CALL histwrite(nid_tra,"ftsol4",itap,zx_tmp_2d,
443     s                                      iim*(jjm+1),ndex)
444
445         CALL gr_fi_ecrit(1,klon,iim,jjm+1,ppsrf1,zx_tmp_2d)
446         CALL histwrite(nid_tra,"psrf1",itap,zx_tmp_2d,
447     s                                     iim*(jjm+1),ndex)
448
449         CALL gr_fi_ecrit(1,klon,iim,jjm+1,ppsrf2,zx_tmp_2d)
450         CALL histwrite(nid_tra,"psrf2",itap,zx_tmp_2d,
451     s                                     iim*(jjm+1),ndex)
452
453         CALL gr_fi_ecrit(1,klon,iim,jjm+1,ppsrf3,zx_tmp_2d)
454         CALL histwrite(nid_tra,"psrf3",itap,zx_tmp_2d,
455     s                                     iim*(jjm+1),ndex)
456
457         CALL gr_fi_ecrit(1,klon,iim,jjm+1,ppsrf4,zx_tmp_2d)
458         CALL histwrite(nid_tra,"psrf4",itap,zx_tmp_2d,
459     s                                     iim*(jjm+1),ndex)
460777     continue
461c======================================================================
462c   Calcul de l'effet de la convection
463c======================================================================
464        print*,'Avant convection'
465      do it=1,nqmax
466         WRITE(itn,'(i1)') it
467c        call diagtracphy(tr_seri(:,:,it),paprs,'Avant conv'//itn)
468      enddo
469
470      if (convection) then
471
472      print*,'Pas de temps dans phytrac : ',pdtphys
473      DO it=1, nqmax
474      CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
475     .            pplay, paprs, tr_seri(1,1,it), d_tr_cv)
476      DO k = 1, nlev
477      DO i = 1, klon
478         tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k)
479      ENDDO
480      ENDDO
481c      WRITE(itn,'(i1)') it
482c      CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'convection it='//itn)
483      ENDDO
484c      print*,'apres nflxtr'
485
486
487      endif ! convection
488c        print*,'Apres convection'
489c      do it=1,nqmax
490c         WRITE(itn,'(i1)') it
491c        call diagtracphy(tr_seri(:,:,it),paprs,'Avant conv'//itn)
492c      enddo
493
494c======================================================================
495c   Calcul de l'effet de la couche limite
496c======================================================================
497c       print *,'Avant couchelimite'
498c      do it=1,nqmax
499c         WRITE(itn,'(i1)') it
500c        call diagtracphy(tr_seri(:,:,it),paprs,'Avant CL  '//itn)
501c      enddo
502
503      if (couchelimite) then
504
505      DO k = 1, nlev
506      DO i = 1, klon
507         delp(i,k) = paprs(i,k)-paprs(i,k+1)
508      ENDDO
509      ENDDO
510
511C maf modif pour tenir compte du cas rnpb + traceur
512      DO it=1, nqmax
513c     print *,'it',it,clsol(it)
514      if (clsol(it)) then  ! couche limite avec quantite dans le sol calculee
515          CALL cltracrn(it, pdtphys, yu1, yv1,
516     e                    coefh,t_seri,ftsol,pctsrf,
517     e                    tr_seri(1,1,it),trs(1,it),
518     e                    paprs, pplay, delp,
519     e                    masktr(1,it),fshtr(1,it),hsoltr(it),
520     e                    tautr(it),vdeptr(it),
521     e                    xlat,
522     s                    d_tr_cl,d_trs)
523          DO k = 1, nlev
524            DO i = 1, klon
525              tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cl(i,k)
526            ENDDO
527          ENDDO
528c
529c Traceur ds sol
530c
531          DO i = 1, klon
532            trs(i,it) = trs(i,it) + d_trs(i)
533          END DO
534C
535C maf provisoire suppression des prints
536C         WRITE(itn,'(i1)') it
537C         CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'cltracrn it='//itn)
538      else ! couche limite avec flux prescrit
539Cmaf provisoire source / traceur a creer
540        DO i=1, klon
541          source(i) = 0.0 ! pas de source, pour l'instant
542        ENDDO
543C
544          CALL cltrac(pdtphys, coefh,t_seri,
545     s               tr_seri(1,1,it), source,
546     e               paprs, pplay, delp,
547     s               d_tr )
548            DO k = 1, nlev
549               DO i = 1, klon
550                  tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr(i,k)
551               ENDDO
552            ENDDO
553Cmaf provisoire suppression des prints
554Cmaf          WRITE(itn,'(i1)') it
555cmaf          CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'cltracn it='//itn)
556      endif
557      ENDDO
558c
559      endif ! couche limite
560
561c      print*,'Apres couchelimite'
562c      do it=1,nqmax
563c         WRITE(itn,'(i1)') it
564c        call diagtracphy(tr_seri(:,:,it),paprs,'Avant CL  '//itn)
565c      enddo
566
567c======================================================================
568c   Calcul de l'effet du puits radioactif
569c======================================================================
570
571C MAF il faudrait faire une modification pour passer dans radiornpb
572c si radio=true mais pour l'instant radiornpb propre au cas rnpb
573      if(rnpb) then
574        call radiornpb (tr_seri,pdtphys,tautr,d_tr_dec)
575C
576        DO it=1,nqmax
577            if(radio(it)) then
578            DO k = 1, nlev
579               DO i = 1, klon
580                  tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_dec(i,k,it)
581               ENDDO
582            ENDDO
583            WRITE(itn,'(i1)') it
584            CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'puits rn it='//itn)
585            endif
586        ENDDO
587c
588      endif ! rnpb decroissance  radioactive
589C
590c======================================================================
591c   Calcul de l'effet de la precipitation
592c======================================================================
593
594      print*,'LESSIVAGE =',lessivage
595      IF (lessivage) THEN
596
597c     print*,'avant lessivage'
598
599       DO it = 1, nqmax
600           DO k = 1, nlev
601              DO i = 1, klon
602               d_tr_lessi_nucl(i,k,it) = 0.0
603               d_tr_lessi_impa(i,k,it) = 0.0
604               flestottr(i,k,it) = 0.0
605              ENDDO
606           ENDDO
607       ENDDO
608c
609c tendance des aerosols nuclees et impactes
610c
611       DO it = 1, nqmax
612         IF (aerosol(it)) THEN
613           DO k = 1, nlev
614              DO i = 1, klon
615               d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +
616     s                  ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
617               d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +
618     s                  ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
619              ENDDO
620           ENDDO
621         ENDIF
622       ENDDO
623c
624c Mises a jour des traceurs + calcul des flux de lessivage
625c Mise a jour due a l'impaction et a la nucleation
626c
627c      call dump2d(iim,jjm-1,frac_impa(2:klon-1,10),'FRACIMPA')
628c      call dump2d(iim,jjm-1,frac_nucl(2:klon-1,10),'FRACNUCL')
629c      call dump2d(iim,jjm-1,tr_seri(2:klon-1,10,3),'TRACEUR3')
630       DO it = 1, nqmax
631c         print*,'IT=',it,aerosol(it)
632         IF (aerosol(it)) THEN
633c           print*,'IT=',it,' On lessive'
634           DO k = 1, nlev
635              DO i = 1, klon
636               tr_seri(i,k,it)=tr_seri(i,k,it)
637     s         *frac_impa(i,k)*frac_nucl(i,k)
638              ENDDO
639           ENDDO
640         ENDIF
641       ENDDO
642c      call dump2d(iim,jjm-1,tr_seri(2:klon-1,10,3),'TRACEUR3B')
643c
644c Flux lessivage total
645c
646      DO it = 1, nqmax
647           DO k = 1, nlev
648            DO i = 1, klon
649               flestottr(i,k,it) = flestottr(i,k,it) -
650     s                   ( d_tr_lessi_nucl(i,k,it)   +
651     s                     d_tr_lessi_impa(i,k,it) ) *
652     s                   ( paprs(i,k)-paprs(i,k+1) ) /
653     s                   (RG * pdtphys)
654            ENDDO
655           ENDDO
656c
657Cmaf suppression provisoire
658Cmaf        WRITE(itn,'(i1)') it
659Cmaf    CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'tr(lessi) it='//itn)
660      ENDDO
661c
662c     print*,'apres lessivage'
663      ENDIF
664Cc
665      DO k = 1, nlev
666         DO i = 1, klon
667            fluxrn(i,k) = flestottr(i,k,1)
668            fluxpb(i,k) = flestottr(i,k,2)
669            rn(i,k) = tr_seri(i,k,1)
670            pb(i,k) = tr_seri(i,k,2)
671            pbnucl(i,k)=d_tr_lessi_nucl(i,k,2)
672            pbimpa(i,k)=d_tr_lessi_impa(i,k,2)
673         ENDDO
674      ENDDO
675      itra=itra+1
676      ndex(1) = 0
677      DO it=1,nqmax
678      IF (it.LE.99) THEN
679       WRITE(str2,'(i2.2)') it
680C champs 3D
681       CALL gr_fi_ecrit(klev,klon,iim,jjm+1,tr_seri(1,1,it),zx_tmp_3d)
682       CALL histwrite(nid_tra,"tr"//str2,itra,zx_tmp_3d,
683     .                                   iim*(jjm+1)*klev,ndex)
684c      IF (lessivage) THEN
685c      CALL gr_fi_ecrit(klev,klon,iim,jjm+1,flestottr(1,1,it),zx_tmp_3d)
686c      CALL histwrite(nid_tra,"fl"//str2,itra,zx_tmp_3d,
687c    .                                   iim*(jjm+1)*klev,ndex)
688c     ENDIF
689      ELSE
690         PRINT*, "Trop de traceurs"
691         CALL abort
692      ENDIF
693      ENDDO
694
695        goto 888
696        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pplay,zx_tmp_3d)
697        CALL histwrite(nid_tra,"pplay",itra,zx_tmp_3d,
698     .                  iim*(jjm+1)*klev,ndex)
699
700        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,t_seri,zx_tmp_3d)
701        CALL histwrite(nid_tra,"t",itra,zx_tmp_3d,
702     .                  iim*(jjm+1)*klev,ndex)
703        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pmfu,zx_tmp_3d)
704        CALL histwrite(nid_tra,"mfu",itra,zx_tmp_3d,
705     .                  iim*(jjm+1)*klev,ndex)
706        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pmfd,zx_tmp_3d)
707        CALL histwrite(nid_tra,"mfd",itra,zx_tmp_3d,
708     .                  iim*(jjm+1)*klev,ndex)
709        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pen_u,zx_tmp_3d)
710        CALL histwrite(nid_tra,"en_u",itra,zx_tmp_3d,
711     .                  iim*(jjm+1)*klev,ndex)
712        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pen_d,zx_tmp_3d)
713        CALL histwrite(nid_tra,"en_d",itra,zx_tmp_3d,
714     .                  iim*(jjm+1)*klev,ndex)
715        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pde_d,zx_tmp_3d)
716        CALL histwrite(nid_tra,"de_d",itra,zx_tmp_3d,
717     .                  iim*(jjm+1)*klev,ndex)
718        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,pde_u,zx_tmp_3d)
719        CALL histwrite(nid_tra,"de_u",itra,zx_tmp_3d,
720     .                  iim*(jjm+1)*klev,ndex)
721        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,coefh,zx_tmp_3d)
722        CALL histwrite(nid_tra,"coefh",itra,zx_tmp_3d,
723     .                  iim*(jjm+1)*klev,ndex)
724
725888     continue
726
727c       print*,'Sortie phytrac'
728c      do it=1,nqmax
729c         WRITE(itn,'(i1)') it
730c        call diagtracphy(tr_seri(:,:,it),paprs,'Fin Phys  '//itn)
731c      enddo
732
733      if (lafin) then
734         print*, 'c est la fin de la physique'
735         open (99,file='restarttrac',  form='formatted')
736         do i=1,klon
737             write(99,*) trs(i,1)
738         enddo
739         PRINT*, 'Ecriture du fichier restarttrac'
740         close(99)
741      else
742         print*, 'physique pas fini'
743      endif
744
745
746      RETURN
747      END
Note: See TracBrowser for help on using the repository browser.