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

Last change on this file since 4046 was 4046, checked in by dcugnet, 2 years ago

First commit for new tracers.

  • parser routines readTracFiles, strings_mod and tracer_types added in misc using revision 4 of https://svn.lmd.jussieu.fr/tracers-parser
  • tested in sequential and parallel mode using ioipsl.
  • for now, only two fields of "tracers(:)" derived type vector are used: "name" and "longName".
File size: 173.9 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, tracers(it+nqo)%name
1419        SELECT CASE(tracers(it+nqo)%name)
1420          CASE('PREC'); id_prec=it
1421          CASE('FINE'); id_fine=it
1422          CASE('COSS'); id_coss=it
1423          CASE('CODU'); id_codu=it
1424          CASE('SCDU'); id_scdu=it
1425        END SELECT
1426       enddo
1427       ! check consistency with dust emission scheme:
1428       if (ok_chimeredust) then
1429          if (.not.( id_scdu>0 .and. id_codu>0 .and. id_fine>0)) then
1430             call abort_gcm('phytracr_mod', 'pb in ok_chimdust 0',1)
1431          endif
1432       else
1433          if (id_scdu>0) then
1434       call abort_gcm('phytracr_mod', 'pb in ok_chimdust 1 SCDU',1)
1435          endif
1436          if ( (id_codu .le. 0) .or. ( id_fine.le.0)  ) then 
1437          call abort_gcm('phytracr_mod', 'pb in ok_chimdust 1',1)
1438          endif
1439       endif
1440
1441
1442       !print *,id_prec,id_fine,id_coss,id_codu,id_scdu
1443       ENDIF
1444
1445
1446
1447
1448
1449
1450!---fraction of tracer that is convected (Tiedke)
1451      xconv(:)=0.
1452      if(id_prec>0)  xconv(id_prec)=0.8
1453      if(id_fine>0)  xconv(id_fine)=0.5
1454      if(id_coss>0)  xconv(id_coss)=0.5
1455      if(id_codu>0)  xconv(id_codu)=0.6
1456      if(id_scdu>0)  xconv(id_scdu)=0.6  !!JE fix
1457
1458      masse(:)=1.
1459      if(id_prec>0)  masse(id_prec)=32.
1460      if(id_fine>0)  masse(id_fine)=6.02e23
1461      if(id_coss>0)  masse(id_coss)=6.02e23
1462      if(id_codu>0)  masse(id_codu)=6.02e23
1463      if(id_scdu>0)  masse(id_scdu)=6.02e23
1464
1465      henry(:)=0.
1466      if(id_prec>0)  henry(id_prec)=1.4
1467      if(id_fine>0)  henry(id_fine)=0.0
1468      if(id_coss>0)  henry(id_coss)=0.0
1469      if(id_codu>0)  henry(id_codu)=0.0
1470      if(id_scdu>0)  henry(id_scdu)=0.0
1471      !henry= (/1.4, 0.0, 0.0, 0.0/)
1472      kk(:)=0.
1473      if(id_prec>0)  kk(id_prec)=2900.
1474      if(id_fine>0)  kk(id_fine)=0.0
1475      if(id_coss>0)  kk(id_coss)=0.0
1476      if(id_codu>0)  kk(id_codu)=0.0
1477      if(id_scdu>0)  kk(id_scdu)=0.0
1478      !kk = (/2900., 0., 0., 0./)
1479      alpha_r(:)=0.
1480      if(id_prec>0)  alpha_r(id_prec)=0.0
1481      if(id_fine>0)  alpha_r(id_fine)=0.001
1482      if(id_coss>0)  alpha_r(id_coss)=0.001
1483      if(id_codu>0)  alpha_r(id_codu)=0.001
1484      if(id_scdu>0)  alpha_r(id_scdu)=0.001  !JE fix
1485      alpha_s(:)=0.
1486      if(id_prec>0)  alpha_s(id_prec)=0.0
1487      if(id_fine>0)  alpha_s(id_fine)=0.01
1488      if(id_coss>0)  alpha_s(id_coss)=0.01
1489      if(id_codu>0)  alpha_s(id_codu)=0.01
1490      if(id_scdu>0)  alpha_s(id_scdu)=0.01  !JE fix
1491
1492!      alpha_r =  (/0., 0.001, 0.001, 0.001/)
1493!      alpha_s = (/0., 0.01, 0.01, 0.01/)
1494
1495! nhl      DATA vdep_oce /0.7, 0.05, 1.2, 1.2/
1496! nhl vdep_oce for tr1 is a weighted average of dms and so2 dep velocities
1497      !vdep_oce = (/0.28, 0.28, 1.2, 1.2/)
1498      vdep_oce(:)=0.
1499      if(id_prec>0)  vdep_oce(id_prec) = 0.28
1500      if(id_fine>0)  vdep_oce(id_fine) = 0.28
1501      if(id_coss>0)  vdep_oce(id_coss) = 1.2
1502      if(id_codu>0)  vdep_oce(id_codu) = 1.2
1503      if(id_scdu>0)  vdep_oce(id_scdu) = 1.2
1504      vdep_sic(:)=0.
1505      if(id_prec>0)  vdep_sic(id_prec) = 0.2
1506      if(id_fine>0)  vdep_sic(id_fine) = 0.17
1507      if(id_coss>0)  vdep_sic(id_coss) = 1.2
1508      if(id_codu>0)  vdep_sic(id_codu) = 1.2
1509      if(id_scdu>0)  vdep_sic(id_scdu) = 1.2
1510
1511      !vdep_sic = (/0.2, 0.17, 1.2, 1.2/)     
1512      !vdep_ter = (/0.3, 0.14, 1.2, 1.2/)
1513      vdep_ter(:)=0.
1514      if(id_prec>0)  vdep_ter(id_prec) = 0.3
1515      if(id_fine>0)  vdep_ter(id_fine) = 0.14
1516      if(id_coss>0)  vdep_ter(id_coss) = 1.2
1517      if(id_codu>0)  vdep_ter(id_codu) = 1.2
1518      if(id_scdu>0)  vdep_ter(id_scdu) = 1.2
1519
1520      vdep_lic(:)=0.
1521      if(id_prec>0)  vdep_lic(id_prec) = 0.2
1522      if(id_fine>0)  vdep_lic(id_fine) = 0.17
1523      if(id_coss>0)  vdep_lic(id_coss) = 1.2
1524      if(id_codu>0)  vdep_lic(id_codu) = 1.2
1525      if(id_scdu>0)  vdep_lic(id_scdu) = 1.2
1526
1527
1528      ! convective KE lessivage aer params:
1529      ! AS: #DFB (Binta) a aussi teste ccntrAA_spla=ccntrENV_spla=0.9/1.0/0.9/0.9
1530      !     mais effet negligeable sur l'AOD
1531      ccntrAA_spla(:)=0.
1532      if(id_prec>0)  ccntrAA_spla(id_prec)=-9999.
1533      if(id_fine>0)  ccntrAA_spla(id_fine)=0.7
1534      if(id_coss>0)  ccntrAA_spla(id_coss)=1.0
1535      if(id_codu>0)  ccntrAA_spla(id_codu)=0.7
1536      if(id_scdu>0)  ccntrAA_spla(id_scdu)=0.7
1537
1538      ccntrENV_spla(:)=0.
1539      if(id_prec>0)  ccntrENV_spla(id_prec)=-9999.
1540      if(id_fine>0)  ccntrENV_spla(id_fine)=0.7
1541      if(id_coss>0)  ccntrENV_spla(id_coss)=1.0
1542      if(id_codu>0)  ccntrENV_spla(id_codu)=0.7
1543      if(id_scdu>0)  ccntrENV_spla(id_scdu)=0.7
1544      ! #DFB
1545      coefcoli_spla(:)=0.
1546      if(id_prec>0)  coefcoli_spla(id_prec)=-9999.
1547      if(id_fine>0)  coefcoli_spla(id_fine)=0.001
1548      if(id_coss>0)  coefcoli_spla(id_coss)=0.001
1549      if(id_codu>0)  coefcoli_spla(id_codu)=0.001
1550      if(id_scdu>0)  coefcoli_spla(id_scdu)=0.001
1551
1552      !vdep_lic = (/0.2, 0.17, 1.2, 1.2/)     
1553!
1554
1555      iscm3=.false.
1556      if (debutphy) then
1557!$OMP MASTER
1558         CALL suphel
1559         print *, 'let s check nbtr=', nbtr
1560! JE before put in zero
1561      IF (lminmax) THEN
1562        DO it=1,nbtr
1563        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan init phytracr')
1564        ENDDO       
1565        DO it=1,nbtr
1566        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'minmax init phytracr')
1567        ENDDO
1568        CALL minmaxsource(source_tr,qmin,qmax,'maxsource init phytracr')
1569      ENDIF
1570! JE   initializon to cero the tracers     
1571!         DO it=1, nbtr
1572!            tr_seri(:,:,it)=0.0
1573!         ENDDO
1574! JE end     
1575! Initializing to zero tr_seri for comparison purposes
1576!        tr_seri(:,:,:)=0.0
1577!
1578!        DO it=1,nbtr
1579!           trm_aux(it)=0.0
1580!           src_aux(it)=0.0
1581!           diag_trm(it)=0.0
1582!           diag_drydep(it)=0.0
1583!           diag_wetdep(it)=0.0
1584!           diag_cvtdep(it)=0.0
1585!           diag_emissn(it)=0.0
1586!        ENDDO
1587!        diag_g2part=0.0
1588         print *,'PREPARE FILES TO SAVE VARIABLES'
1589!
1590         nbjour=30
1591         ecrit_tra =   NINT(86400./pdtphys)                    !--1-day  average
1592         ecrit_tra_h = NINT(86400./pdtphys*0.25)               !--6-hour average
1593         ecrit_tra_m = NINT(86400./pdtphys*FLOAT(nbjour))      !--1-mth  average
1594         print *,'ecrit_tra=', pdtphys, ecrit_tra
1595
1596!!AS deleting lines
1597!!         IF (ok_histrac) THEN
1598!!           IF (is_mpi_root .AND. is_omp_root) THEN
1599!!-----many deleted lines----
1600!!!       nbjour=1
1601!!         ENDIF ! mpi root
1602!!         ENDIF !--ok_histrac
1603
1604!$OMP END MASTER
1605!$OMP BARRIER
1606      endif ! debutphy
1607!
1608!======================================================================
1609! Initialisations
1610!======================================================================
1611!
1612!
1613! je  KE init
1614      IF (debutphy) THEN
1615!$OMP MASTER
1616
1617      ALLOCATE(d_tr_dry(klon,nbtr))
1618      ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr))
1619      ALLOCATE(qPrls(klon,nbtr),qPr(klon,klev,nbtr))
1620      ALLOCATE(qDi(klon,klev,nbtr))
1621      ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
1622      ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
1623
1624!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1625!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1626       ALLOCATE(d_tr_cv_o(klon,klev,nbtr))
1627       ALLOCATE(d_tr_trsp_o(klon,klev,nbtr))
1628       ALLOCATE(d_tr_sscav_o(klon,klev,nbtr), &
1629                d_tr_sat_o(klon,klev,nbtr))
1630        ALLOCATE(d_tr_uscav_o(klon,klev,nbtr))
1631
1632!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1633!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1634        ALLOCATE(d_tr_insc_o(klon,klev,nbtr))
1635        ALLOCATE(d_tr_bcscav_o(klon,klev,nbtr))
1636        ALLOCATE(d_tr_evapls_o(klon,klev,nbtr))
1637        ALLOCATE(d_tr_ls_o(klon,klev,nbtr))
1638        ALLOCATE(d_tr_dyn_o(klon,klev,nbtr))
1639        ALLOCATE(d_tr_cl_o(klon,klev,nbtr))
1640        ALLOCATE(d_tr_th_o(klon,klev,nbtr))
1641!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1642!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1643        ALLOCATE(iregion_so4(klon))
1644        ALLOCATE(iregion_bb(klon))
1645        ALLOCATE(iregion_ind(klon))
1646        ALLOCATE(iregion_dust(klon))
1647        ALLOCATE(iregion_wstardust(klon))
1648
1649!JE20150518<<
1650       ALLOCATE(masque_aqua(klon)) 
1651       ALLOCATE(masque_terra(klon)) 
1652 
1653
1654       masque_aqua(:)=0
1655       masque_terra(:)=0
1656
1657      aod550_terra(:)=0. 
1658      aod550_tr2_terra(:)=0. 
1659      aod550_ss_terra(:)=0.   
1660      aod550_dust_terra(:)=0.   
1661      aod550_dustsco_terra(:)=0.   
1662      aod670_terra(:)=0.   
1663      aod670_tr2_terra(:)=0. 
1664      aod670_ss_terra(:)=0. 
1665      aod670_dust_terra(:)=0. 
1666      aod670_dustsco_terra(:)=0. 
1667      aod865_terra(:)=0.   
1668      aod865_tr2_terra(:)=0. 
1669      aod865_ss_terra(:)=0. 
1670      aod865_dust_terra(:)=0. 
1671      aod865_dustsco_terra(:)=0. 
1672      aod550_aqua(:)=0. 
1673      aod550_tr2_aqua(:)=0. 
1674      aod550_ss_aqua(:)=0.   
1675      aod550_dust_aqua(:)=0.   
1676      aod550_dustsco_aqua(:)=0.   
1677      aod670_aqua(:)=0.   
1678      aod670_tr2_aqua(:)=0. 
1679      aod670_ss_aqua(:)=0. 
1680      aod670_dust_aqua(:)=0. 
1681      aod670_dustsco_aqua(:)=0. 
1682      aod865_aqua(:)=0.   
1683      aod865_tr2_aqua(:)=0. 
1684      aod865_ss_aqua(:)=0. 
1685      aod865_dust_aqua(:)=0. 
1686      aod865_dustsco_aqua(:)=0. 
1687!JE20150518>>
1688
1689
1690
1691
1692
1693!
1694!Config Key  = iflag_lscav
1695!Config Desc = Large scale scavenging parametrization: 0=none,
1696!1=old(Genthon92),
1697!              2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon.
1698!Config Def  = 4
1699!Config
1700        iflag_lscav_omp=4
1701        call getin('iflag_lscav', iflag_lscav_omp)
1702        iflag_lscav=iflag_lscav_omp
1703! initialiation for time computation
1704
1705        tia_spla=0.
1706        tia_emis=0.
1707        tia_depo=0.
1708        tia_cltr=0.
1709        tia_ther=0.
1710        tia_sedi=0.
1711        tia_gasp=0.
1712        tia_wetap=0.
1713        tia_cvltr=0.
1714        tia_lscs=0.
1715        tia_brop=0.
1716        tia_outs=0.
1717        tia_nophytracr=0.
1718        clock_start_outphytracr=clock_end_outphytracr+1
1719!$OMP END MASTER
1720!$OMP BARRIER
1721       ENDIF ! debutphy
1722     
1723      lmt_dms(:)=0.0
1724      aux_var2(:)=0.0
1725      aux_var3(:,:)=0.0
1726      source_tr(:,:)=0.0
1727      flux_tr(:,:)=0.0
1728      flux_sparam_bb(:)=0.0
1729      flux_sparam_ff(:)=0.0
1730      flux_sparam_ind(:)=0.0
1731      flux_sparam_ddfine(:)=0.0
1732      flux_sparam_ddcoa(:)=0.0
1733      flux_sparam_ddsco(:)=0.0
1734      flux_sparam_ssfine(:)=0.0
1735      flux_sparam_sscoa(:)=0.0
1736
1737! initialiation for time computation
1738       
1739        ti_spla=0
1740        ti_emis=0
1741        ti_depo=0
1742        ti_cltr=0
1743        ti_ther=0
1744        ti_sedi=0
1745        ti_gasp=0
1746        ti_wetap=0
1747        ti_cvltr=0
1748        ti_lscs=0
1749        ti_brop=0
1750        ti_outs=0
1751
1752
1753       DO k=1,klev
1754        DO i=1,klon
1755         Mint(i,k)=0.
1756        END DO
1757       END DO
1758
1759
1760!
1761      DO it=1, nbtr
1762       DO k=1,klev
1763        DO i=1,klon
1764         d_tr_cv(i,k,it)=0.
1765         d_tr_trsp(i,k,it)=0.
1766         d_tr_sscav(i,k,it)=0.
1767         d_tr_sat(i,k,it)=0.
1768         d_tr_uscav(i,k,it)=0.
1769         d_tr(i,k,it)=0.
1770         d_tr_insc(i,k,it)=0.
1771         d_tr_bcscav(i,k,it)=0.
1772         d_tr_evapls(i,k,it)=0.
1773         d_tr_ls(i,k,it)=0.
1774         d_tr_cl(i,k,it)=0.
1775         d_tr_th(i,k,it)=0.
1776 
1777         d_tr_cv_o(i,k,it)=0.
1778         d_tr_trsp_o(i,k,it)=0.
1779         d_tr_sscav_o(i,k,it)=0.
1780         d_tr_sat_o(i,k,it)=0.
1781         d_tr_uscav_o(i,k,it)=0.
1782
1783
1784         qDi(i,k,it)=0.
1785         qPr(i,k,it)=0.
1786         qPa(i,k,it)=0.
1787         qMel(i,k,it)=0.
1788         qTrdi(i,k,it)=0.
1789         dtrcvMA(i,k,it)=0.
1790         zmfd1a(i,k,it)=0.
1791         zmfdam(i,k,it)=0.
1792         zmfphi2(i,k,it)=0.
1793        END DO
1794       END DO
1795      END DO
1796
1797
1798      DO it=1, nbtr
1799       DO i=1,klon
1800          qPrls(i,it)=0.0
1801          dtrconv(i,it)=0.0
1802!JE20140507<<
1803          d_tr_dry(i,it)=0.0
1804          flux_tr_dry(i,it)=0.0
1805!JE20140507>>
1806       ENDDO
1807      ENDDO
1808
1809      DO it=1, nbtr
1810      DO i=1, klon
1811        his_dh(i,it)=0.0
1812        his_dhlsc(i,it)=0.0
1813        his_dhcon(i,it)=0.0
1814        his_dhbclsc(i,it)=0.0
1815        his_dhbccon(i,it)=0.0
1816        trm(i,it)=0.0
1817        his_th(i,it)=0.0
1818        his_dhkecv(i,it)=0.0
1819        his_ds(i,it)=0.0
1820        his_dhkelsc(i,it)=0.0
1821
1822      ENDDO
1823      ENDDO
1824!JE:     
1825      DO i=1, klon
1826         his_g2pgas(i) = 0.0
1827         his_g2paer(i) = 0.0
1828      ENDDO
1829! endJE
1830!
1831
1832      DO k=1, klev
1833      DO i = 1, klon
1834        zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD
1835        zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
1836        zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/RG
1837      ENDDO
1838      ENDDO
1839!
1840      DO i = 1, klon
1841        zalt(i,1)=pphis(i)/RG
1842      ENDDO
1843      DO k=1, klev-1
1844      DO i = 1, klon
1845        zalt(i,k+1)=zalt(i,k)+zdz(i,k)
1846      ENDDO
1847      ENDDO
1848
1849
1850
1851      IF (logitime) THEN
1852      CALL SYSTEM_CLOCK(COUNT=clock_end)
1853      dife=clock_end-clock_start
1854      ti_init=dife*MAX(0,SIGN(1,dife)) &
1855      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
1856      tia_init=tia_init+REAL(ti_init)/REAL(clock_rate)
1857      ENDIF
1858      IF (logitime) THEN
1859      CALL SYSTEM_CLOCK(COUNT=clock_start)
1860      ENDIF
1861
1862
1863      IF (debutphy) then
1864
1865! AS: initialisation des indices par point de grille physique iregion_*
1866! (variables tenant de l'assimilation, a eliminer dans un 2eme temps)
1867       iregion_dust(:)=1
1868       iregion_ind(:)=1
1869       iregion_bb(:)=1
1870       iregion_wstardust(:)=1
1871
1872!AS: lecture des indices dans fichiers "regions_*" eliminee par IF("ASSIM"="YES") (faux donc)
1873       IF("ASSIM"=="YES") THEN
1874      c_FullName1='regions_dustacc'
1875      !c_FullName1='regions_dust'
1876      call readregions_spl(iregion_dust,c_FullName1)
1877      c_FullName1='regions_ind'
1878      call readregions_spl(iregion_ind,c_FullName1)
1879      c_FullName1='regions_bb'
1880      call readregions_spl(iregion_bb,c_FullName1)
1881      c_FullName1='regions_pwstarwake'
1882      call readregions_spl(iregion_wstardust,c_FullName1)
1883
1884!$OMP MASTER
1885      IF (is_mpi_root .AND. is_omp_root) THEN
1886     
1887      OPEN(25,FILE='dustregions_pyvar_je.data')
1888      OPEN(55,FILE='indregions_pyvar_je.data')
1889      OPEN(75,FILE='bbregions_pyvar_je.data')
1890      OPEN(95,FILE='wstardustregions_pyvar_je.data')
1891      OPEN(76,FILE='xlat.data')
1892      OPEN(77,FILE='xlon.data')
1893      ENDIF ! mpi root
1894!$OMP END MASTER
1895!$OMP BARRIER
1896
1897      CALL gather(iregion_dust,iauxklon_glo)
1898!$OMP MASTER
1899      IF (is_mpi_root .AND. is_omp_root) THEN
1900      DO k=1,klon_glo
1901        WRITE(25,'(i10)') iauxklon_glo(k)
1902      ENDDO
1903      ENDIF ! mpi root
1904!$OMP END MASTER
1905!$OMP BARRIER
1906      CALL gather(iregion_ind,iauxklon_glo)
1907!$OMP MASTER
1908      IF (is_mpi_root .AND. is_omp_root) THEN
1909      DO k=1,klon_glo
1910        WRITE(55,'(i10)') iauxklon_glo(k)
1911      ENDDO
1912      ENDIF ! mpi root
1913!$OMP END MASTER
1914!$OMP BARRIER
1915      CALL gather(iregion_bb,iauxklon_glo)
1916!$OMP MASTER
1917      IF (is_mpi_root .AND. is_omp_root) THEN
1918      DO k=1,klon_glo
1919        WRITE(75,'(i10)') iauxklon_glo(k)
1920      ENDDO
1921      ENDIF ! mpi root
1922!$OMP END MASTER
1923!$OMP BARRIER
1924      CALL gather(iregion_wstardust,iauxklon_glo)
1925!$OMP MASTER
1926      IF (is_mpi_root .AND. is_omp_root) THEN
1927      DO k=1,klon_glo
1928        WRITE(95,'(i10)') iauxklon_glo(k)
1929      ENDDO
1930      ENDIF ! mpi root
1931!$OMP END MASTER
1932!$OMP BARRIER
1933
1934
1935      CALL gather(rlat,auxklon_glo)
1936!$OMP MASTER
1937      IF (is_mpi_root .AND. is_omp_root) THEN
1938      DO k=1,klon_glo
1939        WRITE(76,*) auxklon_glo(k)
1940      ENDDO
1941      ENDIF ! mpi root
1942!$OMP END MASTER
1943!$OMP BARRIER
1944      CALL gather(rlon,auxklon_glo)
1945!$OMP MASTER
1946      IF (is_mpi_root .AND. is_omp_root) THEN
1947      DO k=1,klon_glo
1948        WRITE(77,*) auxklon_glo(k)
1949      ENDDO
1950
1951      CLOSE(25)
1952      CLOSE(55)
1953      CLOSE(75)
1954      CLOSE(76)
1955      CLOSE(77)
1956      CLOSE(95)
1957
1958      ENDIF ! mpi root
1959!$OMP END MASTER
1960!$OMP BARRIER
1961
1962      ENDIF  ! ASSIM
1963
1964      ENDIF  ! debutphy
1965
1966      IF (logitime) THEN
1967      CALL SYSTEM_CLOCK(COUNT=clock_end)
1968      dife=clock_end-clock_start
1969      ti_inittype=dife*MAX(0,SIGN(1,dife)) &
1970      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
1971      tia_inittype=tia_inittype+REAL(ti_inittype)/REAL(clock_rate)
1972      ENDIF
1973
1974      IF (logitime) THEN
1975      CALL SYSTEM_CLOCK(COUNT=clock_start)
1976      ENDIF
1977
1978!
1979!=======================================================================
1980! SAVING SURFACE TYPE
1981!=======================================================================
1982      IF (debutphy) THEN
1983!$OMP MASTER
1984      IF (is_mpi_root .AND. is_omp_root) THEN
1985
1986      OPEN(35,FILE='surface_ocean.data')
1987      OPEN(45,FILE='surface_seaice.data')
1988      OPEN(65,FILE='surface_land.data')
1989      OPEN(85,FILE='surface_landice.data')
1990      ENDIF ! mpi root
1991!$OMP END MASTER
1992!$OMP BARRIER
1993      do i = 1, klon
1994                aux_var2(i) = pctsrf(i,is_oce)
1995      enddo
1996      call gather(aux_var2,auxklon_glo)
1997!$OMP MASTER
1998      IF (is_mpi_root .AND. is_omp_root) THEN
1999      DO i = 1, klon_glo
2000         WRITE (35,103)  auxklon_glo(i)
2001      ENDDO
2002      ENDIF ! mpi root
2003!$OMP END MASTER
2004!$OMP BARRIER
2005
2006      do i = 1, klon
2007                aux_var2(i) = pctsrf(i,is_sic)
2008      enddo
2009      call gather(aux_var2,auxklon_glo)
2010!$OMP MASTER
2011      IF (is_mpi_root .AND. is_omp_root) THEN
2012      DO i = 1, klon_glo
2013         WRITE (45,103)  auxklon_glo(i)
2014      ENDDO
2015      ENDIF ! mpi root
2016!$OMP END MASTER
2017!$OMP BARRIER
2018
2019      do i = 1, klon
2020                aux_var2(i) = pctsrf(i,is_ter)
2021      enddo
2022      call gather(aux_var2,auxklon_glo)
2023!$OMP MASTER
2024      IF (is_mpi_root .AND. is_omp_root) THEN
2025      DO i = 1, klon_glo
2026         WRITE (65,103)  auxklon_glo(i)
2027      ENDDO
2028      ENDIF ! mpi root
2029!$OMP END MASTER
2030!$OMP BARRIER
2031
2032      do i = 1, klon
2033                aux_var2(i) = pctsrf(i,is_lic)
2034      enddo
2035      call gather(aux_var2,auxklon_glo)
2036!$OMP MASTER
2037      IF (is_mpi_root .AND. is_omp_root) THEN
2038      DO i = 1, klon_glo
2039         WRITE (85,103)  auxklon_glo(i)
2040      ENDDO
2041!
2042!      DO i = 1, klon
2043!         WRITE (35,103) pctsrf(i,is_oce)
2044!         WRITE (45,103) pctsrf(i,is_sic)
2045!         WRITE (65,103) pctsrf(i,is_ter)
2046!         WRITE (85,103) pctsrf(i,is_lic)
2047!      ENDDO
2048      CLOSE(35)
2049      CLOSE(45)
2050      CLOSE(65)
2051      CLOSE(85)
2052103   FORMAT (f6.2)
2053      ENDIF ! mpi root
2054!$OMP END MASTER
2055!$OMP BARRIER
2056      ENDIF ! debutphy
2057
2058!      stop
2059!
2060!=======================================================================
2061!
2062      DO it=1, nbtr
2063        DO j=1,klev
2064        DO i=1,klon
2065           tmp_var(i,j)=tr_seri(i,j,it)
2066        ENDDO
2067        ENDDO
2068        CALL kg_to_cm3(pplay,t_seri,tmp_var)
2069        DO j=1,klev
2070        DO i=1,klon
2071           tr_seri(i,j,it)=tmp_var(i,j)
2072        ENDDO
2073        ENDDO
2074      ENDDO
2075      iscm3=.true.
2076
2077!=======================================================================
2078!
2079      DO k=1, klev
2080      DO i=1, klon
2081        m_conc(i,k)=pplay(i,k)/t_seri(i,k)/RKBOL*1.e-6
2082      ENDDO
2083      ENDDO
2084
2085!
2086!
2087      IF (lminmax) THEN
2088        DO it=1,nbtr
2089        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_avt_coarem')
2090        ENDDO       
2091        DO it=1,nbtr
2092        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'avt coarem')
2093        ENDDO
2094        CALL minmaxsource(source_tr,qmin,qmax,'src: avt coarem')
2095      ENDIF
2096
2097      IF (logitime) THEN
2098      CALL SYSTEM_CLOCK(COUNT=clock_end)
2099      dife=clock_end-clock_start
2100      ti_inittwrite=dife*MAX(0,SIGN(1,dife))  &
2101      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2102      tia_inittwrite=tia_inittwrite+REAL(ti_inittwrite)/REAL(clock_rate)
2103      ENDIF
2104
2105!
2106!
2107!=======================================================================
2108!                     EMISSIONS OF COARSE AEROSOLS
2109!=======================================================================
2110
2111
2112      IF (logitime) THEN
2113      CALL SYSTEM_CLOCK(COUNT=clock_start)
2114      ENDIF
2115
2116
2117
2118!     
2119      print *,'Number of tracers = ',nbtr
2120
2121      print *,'AT BEGINNING OF PHYTRACR_SPL'
2122!      print *,'tr_seri = ',SUM(tr_seri(:,:,3)),MINVAL(tr_seri(:,:,3)),
2123!     .                                         MAXVAL(tr_seri(:,:,3))
2124#ifdef IOPHYS_DUST
2125      do it=1,nbtr
2126         write(str2,'(i2.2)') it
2127         call iophys_ecrit('sav'//str2,1,'SOURCE','',source_tr(:,it))
2128         call iophys_ecrit('fav'//str2,1,'SOURCE','',source_tr(:,it))
2129      enddo
2130      do it=1,nbtr
2131         write(str2,'(i2.2)') it
2132         call iophys_ecrit('TRB'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2133      enddo
2134#endif
2135
2136
2137      CALL coarsemission(pctsrf,pdtphys,t_seri,                            &
2138                        pmflxr,pmflxs,prfl,psfl,                           &
2139                        rlat,rlon,debutphy,                                &
2140                        zu10m,zv10m,wstar,ale_bl,ale_wake,                 &
2141                        scale_param_ssacc,scale_param_sscoa,               &
2142                        scale_param_dustacc,scale_param_dustcoa,           &
2143                        scale_param_dustsco,                               &
2144                        nbreg_dust,                                        &
2145                        iregion_dust,dust_ec,                              &
2146                        param_wstarBLperregion,param_wstarWAKEperregion,   &
2147                        nbreg_wstardust,                                   &
2148                        iregion_wstardust,                                 &
2149                        lmt_sea_salt,qmin,qmax,                            &
2150                                  flux_sparam_ddfine,flux_sparam_ddcoa,    &
2151                                  flux_sparam_ddsco,                       &
2152                                  flux_sparam_ssfine,flux_sparam_sscoa,    &
2153                              id_prec,id_fine,id_coss,id_codu,id_scdu,     &
2154                              ok_chimeredust,                           &
2155                                                     source_tr,flux_tr)   
2156
2157#ifdef IOPHYS_DUST
2158      do it=1,nbtr
2159         write(str2,'(i2.2)') it
2160         call iophys_ecrit('sap'//str2,1,'SOURCE','',source_tr(:,it))
2161         call iophys_ecrit('fap'//str2,1,'SOURCE','',source_tr(:,it))
2162      enddo
2163#endif
2164
2165      IF (lminmax) THEN
2166        DO it=1,nbtr
2167        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_coarem')
2168        ENDDO
2169        DO it=1,nbtr
2170        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after coarem')
2171        ENDDO
2172        CALL minmaxsource(source_tr,qmin,qmax,'src: after coarem')
2173      ENDIF
2174
2175!
2176!
2177!
2178!======================================================================
2179!                   EMISSIONS OF AEROSOL PRECURSORS     
2180!======================================================================
2181!
2182#ifdef IOPHYS_DUST
2183      print *,'INPUT TO PRECUREMISSION'
2184         call iophys_ecrit('ftsol',4,'ftsol','',ftsol)
2185         call iophys_ecrit('u10m_ec',1,'u10m_ec','',u10m_ec)
2186         call iophys_ecrit('v10m_ec',1,'v10m_ec','',v10m_ec)
2187         call iophys_ecrit('pctsrf',4,'pctsrf','',pctsrf)
2188         call iophys_ecrit('u_seri',klev,'u_seri','',u_seri)
2189         call iophys_ecrit('v_seri',klev,'v_seri','',v_seri)
2190         call iophys_ecrit('paprs',klev,'paprs','',paprs)
2191         call iophys_ecrit('pplay',klev,'pplay','',pplay)
2192         call iophys_ecrit('cdragh',1,'cdragh','',cdragh)
2193         call iophys_ecrit('cdragm',1,'cdragm','',cdragm)
2194         call iophys_ecrit('t_seri',klev,'t_seri','',t_seri)
2195         call iophys_ecrit('q_seri',klev,'q_seri','',q_seri)
2196         call iophys_ecrit('tsol',1,'tsol','',tsol)
2197         print*,'fracso2emis,frach2sofso2,bateau',fracso2emis,frach2sofso2,bateau
2198         print*,'kminbc,kmaxbc,pdtphys',kminbc,kmaxbc,pdtphys
2199         print*,'scale_param_bb,scale_param_ind',scale_param_bb,scale_param_ind
2200         print*,'iregion_ind,iregion_bb,nbreg_ind, nbreg_bb',iregion_ind,iregion_bb,nbreg_ind, nbreg_bb
2201         print*,'id_prec,id_fine',id_prec,id_fine
2202         call iophys_ecrit('zdz',klev,'zdz','',zdz)
2203         call iophys_ecrit('zalt',klev,'zalt','',zalt)
2204         call iophys_ecrit('lmt_so2ff_l',1,'lmt_so2ff_l','',lmt_so2ff_l)
2205         call iophys_ecrit('lmt_so2ff_h',1,'lmt_so2ff_h','',lmt_so2ff_h)
2206         call iophys_ecrit('lmt_so2nff',1,'lmt_so2nff','',lmt_so2nff)
2207         call iophys_ecrit('lmt_so2ba',1,'lmt_so2ba','',lmt_so2ba)
2208         call iophys_ecrit('lmt_so2bb_l',1,'lmt_so2bb_l','',lmt_so2bb_l)
2209         call iophys_ecrit('lmt_so2bb_h',1,'lmt_so2bb_h','',lmt_so2bb_h)
2210         call iophys_ecrit('lmt_so2volc_cont',1,'lmt_so2volc_cont','',lmt_so2volc_cont)
2211         call iophys_ecrit('lmt_altvolc_cont',1,'lmt_altvolc_cont','',lmt_altvolc_cont)
2212         call iophys_ecrit('lmt_so2volc_expl',1,'lmt_so2volc_expl','',lmt_so2volc_expl)
2213         call iophys_ecrit('lmt_altvolc_expl',1,'lmt_altvolc_expl','',lmt_altvolc_expl)
2214         call iophys_ecrit('lmt_dmsbio',1,'lmt_dmsbio','',lmt_dmsbio)
2215         call iophys_ecrit('lmt_h2sbio',1,'lmt_h2sbio','',lmt_h2sbio)
2216         call iophys_ecrit('lmt_dmsconc',1,'lmt_dmsconc','',lmt_dmsconc)
2217         call iophys_ecrit('lmt_dms',1,'lmt_dms','',lmt_dms)
2218         call iophys_ecrit('flux_sparam_ind',1,'flux_sparam_ind','',flux_sparam_ind)
2219         call iophys_ecrit('flux_sparam_bb',1,'flux_sparam_bb','',flux_sparam_bb)
2220#endif
2221
2222
2223
2224     print*,'ON PASSE DANS precuremission'
2225     CALL precuremission(ftsol,u10m_ec,v10m_ec,pctsrf,                  &
2226                         u_seri,v_seri,paprs,pplay,cdragh,cdragm,       &
2227                         t_seri,q_seri,tsol,fracso2emis,frach2sofso2,   &
2228                         bateau,zdz,zalt,kminbc,kmaxbc,pdtphys,         &
2229                         scale_param_bb,scale_param_ind,                &
2230                         iregion_ind, iregion_bb,                       &
2231                         nbreg_ind, nbreg_bb,                           &
2232                         lmt_so2ff_l,lmt_so2ff_h, lmt_so2nff,lmt_so2ba, &
2233                         lmt_so2bb_l,lmt_so2bb_h,                       &
2234                         lmt_so2volc_cont,lmt_altvolc_cont,             &
2235                         lmt_so2volc_expl,lmt_altvolc_expl,             &
2236                         lmt_dmsbio,lmt_h2sbio, lmt_dmsconc, lmt_dms,   &
2237                         id_prec,id_fine,                               &
2238                                       flux_sparam_ind, flux_sparam_bb, &
2239                                       source_tr,flux_tr,tr_seri)       
2240!
2241      IF (lminmax) THEN
2242        DO it=1,nbtr
2243        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after precur')
2244        ENDDO
2245        DO it=1,nbtr
2246        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after precur')
2247        ENDDO
2248        CALL minmaxsource(source_tr,qmin,qmax,'src: after precur')
2249      ENDIF
2250
2251!=======================================================================
2252!                      EMISSIONS OF FINE AEROSOLS
2253!=======================================================================
2254#ifdef IOPHYS_DUST
2255!
2256      do it=1,nbtr
2257         write(str2,'(i2.2)') it
2258         call iophys_ecrit('tpr'//str2,1,'SOURCE','',source_tr(:,it))
2259         call iophys_ecrit('fpr'//str2,1,'SOURCE','',flux_tr(:,it))
2260      enddo
2261#endif
2262
2263      CALL finemission(zdz,pdtphys,zalt,kminbc,kmaxbc,                     &
2264                      scale_param_bb,scale_param_ff,                       &
2265                      iregion_ind,iregion_bb,                              &
2266                      nbreg_ind,nbreg_bb,                                  &
2267                      lmt_bcff, lmt_bcnff, lmt_bcbb_l,lmt_bcbb_h,          &
2268                      lmt_bcba, lmt_omff, lmt_omnff,                       &
2269                      lmt_ombb_l, lmt_ombb_h, lmt_omnat, lmt_omba,         &
2270                      id_fine,                                             &
2271                                       flux_sparam_bb, flux_sparam_ff,     &
2272                                             source_tr,flux_tr,tr_seri)     
2273!
2274!
2275      IF (lminmax) THEN
2276        DO it=1,nbtr
2277        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_fineem')
2278        ENDDO
2279        DO it=1,nbtr
2280        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after fineem')
2281        ENDDO
2282      IF (lcheckmass) THEN
2283        DO it=1,nbtr
2284         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2285           pplay,t_seri,iscm3,'after fineem')                 
2286        ENDDO
2287      ENDIF
2288        CALL minmaxsource(source_tr,qmin,qmax,'src: after fineem')
2289      ENDIF
2290
2291!
2292
2293      IF (logitime) THEN
2294      CALL SYSTEM_CLOCK(COUNT=clock_end)
2295      dife=clock_end-clock_start
2296      ti_emis=dife*MAX(0,SIGN(1,dife))   &
2297      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2298      tia_emis=tia_emis+REAL(ti_emis)/REAL(clock_rate)
2299      ENDIF
2300
2301
2302#ifdef IOPHYS_DUST
2303      do it=1,nbtr
2304         write(str2,'(i2.2)') it
2305         call iophys_ecrit('t'//str2,1,'SOURCE','',source_tr(:,it))
2306         call iophys_ecrit('f'//str2,1,'SOURCE','',flux_tr(:,it))
2307      enddo
2308#endif
2309!
2310!
2311
2312
2313
2314!
2315!=======================================================================
2316!                 DRY DEPOSITION AND BOUNDARY LAYER MIXING
2317!=======================================================================
2318!
2319!        DO it=1,nbtr
2320!         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,
2321!     .      pplay,t_seri,iscm3,'')
2322!        ENDDO
2323
2324!======================================================================
2325!    -- Dry deposition --
2326!======================================================================
2327      IF (logitime) THEN
2328      CALL SYSTEM_CLOCK(COUNT=clock_start)
2329      ENDIF
2330
2331      DO it=1, nbtr
2332         DO j=1,klev
2333         DO i=1,klon
2334           tmp_var(i,j)=tr_seri(i,j,it)
2335         ENDDO
2336         ENDDO
2337         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2338         DO j=1,klev
2339         DO i=1,klon
2340           tr_seri(i,j,it)=tmp_var(i,j)
2341         ENDDO
2342         ENDDO
2343      ENDDO
2344      iscm3=.false.
2345!----------------------------
2346      IF (lminmax) THEN
2347        DO it=1,nbtr
2348        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_depo')
2349        ENDDO
2350        DO it=1,nbtr
2351        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before depo')
2352        ENDDO
2353      IF (lcheckmass) THEN
2354        DO it=1,nbtr
2355         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
2356           pplay,t_seri,iscm3,'before depo')
2357        ENDDO
2358      ENDIF
2359        CALL minmaxsource(source_tr,qmin,qmax,'src: before depo')
2360      ENDIF
2361
2362#ifdef IOPHYS_DUST
2363      do it=1,nbtr
2364         write(str2,'(i2.2)') it
2365         call iophys_ecrit('TRC'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2366      enddo
2367#endif
2368
2369      CALL deposition(vdep_oce,vdep_sic,vdep_ter,vdep_lic,pctsrf,      &
2370                     zrho,zdz,pdtphys,RHcl,masse,t_seri,pplay,paprs,  &
2371                     lminmax,qmin,qmax,                               &
2372                              his_ds,source_tr,tr_seri)
2373!
2374      IF (lminmax) THEN
2375        DO it=1,nbtr
2376        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_depo')
2377        ENDDO
2378        DO it=1,nbtr
2379        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after depo')
2380        ENDDO
2381      IF (lcheckmass) THEN
2382        DO it=1,nbtr
2383         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2384           pplay,t_seri,iscm3,'after depo')
2385        ENDDO
2386      ENDIF
2387        CALL minmaxsource(source_tr,qmin,qmax,'src: after depo')
2388      ENDIF
2389
2390      IF (logitime) THEN
2391      CALL SYSTEM_CLOCK(COUNT=clock_end)
2392      dife=clock_end-clock_start
2393      ti_depo=dife*MAX(0,SIGN(1,dife))                      &
2394      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2395      tia_depo=tia_depo+REAL(ti_depo)/REAL(clock_rate)
2396      ENDIF
2397
2398
2399!
2400!======================================================================
2401!    -- Boundary layer mixing --
2402!======================================================================
2403
2404#ifdef IOPHYS_DUST
2405      do it=1,nbtr
2406         write(str2,'(i2.2)') it
2407         call iophys_ecrit('TRD'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2408      enddo
2409#endif
2410
2411
2412
2413      IF (logitime) THEN
2414      CALL SYSTEM_CLOCK(COUNT=clock_start)
2415      ENDIF
2416
2417!
2418
2419       DO k = 1, klev
2420        DO i = 1, klon
2421         delp(i,k) = paprs(i,k)-paprs(i,k+1)
2422        END DO
2423      END DO
2424!
2425      DO it=1, nbtr
2426      DO j=1, klev
2427      DO i=1, klon
2428        tmp_var(i,j)=tr_seri(i,j,it)
2429        aux_var2(i)=source_tr(i,it)
2430      ENDDO
2431      ENDDO
2432      IF (iflag_conv.EQ.2) THEN
2433! Tiedke
2434      CALL cltrac_spl(pdtphys,coefh,yu1,yv1,t_seri,tmp_var,  &
2435                 aux_var2,paprs,pplay,aux_var3)
2436
2437      ELSE IF (iflag_conv.GE.3) THEN
2438!KE
2439      CALL cltrac(pdtphys, coefh,t_seri,tmp_var,aux_var2,paprs,pplay,  &
2440                 delp,aux_var3,d_tr_dry,flux_tr_dry(:,it))
2441      ENDIF
2442
2443      DO i=1, klon
2444      DO j=1, klev
2445        tr_seri(i,j,it)=tmp_var(i,j)
2446        d_tr(i,j,it)=aux_var3(i,j)
2447        d_tr_cl(i,j,it)=d_tr(i,j,it)
2448      ENDDO
2449      ENDDO
2450      DO k = 1, klev
2451      DO i = 1, klon
2452         tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr(i,k,it)
2453      ENDDO
2454      ENDDO
2455      print *,' AFTER Cltrac'
2456      IF (lminmax) THEN
2457        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after cltrac')
2458      ENDIF
2459      ENDDO !--end itr loop
2460
2461      IF (logitime) THEN
2462      CALL SYSTEM_CLOCK(COUNT=clock_end)
2463      dife=clock_end-clock_start
2464      ti_cltr=dife*MAX(0,SIGN(1,dife))     &
2465      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2466      tia_cltr=tia_cltr+REAL(ti_cltr)/REAL(clock_rate)
2467      ENDIF
2468
2469
2470
2471!======================================================================
2472!    -- Calcul de l'effet des thermiques for KE--
2473!======================================================================
2474
2475#ifdef IOPHYS_DUST
2476      print*,'iflag_conv=',iflag_conv
2477      call iophys_ecrit('coefh',klev,'coefh','',coefh)
2478      call iophys_ecrit('yu1',1,'yu1','',yu1)
2479      call iophys_ecrit('yv1',1,'yv1','',yv1)
2480      call iophys_ecrit('delp',klev,'delp','',delp)
2481      do it=1,nbtr
2482         write(str2,'(i2.2)') it
2483         call iophys_ecrit('TRE'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2484      enddo
2485#endif
2486
2487
2488
2489      IF (iflag_conv.GE.3) THEN
2490
2491      IF (logitime) THEN
2492      CALL SYSTEM_CLOCK(COUNT=clock_start)
2493      ENDIF
2494
2495
2496
2497
2498     
2499       IF (lminmax) THEN
2500        DO it=1,nbtr
2501       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before therm')
2502        ENDDO
2503        DO it=1,nbtr
2504        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before therm')
2505        ENDDO
2506      IF (lcheckmass) THEN
2507        DO it=1,nbtr
2508         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2509           pplay,t_seri,iscm3,'before therm')
2510        ENDDO
2511      ENDIF
2512        CALL minmaxsource(source_tr,qmin,qmax,'before therm')
2513      ENDIF
2514
2515      DO it=1,nbtr
2516         DO k=1,klev
2517            DO i=1,klon
2518               tmp_var3(i,k,it)=tr_seri(i,k,it)
2519               d_tr_th(i,k,it)=0.
2520               tr_seri(i,k,it)=MAX(tr_seri(i,k,it),0.)
2521!JE: precursor >>1e10         tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10)
2522            END DO
2523         END DO
2524      END DO
2525
2526!JE  new implicit scheme 20140323
2527      DO it=1,nbtr
2528        CALL thermcell_dq(klon,klev,1,pdtphys,fm_therm,entr_therm,  &
2529                         zmasse,tr_seri(1:klon,1:klev,it),         &
2530                         d_tr(1:klon,1:klev,it),ztra_th,0 )
2531
2532        DO k=1,klev
2533           DO i=1,klon
2534              d_tr(i,k,it)=pdtphys*d_tr(i,k,it)
2535              d_tr_th(i,k,it)=d_tr_th(i,k,it)+d_tr(i,k,it)
2536              tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr(i,k,it),0.)
2537              END DO
2538        END DO
2539
2540      ENDDO
2541
2542! old scheme explicit
2543!       nsplit=10
2544!       DO it=1,nbtr
2545!          DO isplit=1,nsplit
2546!              CALL dqthermcell(klon,klev,pdtphys/nsplit,
2547!     .            fm_therm,entr_therm,zmasse,
2548!     .            tr_seri(1:klon,1:klev,it),
2549!     .            d_tr(1:klon,1:klev,it),ztra_th)
2550!            DO k=1,klev
2551!               DO i=1,klon
2552!                  d_tr(i,k,it)=pdtphys*d_tr(i,k,it)/nsplit
2553!                  d_tr_th(i,k,it)=d_tr_th(i,k,it)+d_tr(i,k,it)
2554!                  tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr(i,k,it),0.)
2555!               END DO
2556!            END DO
2557!         END DO ! nsplit1
2558!      END DO ! it
2559!JE end modif 20140323
2560
2561      DO it=1,nbtr
2562         DO k=1,klev
2563            DO i=1,klon
2564          tmp_var(i,k)=tr_seri(i,k,it)-tmp_var3(i,k,it)
2565            ENDDO
2566         ENDDO
2567       IF (lminmax) THEN
2568      IF (lcheckmass) THEN
2569         CALL checkmass(tmp_var(:,:),RNAVO,masse(it),zdz,  &
2570           pplay,t_seri,iscm3,'dtr therm ')
2571      ENDIF
2572       ENDIF
2573         CALL kg_to_cm3(pplay,t_seri,tmp_var)
2574
2575         DO k=1,klev
2576            DO i=1,klon
2577               his_th(i,it)=his_th(i,it)+    &
2578                           (tmp_var(i,k))/RNAVO*   &
2579                     masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
2580            END DO !klon
2581         END DO !klev
2582
2583      END DO !it
2584       IF (lminmax) THEN
2585        DO it=1,nbtr
2586       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after therm')
2587        ENDDO
2588        DO it=1,nbtr
2589        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after therm')
2590        ENDDO
2591      IF (lcheckmass) THEN
2592        DO it=1,nbtr
2593         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2594           pplay,t_seri,iscm3,'after therm')
2595        ENDDO
2596      ENDIF
2597        CALL minmaxsource(source_tr,qmin,qmax,'after therm')
2598       ENDIF
2599
2600      IF (logitime) THEN
2601      CALL SYSTEM_CLOCK(COUNT=clock_end)
2602      dife=clock_end-clock_start
2603      ti_ther=dife*MAX(0,SIGN(1,dife))   &
2604      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2605      tia_ther=tia_ther+REAL(ti_ther)/REAL(clock_rate)
2606      ENDIF
2607
2608
2609      ENDIF ! iflag_conv KE
2610!------------------------------------
2611!      Sedimentation
2612!-----------------------------------
2613      IF (logitime) THEN
2614      CALL SYSTEM_CLOCK(COUNT=clock_start)
2615      ENDIF
2616
2617
2618      DO it=1,nbtr
2619      DO j=1,klev
2620      DO i=1,klon
2621         tmp_var(i,j)=tr_seri(i,j,it)
2622      ENDDO
2623      ENDDO
2624      CALL kg_to_cm3(pplay,t_seri,tmp_var)
2625      DO j=1,klev
2626      DO i=1,klon
2627         tr_seri(i,j,it)=tmp_var(i,j)
2628      ENDDO
2629      ENDDO
2630      ENDDO !--end itr loop
2631      iscm3=.true.
2632!--------------------------------------
2633      print *,' BEFORE Sediment'
2634
2635      IF (lminmax) THEN
2636        DO it=1,nbtr
2637        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_sedi')
2638        ENDDO
2639        DO it=1,nbtr
2640        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before sedi')
2641        ENDDO
2642      IF (lcheckmass) THEN
2643        DO it=1,nbtr
2644         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2645           pplay,t_seri,iscm3,'before sedi')
2646        ENDDO
2647      ENDIF
2648        CALL minmaxsource(source_tr,qmin,qmax,'src: before sedi')
2649      ENDIF
2650
2651      print *,'SPLA VERSION OF SEDIMENTATION IS USED'
2652      CALL sediment_mod(t_seri,pplay,zrho,paprs,pdtphys,RHcl,   &
2653                                     id_coss,id_codu,id_scdu,  &
2654                                     ok_chimeredust,           &
2655                         sed_ss,sed_dust,sed_dustsco,          &
2656                         sed_ss3D,sed_dust3D,sed_dustsco3D,tr_seri)
2657      CALL cm3_to_kg(pplay,t_seri,sed_ss3D)
2658      CALL cm3_to_kg(pplay,t_seri,sed_dust3D)
2659      CALL cm3_to_kg(pplay,t_seri,sed_dustsco3D)
2660
2661      IF (lminmax) THEN
2662        DO it=1,nbtr
2663        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_sedi')
2664        ENDDO
2665        DO it=1,nbtr
2666        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after sedi')
2667        ENDDO
2668      IF (lcheckmass) THEN
2669        DO it=1,nbtr
2670         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2671           pplay,t_seri,iscm3,'after sedi')
2672        ENDDO
2673      ENDIF
2674        CALL minmaxsource(source_tr,qmin,qmax,'src: after sedi')
2675      ENDIF
2676
2677!
2678!=======================================================================
2679#ifdef IOPHYS_DUST
2680      do it=1,nbtr
2681         write(str2,'(i2.2)') it
2682         call iophys_ecrit('TRF'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2683      enddo
2684#endif
2685
2686
2687
2688!
2689      IF (logitime) THEN
2690      CALL SYSTEM_CLOCK(COUNT=clock_end)
2691      dife=clock_end-clock_start
2692      ti_sedi=dife*MAX(0,SIGN(1,dife))   &
2693      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2694      tia_sedi=tia_sedi+REAL(ti_sedi)/REAL(clock_rate)
2695      ENDIF
2696
2697      DO it=1, nbtr
2698         DO j=1,klev
2699         DO i=1,klon
2700           tmp_var(i,j)=tr_seri(i,j,it)
2701         ENDDO
2702         ENDDO
2703         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2704         DO j=1,klev
2705         DO i=1,klon
2706           tr_seri(i,j,it)=tmp_var(i,j)
2707         ENDDO
2708         ENDDO
2709      ENDDO
2710      iscm3=.false.
2711!
2712!
2713!======================================================================
2714!                      GAS TO PARTICLE CONVERSION     
2715!======================================================================
2716!
2717
2718      IF (logitime) THEN
2719      CALL SYSTEM_CLOCK(COUNT=clock_start)
2720      ENDIF
2721
2722      IF (lminmax) THEN
2723        DO it=1,nbtr
2724        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_beforegastopar')
2725        ENDDO
2726        DO it=1,nbtr
2727        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before gastopar')
2728        ENDDO
2729      IF (lcheckmass) THEN
2730        DO it=1,nbtr
2731         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2732           pplay,t_seri,iscm3,'before gastopar')
2733        ENDDO
2734      ENDIF
2735        CALL minmaxsource(source_tr,qmin,qmax,'src: before gastopar')
2736      ENDIF
2737
2738      CALL gastoparticle(pdtphys,zdz,zrho,rlat, &
2739                   pplay,t_seri,id_prec,id_fine, &
2740                   tr_seri,his_g2pgas ,his_g2paer)
2741!
2742      IF (lminmax) THEN
2743        DO it=1,nbtr
2744        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_gastopar')
2745        ENDDO
2746        DO it=1,nbtr
2747        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after gastopar')
2748        ENDDO
2749      IF (lcheckmass) THEN
2750        DO it=1,nbtr
2751         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2752           pplay,t_seri,iscm3,'after gastopar')
2753        ENDDO
2754       ENDIF
2755        CALL minmaxsource(source_tr,qmin,qmax,'src: after gastopar')
2756      ENDIF
2757
2758      IF (logitime) THEN
2759      CALL SYSTEM_CLOCK(COUNT=clock_end)
2760      dife=clock_end-clock_start
2761      ti_gasp=dife*MAX(0,SIGN(1,dife))   &
2762      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2763      tia_gasp=tia_gasp+REAL(ti_gasp)/REAL(clock_rate)
2764      ENDIF
2765
2766
2767!
2768!======================================================================
2769!          EFFECT OF PRECIPITATION: iflag_conv=2
2770!======================================================================
2771!
2772
2773#ifdef IOPHYS_DUST
2774      do it=1,nbtr
2775         write(str2,'(i2.2)') it
2776         call iophys_ecrit('TRG'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2777      enddo
2778#endif
2779
2780
2781      IF (iflag_conv.EQ.2) THEN
2782
2783      IF (logitime) THEN
2784      CALL SYSTEM_CLOCK(COUNT=clock_start)
2785      ENDIF
2786
2787
2788
2789
2790       DO it=1, nbtr
2791        DO j=1,klev
2792        DO i=1,klon
2793           tmp_var(i,j)=tr_seri(i,j,it)
2794        ENDDO
2795        ENDDO
2796        CALL kg_to_cm3(pplay,t_seri,tmp_var)
2797        DO j=1,klev
2798        DO i=1,klon
2799           tr_seri(i,j,it)=tmp_var(i,j)
2800        ENDDO
2801        ENDDO
2802      ENDDO
2803       iscm3=.true.
2804!------------------------------
2805
2806      print *,'iflag_conv bef lessiv',iflag_conv
2807      IF (lessivage) THEN
2808!
2809      print *,' BEFORE Incloud'
2810
2811      IF (lminmax) THEN
2812        DO it=1,nbtr
2813        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_incloud')
2814        ENDDO
2815        DO it=1,nbtr
2816        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before incloud')
2817        ENDDO
2818      IF (lcheckmass) THEN
2819        DO it=1,nbtr
2820         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2821           pplay,t_seri,iscm3,'before incloud')
2822        ENDDO
2823      ENDIF
2824        CALL minmaxsource(source_tr,qmin,qmax,'src: before incloud')
2825      ENDIF
2826
2827
2828!      CALL incloud_scav(lminmax,qmin,qmax,masse,henry,kk,prfl,
2829!     .                  psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,
2830
2831!     .                                     his_dhlsc,his_dhcon,tr_seri)
2832      print *,'iflag_conv bef incloud',iflag_conv
2833
2834        IF (iflag_conv.EQ.2) THEN
2835! Tiedke
2836      CALL incloud_scav(.false.,qmin,qmax,masse,henry,kk,prfl,          &
2837                       psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,     &
2838                                          his_dhlsc,his_dhcon,tr_seri)
2839
2840!---------- to use this option please comment lsc_scav at the end
2841!        ELSE IF (iflag_conv.GE.3) THEN
2842!
2843!      CALL incloud_scav_lsc(.false.,qmin,qmax,masse,henry,kk,prfl,
2844!     .                  psfl,pmflxr,pmflxs,zrho,zdz,t_seri,pdtphys,
2845!     .                                     his_dhlsc,his_dhcon,tr_seri)
2846!--------------------------------------------------------------
2847
2848        ENDIF
2849!
2850!
2851      print *,' BEFORE blcloud (after incloud)'
2852      IF (lminmax) THEN
2853        DO it=1,nbtr
2854        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_blcloud')
2855        ENDDO
2856        DO it=1,nbtr
2857        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before blcloud')
2858        ENDDO
2859      IF (lcheckmass) THEN
2860        DO it=1,nbtr
2861         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,   &
2862           pplay,t_seri,iscm3,'before blcloud')
2863        ENDDO
2864      ENDIF
2865        CALL minmaxsource(source_tr,qmin,qmax,'src: before blcloud')
2866      ENDIF
2867
2868!      CALL blcloud_scav(lminmax,qmin,qmax,pdtphys,prfl,psfl,
2869!     .                  pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,
2870!     .                                  his_dhbclsc,his_dhbccon,tr_seri)
2871
2872        IF (iflag_conv.EQ.2) THEN
2873! Tiedke
2874
2875      CALL blcloud_scav(.false.,qmin,qmax,pdtphys,prfl,psfl,     &
2876                       pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,  &
2877                                       his_dhbclsc,his_dhbccon,tr_seri)
2878
2879!---------- to use this option please comment lsc_scav at the end
2880!           and comment IF iflag=2 after "EFFECT OF PRECIPITATION:"
2881!       
2882!
2883!        ELSE IF (iflag_conv.GE.3) THEN
2884!
2885!      CALL blcloud_scav_lsc(.false.,qmin,qmax,pdtphys,prfl,psfl,
2886!     .                  pmflxr,pmflxs,zdz,alpha_r,alpha_s,masse,
2887!     .                                  his_dhbclsc,his_dhbccon,tr_seri)
2888!
2889!----------------------------------------------------------------------
2890        ENDIF
2891
2892
2893      print *,' AFTER blcloud '
2894
2895      IF (lminmax) THEN
2896        DO it=1,nbtr
2897        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_blcloud')
2898        ENDDO                           
2899        DO it=1,nbtr
2900        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after blcloud')
2901        ENDDO                                 
2902      IF (lcheckmass) THEN
2903        DO it=1,nbtr
2904         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2905           pplay,t_seri,iscm3,'after blcloud')
2906        ENDDO
2907      ENDIF
2908        CALL minmaxsource(source_tr,qmin,qmax,'src: after blcloud')
2909      ENDIF
2910
2911
2912      ENDIF !--lessivage
2913
2914      DO it=1, nbtr
2915         DO j=1,klev
2916         DO i=1,klon
2917           tmp_var(i,j)=tr_seri(i,j,it)
2918         ENDDO
2919         ENDDO
2920         CALL cm3_to_kg(pplay,t_seri,tmp_var)
2921         DO j=1,klev
2922         DO i=1,klon
2923           tr_seri(i,j,it)=tmp_var(i,j)
2924         ENDDO
2925         ENDDO
2926      ENDDO
2927       iscm3=.false.
2928!
2929      IF (logitime) THEN
2930      CALL SYSTEM_CLOCK(COUNT=clock_end)
2931      dife=clock_end-clock_start
2932      ti_wetap=dife*MAX(0,SIGN(1,dife))    &
2933      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
2934      tia_wetap=tia_wetap+REAL(ti_wetap)/REAL(clock_rate)
2935      ENDIF
2936
2937
2938
2939
2940      ENDIF ! iflag_conv=2
2941
2942!
2943!
2944!======================================================================
2945!                         EFFECT OF CONVECTION
2946!======================================================================
2947!
2948#ifdef IOPHYS_DUST
2949      do it=1,nbtr
2950         write(str2,'(i2.2)') it
2951         call iophys_ecrit('TRH'//str2,klev,'SOURCE','',tr_seri(:,:,it))
2952      enddo
2953#endif
2954
2955
2956      IF (logitime) THEN
2957      CALL SYSTEM_CLOCK(COUNT=clock_start)
2958      ENDIF
2959
2960
2961      IF (convection) THEN
2962!
2963      print *,' BEFORE trconvect'
2964
2965      IF (lminmax) THEN
2966        DO it=1,nbtr
2967        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_trconve')
2968        ENDDO
2969        DO it=1,nbtr
2970        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before trconve')
2971        ENDDO
2972      IF (lcheckmass) THEN
2973        DO it=1,nbtr
2974         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
2975           pplay,t_seri,iscm3,'before trconve')
2976        ENDDO
2977      ENDIF
2978        CALL minmaxsource(source_tr,qmin,qmax,'src: before trconve')
2979      ENDIF
2980
2981
2982! JE        CALL trconvect(pplay,t_seri,pdtphys,pmfu,pmfd,pen_u,pde_u,
2983!     .             pen_d,pde_d,paprs,zdz,xconv,qmin,qmax,lminmax,masse,
2984!     .                                                 dtrconv,tr_seri)
2985! -------------------------------------------------------------     
2986        IF (iflag_conv.EQ.2) THEN
2987! Tiedke
2988         CALL trconvect(pplay,t_seri,pdtphys,pmfu,pmfd,pen_u,pde_u,  &
2989                  pen_d,pde_d,paprs,zdz,xconv,qmin,qmax,.false.,masse, &
2990                                                      dtrconv,tr_seri)
2991         DO it=1, nbtr
2992           d_tr_cv(:,:,it)=0.
2993         ENDDO
2994
2995        ELSE IF (iflag_conv.GE.3) THEN
2996! KE
2997         print *,'JE: KE in phytracr_spl'
2998         DO it=1, nbtr
2999             DO k = 1, klev
3000              DO i = 1, klon
3001               tmp_var3(i,k,it)=tr_seri(i,k,it)
3002              END DO
3003             END DO
3004         ENDDO
3005
3006         DO it=1, nbtr
3007!          routine for aerosols . otherwise, check cvltrorig
3008         print *,'Check sum before cvltr it',it,SUM(tr_seri(:,:,it))
3009!           IF (.FALSE.) THEN
3010           CALL cvltr_spl(pdtphys, da, phi,phi2,d1a,dam, mp,ep,    &
3011            sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,           &
3012            pmflxr,pmflxs,evapls,t_seri,wdtrainA,wdtrainM,          &
3013!            paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,        &
3014            paprs,it,tmp_var3,upwd,dnwd,itop_con,ibas_con,        &
3015            henry,kk,zrho,ccntrAA_spla,ccntrENV_spla,coefcoli_spla, &
3016            id_prec,id_fine,id_coss, id_codu, id_scdu,              &
3017            d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr, &
3018            qPa,qMel,qTrdi,dtrcvMA,Mint,                            &
3019            zmfd1a,zmfphi2,zmfdam)
3020!           ENDIF
3021!
3022!           IF (.FALSE.) THEN
3023!           CALL cvltr(pdtphys, da, phi,phi2,d1a,dam, mp,ep,
3024!     .       sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,
3025!     .       pmflxr,pmflxs,evapls,t_seri,wdtrainA,wdtrainM,
3026!     .       paprs,it,tmp_var3,upwd,dnwd,itop_con,ibas_con,
3027!     .       d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,
3028!     .       qPa,qMel,qTrdi,dtrcvMA,Mint,
3029!     .       zmfd1a,zmfphi2,zmfdam)
3030!!  pas lessivage convectif pou n'est pas un aerosol (i/else with cvltr)
3031!           ENDIF
3032
3033
3034
3035!!!!!!!         CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,
3036!!!         CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tmp_var3,
3037!!!     .               upwd,dnwd,d_tr_cv)
3038!             print *,'justbefore cvltrnoscav it= ',it
3039!             CALL checknanqfi(da(:,:),1.,-1.,' da')
3040!             CALL checknanqfi(wght_cvfd(:,:),1.,-1.,'weigth ')
3041!             CALL checknanqfi(mp(:,:),1.,-1.,'mp ')
3042!             CALL checknanqfi(paprs(:,:),1.,-1.,'paprs ')
3043!             CALL checknanqfi(pplay(:,:),1.,-1.,'pplay ')
3044!             CALL checknanqfi(tmp_var3(:,:,it),1.,-1.,'tmp_var3 ')
3045!             CALL checknanqfi(upwd(:,:),1.,-1.,'upwd ')
3046!             CALL checknanqfi(dnwd(:,:),1.,-1.,'dnwd ')
3047!             CALL checknanqfi(d_tr_cv(:,:,it),1.,-1.,'d_tr_cv ')
3048!             IF (.TRUE.) THEN
3049!             CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,
3050!     .            pplay,tmp_var3,upwd,dnwd,d_tr_cv)
3051!             ENDIF
3052             DO k = 1, klev
3053              DO i = 1, klon
3054!               tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
3055               tr_seri(i,k,it)=(tmp_var3(i,k,it)+d_tr_cv(i,k,it))
3056               tmp_var(i,k)=d_tr_cv(i,k,it)
3057
3058              END DO
3059             END DO
3060
3061        CALL kg_to_cm3(pplay,t_seri,tmp_var) !just for his_* computation
3062
3063             DO k = 1, klev
3064              DO i = 1, klon
3065               dtrconv(i,it)=0.0
3066               his_dhkecv(i,it)=his_dhkecv(i,it)-tmp_var(i,k)  &
3067                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3068              END DO
3069             END DO
3070
3071!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3072        CALL kg_to_cm3(pplay,t_seri,tmp_var) !just for his_* computation
3073
3074             DO k = 1, klev
3075              DO i = 1, klon
3076               dtrconv(i,it)=0.0
3077               his_ds(i,it)=his_ds(i,it)-tmp_var(i,k)  &
3078                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3079              END DO
3080             END DO
3081!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3082       IF (lminmax) THEN
3083
3084         print *,'Check sum after cvltr it',it,SUM(tr_seri(:,:,it))
3085        CALL minmaxqfi2(d_tr_cv(:,:,it),qmin,qmax,'d_tr_cv:')
3086        CALL minmaxqfi2(d_tr_trsp(:,:,it),qmin,qmax,'d_tr_trsp:')
3087        CALL minmaxqfi2(d_tr_sscav(:,:,it),qmin,qmax,'d_tr_sscav:')
3088        CALL minmaxqfi2(d_tr_sat(:,:,it),qmin,qmax,'d_tr_sat:')
3089        CALL minmaxqfi2(d_tr_uscav(:,:,it),qmin,qmax,'d_tr_uscav:')
3090      IF (lcheckmass) THEN
3091        CALL checkmass(d_tr_cv(:,:,it),RNAVO,masse(it),zdz,  &
3092           pplay,t_seri,.false.,'d_tr_cv:')
3093      ENDIF
3094       ENDIF
3095         ENDDO ! it=1,nbtr
3096
3097        ENDIF ! iflag_conv
3098       IF (lminmax) THEN
3099        DO it=1,nbtr
3100        CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_trcon')
3101        ENDDO
3102        DO it=1,nbtr
3103        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after trconv')
3104        ENDDO
3105      IF (lcheckmass) THEN
3106        DO it=1,nbtr
3107         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
3108           pplay,t_seri,iscm3,'after trconv')
3109        ENDDO
3110      ENDIF
3111        CALL minmaxsource(source_tr,qmin,qmax,'src: after trconv')
3112      ENDIF
3113      ENDIF ! convection
3114
3115      IF (logitime) THEN
3116      CALL SYSTEM_CLOCK(COUNT=clock_end)
3117      dife=clock_end-clock_start
3118      ti_cvltr=dife*MAX(0,SIGN(1,dife))   &
3119      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3120      tia_cvltr=tia_cvltr+REAL(ti_cvltr)/REAL(clock_rate)
3121      ENDIF
3122
3123
3124
3125!
3126!
3127!=======================================================================
3128!      LARGE SCALE SCAVENGING KE
3129!=======================================================================
3130!     
3131#ifdef IOPHYS_DUST
3132      call iophys_ecrit('da',klev,'da','',da)
3133      call iophys_ecrit('phi',klev,'phi','',phi)
3134      call iophys_ecrit('phi2',klev,'phi2','',phi2)
3135      call iophys_ecrit('d1a',klev,'d1a','',d1a)
3136      call iophys_ecrit('dam',klev,'dam','',dam)
3137      call iophys_ecrit('mp',klev,'mp','',mp)
3138      call iophys_ecrit('ep',klev,'ep','',ep)
3139      call iophys_ecrit('sigd',klev,'sigd','',sigd)
3140      call iophys_ecrit('sij',klev,'sij','',sij)
3141      call iophys_ecrit('wght_cvfd',klev,'wght_cvfd','',wght_cvfd)
3142      call iophys_ecrit('clw',klev,'clw','',clw)
3143      call iophys_ecrit('elij',klev,'elij','',elij)
3144      call iophys_ecrit('epmlmMm',klev,'epmlmMm','',epmlmMm)
3145      call iophys_ecrit('eplaMm',klev,'eplaMm','',eplaMm)
3146      call iophys_ecrit('pmflxr',klev,'pmflxr','',pmflxr)
3147      call iophys_ecrit('pmflxs',klev,'pmflxs','',pmflxs)
3148      call iophys_ecrit('evapls',klev,'evapls','',evapls)
3149      call iophys_ecrit('wdtrainA',klev,'wdtrainA','',wdtrainA)
3150      call iophys_ecrit('wdtrainM',klev,'wdtrainM','',wdtrainM)
3151
3152      do it=1,nbtr
3153         write(str2,'(i2.2)') it
3154         call iophys_ecrit('TRI'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3155      enddo
3156#endif
3157
3158
3159       IF (iflag_conv.GE.3) THEN
3160       IF (logitime) THEN
3161       CALL SYSTEM_CLOCK(COUNT=clock_start)
3162       ENDIF
3163
3164
3165       IF (lessivage)  THEN
3166       print *,' BEFORE lsc_scav '
3167       IF (lminmax) THEN
3168        DO it=1,nbtr
3169       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_before_lsc_scav')
3170        ENDDO
3171        DO it=1,nbtr
3172        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'before lsc_scav')
3173        ENDDO
3174      IF (lcheckmass) THEN
3175        DO it=1,nbtr
3176         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz,  &
3177           pplay,t_seri,iscm3,'before lsc_scav')
3178        ENDDO
3179      ENDIF
3180        CALL minmaxsource(source_tr,qmin,qmax,'src: before lsc_scav')
3181      ENDIF
3182
3183
3184
3185       ql_incloud_ref = 10.e-4
3186       ql_incloud_ref =  5.e-4
3187! calcul du contenu en eau liquide au sein du nuage
3188       ql_incl = ql_incloud_ref
3189! choix du lessivage
3190      IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN
3191      !IF (.false.) THEN  ! test #DFB (Binta) sans lsc_scav_spl
3192        print *,'JE iflag_lscav',iflag_lscav
3193        DO it = 1, nbtr
3194
3195!       incloud scavenging and removal by large scale rain ! orig : ql_incl
3196!         was replaced by 0.5e-3 kg/kg
3197!          the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR
3198!         Liu (2001) proposed to use 1.5e-3 kg/kg
3199
3200!       CALL lsc_scav_orig(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,
3201!     .               rneb,beta_fisrt, beta_v1,pplay,paprs,
3202!     .               t_seri,tr_seri,d_tr_insc,
3203!     .               d_tr_bcscav,d_tr_evapls,qPrls)
3204          CALL lsc_scav_spl(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,  &
3205                    rneb,beta_fisrt, beta_v1,pplay,paprs,      &
3206                    t_seri,tr_seri,d_tr_insc,                  &
3207                    alpha_r,alpha_s,kk, henry,                 &
3208                    id_prec,id_fine,id_coss, id_codu, id_scdu, &
3209                    d_tr_bcscav,d_tr_evapls,qPrls)
3210
3211!large scale scavenging tendency
3212          DO k = 1, klev
3213           DO i = 1, klon
3214                d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it) &
3215                        +d_tr_evapls(i,k,it)
3216                tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it)
3217                         tmp_var(i,k)=d_tr_ls(i,k,it)
3218           ENDDO
3219          ENDDO
3220
3221          CALL kg_to_cm3(pplay,t_seri,tmp_var)
3222
3223          DO k=1,klev
3224           DO i=1,klon
3225            his_dhkelsc(i,it)=his_dhkelsc(i,it)-tmp_var(i,k)    &
3226                     /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
3227     
3228           END DO
3229          END DO
3230
3231        END DO  !it=1,nbtr
3232
3233      ELSE
3234        print *,'WARNING: NO lsc_scav, Please choose iflag_lscav=3 or 4'
3235        DO it = 1, nbtr
3236          DO i=1,klon
3237            his_dhkelsc(i,it)=0.0
3238          END DO  ! klon
3239         END DO  !it=1,nbtr
3240      ENDIF !iflag_lscav
3241
3242       print *,' AFTER lsc_scav '
3243       IF (lminmax) THEN
3244        DO it=1,nbtr
3245       CALL checknanqfi(tr_seri(:,:,it),qmin,qmax,'nan_after_lsc_scav')
3246        ENDDO
3247        DO it=1,nbtr
3248        CALL minmaxqfi2(tr_seri(:,:,it),qmin,qmax,'after lsc_scav')
3249        ENDDO
3250      IF (lcheckmass) THEN
3251        DO it=1,nbtr
3252         CALL checkmass(tr_seri(:,:,it),RNAVO,masse(it),zdz, &
3253           pplay,t_seri,iscm3,'after lsc_scav')
3254        ENDDO
3255       ENDIF
3256        CALL minmaxsource(source_tr,qmin,qmax,'src: after lsc_scav')
3257      ENDIF
3258
3259      ENDIF ! lessivage
3260 
3261      IF (logitime) THEN
3262      CALL SYSTEM_CLOCK(COUNT=clock_end)
3263      dife=clock_end-clock_start
3264      ti_lscs=dife*MAX(0,SIGN(1,dife))   &
3265      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3266      tia_lscs=tia_lscs+REAL(ti_lscs)/REAL(clock_rate)
3267      ENDIF
3268
3269
3270
3271      ENDIF !iflag_conv
3272
3273 
3274!=======================================================================
3275!                         COMPUTING THE BURDEN
3276!=======================================================================
3277#ifdef IOPHYS_DUST
3278      do it=1,nbtr
3279         write(str2,'(i2.2)') it
3280         call iophys_ecrit('TRJ'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3281      enddo
3282#endif
3283
3284!   
3285      IF (logitime) THEN
3286      CALL SYSTEM_CLOCK(COUNT=clock_start)
3287      ENDIF
3288
3289 
3290      DO it=1, nbtr
3291        DO j=1,klev
3292        DO i=1,klon
3293           tmp_var(i,j)=tr_seri(i,j,it)
3294        ENDDO
3295        ENDDO
3296        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3297        DO j=1,klev
3298        DO i=1,klon
3299           tr_seri(i,j,it)=tmp_var(i,j)
3300        ENDDO
3301        ENDDO
3302      ENDDO
3303       iscm3=.true.
3304
3305!
3306! Computing burden in mg/m2
3307      DO it=1, nbtr
3308      DO k=1, klev
3309      DO i=1, klon
3310        trm(i,it)=trm(i,it)+tr_seri(i,k,it)*1.e6*zdz(i,k)*  &
3311                 masse(it)*1.e3/RNAVO     !--mg S/m2
3312      ENDDO
3313      ENDDO
3314      ENDDO
3315!
3316! Computing Surface concentration in ug/m3
3317!
3318      DO it=1, nbtr
3319      DO i=1, klon
3320        sconc_seri(i,it)=tr_seri(i,1,it)*1.e6* &
3321                 masse(it)*1.e3/RNAVO     !--mg/m3 (tr_seri ist in g/cm3)
3322      ENDDO
3323      ENDDO
3324!
3325!=======================================================================
3326!                  CALCULATION OF OPTICAL PROPERTIES
3327!=======================================================================
3328!     
3329      CALL aeropt_spl(zdz, tr_seri, RHcl,                                 &
3330                        id_prec, id_fine, id_coss, id_codu, id_scdu,     &
3331                        ok_chimeredust,                                 &
3332                    diff_aod550_tot, diag_aod670_tot, diag_aod865_tot,     &
3333                    diff_aod550_tr2, diag_aod670_tr2, diag_aod865_tr2,     &
3334                    diag_aod550_ss,  diag_aod670_ss,  diag_aod865_ss,        &
3335                    diag_aod550_dust,diag_aod670_dust,diag_aod865_dust,  &
3336           diag_aod550_dustsco,diag_aod670_dustsco,diag_aod865_dustsco) 
3337
3338
3339
3340      IF (logitime) THEN
3341      CALL SYSTEM_CLOCK(COUNT=clock_end)
3342      dife=clock_end-clock_start
3343      ti_brop=dife*MAX(0,SIGN(1,dife))   &
3344      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
3345      tia_brop=tia_brop+REAL(ti_brop)/REAL(clock_rate)
3346      ENDIF
3347
3348
3349!=======================================================================
3350!   MODIS terra/aqua simulation output
3351!=======================================================================
3352      masque_aqua_cur(:)=0
3353      masque_terra_cur(:)=0
3354
3355      CALL satellite_out_spla(jD_cur,jH_cur,pdtphys,rlat,rlon,   &
3356                              masque_aqua_cur, masque_terra_cur )
3357      IF (jH_cur-pdtphys/86400. .LT. 0.) THEN
3358       !new utc day: put in 0 everything
3359!JE20150518<<
3360       masque_aqua(:) =0
3361       masque_terra(:) =0
3362       aod550_terra(:)=0. 
3363       aod550_tr2_terra(:)=0. 
3364       aod550_ss_terra(:)=0.   
3365       aod550_dust_terra(:)=0.   
3366       aod550_dustsco_terra(:)=0.   
3367       aod670_terra(:)=0.   
3368       aod670_tr2_terra(:)=0. 
3369       aod670_ss_terra(:)=0. 
3370       aod670_dust_terra(:)=0. 
3371       aod670_dustsco_terra(:)=0. 
3372       aod865_terra(:)=0.   
3373       aod865_tr2_terra(:)=0. 
3374       aod865_ss_terra(:)=0. 
3375       aod865_dust_terra(:)=0. 
3376       aod865_dustsco_terra(:)=0. 
3377       aod550_aqua(:)=0. 
3378       aod550_tr2_aqua(:)=0. 
3379       aod550_ss_aqua(:)=0.   
3380       aod550_dust_aqua(:)=0.   
3381       aod550_dustsco_aqua(:)=0.   
3382       aod670_aqua(:)=0.   
3383       aod670_tr2_aqua(:)=0. 
3384       aod670_ss_aqua(:)=0. 
3385       aod670_dust_aqua(:)=0. 
3386       aod670_dustsco_aqua(:)=0. 
3387       aod865_aqua(:)=0.   
3388       aod865_tr2_aqua(:)=0. 
3389       aod865_ss_aqua(:)=0. 
3390       aod865_dust_aqua(:)=0. 
3391       aod865_dustsco_aqua(:)=0. 
3392!JE20150518>>
3393      ENDIF
3394
3395      DO i=1,klon
3396
3397       aod550_terra(i)=aod550_terra(i)+   &
3398                       masque_terra_cur(i)*diff_aod550_tot(i)
3399       aod550_tr2_terra(i)= aod550_tr2_terra(i)+ &
3400                       masque_terra_cur(i)*diff_aod550_tr2(i)
3401       aod550_ss_terra(i)=aod550_ss_terra(i) + &
3402                       masque_terra_cur(i)*diag_aod550_ss(i)
3403       aod550_dust_terra(i)=  aod550_dust_terra(i) + &
3404                       masque_terra_cur(i)*diag_aod550_dust(i)
3405       aod550_dustsco_terra(i)= aod550_dustsco_terra(i) + &
3406                       masque_terra_cur(i)*diag_aod550_dustsco(i)
3407       aod670_terra(i)=aod670_terra(i)+   &
3408                       masque_terra_cur(i)*diag_aod670_tot(i)
3409       aod670_tr2_terra(i)= aod670_tr2_terra(i)+ &
3410                       masque_terra_cur(i)*diag_aod670_tr2(i)
3411       aod670_ss_terra(i)=aod670_ss_terra(i) + &
3412                       masque_terra_cur(i)*diag_aod670_ss(i)
3413       aod670_dust_terra(i)=  aod670_dust_terra(i) + &
3414                       masque_terra_cur(i)*diag_aod670_dust(i)
3415       aod670_dustsco_terra(i)= aod670_dustsco_terra(i) + &
3416                       masque_terra_cur(i)*diag_aod670_dustsco(i)
3417       aod865_terra(i)=aod865_terra(i)+   &
3418                       masque_terra_cur(i)*diag_aod865_tot(i)
3419       aod865_tr2_terra(i)= aod865_tr2_terra(i)+ &
3420                       masque_terra_cur(i)*diag_aod865_tr2(i)
3421       aod865_ss_terra(i)=aod865_ss_terra(i) + &
3422                       masque_terra_cur(i)*diag_aod865_ss(i)
3423       aod865_dust_terra(i)=  aod865_dust_terra(i) + &
3424                       masque_terra_cur(i)*diag_aod865_dust(i)
3425       aod865_dustsco_terra(i)= aod865_dustsco_terra(i) + &
3426                       masque_terra_cur(i)*diag_aod865_dustsco(i)
3427
3428
3429
3430       aod550_aqua(i)=aod550_aqua(i)+   &
3431                       masque_aqua_cur(i)*diff_aod550_tot(i)
3432       aod550_tr2_aqua(i)= aod550_tr2_aqua(i)+ &
3433                       masque_aqua_cur(i)*diff_aod550_tr2(i)
3434       aod550_ss_aqua(i)=aod550_ss_aqua(i) + &
3435                       masque_aqua_cur(i)*diag_aod550_ss(i)
3436       aod550_dust_aqua(i)=  aod550_dust_aqua(i) + &
3437                       masque_aqua_cur(i)*diag_aod550_dust(i)
3438       aod550_dustsco_aqua(i)= aod550_dustsco_aqua(i) + &
3439                       masque_aqua_cur(i)*diag_aod550_dustsco(i)
3440       aod670_aqua(i)=aod670_aqua(i)+   &
3441                       masque_aqua_cur(i)*diag_aod670_tot(i)
3442       aod670_tr2_aqua(i)= aod670_tr2_aqua(i)+ &
3443                       masque_aqua_cur(i)*diag_aod670_tr2(i)
3444       aod670_ss_aqua(i)=aod670_ss_aqua(i) + &
3445                       masque_aqua_cur(i)*diag_aod670_ss(i)
3446       aod670_dust_aqua(i)=  aod670_dust_aqua(i) + &
3447                       masque_aqua_cur(i)*diag_aod670_dust(i)
3448       aod670_dustsco_aqua(i)= aod670_dustsco_aqua(i) + &
3449                       masque_aqua_cur(i)*diag_aod670_dustsco(i)
3450       aod865_aqua(i)=aod865_aqua(i)+   &
3451                       masque_aqua_cur(i)*diag_aod865_tot(i)
3452       aod865_tr2_aqua(i)= aod865_tr2_aqua(i)+ &
3453                       masque_aqua_cur(i)*diag_aod865_tr2(i)
3454       aod865_ss_aqua(i)=aod865_ss_aqua(i) + &
3455                       masque_aqua_cur(i)*diag_aod865_ss(i)
3456       aod865_dust_aqua(i)=  aod865_dust_aqua(i) + &
3457                       masque_aqua_cur(i)*diag_aod865_dust(i)
3458       aod865_dustsco_aqua(i)= aod865_dustsco_aqua(i) + &
3459                       masque_aqua_cur(i)*diag_aod865_dustsco(i)
3460
3461               masque_aqua(i)=masque_aqua(i)+masque_aqua_cur(i)
3462         masque_terra(i)=masque_terra(i)+masque_terra_cur(i)
3463      ENDDO
3464
3465      IF (jH_cur+pdtphys/86400. .GE. 1.) THEN 
3466!          print *,'last step of the day'
3467          DO i=1,klon
3468               IF (masque_aqua(i).GT. 0) THEN
3469                   aod550_aqua(i)=aod550_aqua(i)/masque_aqua(i)
3470                   aod670_aqua(i)=aod670_aqua(i)/masque_aqua(i)
3471                   aod865_aqua(i)=aod865_aqua(i)/masque_aqua(i)
3472                   aod550_tr2_aqua(i)=aod550_tr2_aqua(i)/masque_aqua(i)
3473                   aod670_tr2_aqua(i)=aod670_tr2_aqua(i)/masque_aqua(i)
3474                   aod865_tr2_aqua(i)=aod865_tr2_aqua(i)/masque_aqua(i)
3475                   aod550_ss_aqua(i)=aod550_ss_aqua(i)/masque_aqua(i)
3476                   aod670_ss_aqua(i)=aod670_ss_aqua(i)/masque_aqua(i)
3477                   aod865_ss_aqua(i)=aod865_ss_aqua(i)/masque_aqua(i)
3478                   aod550_dust_aqua(i)=aod550_dust_aqua(i)/masque_aqua(i)
3479                   aod670_dust_aqua(i)=aod670_dust_aqua(i)/masque_aqua(i)
3480                   aod865_dust_aqua(i)=aod865_dust_aqua(i)/masque_aqua(i)
3481                   aod550_dustsco_aqua(i)=aod550_dustsco_aqua(i)/masque_aqua(i)
3482                   aod670_dustsco_aqua(i)=aod670_dustsco_aqua(i)/masque_aqua(i)
3483                   aod865_dustsco_aqua(i)=aod865_dustsco_aqua(i)/masque_aqua(i)
3484               ELSE
3485                   aod550_aqua(i) = -999.
3486                   aod670_aqua(i) = -999.
3487                   aod865_aqua(i) = -999.
3488                   aod550_tr2_aqua(i)= -999.
3489                   aod670_tr2_aqua(i)= -999.
3490                   aod865_tr2_aqua(i)= -999.
3491                   aod550_ss_aqua(i)= -999.
3492                   aod670_ss_aqua(i)= -999.
3493                   aod865_ss_aqua(i)= -999.
3494                   aod550_dust_aqua(i)= -999.
3495                   aod670_dust_aqua(i)= -999.
3496                   aod865_dust_aqua(i)= -999.
3497                   aod550_dustsco_aqua(i)= -999.
3498                   aod670_dustsco_aqua(i)= -999.
3499                   aod865_dustsco_aqua(i)= -999.
3500               ENDIF
3501               IF (masque_terra(i).GT. 0) THEN
3502                   aod550_terra(i)=aod550_terra(i)/masque_terra(i)
3503                   aod670_terra(i)=aod670_terra(i)/masque_terra(i)
3504                   aod865_terra(i)=aod865_terra(i)/masque_terra(i)
3505                   aod550_tr2_terra(i)=aod550_tr2_terra(i)/masque_terra(i)
3506                   aod670_tr2_terra(i)=aod670_tr2_terra(i)/masque_terra(i)
3507                   aod865_tr2_terra(i)=aod865_tr2_terra(i)/masque_terra(i)
3508                   aod550_ss_terra(i)=aod550_ss_terra(i)/masque_terra(i)
3509                   aod670_ss_terra(i)=aod670_ss_terra(i)/masque_terra(i)
3510                   aod865_ss_terra(i)=aod865_ss_terra(i)/masque_terra(i)
3511                   aod550_dust_terra(i)=aod550_dust_terra(i)/masque_terra(i)
3512                   aod670_dust_terra(i)=aod670_dust_terra(i)/masque_terra(i)
3513                   aod865_dust_terra(i)=aod865_dust_terra(i)/masque_terra(i)
3514                   aod550_dustsco_terra(i)=aod550_dustsco_terra(i)/masque_terra(i)
3515                   aod670_dustsco_terra(i)=aod670_dustsco_terra(i)/masque_terra(i)
3516                   aod865_dustsco_terra(i)=aod865_dustsco_terra(i)/masque_terra(i)
3517               ELSE
3518                   aod550_terra(i) = -999.
3519                   aod670_terra(i) = -999.
3520                   aod865_terra(i) = -999.
3521                   aod550_tr2_terra(i)= -999.
3522                   aod670_tr2_terra(i)= -999.
3523                   aod865_tr2_terra(i)= -999.
3524                   aod550_ss_terra(i)= -999.
3525                   aod670_ss_terra(i)= -999.
3526                   aod865_ss_terra(i)= -999.
3527                   aod550_dust_terra(i)= -999.
3528                   aod670_dust_terra(i)= -999.
3529                   aod865_dust_terra(i)= -999.
3530                   aod550_dustsco_terra(i)= -999.
3531                   aod670_dustsco_terra(i)= -999.
3532                   aod865_dustsco_terra(i)= -999.
3533               ENDIF
3534          ENDDO         
3535
3536!!AS deleting lines
3537!!      IF (ok_histrac) THEN
3538!!!!      write in output file
3539!!----many deleted lines
3540!!      ENDIF  !mpi_root
3541!!!$OMP END MASTER
3542!!!$OMP BARRIER
3543!!      ENDIF  !--ok_histrac
3544
3545      ENDIF ! jH_cur...
3546
3547
3548!
3549!======================================================================
3550!  Stockage sur bande histoire
3551!======================================================================
3552#ifdef IOPHYS_DUST
3553      do it=1,nbtr
3554         write(str2,'(i2.2)') it
3555         call iophys_ecrit('TRK'//str2,klev,'SOURCE','',tr_seri(:,:,it))
3556      enddo
3557#endif
3558
3559
3560!
3561      IF (logitime) THEN
3562      CALL SYSTEM_CLOCK(COUNT=clock_start)
3563      ENDIF
3564
3565      DO it=1, nbtr
3566         DO j=1,klev
3567         DO i=1,klon
3568           tmp_var(i,j)=tr_seri(i,j,it)
3569         ENDDO
3570         ENDDO
3571         CALL cm3_to_kg(pplay,t_seri,tmp_var)
3572         DO j=1,klev
3573         DO i=1,klon
3574           tr_seri(i,j,it)=tmp_var(i,j)
3575         ENDDO
3576         ENDDO
3577      ENDDO
3578       iscm3=.false.
3579
3580!
3581!
3582!======================================================================
3583!  SAVING AEROSOL RELATED VARIABLES INTO FILE
3584!======================================================================
3585!
3586      ndex2d = 0
3587      ndex3d = 0
3588!
3589      itra=itra+1
3590
3591      print *,'SAVING VARIABLES FOR DAY ',itra
3592!
3593      fluxbb(:)=0.0
3594      fluxff(:)=0.0
3595      fluxbcbb(:)=0.0
3596      fluxbcff(:)=0.0
3597      fluxbcnff(:)=0.0
3598      fluxbcba(:)=0.0
3599      fluxbc(:)=0.0
3600      fluxombb(:)=0.0
3601      fluxomff(:)=0.0
3602      fluxomnat(:)=0.0
3603      fluxomba(:)=0.0
3604      fluxomnff(:)=0.0
3605      fluxom(:)=0.0
3606      fluxh2sff(:)=0.0
3607      fluxh2snff(:)=0.0
3608      fluxh2sbio(:)=0.0
3609      fluxso2ff(:)=0.0
3610      fluxso2nff(:)=0.0
3611      fluxso2bb(:)=0.0
3612      fluxso2vol(:)=0.0
3613      fluxso2ba(:)=0.0
3614      fluxso2(:)=0.0
3615      fluxso4ff(:)=0.0
3616      fluxso4nff(:)=0.0
3617      fluxso4bb(:)=0.0
3618      fluxso4ba(:)=0.0
3619      fluxso4(:)=0.0
3620      fluxdms(:)=0.0
3621      fluxdustec(:)=0.0
3622      fluxddfine(:)=0.0
3623      fluxddcoa(:)=0.0
3624      fluxddsco(:)=0.0
3625      fluxdd(:)=0.0
3626      fluxssfine(:)=0.0
3627      fluxsscoa(:)=0.0
3628      fluxss(:)=0.0
3629      DO i=1, klon
3630         IF (iregion_ind(i).GT.0) THEN           ! LAND
3631           ! SULFUR EMISSIONS
3632           fluxh2sff(i)= (lmt_so2ff_l(i)+lmt_so2ff_h(i))*frach2sofso2*  &       
3633                         scale_param_ind(iregion_ind(i))*               &
3634                                    1.e4/RNAVO*masse_s*1.e3         ! mgS/m2/s
3635           fluxso2ff(i)=scale_param_ind(iregion_ind(i)) * fracso2emis * &
3636                        (lmt_so2ff_l(i)+lmt_so2ff_h(i)) * 1.e4/RNAVO * &
3637                                                    masse_s * 1.e3  ! mgS/m2/s
3638           ! SULPHATE EMISSIONS
3639           fluxso4ff(i)=scale_param_ind(iregion_ind(i))*(1-fracso2emis)* &
3640                         (lmt_so2ff_l(i)+lmt_so2ff_h(i)) * 1.e4/RNAVO * &
3641                                                    masse_s * 1.e3  ! mgS/m2/s
3642           ! BLACK CARBON EMISSIONS
3643           fluxbcff(i)=scale_param_ff(iregion_ind(i))* &
3644                                             lmt_bcff(i)*1.e4*1.e3  !/g/m2/s
3645           ! ORGANIC MATTER EMISSIONS
3646           fluxomff(i)=scale_param_ff(iregion_ind(i))* &
3647                               (lmt_omff(i))*1.e4*1.e3  !/g/m2/s
3648           ! FOSSIL FUEL EMISSIONS
3649           fluxff(i)=fluxbcff(i)+fluxomff(i)
3650         ENDIF
3651         IF (iregion_bb(i).GT.0) THEN           ! LAND
3652           ! SULFUR EMISSIONS
3653           fluxso2bb(i) =scale_param_bb(iregion_bb(i)) * fracso2emis *  &
3654                      (lmt_so2bb_l(i)+lmt_so2bb_h(i))*                 &
3655                (1.-pctsrf(i,is_oce))*1.e4/RNAVO*masse_s*1.e3       ! mgS/m2/s
3656           ! SULPHATE EMISSIONS
3657           fluxso4bb(i) =scale_param_bb(iregion_bb(i))*(1-fracso2emis)* &
3658                      (lmt_so2bb_l(i)+lmt_so2bb_h(i))*                 &
3659                (1.-pctsrf(i,is_oce))*1.e4/RNAVO*masse_s*1.e3       ! mgS/m2/s
3660           ! BLACK CARBON EMISSIONS
3661           fluxbcbb(i)=scale_param_bb(iregion_bb(i))*                   &
3662                           (lmt_bcbb_l(i)+lmt_bcbb_h(i))*1.e4*1.e3  !mg/m2/s
3663           ! ORGANIC MATTER EMISSIONS
3664           fluxombb(i)=scale_param_bb(iregion_bb(i))*                   &
3665                           (lmt_ombb_l(i)+lmt_ombb_h(i))*1.e4*1.e3  !mg/m2/s
3666           ! BIOMASS BURNING EMISSIONS
3667           fluxbb(i)=fluxbcbb(i)+fluxombb(i)
3668         ENDIF
3669         ! H2S EMISSIONS
3670         fluxh2sbio(i)=lmt_h2sbio(i)*1.e4/RNAVO*masse_s*1.e3      ! mgS/m2/s
3671         fluxh2snff(i)= lmt_so2nff(i)*frach2sofso2*  &
3672                                    1.e4/RNAVO*masse_s*1.e3         ! mgS/m2/s
3673         ! SULFUR DIOXIDE EMISSIONS
3674         fluxso2nff(i)=fracso2emis * lmt_so2nff(i) * 1.e4/RNAVO *  &
3675                                                    masse_s * 1.e3  ! mgS/m2/s
3676         fluxso2vol(i)=(lmt_so2volc_cont(i)+lmt_so2volc_expl(i))  &
3677                      *1.e4/RNAVO*masse_s*1.e3        ! mgS/m2/s
3678         fluxso2ba(i) =lmt_so2ba(i)*1.e4/RNAVO*masse_s*1.e3*      &
3679                                                        fracso2emis ! mgS/m2/s
3680         fluxso2(i)=fluxso2ff(i)+fluxso2bb(i)+fluxso2nff(i)+   &
3681                   fluxso2vol(i)+fluxso2ba(i)
3682         ! DMS EMISSIONS
3683         fluxdms(i)=( lmt_dms(i)+lmt_dmsbio(i) )              &
3684                   *1.e4/RNAVO*masse_s*1.e3          ! mgS/m2/s
3685         ! SULPHATE EMISSIONS
3686         fluxso4ba(i) =lmt_so2ba(i)*1.e4/RNAVO*masse_s*1.e3        &
3687                      *(1-fracso2emis) ! mgS/m2/s
3688         fluxso4nff(i)=(1-fracso2emis)*lmt_so2nff(i) * 1.e4/RNAVO *  &
3689                                                    masse_s * 1.e3  ! mgS/m2/s
3690         fluxso4(i)=fluxso4ff(i)+fluxso4bb(i)+fluxso4ba(i)+fluxso4nff(i)
3691         ! BLACK CARBON EMISSIONS
3692
3693         fluxbcnff(i)=lmt_bcnff(i)*1.e4*1.e3  !mg/m2/s
3694         fluxbcba(i)=lmt_bcba(i)*1.e4*1.e3    !mg/m2/s
3695         fluxbc(i)=fluxbcbb(i)+fluxbcff(i)+fluxbcnff(i)+fluxbcba(i)
3696         ! ORGANIC MATTER EMISSIONS
3697         fluxomnat(i)=lmt_omnat(i)*1.e4*1.e3  !mg/m2/s
3698         fluxomba(i)=lmt_omba(i)*1.e4*1.e3  !mg/m2/s
3699         fluxomnff(i)=lmt_omnff(i)*1.e4*1.e3  !mg/m2/s
3700         fluxom(i)=fluxombb(i)+fluxomff(i)+fluxomnat(i)+fluxomba(i)+  &
3701                  fluxomnff(i)
3702        ! DUST EMISSIONS
3703         fluxdustec(i)=dust_ec(i)*1.e6 ! old dust emission scheme
3704!JE20140605<<         old dust emission version
3705!         fluxddfine(i)=scale_param_dustacc(iregion_dust(i))
3706!     .                                  * dust_ec(i)*0.093*1.e6
3707!         fluxddcoa(i)=scale_param_dustcoa(iregion_dust(i))
3708!     .                                  * dust_ec(i)*0.905*1.e6
3709!         fluxdd(i)=fluxddfine(i)+fluxddcoa(i)
3710!JE20140605>>
3711         fluxddfine(i)=flux_sparam_ddfine(i)
3712         fluxddcoa(i)=flux_sparam_ddcoa(i)
3713         fluxddsco(i)=flux_sparam_ddsco(i)
3714         fluxdd(i)=fluxddfine(i)+fluxddcoa(i)+fluxddsco(i)
3715        ! SEA SALT EMISSIONS
3716         fluxssfine(i)=scale_param_ssacc*lmt_sea_salt(i,1)*1.e4*1.e3
3717         fluxsscoa(i)=scale_param_sscoa*lmt_sea_salt(i,2)*1.e4*1.e3
3718         fluxss(i)=fluxssfine(i)+fluxsscoa(i)
3719      ENDDO
3720
3721!      prepare outputs cvltr
3722
3723      DO it=1, nbtr
3724        DO k=1,klev
3725        DO i=1,klon
3726           tmp_var(i,k)=d_tr_cv(i,k,it)
3727        ENDDO
3728        ENDDO
3729        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3730       DO k=1,klev
3731        DO i=1,klon
3732          d_tr_cv_o(i,k,it)=tmp_var(i,k)  &
3733                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3734        ENDDO
3735       ENDDO
3736      ENDDO
3737      DO it=1, nbtr
3738        DO k=1,klev
3739        DO i=1,klon
3740           tmp_var(i,k)=d_tr_trsp(i,k,it)
3741        ENDDO
3742        ENDDO
3743        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3744       DO k=1,klev
3745        DO i=1,klon
3746          d_tr_trsp_o(i,k,it)=tmp_var(i,k)  &
3747                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3748        ENDDO
3749       ENDDO
3750      ENDDO
3751      DO it=1, nbtr
3752        DO k=1,klev
3753        DO i=1,klon
3754           tmp_var(i,k)=d_tr_sscav(i,k,it)
3755        ENDDO
3756        ENDDO
3757        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3758       DO k=1,klev
3759        DO i=1,klon
3760          d_tr_sscav_o(i,k,it)=tmp_var(i,k)  &
3761                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3762        ENDDO
3763       ENDDO
3764      ENDDO
3765      DO it=1, nbtr
3766        DO k=1,klev
3767        DO i=1,klon
3768           tmp_var(i,k)=d_tr_sat(i,k,it)
3769        ENDDO
3770        ENDDO
3771        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3772       DO k=1,klev
3773        DO i=1,klon
3774          d_tr_sat_o(i,k,it)=tmp_var(i,k)   &
3775                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3776        ENDDO
3777       ENDDO
3778      ENDDO
3779      DO it=1, nbtr
3780        DO k=1,klev
3781        DO i=1,klon
3782           tmp_var(i,k)=d_tr_uscav(i,k,it)
3783        ENDDO
3784        ENDDO
3785        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3786       DO k=1,klev
3787        DO i=1,klon
3788          d_tr_uscav_o(i,k,it)=tmp_var(i,k)  &
3789                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3790        ENDDO
3791       ENDDO
3792      ENDDO
3793!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3794     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3795      DO it=1, nbtr
3796        DO k=1,klev
3797        DO i=1,klon
3798           tmp_var(i,k)=d_tr_insc(i,k,it)
3799        ENDDO
3800        ENDDO
3801        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3802       DO k=1,klev
3803        DO i=1,klon
3804          d_tr_insc_o(i,k,it)=tmp_var(i,k)  &
3805                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3806        ENDDO
3807       ENDDO
3808      ENDDO
3809     
3810
3811      DO it=1, nbtr
3812        DO k=1,klev
3813        DO i=1,klon
3814           tmp_var(i,k)=d_tr_bcscav(i,k,it)
3815        ENDDO
3816        ENDDO
3817        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3818       DO k=1,klev
3819        DO i=1,klon
3820          d_tr_bcscav_o(i,k,it)=tmp_var(i,k)  &
3821                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3822        ENDDO
3823       ENDDO
3824      ENDDO
3825
3826
3827      DO it=1, nbtr
3828        DO k=1,klev
3829        DO i=1,klon
3830           tmp_var(i,k)=d_tr_evapls(i,k,it)
3831        ENDDO
3832        ENDDO
3833        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3834       DO k=1,klev
3835        DO i=1,klon
3836          d_tr_evapls_o(i,k,it)=tmp_var(i,k)  &
3837                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3838        ENDDO
3839       ENDDO
3840      ENDDO
3841
3842
3843      DO it=1, nbtr
3844        DO k=1,klev
3845        DO i=1,klon
3846           tmp_var(i,k)=d_tr_ls(i,k,it)
3847        ENDDO
3848        ENDDO
3849        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3850       DO k=1,klev
3851        DO i=1,klon
3852          d_tr_ls_o(i,k,it)=tmp_var(i,k)  &
3853                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3854        ENDDO
3855       ENDDO
3856      ENDDO
3857
3858
3859      DO it=1, nbtr
3860        DO k=1,klev
3861        DO i=1,klon
3862           tmp_var(i,k)=d_tr_dyn(i,k,it)
3863        ENDDO
3864        ENDDO
3865        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3866       DO k=1,klev
3867        DO i=1,klon
3868          d_tr_dyn_o(i,k,it)=tmp_var(i,k)  &
3869                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3870        ENDDO
3871       ENDDO
3872      ENDDO
3873
3874
3875      DO it=1, nbtr
3876        DO k=1,klev
3877        DO i=1,klon
3878           tmp_var(i,k)=d_tr_cl(i,k,it)
3879        ENDDO
3880        ENDDO
3881        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3882       DO k=1,klev
3883        DO i=1,klon
3884          d_tr_cl_o(i,k,it)=tmp_var(i,k)  &
3885                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3886        ENDDO
3887       ENDDO
3888      ENDDO
3889
3890
3891      DO it=1, nbtr
3892        DO k=1,klev
3893        DO i=1,klon
3894           tmp_var(i,k)=d_tr_th(i,k,it)
3895        ENDDO
3896        ENDDO
3897        CALL kg_to_cm3(pplay,t_seri,tmp_var)
3898       DO k=1,klev
3899        DO i=1,klon
3900          d_tr_th_o(i,k,it)=tmp_var(i,k)  &
3901                         /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys 
3902        ENDDO
3903       ENDDO
3904      ENDDO
3905     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3906!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3907
3908     DO it=1,nbtr
3909      WRITE(str2,'(i2.2)') it
3910       DO i=1, klon                                                       
3911        his_dh(i,it)= his_dhlsc(i,it)+his_dhcon(i,it)+               &
3912                   his_dhbclsc(i,it)+his_dhbccon(i,it)
3913
3914       ENDDO
3915      ENDDO
3916
3917!AS: commenting out and deleting lines
3918!!      IF (ok_histrac) THEN
3919!!
3920!! SAVING VARIABLES IN TRACEUR
3921!!----- many lines deleted----
3922!!      ENDIF ! ok_histrac                                                   
3923                                                                           
3924
3925
3926
3927!JE20141224
3928! saving variables for output
3929! 2D outputs
3930      DO i=1, klon
3931       trm01(i)=0.
3932       trm02(i)=0.
3933       trm03(i)=0.
3934       trm04(i)=0.
3935       trm05(i)=0.
3936       sconc01(i)=0.
3937       sconc02(i)=0.
3938       sconc03(i)=0.
3939       sconc04(i)=0.
3940       sconc05(i)=0.
3941       flux01(i)=0.
3942       flux02(i)=0.
3943       flux03(i)=0.
3944       flux04(i)=0.
3945       flux05(i)=0.
3946       ds01(i)=0.
3947       ds02(i)=0.
3948       ds03(i)=0.
3949       ds04(i)=0.
3950       ds05(i)=0.
3951       dh01(i)=0.
3952       dh02(i)=0.
3953       dh03(i)=0.
3954       dh04(i)=0.
3955       dh05(i)=0.
3956       dtrconv01(i)=0.
3957       dtrconv02(i)=0.
3958       dtrconv03(i)=0.
3959       dtrconv04(i)=0.
3960       dtrconv05(i)=0.
3961       dtherm01(i)=0.
3962       dtherm02(i)=0.
3963       dtherm03(i)=0.
3964       dtherm04(i)=0.
3965       dtherm05(i)=0.
3966       dhkecv01(i)=0.
3967       dhkecv02(i)=0.
3968       dhkecv03(i)=0.
3969       dhkecv04(i)=0.
3970       dhkecv05(i)=0.
3971       d_tr_ds01(i)=0.
3972       d_tr_ds02(i)=0.
3973       d_tr_ds03(i)=0.
3974       d_tr_ds04(i)=0.
3975       d_tr_ds05(i)=0.
3976       dhkelsc01(i)=0.
3977       dhkelsc02(i)=0.
3978       dhkelsc03(i)=0.
3979       dhkelsc04(i)=0.
3980       dhkelsc05(i)=0.
3981!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3982
3983      if(id_prec>0)  trm01(i)=trm(i,id_prec)
3984      if(id_fine>0)  trm02(i)=trm(i,id_fine)
3985      if(id_coss>0)  trm03(i)=trm(i,id_coss)
3986      if(id_codu>0)  trm04(i)=trm(i,id_codu)
3987      if(id_scdu>0)  trm05(i)=trm(i,id_scdu)
3988      if(id_prec>0)    sconc01(i)=sconc_seri(i,id_prec)
3989      if(id_fine>0)    sconc02(i)=sconc_seri(i,id_fine)
3990      if(id_coss>0)    sconc03(i)=sconc_seri(i,id_coss)
3991      if(id_codu>0)    sconc04(i)=sconc_seri(i,id_codu)
3992      if(id_scdu>0)    sconc05(i)=sconc_seri(i,id_scdu)
3993      if(id_prec>0)    flux01(i)=flux_tr(i,id_prec)
3994      if(id_fine>0)    flux02(i)=flux_tr(i,id_fine)
3995      if(id_coss>0)    flux03(i)=flux_tr(i,id_coss)
3996      if(id_codu>0)    flux04(i)=flux_tr(i,id_codu)
3997      if(id_scdu>0)    flux05(i)=flux_tr(i,id_scdu)
3998      if(id_prec>0)    ds01(i)=his_ds(i,id_prec)
3999      if(id_fine>0)    ds02(i)=his_ds(i,id_fine)
4000      if(id_coss>0)    ds03(i)=his_ds(i,id_coss)
4001      if(id_codu>0)    ds04(i)=his_ds(i,id_codu)
4002      if(id_scdu>0)    ds05(i)=his_ds(i,id_scdu)
4003      if(id_prec>0)    dh01(i)=his_dh(i,id_prec)
4004      if(id_fine>0)    dh02(i)=his_dh(i,id_fine)
4005      if(id_coss>0)    dh03(i)=his_dh(i,id_coss)
4006      if(id_codu>0)    dh04(i)=his_dh(i,id_codu)
4007      if(id_scdu>0)    dh05(i)=his_dh(i,id_scdu)
4008      if(id_prec>0)    dtrconv01(i)=dtrconv(i,id_prec)
4009      if(id_fine>0)    dtrconv02(i)=dtrconv(i,id_fine)
4010      if(id_coss>0)    dtrconv03(i)=dtrconv(i,id_coss)
4011      if(id_codu>0)    dtrconv04(i)=dtrconv(i,id_codu)
4012      if(id_scdu>0)    dtrconv05(i)=dtrconv(i,id_scdu)
4013      if(id_prec>0)    dtherm01(i)=his_th(i,id_prec)
4014      if(id_fine>0)    dtherm02(i)=his_th(i,id_fine)
4015      if(id_coss>0)    dtherm03(i)=his_th(i,id_coss)
4016      if(id_codu>0)    dtherm04(i)=his_th(i,id_codu)
4017      if(id_scdu>0)    dtherm05(i)=his_th(i,id_scdu)
4018      if(id_prec>0)    dhkecv01(i)=his_dhkecv(i,id_prec)
4019      if(id_fine>0)    dhkecv02(i)=his_dhkecv(i,id_fine)
4020      if(id_coss>0)    dhkecv03(i)=his_dhkecv(i,id_coss)
4021      if(id_codu>0)    dhkecv04(i)=his_dhkecv(i,id_codu)
4022      if(id_scdu>0)    dhkecv05(i)=his_dhkecv(i,id_scdu)
4023      if(id_prec>0)    d_tr_ds01(i)=his_ds(i,id_prec)
4024      if(id_fine>0)    d_tr_ds02(i)=his_ds(i,id_fine)
4025      if(id_coss>0)    d_tr_ds03(i)=his_ds(i,id_coss)
4026      if(id_codu>0)    d_tr_ds04(i)=his_ds(i,id_codu)
4027      if(id_scdu>0)    d_tr_ds05(i)=his_ds(i,id_scdu)
4028      if(id_prec>0)    dhkelsc01(i)=his_dhkelsc(i,id_prec)
4029      if(id_fine>0)    dhkelsc02(i)=his_dhkelsc(i,id_fine)
4030      if(id_coss>0)    dhkelsc03(i)=his_dhkelsc(i,id_coss)
4031      if(id_codu>0)    dhkelsc04(i)=his_dhkelsc(i,id_codu)
4032      if(id_scdu>0)    dhkelsc05(i)=his_dhkelsc(i,id_scdu)
4033       u10m_ss(i)=u10m_ec(i)
4034       v10m_ss(i)=v10m_ec(i)
4035      ENDDO
4036! 3D outs
4037      DO i=1, klon
4038        DO k=1,klev
4039      d_tr_cv01(i,k)   =0.
4040      d_tr_cv02(i,k)   =0.
4041      d_tr_cv03(i,k)   =0.
4042      d_tr_cv04(i,k)   =0.
4043      d_tr_cv05(i,k)   =0.
4044      d_tr_trsp01(i,k) =0.
4045      d_tr_trsp02(i,k) =0.
4046      d_tr_trsp03(i,k) =0.
4047      d_tr_trsp04(i,k) =0.
4048      d_tr_trsp05(i,k) =0.
4049      d_tr_sscav01(i,k)=0.
4050      d_tr_sscav02(i,k)=0.
4051      d_tr_sscav03(i,k)=0.
4052      d_tr_sscav04(i,k)=0.
4053      d_tr_sscav05(i,k)=0.
4054      d_tr_sat01(i,k)  =0.
4055      d_tr_sat02(i,k)  =0.
4056      d_tr_sat03(i,k)  =0.
4057      d_tr_sat04(i,k)  =0.
4058      d_tr_sat05(i,k)  =0.
4059      d_tr_uscav01(i,k)=0.
4060      d_tr_uscav02(i,k)=0.
4061      d_tr_uscav03(i,k)=0.
4062      d_tr_uscav04(i,k)=0.
4063      d_tr_uscav05(i,k)=0.
4064      d_tr_insc01(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4065      d_tr_insc02(i,k)=0.
4066      d_tr_insc03(i,k)=0.
4067      d_tr_insc04(i,k)=0.
4068      d_tr_insc05(i,k)=0.
4069      d_tr_bcscav01(i,k)=0.
4070      d_tr_bcscav02(i,k)=0.
4071      d_tr_bcscav03(i,k)=0.
4072      d_tr_bcscav04(i,k)=0.
4073      d_tr_bcscav05(i,k)=0.
4074      d_tr_evapls01(i,k)=0.
4075      d_tr_evapls02(i,k)=0.
4076      d_tr_evapls03(i,k)=0.
4077      d_tr_evapls04(i,k)=0.
4078      d_tr_evapls05(i,k)=0.
4079      d_tr_ls01(i,k)=0.
4080      d_tr_ls02(i,k)=0.
4081      d_tr_ls03(i,k)=0.
4082      d_tr_ls04(i,k)=0.
4083      d_tr_ls05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4084      d_tr_dyn01(i,k)=0.
4085      d_tr_dyn02(i,k)=0.
4086      d_tr_dyn03(i,k)=0.
4087      d_tr_dyn04(i,k)=0.
4088      d_tr_dyn05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4089      d_tr_cl01(i,k)=0.
4090      d_tr_cl02(i,k)=0.
4091      d_tr_cl03(i,k)=0.
4092      d_tr_cl04(i,k)=0.
4093      d_tr_cl05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4094      d_tr_th01(i,k)=0.
4095      d_tr_th02(i,k)=0.
4096      d_tr_th03(i,k)=0.
4097      d_tr_th04(i,k)=0.
4098      d_tr_th05(i,k)=0.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4099        ENDDO
4100      ENDDO
4101
4102      IF(1==0) THEN
4103      ! calcul in original trunk version; problem: budget not closed. Corrected in "ELSE"
4104      DO i=1, klon
4105        DO k=1,klev
4106
4107      if(id_prec>0)        d_tr_cv01(i,k)   =d_tr_cv_o(i,k,id_prec)
4108      if(id_fine>0)        d_tr_cv02(i,k)   =d_tr_cv_o(i,k,id_fine)
4109      if(id_coss>0)        d_tr_cv03(i,k)   =d_tr_cv_o(i,k,id_coss)
4110      if(id_codu>0)        d_tr_cv04(i,k)   =d_tr_cv_o(i,k,id_codu)
4111      if(id_scdu>0)        d_tr_cv05(i,k)   =d_tr_cv_o(i,k,id_scdu)
4112      if(id_prec>0)        d_tr_trsp01(i,k) =d_tr_trsp_o(i,k,id_prec)
4113      if(id_fine>0)        d_tr_trsp02(i,k) =d_tr_trsp_o(i,k,id_fine)
4114      if(id_coss>0)        d_tr_trsp03(i,k) =d_tr_trsp_o(i,k,id_coss)
4115      if(id_codu>0)        d_tr_trsp04(i,k) =d_tr_trsp_o(i,k,id_codu)
4116      if(id_scdu>0)        d_tr_trsp05(i,k) =d_tr_trsp_o(i,k,id_scdu)
4117      if(id_prec>0)        d_tr_sscav01(i,k)=d_tr_sscav_o(i,k,id_prec)
4118      if(id_fine>0)        d_tr_sscav02(i,k)=d_tr_sscav_o(i,k,id_fine)
4119      if(id_coss>0)        d_tr_sscav03(i,k)=d_tr_sscav_o(i,k,id_coss)
4120      if(id_codu>0)        d_tr_sscav04(i,k)=d_tr_sscav_o(i,k,id_codu)
4121      if(id_scdu>0)        d_tr_sscav05(i,k)=d_tr_sscav_o(i,k,id_scdu)
4122      if(id_prec>0)        d_tr_sat01(i,k)  =d_tr_sat_o(i,k,id_prec)
4123      if(id_fine>0)        d_tr_sat02(i,k)  =d_tr_sat_o(i,k,id_fine)
4124      if(id_coss>0)        d_tr_sat03(i,k)  =d_tr_sat_o(i,k,id_coss)
4125      if(id_codu>0)        d_tr_sat04(i,k)  =d_tr_sat_o(i,k,id_codu)
4126      if(id_scdu>0)        d_tr_sat05(i,k)  =d_tr_sat_o(i,k,id_scdu)
4127      if(id_prec>0)        d_tr_uscav01(i,k)=d_tr_uscav_o(i,k,id_prec)
4128      if(id_fine>0)        d_tr_uscav02(i,k)=d_tr_uscav_o(i,k,id_fine)
4129      if(id_coss>0)        d_tr_uscav03(i,k)=d_tr_uscav_o(i,k,id_coss)
4130      if(id_codu>0)        d_tr_uscav04(i,k)=d_tr_uscav_o(i,k,id_codu)
4131      if(id_scdu>0)        d_tr_uscav05(i,k)=d_tr_uscav_o(i,k,id_scdu)
4132      if(id_prec>0)        d_tr_insc01(i,k)=d_tr_insc_o(i,k,id_prec)
4133      if(id_fine>0)        d_tr_insc02(i,k)=d_tr_insc_o(i,k,id_fine)
4134      if(id_coss>0)        d_tr_insc03(i,k)=d_tr_insc_o(i,k,id_coss)
4135      if(id_codu>0)        d_tr_insc04(i,k)=d_tr_insc_o(i,k,id_codu)
4136      if(id_scdu>0)        d_tr_insc05(i,k)=d_tr_insc_o(i,k,id_scdu)
4137      if(id_prec>0)        d_tr_bcscav01(i,k)=d_tr_bcscav_o(i,k,id_prec)
4138      if(id_fine>0)        d_tr_bcscav02(i,k)=d_tr_bcscav_o(i,k,id_fine)
4139      if(id_coss>0)        d_tr_bcscav03(i,k)=d_tr_bcscav_o(i,k,id_coss)
4140      if(id_codu>0)        d_tr_bcscav04(i,k)=d_tr_bcscav_o(i,k,id_codu)
4141      if(id_scdu>0)        d_tr_bcscav05(i,k)=d_tr_bcscav_o(i,k,id_scdu)
4142      if(id_prec>0)        d_tr_evapls01(i,k)=d_tr_evapls_o(i,k,id_prec)
4143      if(id_fine>0)        d_tr_evapls02(i,k)=d_tr_evapls_o(i,k,id_fine)
4144      if(id_coss>0)        d_tr_evapls03(i,k)=d_tr_evapls_o(i,k,id_coss)
4145      if(id_codu>0)        d_tr_evapls04(i,k)=d_tr_evapls_o(i,k,id_codu)
4146      if(id_scdu>0)        d_tr_evapls05(i,k)=d_tr_evapls_o(i,k,id_scdu)
4147        ENDDO
4148      ENDDO
4149      ELSE ! correction pour fermeture de bilan, par FH dans les simus de Binta pour Habib
4150      DO i=1, klon
4151        DO k=1,klev
4152      if(id_prec>0)        d_tr_cv01(i,k)   =d_tr_cv(i,k,id_prec)/pdtphys
4153      if(id_fine>0)        d_tr_cv02(i,k)   =d_tr_cv(i,k,id_fine)/pdtphys
4154      if(id_coss>0)        d_tr_cv03(i,k)   =d_tr_cv(i,k,id_coss)/pdtphys
4155      if(id_codu>0)        d_tr_cv04(i,k)   =d_tr_cv(i,k,id_codu)/pdtphys
4156      if(id_scdu>0)        d_tr_cv05(i,k)   =d_tr_cv(i,k,id_scdu)/pdtphys
4157      if(id_prec>0)        d_tr_trsp01(i,k) =d_tr_trsp(i,k,id_prec)/pdtphys
4158      if(id_fine>0)        d_tr_trsp02(i,k) =d_tr_trsp(i,k,id_fine)/pdtphys
4159      if(id_coss>0)        d_tr_trsp03(i,k) =d_tr_trsp(i,k,id_coss)/pdtphys
4160      if(id_codu>0)        d_tr_trsp04(i,k) =d_tr_trsp(i,k,id_codu)/pdtphys
4161      if(id_scdu>0)        d_tr_trsp05(i,k) =d_tr_trsp(i,k,id_scdu)/pdtphys
4162      if(id_prec>0)        d_tr_sscav01(i,k)=d_tr_sscav(i,k,id_prec)/pdtphys
4163      if(id_fine>0)        d_tr_sscav02(i,k)=d_tr_sscav(i,k,id_fine)/pdtphys
4164      if(id_coss>0)        d_tr_sscav03(i,k)=d_tr_sscav(i,k,id_coss)/pdtphys
4165      if(id_codu>0)        d_tr_sscav04(i,k)=d_tr_sscav(i,k,id_codu)/pdtphys
4166      if(id_scdu>0)        d_tr_sscav05(i,k)=d_tr_sscav(i,k,id_scdu)/pdtphys
4167      if(id_prec>0)        d_tr_sat01(i,k)  =d_tr_sat(i,k,id_prec)/pdtphys
4168      if(id_fine>0)        d_tr_sat02(i,k)  =d_tr_sat(i,k,id_fine)/pdtphys
4169      if(id_coss>0)        d_tr_sat03(i,k)  =d_tr_sat(i,k,id_coss)/pdtphys
4170      if(id_codu>0)        d_tr_sat04(i,k)  =d_tr_sat(i,k,id_codu)/pdtphys
4171      if(id_scdu>0)        d_tr_sat05(i,k)  =d_tr_sat(i,k,id_scdu)/pdtphys
4172      if(id_prec>0)        d_tr_uscav01(i,k)=d_tr_uscav(i,k,id_prec)/pdtphys
4173      if(id_fine>0)        d_tr_uscav02(i,k)=d_tr_uscav(i,k,id_fine)/pdtphys
4174      if(id_coss>0)        d_tr_uscav03(i,k)=d_tr_uscav(i,k,id_coss)/pdtphys
4175      if(id_codu>0)        d_tr_uscav04(i,k)=d_tr_uscav(i,k,id_codu)/pdtphys
4176      if(id_scdu>0)        d_tr_uscav05(i,k)=d_tr_uscav(i,k,id_scdu)/pdtphys
4177      if(id_prec>0)        d_tr_insc01(i,k)=d_tr_insc(i,k,id_prec)/pdtphys
4178      if(id_fine>0)        d_tr_insc02(i,k)=d_tr_insc(i,k,id_fine)/pdtphys
4179      if(id_coss>0)        d_tr_insc03(i,k)=d_tr_insc(i,k,id_coss)/pdtphys
4180      if(id_codu>0)        d_tr_insc04(i,k)=d_tr_insc(i,k,id_codu)/pdtphys
4181      if(id_scdu>0)        d_tr_insc05(i,k)=d_tr_insc(i,k,id_scdu)/pdtphys
4182      if(id_prec>0)        d_tr_bcscav01(i,k)=d_tr_bcscav(i,k,id_prec)/pdtphys
4183      if(id_fine>0)        d_tr_bcscav02(i,k)=d_tr_bcscav(i,k,id_fine)/pdtphys
4184      if(id_coss>0)        d_tr_bcscav03(i,k)=d_tr_bcscav(i,k,id_coss)/pdtphys
4185      if(id_codu>0)        d_tr_bcscav04(i,k)=d_tr_bcscav(i,k,id_codu)/pdtphys
4186      if(id_scdu>0)        d_tr_bcscav05(i,k)=d_tr_bcscav(i,k,id_scdu)/pdtphys
4187      if(id_prec>0)        d_tr_evapls01(i,k)=d_tr_evapls(i,k,id_prec)/pdtphys
4188      if(id_fine>0)        d_tr_evapls02(i,k)=d_tr_evapls(i,k,id_fine)/pdtphys
4189      if(id_coss>0)        d_tr_evapls03(i,k)=d_tr_evapls(i,k,id_coss)/pdtphys
4190      if(id_codu>0)        d_tr_evapls04(i,k)=d_tr_evapls(i,k,id_codu)/pdtphys
4191      if(id_scdu>0)        d_tr_evapls05(i,k)=d_tr_evapls(i,k,id_scdu)/pdtphys
4192        ENDDO
4193      ENDDO
4194      ENDIF
4195
4196      IF(1==0) THEN  ! This "if" is as in original trunk
4197      DO i=1, klon
4198        DO k=1,klev
4199      if(id_prec>0)        d_tr_ls01(i,k)=d_tr_ls_o(i,k,id_prec)
4200      if(id_fine>0)        d_tr_ls02(i,k)=d_tr_ls_o(i,k,id_fine)
4201      if(id_coss>0)        d_tr_ls03(i,k)=d_tr_ls_o(i,k,id_coss)
4202      if(id_codu>0)        d_tr_ls04(i,k)=d_tr_ls_o(i,k,id_codu)
4203      if(id_scdu>0)        d_tr_ls05(i,k)=d_tr_ls_o(i,k,id_scdu)
4204      if(id_prec>0)        d_tr_dyn01(i,k)=d_tr_dyn_o(i,k,id_prec)
4205      if(id_fine>0)        d_tr_dyn02(i,k)=d_tr_dyn_o(i,k,id_fine)
4206      if(id_coss>0)        d_tr_dyn03(i,k)=d_tr_dyn_o(i,k,id_coss)
4207      if(id_codu>0)        d_tr_dyn04(i,k)=d_tr_dyn_o(i,k,id_codu)
4208      if(id_scdu>0)        d_tr_dyn05(i,k)=d_tr_dyn_o(i,k,id_scdu)
4209      if(id_prec>0)        d_tr_cl01(i,k)=d_tr_cl_o(i,k,id_prec)
4210      if(id_fine>0)        d_tr_cl02(i,k)=d_tr_cl_o(i,k,id_fine)
4211      if(id_coss>0)        d_tr_cl03(i,k)=d_tr_cl_o(i,k,id_coss)
4212      if(id_codu>0)        d_tr_cl04(i,k)=d_tr_cl_o(i,k,id_codu)
4213      if(id_scdu>0)        d_tr_cl05(i,k)=d_tr_cl_o(i,k,id_scdu)
4214      if(id_prec>0)        d_tr_th01(i,k)=d_tr_th_o(i,k,id_prec)
4215      if(id_fine>0)        d_tr_th02(i,k)=d_tr_th_o(i,k,id_fine)
4216      if(id_coss>0)        d_tr_th03(i,k)=d_tr_th_o(i,k,id_coss)
4217      if(id_codu>0)        d_tr_th04(i,k)=d_tr_th_o(i,k,id_codu)
4218      if(id_scdu>0)        d_tr_th05(i,k)=d_tr_th_o(i,k,id_scdu)
4219        ENDDO
4220      ENDDO
4221      ELSE
4222      DO i=1, klon
4223        DO k=1,klev
4224      if(id_prec>0)        d_tr_ls01(i,k)=d_tr_ls(i,k,id_prec)/pdtphys
4225      if(id_fine>0)        d_tr_ls02(i,k)=d_tr_ls(i,k,id_fine)/pdtphys
4226      if(id_coss>0)        d_tr_ls03(i,k)=d_tr_ls(i,k,id_coss)/pdtphys
4227      if(id_codu>0)        d_tr_ls04(i,k)=d_tr_ls(i,k,id_codu)/pdtphys
4228      if(id_scdu>0)        d_tr_ls05(i,k)=d_tr_ls(i,k,id_scdu)/pdtphys
4229      if(id_prec>0)        d_tr_dyn01(i,k)=d_tr_dyn(i,k,id_prec)/pdtphys
4230      if(id_fine>0)        d_tr_dyn02(i,k)=d_tr_dyn(i,k,id_fine)/pdtphys
4231      if(id_coss>0)        d_tr_dyn03(i,k)=d_tr_dyn(i,k,id_coss)/pdtphys
4232      if(id_codu>0)        d_tr_dyn04(i,k)=d_tr_dyn(i,k,id_codu)/pdtphys
4233      if(id_scdu>0)        d_tr_dyn05(i,k)=d_tr_dyn(i,k,id_scdu)/pdtphys
4234      if(id_prec>0)        d_tr_cl01(i,k)=d_tr_cl(i,k,id_prec)/pdtphys
4235      if(id_fine>0)        d_tr_cl02(i,k)=d_tr_cl(i,k,id_fine)/pdtphys
4236      if(id_coss>0)        d_tr_cl03(i,k)=d_tr_cl(i,k,id_coss)/pdtphys
4237      if(id_codu>0)        d_tr_cl04(i,k)=d_tr_cl(i,k,id_codu)/pdtphys
4238      if(id_scdu>0)        d_tr_cl05(i,k)=d_tr_cl(i,k,id_scdu)/pdtphys
4239      if(id_prec>0)        d_tr_th01(i,k)=d_tr_th(i,k,id_prec)/pdtphys
4240      if(id_fine>0)        d_tr_th02(i,k)=d_tr_th(i,k,id_fine)/pdtphys
4241      if(id_coss>0)        d_tr_th03(i,k)=d_tr_th(i,k,id_coss)/pdtphys
4242      if(id_codu>0)        d_tr_th04(i,k)=d_tr_th(i,k,id_codu)/pdtphys
4243      if(id_scdu>0)        d_tr_th05(i,k)=d_tr_th(i,k,id_scdu)/pdtphys
4244        ENDDO
4245      ENDDO
4246      ENDIF
4247     
4248
4249      IF (logitime) THEN
4250      CALL SYSTEM_CLOCK(COUNT=clock_end)
4251
4252      dife=clock_end-clock_start
4253      ti_outs=dife*MAX(0,SIGN(1,dife))   &
4254      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4255      tia_outs=tia_outs+REAL(ti_outs)/REAL(clock_rate)
4256      ENDIF
4257
4258      IF (logitime) THEN
4259      CALL SYSTEM_CLOCK(COUNT=clock_end)
4260
4261      dife=clock_end-clock_start_spla
4262      ti_spla=dife*MAX(0,SIGN(1,dife)) &
4263      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4264
4265
4266      tia_spla=tia_spla+REAL(ti_spla)/REAL(clock_rate)
4267  print *,'times for this timestep:timeproc,timeproc/time_pytracr_spl-'
4268     print *,'time spla',REAL(ti_spla)/REAL(clock_rate)                &
4269      ,REAL(ti_spla)/REAL(ti_spla)                                     
4270     print *,'time init',REAL(ti_init)/REAL(clock_rate)                &
4271      ,REAL(ti_init)/REAL(ti_spla)                                     
4272     print *,'time inittype',REAL(ti_inittype)/REAL(clock_rate)        &
4273      ,REAL(ti_inittype)/REAL(ti_spla)                                 
4274     print *,'time inittwrite',REAL(ti_inittwrite)/REAL(clock_rate)    &
4275      ,REAL(ti_inittwrite)/REAL(ti_spla)                               
4276     print *,'time emis',REAL(ti_emis)/REAL(clock_rate)                &
4277      ,REAL(ti_emis)/REAL(ti_spla)                                     
4278     print *,'time depo ',REAL(ti_depo)/REAL(clock_rate)               &
4279      ,REAL(ti_depo)/REAL(ti_spla)                                     
4280     print *,'time cltr',REAL(ti_cltr)/REAL(clock_rate)                &
4281      ,REAL(ti_cltr)/REAL(ti_spla)                                     
4282     print *,'time ther',REAL(ti_ther)/REAL(clock_rate)                &
4283      ,REAL(ti_ther)/REAL(ti_spla)                                     
4284     print *,'time sedi',REAL(ti_sedi)/REAL(clock_rate)                &
4285      ,REAL(ti_sedi)/REAL(ti_spla)                                     
4286     print *,'time gas to part',REAL(ti_gasp)/REAL(clock_rate)         &
4287      ,REAL(ti_gasp)/REAL(ti_spla)                                     
4288     print *,'time AP wet',REAL(ti_wetap)/REAL(clock_rate)             &
4289      ,REAL(ti_wetap)/REAL(ti_spla)                                     
4290     print *,'time convective',REAL(ti_cvltr)/REAL(clock_rate)         &
4291      ,REAL(ti_cvltr)/REAL(ti_spla)                                     
4292     print *,'time NP lsc scav',REAL(ti_lscs)/REAL(clock_rate)         &
4293      ,REAL(ti_lscs)/REAL(ti_spla)                                     
4294     print *,'time opt,brdn,etc',REAL(ti_brop)/REAL(clock_rate)        &
4295      ,REAL(ti_brop)/REAL(ti_spla)                                     
4296     print *,'time outputs',REAL(ti_outs)/REAL(clock_rate)             &
4297      ,REAL(ti_outs)/REAL(ti_spla)
4298
4299
4300  print *,'--time accumulated: time proc, time proc/time phytracr_spl--'
4301      print *,'time spla',tia_spla
4302      print *,'time init',tia_init,tia_init/tia_spla
4303      print *,'time inittype',tia_inittype,tia_inittype/tia_spla
4304      print *,'time inittwrite',tia_inittwrite,tia_inittwrite/tia_spla
4305      print *,'time emis',tia_emis,tia_emis/tia_spla
4306      print *,'time depo',tia_depo,tia_depo/tia_spla
4307      print *,'time cltr',tia_cltr,tia_cltr/tia_spla
4308      print *,'time ther',tia_ther,tia_ther/tia_spla
4309      print *,'time sedi',tia_sedi,tia_sedi/tia_spla
4310      print *,'time gas to part',tia_gasp,tia_gasp/tia_spla
4311      print *,'time AP wet',tia_wetap,tia_wetap/tia_spla
4312      print *,'time convective',tia_cvltr,tia_cvltr/tia_spla
4313      print *,'time NP lsc scav',tia_lscs,tia_lscs/tia_spla
4314      print *,'time opt,brdn,etc',tia_brop,tia_brop/tia_spla
4315      print *,'time outputs',tia_outs,tia_outs/tia_spla
4316
4317
4318
4319      dife=clock_end_outphytracr-clock_start_outphytracr
4320      ti_nophytracr=dife*MAX(0,SIGN(1,dife))  &
4321      +(dife+clock_per_max)*MAX(0,SIGN(1,-dife))
4322      tia_nophytracr=tia_nophytracr+REAL(ti_nophytracr)/REAL(clock_rate)
4323      print *,'Time outside phytracr; Time accum outside phytracr'
4324      print*,REAL(ti_nophytracr)/REAL(clock_rate),tia_nophytracr
4325
4326      clock_start_outphytracr=clock_end
4327
4328      ENDIF     
4329      print *,'END PHYTRACR_SPL '
4330  print *,'lmt_so2ff_l FIN' , MINVAL(lmt_so2ff_l), MAXVAL(lmt_so2ff_l)
4331
4332!      CALL abort_gcm('TEST1', 'OK1', 1)
4333
4334      RETURN
4335      END SUBROUTINE phytracr_spl
4336 
4337      SUBROUTINE readregionsdims2_spl(nbreg,fileregions)
4338
4339      USE mod_grid_phy_lmdz
4340      USE mod_phys_lmdz_para
4341
4342      IMPLICIT NONE
4343      CHARACTER*800 fileregions
4344      CHARACTER*800 auxstr
4345      INTEGER nbreg
4346 
4347      IF (is_mpi_root .AND. is_omp_root) THEN
4348
4349      OPEN (UNIT=1,FILE=trim(adjustl(fileregions)))
4350      READ(1,'(a)') auxstr
4351      READ(1,'(i10)') nbreg
4352      CLOSE(UNIT=1)
4353      ENDIF
4354      CALL bcast(nbreg)
4355
4356      END SUBROUTINE readregionsdims2_spl
4357
4358      SUBROUTINE readregionsdims_spl(nbreg_ind,fileregionsdimsind,   &
4359                                    nbreg_dust,fileregionsdimsdust,  &
4360                                    nbreg_bb,fileregionsdimsbb)     
4361      USE mod_grid_phy_lmdz
4362      USE mod_phys_lmdz_para
4363
4364      IMPLICIT NONE
4365      CHARACTER*800 fileregionsdimsind
4366      CHARACTER*800 fileregionsdimsdust
4367      CHARACTER*800 fileregionsdimsbb
4368      CHARACTER*800 auxstr
4369      INTEGER nbreg_ind,nbreg_dust,nbreg_bb
4370 
4371      IF (is_mpi_root .AND. is_omp_root) THEN
4372
4373      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsind)))
4374      READ(1,'(a)') auxstr
4375      READ(1,'(i10)') nbreg_ind
4376      CLOSE(UNIT=1)
4377
4378      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsdust)))
4379      READ(1,'(a)') auxstr
4380      READ(1,'(i10)') nbreg_dust
4381      CLOSE(UNIT=1)
4382
4383      OPEN (UNIT=1,FILE=trim(adjustl(fileregionsdimsbb)))
4384      READ(1,'(a)') auxstr
4385      READ(1,'(i10)') nbreg_bb
4386      CLOSE(UNIT=1)
4387     
4388
4389      ENDIF
4390      CALL bcast(nbreg_ind)
4391      CALL bcast(nbreg_dust)
4392      CALL bcast(nbreg_bb)
4393
4394      END SUBROUTINE readregionsdims_spl
4395
4396      SUBROUTINE readregions_spl(iregion,filenameregion)
4397      USE dimphy
4398      USE mod_grid_phy_lmdz
4399      USE mod_phys_lmdz_para
4400
4401      IMPLICIT NONE
4402      CHARACTER*(*) filenameregion
4403      INTEGER iregion(klon)
4404      INTEGER iregion_glo(klon_glo)
4405      INTEGER k
4406     
4407      IF (is_mpi_root .AND. is_omp_root) THEN
4408
4409      print *,trim(adjustl(filenameregion))
4410      OPEN(1,file=trim(adjustl(filenameregion)))
4411      DO k=1,klon_glo
4412      READ(1,'(i10)') iregion_glo(k)
4413      ENDDO
4414      CLOSE(UNIT=1)
4415      ENDIF
4416      CALL scatter(iregion_glo,iregion)
4417
4418      END SUBROUTINE readregions_spl
4419
4420!! AS: SUBROUTINE readscaleparams_spl pas appellee
4421      SUBROUTINE readscaleparams_spl(scale_param, nbreg, &
4422                                             filescaleparams)
4423      USE mod_grid_phy_lmdz
4424      USE mod_phys_lmdz_para
4425      IMPLICIT NONE
4426
4427      CHARACTER*800 filescaleparams
4428      INTEGER nbreg
4429      REAL scale_param(nbreg)
4430      INTEGER k
4431
4432      IF (is_mpi_root .AND. is_omp_root) THEN
4433      OPEN(1,file=trim(adjustl(filescaleparams)),form='unformatted')
4434      do k=1,nbreg
4435        read(1)  scale_param(k)
4436      enddo
4437      CLOSE(1) 
4438      ENDIF
4439      CALL bcast(scale_param)
4440!      print *,'holaaaaaaaaaaaa'
4441!      print *,scale_param
4442
4443      END SUBROUTINE readscaleparams_spl
4444
4445      SUBROUTINE readscaleparamsnc_spl(scale_param_ind,                 &
4446        nbreg_ind, paramname_ind,                                       &
4447        scale_param_ff, nbreg_ff,paramname_ff,                          &
4448        scale_param_bb, nbreg_bb,paramname_bb,                          &
4449        scale_param_dustacc, nbreg_dustacc,paramname_dustacc,           &
4450        scale_param_dustcoa, nbreg_dustcoa,paramname_dustcoa,           &
4451        scale_param_dustsco, nbreg_dustsco,paramname_dustsco,           &
4452        param_wstarBLperregion, nbreg_wstardustBL, paramname_wstarBL,     &
4453        param_wstarWAKEperregion, nbreg_wstardustWAKE, paramname_wstarWAKE, &
4454        scale_param_ssacc  ,  paramname_ssacc,             &
4455        scale_param_sscoa  ,  paramname_sscoa,             &
4456           filescaleparams,julien,jH_phys, pdtphys,debutphy)
4457!      SUBROUTINE readscaleparamsnc_spl(scale_param, nbreg, &
4458!                                        filescaleparams,paramname,&
4459!                                        julien,jH_phys, pdtphys,debutphy)
4460      USE mod_grid_phy_lmdz
4461      USE mod_phys_lmdz_para
4462      IMPLICIT NONE
4463
4464      CHARACTER*800 filescaleparams
4465      CHARACTER*100 paramname_ind,paramname_ff,paramname_bb         
4466      CHARACTER*100 paramname_dustacc, paramname_dustcoa
4467      CHARACTER*100 paramname_dustsco
4468      CHARACTER*100 paramname_ssacc
4469      CHARACTER*100 paramname_sscoa
4470      CHARACTER*100 paramname_wstarBL
4471      CHARACTER*100 paramname_wstarWAKE
4472     
4473      INTEGER nbreg,iday
4474      INTEGER nbreg_ind, nbreg_ff, nbreg_bb , nbreg_dustacc
4475      INTEGER nbreg_dustcoa , nbreg_dustsco, nbreg_wstardustBL
4476      INTEGER  nbreg_wstardustWAKE
4477      INTEGER,PARAMETER ::  nbreg_ssacc=1
4478      INTEGER,PARAMETER :: nbreg_sscoa=1
4479      REAL,PARAMETER :: sca_resol = 24. ! resolution of scalig params in hours
4480      REAL scale_param_ind(nbreg_ind)
4481      REAL scale_param_bb(nbreg_bb)
4482      REAL scale_param_ff(nbreg_ff)
4483      REAL scale_param_dustacc(nbreg_dustacc)
4484      REAL scale_param_dustcoa(nbreg_dustcoa)
4485      REAL scale_param_dustsco(nbreg_dustsco)
4486      REAL param_wstarBLperregion(nbreg_wstardustBL)
4487      REAL param_wstarWAKEperregion(nbreg_wstardustWAKE)
4488      REAL scale_param_ssacc
4489      REAL scale_param_ssacc_tmp(nbreg_ssacc)
4490      REAL scale_param_sscoa
4491      REAL scale_param_sscoa_tmp(nbreg_sscoa)
4492
4493      INTEGER k,step_sca,test_sca
4494      REAL :: jH_phys,  pdtphys
4495      REAL,SAVE :: jH_sca, jH_ini
4496      INTEGER julien
4497      LOGICAL debutphy
4498      SAVE step_sca,test_sca,iday
4499!$OMP THREADPRIVATE(step_sca,test_sca,iday)
4500!$OMP THREADPRIVATE(jH_sca,jH_ini)
4501
4502      IF (debutphy) THEN
4503        iday=julien
4504        step_sca=1
4505        test_sca=0   
4506        jH_ini=jH_phys
4507        jH_sca=jH_phys
4508      ENDIF
4509
4510      IF (test_sca .EQ. 0 ) THEN
4511        ! READ file!!
4512        call read_scalenc(filescaleparams,paramname_ind,            &
4513                           nbreg_ind,step_sca,                      &
4514                           scale_param_ind)
4515        call read_scalenc(filescaleparams,paramname_bb,            &
4516                           nbreg_bb,step_sca,                      &
4517                           scale_param_bb)
4518        call read_scalenc(filescaleparams,paramname_ff,            &
4519                           nbreg_ff,step_sca,                      &
4520                           scale_param_ff)
4521        call read_scalenc(filescaleparams,paramname_dustacc,            &
4522                           nbreg_dustacc,step_sca,                      &
4523                           scale_param_dustacc)
4524        call read_scalenc(filescaleparams,paramname_dustcoa,            &
4525                           nbreg_dustcoa,step_sca,                      &
4526                           scale_param_dustcoa)
4527        call read_scalenc(filescaleparams,paramname_dustsco,            &
4528                           nbreg_dustsco,step_sca,                      &
4529                           scale_param_dustsco)
4530        call read_scalenc(filescaleparams,paramname_wstarBL,            &
4531                           nbreg_wstardustBL,step_sca,                    &
4532                           param_wstarBLperregion)
4533        call read_scalenc(filescaleparams,paramname_wstarWAKE,          &
4534                           nbreg_wstardustWAKE,step_sca,                    &
4535                           param_wstarWAKEperregion)
4536        call read_scalenc(filescaleparams,paramname_ssacc,              &
4537                           nbreg_ssacc,step_sca,                        &
4538                           scale_param_ssacc_tmp)
4539        call read_scalenc(filescaleparams,paramname_sscoa,              &
4540                           nbreg_sscoa,step_sca,                        &
4541                           scale_param_sscoa_tmp)
4542         scale_param_ssacc=scale_param_ssacc_tmp(1)
4543         scale_param_sscoa=scale_param_sscoa_tmp(1)
4544
4545       !print *,'JEREADFILE',julien,jH_phys
4546        step_sca= step_sca + 1
4547        test_sca=1
4548      ENDIF
4549
4550      jH_sca=jH_sca+pdtphys/(24.*3600.)
4551      IF (jH_sca.GT.(sca_resol)/24.) THEN
4552          test_sca=0
4553          jH_sca=jH_ini
4554      ENDIF
4555
4556      END SUBROUTINE readscaleparamsnc_spl
4557
4558      SUBROUTINE read_scalenc(filescaleparams,paramname,nbreg,step_sca, &
4559                          scale_param)
4560
4561      USE mod_grid_phy_lmdz
4562      USE mod_phys_lmdz_para
4563      IMPLICIT NONE
4564
4565      include "netcdf.inc"
4566
4567      CHARACTER*800 filescaleparams
4568      CHARACTER*100 paramname
4569      INTEGER nbreg, step_sca
4570      REAL scale_param(nbreg)
4571      !local vars
4572      integer nid,ierr,nvarid
4573      real rcode,auxreal
4574      integer start(4),count(4), status
4575!      local
4576      integer debutread,countread
4577      CHARACTER*104 varname
4578      CHARACTER*2 aux_2s
4579      integer i, j, ig
4580!$OMP MASTER
4581      IF (is_mpi_root .AND. is_omp_root) THEN
4582          !nci=NCOPN(trim(adjustl(filescaleparams)),NCNOWRIT,rcode)
4583         ierr = NF_OPEN (trim(adjustl(filescaleparams)),NF_NOWRITE, nid)
4584          if (ierr .EQ. NF_NOERR) THEN
4585          debutread=step_sca
4586          countread=1
4587
4588           do i=1,nbreg
4589            WRITE(aux_2s,'(i2.2)') i
4590            varname= trim(adjustl(paramname))//aux_2s
4591            print *,varname
4592            ierr = NF_INQ_VARID (nid,trim(adjustl(varname)), nvarid)
4593            ierr = NF_GET_VARA_DOUBLE (nid, nvarid, debutread,          &
4594                         countread, auxreal)
4595            IF (ierr .NE. NF_NOERR) THEN
4596             PRINT*, 'Pb de lecture pour modvalues'
4597       print *,'JE  scale_var, step_sca',trim(adjustl(varname)),step_sca
4598             CALL HANDLE_ERR(ierr)
4599             print *,'error ierr= ',ierr
4600             CALL exit(1)
4601            call abort_gcm('read_scalenc','error reading variable',1)
4602      ENDIF
4603
4604            print *,auxreal
4605            scale_param(i)=auxreal
4606           enddo
4607
4608            ierr = NF_CLOSE(nid)
4609          else
4610           print *,'File '//trim(adjustl(filescaleparams))//' not found'
4611            print *,'doing nothing...'
4612          endif
4613
4614      ENDIF ! mpi_root
4615!$OMP END MASTER
4616!$OMP BARRIER
4617!      CALL scatter(var local _glo,var local) o algo asi
4618      call bcast(scale_param)
4619      END SUBROUTINE read_scalenc
4620
4621
4622     
4623      END MODULE
Note: See TracBrowser for help on using the repository browser.