source: LMDZ6/trunk/libf/phylmd/tracreprobus_mod.F90 @ 4058

Last change on this file since 4058 was 4050, checked in by dcugnet, 3 years ago

Second commit for new tracers.

  • include most of the keys in the tracers descriptor vector "tracers(:)".
  • fix in phylmdiso/cv3_routines: fq_* variables were used where their fxt_* counterparts were expected.
  • multiple IF(nqdesc(iq)>0) and IF(nqfils(iq)>0) tests suppressed, because they are not needed: "do ... enddo" loops with 0 upper bound are not executed.
  • remove French accents from comments (encoding problem) in phylmdiso/cv3_routines and phylmdiso/cv30_routines.
  • modifications in "isotopes_verif_mod", where the call to function "iso_verif_tag17_q_deltad_chn" in "iso_verif_tag17_q_deltad_chn" was not detected at linking stage, although defined in the same module (?).
  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 4.3 KB
RevLine 
[1565]1MODULE tracreprobus_mod
2!
3! This module prepares and calls the Reprobus main subroutine
4!
5
6CONTAINS
7
8  SUBROUTINE tracreprobus(pdtphys, gmtime, debutphy, julien, &
9       presnivs, xlat, xlon, pphis, pphi, &
10       t_seri, pplay, paprs, sh , &
[2180]11       tr_seri)
[1565]12
13    USE dimphy
[4050]14    USE infotrac_phy, ONLY: nbtr, solsym
[1565]15#ifdef REPROBUS
16    USE CHEM_REP, ONLY : pdt_rep, &  ! pas de temps reprobus
17         daynum, iter, &             ! jourjulien, iteration chimie
[3666]18         pdel,&
19         d_q_rep,d_ql_rep,d_qi_rep
[1565]20#endif
21    IMPLICIT NONE
22
23! Input argument
24!---------------
25    REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)
26    REAL,INTENT(IN)    :: gmtime     ! Heure courante
27    LOGICAL,INTENT(IN) :: debutphy   ! le flag de l'initialisation de la physique
28    INTEGER,INTENT(IN) :: julien     ! Jour julien
29
30    REAL,DIMENSION(klev),INTENT(IN)        :: presnivs! pressions approximat. des milieux couches (en PA)
31    REAL,DIMENSION(klon),INTENT(IN)        :: xlat    ! latitudes pour chaque point
32    REAL,DIMENSION(klon),INTENT(IN)        :: xlon    ! longitudes pour chaque point
33    REAL,DIMENSION(klon),INTENT(IN)        :: pphis   ! geopotentiel du sol
34    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pphi    ! geopotentiel de chaque couche
35
36    REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
37    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
38    REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
39    REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique   
40
41
42! Output argument
43!----------------
44    REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT)  :: tr_seri ! Concentration Traceur [U/KgA] 
45 
46
47! Local variables
48!----------------
[3666]49    INTEGER :: it, k, niter
[1565]50
[1568]51#ifdef REPROBUS
[1565]52    !   -- CHIMIE REPROBUS --
[3666]53!    pdt_rep=pdtphys/2.
54    niter=pdtphys/pdt_rep
55    write(*,*)'nb d appel de REPROBUS',niter
[1565]56   
57    DO k = 1, klev
58       pdel(:,k) = paprs(:,k) - paprs (:,k+1)
59    END DO
60   
61    ! initialisation de ozone passif a ozone en debut d hiver HN et HS
62    IF (julien == 341 .OR. julien == 181) THEN
63       tr_seri(:,:,11)=tr_seri(:,:,8)
64    END IF
[3666]65
66    d_q_rep(:,:)  =0.
67    d_ql_rep(:,:) =0.
68    d_qi_rep(:,:) =0.
[1565]69   
[3666]70    DO  iter = 1,niter
[1565]71       daynum = FLOAT(julien) + gmtime + (iter-1)*pdt_rep/86400.
72       
[3666]73!       DO it=1, nbtr
[1565]74!     WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it))
75! seulement pour les especes chimiques (pas l'age de l'air)
76! verif valeurs extremes
77! correction: a 1.e-30 quand =0 ou negatif et
78! call abort si >ou= 1.e10
[3666]79!          WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr
80!          IF (it < nqtot) THEN
81!             WRITE(*,*)'iciav',it,nqtot
82!#ifdef REPROBUS
83!             CALL minmaxqfi_chimie(it,tr_seri(1,1,it),0.,1.e10,'avant chimie ')
84!#endif
85!             WRITE(*,*)iter,'avpres'
86!          ENDIF
87!       ENDDO
[1565]88       
89#ifdef REPROBUS
90       CALL chemmain_rlong_1401( &
91            tr_seri, & !argument phytrac (change de nom apres: vmr)
92            xlon,    & !argument phytrac (change de nom apres: lon)
93            xlat,    & !argument phytrac (change de nom apres: lat)
94            t_seri,  & !argument phytrac (meme nom)
95            pplay,   & !argument phytrac (meme nom)
96            pphi,    & !argument phytrac (meme nom)
97            pphis,   & !argument phytrac (meme nom)
98            presnivs, & !argument phytrac (meme nom)
99            sh,      & !argument phytrac (meme nom)
100            debutphy) !argument phytrac (change de nom apres: debut)
101       ! pdel, pdt_rep, daynum : definit dans phytrac et utilise dans chemmain
102       !                 et transporte par CHEM_REP
[3125]103
[3666]104!       DO it=1, nbtr
[3125]105!     WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it))
106! seulement pour les especes chimiques (pas l'age de l'air)
107! verif valeurs extremes
108! correction: a 1.e-30 quand =0 ou negatif et
109! call abort si >ou= 1.e10
[3666]110!          WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr
111!          IF (it < nqtot) THEN
112!             WRITE(*,*)'iciap',it,nqtot
113!             CALL minmaxqfi_chimie(it,tr_seri(1,1,it),0.,1.e10,'apres chemmain')
114!             WRITE(*,*)iter,'appres'
115!          ENDIF
116!       ENDDO
[3125]117
[1565]118#endif       
119       
120    END DO
121   
122
123    !
124    DO it=1,nbtr
125       WRITE(solsym(it),'(i2)') it
126    END DO
[1568]127#endif
[1565]128  END SUBROUTINE tracreprobus
129
130END MODULE tracreprobus_mod
Note: See TracBrowser for help on using the repository browser.