GCC Code Coverage Report | |||||||||||||||||||||
|
|||||||||||||||||||||
Line | Branch | Exec | Source |
1 |
!$Id: phytrac_mod.F90 4590 2023-06-29 01:03:15Z fhourdin $ |
||
2 |
MODULE phytrac_mod |
||
3 |
!================================================================================= |
||
4 |
! Interface between the LMDZ physical package and tracer computation. |
||
5 |
! Chemistry modules (INCA, Reprobus or the more specific traclmdz routine) |
||
6 |
! are called from phytrac. |
||
7 |
! |
||
8 |
!====================================================================== |
||
9 |
! Auteur(s) FH |
||
10 |
! Objet: Moniteur general des tendances traceurs |
||
11 |
! |
||
12 |
! iflag_vdf_trac : Options for activating transport by vertical diffusion : |
||
13 |
! 1. notmal |
||
14 |
! 0. emission is injected in the first layer only, without diffusion |
||
15 |
! -1 no emission & no diffusion |
||
16 |
! Modification 2013/07/22 : transformed into a module to pass tendencies to |
||
17 |
! physics outputs. Additional keys for controling activation of sub processes. |
||
18 |
! Modification R. Pilon 10 octobre 2012 large scale scavenging incloud_scav + bc_scav |
||
19 |
! Modification R. Pilon 01 janvier 2012 transport+scavenging KE scheme : cvltr |
||
20 |
!================================================================================= |
||
21 |
|||
22 |
! |
||
23 |
! Tracer tendencies, for outputs |
||
24 |
!------------------------------- |
||
25 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cl ! Td couche limite/traceur |
||
26 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_dec !RomP |
||
27 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cv ! Td convection/traceur |
||
28 |
! RomP >>> |
||
29 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_insc |
||
30 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_bcscav |
||
31 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_evapls |
||
32 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_ls |
||
33 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_trsp |
||
34 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sscav |
||
35 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sat |
||
36 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_uscav |
||
37 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qPr,qDi ! concentration tra dans pluie,air descente insaturee |
||
38 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qPa,qMel |
||
39 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qTrdi,dtrcvMA ! conc traceur descente air insaturee et td convective MA |
||
40 |
! RomP <<< |
||
41 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_th ! Td thermique |
||
42 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_impa ! Td du lessivage par impaction |
||
43 |
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_nucl ! Td du lessivage par nucleation |
||
44 |
REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: qPrls !jyg: concentration tra dans pluie LS a la surf. |
||
45 |
REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: d_tr_dry ! Td depot sec/traceur (1st layer),ALLOCATABLE,SAVE jyg |
||
46 |
REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: flux_tr_dry ! depot sec/traceur (surface),ALLOCATABLE,SAVE jyg |
||
47 |
|||
48 |
!$OMP THREADPRIVATE(qPa,qMel,qTrdi,dtrcvMA,d_tr_th,d_tr_lessi_impa,d_tr_lessi_nucl) |
||
49 |
!$OMP THREADPRIVATE(d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qPr,qDi) |
||
50 |
!$OMP THREADPRIVATE(d_tr_insc,d_tr_bcscav,d_tr_evapls,d_tr_ls,qPrls) |
||
51 |
!$OMP THREADPRIVATE(d_tr_cl,d_tr_dry,flux_tr_dry,d_tr_dec,d_tr_cv) |
||
52 |
|||
53 |
CONTAINS |
||
54 |
|||
55 |
22330082 |
SUBROUTINE phytrac_init() |
|
56 |
|||
57 |
USE dimphy |
||
58 |
USE infotrac_phy, ONLY: nbtr, type_trac |
||
59 |
USE tracco2i_mod, ONLY: tracco2i_init |
||
60 |
|||
61 |
IMPLICIT NONE |
||
62 |
|||
63 |
✓✗✓✗ ✓✗✓✗ ✗✓✗✓ ✗✓✓✗ ✓✗✗✓ ✗✓✗✓ |
4 |
ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr)) |
64 |
✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
6 |
ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr)) |
65 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr)) |
66 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr)) |
67 |
✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
4 |
ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr)) |
68 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr)) |
69 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
7 |
ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr)) |
70 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr)) |
71 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr)) |
72 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
3 |
ALLOCATE(d_tr_th(klon,klev,nbtr)) |
73 |
✓✗✓✗ ✓✗✗✓ ✗✓✗✓ ✓✗✓✗ ✓✗✗✓ ✗✓✗✓ |
5 |
ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr)) |
74 |
|||
75 |
!=============================================================================== |
||
76 |
! -- Do specific treatment according to chemestry model or local LMDZ tracers |
||
77 |
! |
||
78 |
!=============================================================================== |
||
79 |
! -- CO2 interactif -- |
||
80 |
✓✓✓✗ ✗✓ |
3 |
IF (ANY(type_trac == ['co2i','inco'])) CALL tracco2i_init() |
81 |
|||
82 |
! -- type_trac == 'co2i' ! PC |
||
83 |
! -- CO2 interactif -- |
||
84 |
! -- source is updated with FF and BB emissions |
||
85 |
! -- and net fluxes from ocean and orchidee |
||
86 |
! -- sign convention : positive into the atmosphere |
||
87 |
|||
88 |
1 |
END SUBROUTINE phytrac_init |
|
89 |
|||
90 |
288 |
SUBROUTINE phytrac( & |
|
91 |
nstep, julien, gmtime, debutphy, & |
||
92 |
288 |
lafin, pdtphys, u, v, t_seri, & |
|
93 |
288 |
paprs, pplay, pmfu, pmfd, & |
|
94 |
pen_u, pde_u, pen_d, pde_d, & |
||
95 |
✗✓ | 288 |
cdragh, coefh, fm_therm, entr_therm, & |
96 |
✗✓✗✓ |
288 |
yu1, yv1, ftsol, pctsrf, & |
97 |
✗✓✗✓ |
576 |
ustar, u10m, v10m, & |
98 |
✗✓✗✓ ✗✓✗✓ |
288 |
wstar, ale_bl, ale_wake, & |
99 |
288 |
xlat, xlon, & |
|
100 |
frac_impa,frac_nucl,beta_fisrt,beta_v1, & |
||
101 |
presnivs, pphis, pphi, albsol, & |
||
102 |
sh, ch, rh, cldfra, rneb, & |
||
103 |
diafra, cldliq, itop_con, ibas_con, & |
||
104 |
pmflxr, pmflxs, prfl, psfl, & |
||
105 |
da, phi, mp, upwd, & |
||
106 |
phi2, d1a, dam, sij, wght_cvfd, & ! RomP +RL |
||
107 |
wdtrainA, wdtrainM, sigd, clw, elij, & ! RomP |
||
108 |
evap, ep, epmlmMm, eplaMm, & ! RomP |
||
109 |
dnwd, aerosol_couple, flxmass_w, & |
||
110 |
tau_aero, piz_aero, cg_aero, ccm, & |
||
111 |
rfname, & |
||
112 |
d_tr_dyn, & ! RomP |
||
113 |
✗✓ | 288 |
tr_seri, init_source) |
114 |
! |
||
115 |
!====================================================================== |
||
116 |
! Auteur(s) FH |
||
117 |
! Objet: Moniteur general des tendances traceurs |
||
118 |
! Modification R. Pilon 01 janvier 2012 transport+scavenging KE scheme : cvltr |
||
119 |
! Modification R. Pilon 10 octobre 2012 large scale scavenging incloud_scav + bc_scav |
||
120 |
!====================================================================== |
||
121 |
|||
122 |
USE ioipsl |
||
123 |
USE phys_cal_mod, only : hour |
||
124 |
USE dimphy |
||
125 |
USE infotrac_phy, ONLY: nbtr, nqCO2, type_trac, conv_flg, pbl_flg |
||
126 |
USE strings_mod, ONLY: int2str |
||
127 |
USE mod_grid_phy_lmdz |
||
128 |
USE mod_phys_lmdz_para |
||
129 |
USE iophy |
||
130 |
USE traclmdz_mod |
||
131 |
USE tracinca_mod |
||
132 |
USE tracreprobus_mod |
||
133 |
USE indice_sol_mod |
||
134 |
USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root |
||
135 |
USE print_control_mod, ONLY: lunout |
||
136 |
USE aero_mod, ONLY : naero_grp |
||
137 |
USE lmdz_thermcell_dq, ONLY : thermcell_dq |
||
138 |
|||
139 |
USE tracco2i_mod |
||
140 |
|||
141 |
#ifdef CPP_StratAer |
||
142 |
USE traccoag_mod |
||
143 |
USE phys_local_var_mod, ONLY: mdw |
||
144 |
USE phys_local_var_mod, ONLY: budg_dep_dry_ocs, budg_dep_wet_ocs |
||
145 |
USE phys_local_var_mod, ONLY: budg_dep_dry_so2, budg_dep_wet_so2 |
||
146 |
USE phys_local_var_mod, ONLY: budg_dep_dry_h2so4, budg_dep_wet_h2so4 |
||
147 |
USE phys_local_var_mod, ONLY: budg_dep_dry_part, budg_dep_wet_part |
||
148 |
USE infotrac_phy, ONLY: nbtr_sulgas, id_OCS_strat, id_SO2_strat, id_H2SO4_strat |
||
149 |
USE aerophys |
||
150 |
#endif |
||
151 |
|||
152 |
IMPLICIT NONE |
||
153 |
|||
154 |
INCLUDE "YOMCST.h" |
||
155 |
INCLUDE "clesphys.h" |
||
156 |
!========================================================================== |
||
157 |
! -- ARGUMENT DESCRIPTION -- |
||
158 |
!========================================================================== |
||
159 |
|||
160 |
! Input arguments |
||
161 |
!---------------- |
||
162 |
!Configuration grille,temps: |
||
163 |
INTEGER,INTENT(IN) :: nstep ! Appel physique |
||
164 |
INTEGER,INTENT(IN) :: julien ! Jour julien |
||
165 |
REAL,INTENT(IN) :: gmtime ! Heure courante |
||
166 |
REAL,INTENT(IN) :: pdtphys ! Pas d'integration pour la physique (seconde) |
||
167 |
LOGICAL,INTENT(IN) :: debutphy ! le flag de l'initialisation de la physique |
||
168 |
LOGICAL,INTENT(IN) :: lafin ! le flag de la fin de la physique |
||
169 |
|||
170 |
REAL,DIMENSION(klon),INTENT(IN) :: xlat ! latitudes pour chaque point |
||
171 |
REAL,DIMENSION(klon),INTENT(IN) :: xlon ! longitudes pour chaque point |
||
172 |
! |
||
173 |
!Physique: |
||
174 |
!-------- |
||
175 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: t_seri ! Temperature |
||
176 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: u ! variable not used |
||
177 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: v ! variable not used |
||
178 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: sh ! humidite specifique |
||
179 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: rh ! humidite relative |
||
180 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: ch ! eau liquide (+ glace si le traceur existe) |
||
181 |
REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs ! pression pour chaque inter-couche (en Pa) |
||
182 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pplay ! pression pour le mileu de chaque couche (en Pa) |
||
183 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pphi ! geopotentiel |
||
184 |
REAL,DIMENSION(klon),INTENT(IN) :: pphis |
||
185 |
REAL,DIMENSION(klev),INTENT(IN) :: presnivs |
||
186 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: cldliq ! eau condensee totale |
||
187 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: cldfra ! fraction nuageuse (tous les nuages) |
||
188 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: diafra ! fraction nuageuse (convection ou stratus artificiels) |
||
189 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: rneb ! fraction nuageuse (grande echelle) |
||
190 |
! |
||
191 |
REAL :: ql_incl ! contenu en eau liquide nuageuse dans le nuage ! ql_incl=oliq/rneb |
||
192 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: beta_fisrt ! taux de conversion de l'eau cond (de fisrtilp) |
||
193 |
REAL,DIMENSION(klon,klev),INTENT(out) :: beta_v1 ! -- (originale version) |
||
194 |
|||
195 |
! |
||
196 |
INTEGER,DIMENSION(klon),INTENT(IN) :: itop_con |
||
197 |
INTEGER,DIMENSION(klon),INTENT(IN) :: ibas_con |
||
198 |
REAL,DIMENSION(klon),INTENT(IN) :: albsol ! albedo surface |
||
199 |
! |
||
200 |
!Dynamique |
||
201 |
!-------- |
||
202 |
REAL,DIMENSION(klon,klev,nbtr),INTENT(IN) :: d_tr_dyn |
||
203 |
! |
||
204 |
!Convection: |
||
205 |
!---------- |
||
206 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu ! flux de masse dans le panache montant |
||
207 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfd ! flux de masse dans le panache descendant |
||
208 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_u ! flux entraine dans le panache montant |
||
209 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_u ! flux detraine dans le panache montant |
||
210 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_d ! flux entraine dans le panache descendant |
||
211 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_d ! flux detraine dans le panache descendant |
||
212 |
|||
213 |
!...Tiedke |
||
214 |
REAL,DIMENSION(klon,klev+1),INTENT(IN) :: pmflxr, pmflxs ! Flux precipitant de pluie, neige aux interfaces [convection] |
||
215 |
REAL,DIMENSION(klon,klev+1),INTENT(IN) :: prfl, psfl ! Flux precipitant de pluie, neige aux interfaces [large-scale] |
||
216 |
|||
217 |
LOGICAL,INTENT(IN) :: aerosol_couple |
||
218 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: flxmass_w |
||
219 |
REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: tau_aero |
||
220 |
REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: piz_aero |
||
221 |
REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: cg_aero |
||
222 |
CHARACTER(len=4),DIMENSION(naero_grp),INTENT(IN) :: rfname |
||
223 |
REAL,DIMENSION(klon,klev,2),INTENT(IN) :: ccm |
||
224 |
!... K.Emanuel |
||
225 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: da |
||
226 |
REAL,DIMENSION(klon,klev,klev),INTENT(IN):: phi |
||
227 |
! RomP >>> |
||
228 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: d1a,dam |
||
229 |
REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2 |
||
230 |
! |
||
231 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: wdtrainA |
||
232 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: wdtrainM |
||
233 |
REAL,DIMENSION(klon),INTENT(IN) :: sigd |
||
234 |
! ---- RomP flux entraine, detraine et precipitant kerry Emanuel |
||
235 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: evap |
||
236 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: ep |
||
237 |
REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij |
||
238 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: wght_cvfd !RL |
||
239 |
REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij |
||
240 |
REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm |
||
241 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: eplaMm |
||
242 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: clw |
||
243 |
! RomP <<< |
||
244 |
! |
||
245 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: mp |
||
246 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: upwd ! saturated updraft mass flux |
||
247 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: dnwd ! saturated downdraft mass flux |
||
248 |
! |
||
249 |
!Thermiques: |
||
250 |
!---------- |
||
251 |
REAL,DIMENSION(klon,klev+1),INTENT(IN) :: fm_therm |
||
252 |
REAL,DIMENSION(klon,klev),INTENT(INOUT) :: entr_therm |
||
253 |
! |
||
254 |
!Couche limite: |
||
255 |
!-------------- |
||
256 |
! |
||
257 |
REAL,DIMENSION(:),INTENT(IN) :: cdragh ! (klon) coeff drag pour T et Q |
||
258 |
REAL,DIMENSION(:,:),INTENT(IN) :: coefh ! (klon,klev) coeff melange CL (m**2/s) |
||
259 |
REAL,DIMENSION(:),INTENT(IN) :: ustar,u10m,v10m ! (klon) u* & vent a 10m (m/s) |
||
260 |
REAL,DIMENSION(:),INTENT(IN) :: wstar,ale_bl,ale_wake ! (klon) w* and Avail. Lifting Ener. |
||
261 |
REAL,DIMENSION(:),INTENT(IN) :: yu1 ! (klon) vents au premier niveau |
||
262 |
REAL,DIMENSION(:),INTENT(IN) :: yv1 ! (klon) vents au premier niveau |
||
263 |
! |
||
264 |
!Lessivage: |
||
265 |
!---------- |
||
266 |
! |
||
267 |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ccntrAA |
||
268 |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ccntrENV |
||
269 |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: coefcoli |
||
270 |
LOGICAL, DIMENSION(:), ALLOCATABLE, SAVE :: flag_cvltr |
||
271 |
!$OMP THREADPRIVATE(ccntrAA,ccntrENV,coefcoli,flag_cvltr) |
||
272 |
576 |
REAL, DIMENSION(klon,klev) :: ccntrAA_3d |
|
273 |
576 |
REAL, DIMENSION(klon,klev) :: ccntrENV_3d |
|
274 |
576 |
REAL, DIMENSION(klon,klev) :: coefcoli_3d |
|
275 |
! |
||
276 |
! pour le ON-LINE |
||
277 |
! |
||
278 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_impa ! fraction d'aerosols non impactes |
||
279 |
REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_nucl ! fraction d'aerosols non nuclees |
||
280 |
|||
281 |
! Arguments necessaires pour les sources et puits de traceur: |
||
282 |
REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol ! Temperature du sol (surf)(Kelvin) |
||
283 |
REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf ! Pourcentage de sol (nature du sol) |
||
284 |
|||
285 |
#ifdef CPP_StratAer |
||
286 |
REAL,DIMENSION(klon) :: v_dep_dry !dry deposition velocity of stratospheric sulfate in m/s |
||
287 |
#endif |
||
288 |
! Output argument |
||
289 |
!---------------- |
||
290 |
REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA] |
||
291 |
576 |
REAL,DIMENSION(klon,klev) :: sourceBE |
|
292 |
REAL,DIMENSION(klon,nbtr), INTENT(IN) :: init_source |
||
293 |
|||
294 |
!======================================================================================= |
||
295 |
! -- LOCAL VARIABLES -- |
||
296 |
!======================================================================================= |
||
297 |
|||
298 |
INTEGER :: i, k, it |
||
299 |
INTEGER :: nsplit |
||
300 |
|||
301 |
!Sources et Reservoirs de traceurs (ex:Radon): |
||
302 |
!-------------------------------------------- |
||
303 |
! |
||
304 |
REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: source ! a voir lorsque le flux de surface est prescrit |
||
305 |
!$OMP THREADPRIVATE(source) |
||
306 |
|||
307 |
! |
||
308 |
!Entrees/Sorties: |
||
309 |
!--------------- |
||
310 |
INTEGER :: iiq, ierr |
||
311 |
INTEGER :: nhori, nvert |
||
312 |
REAL :: zsto, zout, zjulian |
||
313 |
INTEGER,SAVE :: nid_tra ! pointe vers le fichier histrac.nc |
||
314 |
!$OMP THREADPRIVATE(nid_tra) |
||
315 |
REAL,DIMENSION(klon) :: zx_tmp_fi2d ! variable temporaire grille physique |
||
316 |
INTEGER :: itau_w ! pas de temps ecriture = nstep + itau_phy |
||
317 |
LOGICAL,PARAMETER :: ok_sync=.TRUE. |
||
318 |
! |
||
319 |
! Nature du traceur |
||
320 |
!------------------ |
||
321 |
LOGICAL,DIMENSION(:),ALLOCATABLE,SAVE :: aerosol ! aerosol(it) = true => aerosol => lessivage |
||
322 |
!$OMP THREADPRIVATE(aerosol) ! aerosol(it) = false => gaz |
||
323 |
576 |
REAL,DIMENSION(klon,klev) :: delp ! epaisseur de couche (Pa) |
|
324 |
! |
||
325 |
! Tendances de traceurs (Td) et flux de traceurs: |
||
326 |
!------------------------ |
||
327 |
REAL,DIMENSION(klon,klev) :: d_tr ! Td dans l'atmosphere |
||
328 |
576 |
REAL,DIMENSION(klon,klev) :: Mint |
|
329 |
576 |
REAL,DIMENSION(klon,klev,nbtr) :: zmfd1a |
|
330 |
576 |
REAL,DIMENSION(klon,klev,nbtr) :: zmfdam |
|
331 |
576 |
REAL,DIMENSION(klon,klev,nbtr) :: zmfphi2 |
|
332 |
! Physique |
||
333 |
!---------- |
||
334 |
576 |
REAL,DIMENSION(klon,klev,nbtr) :: flestottr ! flux de lessivage dans chaque couche |
|
335 |
576 |
REAL,DIMENSION(klon,klev) :: zmasse ! densite atmospherique Kg/m2 |
|
336 |
576 |
REAL,DIMENSION(klon,klev) :: ztra_th |
|
337 |
!PhH |
||
338 |
576 |
REAL,DIMENSION(klon,klev) :: zrho |
|
339 |
576 |
REAL,DIMENSION(klon,klev) :: zdz |
|
340 |
REAL :: evaplsc,dx,beta ! variable pour lessivage Genthon |
||
341 |
288 |
REAL,DIMENSION(klon) :: his_dh ! --- |
|
342 |
! in-cloud scav variables |
||
343 |
REAL :: ql_incloud_ref ! ref value of in-cloud condensed water content |
||
344 |
|||
345 |
!Controles: |
||
346 |
!--------- |
||
347 |
INTEGER,SAVE :: iflag_vdf_trac,iflag_con_trac,iflag_the_trac |
||
348 |
INTEGER,SAVE :: iflag_con_trac_omp, iflag_vdf_trac_omp,iflag_the_trac_omp |
||
349 |
!$OMP THREADPRIVATE(iflag_vdf_trac,iflag_con_trac,iflag_the_trac) |
||
350 |
|||
351 |
LOGICAL,SAVE :: lessivage |
||
352 |
!$OMP THREADPRIVATE(lessivage) |
||
353 |
|||
354 |
!RomP >>> |
||
355 |
INTEGER,SAVE :: iflag_lscav_omp,iflag_lscav |
||
356 |
REAL, SAVE :: ccntrAA_in,ccntrAA_omp |
||
357 |
REAL, SAVE :: ccntrENV_in,ccntrENV_omp |
||
358 |
REAL, SAVE :: coefcoli_in,coefcoli_omp |
||
359 |
|||
360 |
LOGICAL,SAVE :: convscav_omp,convscav |
||
361 |
!$OMP THREADPRIVATE(iflag_lscav) |
||
362 |
!$OMP THREADPRIVATE(ccntrAA_in,ccntrENV_in,coefcoli_in) |
||
363 |
!$OMP THREADPRIVATE(convscav) |
||
364 |
!RomP <<< |
||
365 |
!###################################################################### |
||
366 |
! -- INITIALIZATION -- |
||
367 |
!###################################################################### |
||
368 |
|||
369 |
✓✓ | 11520 |
DO k=1,klev |
370 |
✓✓ | 11176128 |
DO i=1,klon |
371 |
11164608 |
sourceBE(i,k)=0. |
|
372 |
11164608 |
Mint(i,k)=0. |
|
373 |
11164608 |
zrho(i,k)=0. |
|
374 |
11175840 |
zdz(i,k)=0. |
|
375 |
ENDDO |
||
376 |
ENDDO |
||
377 |
|||
378 |
✓✓ | 864 |
DO it=1, nbtr |
379 |
✓✓ | 23328 |
DO k=1,klev |
380 |
✓✓ | 22352256 |
DO i=1,klon |
381 |
22329216 |
d_tr_insc(i,k,it)=0. |
|
382 |
22329216 |
d_tr_bcscav(i,k,it)=0. |
|
383 |
22329216 |
d_tr_evapls(i,k,it)=0. |
|
384 |
22329216 |
d_tr_ls(i,k,it)=0. |
|
385 |
22329216 |
d_tr_cv(i,k,it)=0. |
|
386 |
22329216 |
d_tr_cl(i,k,it)=0. |
|
387 |
22329216 |
d_tr_trsp(i,k,it)=0. |
|
388 |
22329216 |
d_tr_sscav(i,k,it)=0. |
|
389 |
22329216 |
d_tr_sat(i,k,it)=0. |
|
390 |
22329216 |
d_tr_uscav(i,k,it)=0. |
|
391 |
22329216 |
d_tr_lessi_impa(i,k,it)=0. |
|
392 |
22329216 |
d_tr_lessi_nucl(i,k,it)=0. |
|
393 |
22329216 |
qDi(i,k,it)=0. |
|
394 |
22329216 |
qPr(i,k,it)=0. |
|
395 |
22329216 |
qPa(i,k,it)=0. |
|
396 |
22329216 |
qMel(i,k,it)=0. |
|
397 |
22329216 |
qTrdi(i,k,it)=0. |
|
398 |
22329216 |
dtrcvMA(i,k,it)=0. |
|
399 |
22329216 |
zmfd1a(i,k,it)=0. |
|
400 |
22329216 |
zmfdam(i,k,it)=0. |
|
401 |
22351680 |
zmfphi2(i,k,it)=0. |
|
402 |
ENDDO |
||
403 |
ENDDO |
||
404 |
ENDDO |
||
405 |
|||
406 |
✓✓ | 864 |
DO it=1, nbtr |
407 |
✓✓ | 573408 |
DO i=1,klon |
408 |
572544 |
d_tr_dry(i,it)=0. |
|
409 |
573120 |
flux_tr_dry(i,it)=0. |
|
410 |
ENDDO |
||
411 |
ENDDO |
||
412 |
|||
413 |
✓✓ | 11520 |
DO k = 1, klev |
414 |
✓✓ | 11176128 |
DO i = 1, klon |
415 |
11175840 |
delp(i,k) = paprs(i,k)-paprs(i,k+1) |
|
416 |
ENDDO |
||
417 |
ENDDO |
||
418 |
|||
419 |
✓✓ | 288 |
IF (debutphy) THEN |
420 |
!!jyg |
||
421 |
!$OMP BARRIER |
||
422 |
1 |
ecrit_tra=86400. ! frequence de stokage en dur |
|
423 |
! obsolete car remplace par des ecritures dans phys_output_write |
||
424 |
!RomP >>> |
||
425 |
! |
||
426 |
!Config Key = convscav |
||
427 |
!Config Desc = Convective scavenging switch: 0=off, 1=on. |
||
428 |
!Config Def = .FALSE. |
||
429 |
!Config Help = |
||
430 |
! |
||
431 |
!$OMP MASTER |
||
432 |
1 |
convscav_omp=.FALSE. |
|
433 |
1 |
call getin('convscav', convscav_omp) |
|
434 |
1 |
iflag_vdf_trac_omp=1 |
|
435 |
1 |
call getin('iflag_vdf_trac', iflag_vdf_trac_omp) |
|
436 |
1 |
iflag_con_trac_omp=1 |
|
437 |
1 |
call getin('iflag_con_trac', iflag_con_trac_omp) |
|
438 |
1 |
iflag_the_trac_omp=1 |
|
439 |
1 |
call getin('iflag_the_trac', iflag_the_trac_omp) |
|
440 |
!$OMP END MASTER |
||
441 |
!$OMP BARRIER |
||
442 |
1 |
convscav=convscav_omp |
|
443 |
1 |
iflag_vdf_trac=iflag_vdf_trac_omp |
|
444 |
1 |
iflag_con_trac=iflag_con_trac_omp |
|
445 |
1 |
iflag_the_trac=iflag_the_trac_omp |
|
446 |
1 |
write(lunout,*) 'phytrac passage dans routine conv avec lessivage', convscav |
|
447 |
! |
||
448 |
!Config Key = iflag_lscav |
||
449 |
!Config Desc = Large scale scavenging parametrization: 0=none, 1=old(Genthon92), |
||
450 |
! 2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon. |
||
451 |
!Config Def = 1 |
||
452 |
!Config Help = |
||
453 |
! |
||
454 |
!$OMP MASTER |
||
455 |
1 |
iflag_lscav_omp=1 |
|
456 |
1 |
call getin('iflag_lscav', iflag_lscav_omp) |
|
457 |
1 |
ccntrAA_omp=1 |
|
458 |
1 |
ccntrENV_omp=1. |
|
459 |
1 |
coefcoli_omp=0.001 |
|
460 |
1 |
call getin('ccntrAA', ccntrAA_omp) |
|
461 |
1 |
call getin('ccntrENV', ccntrENV_omp) |
|
462 |
1 |
call getin('coefcoli', coefcoli_omp) |
|
463 |
!$OMP END MASTER |
||
464 |
!$OMP BARRIER |
||
465 |
1 |
iflag_lscav=iflag_lscav_omp |
|
466 |
1 |
ccntrAA_in=ccntrAA_omp |
|
467 |
1 |
ccntrENV_in=ccntrENV_omp |
|
468 |
1 |
coefcoli_in=coefcoli_omp |
|
469 |
! |
||
470 |
SELECT CASE(iflag_lscav) |
||
471 |
CASE(0) |
||
472 |
WRITE(lunout,*) 'Large scale scavenging: none' |
||
473 |
CASE(1) |
||
474 |
1 |
WRITE(lunout,*) 'Large scale scavenging: C. Genthon, Tellus(1992), 44B, 371-389' |
|
475 |
CASE(2) |
||
476 |
WRITE(lunout,*) 'Large scale scavenging: C. Genthon, modified P. Heinrich' |
||
477 |
CASE(3) |
||
478 |
WRITE(lunout,*) 'Large scale scavenging: M. Shekkar Reddy and O. Boucher, JGR(2004), 109, D14202' |
||
479 |
CASE(4) |
||
480 |
✗✓✗✗ ✗✗ |
1 |
WRITE(lunout,*) 'Large scale scavenging: Reddy and Boucher, modified R. Pilon' |
481 |
END SELECT |
||
482 |
!RomP <<< |
||
483 |
1 |
WRITE(*,*) 'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',pdtphys,'ecrit_tra (sec) = ',ecrit_tra |
|
484 |
✓✗✓✗ ✓✗✓✗ ✗✓✓✗ |
2 |
ALLOCATE( source(klon,nbtr), stat=ierr) |
485 |
✗✓ | 1 |
IF (ierr /= 0) CALL abort_physic('phytrac', 'pb in allocation 1',1) |
486 |
|||
487 |
✓✗✓✗ ✗✓✓✗ |
1 |
ALLOCATE( aerosol(nbtr), stat=ierr) |
488 |
✗✓ | 1 |
IF (ierr /= 0) CALL abort_physic('phytrac', 'pb in allocation 2',1) |
489 |
|||
490 |
|||
491 |
! Initialize module for specific tracers |
||
492 |
✗✓ | 1 |
IF (type_trac == 'inca') THEN |
493 |
source(:,:)=init_source(:,:) |
||
494 |
CALL tracinca_init(aerosol,lessivage) |
||
495 |
✗✓ | 1 |
ELSE IF (type_trac == 'repr') THEN |
496 |
source(:,:)=0. |
||
497 |
✗✓ | 1 |
ELSE IF (type_trac == 'co2i') THEN |
498 |
source(:,:)=0. |
||
499 |
lessivage = .FALSE. |
||
500 |
aerosol(:) = .FALSE. |
||
501 |
pbl_flg(:) = 1 |
||
502 |
iflag_the_trac= 1 |
||
503 |
iflag_vdf_trac= 1 |
||
504 |
iflag_con_trac= 1 |
||
505 |
✗✓ | 1 |
ELSE IF (type_trac == 'inco') THEN |
506 |
source(:,1:nqCO2) = 0. ! from CO2i ModThL |
||
507 |
source(:,nqCO2+1:nbtr)=init_source(:,:) ! from INCA ModThL |
||
508 |
aerosol(1:nqCO2) = .FALSE. ! from CO2i ModThL |
||
509 |
CALL tracinca_init(aerosol(nqCO2+1:nbtr),lessivage) ! from INCA ModThL |
||
510 |
pbl_flg(1:nqCO2) = 1 ! From CO2i ModThL |
||
511 |
iflag_the_trac = 1 ! From CO2i |
||
512 |
iflag_vdf_trac = 1 ! From CO2i |
||
513 |
iflag_con_trac = 1 ! From CO2i |
||
514 |
#ifdef CPP_StratAer |
||
515 |
ELSE IF (type_trac == 'coag') THEN |
||
516 |
source(:,:)=0. |
||
517 |
DO it= 1, nbtr_sulgas |
||
518 |
aerosol(it)=.FALSE. |
||
519 |
IF (it==id_H2SO4_strat) aerosol(it)=.TRUE. |
||
520 |
ENDDO |
||
521 |
DO it= nbtr_sulgas+1, nbtr |
||
522 |
aerosol(it)=.TRUE. |
||
523 |
ENDDO |
||
524 |
#endif |
||
525 |
✓✗ | 1 |
ELSE IF (type_trac == 'lmdz') THEN |
526 |
1 |
CALL traclmdz_init(pctsrf,xlat,xlon,ftsol,tr_seri,t_seri,pplay,sh,pdtphys,aerosol,lessivage) |
|
527 |
ENDIF |
||
528 |
|||
529 |
! |
||
530 |
!--initialising coefficients for scavenging in the case of NP |
||
531 |
! |
||
532 |
✓✗✗✓ ✗✓ |
1 |
ALLOCATE(flag_cvltr(nbtr)) |
533 |
✓✗ | 1 |
IF (iflag_con.EQ.3) THEN |
534 |
! |
||
535 |
✓✗✗✓ ✗✓ |
1 |
ALLOCATE(ccntrAA(nbtr)) |
536 |
✗✓✗✓ |
1 |
ALLOCATE(ccntrENV(nbtr)) |
537 |
✗✓✗✓ |
1 |
ALLOCATE(coefcoli(nbtr)) |
538 |
! |
||
539 |
✓✓ | 3 |
DO it=1, nbtr |
540 |
✗✓ | 3 |
IF (type_trac == 'repr') THEN |
541 |
flag_cvltr(it)=.FALSE. |
||
542 |
✗✓ | 2 |
ELSE IF (type_trac == 'inca') THEN |
543 |
! IF ((it.EQ.id_Rn222) .OR. ((it.GE.id_SO2) .AND. (it.LE.id_NH3)) ) THEN |
||
544 |
! !--gas-phase species |
||
545 |
! flag_cvltr(it)=.FALSE. |
||
546 |
! |
||
547 |
! ELSEIF ( (it.GE.id_CIDUSTM) .AND. (it.LE.id_AIN) ) THEN |
||
548 |
! !--insoluble aerosol species |
||
549 |
! flag_cvltr(it)=.TRUE. |
||
550 |
! ccntrAA(it)=0.7 |
||
551 |
! ccntrENV(it)=0.7 |
||
552 |
! coefcoli(it)=0.001 |
||
553 |
! ELSEIF ( (it.EQ.id_Pb210) .OR. ((it.GE.id_CSSSM) .AND. (it.LE.id_SSN))) THEN |
||
554 |
! !--soluble aerosol species |
||
555 |
! flag_cvltr(it)=.TRUE. |
||
556 |
! ccntrAA(it)=0.9 |
||
557 |
! ccntrENV(it)=0.9 |
||
558 |
! coefcoli(it)=0.001 |
||
559 |
! ELSE |
||
560 |
! WRITE(lunout,*) 'pb it=', it |
||
561 |
! CALL abort_physic('phytrac','pb it scavenging',1) |
||
562 |
! ENDIF |
||
563 |
!--test OB |
||
564 |
!--for now we do not scavenge in cvltr |
||
565 |
flag_cvltr(it)=.FALSE. |
||
566 |
✗✓ | 2 |
ELSE IF (type_trac == 'co2i') THEN |
567 |
!--co2 tracers are not scavenged |
||
568 |
flag_cvltr(it)=.FALSE. |
||
569 |
✗✓ | 2 |
ELSE IF (type_trac == 'inco') THEN ! Add ThL |
570 |
flag_cvltr(it)=.FALSE. |
||
571 |
#ifdef CPP_StratAer |
||
572 |
ELSE IF (type_trac == 'coag') THEN |
||
573 |
IF (convscav.and.aerosol(it)) THEN |
||
574 |
flag_cvltr(it)=.TRUE. |
||
575 |
ccntrAA(it) =ccntrAA_in |
||
576 |
ccntrENV(it)=ccntrENV_in |
||
577 |
coefcoli(it)=coefcoli_in |
||
578 |
ELSE |
||
579 |
flag_cvltr(it)=.FALSE. |
||
580 |
ENDIF |
||
581 |
#endif |
||
582 |
✓✗ | 2 |
ELSE IF (type_trac == 'lmdz') THEN |
583 |
✗✓✗✗ |
2 |
IF (convscav.and.aerosol(it)) THEN |
584 |
flag_cvltr(it)=.TRUE. |
||
585 |
ccntrAA(it) =ccntrAA_in !--a modifier par JYG a lire depuis fichier |
||
586 |
ccntrENV(it)=ccntrENV_in |
||
587 |
coefcoli(it)=coefcoli_in |
||
588 |
ELSE |
||
589 |
2 |
flag_cvltr(it)=.FALSE. |
|
590 |
ENDIF |
||
591 |
ENDIF |
||
592 |
ENDDO |
||
593 |
! |
||
594 |
ELSE ! iflag_con .ne. 3 |
||
595 |
flag_cvltr(:) = .FALSE. |
||
596 |
ENDIF |
||
597 |
! |
||
598 |
! print out all tracer flags |
||
599 |
! |
||
600 |
1 |
WRITE(lunout,*) 'print out all tracer flags' |
|
601 |
1 |
WRITE(lunout,*) 'type_trac =', type_trac |
|
602 |
1 |
WRITE(lunout,*) 'config_inca =', config_inca |
|
603 |
1 |
WRITE(lunout,*) 'iflag_con_trac =', iflag_con_trac |
|
604 |
1 |
WRITE(lunout,*) 'iflag_con =', iflag_con |
|
605 |
1 |
WRITE(lunout,*) 'convscav =', convscav |
|
606 |
1 |
WRITE(lunout,*) 'iflag_lscav =', iflag_lscav |
|
607 |
1 |
WRITE(lunout,*) 'aerosol =', aerosol |
|
608 |
1 |
WRITE(lunout,*) 'iflag_the_trac =', iflag_the_trac |
|
609 |
1 |
WRITE(lunout,*) 'iflag_thermals =', iflag_thermals |
|
610 |
1 |
WRITE(lunout,*) 'iflag_vdf_trac =', iflag_vdf_trac |
|
611 |
1 |
WRITE(lunout,*) 'pbl_flg =', pbl_flg |
|
612 |
1 |
WRITE(lunout,*) 'lessivage =', lessivage |
|
613 |
1 |
write(lunout,*) 'flag_cvltr = ', flag_cvltr |
|
614 |
|||
615 |
✓✓✓✗ ✓✗✗✓ |
3 |
IF (lessivage .AND. ANY(type_trac == ['inca','inco'])) & |
616 |
CALL abort_physic('phytrac', 'lessivage=T config_inca=inca impossible',1) |
||
617 |
! |
||
618 |
ENDIF ! of IF (debutphy) |
||
619 |
!############################################ END INITIALIZATION ####### |
||
620 |
|||
621 |
✓✓ | 11520 |
DO k=1,klev |
622 |
✓✓ | 11176128 |
DO i=1,klon |
623 |
11175840 |
zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg |
|
624 |
ENDDO |
||
625 |
ENDDO |
||
626 |
! |
||
627 |
✗✓ | 288 |
IF (id_be .GT. 0) THEN |
628 |
DO k=1,klev |
||
629 |
DO i=1,klon |
||
630 |
sourceBE(i,k)=srcbe(i,k) !RomP -> pour sortie histrac |
||
631 |
ENDDO |
||
632 |
ENDDO |
||
633 |
ENDIF |
||
634 |
|||
635 |
!=============================================================================== |
||
636 |
! -- Do specific treatment according to chemestry model or local LMDZ tracers |
||
637 |
! |
||
638 |
!=============================================================================== |
||
639 |
✓✗ | 288 |
IF (type_trac == 'inca') THEN |
640 |
! -- CHIMIE INCA config_inca = aero or chem -- |
||
641 |
! Appel fait en fin de phytrac pour avoir les emissions modifiees par |
||
642 |
! la couche limite et la convection avant le calcul de la chimie |
||
643 |
|||
644 |
✗✓ | 288 |
ELSE IF (type_trac == 'repr') THEN |
645 |
! -- CHIMIE REPROBUS -- |
||
646 |
CALL tracreprobus(pdtphys, gmtime, debutphy, julien, & |
||
647 |
presnivs, xlat, xlon, pphis, pphi, & |
||
648 |
t_seri, pplay, paprs, sh , & |
||
649 |
tr_seri) |
||
650 |
|||
651 |
✗✓ | 288 |
ELSE IF (type_trac == 'co2i') THEN |
652 |
! -- CO2 interactif -- |
||
653 |
! -- source is updated with FF and BB emissions |
||
654 |
! -- and net fluxes from ocean and orchidee |
||
655 |
! -- sign convention : positive into the atmosphere |
||
656 |
|||
657 |
CALL tracco2i(pdtphys, debutphy, & |
||
658 |
xlat, xlon, pphis, pphi, & |
||
659 |
t_seri, pplay, paprs, tr_seri, source) |
||
660 |
✗✓ | 288 |
ELSE IF (type_trac == 'inco') THEN ! Add ThL |
661 |
CALL tracco2i(pdtphys, debutphy, & |
||
662 |
xlat, xlon, pphis, pphi, & |
||
663 |
t_seri, pplay, paprs, tr_seri, source) |
||
664 |
|||
665 |
#ifdef CPP_StratAer |
||
666 |
ELSE IF (type_trac == 'coag') THEN |
||
667 |
! --STRATOSPHERIC AER IN THE STRAT -- |
||
668 |
CALL traccoag(pdtphys, gmtime, debutphy, julien, & |
||
669 |
presnivs, xlat, xlon, pphis, pphi, & |
||
670 |
t_seri, pplay, paprs, sh, rh , & |
||
671 |
tr_seri) |
||
672 |
#endif |
||
673 |
✓✗ | 288 |
ELSE IF (type_trac == 'lmdz') THEN |
674 |
! -- Traitement des traceurs avec traclmdz |
||
675 |
CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, & |
||
676 |
cdragh, coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,iflag_vdf_trac>=0,sh, & |
||
677 |
rh, pphi, ustar, wstar, ale_bl, ale_wake, u10m, v10m, & |
||
678 |
✗✓✗✓ ✗✓✗✓ ✗✓✗✓ ✗✓✗✓ ✗✓✗✓ |
288 |
tr_seri, source, d_tr_cl,d_tr_dec, zmasse) !RomP |
679 |
ENDIF |
||
680 |
!====================================================================== |
||
681 |
! -- Calcul de l'effet de la convection -- |
||
682 |
!====================================================================== |
||
683 |
|||
684 |
✓✗ | 288 |
IF (iflag_con_trac==1) THEN |
685 |
|||
686 |
✓✓ | 864 |
DO it=1, nbtr |
687 |
✗✓ | 576 |
IF ( conv_flg(it) == 0 ) CYCLE |
688 |
✗✓ | 576 |
IF (iflag_con.LT.2) THEN |
689 |
!--pas de transport convectif |
||
690 |
d_tr_cv(:,:,it)=0. |
||
691 |
|||
692 |
✗✓ | 576 |
ELSE IF (iflag_con.EQ.2) THEN |
693 |
!--ancien transport convectif de Tiedtke |
||
694 |
|||
695 |
CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, & |
||
696 |
pplay, paprs, tr_seri(:,:,it), d_tr_cv(:,:,it)) |
||
697 |
ELSE |
||
698 |
!--nouveau transport convectif de Emanuel |
||
699 |
|||
700 |
✗✓ | 576 |
IF (flag_cvltr(it)) THEN |
701 |
!--nouveau transport convectif de Emanuel avec lessivage convectif |
||
702 |
! |
||
703 |
! |
||
704 |
ccntrAA_3d(:,:) =ccntrAA(it) |
||
705 |
ccntrENV_3d(:,:)=ccntrENV(it) |
||
706 |
coefcoli_3d(:,:)=coefcoli(it) |
||
707 |
|||
708 |
!--beware this interface is a bit weird because it is called for each tracer |
||
709 |
!--with the full array tr_seri even if only item it is processed |
||
710 |
|||
711 |
CALL cvltr_scav(pdtphys, da, phi,phi2,d1a,dam, mp,ep, & |
||
712 |
sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm, & |
||
713 |
pmflxr,pmflxs,evap,t_seri,wdtrainA,wdtrainM, & |
||
714 |
paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con, & |
||
715 |
ccntrAA_3d,ccntrENV_3d,coefcoli_3d, & |
||
716 |
d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,& |
||
717 |
qPa,qMel,qTrdi,dtrcvMA,Mint, & |
||
718 |
zmfd1a,zmfphi2,zmfdam) |
||
719 |
|||
720 |
|||
721 |
ELSE !---flag_cvltr(it).EQ.FALSE |
||
722 |
!--nouveau transport convectif de Emanuel mais pas de lessivage convectif |
||
723 |
|||
724 |
!--beware this interface is a bit weird because it is called for each tracer |
||
725 |
!--with the full array tr_seri even if only item it is processed |
||
726 |
! |
||
727 |
CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,pplay, & !jyg |
||
728 |
576 |
tr_seri,upwd,dnwd,d_tr_cv) !jyg |
|
729 |
|||
730 |
ENDIF |
||
731 |
|||
732 |
ENDIF !--iflag |
||
733 |
|||
734 |
!--on ajoute les tendances |
||
735 |
|||
736 |
✓✓ | 23040 |
DO k = 1, klev |
737 |
✓✓ | 22352256 |
DO i = 1, klon |
738 |
22351680 |
tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it) |
|
739 |
ENDDO |
||
740 |
ENDDO |
||
741 |
|||
742 |
✓✗ | 864 |
CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'convection it = '//TRIM(int2str(it))) |
743 |
|||
744 |
ENDDO ! nbtr |
||
745 |
|||
746 |
#ifdef CPP_StratAer |
||
747 |
IF (type_trac=='coag') THEN |
||
748 |
! initialize wet deposition flux of sulfur |
||
749 |
budg_dep_wet_ocs(:)=0.0 |
||
750 |
budg_dep_wet_so2(:)=0.0 |
||
751 |
budg_dep_wet_h2so4(:)=0.0 |
||
752 |
budg_dep_wet_part(:)=0.0 |
||
753 |
! compute wet deposition flux of sulfur (sum over gases and particles) |
||
754 |
! and convert to kg(S)/m2/s |
||
755 |
DO i = 1, klon |
||
756 |
DO k = 1, klev |
||
757 |
DO it = 1, nbtr |
||
758 |
!do not include SO2 because most of it comes trom the troposphere |
||
759 |
IF (it==id_OCS_strat) THEN |
||
760 |
budg_dep_wet_ocs(i)=budg_dep_wet_ocs(i)+d_tr_cv(i,k,it)*(mSatom/mOCSmol) & |
||
761 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
762 |
ELSEIF (it==id_SO2_strat) THEN |
||
763 |
budg_dep_wet_so2(i)=budg_dep_wet_so2(i)+d_tr_cv(i,k,it)*(mSatom/mSO2mol) & |
||
764 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
765 |
ELSEIF (it==id_H2SO4_strat) THEN |
||
766 |
budg_dep_wet_h2so4(i)=budg_dep_wet_h2so4(i)+d_tr_cv(i,k,it)*(mSatom/mH2SO4mol) & |
||
767 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
768 |
ELSEIF (it.GT.nbtr_sulgas) THEN |
||
769 |
budg_dep_wet_part(i)=budg_dep_wet_part(i)+d_tr_cv(i,k,it)*(mSatom/mH2SO4mol) & |
||
770 |
& *dens_aer_dry*4./3.*RPI*(mdw(it-nbtr_sulgas)/2.)**3 & |
||
771 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
772 |
ENDIF |
||
773 |
ENDDO |
||
774 |
ENDDO |
||
775 |
ENDDO |
||
776 |
ENDIF |
||
777 |
#endif |
||
778 |
|||
779 |
ENDIF ! convection |
||
780 |
|||
781 |
!====================================================================== |
||
782 |
! -- Calcul de l'effet des thermiques -- |
||
783 |
!====================================================================== |
||
784 |
|||
785 |
✓✓ | 864 |
DO it=1,nbtr |
786 |
✓✓ | 23328 |
DO k=1,klev |
787 |
✓✓ | 22352256 |
DO i=1,klon |
788 |
22329216 |
d_tr_th(i,k,it)=0. |
|
789 |
22351680 |
tr_seri(i,k,it)=MAX(tr_seri(i,k,it),0.) |
|
790 |
! the next safeguard causes some problem for stratospheric aerosol tracers (particle number) |
||
791 |
! and there is little justification for it so it is commented out (4 December 2017) by OB |
||
792 |
! if reinstated please keep the ifndef CPP_StratAer |
||
793 |
!#ifndef CPP_StratAer |
||
794 |
! tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10) |
||
795 |
!#endif |
||
796 |
ENDDO |
||
797 |
ENDDO |
||
798 |
ENDDO |
||
799 |
|||
800 |
✓✗✓✗ |
288 |
IF (iflag_thermals.GT.0.AND.iflag_the_trac>0) THEN |
801 |
|||
802 |
✓✓ | 864 |
DO it=1, nbtr |
803 |
|||
804 |
CALL thermcell_dq(klon,klev,1,pdtphys,fm_therm,entr_therm, & |
||
805 |
zmasse,tr_seri(1:klon,1:klev,it), & |
||
806 |
✗✓ | 576 |
d_tr_th(1:klon,1:klev,it),ztra_th,0 ) |
807 |
|||
808 |
✓✓ | 23328 |
DO k=1,klev |
809 |
✓✓ | 22352256 |
DO i=1,klon |
810 |
22329216 |
d_tr_th(i,k,it)=pdtphys*d_tr_th(i,k,it) |
|
811 |
22351680 |
tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr_th(i,k,it),0.) |
|
812 |
ENDDO |
||
813 |
ENDDO |
||
814 |
|||
815 |
ENDDO ! it |
||
816 |
|||
817 |
ENDIF ! Thermiques |
||
818 |
|||
819 |
!====================================================================== |
||
820 |
! -- Calcul de l'effet de la couche limite -- |
||
821 |
!====================================================================== |
||
822 |
|||
823 |
✓✗ | 288 |
IF (iflag_vdf_trac==1) THEN |
824 |
|||
825 |
! Injection during BL mixing |
||
826 |
! |
||
827 |
#ifdef CPP_StratAer |
||
828 |
IF (type_trac=='coag') THEN |
||
829 |
|||
830 |
! initialize dry deposition flux of sulfur |
||
831 |
budg_dep_dry_ocs(:)=0.0 |
||
832 |
budg_dep_dry_so2(:)=0.0 |
||
833 |
budg_dep_dry_h2so4(:)=0.0 |
||
834 |
budg_dep_dry_part(:)=0.0 |
||
835 |
|||
836 |
! compute dry deposition velocity as function of surface type (numbers |
||
837 |
! from IPSL note 23, 2002) |
||
838 |
v_dep_dry(:) = pctsrf(:,is_ter) * 2.5e-3 & |
||
839 |
& + pctsrf(:,is_oce) * 0.5e-3 & |
||
840 |
& + pctsrf(:,is_lic) * 2.5e-3 & |
||
841 |
& + pctsrf(:,is_sic) * 2.5e-3 |
||
842 |
|||
843 |
! compute surface dry deposition flux |
||
844 |
zrho(:,1)=pplay(:,1)/t_seri(:,1)/RD |
||
845 |
|||
846 |
DO it=1, nbtr |
||
847 |
source(:,it) = - v_dep_dry(:) * tr_seri(:,1,it) * zrho(:,1) |
||
848 |
ENDDO |
||
849 |
|||
850 |
ENDIF |
||
851 |
#endif |
||
852 |
|||
853 |
✓✓ | 864 |
DO it=1, nbtr |
854 |
! |
||
855 |
✗✓ | 864 |
IF (pbl_flg(it) /= 0) THEN |
856 |
! |
||
857 |
CALL cltrac(pdtphys, coefh,t_seri, & |
||
858 |
tr_seri(:,:,it), source(:,it), & |
||
859 |
paprs, pplay, delp, & |
||
860 |
d_tr_cl(:,:,it),d_tr_dry(:,it),flux_tr_dry(:,it)) |
||
861 |
! |
||
862 |
tr_seri(:,:,it)=tr_seri(:,:,it)+d_tr_cl(:,:,it) |
||
863 |
! |
||
864 |
#ifdef CPP_StratAer |
||
865 |
IF (type_trac=='coag') THEN |
||
866 |
! compute dry deposition flux of sulfur (sum over gases and particles) |
||
867 |
IF (it==id_OCS_strat) THEN |
||
868 |
budg_dep_dry_ocs(:)=budg_dep_dry_ocs(:)-source(:,it)*(mSatom/mOCSmol) |
||
869 |
ELSEIF (it==id_SO2_strat) THEN |
||
870 |
budg_dep_dry_so2(:)=budg_dep_dry_so2(:)-source(:,it)*(mSatom/mSO2mol) |
||
871 |
ELSEIF (it==id_H2SO4_strat) THEN |
||
872 |
budg_dep_dry_h2so4(:)=budg_dep_dry_h2so4(:)-source(:,it)*(mSatom/mH2SO4mol) |
||
873 |
ELSEIF (it.GT.nbtr_sulgas) THEN |
||
874 |
budg_dep_dry_part(:)=budg_dep_dry_part(:)-source(:,it)*(mSatom/mH2SO4mol)*dens_aer_dry & |
||
875 |
& *4./3.*RPI*(mdw(it-nbtr_sulgas)/2.)**3 |
||
876 |
ENDIF |
||
877 |
ENDIF |
||
878 |
#endif |
||
879 |
! |
||
880 |
ENDIF |
||
881 |
! |
||
882 |
ENDDO |
||
883 |
! |
||
884 |
ELSE IF (iflag_vdf_trac==0) THEN |
||
885 |
! |
||
886 |
! Injection of source in the first model layer |
||
887 |
! |
||
888 |
DO it=1,nbtr |
||
889 |
d_tr_cl(:,1,it)=source(:,it)*RG/delp(:,1)*pdtphys |
||
890 |
tr_seri(:,1,it)=tr_seri(:,1,it)+d_tr_cl(:,1,it) |
||
891 |
ENDDO |
||
892 |
d_tr_cl(:,2:klev,1:nbtr)=0. |
||
893 |
! |
||
894 |
ELSE IF (iflag_vdf_trac==-1) THEN |
||
895 |
! |
||
896 |
! Nothing happens |
||
897 |
d_tr_cl=0. |
||
898 |
! |
||
899 |
ELSE |
||
900 |
! |
||
901 |
CALL abort_physic('iflag_vdf_trac', 'cas non prevu',1) |
||
902 |
! |
||
903 |
ENDIF ! couche limite |
||
904 |
|||
905 |
!====================================================================== |
||
906 |
! Calcul de l'effet de la precipitation grande echelle |
||
907 |
! POUR INCA le lessivage est fait directement dans INCA |
||
908 |
!====================================================================== |
||
909 |
|||
910 |
✓✗ | 288 |
IF (lessivage) THEN |
911 |
|||
912 |
ql_incloud_ref = 10.e-4 |
||
913 |
ql_incloud_ref = 5.e-4 |
||
914 |
|||
915 |
|||
916 |
! calcul du contenu en eau liquide au sein du nuage |
||
917 |
288 |
ql_incl = ql_incloud_ref |
|
918 |
! choix du lessivage |
||
919 |
! |
||
920 |
✗✓ | 288 |
IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN |
921 |
! ******** Olivier Boucher version (3) possibly with modified ql_incl (4) |
||
922 |
! |
||
923 |
DO it = 1, nbtr |
||
924 |
|||
925 |
IF (aerosol(it)) THEN |
||
926 |
! incloud scavenging and removal by large scale rain ! orig : ql_incl was replaced by 0.5e-3 kg/kg |
||
927 |
! the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR |
||
928 |
! Liu (2001) proposed to use 1.5e-3 kg/kg |
||
929 |
|||
930 |
CALL lsc_scav(pdtphys,it,iflag_lscav,aerosol,ql_incl,prfl,psfl,rneb,beta_fisrt, & |
||
931 |
beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,d_tr_bcscav,d_tr_evapls,qPrls) |
||
932 |
|||
933 |
!large scale scavenging tendency |
||
934 |
DO k = 1, klev |
||
935 |
DO i = 1, klon |
||
936 |
d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it)+d_tr_evapls(i,k,it) |
||
937 |
tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it) |
||
938 |
ENDDO |
||
939 |
ENDDO |
||
940 |
CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'lsc scav it = '//TRIM(int2str(it))) |
||
941 |
ENDIF |
||
942 |
|||
943 |
ENDDO !tr |
||
944 |
|||
945 |
#ifdef CPP_StratAer |
||
946 |
IF (type_trac=='coag') THEN |
||
947 |
! compute wet deposition flux of sulfur (sum over gases and |
||
948 |
! particles) and convert to kg(S)/m2/s |
||
949 |
! adding contribution of d_tr_ls to d_tr_cv (above) |
||
950 |
DO i = 1, klon |
||
951 |
DO k = 1, klev |
||
952 |
DO it = 1, nbtr |
||
953 |
IF (it==id_OCS_strat) THEN |
||
954 |
budg_dep_wet_ocs(i)=budg_dep_wet_ocs(i)+d_tr_ls(i,k,it)*(mSatom/mOCSmol) & |
||
955 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
956 |
ELSEIF (it==id_SO2_strat) THEN |
||
957 |
budg_dep_wet_so2(i)=budg_dep_wet_so2(i)+d_tr_ls(i,k,it)*(mSatom/mSO2mol) & |
||
958 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
959 |
ELSEIF (it==id_H2SO4_strat) THEN |
||
960 |
budg_dep_wet_h2so4(i)=budg_dep_wet_h2so4(i)+d_tr_ls(i,k,it)*(mSatom/mH2SO4mol) & |
||
961 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
962 |
ELSEIF (it.GT.nbtr_sulgas) THEN |
||
963 |
budg_dep_wet_part(i)=budg_dep_wet_part(i)+d_tr_ls(i,k,it)*(mSatom/mH2SO4mol) & |
||
964 |
& *dens_aer_dry*4./3.*RPI*(mdw(it-nbtr_sulgas)/2.)**3 & |
||
965 |
& *(paprs(i,k)-paprs(i,k+1))/RG/pdtphys |
||
966 |
ENDIF |
||
967 |
ENDDO |
||
968 |
ENDDO |
||
969 |
ENDDO |
||
970 |
ENDIF |
||
971 |
#endif |
||
972 |
|||
973 |
✗✓ | 288 |
ELSE IF (iflag_lscav .EQ. 2) THEN ! frac_impa, frac_nucl |
974 |
! ********* modified old version |
||
975 |
|||
976 |
d_tr_lessi_nucl(:,:,:) = 0. |
||
977 |
d_tr_lessi_impa(:,:,:) = 0. |
||
978 |
flestottr(:,:,:) = 0. |
||
979 |
! Tendance des aerosols nuclees et impactes |
||
980 |
DO it = 1, nbtr |
||
981 |
IF (aerosol(it)) THEN |
||
982 |
his_dh(:)=0. |
||
983 |
DO k = 1, klev |
||
984 |
DO i = 1, klon |
||
985 |
!PhH |
||
986 |
zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD |
||
987 |
zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG |
||
988 |
! |
||
989 |
ENDDO |
||
990 |
ENDDO |
||
991 |
|||
992 |
DO k=klev-1, 1, -1 |
||
993 |
DO i=1, klon |
||
994 |
! d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.) |
||
995 |
dx=d_tr_ls(i,k,it) |
||
996 |
his_dh(i)=his_dh(i)-dx*zrho(i,k)*zdz(i,k)/pdtphys ! kg/m2/s |
||
997 |
evaplsc = prfl(i,k) - prfl(i,k+1) + psfl(i,k) - psfl(i,k+1) |
||
998 |
! Evaporation Partielle -> Liberation Partielle 0.5*evap |
||
999 |
IF ( evaplsc .LT.0..and.abs(prfl(i,k+1)+psfl(i,k+1)).gt.1.e-10) THEN |
||
1000 |
evaplsc = (-evaplsc)/(prfl(i,k+1)+psfl(i,k+1)) |
||
1001 |
! evaplsc est donc positif, his_dh(i) est positif |
||
1002 |
!-------------- |
||
1003 |
d_tr_evapls(i,k,it)=0.5*evaplsc*(d_tr_lessi_nucl(i,k+1,it) & |
||
1004 |
+d_tr_lessi_impa(i,k+1,it)) |
||
1005 |
!------------- d_tr_evapls(i,k,it)=-0.5*evaplsc*(d_tr_lsc(i,k+1,it)) |
||
1006 |
beta=0.5*evaplsc |
||
1007 |
if ((prfl(i,k)+psfl(i,k)).lt.1.e-10) THEN |
||
1008 |
beta=1.0*evaplsc |
||
1009 |
endif |
||
1010 |
dx=beta*his_dh(i)/zrho(i,k)/zdz(i,k)*pdtphys |
||
1011 |
his_dh(i)=(1.-beta)*his_dh(i) ! tracer from |
||
1012 |
d_tr_evapls(i,k,it)=dx |
||
1013 |
ENDIF |
||
1014 |
d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.) & |
||
1015 |
+d_tr_evapls(i,k,it) |
||
1016 |
|||
1017 |
!-------------- |
||
1018 |
d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) + & |
||
1019 |
( 1 - frac_nucl(i,k) )*tr_seri(i,k,it) |
||
1020 |
d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) + & |
||
1021 |
( 1 - frac_impa(i,k) )*tr_seri(i,k,it) |
||
1022 |
! |
||
1023 |
! Flux lessivage total |
||
1024 |
flestottr(i,k,it) = flestottr(i,k,it) - & |
||
1025 |
( d_tr_lessi_nucl(i,k,it) + & |
||
1026 |
d_tr_lessi_impa(i,k,it) ) * & |
||
1027 |
( paprs(i,k)-paprs(i,k+1) ) / & |
||
1028 |
(RG * pdtphys) |
||
1029 |
!! Mise a jour des traceurs due a l'impaction,nucleation |
||
1030 |
! tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k) |
||
1031 |
!! calcul de la tendance liee au lessivage stratiforme |
||
1032 |
! d_tr_ls(i,k,it)=tr_seri(i,k,it)*& |
||
1033 |
! (1.-1./(frac_impa(i,k)*frac_nucl(i,k))) |
||
1034 |
!-------------- |
||
1035 |
ENDDO |
||
1036 |
ENDDO |
||
1037 |
ENDIF |
||
1038 |
ENDDO |
||
1039 |
! ********* end modified old version |
||
1040 |
|||
1041 |
✓✗ | 288 |
ELSE IF (iflag_lscav .EQ. 1) THEN ! frac_impa, frac_nucl |
1042 |
! ********* old version |
||
1043 |
|||
1044 |
✓✓✓✓ ✓✓ |
22352544 |
d_tr_lessi_nucl(:,:,:) = 0. |
1045 |
✓✓✓✓ ✓✓ |
22352544 |
d_tr_lessi_impa(:,:,:) = 0. |
1046 |
✓✓✓✓ ✓✓ |
22352544 |
flestottr(:,:,:) = 0. |
1047 |
!========================= |
||
1048 |
! LESSIVAGE LARGE SCALE : |
||
1049 |
!========================= |
||
1050 |
|||
1051 |
! Tendance des aerosols nuclees et impactes |
||
1052 |
! ----------------------------------------- |
||
1053 |
✓✓ | 864 |
DO it = 1, nbtr |
1054 |
✓✓ | 864 |
IF (aerosol(it)) THEN |
1055 |
✓✓ | 11520 |
DO k = 1, klev |
1056 |
✓✓ | 11176128 |
DO i = 1, klon |
1057 |
d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) + & |
||
1058 |
11164608 |
( 1 - frac_nucl(i,k) )*tr_seri(i,k,it) |
|
1059 |
d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) + & |
||
1060 |
11164608 |
( 1 - frac_impa(i,k) )*tr_seri(i,k,it) |
|
1061 |
|||
1062 |
! |
||
1063 |
! Flux lessivage total |
||
1064 |
! ------------------------------------------------------------ |
||
1065 |
flestottr(i,k,it) = flestottr(i,k,it) - & |
||
1066 |
( d_tr_lessi_nucl(i,k,it) + & |
||
1067 |
d_tr_lessi_impa(i,k,it) ) * & |
||
1068 |
( paprs(i,k)-paprs(i,k+1) ) / & |
||
1069 |
11164608 |
(RG * pdtphys) |
|
1070 |
! |
||
1071 |
! Mise a jour des traceurs due a l'impaction,nucleation |
||
1072 |
! ---------------------------------------------------------------------- |
||
1073 |
11175840 |
tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k) |
|
1074 |
ENDDO |
||
1075 |
ENDDO |
||
1076 |
ENDIF |
||
1077 |
ENDDO |
||
1078 |
|||
1079 |
! ********* end old version |
||
1080 |
ENDIF ! iflag_lscav . EQ. 1, 2, 3 or 4 |
||
1081 |
! |
||
1082 |
ENDIF ! lessivage |
||
1083 |
|||
1084 |
|||
1085 |
! -- CHIMIE INCA config_inca = aero or chem -- |
||
1086 |
✓✓✓✗ ✗✓ |
864 |
IF (ANY(type_trac == ['inca','inco'])) THEN ! ModThL |
1087 |
|||
1088 |
CALL tracinca(& |
||
1089 |
nstep, julien, gmtime, lafin, & |
||
1090 |
pdtphys, t_seri, paprs, pplay, & |
||
1091 |
pmfu, upwd, ftsol, pctsrf, pphis, & |
||
1092 |
pphi, albsol, sh, ch, rh, & |
||
1093 |
cldfra, rneb, diafra, cldliq, & |
||
1094 |
itop_con, ibas_con, pmflxr, pmflxs, & |
||
1095 |
prfl, psfl, aerosol_couple, flxmass_w, & |
||
1096 |
tau_aero, piz_aero, cg_aero, ccm, & |
||
1097 |
rfname, & |
||
1098 |
tr_seri(:,:,1+nqCO2:nbtr), source(:,1+nqCO2:nbtr)) ! ModThL |
||
1099 |
ENDIF |
||
1100 |
|||
1101 |
288 |
END SUBROUTINE phytrac |
|
1102 |
|||
1103 |
END MODULE |
Generated by: GCOVR (Version 4.2) |