source: LMDZ6/trunk/libf/phylmd/Dust/phytracr_spl_mod.F90 @ 3981

Last change on this file since 3981 was 3977, checked in by fhourdin, 3 years ago

Modification des routines iotd* pour mieux gerer les coordonnees.
Utile notamment pour la physique a 20 parametres.

File size: 174.0 KB
Line 
1! $Id: physiq.F90 2298 2015-06-14 19:13:32Z fairhead $
2!#define IO_DEBUG
3
4MODULE phytracr_spl_mod
5
6! Recuperation des morceaux de la physique de Jeronimo specifiques
7! du modele d'aerosols d'Olivier n'co.
8!
9INCLUDE "chem.h"
10INCLUDE "chem_spla.h"
11
12  REAL,SAVE  :: scale_param_ssacc  !Scaling parameter for Fine Sea Salt
13  REAL,SAVE ::  scale_param_sscoa  !Scaling parameter for Coarse Sea Salt
14
15
16
17  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_ind !Scaling parameter for industrial emissions of SO2
18  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_bb  !Scaling parameter for biomas burning (SO2,BC & OM)
19  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_ff  !Scaling parameter for industrial emissions (fossil fuel)
20  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_dustacc  !Scaling parameter for Fine Dust
21  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_dustcoa  !Scaling parameter for Coarse Dust
22  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: scale_param_dustsco  !Scaling parameter for SCoarse Dust
23  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: param_wstarBLperregion  !parameter for ..
24  REAL, DIMENSION(:),ALLOCATABLE,SAVE :: param_wstarWAKEperregion  !parameter for ..
25  !$OMP THREADPRIVATE(scale_param_ind,scale_param_bb,scale_param_ff)
26  !$OMP THREADPRIVATE(scale_param_dustacc,scale_param_dustcoa,scale_param_dustsco)
27  !$OMP THREADPRIVATE(scale_param_ssacc,scale_param_sscoa)
28  !$OMP THREADPRIVATE(param_wstarBLperregion,param_wstarWAKEperregion)
29  REAL, DIMENSION(:),ALLOCATABLE,SAVE ::dust_ec, u10m_ec, v10m_ec
30!$OMP THREADPRIVATE(dust_ec, u10m_ec, v10m_ec)
31
32  CHARACTER*800 fileregionsdimsind
33  CHARACTER*800 fileregionsdimsdust
34  CHARACTER*800 fileregionsdimsbb
35  CHARACTER*800 fileregionsdimswstar
36  CHARACTER*100 paramname_ind
37  CHARACTER*100 paramname_bb
38  CHARACTER*100 paramname_ff
39  CHARACTER*100 paramname_dustacc
40  CHARACTER*100 paramname_dustcoa
41  CHARACTER*100 paramname_dustsco
42  CHARACTER*100 paramname_ssacc
43  CHARACTER*100 paramname_sscoa
44  CHARACTER*100 paramname_wstarBL
45  CHARACTER*100 paramname_wstarWAKE
46
47
48  CHARACTER*800 filescaleparams
49  CHARACTER*800 paramsname
50
51
52  !!------------------------ SULFUR emissions ----------------------------
53  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2volc_cont  ! emissions so2 volcan continuous
54  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_altvolc_cont  ! altitude  so2 volcan continuous
55  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2volc_expl  ! emissions so2 volcan explosive
56!$OMP THREADPRIVATE( lmt_so2volc_cont,lmt_altvolc_cont,lmt_so2volc_expl )
57  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_altvolc_expl  ! altitude  so2 volcan explosive
58  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2ff_l       ! emissions so2 fossil fuel (low)
59  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2ff_h       ! emissions so2 fossil fuel (high)
60!$OMP THREADPRIVATE( lmt_altvolc_expl,lmt_so2ff_l,lmt_so2ff_h )
61  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2nff        ! emissions so2 non-fossil fuel
62  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2ba         ! emissions de so2 bateau
63  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2bb_l       ! emissions de so2 biomass burning (low)
64!$OMP THREADPRIVATE( lmt_so2nff,lmt_so2ba,lmt_so2bb_l )
65  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_so2bb_h       ! emissions de so2 biomass burning (high)
66  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_dmsconc       ! concentration de dms oceanique
67  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_dmsbio        ! emissions de dms bio
68  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_h2sbio        ! emissions de h2s bio
69!$OMP THREADPRIVATE(lmt_so2bb_h,lmt_dmsconc,lmt_dmsbio,lmt_h2sbio )
70  !------------------------- BLACK CARBON emissions ----------------------
71  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_bcff       ! emissions de BC fossil fuels
72  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_bcnff      ! emissions de BC non-fossil fuels
73  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_bcbb_l     ! emissions de BC biomass basses
74!$OMP THREADPRIVATE( lmt_bcff,lmt_bcnff,lmt_bcbb_l)
75  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_bcbb_h     ! emissions de BC biomass hautes
76  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_bcba       ! emissions de BC bateau
77!$OMP THREADPRIVATE(lmt_bcbb_h,lmt_bcba)
78  !------------------------ ORGANIC MATTER emissions ---------------------
79  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_omff     ! emissions de OM fossil fuels
80  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_omnff    ! emissions de OM non-fossil fuels
81  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_ombb_l   ! emissions de OM biomass basses
82!$OMP THREADPRIVATE( lmt_omff,lmt_omnff,lmt_ombb_l)
83  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_ombb_h   ! emissions de OM biomass hautes
84  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_omnat    ! emissions de OM Natural
85  REAL , DIMENSION(:),ALLOCATABLE,SAVE :: lmt_omba     ! emissions de OM bateau
86  REAL , DIMENSION(:,:),ALLOCATABLE,SAVE :: lmt_sea_salt    ! emissions de OM Natural
87!$OMP THREADPRIVATE(lmt_ombb_h,lmt_omnat,lmt_omba,lmt_sea_salt)
88
89!JE20141224 >>
90  ! others
91  REAL, DIMENSION(:),ALLOCATABLE,SAVE ::  tsol
92!$OMP THREADPRIVATE(tsol)
93  INTEGER :: ijulday
94  LOGICAL , parameter :: edgar = .true.
95  INTEGER , parameter :: flag_dms=4
96  INTEGER*4  nbjour
97
98      !
99! Tracer tendencies, for outputs
100!-------------------------------
101      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cl  ! Td couche
102!. limite/traceur
103      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_dec
104!RomP
105      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cv  ! Td
106!onvection/traceur
107! RomP >>>
108      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_insc
109      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_bcscav
110      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_evapls
111      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_ls
112      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_trsp
113      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sscav
114      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sat
115      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_uscav
116      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qPr,qDi ! concentration tra
117!dans pluie,air descente insaturee
118      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qPa,qMel
119      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: qTrdi,dtrcvMA ! conc traceur
120!descente air insaturee et td convective MA
121!! RomP <<<
122      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_th  ! Td thermique
123      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_impa ! Td du
124!lessivage par impaction
125      REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_nucl ! Td du
126!lessivage par nucleation
127      REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: qPrls      !jyg:
128!oncentration tra dans pluie LS a la surf.
129      REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: d_tr_dry ! Td depot
130!sec/traceur (1st layer),ALLOCATABLE,SAVE  jyg
131      REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: flux_tr_dry ! depot
132!sec/traceur (surface),ALLOCATABLE,SAVE    jyg
133
134! Index of each traceur
135      INTEGER,SAVE :: id_prec, id_fine, id_coss, id_codu, id_scdu
136
137!$OMP THREADPRIVATE(d_tr_cl,d_tr_dec,d_tr_cv,d_tr_insc,d_tr_bcscav,d_tr_evapls)
138!$OMP THREADPRIVATE(d_tr_ls,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav)
139!$OMP THREADPRIVATE(qPr,qDi,qPa,qMel,qTrdi,dtrcvMA,d_tr_th,d_tr_lessi_impa)
140!$OMP THREADPRIVATE(d_tr_lessi_nucl,qPrls,d_tr_dry,flux_tr_dry)
141!$OMP THREADPRIVATE(id_prec,id_fine,id_coss,id_codu,id_scdu)
142
143! JE20141224 <<
144
145      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diff_aod550_tot  ! epaisseur optique total aerosol 550  nm
146      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod670_tot  ! epaisseur optique total aerosol 670 nm
147      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod865_tot  ! epaisseur optique total aerosol 865 nm
148      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diff_aod550_tr2  ! epaisseur optique Traceur 2 aerosol 550 nm, diagnostic
149      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod670_tr2  ! epaisseur optique Traceur 2 aerosol 670 nm, diagnostic
150      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod865_tr2  ! epaisseur optique Traceur 2 aerosol 865 nm, diagnostic
151      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod550_ss  ! epaisseur optique Sels marins aerosol 550 nm, diagnostic
152      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod670_ss  ! epaisseur optique Sels marins aerosol 670 nm, diagnostic
153      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod865_ss   ! epaisseur optique Sels marins aerosol 865 nm, diagnostic
154      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod550_dust ! epaisseur optique Dust aerosol 550 nm, diagnostic
155      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod670_dust ! epaisseur optique Dust aerosol 670 nm, diagnostic
156      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod865_dust ! epaisseur optique Dust aerosol 865 nm, diagnostic
157      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod550_dustsco ! epaisseur optique Dust SCOarse aerosol 550 nm, diagnostic
158      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod670_dustsco ! epaisseur optique Dust SCOarse aerosol 670 nm, diagnostic
159      REAL,DIMENSION(:),ALLOCATABLE,SAVE :: diag_aod865_dustsco ! epaisseur optique Dust SCOarse aerosol 865 nm, diagnostic
160
161!$OMP THREADPRIVATE(diff_aod550_tot,diag_aod670_tot,diag_aod865_tot)
162!$OMP THREADPRIVATE(diff_aod550_tr2,diag_aod670_tr2,diag_aod865_tr2)
163!$OMP THREADPRIVATE(diag_aod550_ss,diag_aod670_ss,diag_aod865_ss,diag_aod550_dust)
164!$OMP THREADPRIVATE(diag_aod670_dust,diag_aod865_dust,diag_aod550_dustsco)
165!$OMP THREADPRIVATE(diag_aod670_dustsco,diag_aod865_dustsco)
166
167
168      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_terra  ! AOD at terra overpass time ( 10.30 local hour)
169      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_tr2_terra  ! AOD at terra overpass time ( 10.30 local hour)
170      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_ss_terra  ! AOD at terra overpass time ( 10.30 local hour)
171      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_dust_terra  ! AOD at terra overpass time ( 10.30 local hour)
172      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_dustsco_terra  ! AOD at terra overpass time ( 10.30 local hour)
173      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_terra  ! AOD at terra overpass time ( 10.30 local hour)
174      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_tr2_terra  ! AOD at terra overpass time ( 10.30 local hour)
175      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_ss_terra  ! AOD at terra overpass time ( 10.30 local hour)
176      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_dust_terra  ! AOD at terra overpass time ( 10.30 local hour)
177      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_dustsco_terra  ! AOD at terra overpass time ( 10.30 local hour)
178      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_terra  ! AOD at terra overpass time ( 10.30 local hour)
179      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_tr2_terra  ! AOD at terra overpass time ( 10.30 local hour)
180      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_ss_terra  ! AOD at terra overpass time ( 10.30 local hour)
181      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_dust_terra  ! AOD at terra overpass time ( 10.30 local hour)
182      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_dustsco_terra  ! AOD at terra overpass time ( 10.30 local hour)
183
184
185      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
186      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_tr2_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
187      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_ss_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
188      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_dust_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
189      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod550_dustsco_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
190      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
191      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_tr2_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
192      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_ss_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
193      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_dust_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
194      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod670_dustsco_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
195      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
196      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_tr2_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
197      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_ss_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
198      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_dust_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
199      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: aod865_dustsco_aqua  ! AOD at aqua overpass time ( 13.30 local hour)
200
201!$OMP THREADPRIVATE(aod550_aqua,aod550_tr2_aqua,aod550_ss_aqua,aod550_dust_aqua,aod550_dustsco_aqua)
202!$OMP THREADPRIVATE(aod670_aqua,aod670_tr2_aqua,aod670_ss_aqua,aod670_dust_aqua,aod670_dustsco_aqua)
203!$OMP THREADPRIVATE(aod865_aqua,aod865_tr2_aqua,aod865_ss_aqua,aod865_dust_aqua,aod865_dustsco_aqua)
204!$OMP THREADPRIVATE(aod550_terra,aod550_tr2_terra,aod550_ss_terra,aod550_dust_terra,aod550_dustsco_terra)
205!$OMP THREADPRIVATE(aod670_terra,aod670_tr2_terra,aod670_ss_terra,aod670_dust_terra,aod670_dustsco_terra)
206!$OMP THREADPRIVATE(aod865_terra,aod865_tr2_terra,aod865_ss_terra,aod865_dust_terra,aod865_dustsco_terra)
207
208
209      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sconc01 ! surface concentration
210      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: trm01   ! burden
211      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sconc02 ! surface concentration
212      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: trm02   ! burden
213      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sconc03 ! surface concentration
214      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: trm03   ! burden
215      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sconc04 ! surface concentration
216      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: trm04   ! burden
217      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sconc05 ! surface concentration
218      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: trm05   ! burden
219!$OMP THREADPRIVATE(sconc01,sconc02,sconc03,sconc04,sconc05)
220!$OMP THREADPRIVATE(trm01,trm02,trm03,trm04,trm05)
221      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux01       
222      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux02       
223      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux03       
224      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux04       
225      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux05       
226!$OMP THREADPRIVATE(flux01,flux02,flux03,flux04,flux05)
227      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ds01         
228      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ds02         
229      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ds03         
230      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ds04         
231      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ds05         
232!$OMP THREADPRIVATE(ds01,ds02,ds03,ds04,ds05)
233      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dh01         
234      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dh02         
235      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dh03         
236      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dh04         
237      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dh05         
238!$OMP THREADPRIVATE(dh01,dh02,dh03,dh04,dh05)
239      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtrconv01   
240      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtrconv02   
241      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtrconv03   
242      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtrconv04   
243      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtrconv05   
244!$OMP THREADPRIVATE(dtrconv01,dtrconv02,dtrconv03,dtrconv04,dtrconv05)
245      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtherm01     
246      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtherm02     
247      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtherm03     
248      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtherm04     
249      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dtherm05     
250!$OMP THREADPRIVATE(dtherm01,dtherm02,dtherm03,dtherm04,dtherm05)
251      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkecv01     
252      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkecv02     
253      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkecv03     
254      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkecv04     
255      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkecv05     
256!$OMP THREADPRIVATE(dhkecv01,dhkecv02,dhkecv03,dhkecv04,dhkecv05)
257      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: d_tr_ds01     
258      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: d_tr_ds02     
259      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: d_tr_ds03     
260      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: d_tr_ds04     
261      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: d_tr_ds05     
262!$OMP THREADPRIVATE(d_tr_ds01,d_tr_ds02,d_tr_ds03,d_tr_ds04,d_tr_ds05)
263      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkelsc01   
264      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkelsc02   
265      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkelsc03   
266      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkelsc04   
267      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: dhkelsc05   
268!$OMP THREADPRIVATE(dhkelsc01,dhkelsc02,dhkelsc03,dhkelsc04,dhkelsc05)
269      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cv01   
270      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cv02   
271      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cv03   
272      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cv04   
273      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cv05   
274!$OMP THREADPRIVATE(d_tr_cv01,d_tr_cv02,d_tr_cv03,d_tr_cv04,d_tr_cv05)
275      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_trsp01 
276      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_trsp02 
277      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_trsp03 
278      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_trsp04 
279      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_trsp05 
280!$OMP THREADPRIVATE(d_tr_trsp01,d_tr_trsp02,d_tr_trsp03,d_tr_trsp04,d_tr_trsp05)
281      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sscav01
282      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sscav02
283      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sscav03
284      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sscav04
285      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sscav05
286!$OMP THREADPRIVATE(d_tr_sscav01,d_tr_sscav02,d_tr_sscav03,d_tr_sscav04,d_tr_sscav05)
287      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sat01   
288      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sat02   
289      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sat03   
290      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sat04   
291      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_sat05   
292!$OMP THREADPRIVATE(d_tr_sat01,d_tr_sat02,d_tr_sat03,d_tr_sat04,d_tr_sat05)
293      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_uscav01
294      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_uscav02
295      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_uscav03
296      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_uscav04
297      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_uscav05
298!$OMP THREADPRIVATE(d_tr_uscav01,d_tr_uscav02,d_tr_uscav03,d_tr_uscav04,d_tr_uscav05)
299
300!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
301!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
302!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
303
304      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_insc01 
305      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_insc02 
306      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_insc03 
307      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_insc04 
308      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_insc05 
309!$OMP THREADPRIVATE(d_tr_insc01,d_tr_insc02,d_tr_insc03,d_tr_insc04,d_tr_insc05)
310      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_bcscav01
311      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_bcscav02
312      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_bcscav03
313      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_bcscav04
314      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_bcscav05
315!$OMP THREADPRIVATE(d_tr_bcscav01,d_tr_bcscav02,d_tr_bcscav03,d_tr_bcscav04,d_tr_bcscav05)
316      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_evapls01   
317      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_evapls02   
318      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_evapls03   
319      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_evapls04   
320      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_evapls05   
321!$OMP THREADPRIVATE(d_tr_evapls01,d_tr_evapls02,d_tr_evapls03,d_tr_evapls04,d_tr_evapls05)
322      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_ls01
323      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_ls02
324      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_ls03
325      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_ls04
326      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_ls05
327!$OMP THREADPRIVATE(d_tr_ls01,d_tr_ls02,d_tr_ls03,d_tr_ls04,d_tr_ls05)
328
329      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_dyn01
330      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_dyn02
331      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_dyn03
332      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_dyn04
333      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_dyn05
334!$OMP THREADPRIVATE(d_tr_dyn01,d_tr_dyn02,d_tr_dyn03,d_tr_dyn04,d_tr_dyn05)
335
336      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cl01
337      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cl02
338      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cl03
339      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cl04
340      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_cl05
341!$OMP THREADPRIVATE(d_tr_cl01,d_tr_cl02,d_tr_cl03,d_tr_cl04,d_tr_cl05)
342
343      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_th01
344      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_th02
345      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_th03
346      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_th04
347      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: d_tr_th05
348!$OMP THREADPRIVATE(d_tr_th01,d_tr_th02,d_tr_th03,d_tr_th04,d_tr_th05)
349
350      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: sed_ss3D    ! corresponds to tracer 3
351      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: sed_dust3D  ! corresponds to tracer 4
352      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: sed_dustsco3D  ! corresponds to tracer 4
353!$OMP THREADPRIVATE(sed_ss3D,sed_dust3D,sed_dustsco3D)
354
355!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
356!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
357      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sed_ss    ! corresponds to tracer 3
358      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sed_dust  ! corresponds to tracer 4
359      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: sed_dustsco  ! corresponds to tracer 4
360      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: his_g2pgas  ! corresponds to tracer 4
361      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: his_g2paer  ! corresponds to tracer 4
362!$OMP THREADPRIVATE(sed_ss,sed_dust,sed_dustsco,his_g2pgas,his_g2paer)
363
364      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbb
365      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxff
366      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbcbb
367      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbcff
368      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbcnff
369!$OMP THREADPRIVATE(fluxbb,fluxff,fluxbcbb,fluxbcff,fluxbcnff)
370      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbcba
371      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxbc
372      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxombb
373      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxomff
374      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxomnff
375!$OMP THREADPRIVATE(fluxbcba,fluxbc,fluxombb,fluxomff,fluxomnff)
376      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxomba
377      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxomnat
378      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxom
379      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxh2sff
380      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxh2snff
381!$OMP THREADPRIVATE(fluxomba,fluxomnat,fluxom,fluxh2sff,fluxh2snff)
382      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2ff
383      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2nff
384      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2bb
385      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2vol
386      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2ba
387!$OMP THREADPRIVATE(fluxso2ff,fluxso2nff,fluxso2bb,fluxso2vol,fluxso2ba)
388      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso2
389      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso4ff
390      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso4nff
391      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso4bb
392      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso4ba
393!$OMP THREADPRIVATE(fluxso2,fluxso4ff,fluxso4nff,fluxso4ba,fluxso4bb)
394      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxso4
395      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxdms
396      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxh2sbio
397      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxdustec
398      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxddfine
399!$OMP THREADPRIVATE(fluxso4,fluxdms,fluxh2sbio,fluxdustec,fluxddfine)
400      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxddcoa
401      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxddsco
402      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxdd
403      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxssfine
404      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxsscoa
405!$OMP THREADPRIVATE(fluxddcoa,fluxddsco,fluxdd,fluxssfine,fluxsscoa)
406      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: fluxss
407      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ind
408      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_bb
409      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ff
410!$OMP THREADPRIVATE(fluxss,flux_sparam_ind,flux_sparam_bb,flux_sparam_ff)
411      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ddfine
412      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ddcoa
413      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ddsco
414      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_ssfine
415!$OMP THREADPRIVATE(flux_sparam_ddfine,flux_sparam_ddcoa)
416!$OMP THREADPRIVATE(flux_sparam_ddsco,flux_sparam_ssfine)
417      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: flux_sparam_sscoa
418      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: u10m_ss
419      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: v10m_ss
420!$OMP THREADPRIVATE(flux_sparam_sscoa,u10m_ss,v10m_ss)
421
422! Select dust emission scheme for the Sahara:
423!      LOGICAL,PARAMETER,SAVE ::  ok_chimeredust=.FALSE.
424      LOGICAL,PARAMETER ::  ok_chimeredust=.TRUE.
425!!!!!! !$OMP THREADPRIVATE(ok_chimeredust)
426
427
428CONTAINS
429!
430!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
431SUBROUTINE phytracr_spl_out_init()
432!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
433!AS : This subroutine centralises the ALLOCATE needed for the 1st call of
434!     phys_output_write_spl in physiq
435
436    USE dimphy
437    USE infotrac_phy, ONLY: nbtr
438    USE dustemission_mod, ONLY :  dustemis_out_init
439
440    ! pour les variables m[1-3]dflux
441    CALL dustemis_out_init()
442
443!traceur
444      ALLOCATE( diff_aod550_tot(klon)     )
445      ALLOCATE( diag_aod670_tot(klon)     )
446      ALLOCATE( diag_aod865_tot(klon)     )
447      ALLOCATE( diff_aod550_tr2(klon)     )
448      ALLOCATE( diag_aod670_tr2(klon)     )
449      ALLOCATE( diag_aod865_tr2(klon)     )
450      ALLOCATE( diag_aod550_ss(klon)      )
451      ALLOCATE( diag_aod670_ss(klon)      )
452      ALLOCATE( diag_aod865_ss(klon)      )
453      ALLOCATE( diag_aod550_dust(klon)    )
454      ALLOCATE( diag_aod670_dust(klon)    )
455      ALLOCATE( diag_aod865_dust(klon)    )
456      ALLOCATE( diag_aod550_dustsco(klon)  )
457      ALLOCATE( diag_aod670_dustsco(klon)  )
458      ALLOCATE( diag_aod865_dustsco(klon)  )
459      !AS: les 15 vars _terra et 15 _aqua suivantes sont groupees differemment dans spla_output_write.h
460      ALLOCATE( aod550_terra(klon))
461      ALLOCATE( aod550_tr2_terra(klon))
462      ALLOCATE( aod550_ss_terra(klon))
463      ALLOCATE( aod550_dust_terra(klon))
464      ALLOCATE( aod550_dustsco_terra(klon))
465      ALLOCATE( aod670_terra(klon))
466      ALLOCATE( aod670_tr2_terra(klon))
467      ALLOCATE( aod670_ss_terra(klon))
468      ALLOCATE( aod670_dust_terra(klon))
469      ALLOCATE( aod670_dustsco_terra(klon))
470      ALLOCATE( aod865_terra(klon))
471      ALLOCATE( aod865_tr2_terra(klon))
472      ALLOCATE( aod865_ss_terra(klon))
473      ALLOCATE( aod865_dust_terra(klon))
474      ALLOCATE( aod865_dustsco_terra(klon))
475
476      ALLOCATE( aod550_aqua(klon))
477      ALLOCATE( aod550_tr2_aqua(klon))
478      ALLOCATE( aod550_ss_aqua(klon))
479      ALLOCATE( aod550_dust_aqua(klon))
480      ALLOCATE( aod550_dustsco_aqua(klon))
481      ALLOCATE( aod670_aqua(klon))
482      ALLOCATE( aod670_tr2_aqua(klon))
483      ALLOCATE( aod670_ss_aqua(klon))
484      ALLOCATE( aod670_dust_aqua(klon))
485      ALLOCATE( aod670_dustsco_aqua(klon))
486      ALLOCATE( aod865_aqua(klon))
487      ALLOCATE( aod865_tr2_aqua(klon))
488      ALLOCATE( aod865_ss_aqua(klon))
489      ALLOCATE( aod865_dust_aqua(klon))
490      ALLOCATE( aod865_dustsco_aqua(klon))
491
492      ALLOCATE(  sconc01(klon)     )
493      ALLOCATE(  trm01(klon)     )
494      ALLOCATE(  sconc02(klon)     )
495      ALLOCATE(  trm02(klon)     )
496      ALLOCATE(  sconc03(klon)     )
497      ALLOCATE(  trm03(klon)     )
498      ALLOCATE(  sconc04(klon)     )
499      ALLOCATE(  trm04(klon)     )
500      ALLOCATE(  sconc05(klon)     )
501      ALLOCATE(  trm05(klon)     )
502
503! Lessivage
504      ALLOCATE(  flux01(klon)     )
505      ALLOCATE(  flux02(klon)     )
506      ALLOCATE(  flux03(klon)     )
507      ALLOCATE(  flux04(klon)     )
508      ALLOCATE(  flux05(klon)     )
509      ALLOCATE(  ds01(klon)     )
510      ALLOCATE(  ds02(klon)     )
511      ALLOCATE(  ds03(klon)     )
512      ALLOCATE(  ds04(klon)     )
513      ALLOCATE(  ds05(klon)     )
514      ALLOCATE(  dh01(klon)     )
515      ALLOCATE(  dh02(klon)     )
516      ALLOCATE(  dh03(klon)     )
517      ALLOCATE(  dh04(klon)     )
518      ALLOCATE(  dh05(klon)     )
519      ALLOCATE(  dtrconv01(klon)     )
520      ALLOCATE(  dtrconv02(klon)     )
521      ALLOCATE(  dtrconv03(klon)     )
522      ALLOCATE(  dtrconv04(klon)     )
523      ALLOCATE(  dtrconv05(klon)     )
524      ALLOCATE(  dtherm01(klon)     )
525      ALLOCATE(  dtherm02(klon)     )
526      ALLOCATE(  dtherm03(klon)     )
527      ALLOCATE(  dtherm04(klon)     )
528      ALLOCATE(  dtherm05(klon)     )
529      ALLOCATE(  dhkecv01(klon)     )
530      ALLOCATE(  dhkecv02(klon)     )
531      ALLOCATE(  dhkecv03(klon)     )
532      ALLOCATE(  dhkecv04(klon)     )
533      ALLOCATE(  dhkecv05(klon)     )
534      ALLOCATE(  d_tr_ds01(klon)     )
535      ALLOCATE(  d_tr_ds02(klon)     )
536      ALLOCATE(  d_tr_ds03(klon)     )
537      ALLOCATE(  d_tr_ds04(klon)     )
538      ALLOCATE(  d_tr_ds05(klon)     )
539      ALLOCATE(  dhkelsc01(klon)     )
540      ALLOCATE(  dhkelsc02(klon)     )
541      ALLOCATE(  dhkelsc03(klon)     )
542      ALLOCATE(  dhkelsc04(klon)     )
543      ALLOCATE(  dhkelsc05(klon)     )
544      ALLOCATE(  d_tr_cv01(klon,klev))
545      ALLOCATE(  d_tr_cv02(klon,klev))
546      ALLOCATE(  d_tr_cv03(klon,klev))
547      ALLOCATE(  d_tr_cv04(klon,klev))
548      ALLOCATE(  d_tr_cv05(klon,klev))
549      ALLOCATE(  d_tr_trsp01(klon,klev))
550      ALLOCATE(  d_tr_trsp02(klon,klev))
551      ALLOCATE(  d_tr_trsp03(klon,klev))
552      ALLOCATE(  d_tr_trsp04(klon,klev))
553      ALLOCATE(  d_tr_trsp05(klon,klev))
554      ALLOCATE(  d_tr_sscav01(klon,klev))
555      ALLOCATE(  d_tr_sscav02(klon,klev))
556      ALLOCATE(  d_tr_sscav03(klon,klev))
557      ALLOCATE(  d_tr_sscav04(klon,klev))
558      ALLOCATE(  d_tr_sscav05(klon,klev))
559      ALLOCATE(  d_tr_sat01(klon,klev))
560      ALLOCATE(  d_tr_sat02(klon,klev))
561      ALLOCATE(  d_tr_sat03(klon,klev))
562      ALLOCATE(  d_tr_sat04(klon,klev))
563      ALLOCATE(  d_tr_sat05(klon,klev))
564      ALLOCATE(  d_tr_uscav01(klon,klev))
565      ALLOCATE(  d_tr_uscav02(klon,klev))
566      ALLOCATE(  d_tr_uscav03(klon,klev))
567      ALLOCATE(  d_tr_uscav04(klon,klev))
568      ALLOCATE(  d_tr_uscav05(klon,klev))
569!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
570      ALLOCATE(  d_tr_insc01(klon,klev))
571      ALLOCATE(  d_tr_insc02(klon,klev))
572      ALLOCATE(  d_tr_insc03(klon,klev))
573      ALLOCATE(  d_tr_insc04(klon,klev))
574      ALLOCATE(  d_tr_insc05(klon,klev))
575      ALLOCATE(  d_tr_bcscav01(klon,klev))
576      ALLOCATE(  d_tr_bcscav02(klon,klev))
577      ALLOCATE(  d_tr_bcscav03(klon,klev))
578      ALLOCATE(  d_tr_bcscav04(klon,klev))
579      ALLOCATE(  d_tr_bcscav05(klon,klev))
580      ALLOCATE(  d_tr_evapls01(klon,klev))
581      ALLOCATE(  d_tr_evapls02(klon,klev))
582      ALLOCATE(  d_tr_evapls03(klon,klev))
583      ALLOCATE(  d_tr_evapls04(klon,klev))
584      ALLOCATE(  d_tr_evapls05(klon,klev))
585      ALLOCATE(  d_tr_ls01(klon,klev))
586      ALLOCATE(  d_tr_ls02(klon,klev))
587      ALLOCATE(  d_tr_ls03(klon,klev))
588      ALLOCATE(  d_tr_ls04(klon,klev))
589      ALLOCATE(  d_tr_ls05(klon,klev))
590
591      ALLOCATE(  d_tr_dyn01(klon,klev))
592      ALLOCATE(  d_tr_dyn02(klon,klev))
593      ALLOCATE(  d_tr_dyn03(klon,klev))
594      ALLOCATE(  d_tr_dyn04(klon,klev))
595      ALLOCATE(  d_tr_dyn05(klon,klev))
596
597      ALLOCATE(  d_tr_cl01(klon,klev))
598      ALLOCATE(  d_tr_cl02(klon,klev))
599      ALLOCATE(  d_tr_cl03(klon,klev))
600      ALLOCATE(  d_tr_cl04(klon,klev))
601      ALLOCATE(  d_tr_cl05(klon,klev))
602      ALLOCATE(  d_tr_th01(klon,klev))
603      ALLOCATE(  d_tr_th02(klon,klev))
604      ALLOCATE(  d_tr_th03(klon,klev))
605      ALLOCATE(  d_tr_th04(klon,klev))
606      ALLOCATE(  d_tr_th05(klon,klev))
607
608      ALLOCATE( sed_ss(klon))
609      ALLOCATE( sed_dust(klon))
610      ALLOCATE( sed_dustsco(klon))
611      ALLOCATE( his_g2pgas(klon))
612      ALLOCATE( his_g2paer(klon))
613
614!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
615      ALLOCATE( sed_ss3D(klon,klev))
616      ALLOCATE( sed_dust3D(klon,klev))
617      ALLOCATE( sed_dustsco3D(klon,klev))
618!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
619
620!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
621! histrac_spl
622!
623      ALLOCATE( fluxbb(klon))
624      ALLOCATE( fluxff(klon))
625      ALLOCATE( fluxbcbb(klon))
626      ALLOCATE( fluxbcff(klon))
627      ALLOCATE( fluxbcnff(klon))
628      ALLOCATE( fluxbcba(klon))
629      ALLOCATE( fluxbc(klon))
630      ALLOCATE( fluxombb(klon))
631      ALLOCATE( fluxomff(klon))
632      ALLOCATE( fluxomnff(klon))
633      ALLOCATE( fluxomba(klon))
634      ALLOCATE( fluxomnat(klon))
635      ALLOCATE( fluxom(klon))
636      ALLOCATE( fluxh2sff(klon))
637      ALLOCATE( fluxh2snff(klon))
638      ALLOCATE( fluxso2ff(klon))
639      ALLOCATE( fluxso2nff(klon))
640      ALLOCATE( fluxso2bb(klon))
641      ALLOCATE( fluxso2vol(klon))
642      ALLOCATE( fluxso2ba(klon))
643      ALLOCATE( fluxso2(klon))
644      ALLOCATE( fluxso4ff(klon))
645      ALLOCATE( fluxso4nff(klon))
646      ALLOCATE( fluxso4bb(klon))
647      ALLOCATE( fluxso4ba(klon))
648      ALLOCATE( fluxso4(klon))
649      ALLOCATE( fluxdms(klon))
650      ALLOCATE( fluxh2sbio(klon))
651      ALLOCATE( fluxdustec(klon))
652      ALLOCATE( fluxddfine(klon))
653      ALLOCATE( fluxddcoa(klon))
654      ALLOCATE( fluxddsco(klon))
655      ALLOCATE( fluxdd(klon))
656      ALLOCATE( fluxssfine(klon))
657      ALLOCATE( fluxsscoa(klon))
658      ALLOCATE( fluxss(klon))
659      ALLOCATE( flux_sparam_ind(klon))
660      ALLOCATE( flux_sparam_bb(klon))
661      ALLOCATE( flux_sparam_ff(klon))
662      ALLOCATE( flux_sparam_ddfine(klon))
663      ALLOCATE( flux_sparam_ddcoa(klon))
664      ALLOCATE( flux_sparam_ddsco(klon))
665      ALLOCATE( flux_sparam_ssfine(klon))
666      ALLOCATE( flux_sparam_sscoa(klon))
667      ALLOCATE( u10m_ss(klon))
668      ALLOCATE( v10m_ss(klon))
669
670!AS: in phys_output_write_spl, but not in spla_output_write.h
671!------------------------------------------------------
672      ALLOCATE(d_tr_cl(klon,klev,nbtr))
673      ALLOCATE(d_tr_th(klon,klev,nbtr))
674      ALLOCATE(d_tr_cv(klon,klev,nbtr))
675      ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr))
676      ALLOCATE(d_tr_lessi_nucl(klon,klev,nbtr))
677      ALLOCATE(d_tr_insc(klon,klev,nbtr))
678      ALLOCATE(d_tr_bcscav(klon,klev,nbtr))
679      ALLOCATE(d_tr_evapls(klon,klev,nbtr))
680      ALLOCATE(d_tr_ls(klon,klev,nbtr))
681      ALLOCATE(d_tr_trsp(klon,klev,nbtr))
682      ALLOCATE(d_tr_sscav(klon,klev,nbtr))
683      ALLOCATE(d_tr_sat(klon,klev,nbtr))
684      ALLOCATE(d_tr_uscav(klon,klev,nbtr))
685     
686END SUBROUTINE phytracr_spl_out_init
687
688!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
689SUBROUTINE phytracr_spl_ini(klon,nbreg_ind,nbreg_bb,nbreg_dust,nbreg_wstardust)
690!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
691
692
693  IMPLICIT NONE
694  INTEGER klon,nbreg_ind,nbreg_bb,nbreg_dust,nbreg_wstardust
695
696  ALLOCATE(  tsol(klon)              )
697
698!AS: IF permettant le debranchage des coefs de Jeronimo Escribano: fichiers *_meta
699! nbreg_* sont initialisés à 1 dans phytracr_spl, if debutphy,
700! avant d'appeler la subroutine presente, phytracr_spl_ini
701! (phytracr_spl_ini appele readregionsdims2_spl,
702! qui lit et fait "bcast" de nbreg_ind,_bb,_dust,_wstardust dans fichiers regions_*_meta)
703IF("ASSIM"=="YES") THEN
704  fileregionsdimsind='regions_ind_meta'
705  fileregionsdimsdust='regions_dustacc_meta'
706!  fileregionsdimsdust='regions_dust_meta'
707  fileregionsdimsbb='regions_bb_meta'
708  fileregionsdimswstar='regions_pwstarwake_meta'
709  call  readregionsdims2_spl(nbreg_ind,fileregionsdimsind)
710  call  readregionsdims2_spl(nbreg_dust,fileregionsdimsdust)
711  call  readregionsdims2_spl(nbreg_bb,fileregionsdimsbb)
712  call  readregionsdims2_spl(nbreg_wstardust,fileregionsdimswstar)
713  ENDIF ! ASSIM
714! fin debranchage
715
716!readregions_spl()
717
718  ALLOCATE(scale_param_ind(nbreg_ind))
719  ALLOCATE(scale_param_bb(nbreg_bb))
720  ALLOCATE(scale_param_ff(nbreg_ind))
721  ALLOCATE(scale_param_dustacc(nbreg_dust))
722  ALLOCATE(scale_param_dustcoa(nbreg_dust))
723  ALLOCATE(scale_param_dustsco(nbreg_dust))
724  ALLOCATE(param_wstarBLperregion(nbreg_wstardust))
725  ALLOCATE(param_wstarWAKEperregion(nbreg_wstardust))
726  ALLOCATE(  dust_ec(klon)           )
727  ALLOCATE(  u10m_ec(klon)           )
728  ALLOCATE(  v10m_ec(klon)           )
729  ALLOCATE(  lmt_so2volc_cont(klon)  )
730  ALLOCATE(  lmt_altvolc_cont(klon)  )
731  ALLOCATE(  lmt_so2volc_expl(klon)  )
732  ALLOCATE(  lmt_altvolc_expl(klon)  )
733  ALLOCATE(  lmt_so2ff_l(klon)       )   
734  ALLOCATE(  lmt_so2ff_h(klon)       ) 
735  ALLOCATE(  lmt_so2nff(klon)        ) 
736  ALLOCATE(  lmt_so2ba(klon)         ) 
737  ALLOCATE(  lmt_so2bb_l(klon)       )
738  ALLOCATE(  lmt_so2bb_h(klon)       ) 
739  ALLOCATE(  lmt_dmsconc(klon)       ) 
740  ALLOCATE(  lmt_dmsbio(klon)        ) 
741  ALLOCATE(  lmt_h2sbio(klon)        ) 
742  ALLOCATE(  lmt_bcff(klon)          )
743  ALLOCATE(  lmt_bcnff(klon)         )
744  ALLOCATE(  lmt_bcbb_l(klon)        )
745  ALLOCATE(  lmt_bcbb_h(klon)        )
746  ALLOCATE(  lmt_bcba(klon)          )
747  ALLOCATE(  lmt_omff(klon)          ) 
748  ALLOCATE(  lmt_omnff(klon)         ) 
749  ALLOCATE(  lmt_ombb_l(klon)        ) 
750  ALLOCATE(  lmt_ombb_h(klon)        ) 
751  ALLOCATE(  lmt_omnat(klon)         ) 
752  ALLOCATE(  lmt_omba(klon)          )           
753  ALLOCATE(lmt_sea_salt(klon,ss_bins))
754
755
756
757
758  !temporal hardcoded null inicialization of assimilation emmision factors
759!AS: scale_param sont ensuite lus dans modvalues.nc
760! par la subroutine read_scalenc, appelee par readscaleparamsnc_spl
761  scale_param_ssacc=1.
762  scale_param_sscoa=1.
763  scale_param_ind(:)=1.
764  scale_param_bb(:)=1.
765  scale_param_ff(:)=1.
766  scale_param_dustacc(:)=1.
767  scale_param_dustcoa(:)=1.
768  scale_param_dustsco(:)=1.
769  param_wstarBLperregion(:)=0.
770  param_wstarWAKEperregion(:)=0.
771
772
773RETURN
774END SUBROUTINE phytracr_spl_ini
775
776
777
778
779!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
780      SUBROUTINE phytracr_spl ( debutphy,lafin,jD_cur,jH_cur,iflag_conv, &  ! I
781                      pdtphys,ftsol,                                   &  ! I
782                      t_seri,q_seri,paprs,pplay,RHcl,                  &  ! I
783                      pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,          &  ! I
784                      coefh, cdragh, cdragm, yu1, yv1,                 &  ! I
785                      u_seri, v_seri, rlat,rlon,                       &  ! I
786                      pphis,pctsrf,pmflxr,pmflxs,prfl,psfl,            &  ! I
787                      da,phi,phi2,d1a,dam,mp,ep,sigd,sij,clw,elij,     &  ! I
788                      epmlmMm,eplaMm,upwd,dnwd,itop_con,ibas_con,      &  ! I
789                      evapls,wdtrainA,  wdtrainM,wght_cvfd,              &  ! I
790                      fm_therm, entr_therm, rneb,                      &  ! I
791                      beta_fisrt,beta_v1,                              &  ! I
792                      zu10m,zv10m,wstar,ale_bl,ale_wake,               &  ! I
793                      d_tr_dyn,tr_seri)                                            ! O
794!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
795
796      USE mod_grid_phy_lmdz
797      USE mod_phys_lmdz_para
798      USE IOIPSL
799      USE dimphy
800      USE infotrac
801      USE indice_sol_mod
802      USE write_field_phy
803     
804
805      USE mod_phys_lmdz_transfert_para
806
807  USE phys_cal_mod, only: jD_1jan,year_len, mth_len, days_elapsed, jh_1jan, year_cur, &
808       mth_cur, phys_cal_update
809
810!
811      IMPLICIT none
812!
813
814!======================================================================
815! Auteur(s) FH
816! Objet: Moniteur general des tendances traceurs
817!
818! Remarques en vrac:
819! ------------------
820! 1/ le call phytrac se fait avec nqmax-2 donc nous avons bien
821! les vrais traceurs (nbtr) dans phytrac (pas la vapeur ni eau liquide)
822!======================================================================
823#include "dimensions.h"
824#include "chem.h"
825#include "chem_spla.h"
826#include "YOMCST.h"
827#include "YOETHF.h"
828#include "paramet.h"
829#include "thermcell.h"
830
831!======================================================================
832
833! Arguments:
834!
835!  EN ENTREE:
836!  ==========
837!
838!  divers:
839!  -------
840!
841      real,intent(in) :: pdtphys  ! pas d'integration pour la physique (seconde)
842      REAL, intent(in):: jD_cur, jH_cur
843      real, intent(in) ::  ftsol(klon,nbsrf)  ! temperature du sol par type
844      real, intent(in) ::  t_seri(klon,klev)  ! temperature
845      real, intent(in) ::  u_seri(klon,klev)  ! vent
846      real , intent(in) :: v_seri(klon,klev)  ! vent
847      real , intent(in) :: q_seri(klon,klev)  ! vapeur d eau kg/kg
848
849LOGICAL,  INTENT(IN)                          :: lafin
850
851      real tr_seri(klon,klev,nbtr) ! traceur 
852      real tmp_var(klon,klev) ! auxiliary variable to replace traceur 
853      real tmp_var2(klon,nbtr) ! auxiliary variable to replace source
854      real tmp_var3(klon,klev,nbtr) ! auxiliary variable 3D 
855      real dummy1d ! JE auxiliary variable
856      real aux_var2(klon) ! auxiliary variable to replace traceur 
857      real aux_var3(klon,klev) ! auxiliary variable to replace traceur 
858      real d_tr(klon,klev,nbtr)    ! traceur  tendance
859      real sconc_seri(klon,nbtr) ! surface concentration of traceur 
860!
861      integer nbjour
862      save nbjour
863!$OMP THREADPRIVATE(nbjour)
864!
865      INTEGER  masque_aqua_cur(klon)
866      INTEGER  masque_terra_cur(klon)
867      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: masque_aqua  !mask for 1 day
868      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: masque_terra !
869!$OMP THREADPRIVATE(masque_aqua,masque_terra)
870
871  INTEGER, SAVE :: nbreg_dust, nbreg_ind, nbreg_bb, nbreg_ss,nbreg_wstardust
872  !$OMP THREADPRIVATE(nbreg_dust, nbreg_ind, nbreg_bb,nbreg_ss,nbreg_wstardust)
873
874
875
876      REAL lmt_dms(klon)           ! emissions de dms
877
878!JE20150518<<
879      REAL, DIMENSION(klon_glo)  :: aod550_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
880      REAL, DIMENSION(klon_glo)  :: aod550_tr2_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
881      REAL, DIMENSION(klon_glo)  :: aod550_ss_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
882      REAL, DIMENSION(klon_glo)  :: aod550_dust_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
883      REAL, DIMENSION(klon_glo)  :: aod550_dustsco_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
884      REAL, DIMENSION(klon_glo)  :: aod670_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
885      REAL, DIMENSION(klon_glo)  :: aod670_tr2_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
886      REAL, DIMENSION(klon_glo)  :: aod670_ss_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
887      REAL, DIMENSION(klon_glo)  :: aod670_dust_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
888      REAL, DIMENSION(klon_glo)  :: aod670_dustsco_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
889      REAL, DIMENSION(klon_glo)  :: aod865_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
890      REAL, DIMENSION(klon_glo)  :: aod865_tr2_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
891      REAL, DIMENSION(klon_glo)  :: aod865_ss_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
892      REAL, DIMENSION(klon_glo)  :: aod865_dust_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
893      REAL, DIMENSION(klon_glo)  :: aod865_dustsco_terra_glo  ! AOD at terra overpass time ( 10.30 local hour)
894
895      REAL, DIMENSION(klon_glo)  :: aod550_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
896      REAL, DIMENSION(klon_glo)  :: aod550_tr2_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
897      REAL, DIMENSION(klon_glo)  :: aod550_ss_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
898      REAL, DIMENSION(klon_glo)  :: aod550_dust_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
899      REAL, DIMENSION(klon_glo)  :: aod550_dustsco_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
900      REAL, DIMENSION(klon_glo)  :: aod670_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
901      REAL, DIMENSION(klon_glo)  :: aod670_tr2_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
902      REAL, DIMENSION(klon_glo)  :: aod670_ss_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
903      REAL, DIMENSION(klon_glo)  :: aod670_dust_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
904      REAL, DIMENSION(klon_glo)  :: aod670_dustsco_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
905      REAL, DIMENSION(klon_glo)  :: aod865_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
906      REAL, DIMENSION(klon_glo)  :: aod865_tr2_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
907      REAL, DIMENSION(klon_glo)  :: aod865_ss_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
908      REAL, DIMENSION(klon_glo)  :: aod865_dust_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
909      REAL, DIMENSION(klon_glo)  :: aod865_dustsco_aqua_glo  ! AOD at aqua overpass time ( 13.30 local hour)
910!!!!!!!!!!!!!
911!JE20150518>>
912
913
914
915
916      real , intent(in) :: paprs(klon,klev+1)  ! pression pour chaque inter-couche (en Pa)
917      real , intent(in) :: pplay(klon,klev)  ! pression pour le mileu de chaque couche (en Pa)
918      real , intent(in) :: RHcl(klon,klev)  ! humidite relativen ciel clair
919      real znivsig(klev)  ! indice des couches
920      real paire(klon)
921      real, intent(in) ::  pphis(klon)
922      real, intent(in) ::  pctsrf(klon,nbsrf)
923      logical , intent(in) :: debutphy   ! le flag de l'initialisation de la physique
924!
925!  Scaling Parameters:
926!  ----------------------
927!
928      CHARACTER*50 c_Directory
929      CHARACTER*80 c_FileName1
930      CHARACTER*80 c_FileName2
931      CHARACTER*130 c_FullName1
932      CHARACTER*130 c_FullName2
933      INTEGER :: xidx, yidx
934      INTEGER,DIMENSION(klon) :: mask_bbreg
935      INTEGER,DIMENSION(klon) :: mask_ffso2reg
936      INTEGER :: aux_mask1
937      INTEGER :: aux_mask2
938      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: iregion_so4 !Defines regions for SO4 ; AS: PAS UTILISE!
939      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: iregion_ind  !Defines regions for SO2, BC & OM
940      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: iregion_bb   !Defines regions for SO2, BC & OM
941      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: iregion_dust !Defines  dust regions
942      INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: iregion_wstardust !Defines  dust regions
943!$OMP THREADPRIVATE(iregion_so4,iregion_ind,iregion_bb,iregion_dust,iregion_wstardust)
944
945!  Emissions:
946
947!
948!---------------------------- SEA SALT & DUST emissions ------------------------
949      REAL lmt_sea_salt(klon,ss_bins) !Sea salt 0.03-8.0 um
950      REAL u10m_ec1(klon),v10m_ec1(klon)
951      REAL u10m_ec2(klon),v10m_ec2(klon),dust_ec2(klon)
952      REAL dust_ec(klon)
953!     new dust emission chimere je20140522
954      REAL,DIMENSION(klon),INTENT(IN)                     :: zu10m
955      REAL,DIMENSION(klon),INTENT(IN)                     :: zv10m
956      REAL,DIMENSION(klon),INTENT(IN)  :: wstar,ale_bl,ale_wake
957
958
959!
960!  Rem : nbtr : nombre de vrais traceurs est defini dans dimphy.h
961
962!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
963     !Dynamique
964     !--------
965      REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)    :: d_tr_dyn
966
967!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
968!  convection:
969!  -----------
970!
971      REAL , intent(in) :: pmfu(klon,klev)  ! flux de masse dans le panache montant
972      REAL , intent(in) :: pmfd(klon,klev)  ! flux de masse dans le panache descendant
973      REAL, intent(in) ::  pen_u(klon,klev) ! flux entraine dans le panache montant
974      REAL, intent(in) ::  pde_u(klon,klev) ! flux detraine dans le panache montant
975      REAL, intent(in) ::  pen_d(klon,klev) ! flux entraine dans le panache descendant
976      REAL, intent(in) ::  pde_d(klon,klev) ! flux detraine dans le panache descendant
977!
978!  Convection KE scheme:
979!  ---------------------
980!
981!! Variables pour le lessivage convectif
982       REAL,DIMENSION(klon,klev),INTENT(IN)     :: da
983       REAL,DIMENSION(klon,klev,klev),INTENT(IN):: phi
984       REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2
985       REAL,DIMENSION(klon,klev),INTENT(IN)      :: d1a,dam
986       REAL,DIMENSION(klon,klev),INTENT(IN)     :: mp
987       REAL,DIMENSION(klon,klev),INTENT(IN)     :: upwd      ! saturated
988!            updraft mass flux
989       REAL,DIMENSION(klon,klev),INTENT(IN)     :: dnwd      ! saturated
990!            downdraft mass flux
991       INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
992       INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
993       REAL,DIMENSION(klon,klev)      :: evapls
994       REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainA
995       REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainM
996
997
998       REAL,DIMENSION(klon,klev),INTENT(IN)      :: ep
999       REAL,DIMENSION(klon),INTENT(IN)           :: sigd
1000       REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij
1001       REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw
1002       REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij
1003       REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm
1004       REAL,DIMENSION(klon,klev),INTENT(IN)      :: eplaMm
1005       REAL,DIMENSION(klon,klev),INTENT(IN)      :: wght_cvfd          !RL
1006
1007
1008!     KE: Tendances de traceurs (Td) et flux de traceurs:
1009!     ------------------------
1010       REAL,DIMENSION(klon,klev)      :: Mint
1011       REAL,DIMENSION(klon,klev,nbtr) :: zmfd1a
1012       REAL,DIMENSION(klon,klev,nbtr) :: zmfdam
1013       REAL,DIMENSION(klon,klev,nbtr) :: zmfphi2
1014
1015!                                                        !tra dans pluie LS a la surf.
1016!      outputs for cvltr_spl
1017       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cv_o 
1018       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_trsp_o
1019       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sscav_o
1020       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_sat_o
1021       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_uscav_o
1022     !!!!!!!!!!!!!!!!!
1023     !!!!!!!!!!!!!!!!!
1024     !!!!!!!!!!!!!!!!!
1025       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_insc_o
1026       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_bcscav_o
1027       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_evapls_o
1028       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_ls_o
1029       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_dyn_o
1030       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_cl_o
1031       REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_th_o
1032     !!!!!!!!!!!!!!!!!
1033     !!!!!!!!!!!!!!!!!
1034     !!!!!!!!!!!!!!!!!
1035
1036!$OMP THREADPRIVATE(d_tr_cv_o,d_tr_trsp_o,d_tr_sscav_o,d_tr_sat_o,d_tr_uscav_o)
1037!$OMP THREADPRIVATE(d_tr_insc_o,d_tr_bcscav_o,d_tr_evapls_o,d_tr_ls_o)
1038!$OMP THREADPRIVATE(d_tr_dyn_o,d_tr_cl_o,d_tr_th_o)
1039
1040
1041       INTEGER ::  nsplit
1042!
1043
1044     
1045
1046!
1047!  Lessivage
1048!  ---------
1049!
1050      REAL, intent(in) ::  pmflxr(klon,klev+1), pmflxs(klon,klev+1)   !--convection
1051      REAL, intent(in) ::  prfl(klon,klev+1),   psfl(klon,klev+1)     !--large-scale
1052      REAL :: ql_incl ! contenu en eau liquide nuageuse dans le nuage ! ql_incl=oliq/rneb
1053      REAL  :: ql_incloud_ref    ! ref value of in-cloud condensed water content
1054
1055       REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
1056!
1057
1058      REAL,DIMENSION(klon,klev) :: beta_fisrt ! taux de conversion
1059!                                                          ! de l'eau cond (de fisrtilp)
1060      REAL,DIMENSION(klon,klev) :: beta_v1    ! -- (originale version)
1061      INTEGER,SAVE  :: iflag_lscav_omp,iflag_lscav
1062!$OMP THREADPRIVATE(iflag_lscav_omp,iflag_lscav)
1063
1064
1065
1066
1067!Thermiques:
1068!----------
1069      REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: fm_therm
1070      REAL,DIMENSION(klon,klev),INTENT(IN)     :: entr_therm
1071
1072
1073!
1074!  Couche limite:
1075!  --------------
1076!
1077      REAL , intent(in) :: coefh(klon,klev) ! coeff melange CL
1078      REAL , intent(in) :: cdragh(klon), cdragm(klon)
1079      REAL, intent(in) ::  yu1(klon)        ! vent dans la 1iere couche
1080      REAL, intent(in) ::  yv1(klon)        ! vent dans la 1iere couche
1081!
1082!
1083!----------------------------------------------------------------------
1084      REAL his_ds(klon,nbtr)
1085      REAL his_dh(klon,nbtr)
1086      REAL his_dhlsc(klon,nbtr)        ! in-cloud scavenging lsc
1087      REAL his_dhcon(klon,nbtr)       ! in-cloud scavenging con
1088      REAL his_dhbclsc(klon,nbtr)      ! below-cloud scavenging lsc
1089      REAL his_dhbccon(klon,nbtr)      ! below-cloud scavenging con
1090      REAL trm(klon,nbtr)
1091!
1092      REAL u10m_ec(klon), v10m_ec(klon)
1093!
1094      REAL his_th(klon,nbtr)
1095      REAL his_dhkecv(klon,nbtr)
1096      REAL his_dhkelsc(klon,nbtr)
1097
1098
1099!
1100!  Coordonnees
1101!  -----------
1102!
1103      REAL, intent(in) ::  rlat(klon)       ! latitudes pour chaque point
1104      REAL, intent(in) ::  rlon(klon)       ! longitudes pour chaque point
1105!
1106      INTEGER i, k, it, j, ig
1107!
1108! DEFINITION OF DIAGNOSTIC VARIABLES
1109!
1110      REAL diag_trm(nbtr), diag_drydep(nbtr)
1111      REAL diag_wetdep(nbtr), diag_cvtdep(nbtr)
1112      REAL diag_emissn(nbtr), diag_g2part
1113      REAL diag_sedimt
1114      REAL trm_aux(nbtr), src_aux(nbtr)
1115!
1116! Variables locales pour effectuer les appels en serie
1117!----------------------------------------------------
1118      REAL source_tr(klon,nbtr)
1119      REAL flux_tr(klon,nbtr)
1120      REAL m_conc(klon,klev)
1121      REAL henry(nbtr)  !--cste de Henry  mol/l/atm
1122      REAL kk(nbtr)     !--coefficient de var avec T (K)
1123      REAL alpha_r(nbtr)!--coefficient d'impaction pour la pluie
1124      REAL alpha_s(nbtr)!--coefficient d'impaction pour la neige
1125      REAL vdep_oce(nbtr), vdep_sic(nbtr)
1126      REAL vdep_ter(nbtr), vdep_lic(nbtr)
1127      REAL ccntrAA_spla(nbtr)
1128      REAL ccntrENV_spla(nbtr)
1129      REAL coefcoli_spla(nbtr)
1130      REAL dtrconv(klon,nbtr)
1131      REAL zrho(klon,klev), zdz(klon,klev)
1132      REAL zalt(klon,klev)
1133      REAL,DIMENSION(klon,klev)      :: zmasse    ! densité atmosphérique
1134!     .                                              Kg/m2
1135      REAL,DIMENSION(klon,klev)      :: ztra_th
1136      REAL qmin, qmax, aux
1137!      PARAMETER (qmin=0.0, qmax=1.e33)
1138      PARAMETER (qmin=1.e33, qmax=-1.e33)
1139
1140! Variables to save data into file
1141!----------------------------------
1142   
1143      CHARACTER*2 str2
1144!!AS:      LOGICAL ok_histrac
1145!!!JE2014124      PARAMETER (ok_histrac=.true.)
1146!!      PARAMETER (ok_histrac=.false.)
1147      INTEGER ndex2d(iim*(jjm+1)), ndex3d(iim*(jjm+1)*klev)
1148      INTEGER nhori1, nhori2, nhori3, nhori4, nhori5, nvert
1149      INTEGER nid_tra1, nid_tra2, nid_tra3, nid_tra4, nid_tra5
1150      SAVE nid_tra1, nid_tra2, nid_tra3, nid_tra4, nid_tra5
1151!$OMP THREADPRIVATE(nid_tra1, nid_tra2, nid_tra3, nid_tra4, nid_tra5)
1152      INTEGER itra
1153      SAVE itra                    ! compteur pour la physique
1154!$OMP THREADPRIVATE(itra)
1155      INTEGER ecrit_tra, ecrit_tra_h, ecrit_tra_m
1156      SAVE ecrit_tra, ecrit_tra_h, ecrit_tra_m
1157!$OMP THREADPRIVATE(ecrit_tra, ecrit_tra_h, ecrit_tra_m)
1158      REAL presnivs(klev) ! pressions approximat. des milieux couches ( en PA)
1159      REAL zx_tmp_2d(iim,jjm+1), zx_tmp_3d(iim,jjm+1,klev)
1160      REAL zx_tmp_fi2d(klon), zx_tmp_fi3d(klon, klev)
1161      REAL zx_lon_glo(nbp_lon,nbp_lat), zx_lat_glo(nbp_lon,nbp_lat)
1162      REAL zsto, zout, zout_h, zout_m, zjulian
1163
1164!------Molar Masses
1165      REAL masse(nbtr)
1166!
1167      REAL fracso2emis                              !--fraction so2 emis en so2
1168      PARAMETER (fracso2emis=0.95)
1169      REAL frach2sofso2                             !--fraction h2s from so2
1170      PARAMETER (frach2sofso2=0.0426)
1171!
1172!  Controles
1173!-------------
1174      LOGICAL convection,lessivage,lminmax,lcheckmass
1175      DATA convection,lessivage,lminmax,lcheckmass &
1176          /.true.,.true.,.true.,.false./
1177!
1178      REAL xconv(nbtr)
1179!
1180      LOGICAL anthropo, bateau, edgar
1181      DATA anthropo,bateau,edgar/.true.,.true.,.true./
1182!
1183!c bc_source
1184      INTEGER kminbc, kmaxbc
1185!JE20150715      PARAMETER (kminbc=3, kmaxbc=5)
1186      PARAMETER (kminbc=4, kmaxbc=7)
1187!
1188      REAL tr1_cont, tr2_cont, tr3_cont, tr4_cont
1189!
1190! JE for updating in  cltrac
1191      REAL,DIMENSION(klon,klev)             :: delp     ! epaisseur de couche (Pa)
1192!! JE for include gas to particle conversion in output
1193!      REAL his_g2pgas(klon)      ! gastoparticle in gas units (check!)
1194!      REAL his_g2paer(klon)      ! gastoparticle in aerosol units (check!)
1195!
1196      INTEGER ,intent(in) :: iflag_conv
1197      LOGICAL iscm3  ! debug variable. for checkmass ! JE
1198
1199!------------------------------------------------------------------------
1200!  only to compute time consumption of each process
1201!----
1202      INTEGER clock_start,clock_end,clock_rate,clock_start_spla
1203      INTEGER clock_end_outphytracr,clock_start_outphytracr
1204      INTEGER ti_init,dife,ti_inittype,ti_inittwrite
1205      INTEGER ti_spla,ti_emis,ti_depo,ti_cltr,ti_ther
1206      INTEGER ti_sedi,ti_gasp,ti_wetap,ti_cvltr,ti_lscs,ti_brop,ti_outs
1207      INTEGER ti_nophytracr,clock_per_max
1208      REAL tia_init,tia_inittype,tia_inittwrite
1209      REAL tia_spla,tia_emis,tia_depo,tia_cltr,tia_ther
1210      REAL tia_sedi,tia_gasp,tia_wetap,tia_cvltr,tia_lscs
1211      REAL tia_brop,tia_outs
1212      REAL tia_nophytracr
1213 
1214      SAVE tia_init,tia_inittype,tia_inittwrite
1215      SAVE tia_spla,tia_emis,tia_depo,tia_cltr,tia_ther
1216      SAVE tia_sedi,tia_gasp,tia_wetap,tia_cvltr,tia_lscs
1217      SAVE tia_brop,tia_outs
1218      SAVE ti_nophytracr
1219      SAVE tia_nophytracr
1220      SAVE clock_end_outphytracr,clock_start_outphytracr
1221      SAVE clock_per_max
1222      LOGICAL logitime
1223!$OMP THREADPRIVATE(tia_init,tia_inittype,tia_inittwrite)
1224!$OMP THREADPRIVATE(tia_spla,tia_emis,tia_depo,tia_cltr,tia_ther)
1225!$OMP THREADPRIVATE(tia_sedi,tia_gasp,tia_wetap,tia_cvltr,tia_lscs)
1226!$OMP THREADPRIVATE(tia_brop,tia_outs)
1227!$OMP THREADPRIVATE(ti_nophytracr)
1228!$OMP THREADPRIVATE(tia_nophytracr)
1229!$OMP THREADPRIVATE(clock_end_outphytracr,clock_start_outphytracr)
1230!$OMP THREADPRIVATE(clock_per_max)
1231
1232!     utils parallelization
1233      REAL :: auxklon_glo(klon_glo)
1234      INTEGER :: iauxklon_glo(klon_glo)
1235      REAL, DIMENSION(klon_glo,nbp_lev) :: auxklonnbp_lev
1236      REAL, DIMENSION(klon_glo,nbp_lev,nbtr)  :: auxklonklevnbtr_glo
1237      REAL,DIMENSION(nbp_lon,nbp_lat) ::  zx_tmp_2d_glo
1238      REAL,DIMENSION(nbp_lon,nbp_lat,nbp_lev) :: zx_tmp_3d_glo
1239      REAL,DIMENSION(klon_glo) :: zx_tmp_fi2d_glo
1240      REAL,DIMENSION(klon_glo , nbp_lev) :: zx_tmp_fi3d_glo
1241      REAL,DIMENSION(klon_glo,nbtr) :: auxklonnbtr_glo
1242
1243
1244
1245      source_tr=0.
1246
1247
1248
1249      if (debutphy) then
1250#ifdef IOPHYS_DUST
1251         CALL iophys_ini(pdtphys)
1252#endif
1253         nbreg_ind=1
1254         nbreg_bb=1
1255         nbreg_dust=1
1256         nbreg_wstardust=1
1257         CALL phytracr_spl_ini(klon,nbreg_ind,nbreg_bb,nbreg_dust,nbreg_wstardust)
1258      endif
1259
1260
1261#ifdef IOPHYS_DUST
1262      do it=1,nbtr
1263         write(str2,'(i2.2)') it
1264         call iophys_ecrit('TRA'//str2,klev,'SOURCE','',tr_seri(:,:,it))
1265      enddo
1266#endif
1267
1268 
1269
1270
1271  ijulday=jD_cur-jD_1jan+1
1272  nbjour = 1
1273
1274  paramname_ind='ind'
1275  paramname_bb='bb'
1276  paramname_ff='ind'
1277  paramname_dustacc='dustacc'
1278  paramname_dustcoa='dustcoasco'
1279  paramname_dustsco='dustcoasco'
1280!  paramname_dustacc='dust'
1281!  paramname_dustcoa='dust'
1282!  paramname_dustsco='dust'
1283  paramname_wstarBL='pwstarbl'
1284  paramname_wstarWAKE='pwstarwake'
1285  paramname_ssacc='ssacc'
1286  paramname_sscoa='sscoa'
1287
1288  filescaleparams='modvalues.nc'
1289!AS: debranchage de lecture des coefs d'assmilation de Jeronimo Escribano
1290  IF("ASSIM"=="YES") THEN
1291    CALL readscaleparamsnc_spl(scale_param_ind,                        &
1292        nbreg_ind, paramname_ind,                                    &
1293        scale_param_ff, nbreg_ind,paramname_ff,                      &
1294        scale_param_bb, nbreg_bb,paramname_bb,                       &
1295        scale_param_dustacc, nbreg_dust,paramname_dustacc,           &
1296        scale_param_dustcoa, nbreg_dust,paramname_dustcoa,           &
1297        scale_param_dustsco, nbreg_dust,paramname_dustsco,           &
1298        param_wstarBLperregion, nbreg_wstardust, paramname_wstarBL, &
1299        param_wstarWAKEperregion, nbreg_wstardust, paramname_wstarWAKE, &
1300        scale_param_ssacc  ,  paramname_ssacc,                    &
1301        scale_param_sscoa  ,  paramname_sscoa,                    &
1302           filescaleparams,ijulday,jH_cur, pdtphys,debutphy)
1303  ENDIF ! ASSIM
1304!AS: le commentaire suivant "add seasalt" ne semble pas avoir ete mis en pratique.
1305! Des fichiers regions_ssacc et _sscoa existent mais ne semblent pas lus.
1306! Ca reste donc aux valeurs initialisées: nbreg_ss=1, scale_param_ss*=1, cf fichiers ss et modvalues
1307!! add seasalt
1308
1309  print *,'JE : check scale_params'
1310
1311  print *, 'nbreg_ind', nbreg_ind   
1312  print *, 'nbreg_dust', nbreg_dust 
1313  print *, 'nbreg_bb', nbreg_bb   
1314  print *, 'ind', scale_param_ind   
1315  print *, 'dustacc', scale_param_dustacc 
1316  print *, 'dustcoa', scale_param_dustcoa 
1317  print *, 'dustsco', scale_param_dustsco
1318  print *, 'wstardustBL', param_wstarBLperregion
1319  print *, 'wstardustWAKE', param_wstarWAKEperregion
1320  print *, 'ff', scale_param_ff 
1321  print *, 'bb', scale_param_bb 
1322  print *, 'ssacc', scale_param_ssacc
1323  print *, 'sscoa', scale_param_sscoa
1324
1325  print *,'JE: before read_newemissions '
1326  print *,'JE: jD_cur:',jD_cur,' ijulday:',ijulday,' jH_cur:',jH_cur,' pdtphys:',pdtphys
1327  print *,'JE: now read_newemissions:'
1328!AS: La ligne suivante fait planter a l'execution : lmt_so2ff_l pas initialise
1329!  print *,'lmt_so2ff_l AVANT' , MINVAL(lmt_so2ff_l), MAXVAL(lmt_so2ff_l)
1330  call read_newemissions(ijulday,jH_cur ,edgar, flag_dms,debutphy, & !I
1331                         pdtphys, lafin, nbjour, pctsrf,  &       !I
1332                         t_seri, rlat, rlon, &                         !I
1333                         pmflxr, pmflxs, prfl, psfl, &            !I
1334                                 u10m_ec, v10m_ec, dust_ec, &     !O
1335                                 lmt_sea_salt, lmt_so2ff_l, &     !O
1336                                 lmt_so2ff_h, lmt_so2nff, &       !O
1337                                 lmt_so2ba, lmt_so2bb_l, lmt_so2bb_h, &  !O
1338                                 lmt_so2volc_cont, lmt_altvolc_cont, &   !O
1339                                 lmt_so2volc_expl, lmt_altvolc_expl, &   !O
1340                                 lmt_dmsbio, lmt_h2sbio, lmt_dmsconc, &  !O
1341                                 lmt_bcff, lmt_bcnff, lmt_bcbb_l, &      !O
1342                                 lmt_bcbb_h, lmt_bcba, lmt_omff, &       !O
1343                                 lmt_omnff, lmt_ombb_l, lmt_ombb_h, &    !O
1344                                 lmt_omnat, lmt_omba)                    !O
1345
1346
1347  print *,'Check emissions'
1348  print *,'lmt_so2ff_l' , MINVAL(lmt_so2ff_l), MAXVAL(lmt_so2ff_l)
1349  print *,'lmt_so2ff_h' , MINVAL(lmt_so2ff_h), MAXVAL(lmt_so2ff_h)
1350  print *,'lmt_so2nff' , MINVAL(lmt_so2nff), MAXVAL(lmt_so2nff)
1351  print *,'lmt_so2ba' , MINVAL(lmt_so2ba), MAXVAL(lmt_so2ba)
1352  print *,'lmt_so2bb_l' , MINVAL(lmt_so2bb_l), MAXVAL(lmt_so2bb_l)
1353  print *,'lmt_so2bb_h' , MINVAL(lmt_so2bb_h), MAXVAL(lmt_so2bb_h)
1354  print *,'lmt_so2volc_cont' , MINVAL(lmt_so2volc_cont), MAXVAL(lmt_so2volc_cont)
1355  print *,'lmt_altvolc_cont' , MINVAL(lmt_altvolc_cont), MAXVAL(lmt_altvolc_cont)
1356  print *,'lmt_so2volc_expl' , MINVAL(lmt_so2volc_expl), MAXVAL(lmt_so2volc_expl)
1357  print *,'lmt_altvolc_expl' , MINVAL(lmt_altvolc_expl), MAXVAL(lmt_altvolc_expl)
1358  print *,'lmt_dmsbio' , MINVAL(lmt_dmsbio), MAXVAL(lmt_dmsbio)
1359  print *,'lmt_h2sbio' , MINVAL(lmt_h2sbio), MAXVAL(lmt_h2sbio)
1360  print *,'lmt_dmsconc' , MINVAL(lmt_dmsconc), MAXVAL(lmt_dmsconc)
1361  print *,'lmt_bcff' , MINVAL(lmt_bcff), MAXVAL(lmt_bcff)
1362  print *,'lmt_bcnff' , MINVAL(lmt_bcnff), MAXVAL(lmt_bcnff)
1363  print *,'lmt_bcbb_l' , MINVAL(lmt_bcbb_l), MAXVAL(lmt_bcbb_l)
1364  print *,'lmt_bcbb_h' , MINVAL(lmt_bcbb_h), MAXVAL(lmt_bcbb_h)
1365  print *,'lmt_bcba' , MINVAL(lmt_bcba), MAXVAL(lmt_bcba)
1366  print *,'lmt_omff' , MINVAL(lmt_omff), MAXVAL(lmt_omff)
1367  print *,'lmt_omnff' , MINVAL(lmt_omnff), MAXVAL(lmt_omnff)
1368  print *,'lmt_ombb_l' , MINVAL(lmt_ombb_l), MAXVAL(lmt_ombb_l)
1369  print *,'lmt_ombb_h' , MINVAL(lmt_ombb_h), MAXVAL(lmt_ombb_h)
1370  print *,'lmt_omnat' , MINVAL(lmt_omnat), MAXVAL(lmt_omnat)
1371  print *,'lmt_omba' , MINVAL(lmt_omba), MAXVAL(lmt_omba)
1372  print *,'JE iflag_con',iflag_conv
1373
1374
1375!JE_dbg
1376   do i=1,klon
1377      tsol(i)=0.0
1378      do j=1,nbsrf
1379          tsol(i)=tsol(i)+ftsol(i,j)*pctsrf(i,j)
1380      enddo
1381   enddo
1382
1383
1384!======================================================================
1385!  INITIALISATIONS
1386!======================================================================
1387!             CALL checknanqfi(da(:,:),1.,-1.,' da_ before
1388!     . phytracr_inphytracr')
1389
1390!
1391! computing time
1392!        logitime=.true.
1393        logitime=.false.
1394        IF (logitime) THEN
1395        clock_start=0
1396        clock_end=0
1397        clock_rate=0
1398       CALL SYSTEM_CLOCK(COUNT_RATE=clock_rate,COUNT_MAX=clock_per_max)
1399        CALL SYSTEM_CLOCK(COUNT=clock_start_spla)
1400        clock_start=clock_start_spla
1401        clock_end_outphytracr=clock_start_spla
1402        ENDIF
1403
1404
1405! Definition of tracers index.
1406      print*,'OK ON PASSSE BIEN LA'
1407      CALL minmaxsource(source_tr,qmin,qmax,'A1 maxsource init phytracr')
1408
1409
1410      IF (debutphy) THEN
1411        id_prec=-1
1412        id_fine=-1
1413        id_coss=-1
1414        id_codu=-1
1415        id_scdu=-1
1416       !print *,nbtr
1417       do it=1,nbtr
1418        print *, it, tname(it+nqo)
1419        if (tname(it+nqo) == 'PREC' ) then
1420            id_prec=it
1421        endif
1422        if (tname(it+nqo) == 'FINE' ) then
1423            id_fine=it
1424        endif
1425        if (tname(it+nqo) == 'COSS' ) then
1426            id_coss=it
1427        endif
1428        if (tname(it+nqo) == 'CODU' ) then
1429            id_codu=it
1430        endif
1431        if (tname(it+nqo) == 'SCDU' ) then
1432            id_scdu=it
1433        endif
1434       enddo
1435       ! check consistency with dust emission scheme:
1436       if (ok_chimeredust) then
1437          if (.not.( id_scdu>0 .and. id_codu>0 .and. id_fine>0)) then
1438             call abort_gcm('phytracr_mod', 'pb in ok_chimdust 0',1)
1439          endif
1440       else
1441          if (id_scdu>0) then
1442       call abort_gcm('phytracr_mod', 'pb in ok_chimdust 1 SCDU',1)
1443          endif
1444          if ( (id_codu .le. 0) .or. ( id_fine.le.0)  ) then 
1445          call abort_gcm('phytracr_mod', 'pb in ok_chimdust 1',1)
1446          endif
1447       endif
1448
1449
1450       !print *,id_prec,id_fine,id_coss,id_codu,id_scdu
1451       ENDIF
1452
1453
1454
1455
1456
1457
1458!---fraction of tracer that is convected (Tiedke)
1459      xconv(:)=0.
1460      if(id_prec>0)  xconv(id_prec)=0.8
1461      if(id_fine>0)  xconv(id_fine)=0.5
1462      if(id_coss>0)  xconv(id_coss)=0.5
1463      if(id_codu>0)  xconv(id_codu)=0.6
1464      if(id_scdu>0)  xconv(id_scdu)=0.6  !!JE fix
1465
1466      masse(:)=1.
1467      if(id_prec>0)  masse(id_prec)=32.
1468      if(id_fine>0)  masse(id_fine)=6.02e23
1469      if(id_coss>0)  masse(id_coss)=6.02e23
1470      if(id_codu>0)  masse(id_codu)=6.02e23
1471      if(id_scdu>0)  masse(id_scdu)=6.02e23
1472
1473      henry(:)=0.
1474      if(id_prec>0)  henry(id_prec)=1.4
1475      if(id_fine>0)  henry(id_fine)=0.0
1476      if(id_coss>0)  henry(id_coss)=0.0
1477      if(id_codu>0)  henry(id_codu)=0.0
1478      if(id_scdu>0)  henry(id_scdu)=0.0
1479      !henry= (/1.4, 0.0, 0.0, 0.0/)
1480      kk(:)=0.
1481      if(id_prec>0)  kk(id_prec)=2900.
1482      if(id_fine>0)  kk(id_fine)=0.0
1483      if(id_coss>0)  kk(id_coss)=0.0
1484      if(id_codu>0)  kk(id_codu)=0.0
1485      if(id_scdu>0)  kk(id_scdu)=0.0
1486      !kk = (/2900., 0., 0., 0./)
1487      alpha_r(:)=0.
1488      if(id_prec>0)  alpha_r(id_prec)=0.0
1489      if(id_fine>0)  alpha_r(id_fine)=0.001
1490      if(id_coss>0)  alpha_r(id_coss)=0.001
1491      if(id_codu>0)  alpha_r(id_codu)=0.001
1492      if(id_scdu>0)  alpha_r(id_scdu)=0.001  !JE fix
1493      alpha_s(:)=0.
1494      if(id_prec>0)  alpha_s(id_prec)=0.0
1495      if(id_fine>0)  alpha_s(id_fine)=0.01
1496      if(id_coss>0)  alpha_s(id_coss)=0.01
1497      if(id_codu>0)  alpha_s(id_codu)=0.01
1498      if(id_scdu>0)  alpha_s(id_scdu)=0.01  !JE fix
1499
1500!      alpha_r =  (/0., 0.001, 0.001, 0.001/)
1501!      alpha_s = (/0., 0.01, 0.01, 0.01/)
1502
1503! nhl      DATA vdep_oce /0.7, 0.05, 1.2, 1.2/
1504! nhl vdep_oce for tr1 is a weighted average of dms and so2 dep velocities
1505      !vdep_oce = (/0.28, 0.28, 1.2, 1.2/)
1506      vdep_oce(:)=0.
1507      if(id_prec>0)  vdep_oce(id_prec) = 0.28
1508      if(id_fine>0)  vdep_oce(id_fine) = 0.28
1509      if(id_coss>0)  vdep_oce(id_coss) = 1.2
1510      if(id_codu>0)  vdep_oce(id_codu) = 1.2
1511      if(id_scdu>0)  vdep_oce(id_scdu) = 1.2
1512      vdep_sic(:)=0.
1513      if(id_prec>0)  vdep_sic(id_prec) = 0.2
1514      if(id_fine>0)  vdep_sic(id_fine) = 0.17
1515      if(id_coss>0)  vdep_sic(id_coss) = 1.2
1516      if(id_codu>0)  vdep_sic(id_codu) = 1.2
1517      if(id_scdu>0)  vdep_sic(id_scdu) = 1.2
1518
1519      !vdep_sic = (/0.2, 0.17, 1.2, 1.2/)     
1520      !vdep_ter = (/0.3, 0.14, 1.2, 1.2/)
1521      vdep_ter(:)=0.
1522      if(id_prec>0)  vdep_ter(id_prec) = 0.3
1523      if(id_fine>0)  vdep_ter(id_fine) = 0.14
1524      if(id_coss>0)  vdep_ter(id_coss) = 1.2
1525      if(id_codu>0)  vdep_ter(id_codu) = 1.2
1526      if(id_scdu>0)  vdep_ter(id_scdu) = 1.2
1527
1528      vdep_lic(:)=0.
1529      if(id_prec>0)  vdep_lic(id_prec) = 0.2
1530      if(id_fine>0)  vdep_lic(id_fine) = 0.17
1531      if(id_coss>0)  vdep_lic(id_coss) = 1.2
1532      if(id_codu>0)  vdep_lic(id_codu) = 1.2
1533      if(id_scdu>0)  vdep_lic(id_scdu) = 1.2
1534
1535
1536      ! convective KE lessivage aer params:
1537      ! AS: #DFB (Binta) a aussi teste ccntrAA_spla=ccntrENV_spla=0.9/1.0/0.9/0.9
1538      !     mais effet negligeable sur l'AOD
1539      ccntrAA_spla(:)=0.
1540      if(id_prec>0)  ccntrAA_spla(id_prec)=-9999.
1541      if(id_fine>0)  ccntrAA_spla(id_fine)=0.7
1542      if(id_coss>0)  ccntrAA_spla(id_coss)=1.0
1543      if(id_codu>0)  ccntrAA_spla(id_codu)=0.7
1544      if(id_scdu>0)  ccntrAA_spla(id_scdu)=0.7
1545
1546      ccntrENV_spla(:)=0.
1547      if(id_prec>0)  ccntrENV_spla(id_prec)=-9999.
1548      if(id_fine>0)  ccntrENV_spla(id_fine)=0.7
1549      if(id_coss>0)  ccntrENV_spla(id_coss)=1.0
1550      if(id_codu>0)  ccntrENV_spla(id_codu)=0.7
1551      if(id_scdu>0)  ccntrENV_spla(id_scdu)=0.7
1552      ! #DFB
1553      coefcoli_spla(:)=0.
1554      if(id_prec>0)  coefcoli_spla(id_prec)=-9999.
1555      if(id_fine>0)  coefcoli_spla(id_fine)=0.001
1556      if(id_coss>0)  coefcoli_spla(id_coss)=0.001
1557      if(id_codu>0)  coefcoli_spla(id_codu)=0.001
1558      if(id_scdu>0)  coefcoli_spla(id_scdu)=0.001
1559
1560      !vdep_lic = (/0.2, 0.17, 1.2, 1.2/)     
1561!
1562
1563      iscm3=.false.
1564      if (debutphy) then
1565!$OMP MASTER
1566         CALL suphel
1567         print *, 'let s check nbtr=', nbtr
1568! JE before put in zero
1569      IF (lminmax) THEN
1570        DO it=1,nbtr
1571        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan init phytracr')
1572        ENDDO       
1573        DO it=1,nbtr
1574        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'minmax init phytracr')
1575        ENDDO
1576        CALL minmaxsource(source_tr,qmin,qmax,'maxsource init phytracr')
1577      ENDIF
1578! JE   initializon to cero the tracers     
1579!         DO it=1, nbtr
1580!            tr_seri(:,:,it)=0.0
1581!         ENDDO
1582! JE end     
1583! Initializing to zero tr_seri for comparison purposes
1584!        tr_seri(:,:,:)=0.0
1585!
1586!        DO it=1,nbtr
1587!           trm_aux(it)=0.0
1588!           src_aux(it)=0.0
1589!           diag_trm(it)=0.0
1590!           diag_drydep(it)=0.0
1591!           diag_wetdep(it)=0.0
1592!           diag_cvtdep(it)=0.0
1593!           diag_emissn(it)=0.0
1594!        ENDDO
1595!        diag_g2part=0.0
1596         print *,'PREPARE FILES TO SAVE VARIABLES'
1597!
1598         nbjour=30
1599         ecrit_tra =   NINT(86400./pdtphys)                    !--1-day  average
1600         ecrit_tra_h = NINT(86400./pdtphys*0.25)               !--6-hour average
1601         ecrit_tra_m = NINT(86400./pdtphys*FLOAT(nbjour))      !--1-mth  average
1602         print *,'ecrit_tra=', pdtphys, ecrit_tra
1603
1604!!AS deleting lines
1605!!         IF (ok_histrac) THEN
1606!!           IF (is_mpi_root .AND. is_omp_root) THEN
1607!!-----many deleted lines----
1608!!!       nbjour=1
1609!!         ENDIF ! mpi root
1610!!         ENDIF !--ok_histrac
1611
1612!$OMP END MASTER
1613!$OMP BARRIER
1614      endif ! debutphy
1615!
1616!======================================================================
1617! Initialisations
1618!======================================================================
1619!
1620!
1621! je  KE init
1622      IF (debutphy) THEN
1623!$OMP MASTER
1624
1625      ALLOCATE(d_tr_dry(klon,nbtr))
1626      ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr))
1627      ALLOCATE(qPrls(klon,nbtr),qPr(klon,klev,nbtr))
1628      ALLOCATE(qDi(klon,klev,nbtr))
1629      ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
1630      ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
1631
1632!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1633!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1634       ALLOCATE(d_tr_cv_o(klon,klev,nbtr))
1635       ALLOCATE(d_tr_trsp_o(klon,klev,nbtr))
1636       ALLOCATE(d_tr_sscav_o(klon,klev,nbtr), &
1637                d_tr_sat_o(klon,klev,nbtr))
1638        ALLOCATE(d_tr_uscav_o(klon,klev,nbtr))
1639
1640!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1641!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1642        ALLOCATE(d_tr_insc_o(klon,klev,nbtr))
1643        ALLOCATE(d_tr_bcscav_o(klon,klev,nbtr))
1644        ALLOCATE(d_tr_evapls_o(klon,klev,nbtr))
1645        ALLOCATE(d_tr_ls_o(klon,klev,nbtr))
1646        ALLOCATE(d_tr_dyn_o(klon,klev,nbtr))
1647        ALLOCATE(d_tr_cl_o(klon,klev,nbtr))
1648        ALLOCATE(d_tr_th_o(klon,klev,nbtr))
1649!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1650!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1651        ALLOCATE(iregion_so4(klon))
1652        ALLOCATE(iregion_bb(klon))
1653        ALLOCATE(iregion_ind(klon))
1654        ALLOCATE(iregion_dust(klon))
1655        ALLOCATE(iregion_wstardust(klon))
1656
1657!JE20150518<<
1658       ALLOCATE(masque_aqua(klon)) 
1659       ALLOCATE(masque_terra(klon)) 
1660 
1661
1662       masque_aqua(:)=0
1663       masque_terra(:)=0
1664
1665      aod550_terra(:)=0. 
1666      aod550_tr2_terra(:)=0. 
1667      aod550_ss_terra(:)=0.   
1668      aod550_dust_terra(:)=0.   
1669      aod550_dustsco_terra(:)=0.   
1670      aod670_terra(:)=0.   
1671      aod670_tr2_terra(:)=0. 
1672      aod670_ss_terra(:)=0. 
1673      aod670_dust_terra(:)=0. 
1674      aod670_dustsco_terra(:)=0. 
1675      aod865_terra(:)=0.   
1676      aod865_tr2_terra(:)=0. 
1677      aod865_ss_terra(:)=0. 
1678      aod865_dust_terra(:)=0. 
1679      aod865_dustsco_terra(:)=0. 
1680      aod550_aqua(:)=0. 
1681      aod550_tr2_aqua(:)=0. 
1682      aod550_ss_aqua(:)=0.   
1683      aod550_dust_aqua(:)=0.   
1684      aod550_dustsco_aqua(:)=0.   
1685      aod670_aqua(:)=0.   
1686      aod670_tr2_aqua(:)=0. 
1687      aod670_ss_aqua(:)=0. 
1688      aod670_dust_aqua(:)=0. 
1689      aod670_dustsco_aqua(:)=0. 
1690      aod865_aqua(:)=0.   
1691      aod865_tr2_aqua(:)=0. 
1692      aod865_ss_aqua(:)=0. 
1693      aod865_dust_aqua(:)=0. 
1694      aod865_dustsco_aqua(:)=0. 
1695!JE20150518>>
1696
1697
1698
1699
1700
1701!
1702!Config Key  = iflag_lscav
1703!Config Desc = Large scale scavenging parametrization: 0=none,
1704!1=old(Genthon92),
1705!              2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon.
1706!Config Def  = 4
1707!Config
1708        iflag_lscav_omp=4
1709        call getin('iflag_lscav', iflag_lscav_omp)
1710        iflag_lscav=iflag_lscav_omp
1711! initialiation for time computation
1712
1713        tia_spla=0.
1714        tia_emis=0.
1715        tia_depo=0.
1716        tia_cltr=0.
1717        tia_ther=0.
1718        tia_sedi=0.
1719        tia_gasp=0.
1720        tia_wetap=0.
1721        tia_cvltr=0.
1722        tia_lscs=0.
1723        tia_brop=0.
1724        tia_outs=0.
1725        tia_nophytracr=0.
1726        clock_start_outphytracr=clock_end_outphytracr+1
1727!$OMP END MASTER
1728!$OMP BARRIER
1729       ENDIF ! debutphy
1730     
1731      lmt_dms(:)=0.0
1732      aux_var2(:)=0.0
1733      aux_var3(:,:)=0.0
1734      source_tr(:,:)=0.0
1735      flux_tr(:,:)=0.0
1736      flux_sparam_bb(:)=0.0
1737      flux_sparam_ff(:)=0.0
1738      flux_sparam_ind(:)=0.0
1739      flux_sparam_ddfine(:)=0.0
1740      flux_sparam_ddcoa(:)=0.0
1741      flux_sparam_ddsco(:)=0.0
1742      flux_sparam_ssfine(:)=0.0
1743      flux_sparam_sscoa(:)=0.0
1744
1745! initialiation for time computation
1746       
1747        ti_spla=0
1748        ti_emis=0
1749        ti_depo=0
1750        ti_cltr=0
1751        ti_ther=0
1752        ti_sedi=0
1753        ti_gasp=0
1754        ti_wetap=0
1755        ti_cvltr=0
1756        ti_lscs=0
1757        ti_brop=0
1758        ti_outs=0
1759
1760
1761       DO k=1,klev
1762        DO i=1,klon
1763         Mint(i,k)=0.
1764        END DO
1765       END DO
1766
1767
1768!
1769      DO it=1, nbtr
1770       DO k=1,klev
1771        DO i=1,klon
1772         d_tr_cv(i,k,it)=0.
1773         d_tr_trsp(i,k,it)=0.
1774         d_tr_sscav(i,k,it)=0.
1775         d_tr_sat(i,k,it)=0.
1776         d_tr_uscav(i,k,it)=0.
1777         d_tr(i,k,it)=0.
1778         d_tr_insc(i,k,it)=0.
1779         d_tr_bcscav(i,k,it)=0.
1780         d_tr_evapls(i,k,it)=0.
1781         d_tr_ls(i,k,it)=0.
1782         d_tr_cl(i,k,it)=0.
1783         d_tr_th(i,k,it)=0.
1784 
1785         d_tr_cv_o(i,k,it)=0.
1786         d_tr_trsp_o(i,k,it)=0.
1787         d_tr_sscav_o(i,k,it)=0.
1788         d_tr_sat_o(i,k,it)=0.
1789         d_tr_uscav_o(i,k,it)=0.
1790
1791
1792         qDi(i,k,it)=0.
1793         qPr(i,k,it)=0.
1794         qPa(i,k,it)=0.
1795         qMel(i,k,it)=0.
1796         qTrdi(i,k,it)=0.
1797         dtrcvMA(i,k,it)=0.
1798         zmfd1a(i,k,it)=0.
1799         zmfdam(i,k,it)=0.
1800         zmfphi2(i,k,it)=0.
1801        END DO
1802       END DO
1803      END DO
1804
1805
1806      DO it=1, nbtr
1807       DO i=1,klon
1808          qPrls(i,it)=0.0
1809          dtrconv(i,it)=0.0
1810!JE20140507<<
1811          d_tr_dry(i,it)=0.0
1812          flux_tr_dry(i,it)=0.0
1813!JE20140507>>
1814       ENDDO
1815      ENDDO
1816
1817      DO it=1, nbtr
1818      DO i=1, klon
1819        his_dh(i,it)=0.0
1820        his_dhlsc(i,it)=0.0
1821        his_dhcon(i,it)=0.0
1822        his_dhbclsc(i,it)=0.0
1823        his_dhbccon(i,it)=0.0
1824        trm(i,it)=0.0
1825        his_th(i,it)=0.0
1826        his_dhkecv(i,it)=0.0
1827        his_ds(i,it)=0.0
1828        his_dhkelsc(i,it)=0.0
1829
1830      ENDDO
1831      ENDDO
1832!JE:     
1833      DO i=1, klon
1834         his_g2pgas(i) = 0.0
1835         his_g2paer(i) = 0.0
1836      ENDDO
1837! endJE
1838!
1839
1840      DO k=1, klev
1841      DO i = 1, klon
1842        zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD
1843        zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
1844        zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/RG
1845      ENDDO
1846      ENDDO
1847!
1848      DO i = 1, klon
1849        zalt(i,1)=pphis(i)/RG
1850      ENDDO
1851      DO k=1, klev-1
1852      DO i = 1, klon
1853        zalt(i,k+1)=zalt(i,k)+zdz(i,k)
1854      ENDDO
1855      ENDDO
1856
1857
1858
1859      IF (logitime) THEN
1860      CALL SYSTEM_CLOCK(COUNT=clock_end)
1861      dife=clock_end-clock_start
1862      ti_init=dife*MAX(0,SIGN(1,dife)) &
1863      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
1864      tia_init=tia_init+REAL(ti_init)/REAL(clock_rate)
1865      ENDIF
1866      IF (logitime) THEN
1867      CALL SYSTEM_CLOCK(COUNT=clock_start)
1868      ENDIF
1869
1870
1871      IF (debutphy) then
1872
1873! AS: initialisation des indices par point de grille physique iregion_*
1874! (variables tenant de l'assimilation, a eliminer dans un 2eme temps)
1875       iregion_dust(:)=1
1876       iregion_ind(:)=1
1877       iregion_bb(:)=1
1878       iregion_wstardust(:)=1
1879
1880!AS: lecture des indices dans fichiers "regions_*" eliminee par IF("ASSIM"="YES") (faux donc)
1881       IF("ASSIM"=="YES") THEN
1882      c_FullName1='regions_dustacc'
1883      !c_FullName1='regions_dust'
1884      call readregions_spl(iregion_dust,c_FullName1)
1885      c_FullName1='regions_ind'
1886      call readregions_spl(iregion_ind,c_FullName1)
1887      c_FullName1='regions_bb'
1888      call readregions_spl(iregion_bb,c_FullName1)
1889      c_FullName1='regions_pwstarwake'
1890      call readregions_spl(iregion_wstardust,c_FullName1)
1891
1892!$OMP MASTER
1893      IF (is_mpi_root .AND. is_omp_root) THEN
1894     
1895      OPEN(25,FILE='dustregions_pyvar_je.data')
1896      OPEN(55,FILE='indregions_pyvar_je.data')
1897      OPEN(75,FILE='bbregions_pyvar_je.data')
1898      OPEN(95,FILE='wstardustregions_pyvar_je.data')
1899      OPEN(76,FILE='xlat.data')
1900      OPEN(77,FILE='xlon.data')
1901      ENDIF ! mpi root
1902!$OMP END MASTER
1903!$OMP BARRIER
1904
1905      CALL gather(iregion_dust,iauxklon_glo)
1906!$OMP MASTER
1907      IF (is_mpi_root .AND. is_omp_root) THEN
1908      DO k=1,klon_glo
1909        WRITE(25,'(i10)') iauxklon_glo(k)
1910      ENDDO
1911      ENDIF ! mpi root
1912!$OMP END MASTER
1913!$OMP BARRIER
1914      CALL gather(iregion_ind,iauxklon_glo)
1915!$OMP MASTER
1916      IF (is_mpi_root .AND. is_omp_root) THEN
1917      DO k=1,klon_glo
1918        WRITE(55,'(i10)') iauxklon_glo(k)
1919      ENDDO
1920      ENDIF ! mpi root
1921!$OMP END MASTER
1922!$OMP BARRIER
1923      CALL gather(iregion_bb,iauxklon_glo)
1924!$OMP MASTER
1925      IF (is_mpi_root .AND. is_omp_root) THEN
1926      DO k=1,klon_glo
1927        WRITE(75,'(i10)') iauxklon_glo(k)
1928      ENDDO
1929      ENDIF ! mpi root
1930!$OMP END MASTER
1931!$OMP BARRIER
1932      CALL gather(iregion_wstardust,iauxklon_glo)
1933!$OMP MASTER
1934      IF (is_mpi_root .AND. is_omp_root) THEN
1935      DO k=1,klon_glo
1936        WRITE(95,'(i10)') iauxklon_glo(k)
1937      ENDDO
1938      ENDIF ! mpi root
1939!$OMP END MASTER
1940!$OMP BARRIER
1941
1942
1943      CALL gather(rlat,auxklon_glo)
1944!$OMP MASTER
1945      IF (is_mpi_root .AND. is_omp_root) THEN
1946      DO k=1,klon_glo
1947        WRITE(76,*) auxklon_glo(k)
1948      ENDDO
1949      ENDIF ! mpi root
1950!$OMP END MASTER
1951!$OMP BARRIER
1952      CALL gather(rlon,auxklon_glo)
1953!$OMP MASTER
1954      IF (is_mpi_root .AND. is_omp_root) THEN
1955      DO k=1,klon_glo
1956        WRITE(77,*) auxklon_glo(k)
1957      ENDDO
1958
1959      CLOSE(25)
1960      CLOSE(55)
1961      CLOSE(75)
1962      CLOSE(76)
1963      CLOSE(77)
1964      CLOSE(95)
1965
1966      ENDIF ! mpi root
1967!$OMP END MASTER
1968!$OMP BARRIER
1969
1970      ENDIF  ! ASSIM
1971
1972      ENDIF  ! debutphy
1973
1974      IF (logitime) THEN
1975      CALL SYSTEM_CLOCK(COUNT=clock_end)
1976      dife=clock_end-clock_start
1977      ti_inittype=dife*MAX(0,SIGN(1,dife)) &
1978      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
1979      tia_inittype=tia_inittype+REAL(ti_inittype)/REAL(clock_rate)
1980      ENDIF
1981
1982      IF (logitime) THEN
1983      CALL SYSTEM_CLOCK(COUNT=clock_start)
1984      ENDIF
1985
1986!
1987!=======================================================================
1988! SAVING SURFACE TYPE
1989!=======================================================================
1990      IF (debutphy) THEN
1991!$OMP MASTER
1992      IF (is_mpi_root .AND. is_omp_root) THEN
1993
1994      OPEN(35,FILE='surface_ocean.data')
1995      OPEN(45,FILE='surface_seaice.data')
1996      OPEN(65,FILE='surface_land.data')
1997      OPEN(85,FILE='surface_landice.data')
1998      ENDIF ! mpi root
1999!$OMP END MASTER
2000!$OMP BARRIER
2001      do i = 1, klon
2002                aux_var2(i) = pctsrf(i,is_oce)
2003      enddo
2004      call gather(aux_var2,auxklon_glo)
2005!$OMP MASTER
2006      IF (is_mpi_root .AND. is_omp_root) THEN
2007      DO i = 1, klon_glo
2008         WRITE (35,103)  auxklon_glo(i)
2009      ENDDO
2010      ENDIF ! mpi root
2011!$OMP END MASTER
2012!$OMP BARRIER
2013
2014      do i = 1, klon
2015                aux_var2(i) = pctsrf(i,is_sic)
2016      enddo
2017      call gather(aux_var2,auxklon_glo)
2018!$OMP MASTER
2019      IF (is_mpi_root .AND. is_omp_root) THEN
2020      DO i = 1, klon_glo
2021         WRITE (45,103)  auxklon_glo(i)
2022      ENDDO
2023      ENDIF ! mpi root
2024!$OMP END MASTER
2025!$OMP BARRIER
2026
2027      do i = 1, klon
2028                aux_var2(i) = pctsrf(i,is_ter)
2029      enddo
2030      call gather(aux_var2,auxklon_glo)
2031!$OMP MASTER
2032      IF (is_mpi_root .AND. is_omp_root) THEN
2033      DO i = 1, klon_glo
2034         WRITE (65,103)  auxklon_glo(i)
2035      ENDDO
2036      ENDIF ! mpi root
2037!$OMP END MASTER
2038!$OMP BARRIER
2039
2040      do i = 1, klon
2041                aux_var2(i) = pctsrf(i,is_lic)
2042      enddo
2043      call gather(aux_var2,auxklon_glo)
2044!$OMP MASTER
2045      IF (is_mpi_root .AND. is_omp_root) THEN
2046      DO i = 1, klon_glo
2047         WRITE (85,103)  auxklon_glo(i)
2048      ENDDO
2049!
2050!      DO i = 1, klon
2051!         WRITE (35,103) pctsrf(i,is_oce)
2052!         WRITE (45,103) pctsrf(i,is_sic)
2053!         WRITE (65,103) pctsrf(i,is_ter)
2054!         WRITE (85,103) pctsrf(i,is_lic)
2055!      ENDDO
2056      CLOSE(35)
2057      CLOSE(45)
2058      CLOSE(65)
2059      CLOSE(85)
2060103   FORMAT (f6.2)
2061      ENDIF ! mpi root
2062!$OMP END MASTER
2063!$OMP BARRIER
2064      ENDIF ! debutphy
2065
2066!      stop
2067!
2068!=======================================================================
2069!
2070      DO it=1, nbtr
2071        DO j=1,klev
2072        DO i=1,klon
2073           tmp_var(i,j)=tr_seri(i,j,it)
2074        ENDDO
2075        ENDDO
2076        CALL kg_to_cm3(pplay,t_seri,tmp_var)
2077        DO j=1,klev
2078        DO i=1,klon
2079           tr_seri(i,j,it)=tmp_var(i,j)
2080        ENDDO
2081        ENDDO
2082      ENDDO
2083      iscm3=.true.
2084
2085!=======================================================================
2086!
2087      DO k=1, klev
2088      DO i=1, klon
2089        m_conc(i,k)=pplay(i,k)/t_seri(i,k)/RKBOL*1.e-6
2090      ENDDO
2091      ENDDO
2092
2093!
2094!
2095      IF (lminmax) THEN
2096        DO it=1,nbtr
2097        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_avt_coarem')
2098        ENDDO       
2099        DO it=1,nbtr
2100        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'avt coarem')
2101        ENDDO
2102        CALL minmaxsource(source_tr,qmin,qmax,'src: avt coarem')
2103      ENDIF
2104
2105      IF (logitime) THEN
2106      CALL SYSTEM_CLOCK(COUNT=clock_end)
2107      dife=clock_end-clock_start
2108      ti_inittwrite=dife*MAX(0,SIGN(1,dife))  &
2109      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2110      tia_inittwrite=tia_inittwrite+REAL(ti_inittwrite)/REAL(clock_rate)
2111      ENDIF
2112
2113!
2114!
2115!=======================================================================
2116!                     EMISSIONS OF COARSE AEROSOLS
2117!=======================================================================
2118
2119
2120      IF (logitime) THEN
2121      CALL SYSTEM_CLOCK(COUNT=clock_start)
2122      ENDIF
2123
2124
2125
2126!     
2127      print *,'Number of tracers = ',nbtr
2128
2129      print *,'AT BEGINNING OF PHYTRACR_SPL'
2130!      print *,'tr_seri = ',SUM(tr_seri(:,:,3)),MINVAL(tr_seri(:,:,3)),
2131!     .                                         MAXVAL(tr_seri(:,:,3))
2132#ifdef IOPHYS_DUST
2133      do it=1,nbtr
2134         write(str2,'(i2.2)') it
2135         call iophys_ecrit('sav'//str2,1,'SOURCE','',source_tr(:,it))
2136         call iophys_ecrit('fav'//str2,1,'SOURCE','',source_tr(:,it))
2137      enddo
2138      do it=1,nbtr
2139         write(str2,'(i2.2)') it
2140         call iophys_ecrit('TRB'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2141      enddo
2142#endif
2143
2144
2145      CALL coarsemission(pctsrf,pdtphys,t_seri,                            &
2146                        pmflxr,pmflxs,prfl,psfl,                           &
2147                        rlat,rlon,debutphy,                                &
2148                        zu10m,zv10m,wstar,ale_bl,ale_wake,                 &
2149                        scale_param_ssacc,scale_param_sscoa,               &
2150                        scale_param_dustacc,scale_param_dustcoa,           &
2151                        scale_param_dustsco,                               &
2152                        nbreg_dust,                                        &
2153                        iregion_dust,dust_ec,                              &
2154                        param_wstarBLperregion,param_wstarWAKEperregion,   &
2155                        nbreg_wstardust,                                   &
2156                        iregion_wstardust,                                 &
2157                        lmt_sea_salt,qmin,qmax,                            &
2158                                  flux_sparam_ddfine,flux_sparam_ddcoa,    &
2159                                  flux_sparam_ddsco,                       &
2160                                  flux_sparam_ssfine,flux_sparam_sscoa,    &
2161                              id_prec,id_fine,id_coss,id_codu,id_scdu,     &
2162                              ok_chimeredust,                           &
2163                                                     source_tr,flux_tr)   
2164
2165#ifdef IOPHYS_DUST
2166      do it=1,nbtr
2167         write(str2,'(i2.2)') it
2168         call iophys_ecrit('sap'//str2,1,'SOURCE','',source_tr(:,it))
2169         call iophys_ecrit('fap'//str2,1,'SOURCE','',source_tr(:,it))
2170      enddo
2171#endif
2172
2173      IF (lminmax) THEN
2174        DO it=1,nbtr
2175        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_coarem')
2176        ENDDO
2177        DO it=1,nbtr
2178        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after coarem')
2179        ENDDO
2180        CALL minmaxsource(source_tr,qmin,qmax,'src: after coarem')
2181      ENDIF
2182
2183!
2184!
2185!
2186!======================================================================
2187!                   EMISSIONS OF AEROSOL PRECURSORS     
2188!======================================================================
2189!
2190#ifdef IOPHYS_DUST
2191      print *,'INPUT TO PRECUREMISSION'
2192         call iophys_ecrit('ftsol',4,'ftsol','',ftsol)
2193         call iophys_ecrit('u10m_ec',1,'u10m_ec','',u10m_ec)
2194         call iophys_ecrit('v10m_ec',1,'v10m_ec','',v10m_ec)
2195         call iophys_ecrit('pctsrf',4,'pctsrf','',pctsrf)
2196         call iophys_ecrit('u_seri',klev,'u_seri','',u_seri)
2197         call iophys_ecrit('v_seri',klev,'v_seri','',v_seri)
2198         call iophys_ecrit('paprs',klev,'paprs','',paprs)
2199         call iophys_ecrit('pplay',klev,'pplay','',pplay)
2200         call iophys_ecrit('cdragh',1,'cdragh','',cdragh)
2201         call iophys_ecrit('cdragm',1,'cdragm','',cdragm)
2202         call iophys_ecrit('t_seri',klev,'t_seri','',t_seri)
2203         call iophys_ecrit('q_seri',klev,'q_seri','',q_seri)
2204         call iophys_ecrit('tsol',1,'tsol','',tsol)
2205         print*,'fracso2emis,frach2sofso2,bateau',fracso2emis,frach2sofso2,bateau
2206         print*,'kminbc,kmaxbc,pdtphys',kminbc,kmaxbc,pdtphys
2207         print*,'scale_param_bb,scale_param_ind',scale_param_bb,scale_param_ind
2208         print*,'iregion_ind,iregion_bb,nbreg_ind, nbreg_bb',iregion_ind,iregion_bb,nbreg_ind, nbreg_bb
2209         print*,'id_prec,id_fine',id_prec,id_fine
2210         call iophys_ecrit('zdz',klev,'zdz','',zdz)
2211         call iophys_ecrit('zalt',klev,'zalt','',zalt)
2212         call iophys_ecrit('lmt_so2ff_l',1,'lmt_so2ff_l','',lmt_so2ff_l)
2213         call iophys_ecrit('lmt_so2ff_h',1,'lmt_so2ff_h','',lmt_so2ff_h)
2214         call iophys_ecrit('lmt_so2nff',1,'lmt_so2nff','',lmt_so2nff)
2215         call iophys_ecrit('lmt_so2ba',1,'lmt_so2ba','',lmt_so2ba)
2216         call iophys_ecrit('lmt_so2bb_l',1,'lmt_so2bb_l','',lmt_so2bb_l)
2217         call iophys_ecrit('lmt_so2bb_h',1,'lmt_so2bb_h','',lmt_so2bb_h)
2218         call iophys_ecrit('lmt_so2volc_cont',1,'lmt_so2volc_cont','',lmt_so2volc_cont)
2219         call iophys_ecrit('lmt_altvolc_cont',1,'lmt_altvolc_cont','',lmt_altvolc_cont)
2220         call iophys_ecrit('lmt_so2volc_expl',1,'lmt_so2volc_expl','',lmt_so2volc_expl)
2221         call iophys_ecrit('lmt_altvolc_expl',1,'lmt_altvolc_expl','',lmt_altvolc_expl)
2222         call iophys_ecrit('lmt_dmsbio',1,'lmt_dmsbio','',lmt_dmsbio)
2223         call iophys_ecrit('lmt_h2sbio',1,'lmt_h2sbio','',lmt_h2sbio)
2224         call iophys_ecrit('lmt_dmsconc',1,'lmt_dmsconc','',lmt_dmsconc)
2225         call iophys_ecrit('lmt_dms',1,'lmt_dms','',lmt_dms)
2226         call iophys_ecrit('flux_sparam_ind',1,'flux_sparam_ind','',flux_sparam_ind)
2227         call iophys_ecrit('flux_sparam_bb',1,'flux_sparam_bb','',flux_sparam_bb)
2228#endif
2229
2230
2231
2232     print*,'ON PASSE DANS precuremission'
2233     CALL precuremission(ftsol,u10m_ec,v10m_ec,pctsrf,                  &
2234                         u_seri,v_seri,paprs,pplay,cdragh,cdragm,       &
2235                         t_seri,q_seri,tsol,fracso2emis,frach2sofso2,   &
2236                         bateau,zdz,zalt,kminbc,kmaxbc,pdtphys,         &
2237                         scale_param_bb,scale_param_ind,                &
2238                         iregion_ind, iregion_bb,                       &
2239                         nbreg_ind, nbreg_bb,                           &
2240                         lmt_so2ff_l,lmt_so2ff_h, lmt_so2nff,lmt_so2ba, &
2241                         lmt_so2bb_l,lmt_so2bb_h,                       &
2242                         lmt_so2volc_cont,lmt_altvolc_cont,             &
2243                         lmt_so2volc_expl,lmt_altvolc_expl,             &
2244                         lmt_dmsbio,lmt_h2sbio, lmt_dmsconc, lmt_dms,   &
2245                         id_prec,id_fine,                               &
2246                                       flux_sparam_ind, flux_sparam_bb, &
2247                                       source_tr,flux_tr,tr_seri)       
2248!
2249      IF (lminmax) THEN
2250        DO it=1,nbtr
2251        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after precur')
2252        ENDDO
2253        DO it=1,nbtr
2254        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after precur')
2255        ENDDO
2256        CALL minmaxsource(source_tr,qmin,qmax,'src: after precur')
2257      ENDIF
2258
2259!=======================================================================
2260!                      EMISSIONS OF FINE AEROSOLS
2261!=======================================================================
2262#ifdef IOPHYS_DUST
2263!
2264      do it=1,nbtr
2265         write(str2,'(i2.2)') it
2266         call iophys_ecrit('tpr'//str2,1,'SOURCE','',source_tr(:,it))
2267         call iophys_ecrit('fpr'//str2,1,'SOURCE','',flux_tr(:,it))
2268      enddo
2269#endif
2270
2271      CALL finemission(zdz,pdtphys,zalt,kminbc,kmaxbc,                     &
2272                      scale_param_bb,scale_param_ff,                       &
2273                      iregion_ind,iregion_bb,                              &
2274                      nbreg_ind,nbreg_bb,                                  &
2275                      lmt_bcff, lmt_bcnff, lmt_bcbb_l,lmt_bcbb_h,          &
2276                      lmt_bcba, lmt_omff, lmt_omnff,                       &
2277                      lmt_ombb_l, lmt_ombb_h, lmt_omnat, lmt_omba,         &
2278                      id_fine,                                             &
2279                                       flux_sparam_bb, flux_sparam_ff,     &
2280                                             source_tr,flux_tr,tr_seri)     
2281!
2282!
2283      IF (lminmax) THEN
2284        DO it=1,nbtr
2285        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_fineem')
2286        ENDDO
2287        DO it=1,nbtr
2288        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after fineem')
2289        ENDDO
2290      IF (lcheckmass) THEN
2291        DO it=1,nbtr
2292         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2293           pplay,t_seri,iscm3,'after fineem')                 
2294        ENDDO
2295      ENDIF
2296        CALL minmaxsource(source_tr,qmin,qmax,'src: after fineem')
2297      ENDIF
2298
2299!
2300
2301      IF (logitime) THEN
2302      CALL SYSTEM_CLOCK(COUNT=clock_end)
2303      dife=clock_end-clock_start
2304      ti_emis=dife*MAX(0,SIGN(1,dife))   &
2305      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2306      tia_emis=tia_emis+REAL(ti_emis)/REAL(clock_rate)
2307      ENDIF
2308
2309
2310#ifdef IOPHYS_DUST
2311      do it=1,nbtr
2312         write(str2,'(i2.2)') it
2313         call iophys_ecrit('t'//str2,1,'SOURCE','',source_tr(:,it))
2314         call iophys_ecrit('f'//str2,1,'SOURCE','',flux_tr(:,it))
2315      enddo
2316#endif
2317!
2318!
2319
2320
2321
2322!
2323!=======================================================================
2324!                 DRY DEPOSITION AND BOUNDARY LAYER MIXING
2325!=======================================================================
2326!
2327!        DO it=1,nbtr
2328!         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,
2329!     .      pplay,t_seri,iscm3,'')
2330!        ENDDO
2331
2332!======================================================================
2333!    -- Dry deposition --
2334!======================================================================
2335      IF (logitime) THEN
2336      CALL SYSTEM_CLOCK(COUNT=clock_start)
2337      ENDIF
2338
2339      DO it=1, nbtr
2340         DO j=1,klev
2341         DO i=1,klon
2342           tmp_var(i,j)=tr_seri(i,j,it)
2343         ENDDO
2344         ENDDO
2345         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2346         DO j=1,klev
2347         DO i=1,klon
2348           tr_seri(i,j,it)=tmp_var(i,j)
2349         ENDDO
2350         ENDDO
2351      ENDDO
2352      iscm3=.false.
2353!----------------------------
2354      IF (lminmax) THEN
2355        DO it=1,nbtr
2356        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_depo')
2357        ENDDO
2358        DO it=1,nbtr
2359        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before depo')
2360        ENDDO
2361      IF (lcheckmass) THEN
2362        DO it=1,nbtr
2363         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
2364           pplay,t_seri,iscm3,'before depo')
2365        ENDDO
2366      ENDIF
2367        CALL minmaxsource(source_tr,qmin,qmax,'src: before depo')
2368      ENDIF
2369
2370#ifdef IOPHYS_DUST
2371      do it=1,nbtr
2372         write(str2,'(i2.2)') it
2373         call iophys_ecrit('TRC'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2374      enddo
2375#endif
2376
2377      CALL deposition(vdep_oce,vdep_sic,vdep_ter,vdep_lic,pctsrf,      &
2378                     zrho,zdz,pdtphys,RHcl,masse,t_seri,pplay,paprs,  &
2379                     lminmax,qmin,qmax,                               &
2380                              his_ds,source_tr,tr_seri)
2381!
2382      IF (lminmax) THEN
2383        DO it=1,nbtr
2384        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_depo')
2385        ENDDO
2386        DO it=1,nbtr
2387        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after depo')
2388        ENDDO
2389      IF (lcheckmass) THEN
2390        DO it=1,nbtr
2391         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2392           pplay,t_seri,iscm3,'after depo')
2393        ENDDO
2394      ENDIF
2395        CALL minmaxsource(source_tr,qmin,qmax,'src: after depo')
2396      ENDIF
2397
2398      IF (logitime) THEN
2399      CALL SYSTEM_CLOCK(COUNT=clock_end)
2400      dife=clock_end-clock_start
2401      ti_depo=dife*MAX(0,SIGN(1,dife))                      &
2402      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2403      tia_depo=tia_depo+REAL(ti_depo)/REAL(clock_rate)
2404      ENDIF
2405
2406
2407!
2408!======================================================================
2409!    -- Boundary layer mixing --
2410!======================================================================
2411
2412#ifdef IOPHYS_DUST
2413      do it=1,nbtr
2414         write(str2,'(i2.2)') it
2415         call iophys_ecrit('TRD'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2416      enddo
2417#endif
2418
2419
2420
2421      IF (logitime) THEN
2422      CALL SYSTEM_CLOCK(COUNT=clock_start)
2423      ENDIF
2424
2425!
2426
2427       DO k = 1, klev
2428        DO i = 1, klon
2429         delp(i,k) = paprs(i,k)-paprs(i,k+1)
2430        END DO
2431      END DO
2432!
2433      DO it=1, nbtr
2434      DO j=1, klev
2435      DO i=1, klon
2436        tmp_var(i,j)=tr_seri(i,j,it)
2437        aux_var2(i)=source_tr(i,it)
2438      ENDDO
2439      ENDDO
2440      IF (iflag_conv.EQ.2) THEN
2441! Tiedke
2442      CALL cltrac_spl(pdtphys,coefh,yu1,yv1,t_seri,tmp_var,  &
2443                 aux_var2,paprs,pplay,aux_var3)
2444
2445      ELSE IF (iflag_conv.GE.3) THEN
2446!KE
2447      CALL cltrac(pdtphys, coefh,t_seri,tmp_var,aux_var2,paprs,pplay,  &
2448                 delp,aux_var3,d_tr_dry,flux_tr_dry(:,it))
2449      ENDIF
2450
2451      DO i=1, klon
2452      DO j=1, klev
2453        tr_seri(i,j,it)=tmp_var(i,j)
2454        d_tr(i,j,it)=aux_var3(i,j)
2455        d_tr_cl(i,j,it)=d_tr(i,j,it)
2456      ENDDO
2457      ENDDO
2458      DO k = 1, klev
2459      DO i = 1, klon
2460         tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr(i,k,it)
2461      ENDDO
2462      ENDDO
2463      print *,' AFTER Cltrac'
2464      IF (lminmax) THEN
2465        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after cltrac')
2466      ENDIF
2467      ENDDO !--end itr loop
2468
2469      IF (logitime) THEN
2470      CALL SYSTEM_CLOCK(COUNT=clock_end)
2471      dife=clock_end-clock_start
2472      ti_cltr=dife*MAX(0,SIGN(1,dife))     &
2473      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2474      tia_cltr=tia_cltr+REAL(ti_cltr)/REAL(clock_rate)
2475      ENDIF
2476
2477
2478
2479!======================================================================
2480!    -- Calcul de l'effet des thermiques for KE--
2481!======================================================================
2482
2483#ifdef IOPHYS_DUST
2484      print*,'iflag_conv=',iflag_conv
2485      call iophys_ecrit('coefh',klev,'coefh','',coefh)
2486      call iophys_ecrit('yu1',1,'yu1','',yu1)
2487      call iophys_ecrit('yv1',1,'yv1','',yv1)
2488      call iophys_ecrit('delp',klev,'delp','',delp)
2489      do it=1,nbtr
2490         write(str2,'(i2.2)') it
2491         call iophys_ecrit('TRE'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2492      enddo
2493#endif
2494
2495
2496
2497      IF (iflag_conv.GE.3) THEN
2498
2499      IF (logitime) THEN
2500      CALL SYSTEM_CLOCK(COUNT=clock_start)
2501      ENDIF
2502
2503
2504
2505
2506     
2507       IF (lminmax) THEN
2508        DO it=1,nbtr
2509       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before therm')
2510        ENDDO
2511        DO it=1,nbtr
2512        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before therm')
2513        ENDDO
2514      IF (lcheckmass) THEN
2515        DO it=1,nbtr
2516         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2517           pplay,t_seri,iscm3,'before therm')
2518        ENDDO
2519      ENDIF
2520        CALL minmaxsource(source_tr,qmin,qmax,'before therm')
2521      ENDIF
2522
2523      DO it=1,nbtr
2524         DO k=1,klev
2525            DO i=1,klon
2526               tmp_var3(i,k,it)=tr_seri(i,k,it)
2527               d_tr_th(i,k,it)=0.
2528               tr_seri(i,k,it)=MAX(tr_seri(i,k,it),0.)
2529!JE: precursor >>1e10         tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10)
2530            END DO
2531         END DO
2532      END DO
2533
2534!JE  new implicit scheme 20140323
2535      DO it=1,nbtr
2536        CALL thermcell_dq(klon,klev,1,pdtphys,fm_therm,entr_therm,  &
2537                         zmasse,tr_seri(1:klon,1:klev,it),         &
2538                         d_tr(1:klon,1:klev,it),ztra_th,0 )
2539
2540        DO k=1,klev
2541           DO i=1,klon
2542              d_tr(i,k,it)=pdtphys*d_tr(i,k,it)
2543              d_tr_th(i,k,it)=d_tr_th(i,k,it)+d_tr(i,k,it)
2544              tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr(i,k,it),0.)
2545              END DO
2546        END DO
2547
2548      ENDDO
2549
2550! old scheme explicit
2551!       nsplit=10
2552!       DO it=1,nbtr
2553!          DO isplit=1,nsplit
2554!              CALL dqthermcell(klon,klev,pdtphys/nsplit,
2555!     .            fm_therm,entr_therm,zmasse,
2556!     .            tr_seri(1:klon,1:klev,it),
2557!     .            d_tr(1:klon,1:klev,it),ztra_th)
2558!            DO k=1,klev
2559!               DO i=1,klon
2560!                  d_tr(i,k,it)=pdtphys*d_tr(i,k,it)/nsplit
2561!                  d_tr_th(i,k,it)=d_tr_th(i,k,it)+d_tr(i,k,it)
2562!                  tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr(i,k,it),0.)
2563!               END DO
2564!            END DO
2565!         END DO ! nsplit1
2566!      END DO ! it
2567!JE end modif 20140323
2568
2569      DO it=1,nbtr
2570         DO k=1,klev
2571            DO i=1,klon
2572          tmp_var(i,k)=tr_seri(i,k,it)-tmp_var3(i,k,it)
2573            ENDDO
2574         ENDDO
2575       IF (lminmax) THEN
2576      IF (lcheckmass) THEN
2577         CALL checkmass(tmp_var(:,:),RNAVO,masse(it),zdz,  &
2578           pplay,t_seri,iscm3,'dtr therm ')
2579      ENDIF
2580       ENDIF
2581         CALL kg_to_cm3(pplay,t_seri,tmp_var)
2582
2583         DO k=1,klev
2584            DO i=1,klon
2585               his_th(i,it)=his_th(i,it)+    &
2586                           (tmp_var(i,k))/RNAVO*   &
2587                     masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
2588            END DO !klon
2589         END DO !klev
2590
2591      END DO !it
2592       IF (lminmax) THEN
2593        DO it=1,nbtr
2594       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after therm')
2595        ENDDO
2596        DO it=1,nbtr
2597        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after therm')
2598        ENDDO
2599      IF (lcheckmass) THEN
2600        DO it=1,nbtr
2601         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2602           pplay,t_seri,iscm3,'after therm')
2603        ENDDO
2604      ENDIF
2605        CALL minmaxsource(source_tr,qmin,qmax,'after therm')
2606       ENDIF
2607
2608      IF (logitime) THEN
2609      CALL SYSTEM_CLOCK(COUNT=clock_end)
2610      dife=clock_end-clock_start
2611      ti_ther=dife*MAX(0,SIGN(1,dife))   &
2612      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2613      tia_ther=tia_ther+REAL(ti_ther)/REAL(clock_rate)
2614      ENDIF
2615
2616
2617      ENDIF ! iflag_conv KE
2618!------------------------------------
2619!      Sedimentation
2620!-----------------------------------
2621      IF (logitime) THEN
2622      CALL SYSTEM_CLOCK(COUNT=clock_start)
2623      ENDIF
2624
2625
2626      DO it=1,nbtr
2627      DO j=1,klev
2628      DO i=1,klon
2629         tmp_var(i,j)=tr_seri(i,j,it)
2630      ENDDO
2631      ENDDO
2632      CALL kg_to_cm3(pplay,t_seri,tmp_var)
2633      DO j=1,klev
2634      DO i=1,klon
2635         tr_seri(i,j,it)=tmp_var(i,j)
2636      ENDDO
2637      ENDDO
2638      ENDDO !--end itr loop
2639      iscm3=.true.
2640!--------------------------------------
2641      print *,' BEFORE Sediment'
2642
2643      IF (lminmax) THEN
2644        DO it=1,nbtr
2645        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_sedi')
2646        ENDDO
2647        DO it=1,nbtr
2648        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before sedi')
2649        ENDDO
2650      IF (lcheckmass) THEN
2651        DO it=1,nbtr
2652         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2653           pplay,t_seri,iscm3,'before sedi')
2654        ENDDO
2655      ENDIF
2656        CALL minmaxsource(source_tr,qmin,qmax,'src: before sedi')
2657      ENDIF
2658
2659      print *,'SPLA VERSION OF SEDIMENTATION IS USED'
2660      CALL sediment_mod(t_seri,pplay,zrho,paprs,pdtphys,RHcl,   &
2661                                     id_coss,id_codu,id_scdu,  &
2662                                     ok_chimeredust,           &
2663                         sed_ss,sed_dust,sed_dustsco,          &
2664                         sed_ss3D,sed_dust3D,sed_dustsco3D,tr_seri)
2665      CALL cm3_to_kg(pplay,t_seri,sed_ss3D)
2666      CALL cm3_to_kg(pplay,t_seri,sed_dust3D)
2667      CALL cm3_to_kg(pplay,t_seri,sed_dustsco3D)
2668
2669      IF (lminmax) THEN
2670        DO it=1,nbtr
2671        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_sedi')
2672        ENDDO
2673        DO it=1,nbtr
2674        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after sedi')
2675        ENDDO
2676      IF (lcheckmass) THEN
2677        DO it=1,nbtr
2678         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2679           pplay,t_seri,iscm3,'after sedi')
2680        ENDDO
2681      ENDIF
2682        CALL minmaxsource(source_tr,qmin,qmax,'src: after sedi')
2683      ENDIF
2684
2685!
2686!=======================================================================
2687#ifdef IOPHYS_DUST
2688      do it=1,nbtr
2689         write(str2,'(i2.2)') it
2690         call iophys_ecrit('TRF'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2691      enddo
2692#endif
2693
2694
2695
2696!
2697      IF (logitime) THEN
2698      CALL SYSTEM_CLOCK(COUNT=clock_end)
2699      dife=clock_end-clock_start
2700      ti_sedi=dife*MAX(0,SIGN(1,dife))   &
2701      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2702      tia_sedi=tia_sedi+REAL(ti_sedi)/REAL(clock_rate)
2703      ENDIF
2704
2705      DO it=1, nbtr
2706         DO j=1,klev
2707         DO i=1,klon
2708           tmp_var(i,j)=tr_seri(i,j,it)
2709         ENDDO
2710         ENDDO
2711         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2712         DO j=1,klev
2713         DO i=1,klon
2714           tr_seri(i,j,it)=tmp_var(i,j)
2715         ENDDO
2716         ENDDO
2717      ENDDO
2718      iscm3=.false.
2719!
2720!
2721!======================================================================
2722!                      GAS TO PARTICLE CONVERSION     
2723!======================================================================
2724!
2725
2726      IF (logitime) THEN
2727      CALL SYSTEM_CLOCK(COUNT=clock_start)
2728      ENDIF
2729
2730      IF (lminmax) THEN
2731        DO it=1,nbtr
2732        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_beforegastopar')
2733        ENDDO
2734        DO it=1,nbtr
2735        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before gastopar')
2736        ENDDO
2737      IF (lcheckmass) THEN
2738        DO it=1,nbtr
2739         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2740           pplay,t_seri,iscm3,'before gastopar')
2741        ENDDO
2742      ENDIF
2743        CALL minmaxsource(source_tr,qmin,qmax,'src: before gastopar')
2744      ENDIF
2745
2746      CALL gastoparticle(pdtphys,zdz,zrho,rlat, &
2747                   pplay,t_seri,id_prec,id_fine, &
2748                   tr_seri,his_g2pgas ,his_g2paer)
2749!
2750      IF (lminmax) THEN
2751        DO it=1,nbtr
2752        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_gastopar')
2753        ENDDO
2754        DO it=1,nbtr
2755        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after gastopar')
2756        ENDDO
2757      IF (lcheckmass) THEN
2758        DO it=1,nbtr
2759         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2760           pplay,t_seri,iscm3,'after gastopar')
2761        ENDDO
2762       ENDIF
2763        CALL minmaxsource(source_tr,qmin,qmax,'src: after gastopar')
2764      ENDIF
2765
2766      IF (logitime) THEN
2767      CALL SYSTEM_CLOCK(COUNT=clock_end)
2768      dife=clock_end-clock_start
2769      ti_gasp=dife*MAX(0,SIGN(1,dife))   &
2770      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2771      tia_gasp=tia_gasp+REAL(ti_gasp)/REAL(clock_rate)
2772      ENDIF
2773
2774
2775!
2776!======================================================================
2777!          EFFECT OF PRECIPITATION: iflag_conv=2
2778!======================================================================
2779!
2780
2781#ifdef IOPHYS_DUST
2782      do it=1,nbtr
2783         write(str2,'(i2.2)') it
2784         call iophys_ecrit('TRG'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2785      enddo
2786#endif
2787
2788
2789      IF (iflag_conv.EQ.2) THEN
2790
2791      IF (logitime) THEN
2792      CALL SYSTEM_CLOCK(COUNT=clock_start)
2793      ENDIF
2794
2795
2796
2797
2798       DO it=1, nbtr
2799        DO j=1,klev
2800        DO i=1,klon
2801           tmp_var(i,j)=tr_seri(i,j,it)
2802        ENDDO
2803        ENDDO
2804        CALL kg_to_cm3(pplay,t_seri,tmp_var)
2805        DO j=1,klev
2806        DO i=1,klon
2807           tr_seri(i,j,it)=tmp_var(i,j)
2808        ENDDO
2809        ENDDO
2810      ENDDO
2811       iscm3=.true.
2812!------------------------------
2813
2814      print *,'iflag_conv bef lessiv',iflag_conv
2815      IF (lessivage) THEN
2816!
2817      print *,' BEFORE Incloud'
2818
2819      IF (lminmax) THEN
2820        DO it=1,nbtr
2821        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_incloud')
2822        ENDDO
2823        DO it=1,nbtr
2824        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before incloud')
2825        ENDDO
2826      IF (lcheckmass) THEN
2827        DO it=1,nbtr
2828         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2829           pplay,t_seri,iscm3,'before incloud')
2830        ENDDO
2831      ENDIF
2832        CALL minmaxsource(source_tr,qmin,qmax,'src: before incloud')
2833      ENDIF
2834
2835
2836!      CALL incloud_scav(lminmax,qmin,qmax,masse,henry,kk,prfl,
2837!     .                  psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,
2838
2839!     .                                     his_dhlsc,his_dhcon,tr_seri)
2840      print *,'iflag_conv bef incloud',iflag_conv
2841
2842        IF (iflag_conv.EQ.2) THEN
2843! Tiedke
2844      CALL incloud_scav(.false.,qmin,qmax,masse,henry,kk,prfl,          &
2845                       psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,     &
2846                                          his_dhlsc,his_dhcon,tr_seri)
2847
2848!---------- to use this option please comment lsc_scav at the end
2849!        ELSE IF (iflag_conv.GE.3) THEN
2850!
2851!      CALL incloud_scav_lsc(.false.,qmin,qmax,masse,henry,kk,prfl,
2852!     .                  psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,
2853!     .                                     his_dhlsc,his_dhcon,tr_seri)
2854!--------------------------------------------------------------
2855
2856        ENDIF
2857!
2858!
2859      print *,' BEFORE blcloud (after incloud)'
2860      IF (lminmax) THEN
2861        DO it=1,nbtr
2862        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_blcloud')
2863        ENDDO
2864        DO it=1,nbtr
2865        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before blcloud')
2866        ENDDO
2867      IF (lcheckmass) THEN
2868        DO it=1,nbtr
2869         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2870           pplay,t_seri,iscm3,'before blcloud')
2871        ENDDO
2872      ENDIF
2873        CALL minmaxsource(source_tr,qmin,qmax,'src: before blcloud')
2874      ENDIF
2875
2876!      CALL blcloud_scav(lminmax,qmin,qmax,pdtphys,prfl,psfl,
2877!     .                  pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,
2878!     .                                  his_dhbclsc,his_dhbccon,tr_seri)
2879
2880        IF (iflag_conv.EQ.2) THEN
2881! Tiedke
2882
2883      CALL blcloud_scav(.false.,qmin,qmax,pdtphys,prfl,psfl,     &
2884                       pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,  &
2885                                       his_dhbclsc,his_dhbccon,tr_seri)
2886
2887!---------- to use this option please comment lsc_scav at the end
2888!           and comment IF iflag=2 after "EFFECT OF PRECIPITATION:"
2889!       
2890!
2891!        ELSE IF (iflag_conv.GE.3) THEN
2892!
2893!      CALL blcloud_scav_lsc(.false.,qmin,qmax,pdtphys,prfl,psfl,
2894!     .                  pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,
2895!     .                                  his_dhbclsc,his_dhbccon,tr_seri)
2896!
2897!----------------------------------------------------------------------
2898        ENDIF
2899
2900
2901      print *,' AFTER blcloud '
2902
2903      IF (lminmax) THEN
2904        DO it=1,nbtr
2905        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_blcloud')
2906        ENDDO                           
2907        DO it=1,nbtr
2908        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after blcloud')
2909        ENDDO                                 
2910      IF (lcheckmass) THEN
2911        DO it=1,nbtr
2912         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2913           pplay,t_seri,iscm3,'after blcloud')
2914        ENDDO
2915      ENDIF
2916        CALL minmaxsource(source_tr,qmin,qmax,'src: after blcloud')
2917      ENDIF
2918
2919
2920      ENDIF !--lessivage
2921
2922      DO it=1, nbtr
2923         DO j=1,klev
2924         DO i=1,klon
2925           tmp_var(i,j)=tr_seri(i,j,it)
2926         ENDDO
2927         ENDDO
2928         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2929         DO j=1,klev
2930         DO i=1,klon
2931           tr_seri(i,j,it)=tmp_var(i,j)
2932         ENDDO
2933         ENDDO
2934      ENDDO
2935       iscm3=.false.
2936!
2937      IF (logitime) THEN
2938      CALL SYSTEM_CLOCK(COUNT=clock_end)
2939      dife=clock_end-clock_start
2940      ti_wetap=dife*MAX(0,SIGN(1,dife))    &
2941      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2942      tia_wetap=tia_wetap+REAL(ti_wetap)/REAL(clock_rate)
2943      ENDIF
2944
2945
2946
2947
2948      ENDIF ! iflag_conv=2
2949
2950!
2951!
2952!======================================================================
2953!                         EFFECT OF CONVECTION
2954!======================================================================
2955!
2956#ifdef IOPHYS_DUST
2957      do it=1,nbtr
2958         write(str2,'(i2.2)') it
2959         call iophys_ecrit('TRH'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2960      enddo
2961#endif
2962
2963
2964      IF (logitime) THEN
2965      CALL SYSTEM_CLOCK(COUNT=clock_start)
2966      ENDIF
2967
2968
2969      IF (convection) THEN
2970!
2971      print *,' BEFORE trconvect'
2972
2973      IF (lminmax) THEN
2974        DO it=1,nbtr
2975        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_trconve')
2976        ENDDO
2977        DO it=1,nbtr
2978        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before trconve')
2979        ENDDO
2980      IF (lcheckmass) THEN
2981        DO it=1,nbtr
2982         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2983           pplay,t_seri,iscm3,'before trconve')
2984        ENDDO
2985      ENDIF
2986        CALL minmaxsource(source_tr,qmin,qmax,'src: before trconve')
2987      ENDIF
2988
2989
2990! JE        CALL trconvect(pplay,t_seri,pdtphys,pmfu,pmfd,pen_u,pde_u,
2991!     .             pen_d,pde_d,paprs,zdz,xconv,qmin,qmax,lminmax,masse,
2992!     .                                                 dtrconv,tr_seri)
2993! -------------------------------------------------------------     
2994        IF (iflag_conv.EQ.2) THEN
2995! Tiedke
2996         CALL trconvect(pplay,t_seri,pdtphys,pmfu,pmfd,pen_u,pde_u,  &
2997                  pen_d,pde_d,paprs,zdz,xconv,qmin,qmax,.false.,masse, &
2998                                                      dtrconv,tr_seri)
2999         DO it=1, nbtr
3000           d_tr_cv(:,:,it)=0.
3001         ENDDO
3002
3003        ELSE IF (iflag_conv.GE.3) THEN
3004! KE
3005         print *,'JE: KE in phytracr_spl'
3006         DO it=1, nbtr
3007             DO k = 1, klev
3008              DO i = 1, klon
3009               tmp_var3(i,k,it)=tr_seri(i,k,it)
3010              END DO
3011             END DO
3012         ENDDO
3013
3014         DO it=1, nbtr
3015!          routine for aerosols . otherwise, check cvltrorig
3016         print *,'Check sum before cvltr it',it,SUM(tr_seri(:,:,it))
3017!           IF (.FALSE.) THEN
3018           CALL cvltr_spl(pdtphys, da, phi,phi2,d1a,dam, mp,ep,    &
3019            sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,           &
3020            pmflxr,pmflxs,evapls,t_seri,wdtrainA,wdtrainM,          &
3021!            paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,        &
3022            paprs,it,tmp_var3,upwd,dnwd,itop_con,ibas_con,        &
3023            henry,kk,zrho,ccntrAA_spla,ccntrENV_spla,coefcoli_spla, &
3024            id_prec,id_fine,id_coss, id_codu, id_scdu,              &
3025            d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr, &
3026            qPa,qMel,qTrdi,dtrcvMA,Mint,                            &
3027            zmfd1a,zmfphi2,zmfdam)
3028!           ENDIF
3029!
3030!           IF (.FALSE.) THEN
3031!           CALL cvltr(pdtphys, da, phi,phi2,d1a,dam, mp,ep,
3032!     .       sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,
3033!     .       pmflxr,pmflxs,evapls,t_seri,wdtrainA,wdtrainM,
3034!     .       paprs,it,tmp_var3,upwd,dnwd,itop_con,ibas_con,
3035!     .       d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,
3036!     .       qPa,qMel,qTrdi,dtrcvMA,Mint,
3037!     .       zmfd1a,zmfphi2,zmfdam)
3038!!  pas lessivage convectif pou n'est pas un aerosol (i/else with cvltr)
3039!           ENDIF
3040
3041
3042
3043!!!!!!!         CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,
3044!!!         CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tmp_var3,
3045!!!     .               upwd,dnwd,d_tr_cv)
3046!             print *,'justbefore cvltrnoscav it= ',it
3047!             CALL checknanqfi(da(:,:),1.,-1.,' da')
3048!             CALL checknanqfi(wght_cvfd(:,:),1.,-1.,'weigth ')
3049!             CALL checknanqfi(mp(:,:),1.,-1.,'mp ')
3050!             CALL checknanqfi(paprs(:,:),1.,-1.,'paprs ')
3051!             CALL checknanqfi(pplay(:,:),1.,-1.,'pplay ')
3052!             CALL checknanqfi(tmp_var3(:,:,it),1.,-1.,'tmp_var3 ')
3053!             CALL checknanqfi(upwd(:,:),1.,-1.,'upwd ')
3054!             CALL checknanqfi(dnwd(:,:),1.,-1.,'dnwd ')
3055!             CALL checknanqfi(d_tr_cv(:,:,it),1.,-1.,'d_tr_cv ')
3056!             IF (.TRUE.) THEN
3057!             CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,
3058!     .            pplay,tmp_var3,upwd,dnwd,d_tr_cv)
3059!             ENDIF
3060             DO k = 1, klev
3061              DO i = 1, klon
3062!               tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
3063               tr_seri(i,k,it)=(tmp_var3(i,k,it)+d_tr_cv(i,k,it))
3064               tmp_var(i,k)=d_tr_cv(i,k,it)
3065
3066              END DO
3067             END DO
3068
3069        CALL kg_to_cm3(pplay,t_seri,tmp_var) !just for his_* computation
3070
3071             DO k = 1, klev
3072              DO i = 1, klon
3073               dtrconv(i,it)=0.0
3074               his_dhkecv(i,it)=his_dhkecv(i,it)-tmp_var(i,k)  &
3075                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3076              END DO
3077             END DO
3078
3079!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3080        CALL kg_to_cm3(pplay,t_seri,tmp_var) !just for his_* computation
3081
3082             DO k = 1, klev
3083              DO i = 1, klon
3084               dtrconv(i,it)=0.0
3085               his_ds(i,it)=his_ds(i,it)-tmp_var(i,k)  &
3086                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3087              END DO
3088             END DO
3089!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3090       IF (lminmax) THEN
3091
3092         print *,'Check sum after cvltr it',it,SUM(tr_seri(:,:,it))
3093        CALL minmaxqfi2(d_tr_cv(:,:,it),qmin,qmax,'d_tr_cv:')
3094        CALL minmaxqfi2(d_tr_trsp(:,:,it),qmin,qmax,'d_tr_trsp:')
3095        CALL minmaxqfi2(d_tr_sscav(:,:,it),qmin,qmax,'d_tr_sscav:')
3096        CALL minmaxqfi2(d_tr_sat(:,:,it),qmin,qmax,'d_tr_sat:')
3097        CALL minmaxqfi2(d_tr_uscav(:,:,it),qmin,qmax,'d_tr_uscav:')
3098      IF (lcheckmass) THEN
3099        CALL checkmass(d_tr_cv(:,:,it),RNAVO,masse(it),zdz,  &
3100           pplay,t_seri,.false.,'d_tr_cv:')
3101      ENDIF
3102       ENDIF
3103         ENDDO ! it=1,nbtr
3104
3105        ENDIF ! iflag_conv
3106       IF (lminmax) THEN
3107        DO it=1,nbtr
3108        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_trcon')
3109        ENDDO
3110        DO it=1,nbtr
3111        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after trconv')
3112        ENDDO
3113      IF (lcheckmass) THEN
3114        DO it=1,nbtr
3115         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
3116           pplay,t_seri,iscm3,'after trconv')
3117        ENDDO
3118      ENDIF
3119        CALL minmaxsource(source_tr,qmin,qmax,'src: after trconv')
3120      ENDIF
3121      ENDIF ! convection
3122
3123      IF (logitime) THEN
3124      CALL SYSTEM_CLOCK(COUNT=clock_end)
3125      dife=clock_end-clock_start
3126      ti_cvltr=dife*MAX(0,SIGN(1,dife))   &
3127      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3128      tia_cvltr=tia_cvltr+REAL(ti_cvltr)/REAL(clock_rate)
3129      ENDIF
3130
3131
3132
3133!
3134!
3135!=======================================================================
3136!      LARGE SCALE SCAVENGING KE
3137!=======================================================================
3138!     
3139#ifdef IOPHYS_DUST
3140      call iophys_ecrit('da',klev,'da','',da)
3141      call iophys_ecrit('phi',klev,'phi','',phi)
3142      call iophys_ecrit('phi2',klev,'phi2','',phi2)
3143      call iophys_ecrit('d1a',klev,'d1a','',d1a)
3144      call iophys_ecrit('dam',klev,'dam','',dam)
3145      call iophys_ecrit('mp',klev,'mp','',mp)
3146      call iophys_ecrit('ep',klev,'ep','',ep)
3147      call iophys_ecrit('sigd',klev,'sigd','',sigd)
3148      call iophys_ecrit('sij',klev,'sij','',sij)
3149      call iophys_ecrit('wght_cvfd',klev,'wght_cvfd','',wght_cvfd)
3150      call iophys_ecrit('clw',klev,'clw','',clw)
3151      call iophys_ecrit('elij',klev,'elij','',elij)
3152      call iophys_ecrit('epmlmMm',klev,'epmlmMm','',epmlmMm)
3153      call iophys_ecrit('eplaMm',klev,'eplaMm','',eplaMm)
3154      call iophys_ecrit('pmflxr',klev,'pmflxr','',pmflxr)
3155      call iophys_ecrit('pmflxs',klev,'pmflxs','',pmflxs)
3156      call iophys_ecrit('evapls',klev,'evapls','',evapls)
3157      call iophys_ecrit('wdtrainA',klev,'wdtrainA','',wdtrainA)
3158      call iophys_ecrit('wdtrainM',klev,'wdtrainM','',wdtrainM)
3159
3160      do it=1,nbtr
3161         write(str2,'(i2.2)') it
3162         call iophys_ecrit('TRI'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3163      enddo
3164#endif
3165
3166
3167       IF (iflag_conv.GE.3) THEN
3168       IF (logitime) THEN
3169       CALL SYSTEM_CLOCK(COUNT=clock_start)
3170       ENDIF
3171
3172
3173       IF (lessivage)  THEN
3174       print *,' BEFORE lsc_scav '
3175       IF (lminmax) THEN
3176        DO it=1,nbtr
3177       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_lsc_scav')
3178        ENDDO
3179        DO it=1,nbtr
3180        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before lsc_scav')
3181        ENDDO
3182      IF (lcheckmass) THEN
3183        DO it=1,nbtr
3184         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
3185           pplay,t_seri,iscm3,'before lsc_scav')
3186        ENDDO
3187      ENDIF
3188        CALL minmaxsource(source_tr,qmin,qmax,'src: before lsc_scav')
3189      ENDIF
3190
3191
3192
3193       ql_incloud_ref = 10.e-4
3194       ql_incloud_ref =  5.e-4
3195! calcul du contenu en eau liquide au sein du nuage
3196       ql_incl = ql_incloud_ref
3197! choix du lessivage
3198      IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN
3199      !IF (.false.) THEN  ! test #DFB (Binta) sans lsc_scav_spl
3200        print *,'JE iflag_lscav',iflag_lscav
3201        DO it = 1, nbtr
3202
3203!       incloud scavenging and removal by large scale rain ! orig : ql_incl
3204!         was replaced by 0.5e-3 kg/kg
3205!          the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR
3206!         Liu (2001) proposed to use 1.5e-3 kg/kg
3207
3208!       CALL lsc_scav_orig(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,
3209!     .               rneb,beta_fisrt, beta_v1,pplay,paprs,
3210!     .               t_seri,tr_seri,d_tr_insc,
3211!     .               d_tr_bcscav,d_tr_evapls,qPrls)
3212          CALL lsc_scav_spl(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,  &
3213                    rneb,beta_fisrt, beta_v1,pplay,paprs,      &
3214                    t_seri,tr_seri,d_tr_insc,                  &
3215                    alpha_r,alpha_s,kk, henry,                 &
3216                    id_prec,id_fine,id_coss, id_codu, id_scdu, &
3217                    d_tr_bcscav,d_tr_evapls,qPrls)
3218
3219!large scale scavenging tendency
3220          DO k = 1, klev
3221           DO i = 1, klon
3222                d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it) &
3223                        +d_tr_evapls(i,k,it)
3224                tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it)
3225                         tmp_var(i,k)=d_tr_ls(i,k,it)
3226           ENDDO
3227          ENDDO
3228
3229          CALL kg_to_cm3(pplay,t_seri,tmp_var)
3230
3231          DO k=1,klev
3232           DO i=1,klon
3233            his_dhkelsc(i,it)=his_dhkelsc(i,it)-tmp_var(i,k)    &
3234                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3235     
3236           END DO
3237          END DO
3238
3239        END DO  !it=1,nbtr
3240
3241      ELSE
3242        print *,'WARNING: NO lsc_scav, Please choose iflag_lscav=3 or 4'
3243        DO it = 1, nbtr
3244          DO i=1,klon
3245            his_dhkelsc(i,it)=0.0
3246          END DO  ! klon
3247         END DO  !it=1,nbtr
3248      ENDIF !iflag_lscav
3249
3250       print *,' AFTER lsc_scav '
3251       IF (lminmax) THEN
3252        DO it=1,nbtr
3253       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_lsc_scav')
3254        ENDDO
3255        DO it=1,nbtr
3256        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after lsc_scav')
3257        ENDDO
3258      IF (lcheckmass) THEN
3259        DO it=1,nbtr
3260         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
3261           pplay,t_seri,iscm3,'after lsc_scav')
3262        ENDDO
3263       ENDIF
3264        CALL minmaxsource(source_tr,qmin,qmax,'src: after lsc_scav')
3265      ENDIF
3266
3267      ENDIF ! lessivage
3268 
3269      IF (logitime) THEN
3270      CALL SYSTEM_CLOCK(COUNT=clock_end)
3271      dife=clock_end-clock_start
3272      ti_lscs=dife*MAX(0,SIGN(1,dife))   &
3273      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3274      tia_lscs=tia_lscs+REAL(ti_lscs)/REAL(clock_rate)
3275      ENDIF
3276
3277
3278
3279      ENDIF !iflag_conv
3280
3281 
3282!=======================================================================
3283!                         COMPUTING THE BURDEN
3284!=======================================================================
3285#ifdef IOPHYS_DUST
3286      do it=1,nbtr
3287         write(str2,'(i2.2)') it
3288         call iophys_ecrit('TRJ'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3289      enddo
3290#endif
3291
3292!   
3293      IF (logitime) THEN
3294      CALL SYSTEM_CLOCK(COUNT=clock_start)
3295      ENDIF
3296
3297 
3298      DO it=1, nbtr
3299        DO j=1,klev
3300        DO i=1,klon
3301           tmp_var(i,j)=tr_seri(i,j,it)
3302        ENDDO
3303        ENDDO
3304        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3305        DO j=1,klev
3306        DO i=1,klon
3307           tr_seri(i,j,it)=tmp_var(i,j)
3308        ENDDO
3309        ENDDO
3310      ENDDO
3311       iscm3=.true.
3312
3313!
3314! Computing burden in mg/m2
3315      DO it=1, nbtr
3316      DO k=1, klev
3317      DO i=1, klon
3318        trm(i,it)=trm(i,it)+tr_seri(i,k,it)*1.e6*zdz(i,k)*  &
3319                 masse(it)*1.e3/RNAVO     !--mg S/m2
3320      ENDDO
3321      ENDDO
3322      ENDDO
3323!
3324! Computing Surface concentration in ug/m3
3325!
3326      DO it=1, nbtr
3327      DO i=1, klon
3328        sconc_seri(i,it)=tr_seri(i,1,it)*1.e6* &
3329                 masse(it)*1.e3/RNAVO     !--mg/m3 (tr_seri ist in g/cm3)
3330      ENDDO
3331      ENDDO
3332!
3333!=======================================================================
3334!                  CALCULATION OF OPTICAL PROPERTIES
3335!=======================================================================
3336!     
3337      CALL aeropt_spl(zdz, tr_seri, RHcl,                                 &
3338                        id_prec, id_fine, id_coss, id_codu, id_scdu,     &
3339                        ok_chimeredust,                                 &
3340                    diff_aod550_tot, diag_aod670_tot, diag_aod865_tot,     &
3341                    diff_aod550_tr2, diag_aod670_tr2, diag_aod865_tr2,     &
3342                    diag_aod550_ss,  diag_aod670_ss,  diag_aod865_ss,        &
3343                    diag_aod550_dust,diag_aod670_dust,diag_aod865_dust,  &
3344           diag_aod550_dustsco,diag_aod670_dustsco,diag_aod865_dustsco) 
3345
3346
3347
3348      IF (logitime) THEN
3349      CALL SYSTEM_CLOCK(COUNT=clock_end)
3350      dife=clock_end-clock_start
3351      ti_brop=dife*MAX(0,SIGN(1,dife))   &
3352      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3353      tia_brop=tia_brop+REAL(ti_brop)/REAL(clock_rate)
3354      ENDIF
3355
3356
3357!=======================================================================
3358!   MODIS terra/aqua simulation output
3359!=======================================================================
3360      masque_aqua_cur(:)=0
3361      masque_terra_cur(:)=0
3362
3363      CALL satellite_out_spla(jD_cur,jH_cur,pdtphys,rlat,rlon,   &
3364                              masque_aqua_cur, masque_terra_cur )
3365      IF (jH_cur-pdtphys/86400. .LT. 0.) THEN
3366       !new utc day: put in 0 everything
3367!JE20150518<<
3368       masque_aqua(:) =0
3369       masque_terra(:) =0
3370       aod550_terra(:)=0. 
3371       aod550_tr2_terra(:)=0. 
3372       aod550_ss_terra(:)=0.   
3373       aod550_dust_terra(:)=0.   
3374       aod550_dustsco_terra(:)=0.   
3375       aod670_terra(:)=0.   
3376       aod670_tr2_terra(:)=0. 
3377       aod670_ss_terra(:)=0. 
3378       aod670_dust_terra(:)=0. 
3379       aod670_dustsco_terra(:)=0. 
3380       aod865_terra(:)=0.   
3381       aod865_tr2_terra(:)=0. 
3382       aod865_ss_terra(:)=0. 
3383       aod865_dust_terra(:)=0. 
3384       aod865_dustsco_terra(:)=0. 
3385       aod550_aqua(:)=0. 
3386       aod550_tr2_aqua(:)=0. 
3387       aod550_ss_aqua(:)=0.   
3388       aod550_dust_aqua(:)=0.   
3389       aod550_dustsco_aqua(:)=0.   
3390       aod670_aqua(:)=0.   
3391       aod670_tr2_aqua(:)=0. 
3392       aod670_ss_aqua(:)=0. 
3393       aod670_dust_aqua(:)=0. 
3394       aod670_dustsco_aqua(:)=0. 
3395       aod865_aqua(:)=0.   
3396       aod865_tr2_aqua(:)=0. 
3397       aod865_ss_aqua(:)=0. 
3398       aod865_dust_aqua(:)=0. 
3399       aod865_dustsco_aqua(:)=0. 
3400!JE20150518>>
3401      ENDIF
3402
3403      DO i=1,klon
3404
3405       aod550_terra(i)=aod550_terra(i)+   &
3406                       masque_terra_cur(i)*diff_aod550_tot(i)
3407       aod550_tr2_terra(i)= aod550_tr2_terra(i)+ &
3408                       masque_terra_cur(i)*diff_aod550_tr2(i)
3409       aod550_ss_terra(i)=aod550_ss_terra(i) + &
3410                       masque_terra_cur(i)*diag_aod550_ss(i)
3411       aod550_dust_terra(i)=  aod550_dust_terra(i) + &
3412                       masque_terra_cur(i)*diag_aod550_dust(i)
3413       aod550_dustsco_terra(i)= aod550_dustsco_terra(i) + &
3414                       masque_terra_cur(i)*diag_aod550_dustsco(i)
3415       aod670_terra(i)=aod670_terra(i)+   &
3416                       masque_terra_cur(i)*diag_aod670_tot(i)
3417       aod670_tr2_terra(i)= aod670_tr2_terra(i)+ &
3418                       masque_terra_cur(i)*diag_aod670_tr2(i)
3419       aod670_ss_terra(i)=aod670_ss_terra(i) + &
3420                       masque_terra_cur(i)*diag_aod670_ss(i)
3421       aod670_dust_terra(i)=  aod670_dust_terra(i) + &
3422                       masque_terra_cur(i)*diag_aod670_dust(i)
3423       aod670_dustsco_terra(i)= aod670_dustsco_terra(i) + &
3424                       masque_terra_cur(i)*diag_aod670_dustsco(i)
3425       aod865_terra(i)=aod865_terra(i)+   &
3426                       masque_terra_cur(i)*diag_aod865_tot(i)
3427       aod865_tr2_terra(i)= aod865_tr2_terra(i)+ &
3428                       masque_terra_cur(i)*diag_aod865_tr2(i)
3429       aod865_ss_terra(i)=aod865_ss_terra(i) + &
3430                       masque_terra_cur(i)*diag_aod865_ss(i)
3431       aod865_dust_terra(i)=  aod865_dust_terra(i) + &
3432                       masque_terra_cur(i)*diag_aod865_dust(i)
3433       aod865_dustsco_terra(i)= aod865_dustsco_terra(i) + &
3434                       masque_terra_cur(i)*diag_aod865_dustsco(i)
3435
3436
3437
3438       aod550_aqua(i)=aod550_aqua(i)+   &
3439                       masque_aqua_cur(i)*diff_aod550_tot(i)
3440       aod550_tr2_aqua(i)= aod550_tr2_aqua(i)+ &
3441                       masque_aqua_cur(i)*diff_aod550_tr2(i)
3442       aod550_ss_aqua(i)=aod550_ss_aqua(i) + &
3443                       masque_aqua_cur(i)*diag_aod550_ss(i)
3444       aod550_dust_aqua(i)=  aod550_dust_aqua(i) + &
3445                       masque_aqua_cur(i)*diag_aod550_dust(i)
3446       aod550_dustsco_aqua(i)= aod550_dustsco_aqua(i) + &
3447                       masque_aqua_cur(i)*diag_aod550_dustsco(i)
3448       aod670_aqua(i)=aod670_aqua(i)+   &
3449                       masque_aqua_cur(i)*diag_aod670_tot(i)
3450       aod670_tr2_aqua(i)= aod670_tr2_aqua(i)+ &
3451                       masque_aqua_cur(i)*diag_aod670_tr2(i)
3452       aod670_ss_aqua(i)=aod670_ss_aqua(i) + &
3453                       masque_aqua_cur(i)*diag_aod670_ss(i)
3454       aod670_dust_aqua(i)=  aod670_dust_aqua(i) + &
3455                       masque_aqua_cur(i)*diag_aod670_dust(i)
3456       aod670_dustsco_aqua(i)= aod670_dustsco_aqua(i) + &
3457                       masque_aqua_cur(i)*diag_aod670_dustsco(i)
3458       aod865_aqua(i)=aod865_aqua(i)+   &
3459                       masque_aqua_cur(i)*diag_aod865_tot(i)
3460       aod865_tr2_aqua(i)= aod865_tr2_aqua(i)+ &
3461                       masque_aqua_cur(i)*diag_aod865_tr2(i)
3462       aod865_ss_aqua(i)=aod865_ss_aqua(i) + &
3463                       masque_aqua_cur(i)*diag_aod865_ss(i)
3464       aod865_dust_aqua(i)=  aod865_dust_aqua(i) + &
3465                       masque_aqua_cur(i)*diag_aod865_dust(i)
3466       aod865_dustsco_aqua(i)= aod865_dustsco_aqua(i) + &
3467                       masque_aqua_cur(i)*diag_aod865_dustsco(i)
3468
3469               masque_aqua(i)=masque_aqua(i)+masque_aqua_cur(i)
3470         masque_terra(i)=masque_terra(i)+masque_terra_cur(i)
3471      ENDDO
3472
3473      IF (jH_cur+pdtphys/86400. .GE. 1.) THEN 
3474!          print *,'last step of the day'
3475          DO i=1,klon
3476               IF (masque_aqua(i).GT. 0) THEN
3477                   aod550_aqua(i)=aod550_aqua(i)/masque_aqua(i)
3478                   aod670_aqua(i)=aod670_aqua(i)/masque_aqua(i)
3479                   aod865_aqua(i)=aod865_aqua(i)/masque_aqua(i)
3480                   aod550_tr2_aqua(i)=aod550_tr2_aqua(i)/masque_aqua(i)
3481                   aod670_tr2_aqua(i)=aod670_tr2_aqua(i)/masque_aqua(i)
3482                   aod865_tr2_aqua(i)=aod865_tr2_aqua(i)/masque_aqua(i)
3483                   aod550_ss_aqua(i)=aod550_ss_aqua(i)/masque_aqua(i)
3484                   aod670_ss_aqua(i)=aod670_ss_aqua(i)/masque_aqua(i)
3485                   aod865_ss_aqua(i)=aod865_ss_aqua(i)/masque_aqua(i)
3486                   aod550_dust_aqua(i)=aod550_dust_aqua(i)/masque_aqua(i)
3487                   aod670_dust_aqua(i)=aod670_dust_aqua(i)/masque_aqua(i)
3488                   aod865_dust_aqua(i)=aod865_dust_aqua(i)/masque_aqua(i)
3489                   aod550_dustsco_aqua(i)=aod550_dustsco_aqua(i)/masque_aqua(i)
3490                   aod670_dustsco_aqua(i)=aod670_dustsco_aqua(i)/masque_aqua(i)
3491                   aod865_dustsco_aqua(i)=aod865_dustsco_aqua(i)/masque_aqua(i)
3492               ELSE
3493                   aod550_aqua(i) = -999.
3494                   aod670_aqua(i) = -999.
3495                   aod865_aqua(i) = -999.
3496                   aod550_tr2_aqua(i)= -999.
3497                   aod670_tr2_aqua(i)= -999.
3498                   aod865_tr2_aqua(i)= -999.
3499                   aod550_ss_aqua(i)= -999.
3500                   aod670_ss_aqua(i)= -999.
3501                   aod865_ss_aqua(i)= -999.
3502                   aod550_dust_aqua(i)= -999.
3503                   aod670_dust_aqua(i)= -999.
3504                   aod865_dust_aqua(i)= -999.
3505                   aod550_dustsco_aqua(i)= -999.
3506                   aod670_dustsco_aqua(i)= -999.
3507                   aod865_dustsco_aqua(i)= -999.
3508               ENDIF
3509               IF (masque_terra(i).GT. 0) THEN
3510                   aod550_terra(i)=aod550_terra(i)/masque_terra(i)
3511                   aod670_terra(i)=aod670_terra(i)/masque_terra(i)
3512                   aod865_terra(i)=aod865_terra(i)/masque_terra(i)
3513                   aod550_tr2_terra(i)=aod550_tr2_terra(i)/masque_terra(i)
3514                   aod670_tr2_terra(i)=aod670_tr2_terra(i)/masque_terra(i)
3515                   aod865_tr2_terra(i)=aod865_tr2_terra(i)/masque_terra(i)
3516                   aod550_ss_terra(i)=aod550_ss_terra(i)/masque_terra(i)
3517                   aod670_ss_terra(i)=aod670_ss_terra(i)/masque_terra(i)
3518                   aod865_ss_terra(i)=aod865_ss_terra(i)/masque_terra(i)
3519                   aod550_dust_terra(i)=aod550_dust_terra(i)/masque_terra(i)
3520                   aod670_dust_terra(i)=aod670_dust_terra(i)/masque_terra(i)
3521                   aod865_dust_terra(i)=aod865_dust_terra(i)/masque_terra(i)
3522                   aod550_dustsco_terra(i)=aod550_dustsco_terra(i)/masque_terra(i)
3523                   aod670_dustsco_terra(i)=aod670_dustsco_terra(i)/masque_terra(i)
3524                   aod865_dustsco_terra(i)=aod865_dustsco_terra(i)/masque_terra(i)
3525               ELSE
3526                   aod550_terra(i) = -999.
3527                   aod670_terra(i) = -999.
3528                   aod865_terra(i) = -999.
3529                   aod550_tr2_terra(i)= -999.
3530                   aod670_tr2_terra(i)= -999.
3531                   aod865_tr2_terra(i)= -999.
3532                   aod550_ss_terra(i)= -999.
3533                   aod670_ss_terra(i)= -999.
3534                   aod865_ss_terra(i)= -999.
3535                   aod550_dust_terra(i)= -999.
3536                   aod670_dust_terra(i)= -999.
3537                   aod865_dust_terra(i)= -999.
3538                   aod550_dustsco_terra(i)= -999.
3539                   aod670_dustsco_terra(i)= -999.
3540                   aod865_dustsco_terra(i)= -999.
3541               ENDIF
3542          ENDDO         
3543
3544!!AS deleting lines
3545!!      IF (ok_histrac) THEN
3546!!!!      write in output file
3547!!----many deleted lines
3548!!      ENDIF  !mpi_root
3549!!!$OMP END MASTER
3550!!!$OMP BARRIER
3551!!      ENDIF  !--ok_histrac
3552
3553      ENDIF ! jH_cur...
3554
3555
3556!
3557!======================================================================
3558!  Stockage sur bande histoire
3559!======================================================================
3560#ifdef IOPHYS_DUST
3561      do it=1,nbtr
3562         write(str2,'(i2.2)') it
3563         call iophys_ecrit('TRK'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3564      enddo
3565#endif
3566
3567
3568!
3569      IF (logitime) THEN
3570      CALL SYSTEM_CLOCK(COUNT=clock_start)
3571      ENDIF
3572
3573      DO it=1, nbtr
3574         DO j=1,klev
3575         DO i=1,klon
3576           tmp_var(i,j)=tr_seri(i,j,it)
3577         ENDDO
3578         ENDDO
3579         CALL cm3_to_kg(pplay,t_seri,tmp_var)
3580         DO j=1,klev
3581         DO i=1,klon
3582           tr_seri(i,j,it)=tmp_var(i,j)
3583         ENDDO
3584         ENDDO
3585      ENDDO
3586       iscm3=.false.
3587
3588!
3589!
3590!======================================================================
3591!  SAVING AEROSOL RELATED VARIABLES INTO FILE
3592!======================================================================
3593!
3594      ndex2d = 0
3595      ndex3d = 0
3596!
3597      itra=itra+1
3598
3599      print *,'SAVING VARIABLES FOR DAY ',itra
3600!
3601      fluxbb(:)=0.0
3602      fluxff(:)=0.0
3603      fluxbcbb(:)=0.0
3604      fluxbcff(:)=0.0
3605      fluxbcnff(:)=0.0
3606      fluxbcba(:)=0.0
3607      fluxbc(:)=0.0
3608      fluxombb(:)=0.0
3609      fluxomff(:)=0.0
3610      fluxomnat(:)=0.0
3611      fluxomba(:)=0.0
3612      fluxomnff(:)=0.0
3613      fluxom(:)=0.0
3614      fluxh2sff(:)=0.0
3615      fluxh2snff(:)=0.0
3616      fluxh2sbio(:)=0.0
3617      fluxso2ff(:)=0.0
3618      fluxso2nff(:)=0.0
3619      fluxso2bb(:)=0.0
3620      fluxso2vol(:)=0.0
3621      fluxso2ba(:)=0.0
3622      fluxso2(:)=0.0
3623      fluxso4ff(:)=0.0
3624      fluxso4nff(:)=0.0
3625      fluxso4bb(:)=0.0
3626      fluxso4ba(:)=0.0
3627      fluxso4(:)=0.0
3628      fluxdms(:)=0.0
3629      fluxdustec(:)=0.0
3630      fluxddfine(:)=0.0
3631      fluxddcoa(:)=0.0
3632      fluxddsco(:)=0.0
3633      fluxdd(:)=0.0
3634      fluxssfine(:)=0.0
3635      fluxsscoa(:)=0.0
3636      fluxss(:)=0.0
3637      DO i=1, klon
3638         IF (iregion_ind(i).GT.0) THEN           ! LAND
3639           ! SULFUR EMISSIONS
3640           fluxh2sff(i)= (lmt_so2ff_l(i)+lmt_so2ff_h(i))*frach2sofso2*  &       
3641                         scale_param_ind(iregion_ind(i))*               &
3642                                    1.e4/RNAVO*masse_s*1.e3         ! mgS/m2/s
3643           fluxso2ff(i)=scale_param_ind(iregion_ind(i)) * fracso2emis * &
3644                        (lmt_so2ff_l(i)+lmt_so2ff_h(i)) * 1.e4/RNAVO * &
3645                                                    masse_s * 1.e3  ! mgS/m2/s
3646           ! SULPHATE EMISSIONS
3647           fluxso4ff(i)=scale_param_ind(iregion_ind(i))*(1-fracso2emis)* &
3648                         (lmt_so2ff_l(i)+lmt_so2ff_h(i)) * 1.e4/RNAVO * &
3649                                                    masse_s * 1.e3  ! mgS/m2/s
3650           ! BLACK CARBON EMISSIONS
3651           fluxbcff(i)=scale_param_ff(iregion_ind(i))* &
3652                                             lmt_bcff(i)*1.e4*1.e3  !/g/m2/s
3653           ! ORGANIC MATTER EMISSIONS
3654           fluxomff(i)=scale_param_ff(iregion_ind(i))* &
3655                               (lmt_omff(i))*1.e4*1.e3  !/g/m2/s
3656           ! FOSSIL FUEL EMISSIONS
3657           fluxff(i)=fluxbcff(i)+fluxomff(i)
3658         ENDIF
3659         IF (iregion_bb(i).GT.0) THEN           ! LAND
3660           ! SULFUR EMISSIONS
3661           fluxso2bb(i) =scale_param_bb(iregion_bb(i)) * fracso2emis *  &
3662                      (lmt_so2bb_l(i)+lmt_so2bb_h(i))*                 &
3663                (1.-pctsrf(i,is_oce))*1.e4/RNAVO*masse_s*1.e3       ! mgS/m2/s
3664           ! SULPHATE EMISSIONS
3665           fluxso4bb(i) =scale_param_bb(iregion_bb(i))*(1-fracso2emis)* &
3666                      (lmt_so2bb_l(i)+lmt_so2bb_h(i))*                 &
3667                (1.-pctsrf(i,is_oce))*1.e4/RNAVO*masse_s*1.e3       ! mgS/m2/s
3668           ! BLACK CARBON EMISSIONS
3669           fluxbcbb(i)=scale_param_bb(iregion_bb(i))*                   &
3670                           (lmt_bcbb_l(i)+lmt_bcbb_h(i))*1.e4*1.e3  !mg/m2/s
3671           ! ORGANIC MATTER EMISSIONS
3672           fluxombb(i)=scale_param_bb(iregion_bb(i))*                   &
3673                           (lmt_ombb_l(i)+lmt_ombb_h(i))*1.e4*1.e3  !mg/m2/s
3674           ! BIOMASS BURNING EMISSIONS
3675           fluxbb(i)=fluxbcbb(i)+fluxombb(i)
3676         ENDIF
3677         ! H2S EMISSIONS
3678         fluxh2sbio(i)=lmt_h2sbio(i)*1.e4/RNAVO*masse_s*1.e3      ! mgS/m2/s
3679         fluxh2snff(i)= lmt_so2nff(i)*frach2sofso2*  &
3680                                    1.e4/RNAVO*masse_s*1.e3         ! mgS/m2/s
3681         ! SULFUR DIOXIDE EMISSIONS
3682         fluxso2nff(i)=fracso2emis * lmt_so2nff(i) * 1.e4/RNAVO *  &
3683                                                    masse_s * 1.e3  ! mgS/m2/s
3684         fluxso2vol(i)=(lmt_so2volc_cont(i)+lmt_so2volc_expl(i))  &
3685                      *1.e4/RNAVO*masse_s*1.e3        ! mgS/m2/s
3686         fluxso2ba(i) =lmt_so2ba(i)*1.e4/RNAVO*masse_s*1.e3*      &
3687                                                        fracso2emis ! mgS/m2/s
3688         fluxso2(i)=fluxso2ff(i)+fluxso2bb(i)+fluxso2nff(i)+   &
3689                   fluxso2vol(i)+fluxso2ba(i)
3690         ! DMS EMISSIONS
3691         fluxdms(i)=( lmt_dms(i)+lmt_dmsbio(i) )              &
3692                   *1.e4/RNAVO*masse_s*1.e3          ! mgS/m2/s
3693         ! SULPHATE EMISSIONS
3694         fluxso4ba(i) =lmt_so2ba(i)*1.e4/RNAVO*masse_s*1.e3        &
3695                      *(1-fracso2emis) ! mgS/m2/s
3696         fluxso4nff(i)=(1-fracso2emis)*lmt_so2nff(i) * 1.e4/RNAVO *  &
3697                                                    masse_s * 1.e3  ! mgS/m2/s
3698         fluxso4(i)=fluxso4ff(i)+fluxso4bb(i)+fluxso4ba(i)+fluxso4nff(i)
3699         ! BLACK CARBON EMISSIONS
3700
3701         fluxbcnff(i)=lmt_bcnff(i)*1.e4*1.e3  !mg/m2/s
3702         fluxbcba(i)=lmt_bcba(i)*1.e4*1.e3    !mg/m2/s
3703         fluxbc(i)=fluxbcbb(i)+fluxbcff(i)+fluxbcnff(i)+fluxbcba(i)
3704         ! ORGANIC MATTER EMISSIONS
3705         fluxomnat(i)=lmt_omnat(i)*1.e4*1.e3  !mg/m2/s
3706         fluxomba(i)=lmt_omba(i)*1.e4*1.e3  !mg/m2/s
3707         fluxomnff(i)=lmt_omnff(i)*1.e4*1.e3  !mg/m2/s
3708         fluxom(i)=fluxombb(i)+fluxomff(i)+fluxomnat(i)+fluxomba(i)+  &
3709                  fluxomnff(i)
3710        ! DUST EMISSIONS
3711         fluxdustec(i)=dust_ec(i)*1.e6 ! old dust emission scheme
3712!JE20140605<<         old dust emission version
3713!         fluxddfine(i)=scale_param_dustacc(iregion_dust(i))
3714!     .                                  * dust_ec(i)*0.093*1.e6
3715!         fluxddcoa(i)=scale_param_dustcoa(iregion_dust(i))
3716!     .                                  * dust_ec(i)*0.905*1.e6
3717!         fluxdd(i)=fluxddfine(i)+fluxddcoa(i)
3718!JE20140605>>
3719         fluxddfine(i)=flux_sparam_ddfine(i)
3720         fluxddcoa(i)=flux_sparam_ddcoa(i)
3721         fluxddsco(i)=flux_sparam_ddsco(i)
3722         fluxdd(i)=fluxddfine(i)+fluxddcoa(i)+fluxddsco(i)
3723        ! SEA SALT EMISSIONS
3724         fluxssfine(i)=scale_param_ssacc*lmt_sea_salt(i,1)*1.e4*1.e3
3725         fluxsscoa(i)=scale_param_sscoa*lmt_sea_salt(i,2)*1.e4*1.e3
3726         fluxss(i)=fluxssfine(i)+fluxsscoa(i)
3727      ENDDO
3728
3729!      prepare outputs cvltr
3730
3731      DO it=1, nbtr
3732        DO k=1,klev
3733        DO i=1,klon
3734           tmp_var(i,k)=d_tr_cv(i,k,it)
3735        ENDDO
3736        ENDDO
3737        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3738       DO k=1,klev
3739        DO i=1,klon
3740          d_tr_cv_o(i,k,it)=tmp_var(i,k)  &
3741                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3742        ENDDO
3743       ENDDO
3744      ENDDO
3745      DO it=1, nbtr
3746        DO k=1,klev
3747        DO i=1,klon
3748           tmp_var(i,k)=d_tr_trsp(i,k,it)
3749        ENDDO
3750        ENDDO
3751        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3752       DO k=1,klev
3753        DO i=1,klon
3754          d_tr_trsp_o(i,k,it)=tmp_var(i,k)  &
3755                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3756        ENDDO
3757       ENDDO
3758      ENDDO
3759      DO it=1, nbtr
3760        DO k=1,klev
3761        DO i=1,klon
3762           tmp_var(i,k)=d_tr_sscav(i,k,it)
3763        ENDDO
3764        ENDDO
3765        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3766       DO k=1,klev
3767        DO i=1,klon
3768          d_tr_sscav_o(i,k,it)=tmp_var(i,k)  &
3769                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3770        ENDDO
3771       ENDDO
3772      ENDDO
3773      DO it=1, nbtr
3774        DO k=1,klev
3775        DO i=1,klon
3776           tmp_var(i,k)=d_tr_sat(i,k,it)
3777        ENDDO
3778        ENDDO
3779        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3780       DO k=1,klev
3781        DO i=1,klon
3782          d_tr_sat_o(i,k,it)=tmp_var(i,k)   &
3783                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3784        ENDDO
3785       ENDDO
3786      ENDDO
3787      DO it=1, nbtr
3788        DO k=1,klev
3789        DO i=1,klon
3790           tmp_var(i,k)=d_tr_uscav(i,k,it)
3791        ENDDO
3792        ENDDO
3793        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3794       DO k=1,klev
3795        DO i=1,klon
3796          d_tr_uscav_o(i,k,it)=tmp_var(i,k)  &
3797                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3798        ENDDO
3799       ENDDO
3800      ENDDO
3801!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3802     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3803      DO it=1, nbtr
3804        DO k=1,klev
3805        DO i=1,klon
3806           tmp_var(i,k)=d_tr_insc(i,k,it)
3807        ENDDO
3808        ENDDO
3809        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3810       DO k=1,klev
3811        DO i=1,klon
3812          d_tr_insc_o(i,k,it)=tmp_var(i,k)  &
3813                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3814        ENDDO
3815       ENDDO
3816      ENDDO
3817     
3818
3819      DO it=1, nbtr
3820        DO k=1,klev
3821        DO i=1,klon
3822           tmp_var(i,k)=d_tr_bcscav(i,k,it)
3823        ENDDO
3824        ENDDO
3825        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3826       DO k=1,klev
3827        DO i=1,klon
3828          d_tr_bcscav_o(i,k,it)=tmp_var(i,k)  &
3829                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3830        ENDDO
3831       ENDDO
3832      ENDDO
3833
3834
3835      DO it=1, nbtr
3836        DO k=1,klev
3837        DO i=1,klon
3838           tmp_var(i,k)=d_tr_evapls(i,k,it)
3839        ENDDO
3840        ENDDO
3841        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3842       DO k=1,klev
3843        DO i=1,klon
3844          d_tr_evapls_o(i,k,it)=tmp_var(i,k)  &
3845                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3846        ENDDO
3847       ENDDO
3848      ENDDO
3849
3850
3851      DO it=1, nbtr
3852        DO k=1,klev
3853        DO i=1,klon
3854           tmp_var(i,k)=d_tr_ls(i,k,it)
3855        ENDDO
3856        ENDDO
3857        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3858       DO k=1,klev
3859        DO i=1,klon
3860          d_tr_ls_o(i,k,it)=tmp_var(i,k)  &
3861                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3862        ENDDO
3863       ENDDO
3864      ENDDO
3865
3866
3867      DO it=1, nbtr
3868        DO k=1,klev
3869        DO i=1,klon
3870           tmp_var(i,k)=d_tr_dyn(i,k,it)
3871        ENDDO
3872        ENDDO
3873        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3874       DO k=1,klev
3875        DO i=1,klon
3876          d_tr_dyn_o(i,k,it)=tmp_var(i,k)  &
3877                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3878        ENDDO
3879       ENDDO
3880      ENDDO
3881
3882
3883      DO it=1, nbtr
3884        DO k=1,klev
3885        DO i=1,klon
3886           tmp_var(i,k)=d_tr_cl(i,k,it)
3887        ENDDO
3888        ENDDO
3889        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3890       DO k=1,klev
3891        DO i=1,klon
3892          d_tr_cl_o(i,k,it)=tmp_var(i,k)  &
3893                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3894        ENDDO
3895       ENDDO
3896      ENDDO
3897
3898
3899      DO it=1, nbtr
3900        DO k=1,klev
3901        DO i=1,klon
3902           tmp_var(i,k)=d_tr_th(i,k,it)
3903        ENDDO
3904        ENDDO
3905        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3906       DO k=1,klev
3907        DO i=1,klon
3908          d_tr_th_o(i,k,it)=tmp_var(i,k)  &
3909                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3910        ENDDO
3911       ENDDO
3912      ENDDO
3913     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3914!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3915
3916     DO it=1,nbtr
3917      WRITE(str2,'(i2.2)') it
3918       DO i=1, klon                                                       
3919        his_dh(i,it)= his_dhlsc(i,it)+his_dhcon(i,it)+               &
3920                   his_dhbclsc(i,it)+his_dhbccon(i,it)
3921
3922       ENDDO
3923      ENDDO
3924
3925!AS: commenting out and deleting lines
3926!!      IF (ok_histrac) THEN
3927!!
3928!! SAVING VARIABLES IN TRACEUR
3929!!----- many lines deleted----
3930!!      ENDIF ! ok_histrac                                                   
3931                                                                           
3932
3933
3934
3935!JE20141224
3936! saving variables for output
3937! 2D outputs
3938      DO i=1, klon
3939       trm01(i)=0.
3940       trm02(i)=0.
3941       trm03(i)=0.
3942       trm04(i)=0.
3943       trm05(i)=0.
3944       sconc01(i)=0.
3945       sconc02(i)=0.
3946       sconc03(i)=0.
3947       sconc04(i)=0.
3948       sconc05(i)=0.
3949       flux01(i)=0.
3950       flux02(i)=0.
3951       flux03(i)=0.
3952       flux04(i)=0.
3953       flux05(i)=0.
3954       ds01(i)=0.
3955       ds02(i)=0.
3956       ds03(i)=0.
3957       ds04(i)=0.
3958       ds05(i)=0.
3959       dh01(i)=0.
3960       dh02(i)=0.
3961       dh03(i)=0.
3962       dh04(i)=0.
3963       dh05(i)=0.
3964       dtrconv01(i)=0.
3965       dtrconv02(i)=0.
3966       dtrconv03(i)=0.
3967       dtrconv04(i)=0.
3968       dtrconv05(i)=0.
3969       dtherm01(i)=0.
3970       dtherm02(i)=0.
3971       dtherm03(i)=0.
3972       dtherm04(i)=0.
3973       dtherm05(i)=0.
3974       dhkecv01(i)=0.
3975       dhkecv02(i)=0.
3976       dhkecv03(i)=0.
3977       dhkecv04(i)=0.
3978       dhkecv05(i)=0.
3979       d_tr_ds01(i)=0.
3980       d_tr_ds02(i)=0.
3981       d_tr_ds03(i)=0.
3982       d_tr_ds04(i)=0.
3983       d_tr_ds05(i)=0.
3984       dhkelsc01(i)=0.
3985       dhkelsc02(i)=0.
3986       dhkelsc03(i)=0.
3987       dhkelsc04(i)=0.
3988       dhkelsc05(i)=0.
3989!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3990
3991      if(id_prec>0)  trm01(i)=trm(i,id_prec)
3992      if(id_fine>0)  trm02(i)=trm(i,id_fine)
3993      if(id_coss>0)  trm03(i)=trm(i,id_coss)
3994      if(id_codu>0)  trm04(i)=trm(i,id_codu)
3995      if(id_scdu>0)  trm05(i)=trm(i,id_scdu)
3996      if(id_prec>0)    sconc01(i)=sconc_seri(i,id_prec)
3997      if(id_fine>0)    sconc02(i)=sconc_seri(i,id_fine)
3998      if(id_coss>0)    sconc03(i)=sconc_seri(i,id_coss)
3999      if(id_codu>0)    sconc04(i)=sconc_seri(i,id_codu)
4000      if(id_scdu>0)    sconc05(i)=sconc_seri(i,id_scdu)
4001      if(id_prec>0)    flux01(i)=flux_tr(i,id_prec)
4002      if(id_fine>0)    flux02(i)=flux_tr(i,id_fine)
4003      if(id_coss>0)    flux03(i)=flux_tr(i,id_coss)
4004      if(id_codu>0)    flux04(i)=flux_tr(i,id_codu)
4005      if(id_scdu>0)    flux05(i)=flux_tr(i,id_scdu)
4006      if(id_prec>0)    ds01(i)=his_ds(i,id_prec)
4007      if(id_fine>0)    ds02(i)=his_ds(i,id_fine)
4008      if(id_coss>0)    ds03(i)=his_ds(i,id_coss)
4009      if(id_codu>0)    ds04(i)=his_ds(i,id_codu)
4010      if(id_scdu>0)    ds05(i)=his_ds(i,id_scdu)
4011      if(id_prec>0)    dh01(i)=his_dh(i,id_prec)
4012      if(id_fine>0)    dh02(i)=his_dh(i,id_fine)
4013      if(id_coss>0)    dh03(i)=his_dh(i,id_coss)
4014      if(id_codu>0)    dh04(i)=his_dh(i,id_codu)
4015      if(id_scdu>0)    dh05(i)=his_dh(i,id_scdu)
4016      if(id_prec>0)    dtrconv01(i)=dtrconv(i,id_prec)
4017      if(id_fine>0)    dtrconv02(i)=dtrconv(i,id_fine)
4018      if(id_coss>0)    dtrconv03(i)=dtrconv(i,id_coss)
4019      if(id_codu>0)    dtrconv04(i)=dtrconv(i,id_codu)
4020      if(id_scdu>0)    dtrconv05(i)=dtrconv(i,id_scdu)
4021      if(id_prec>0)    dtherm01(i)=his_th(i,id_prec)
4022      if(id_fine>0)    dtherm02(i)=his_th(i,id_fine)
4023      if(id_coss>0)    dtherm03(i)=his_th(i,id_coss)
4024      if(id_codu>0)    dtherm04(i)=his_th(i,id_codu)
4025      if(id_scdu>0)    dtherm05(i)=his_th(i,id_scdu)
4026      if(id_prec>0)    dhkecv01(i)=his_dhkecv(i,id_prec)
4027      if(id_fine>0)    dhkecv02(i)=his_dhkecv(i,id_fine)
4028      if(id_coss>0)    dhkecv03(i)=his_dhkecv(i,id_coss)
4029      if(id_codu>0)    dhkecv04(i)=his_dhkecv(i,id_codu)
4030      if(id_scdu>0)    dhkecv05(i)=his_dhkecv(i,id_scdu)
4031      if(id_prec>0)    d_tr_ds01(i)=his_ds(i,id_prec)
4032      if(id_fine>0)    d_tr_ds02(i)=his_ds(i,id_fine)
4033      if(id_coss>0)    d_tr_ds03(i)=his_ds(i,id_coss)
4034      if(id_codu>0)    d_tr_ds04(i)=his_ds(i,id_codu)
4035      if(id_scdu>0)    d_tr_ds05(i)=his_ds(i,id_scdu)
4036      if(id_prec>0)    dhkelsc01(i)=his_dhkelsc(i,id_prec)
4037      if(id_fine>0)    dhkelsc02(i)=his_dhkelsc(i,id_fine)
4038      if(id_coss>0)    dhkelsc03(i)=his_dhkelsc(i,id_coss)
4039      if(id_codu>0)    dhkelsc04(i)=his_dhkelsc(i,id_codu)
4040      if(id_scdu>0)    dhkelsc05(i)=his_dhkelsc(i,id_scdu)
4041       u10m_ss(i)=u10m_ec(i)
4042       v10m_ss(i)=v10m_ec(i)
4043      ENDDO
4044! 3D outs
4045      DO i=1, klon
4046        DO k=1,klev
4047      d_tr_cv01(i,k)   =0.
4048      d_tr_cv02(i,k)   =0.
4049      d_tr_cv03(i,k)   =0.
4050      d_tr_cv04(i,k)   =0.
4051      d_tr_cv05(i,k)   =0.
4052      d_tr_trsp01(i,k) =0.
4053      d_tr_trsp02(i,k) =0.
4054      d_tr_trsp03(i,k) =0.
4055      d_tr_trsp04(i,k) =0.
4056      d_tr_trsp05(i,k) =0.
4057      d_tr_sscav01(i,k)=0.
4058      d_tr_sscav02(i,k)=0.
4059      d_tr_sscav03(i,k)=0.
4060      d_tr_sscav04(i,k)=0.
4061      d_tr_sscav05(i,k)=0.
4062      d_tr_sat01(i,k)  =0.
4063      d_tr_sat02(i,k)  =0.
4064      d_tr_sat03(i,k)  =0.
4065      d_tr_sat04(i,k)  =0.
4066      d_tr_sat05(i,k)  =0.
4067      d_tr_uscav01(i,k)=0.
4068      d_tr_uscav02(i,k)=0.
4069      d_tr_uscav03(i,k)=0.
4070      d_tr_uscav04(i,k)=0.
4071      d_tr_uscav05(i,k)=0.
4072      d_tr_insc01(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4073      d_tr_insc02(i,k)=0.
4074      d_tr_insc03(i,k)=0.
4075      d_tr_insc04(i,k)=0.
4076      d_tr_insc05(i,k)=0.
4077      d_tr_bcscav01(i,k)=0.
4078      d_tr_bcscav02(i,k)=0.
4079      d_tr_bcscav03(i,k)=0.
4080      d_tr_bcscav04(i,k)=0.
4081      d_tr_bcscav05(i,k)=0.
4082      d_tr_evapls01(i,k)=0.
4083      d_tr_evapls02(i,k)=0.
4084      d_tr_evapls03(i,k)=0.
4085      d_tr_evapls04(i,k)=0.
4086      d_tr_evapls05(i,k)=0.
4087      d_tr_ls01(i,k)=0.
4088      d_tr_ls02(i,k)=0.
4089      d_tr_ls03(i,k)=0.
4090      d_tr_ls04(i,k)=0.
4091      d_tr_ls05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4092      d_tr_dyn01(i,k)=0.
4093      d_tr_dyn02(i,k)=0.
4094      d_tr_dyn03(i,k)=0.
4095      d_tr_dyn04(i,k)=0.
4096      d_tr_dyn05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4097      d_tr_cl01(i,k)=0.
4098      d_tr_cl02(i,k)=0.
4099      d_tr_cl03(i,k)=0.
4100      d_tr_cl04(i,k)=0.
4101      d_tr_cl05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4102      d_tr_th01(i,k)=0.
4103      d_tr_th02(i,k)=0.
4104      d_tr_th03(i,k)=0.
4105      d_tr_th04(i,k)=0.
4106      d_tr_th05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4107        ENDDO
4108      ENDDO
4109
4110      IF(1==0) THEN
4111      ! calcul in original trunk version; problem: budget not closed. Corrected in "ELSE"
4112      DO i=1, klon
4113        DO k=1,klev
4114
4115      if(id_prec>0)        d_tr_cv01(i,k)   =d_tr_cv_o(i,k,id_prec)
4116      if(id_fine>0)        d_tr_cv02(i,k)   =d_tr_cv_o(i,k,id_fine)
4117      if(id_coss>0)        d_tr_cv03(i,k)   =d_tr_cv_o(i,k,id_coss)
4118      if(id_codu>0)        d_tr_cv04(i,k)   =d_tr_cv_o(i,k,id_codu)
4119      if(id_scdu>0)        d_tr_cv05(i,k)   =d_tr_cv_o(i,k,id_scdu)
4120      if(id_prec>0)        d_tr_trsp01(i,k) =d_tr_trsp_o(i,k,id_prec)
4121      if(id_fine>0)        d_tr_trsp02(i,k) =d_tr_trsp_o(i,k,id_fine)
4122      if(id_coss>0)        d_tr_trsp03(i,k) =d_tr_trsp_o(i,k,id_coss)
4123      if(id_codu>0)        d_tr_trsp04(i,k) =d_tr_trsp_o(i,k,id_codu)
4124      if(id_scdu>0)        d_tr_trsp05(i,k) =d_tr_trsp_o(i,k,id_scdu)
4125      if(id_prec>0)        d_tr_sscav01(i,k)=d_tr_sscav_o(i,k,id_prec)
4126      if(id_fine>0)        d_tr_sscav02(i,k)=d_tr_sscav_o(i,k,id_fine)
4127      if(id_coss>0)        d_tr_sscav03(i,k)=d_tr_sscav_o(i,k,id_coss)
4128      if(id_codu>0)        d_tr_sscav04(i,k)=d_tr_sscav_o(i,k,id_codu)
4129      if(id_scdu>0)        d_tr_sscav05(i,k)=d_tr_sscav_o(i,k,id_scdu)
4130      if(id_prec>0)        d_tr_sat01(i,k)  =d_tr_sat_o(i,k,id_prec)
4131      if(id_fine>0)        d_tr_sat02(i,k)  =d_tr_sat_o(i,k,id_fine)
4132      if(id_coss>0)        d_tr_sat03(i,k)  =d_tr_sat_o(i,k,id_coss)
4133      if(id_codu>0)        d_tr_sat04(i,k)  =d_tr_sat_o(i,k,id_codu)
4134      if(id_scdu>0)        d_tr_sat05(i,k)  =d_tr_sat_o(i,k,id_scdu)
4135      if(id_prec>0)        d_tr_uscav01(i,k)=d_tr_uscav_o(i,k,id_prec)
4136      if(id_fine>0)        d_tr_uscav02(i,k)=d_tr_uscav_o(i,k,id_fine)
4137      if(id_coss>0)        d_tr_uscav03(i,k)=d_tr_uscav_o(i,k,id_coss)
4138      if(id_codu>0)        d_tr_uscav04(i,k)=d_tr_uscav_o(i,k,id_codu)
4139      if(id_scdu>0)        d_tr_uscav05(i,k)=d_tr_uscav_o(i,k,id_scdu)
4140      if(id_prec>0)        d_tr_insc01(i,k)=d_tr_insc_o(i,k,id_prec)
4141      if(id_fine>0)        d_tr_insc02(i,k)=d_tr_insc_o(i,k,id_fine)
4142      if(id_coss>0)        d_tr_insc03(i,k)=d_tr_insc_o(i,k,id_coss)
4143      if(id_codu>0)        d_tr_insc04(i,k)=d_tr_insc_o(i,k,id_codu)
4144      if(id_scdu>0)        d_tr_insc05(i,k)=d_tr_insc_o(i,k,id_scdu)
4145      if(id_prec>0)        d_tr_bcscav01(i,k)=d_tr_bcscav_o(i,k,id_prec)
4146      if(id_fine>0)        d_tr_bcscav02(i,k)=d_tr_bcscav_o(i,k,id_fine)
4147      if(id_coss>0)        d_tr_bcscav03(i,k)=d_tr_bcscav_o(i,k,id_coss)
4148      if(id_codu>0)        d_tr_bcscav04(i,k)=d_tr_bcscav_o(i,k,id_codu)
4149      if(id_scdu>0)        d_tr_bcscav05(i,k)=d_tr_bcscav_o(i,k,id_scdu)
4150      if(id_prec>0)        d_tr_evapls01(i,k)=d_tr_evapls_o(i,k,id_prec)
4151      if(id_fine>0)        d_tr_evapls02(i,k)=d_tr_evapls_o(i,k,id_fine)
4152      if(id_coss>0)        d_tr_evapls03(i,k)=d_tr_evapls_o(i,k,id_coss)
4153      if(id_codu>0)        d_tr_evapls04(i,k)=d_tr_evapls_o(i,k,id_codu)
4154      if(id_scdu>0)        d_tr_evapls05(i,k)=d_tr_evapls_o(i,k,id_scdu)
4155        ENDDO
4156      ENDDO
4157      ELSE ! correction pour fermeture de bilan, par FH dans les simus de Binta pour Habib
4158      DO i=1, klon
4159        DO k=1,klev
4160      if(id_prec>0)        d_tr_cv01(i,k)   =d_tr_cv(i,k,id_prec)/pdtphys
4161      if(id_fine>0)        d_tr_cv02(i,k)   =d_tr_cv(i,k,id_fine)/pdtphys
4162      if(id_coss>0)        d_tr_cv03(i,k)   =d_tr_cv(i,k,id_coss)/pdtphys
4163      if(id_codu>0)        d_tr_cv04(i,k)   =d_tr_cv(i,k,id_codu)/pdtphys
4164      if(id_scdu>0)        d_tr_cv05(i,k)   =d_tr_cv(i,k,id_scdu)/pdtphys
4165      if(id_prec>0)        d_tr_trsp01(i,k) =d_tr_trsp(i,k,id_prec)/pdtphys
4166      if(id_fine>0)        d_tr_trsp02(i,k) =d_tr_trsp(i,k,id_fine)/pdtphys
4167      if(id_coss>0)        d_tr_trsp03(i,k) =d_tr_trsp(i,k,id_coss)/pdtphys
4168      if(id_codu>0)        d_tr_trsp04(i,k) =d_tr_trsp(i,k,id_codu)/pdtphys
4169      if(id_scdu>0)        d_tr_trsp05(i,k) =d_tr_trsp(i,k,id_scdu)/pdtphys
4170      if(id_prec>0)        d_tr_sscav01(i,k)=d_tr_sscav(i,k,id_prec)/pdtphys
4171      if(id_fine>0)        d_tr_sscav02(i,k)=d_tr_sscav(i,k,id_fine)/pdtphys
4172      if(id_coss>0)        d_tr_sscav03(i,k)=d_tr_sscav(i,k,id_coss)/pdtphys
4173      if(id_codu>0)        d_tr_sscav04(i,k)=d_tr_sscav(i,k,id_codu)/pdtphys
4174      if(id_scdu>0)        d_tr_sscav05(i,k)=d_tr_sscav(i,k,id_scdu)/pdtphys
4175      if(id_prec>0)        d_tr_sat01(i,k)  =d_tr_sat(i,k,id_prec)/pdtphys
4176      if(id_fine>0)        d_tr_sat02(i,k)  =d_tr_sat(i,k,id_fine)/pdtphys
4177      if(id_coss>0)        d_tr_sat03(i,k)  =d_tr_sat(i,k,id_coss)/pdtphys
4178      if(id_codu>0)        d_tr_sat04(i,k)  =d_tr_sat(i,k,id_codu)/pdtphys
4179      if(id_scdu>0)        d_tr_sat05(i,k)  =d_tr_sat(i,k,id_scdu)/pdtphys
4180      if(id_prec>0)        d_tr_uscav01(i,k)=d_tr_uscav(i,k,id_prec)/pdtphys
4181      if(id_fine>0)        d_tr_uscav02(i,k)=d_tr_uscav(i,k,id_fine)/pdtphys
4182      if(id_coss>0)        d_tr_uscav03(i,k)=d_tr_uscav(i,k,id_coss)/pdtphys
4183      if(id_codu>0)        d_tr_uscav04(i,k)=d_tr_uscav(i,k,id_codu)/pdtphys
4184      if(id_scdu>0)        d_tr_uscav05(i,k)=d_tr_uscav(i,k,id_scdu)/pdtphys
4185      if(id_prec>0)        d_tr_insc01(i,k)=d_tr_insc(i,k,id_prec)/pdtphys
4186      if(id_fine>0)        d_tr_insc02(i,k)=d_tr_insc(i,k,id_fine)/pdtphys
4187      if(id_coss>0)        d_tr_insc03(i,k)=d_tr_insc(i,k,id_coss)/pdtphys
4188      if(id_codu>0)        d_tr_insc04(i,k)=d_tr_insc(i,k,id_codu)/pdtphys
4189      if(id_scdu>0)        d_tr_insc05(i,k)=d_tr_insc(i,k,id_scdu)/pdtphys
4190      if(id_prec>0)        d_tr_bcscav01(i,k)=d_tr_bcscav(i,k,id_prec)/pdtphys
4191      if(id_fine>0)        d_tr_bcscav02(i,k)=d_tr_bcscav(i,k,id_fine)/pdtphys
4192      if(id_coss>0)        d_tr_bcscav03(i,k)=d_tr_bcscav(i,k,id_coss)/pdtphys
4193      if(id_codu>0)        d_tr_bcscav04(i,k)=d_tr_bcscav(i,k,id_codu)/pdtphys
4194      if(id_scdu>0)        d_tr_bcscav05(i,k)=d_tr_bcscav(i,k,id_scdu)/pdtphys
4195      if(id_prec>0)        d_tr_evapls01(i,k)=d_tr_evapls(i,k,id_prec)/pdtphys
4196      if(id_fine>0)        d_tr_evapls02(i,k)=d_tr_evapls(i,k,id_fine)/pdtphys
4197      if(id_coss>0)        d_tr_evapls03(i,k)=d_tr_evapls(i,k,id_coss)/pdtphys
4198      if(id_codu>0)        d_tr_evapls04(i,k)=d_tr_evapls(i,k,id_codu)/pdtphys
4199      if(id_scdu>0)        d_tr_evapls05(i,k)=d_tr_evapls(i,k,id_scdu)/pdtphys
4200        ENDDO
4201      ENDDO
4202      ENDIF
4203
4204      IF(1==0) THEN  ! This "if" is as in original trunk
4205      DO i=1, klon
4206        DO k=1,klev
4207      if(id_prec>0)        d_tr_ls01(i,k)=d_tr_ls_o(i,k,id_prec)
4208      if(id_fine>0)        d_tr_ls02(i,k)=d_tr_ls_o(i,k,id_fine)
4209      if(id_coss>0)        d_tr_ls03(i,k)=d_tr_ls_o(i,k,id_coss)
4210      if(id_codu>0)        d_tr_ls04(i,k)=d_tr_ls_o(i,k,id_codu)
4211      if(id_scdu>0)        d_tr_ls05(i,k)=d_tr_ls_o(i,k,id_scdu)
4212      if(id_prec>0)        d_tr_dyn01(i,k)=d_tr_dyn_o(i,k,id_prec)
4213      if(id_fine>0)        d_tr_dyn02(i,k)=d_tr_dyn_o(i,k,id_fine)
4214      if(id_coss>0)        d_tr_dyn03(i,k)=d_tr_dyn_o(i,k,id_coss)
4215      if(id_codu>0)        d_tr_dyn04(i,k)=d_tr_dyn_o(i,k,id_codu)
4216      if(id_scdu>0)        d_tr_dyn05(i,k)=d_tr_dyn_o(i,k,id_scdu)
4217      if(id_prec>0)        d_tr_cl01(i,k)=d_tr_cl_o(i,k,id_prec)
4218      if(id_fine>0)        d_tr_cl02(i,k)=d_tr_cl_o(i,k,id_fine)
4219      if(id_coss>0)        d_tr_cl03(i,k)=d_tr_cl_o(i,k,id_coss)
4220      if(id_codu>0)        d_tr_cl04(i,k)=d_tr_cl_o(i,k,id_codu)
4221      if(id_scdu>0)        d_tr_cl05(i,k)=d_tr_cl_o(i,k,id_scdu)
4222      if(id_prec>0)        d_tr_th01(i,k)=d_tr_th_o(i,k,id_prec)
4223      if(id_fine>0)        d_tr_th02(i,k)=d_tr_th_o(i,k,id_fine)
4224      if(id_coss>0)        d_tr_th03(i,k)=d_tr_th_o(i,k,id_coss)
4225      if(id_codu>0)        d_tr_th04(i,k)=d_tr_th_o(i,k,id_codu)
4226      if(id_scdu>0)        d_tr_th05(i,k)=d_tr_th_o(i,k,id_scdu)
4227        ENDDO
4228      ENDDO
4229      ELSE
4230      DO i=1, klon
4231        DO k=1,klev
4232      if(id_prec>0)        d_tr_ls01(i,k)=d_tr_ls(i,k,id_prec)/pdtphys
4233      if(id_fine>0)        d_tr_ls02(i,k)=d_tr_ls(i,k,id_fine)/pdtphys
4234      if(id_coss>0)        d_tr_ls03(i,k)=d_tr_ls(i,k,id_coss)/pdtphys
4235      if(id_codu>0)        d_tr_ls04(i,k)=d_tr_ls(i,k,id_codu)/pdtphys
4236      if(id_scdu>0)        d_tr_ls05(i,k)=d_tr_ls(i,k,id_scdu)/pdtphys
4237      if(id_prec>0)        d_tr_dyn01(i,k)=d_tr_dyn(i,k,id_prec)/pdtphys
4238      if(id_fine>0)        d_tr_dyn02(i,k)=d_tr_dyn(i,k,id_fine)/pdtphys
4239      if(id_coss>0)        d_tr_dyn03(i,k)=d_tr_dyn(i,k,id_coss)/pdtphys
4240      if(id_codu>0)        d_tr_dyn04(i,k)=d_tr_dyn(i,k,id_codu)/pdtphys
4241      if(id_scdu>0)        d_tr_dyn05(i,k)=d_tr_dyn(i,k,id_scdu)/pdtphys
4242      if(id_prec>0)        d_tr_cl01(i,k)=d_tr_cl(i,k,id_prec)/pdtphys
4243      if(id_fine>0)        d_tr_cl02(i,k)=d_tr_cl(i,k,id_fine)/pdtphys
4244      if(id_coss>0)        d_tr_cl03(i,k)=d_tr_cl(i,k,id_coss)/pdtphys
4245      if(id_codu>0)        d_tr_cl04(i,k)=d_tr_cl(i,k,id_codu)/pdtphys
4246      if(id_scdu>0)        d_tr_cl05(i,k)=d_tr_cl(i,k,id_scdu)/pdtphys
4247      if(id_prec>0)        d_tr_th01(i,k)=d_tr_th(i,k,id_prec)/pdtphys
4248      if(id_fine>0)        d_tr_th02(i,k)=d_tr_th(i,k,id_fine)/pdtphys
4249      if(id_coss>0)        d_tr_th03(i,k)=d_tr_th(i,k,id_coss)/pdtphys
4250      if(id_codu>0)        d_tr_th04(i,k)=d_tr_th(i,k,id_codu)/pdtphys
4251      if(id_scdu>0)        d_tr_th05(i,k)=d_tr_th(i,k,id_scdu)/pdtphys
4252        ENDDO
4253      ENDDO
4254      ENDIF
4255     
4256
4257      IF (logitime) THEN
4258      CALL SYSTEM_CLOCK(COUNT=clock_end)
4259
4260      dife=clock_end-clock_start
4261      ti_outs=dife*MAX(0,SIGN(1,dife))   &
4262      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4263      tia_outs=tia_outs+REAL(ti_outs)/REAL(clock_rate)
4264      ENDIF
4265
4266      IF (logitime) THEN
4267      CALL SYSTEM_CLOCK(COUNT=clock_end)
4268
4269      dife=clock_end-clock_start_spla
4270      ti_spla=dife*MAX(0,SIGN(1,dife)) &
4271      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4272
4273
4274      tia_spla=tia_spla+REAL(ti_spla)/REAL(clock_rate)
4275  print *,'times for this timestep:timeproc,timeproc/time_pytracr_spl-'
4276     print *,'time spla',REAL(ti_spla)/REAL(clock_rate)                &
4277      ,REAL(ti_spla)/REAL(ti_spla)                                     
4278     print *,'time init',REAL(ti_init)/REAL(clock_rate)                &
4279      ,REAL(ti_init)/REAL(ti_spla)                                     
4280     print *,'time inittype',REAL(ti_inittype)/REAL(clock_rate)        &
4281      ,REAL(ti_inittype)/REAL(ti_spla)                                 
4282     print *,'time inittwrite',REAL(ti_inittwrite)/REAL(clock_rate)    &
4283      ,REAL(ti_inittwrite)/REAL(ti_spla)                               
4284     print *,'time emis',REAL(ti_emis)/REAL(clock_rate)                &
4285      ,REAL(ti_emis)/REAL(ti_spla)                                     
4286     print *,'time depo ',REAL(ti_depo)/REAL(clock_rate)               &
4287      ,REAL(ti_depo)/REAL(ti_spla)                                     
4288     print *,'time cltr',REAL(ti_cltr)/REAL(clock_rate)                &
4289      ,REAL(ti_cltr)/REAL(ti_spla)                                     
4290     print *,'time ther',REAL(ti_ther)/REAL(clock_rate)                &
4291      ,REAL(ti_ther)/REAL(ti_spla)                                     
4292     print *,'time sedi',REAL(ti_sedi)/REAL(clock_rate)                &
4293      ,REAL(ti_sedi)/REAL(ti_spla)                                     
4294     print *,'time gas to part',REAL(ti_gasp)/REAL(clock_rate)         &
4295      ,REAL(ti_gasp)/REAL(ti_spla)                                     
4296     print *,'time AP wet',REAL(ti_wetap)/REAL(clock_rate)             &
4297      ,REAL(ti_wetap)/REAL(ti_spla)                                     
4298     print *,'time convective',REAL(ti_cvltr)/REAL(clock_rate)         &
4299      ,REAL(ti_cvltr)/REAL(ti_spla)                                     
4300     print *,'time NP lsc scav',REAL(ti_lscs)/REAL(clock_rate)         &
4301      ,REAL(ti_lscs)/REAL(ti_spla)                                     
4302     print *,'time opt,brdn,etc',REAL(ti_brop)/REAL(clock_rate)        &
4303      ,REAL(ti_brop)/REAL(ti_spla)                                     
4304     print *,'time outputs',REAL(ti_outs)/REAL(clock_rate)             &
4305      ,REAL(ti_outs)/REAL(ti_spla)
4306
4307
4308  print *,'--time accumulated: time proc, time proc/time phytracr_spl--'
4309      print *,'time spla',tia_spla
4310      print *,'time init',tia_init,tia_init/tia_spla
4311      print *,'time inittype',tia_inittype,tia_inittype/tia_spla
4312      print *,'time inittwrite',tia_inittwrite,tia_inittwrite/tia_spla
4313      print *,'time emis',tia_emis,tia_emis/tia_spla
4314      print *,'time depo',tia_depo,tia_depo/tia_spla
4315      print *,'time cltr',tia_cltr,tia_cltr/tia_spla
4316      print *,'time ther',tia_ther,tia_ther/tia_spla
4317      print *,'time sedi',tia_sedi,tia_sedi/tia_spla
4318      print *,'time gas to part',tia_gasp,tia_gasp/tia_spla
4319      print *,'time AP wet',tia_wetap,tia_wetap/tia_spla
4320      print *,'time convective',tia_cvltr,tia_cvltr/tia_spla
4321      print *,'time NP lsc scav',tia_lscs,tia_lscs/tia_spla
4322      print *,'time opt,brdn,etc',tia_brop,tia_brop/tia_spla
4323      print *,'time outputs',tia_outs,tia_outs/tia_spla
4324
4325
4326
4327      dife=clock_end_outphytracr-clock_start_outphytracr
4328      ti_nophytracr=dife*MAX(0,SIGN(1,dife))  &
4329      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4330      tia_nophytracr=tia_nophytracr+REAL(ti_nophytracr)/REAL(clock_rate)
4331      print *,'Time outside phytracr; Time accum outside phytracr'
4332      print*,REAL(ti_nophytracr)/REAL(clock_rate),tia_nophytracr
4333
4334      clock_start_outphytracr=clock_end
4335
4336      ENDIF     
4337      print *,'END PHYTRACR_SPL '
4338  print *,'lmt_so2ff_l FIN' , MINVAL(lmt_so2ff_l), MAXVAL(lmt_so2ff_l)
4339
4340!      CALL abort_gcm('TEST1', 'OK1', 1)
4341
4342      RETURN
4343      END SUBROUTINE phytracr_spl
4344 
4345      SUBROUTINE readregionsdims2_spl(nbreg,fileregions)
4346
4347      USE mod_grid_phy_lmdz
4348      USE mod_phys_lmdz_para
4349
4350      IMPLICIT NONE
4351      CHARACTER*800 fileregions
4352      CHARACTER*800 auxstr
4353      INTEGER nbreg
4354 
4355      IF (is_mpi_root .AND. is_omp_root) THEN
4356
4357      OPEN (UNIT=1,FILE=trim(adjustl(fileregions)))
4358      READ(1,'(a)') auxstr
4359      READ(1,'(i10)') nbreg
4360      CLOSE(UNIT=1)
4361      ENDIF
4362      CALL bcast(nbreg)
4363
4364      END SUBROUTINE readregionsdims2_spl
4365
4366      SUBROUTINE readregionsdims_spl(nbreg_ind,fileregionsdimsind,   &
4367                                    nbreg_dust,fileregionsdimsdust,  &
4368                                    nbreg_bb,fileregionsdimsbb)     
4369      USE mod_grid_phy_lmdz
4370      USE mod_phys_lmdz_para
4371
4372      IMPLICIT NONE
4373      CHARACTER*800 fileregionsdimsind
4374      CHARACTER*800 fileregionsdimsdust
4375      CHARACTER*800 fileregionsdimsbb
4376      CHARACTER*800 auxstr
4377      INTEGER nbreg_ind,nbreg_dust,nbreg_bb
4378 
4379      IF (is_mpi_root .AND. is_omp_root) THEN
4380
4381      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsind)))
4382      READ(1,'(a)') auxstr
4383      READ(1,'(i10)') nbreg_ind
4384      CLOSE(UNIT=1)
4385
4386      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsdust)))
4387      READ(1,'(a)') auxstr
4388      READ(1,'(i10)') nbreg_dust
4389      CLOSE(UNIT=1)
4390
4391      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsbb)))
4392      READ(1,'(a)') auxstr
4393      READ(1,'(i10)') nbreg_bb
4394      CLOSE(UNIT=1)
4395     
4396
4397      ENDIF
4398      CALL bcast(nbreg_ind)
4399      CALL bcast(nbreg_dust)
4400      CALL bcast(nbreg_bb)
4401
4402      END SUBROUTINE readregionsdims_spl
4403
4404      SUBROUTINE readregions_spl(iregion,filenameregion)
4405      USE dimphy
4406      USE mod_grid_phy_lmdz
4407      USE mod_phys_lmdz_para
4408
4409      IMPLICIT NONE
4410      CHARACTER*(*) filenameregion
4411      INTEGER iregion(klon)
4412      INTEGER iregion_glo(klon_glo)
4413      INTEGER k
4414     
4415      IF (is_mpi_root .AND. is_omp_root) THEN
4416
4417      print *,trim(adjustl(filenameregion))
4418      OPEN(1,file=trim(adjustl(filenameregion)))
4419      DO k=1,klon_glo
4420      READ(1,'(i10)') iregion_glo(k)
4421      ENDDO
4422      CLOSE(UNIT=1)
4423      ENDIF
4424      CALL scatter(iregion_glo,iregion)
4425
4426      END SUBROUTINE readregions_spl
4427
4428!! AS: SUBROUTINE readscaleparams_spl pas appellee
4429      SUBROUTINE readscaleparams_spl(scale_param, nbreg, &
4430                                             filescaleparams)
4431      USE mod_grid_phy_lmdz
4432      USE mod_phys_lmdz_para
4433      IMPLICIT NONE
4434
4435      CHARACTER*800 filescaleparams
4436      INTEGER nbreg
4437      REAL scale_param(nbreg)
4438      INTEGER k
4439
4440      IF (is_mpi_root .AND. is_omp_root) THEN
4441      OPEN(1,file=trim(adjustl(filescaleparams)),form='unformatted')
4442      do k=1,nbreg
4443        read(1)  scale_param(k)
4444      enddo
4445      CLOSE(1) 
4446      ENDIF
4447      CALL bcast(scale_param)
4448!      print *,'holaaaaaaaaaaaa'
4449!      print *,scale_param
4450
4451      END SUBROUTINE readscaleparams_spl
4452
4453      SUBROUTINE readscaleparamsnc_spl(scale_param_ind,                 &
4454        nbreg_ind, paramname_ind,                                       &
4455        scale_param_ff, nbreg_ff,paramname_ff,                          &
4456        scale_param_bb, nbreg_bb,paramname_bb,                          &
4457        scale_param_dustacc, nbreg_dustacc,paramname_dustacc,           &
4458        scale_param_dustcoa, nbreg_dustcoa,paramname_dustcoa,           &
4459        scale_param_dustsco, nbreg_dustsco,paramname_dustsco,           &
4460        param_wstarBLperregion, nbreg_wstardustBL, paramname_wstarBL,     &
4461        param_wstarWAKEperregion, nbreg_wstardustWAKE, paramname_wstarWAKE, &
4462        scale_param_ssacc  ,  paramname_ssacc,             &
4463        scale_param_sscoa  ,  paramname_sscoa,             &
4464           filescaleparams,julien,jH_phys, pdtphys,debutphy)
4465!      SUBROUTINE readscaleparamsnc_spl(scale_param, nbreg, &
4466!                                        filescaleparams,paramname,&
4467!                                        julien,jH_phys, pdtphys,debutphy)
4468      USE mod_grid_phy_lmdz
4469      USE mod_phys_lmdz_para
4470      IMPLICIT NONE
4471
4472      CHARACTER*800 filescaleparams
4473      CHARACTER*100 paramname_ind,paramname_ff,paramname_bb         
4474      CHARACTER*100 paramname_dustacc, paramname_dustcoa
4475      CHARACTER*100 paramname_dustsco
4476      CHARACTER*100 paramname_ssacc
4477      CHARACTER*100 paramname_sscoa
4478      CHARACTER*100 paramname_wstarBL
4479      CHARACTER*100 paramname_wstarWAKE
4480     
4481      INTEGER nbreg,iday
4482      INTEGER nbreg_ind, nbreg_ff, nbreg_bb , nbreg_dustacc
4483      INTEGER nbreg_dustcoa , nbreg_dustsco, nbreg_wstardustBL
4484      INTEGER  nbreg_wstardustWAKE
4485      INTEGER,PARAMETER ::  nbreg_ssacc=1
4486      INTEGER,PARAMETER :: nbreg_sscoa=1
4487      REAL,PARAMETER :: sca_resol = 24. ! resolution of scalig params in hours
4488      REAL scale_param_ind(nbreg_ind)
4489      REAL scale_param_bb(nbreg_bb)
4490      REAL scale_param_ff(nbreg_ff)
4491      REAL scale_param_dustacc(nbreg_dustacc)
4492      REAL scale_param_dustcoa(nbreg_dustcoa)
4493      REAL scale_param_dustsco(nbreg_dustsco)
4494      REAL param_wstarBLperregion(nbreg_wstardustBL)
4495      REAL param_wstarWAKEperregion(nbreg_wstardustWAKE)
4496      REAL scale_param_ssacc
4497      REAL scale_param_ssacc_tmp(nbreg_ssacc)
4498      REAL scale_param_sscoa
4499      REAL scale_param_sscoa_tmp(nbreg_sscoa)
4500
4501      INTEGER k,step_sca,test_sca
4502      REAL :: jH_phys,  pdtphys
4503      REAL,SAVE :: jH_sca, jH_ini
4504      INTEGER julien
4505      LOGICAL debutphy
4506      SAVE step_sca,test_sca,iday
4507!$OMP THREADPRIVATE(step_sca,test_sca,iday)
4508!$OMP THREADPRIVATE(jH_sca,jH_ini)
4509
4510      IF (debutphy) THEN
4511        iday=julien
4512        step_sca=1
4513        test_sca=0   
4514        jH_ini=jH_phys
4515        jH_sca=jH_phys
4516      ENDIF
4517
4518      IF (test_sca .EQ. 0 ) THEN
4519        ! READ file!!
4520        call read_scalenc(filescaleparams,paramname_ind,            &
4521                           nbreg_ind,step_sca,                      &
4522                           scale_param_ind)
4523        call read_scalenc(filescaleparams,paramname_bb,            &
4524                           nbreg_bb,step_sca,                      &
4525                           scale_param_bb)
4526        call read_scalenc(filescaleparams,paramname_ff,            &
4527                           nbreg_ff,step_sca,                      &
4528                           scale_param_ff)
4529        call read_scalenc(filescaleparams,paramname_dustacc,            &
4530                           nbreg_dustacc,step_sca,                      &
4531                           scale_param_dustacc)
4532        call read_scalenc(filescaleparams,paramname_dustcoa,            &
4533                           nbreg_dustcoa,step_sca,                      &
4534                           scale_param_dustcoa)
4535        call read_scalenc(filescaleparams,paramname_dustsco,            &
4536                           nbreg_dustsco,step_sca,                      &
4537                           scale_param_dustsco)
4538        call read_scalenc(filescaleparams,paramname_wstarBL,            &
4539                           nbreg_wstardustBL,step_sca,                    &
4540                           param_wstarBLperregion)
4541        call read_scalenc(filescaleparams,paramname_wstarWAKE,          &
4542                           nbreg_wstardustWAKE,step_sca,                    &
4543                           param_wstarWAKEperregion)
4544        call read_scalenc(filescaleparams,paramname_ssacc,              &
4545                           nbreg_ssacc,step_sca,                        &
4546                           scale_param_ssacc_tmp)
4547        call read_scalenc(filescaleparams,paramname_sscoa,              &
4548                           nbreg_sscoa,step_sca,                        &
4549                           scale_param_sscoa_tmp)
4550         scale_param_ssacc=scale_param_ssacc_tmp(1)
4551         scale_param_sscoa=scale_param_sscoa_tmp(1)
4552
4553       !print *,'JEREADFILE',julien,jH_phys
4554        step_sca= step_sca + 1
4555        test_sca=1
4556      ENDIF
4557
4558      jH_sca=jH_sca+pdtphys/(24.*3600.)
4559      IF (jH_sca.GT.(sca_resol)/24.) THEN
4560          test_sca=0
4561          jH_sca=jH_ini
4562      ENDIF
4563
4564      END SUBROUTINE readscaleparamsnc_spl
4565
4566      SUBROUTINE read_scalenc(filescaleparams,paramname,nbreg,step_sca, &
4567                          scale_param)
4568
4569      USE mod_grid_phy_lmdz
4570      USE mod_phys_lmdz_para
4571      IMPLICIT NONE
4572
4573      include "netcdf.inc"
4574
4575      CHARACTER*800 filescaleparams
4576      CHARACTER*100 paramname
4577      INTEGER nbreg, step_sca
4578      REAL scale_param(nbreg)
4579      !local vars
4580      integer nid,ierr,nvarid
4581      real rcode,auxreal
4582      integer start(4),count(4), status
4583!      local
4584      integer debutread,countread
4585      CHARACTER*104 varname
4586      CHARACTER*2 aux_2s
4587      integer i, j, ig
4588!$OMP MASTER
4589      IF (is_mpi_root .AND. is_omp_root) THEN
4590          !nci=NCOPN(trim(adjustl(filescaleparams)),NCNOWRIT,rcode)
4591         ierr = NF_OPEN (trim(adjustl(filescaleparams)),NF_NOWRITE, nid)
4592          if (ierr .EQ. NF_NOERR) THEN
4593          debutread=step_sca
4594          countread=1
4595
4596           do i=1,nbreg
4597            WRITE(aux_2s,'(i2.2)') i
4598            varname= trim(adjustl(paramname))//aux_2s
4599            print *,varname
4600            ierr = NF_INQ_VARID (nid,trim(adjustl(varname)), nvarid)
4601            ierr = NF_GET_VARA_DOUBLE (nid, nvarid, debutread,          &
4602                         countread, auxreal)
4603            IF (ierr .NE. NF_NOERR) THEN
4604             PRINT*, 'Pb de lecture pour modvalues'
4605       print *,'JE  scale_var, step_sca',trim(adjustl(varname)),step_sca
4606             CALL HANDLE_ERR(ierr)
4607             print *,'error ierr= ',ierr
4608             CALL exit(1)
4609            call abort_gcm('read_scalenc','error reading variable',1)
4610      ENDIF
4611
4612            print *,auxreal
4613            scale_param(i)=auxreal
4614           enddo
4615
4616            ierr = NF_CLOSE(nid)
4617          else
4618           print *,'File '//trim(adjustl(filescaleparams))//' not found'
4619            print *,'doing nothing...'
4620          endif
4621
4622      ENDIF ! mpi_root
4623!$OMP END MASTER
4624!$OMP BARRIER
4625!      CALL scatter(var local _glo,var local) o algo asi
4626      call bcast(scale_param)
4627      END SUBROUTINE read_scalenc
4628
4629
4630     
4631      END MODULE
Note: See TracBrowser for help on using the repository browser.