1 | MODULE tracreprobus_mod |
---|
2 | ! |
---|
3 | ! This module prepares and calls the Reprobus main subroutine |
---|
4 | ! |
---|
5 | |
---|
6 | CONTAINS |
---|
7 | |
---|
8 | SUBROUTINE tracreprobus(pdtphys, gmtime, debutphy, julien, & |
---|
9 | presnivs, xlat, xlon, pphis, pphi, & |
---|
10 | t_seri, pplay, paprs, sh , & |
---|
11 | tr_seri) |
---|
12 | |
---|
13 | USE dimphy |
---|
14 | USE infotrac_phy, ONLY: nbtr |
---|
15 | USE lmdz_reprobus_wrappers, ONLY : pdt_rep, & ! pas de temps reprobus |
---|
16 | daynum, iter, & ! jourjulien, iteration chimie |
---|
17 | pdel,& |
---|
18 | d_q_rep,d_ql_rep,d_qi_rep, chemmain_rlong_1401 |
---|
19 | USE lmdz_cppkeys_wrapper, ONLY: CPPKEY_REPROBUS |
---|
20 | IMPLICIT NONE |
---|
21 | |
---|
22 | ! Input argument |
---|
23 | !--------------- |
---|
24 | REAL,INTENT(IN) :: pdtphys ! Pas d'integration pour la physique (seconde) |
---|
25 | REAL,INTENT(IN) :: gmtime ! Heure courante |
---|
26 | LOGICAL,INTENT(IN) :: debutphy ! le flag de l'initialisation de la physique |
---|
27 | INTEGER,INTENT(IN) :: julien ! Jour julien |
---|
28 | |
---|
29 | REAL,DIMENSION(klev),INTENT(IN) :: presnivs! pressions approximat. des milieux couches (en PA) |
---|
30 | REAL,DIMENSION(klon),INTENT(IN) :: xlat ! latitudes pour chaque point |
---|
31 | REAL,DIMENSION(klon),INTENT(IN) :: xlon ! longitudes pour chaque point |
---|
32 | REAL,DIMENSION(klon),INTENT(IN) :: pphis ! geopotentiel du sol |
---|
33 | REAL,DIMENSION(klon,klev),INTENT(IN) :: pphi ! geopotentiel de chaque couche |
---|
34 | |
---|
35 | REAL,DIMENSION(klon,klev),INTENT(IN) :: t_seri ! Temperature |
---|
36 | REAL,DIMENSION(klon,klev),INTENT(IN) :: pplay ! pression pour le mileu de chaque couche (en Pa) |
---|
37 | REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs ! pression pour chaque inter-couche (en Pa) |
---|
38 | REAL,DIMENSION(klon,klev),INTENT(IN) :: sh ! humidite specifique |
---|
39 | |
---|
40 | |
---|
41 | ! Output argument |
---|
42 | !---------------- |
---|
43 | REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA] |
---|
44 | |
---|
45 | |
---|
46 | ! Local variables |
---|
47 | !---------------- |
---|
48 | INTEGER :: it, k, niter |
---|
49 | |
---|
50 | IF (CPPKEY_REPROBUS) THEN |
---|
51 | ! -- CHIMIE REPROBUS -- |
---|
52 | ! pdt_rep=pdtphys/2. |
---|
53 | niter=pdtphys/pdt_rep |
---|
54 | write(*,*)'nb d appel de REPROBUS',niter |
---|
55 | |
---|
56 | DO k = 1, klev |
---|
57 | pdel(:,k) = paprs(:,k) - paprs (:,k+1) |
---|
58 | END DO |
---|
59 | |
---|
60 | ! initialisation de ozone passif a ozone en debut d hiver HN et HS |
---|
61 | IF (julien == 341 .OR. julien == 181) THEN |
---|
62 | tr_seri(:,:,11)=tr_seri(:,:,8) |
---|
63 | END IF |
---|
64 | |
---|
65 | d_q_rep(:,:) =0. |
---|
66 | d_ql_rep(:,:) =0. |
---|
67 | d_qi_rep(:,:) =0. |
---|
68 | |
---|
69 | DO iter = 1,niter |
---|
70 | daynum = FLOAT(julien) + gmtime + (iter-1)*pdt_rep/86400. |
---|
71 | |
---|
72 | ! DO it=1, nbtr |
---|
73 | ! WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it)) |
---|
74 | ! seulement pour les especes chimiques (pas l'age de l'air) |
---|
75 | ! verif valeurs extremes |
---|
76 | ! correction: a 1.e-30 quand =0 ou negatif et |
---|
77 | ! call abort si >ou= 1.e10 |
---|
78 | ! WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr |
---|
79 | ! IF (it < nqtot) THEN |
---|
80 | ! WRITE(*,*)'iciav',it,nqtot |
---|
81 | !#ifdef REPROBUS |
---|
82 | ! CALL minmaxqfi_chimie(it,tr_seri(1,1,it),0.,1.e10,'avant chimie ') |
---|
83 | !#endif |
---|
84 | ! WRITE(*,*)iter,'avpres' |
---|
85 | ! ENDIF |
---|
86 | ! ENDDO |
---|
87 | |
---|
88 | IF (CPPKEY_REPROBUS) THEN |
---|
89 | CALL chemmain_rlong_1401( & |
---|
90 | tr_seri, & !argument phytrac (change de nom apres: vmr) |
---|
91 | xlon, & !argument phytrac (change de nom apres: lon) |
---|
92 | xlat, & !argument phytrac (change de nom apres: lat) |
---|
93 | t_seri, & !argument phytrac (meme nom) |
---|
94 | pplay, & !argument phytrac (meme nom) |
---|
95 | paprs, & |
---|
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 |
---|
103 | |
---|
104 | ! DO it=1, nbtr |
---|
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 |
---|
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 |
---|
117 | |
---|
118 | END IF |
---|
119 | |
---|
120 | END DO |
---|
121 | END IF |
---|
122 | END SUBROUTINE tracreprobus |
---|
123 | |
---|
124 | END MODULE tracreprobus_mod |
---|