53a1a07b3af756cd554a8f2226bff9fb2853d033
[MNH-git_open_source-lfs.git] / src / MNH / phys_paramn.f90
1 !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
3 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
4 !MNH_LIC for details. version 1.
5 !,!    ########################
6      MODULE MODI_PHYS_PARAM_n  
7 !    ########################
8 !
9 !
10 INTERFACE
11 !
12       SUBROUTINE PHYS_PARAM_n(KTCOUNT,HFMFILE,OCLOSE_OUT,                                  &
13                               PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER,PCHEM, &
14                               PTIME_BU, OMASKkids                                          )           
15
16 !
17 INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
18 CHARACTER (LEN=28),INTENT(IN)     :: HFMFILE   ! name of the synchronous 
19                                                ! OUTPUT FM-file
20 LOGICAL,           INTENT(IN)     :: OCLOSE_OUT! conditional closure of the 
21                                                ! OUTPUT FM-file
22 ! advection schemes                   
23 REAL*8,DIMENSION(2), INTENT(INOUT)  :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
24                                                ! time for computing time
25                                         
26 REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PCHEM     ! to store CPU time for chemistry
27 REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PTIME_BU  ! time used in budget&LES budgets
28      !        statistics
29 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
30 END SUBROUTINE PHYS_PARAM_n
31 !
32 END INTERFACE
33 !
34 END MODULE MODI_PHYS_PARAM_n
35 !
36 !     ######################################################################
37       SUBROUTINE PHYS_PARAM_n(KTCOUNT,HFMFILE,OCLOSE_OUT,                                  &
38                               PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER,PCHEM, &
39                               PTIME_BU, OMASKkids                                          )           
40 !     ######################################################################
41 !
42 !!****  *PHYS_PARAM_n * -monitor of the parameterizations used by model _n
43 !!
44 !!    PURPOSE
45 !!    -------
46 !       The purpose of this routine is to update the sources by adding the
47 !     parameterized terms. This is realized by sequentially calling the
48 !     specialized routines.
49 !    
50 !!**  METHOD
51 !!    ------
52 !!      The first parametrization is the radiation scheme:
53 !!                                       ----------------
54 !!     *  CRAD = 'FIXE'
55 !!     In this case, a temporal interpolation  is performed for the downward
56 !!     surface fluxes XFLALWD and XFLASWD.
57 !!     *  CRAD = 'ECMWF'
58 !!     Several tests are performed before calling the radiation computations
59 !!     interface with the ECMWF radiation scheme code. A control is made to
60 !!     ensure that:
61 !!         - the full radiation code is called at the first model timestep
62 !!         - there is a priority for calling the full radiation instead of the
63 !!           cloud-only approximation if both must be called at the current
64 !!           timestep
65 !!         - the cloud-only option (approximation) is coherent with the
66 !!           occurence of one cloudy vertical column at least
67 !!      If all the above conditions are fulfilled (GRAD is .TRUE.) then the
68 !!     position of the sun is computed in routine SUNPOS_n and the interfacing
69 !!     routine RADIATIONS is called to update the radiative tendency XDTHRAD
70 !!     and the downward surface fluxes XFLALWD and XFLASWD. Finally, the
71 !!     radiative tendency is integrated as a source term in the THETA prognostic
72 !!     equation.
73 !!
74 !!      The second parameterization is the soil scheme:
75 !!                                         -----------
76 !!
77 !!     externalized surface
78 !!
79 !!       The third parameterization is the turbulence scheme:
80 !!                                         -----------------
81 !!     * CTURB='NONE'
82 !!     no turbulent mixing is taken into account
83 !!     * CTURB='TKEL'
84 !!     The turbulent fluxes are computed according to a one and half order
85 !!     closure of the hydrodynamical equations. This scheme is based on a
86 !!     prognostic for the turbulent kinetic energy and a mixing length
87 !!     computation ( the mesh size or a physically based length). Other
88 !!     turbulent moments are diagnosed according to a stationarization of the
89 !!     second order turbulent moments. This turbulent scheme forecasts
90 !!     either a purely vertical turbulent mixing or 3-dimensional mixing
91 !!     according to its internal degrees of freedom.
92 !!
93 !!
94 !!       The LAST parameterization is the chemistry scheme:
95 !!                                        -----------------
96 !!     The chemistry part of MesoNH has two namelists, NAM_SOLVER for the
97 !!     parameters concerning the stiff solver, and NAM_MNHCn concerning the
98 !!     configuration and options of the chemistry module itself.
99 !!     The switch LUSECHEM in NAM_CONF acitvates or deactivates the chemistry.
100 !!     The only variables of MesoNH that are modified by chemistry are the
101 !!     scalar variables. If calculation of chemical surface fluxes is
102 !!     requested, those fluxes are calculated before
103 !!     entering the turbulence scheme, since those fluxes are taken into
104 !!     account by TURB as surface boundary conditions.
105 !!     CAUTION: chemistry has allways to be called AFTER ALL OTHER TERMS
106 !!     that affect the scalar variables (dynamical terms, forcing,
107 !!     parameterizations (like TURB, CONVECTION), since it uses the variables
108 !!     XRSVS as input in case of the time-split option.
109 !!
110 !!    EXTERNAL
111 !!    --------
112 !!      Subroutine SUNPOS_n     : computes the position of the sun
113 !!      Subroutine RADIATIONS   : computes the radiative tendency and fluxes
114 !!      Subroutine TSZ0         : computes the surface from temporally
115 !!                                interpolated Ts and given z0
116 !!      Subroutine ISBA         : computes the surface fluxes from a soil scheme
117 !!      Subroutine TURB         : computes the turbulence source terms
118 !!      Subroutine CONVECTION   : computes the convection source term
119 !!      Subroutine CH_SURFACE_FLUX_n: computes the surface flux for chemical
120 !!                                species
121 !!      Subroutine CH_MONITOR_n : computes the chemistry source terms
122 !!                                that are applied to the scalar variables
123 !!
124 !!    IMPLICIT ARGUMENTS
125 !!    ------------------
126 !!      USE MODD_DYN
127 !!      USE MODD_CONF
128 !!      USE MODD_CONF_n
129 !!      USE MODD_CURVCOR_n
130 !!      USE MODD_DYN_n
131 !!      USE MODD_FIELD_n
132 !!      USE MODD_GR_FIELD_n
133 !!      USE MODD_LSFIELD_n
134 !!      USE MODD_GRID_n
135 !!      USE MODD_LBC_n
136 !!      USE MODD_PARAM_RAD_n
137 !!      USE MODD_RADIATIONS_n
138 !!      USE MODD_REF_n
139 !!      USE MODD_LUNIT_n
140 !!      USE MODD_TIME_n
141 !!      USE MODD_CH_MNHC_n
142 !!
143 !!    REFERENCE
144 !!    ---------
145 !!      None
146 !!
147 !!    AUTHOR
148 !!    ------
149 !!      J. Stein           * Meteo-France *
150 !!
151 !!    MODIFICATIONS
152 !!    -------------
153 !!      Original    05/01/95
154 !!      Modifications  Feb 14, 1995 (J.Cuxart)  add the I/O arguments,
155 !!             the director cosinus and change the names of the surface fluxes
156 !!      Modifications March 21, 1995 (J.M.Carriere) take into account liquid
157 !!                                             water
158 !!                    June 30,1995  (J.Stein)  initialize at 0 the surf. fluxes
159 !!      Modifications Sept. 1, 1995 (S.Belair) ISBA scheme
160 !!      Modifications Sept.25, 1995 (J.Stein)  switch on the radiation scheme
161 !!      Modifications Sept. 11, 1995 (J.-P. Pinty) radiation scheme
162 !!                    Nov.  15, 1995 (J.Stein) cleaning + change the temporal
163 !!                                   algorithm for the soil scheme-turbulence
164 !!                    Jan.  23, 1996 (J.Stein) add a new option for the surface
165 !!                                   fluxes where Ts and z0 are given
166 !!                    March 18, 1996 (J.Stein) add the cloud fraction
167 !!                    March 28, 1996 (J.Stein) the soil scheme gives energy
168 !!                                             fluxes + cleaning
169 !!                    June  17, 1996 (Lafore)  statistics of computing time
170 !!                    August 4, 1996 (K. Suhre) add chemistry
171 !!                    Oct.  12, 1996 (J.Stein) use XSRCM in the turbulence
172 !!                                             scheme
173 !!                    Nov.  18, 1996 (J.-P. Pinty) add domain translation
174 !!                                                 change arg. in radiations
175 !!                    Fev.   4, 1997 (J.Viviand) change isba's calling for ice
176 !!                    Jun.  22, 1997 (J.Stein) change the equation system and use
177 !!                                             the absolute pressure
178 !!                    Jul.  09, 1997 (V.Masson) add directional z0
179 !!                    Jan.  24, 1998 (P.Bechtold) add convective transport for tracers
180 !!                    Jan.  24, 1998 (J.-P. Pinty) split SW and LW part for radiation
181 !!                    Mai.  10, 1999 (P.Bechtold) shallow convection
182 !!                    Oct.  20, 1999 (P.Jabouille) domain translation for turbulence
183 !!                    Jan.  04, 2000 (V.Masson) removes TSZ0 case
184 !!                    Jan.  04, 2000 (V.Masson) modifies albedo computation
185 !                     Jul   02, 2000 (F.Solmon/V.Masson) adaptation for patch approach
186 !!                    Nov.  15, 2000 (V.Masson) LES routines
187 !!                    Nov.  15, 2000 (V.Masson) effect of slopes on surface fluxes
188 !!                    Feb.  02, 2001 (P.Tulet) add friction velocities and aerodynamical
189 !!                                             resistance (patch approach)
190 !!                    Jan.  04, 2000 (V.Masson) modify surf_rad_modif computation
191 !!                    Mar.  04, 2002 (F.Solmon) new interface for radiation call
192 !!                    Nov.  06, 2002 (V.Masson) LES budgets & budget time counters
193 !!                    Jan. 2004      (V.Masson) surface externalization
194 !!                    Jan.  13, 2004 (J.Escobar) bug correction : compute "GRAD" in parallel
195 !!                    Jan.  20, 2005 (P. Tulet)  add dust sedimentation 
196 !!                    Jan.  20, 2005 (P. Tulet)  climatologic SSA
197 !!                    Jan.  20, 2005 (P. Tulet)  add aerosol / dust scavenging
198 !!                    Jul. 2005       (N. Asencio) use the two-way result-fields
199 !!                                  before ground_param call
200 !!                    May 2006        Remove EPS
201 !!                    Oct. 2007      (J.Pergaud) Add shallow_MF
202 !!                    Oct. 2009     (C.Lac) Introduction of different PTSTEP according to the
203 !!                              advection schemes
204 !!                    Oct. 2009     (V. MAsson) optimization of Pergaud et al massflux scheme
205 !!                    Aug. 2010     (V.Masson, C.Lac) Exchange of SBL_DEPTH for
206 !!                                  reproducibility
207 !!                    Oct. 2010   (J.Escobar) init  ZTIME_LES_MF ( pb detected with g95 )
208 !!                    Feb. 2011 (V.Masson, C.Lac) SBL_DEPTH values on outer pts
209 !!                               for RMC01
210 !!                    Sept.2011 (J.Escobar) init YINST_SFU ='M'
211 !!
212 !!                        Specific for 2D modeling : 
213 !! 
214 !!                    06/2010    (P.Peyrille)  add Call to aerozon.f90 if LAERO_FT=T
215 !!                                to update 
216 !!                                aerosols and ozone climatology at each call to
217 !!                                phys_param otherwise it is constant to monthly average
218 !!                    03/2013  (C.Lac) FIT temporal scheme
219 !!                    01/2014 (C.Lac) correction for the nesting of 2D surface
220 !!                           fields if the number of the son model does not
221 !!                           follow the number of the dad model
222 !!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test
223 !!                       2014  (M.Faivre)
224 !!-------------------------------------------------------------------------------
225 !
226 !*       0.     DECLARATIONS
227 !               ------------
228 !    
229 USE MODE_ll
230 USE MODE_FM
231 USE MODE_FMWRIT
232 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
233
234 USE MODD_CST
235 USE MODD_DYN
236 USE MODD_CONF
237 USE MODD_FRC
238 USE MODD_PARAMETERS
239 USE MODD_GRID
240 USE MODD_NSV
241 USE MODD_LES
242 USE MODD_LES_BUDGET
243 !
244 USE MODD_CONF_n
245 USE MODD_CURVCOR_n
246 USE MODD_DYN_n
247 USE MODD_FIELD_n
248 USE MODD_LSFIELD_n
249 USE MODD_GRID_n
250 USE MODD_METRICS_n
251 USE MODD_LBC_n
252 USE MODD_REF_n
253 USE MODD_LUNIT_n
254 USE MODD_OUT_n
255 USE MODD_PARAM_n
256 USE MODD_PARAM_RAD_n
257 USE MODD_PARAM_KAFR_n
258 USE MODD_RADIATIONS_n
259 USE MODD_SHADOWS_n
260 USE MODD_DEEP_CONVECTION_n
261 USE MODD_TIME_n
262 USE MODD_TURB_n
263 USE MODD_CH_MNHC_n, ONLY : LUSECHEM,         &! indicates if chemistry is used
264                            LCH_CONV_SCAV,    &
265                            LCH_CONV_LINOX
266 USE MODD_PRECIP_n
267 USE MODD_PASPOL_n
268 USE MODD_BUDGET
269 USE MODD_RAIN_ICE_DESCR,  ONLY : XRTMIN
270 USE MODD_ICE_C1R3_DESCR,  ONLY : XRTMIN_C1R3=>XRTMIN
271 USE MODD_TURB_CLOUD, ONLY : CTURBLEN_CLOUD,NMODEL_CLOUD, &
272                             XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT
273 USE MODD_NESTING, ONLY : XWAY,NDAD, NDXRATIO_ALL, NDYRATIO_ALL
274 USE MODD_PARAM_ICE,        ONLY : LSEDIC
275 USE MODD_PARAM_C2R2,       ONLY : LSEDC
276 USE MODD_SUB_PHYS_PARAM_n
277 !
278 USE MODD_PARAM_MFSHALL_n
279 USE MODI_SHALLOW_MF_PACK
280 USE MODD_CLOUD_MF_n
281 USE MODD_ADV_n,            ONLY : XRTKEMS
282 !
283 USE MODI_SURF_RAD_MODIF
284 USE MODI_GROUND_PARAM_n
285 USE MODI_TURB
286 USE MODI_SUNPOS_n
287 USE MODI_RADIATIONS
288 USE MODI_CONVECTION
289 USE MODI_TEMPORAL_DIST
290 USE MODI_CH_MONITOR_n
291 USE MODI_AER_MONITOR_n
292 USE MODI_BUDGET
293 USE MODI_PASPOL
294 USE MODI_CONDSAMP
295 USE MODE_FM
296 USE MODE_MODELN_HANDLER
297 USE MODI_SEDIM_DUST
298 USE MODI_SEDIM_SALT
299 USE MODI_DUST_FILTER
300 USE MODI_SALT_FILTER
301 USE MODI_DRAG_VEG
302 USE MODD_DUST
303 USE MODD_SALT
304 USE MODD_PASPOL
305 USE MODD_CONDSAMP
306 USE MODD_CH_AEROSOL
307 USE MODE_DUST_PSD
308 USE MODE_SALT_PSD
309 USE MODE_AERO_PSD
310 USE MODE_MNH_TIMING
311 USE MODD_TURB_FLUX_AIRCRAFT_BALLOON, ONLY : XTHW_FLUX, XRCW_FLUX, XSVW_FLUX
312 USE MODD_DRAGTREE
313 !
314 USE MODD_TIME, ONLY : TDTEXP  ! Ajout PP
315 USE MODI_AEROZON          ! Ajout PP
316 !
317 USE MODI_EDDY_FLUX_n               ! Ajout PP
318 USE MODI_EDDYUV_FLUX_n             ! Ajout PP
319 USE MODI_EDDY_FLUX_ONE_WAY_n       ! Ajout PP
320 USE MODI_EDDYUV_FLUX_ONE_WAY_n     ! Ajout PP
321 USE MODD_DEF_EDDY_FLUX_n           ! Ajout PP
322 USE MODD_DEF_EDDYUV_FLUX_n         ! Ajout PP
323 USE MODD_LATZ_EDFLX
324 USE MODI_GOTO_SURFEX
325 USE MODI_SWITCH_SBG_LES_N
326 !
327 USE MODE_MPPDB
328 IMPLICIT NONE
329 !
330 !*      0.1    declarations of arguments
331 !
332 INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
333 CHARACTER (LEN=28),INTENT(IN)     :: HFMFILE   ! name of the synchronous 
334                                                ! OUTPUT FM-file
335 LOGICAL,           INTENT(IN)     :: OCLOSE_OUT! conditional closure of the 
336                                                ! OUTPUT FM-file
337 ! advection schemes                   
338 REAL*8,DIMENSION(2), INTENT(INOUT)  :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
339                                                ! time for computing time
340                                                !        statistics
341 REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PCHEM     ! to store CPU time for chemistry
342 REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PTIME_BU  ! time used in budget&LES budgets
343 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
344 !
345 !*      0.2    declarations of local variables
346 !
347 REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFU  ! surface flux of x and
348 REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFV  ! y component of wind
349 REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFTH ! surface flux of theta
350 REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFRV ! surface flux of vapor
351 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZSFSV ! surface flux of scalars
352 REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFCO2! surface flux of CO2
353 !
354 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo
355 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo
356 REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEMIS    ! emissivity
357 REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTSRAD   ! surface temperature
358 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGDST,ZSIGDST,ZNDST,ZSVDST
359 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGSLT,ZSIGSLT,ZNSLT,ZSVSLT
360 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGAER,ZSIGAER,ZNAER,ZSVAER
361 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSVT
362 !
363 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN   ! Atmospheric density and Exner
364 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSIGMF   ! MF contribution to XSIGS
365 !
366 REAL, DIMENSION(0:24) :: ZRG_HOUR =  (/ 0., 0., 0., 0., 0., 32.04, 114.19,  &
367                                       228.01, 351.25, 465.49, 557.24,       &
368                                       616.82, 638.33, 619.43, 566.56,       &
369                                       474.71, 359.20, 230.87, 115.72,       &
370                                       32.48, 0., 0., 0., 0., 0. /)
371 !
372 REAL, DIMENSION(0:24) :: ZRAT_HOUR = (/ 326.00, 325.93, 325.12, 324.41,     &
373                                       323.16, 321.95, 322.51, 325.16,       &
374                                       328.01, 331.46, 335.58, 340.00,       &
375                                       345.20, 350.32, 354.20, 356.58,       &
376                                       356.56, 355.33, 352.79, 351.34,       &
377                                       347.00, 342.00, 337.00, 332.00,       &
378                                       326.00     /)
379 !
380 INTEGER  :: IHOUR               ! parameters necessary for the temporal
381 REAL     :: ZTIME, ZDT          ! interpolation
382 REAL     :: ZTEMP_DIST          ! time between 2 instants (in seconds)
383 !
384 LOGICAL :: GRAD                 ! conditionnal call for the full radiation
385                                 !         computations
386 REAL    :: ZRAD_GLOB_ll         ! 'real' global parallel mask of 'GRAD'
387 INTEGER :: INFO_ll              ! error report of parallel routines
388 LOGICAL :: GCLOUD_ONLY          ! conditionnal radiation computations for
389                                 !      the only cloudy columns
390 !
391 REAL*8,DIMENSION(2)    :: ZTIME1,ZTIME2,ZTIME3,ZTIME4       ! for computing time analysis
392 REAL*8,DIMENSION(2)    :: ZTIME_LES_MF         ! time spent in LES computation in shallow conv.
393 LOGICAL :: GDCONV               ! conditionnal call for the deep convection
394                                 !         computations
395 REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRC, ZRI, ZWT ! additional dummies
396 REAL, DIMENSION(:,:),   ALLOCATABLE  :: ZDXDY         ! grid area
397                     ! for rc, ri, w required if main variables not allocated
398 !
399 INTEGER :: IIU, IJU, IKU                              ! dimensional indexes
400 !
401 INTEGER     :: JSV              ! Loop index for Scalar Variables
402 INTEGER     :: JSWB             ! loop on SW spectral bands
403 INTEGER     :: IIB,IIE,IJB,IJE, IKB, IKE
404 INTEGER     :: IMODEIDX
405               ! index values for the Beginning or the End of the physical
406               ! domain in x and y directions
407 TYPE(LIST_ll), POINTER :: TZFIELDS_ll   ! list of fields to exchange
408 INTEGER                :: IINFO_ll       ! return code of parallel routine
409 !
410 !* variables for writing in a fm file
411 !
412 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
413                                     !in LFI subroutines at the open of the file
414 INTEGER           :: ILUOUT         ! logical unit numbers of output-listing
415 INTEGER           :: IMI            ! model index
416 INTEGER           :: JKID           ! loop index to look for the KID models
417 REAL              :: ZINIRADIUSI, ZINIRADIUSJ ! ORILAM initial radius
418 REAL, DIMENSION(NMODE_DST)    :: ZINIRADIUS  ! DUST initial radius
419 REAL, DIMENSION(NMODE_SLT)    :: ZINIRADIUS_SLT  ! Sea Salt initial radius
420 REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), SIZE(XRSVS,4))  :: ZRSVS
421 REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER)  :: ZWETDEPAER
422 LOGICAL :: GCLD                     ! conditionnal call for dust wet deposition
423 ! * arrays to store the surface fields before radiation and convection scheme
424 !  calls
425 INTEGER           :: IMODSON        ! Number of son models of IMI with XWAY=2
426 INTEGER           :: IKIDM          ! index loop                                 
427 REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH
428 REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV
429 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSAVE_DIRFLASWD, ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD
430 !
431 !-----------------------------------------------------------------------------
432 !
433 NULLIFY(TZFIELDS_ll)
434 IMI=GET_CURRENT_MODEL_INDEX()
435 !
436 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
437 CALL GET_DIM_EXT_ll ('B',IIU,IJU)
438 IKU=SIZE(XTHT,3)
439 IKB = 1 + JPVEXT
440 IKE = IKU - JPVEXT
441 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
442 !
443 ZTIME1 = 0.0
444 ZTIME2 = 0.0
445 ZTIME3 = 0.0
446 ZTIME4 = 0.0
447 PTIME_BU = 0.
448 ZTIME_LES_MF = 0.0
449 ZWETDEPAER(:,:,:,:) = 0.
450 !
451 !* allocation of variables used in more than one parameterization
452 !
453 ALLOCATE(ZSFU  (IIU,IJU))         ! surface schemes + turbulence
454 ALLOCATE(ZSFV  (IIU,IJU))
455 ALLOCATE(ZSFTH (IIU,IJU))
456 ALLOCATE(ZSFRV (IIU,IJU))
457 ALLOCATE(ZSFSV (IIU,IJU,NSV))
458 ALLOCATE(ZSFCO2(IIU,IJU))
459 !
460 !* if XWAY(son)=2 save surface fields before radiation or convective scheme
461 !  calls
462 !
463 IMODSON = 0
464 DO JKID = IMI+1,NMODEL  ! min value of the possible kids
465  IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' &
466   .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
467   IMODSON = IMODSON + 1
468  END IF
469 END DO
470 !
471  IF (IMODSON /= 0 ) THEN
472    IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR.  &
473        (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN
474      ALLOCATE( ZSAVE_INPRC(SIZE(XINPRC,1),SIZE(XINPRC,2),IMODSON))
475    ELSE
476      ALLOCATE( ZSAVE_INPRC(0,0,0))
477    END IF
478    IF (LUSERR) THEN
479      ALLOCATE( ZSAVE_INPRR(SIZE(XINPRR,1),SIZE(XINPRR,2),IMODSON))
480    ELSE
481      ALLOCATE( ZSAVE_INPRR(0,0,0))
482    END IF
483    IF (LUSERS) THEN
484      ALLOCATE( ZSAVE_INPRS(SIZE(XINPRS,1),SIZE(XINPRS,2),IMODSON))
485    ELSE
486      ALLOCATE( ZSAVE_INPRS(0,0,0))                              
487    END IF
488    IF (LUSERG) THEN
489      ALLOCATE( ZSAVE_INPRG(SIZE(XINPRG,1),SIZE(XINPRG,2),IMODSON))
490    ELSE
491      ALLOCATE( ZSAVE_INPRG(0,0,0))                                
492    END IF
493    IF (LUSERH) THEN
494      ALLOCATE( ZSAVE_INPRH(SIZE(XINPRH,1),SIZE(XINPRH,2),IMODSON))
495    ELSE
496      ALLOCATE( ZSAVE_INPRH(0,0,0))                               
497    END IF
498    IF (CDCONV /= 'NONE') THEN
499      ALLOCATE( ZSAVE_PRCONV(SIZE(XPRCONV,1),SIZE(XPRCONV,2),IMODSON))
500      ALLOCATE( ZSAVE_PRSCONV(SIZE(XPRSCONV,1),SIZE(XPRSCONV,2),IMODSON))
501    ELSE
502      ALLOCATE( ZSAVE_PRCONV(0,0,0))                                
503      ALLOCATE( ZSAVE_PRSCONV(0,0,0))                                    
504    END IF
505    IF (CRAD /= 'NONE') THEN
506      ALLOCATE( ZSAVE_DIRFLASWD(SIZE(XDIRFLASWD,1),SIZE(XDIRFLASWD,2),SIZE(XDIRFLASWD,3),IMODSON))
507      ALLOCATE( ZSAVE_SCAFLASWD(SIZE(XSCAFLASWD,1),SIZE(XSCAFLASWD,2),SIZE(XSCAFLASWD,3),IMODSON))
508      ALLOCATE( ZSAVE_DIRSRFSWD(SIZE(XDIRSRFSWD,1),SIZE(XDIRSRFSWD,2),SIZE(XDIRSRFSWD,3),IMODSON))
509    ELSE
510      ALLOCATE( ZSAVE_DIRFLASWD(0,0,0,0))
511      ALLOCATE( ZSAVE_SCAFLASWD(0,0,0,0))
512      ALLOCATE( ZSAVE_DIRSRFSWD(0,0,0,0)) 
513    END IF
514  ENDIF
515 !
516 IKIDM=0
517 DO JKID = IMI+1,NMODEL  ! min value of the possible kids
518  IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' &
519   .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
520 ! BUG if number of the son does not follow the number of the dad
521 ! IKIDM = JKID-IMI
522   IKIDM = IKIDM + 1
523    IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. &
524           (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN
525      ZSAVE_INPRC(:,:,IKIDM) = XINPRC(:,:)
526    END IF
527    IF (LUSERR) THEN
528      ZSAVE_INPRR(:,:,IKIDM) = XINPRR(:,:)
529    END IF
530    IF (LUSERS) THEN
531      ZSAVE_INPRS(:,:,IKIDM) = XINPRS(:,:)
532    END IF
533    IF (LUSERG) THEN
534      ZSAVE_INPRG(:,:,IKIDM) = XINPRG(:,:)
535    END IF
536    IF (LUSERH) THEN
537      ZSAVE_INPRH(:,:,IKIDM) = XINPRH(:,:)
538    END IF
539    IF (CDCONV /= 'NONE') THEN
540      ZSAVE_PRCONV(:,:,IKIDM) = XPRCONV(:,:)
541      ZSAVE_PRSCONV(:,:,IKIDM) = XPRSCONV(:,:)
542    END IF
543    IF (CRAD /= 'NONE') THEN
544      ZSAVE_DIRFLASWD(:,:,:,IKIDM) = XDIRFLASWD(:,:,:)
545      ZSAVE_SCAFLASWD(:,:,:,IKIDM) = XSCAFLASWD(:,:,:)
546      ZSAVE_DIRSRFSWD(:,:,:,IKIDM) = XDIRSRFSWD(:,:,:)
547    END IF
548  ENDIF
549 END DO
550 !
551 !-----------------------------------------------------------------------------
552 !
553 !*        1.    RADIATION SCHEME
554 !               ----------------
555 !
556 !
557 XTIME_BU_PROCESS = 0.
558 XTIME_LES_BU_PROCESS = 0.
559 !
560 CALL SECOND_MNH2(ZTIME1)
561 !
562 !
563 !*        1.1   Tests to control how the radiation package should be called (at the current timestep)
564 !               -----------------------------------------------------------
565 !
566 !
567 GRAD = .FALSE.
568 GCLOUD_ONLY = .FALSE.
569 !
570 IF (CRAD /='NONE') THEN
571 !
572 !  test to see if the partial radiations for cloudy must be called
573 !
574   IF (CRAD =='ECMW') THEN
575     CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
576                        TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
577                        TDTRAD_CLONLY%TDATE%YEAR,TDTRAD_CLONLY%TDATE%MONTH, &
578                        TDTRAD_CLONLY%TDATE%DAY, TDTRAD_CLONLY%TIME,        &
579                        ZTEMP_DIST)
580     IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN
581       TDTRAD_CLONLY = TDTCUR
582       GRAD = .TRUE.
583       GCLOUD_ONLY = .TRUE.
584     END IF
585   END IF
586 !   
587 ! test to see if the full radiations must be called
588 !   
589   CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
590                      TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
591                      TDTRAD_FULL%TDATE%YEAR,TDTRAD_FULL%TDATE%MONTH,     &
592                      TDTRAD_FULL%TDATE%DAY, TDTRAD_FULL%TIME,            &
593                      ZTEMP_DIST)
594   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN
595     TDTRAD_FULL = TDTCUR
596     GRAD = .TRUE.
597     GCLOUD_ONLY = .FALSE.
598   END IF
599 !
600 ! tests to see if any cloud exists
601 !   
602   IF (CRAD =='ECMW') THEN
603     IF (GRAD .AND. NRR.LE.3 ) THEN 
604       IF( MAXVAL(XCLDFR(:,:,:)).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN
605           GRAD = .FALSE.                ! only the cloudy verticals would be 
606                                         ! refreshed but there is no clouds 
607       END IF
608     END IF
609 !
610     IF (GRAD .AND. NRR.GE.4 ) THEN 
611       IF( CCLOUD(1:3)=='ICE' )THEN
612         IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND.             &
613             MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. GCLOUD_ONLY ) THEN
614             GRAD = .FALSE.            ! only the cloudy verticals would be 
615                                       ! refreshed but there is no cloudwater and ice
616         END IF
617       END IF
618       IF( CCLOUD=='C3R5' )THEN
619         IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND.             &
620             MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. GCLOUD_ONLY ) THEN
621             GRAD = .FALSE.            ! only the cloudy verticals would be 
622                                       ! refreshed but there is no cloudwater and ice
623         END IF
624       END IF
625     END IF
626   END IF
627 !
628 END IF
629 !
630 ! global parallel mask for 'GRAD'
631 ZRAD_GLOB_ll = 0.0
632 IF (GRAD) ZRAD_GLOB_ll = 1.0
633 CALL REDUCESUM_ll(ZRAD_GLOB_ll,INFO_ll)
634 if (ZRAD_GLOB_ll .NE. 0.0 ) GRAD = .TRUE.
635 !
636 !
637 IF( GRAD ) THEN                                 
638   ALLOCATE(ZCOSZEN(IIU,IJU))
639   ALLOCATE(ZSINZEN(IIU,IJU))
640   ALLOCATE(ZAZIMSOL(IIU,IJU))
641 !
642 !
643 !*        1.2.  Astronomical computations
644 !               -------------------------
645 !
646 ! Ajout PP
647 IF (.NOT. GCLOUD_ONLY .AND. KTCOUNT /= 1)  THEN 
648  IF (LAERO_FT) THEN 
649   CALL AEROZON (XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,   &
650          NDLON,NFLEV,CAER,NAER,NSTATM,                             &
651          XSINDEL,XCOSDEL,XTSIDER,XCORSOL,                          &
652          XSTATM,XOZON, XAER)
653  END IF
654 END IF
655 !
656 CALL SUNPOS_n   ( XZENITH, ZCOSZEN, ZSINZEN, ZAZIMSOL )
657 !
658 !*        1.3   Call to radiation scheme
659 !               ------------------------
660 !
661   SELECT CASE ( CRAD )
662 !
663 !*        1.3.1 TOP of Atmposphere radiation
664 !               ----------------------------
665     CASE('TOPA')
666 !
667       XFLALWD   (:,:)   = 300.
668       DO JSWB=1,NSWB_MNH
669         XDIRFLASWD(:,:,JSWB) = XI0 * MAX(COS(XZENITH(:,:)),0.)/FLOAT(NSWB_MNH)
670         XSCAFLASWD(:,:,JSWB) = 0.
671       END DO
672       XDTHRAD(:,:,:) = 0.
673      
674 !
675 !*        1.3.1 FIXEd radiative surface fluxes
676 !               ------------------------------
677 !
678     CASE('FIXE')
679       ZTIME = MOD(TDTCUR%TIME +XLON0*240., XDAY)
680       IHOUR = INT( ZTIME/3600. )
681       IF (IHOUR < 0) IHOUR=IHOUR + 24
682       ZDT = ZTIME/3600. - FLOAT(IHOUR)
683       XDIRFLASWD(:,:,:) =(( ZRG_HOUR(IHOUR+1)-ZRG_HOUR(IHOUR) )*ZDT + ZRG_HOUR(IHOUR)) / FLOAT(NSWB_MNH)
684       XFLALWD   (:,:)   = (ZRAT_HOUR(IHOUR+1)-ZRAT_HOUR(IHOUR))*ZDT + ZRAT_HOUR(IHOUR)
685       DO JSWB=1,NSWB_MNH
686         WHERE(ZCOSZEN(:,:)<0.) XDIRFLASWD(:,:,JSWB) = 0.
687       END DO
688
689       XSCAFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.2
690       XDIRFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.8
691       XDTHRAD(:,:,:) = 0.
692       !
693 !
694 !*        1.3.2 ECMWf radiative surface and atmospheric fluxes
695 !               ----------------------------------------------
696 !
697     CASE('ECMW')
698       IF (LLES_MEAN) GCLOUD_ONLY=.FALSE.
699       XRADEFF(:,:,:)=0.0
700       XSWU(:,:,:)=0.0
701       XSWD(:,:,:)=0.0
702       XLWU(:,:,:)=0.0
703       XLWD(:,:,:)=0.0
704       XDTHRADSW(:,:,:)=0.0
705       XDTHRADLW(:,:,:)=0.0
706       CALL RADIATIONS   ( OCLOSE_OUT, HFMFILE, CLUOUT,                             &
707                LCLEAR_SKY,GCLOUD_ONLY, NCLEARCOL_TM1,CEFRADL, CEFRADI,COPWSW,COPISW,&
708                COPWLW,COPILW, XFUDG,                                                &
709                NDLON, NFLEV, NRAD_DIAG, NFLUX, NRAD, NAER,NSWB, NSTATM, NRAD_COLNBR,&
710                ZCOSZEN, XSEA, XCORSOL,                                              &
711                XDIR_ALB, XSCA_ALB, XEMIS, XCLDFR, XCCO2, XTSRAD, XSTATM, XTHT, XRT, &
712                XPABST,XOZON, XAER,XDST_WL, XAER_CLIM, XSVT,                         &
713                XDTHRAD, XFLALWD, XDIRFLASWD, XSCAFLASWD, XRHODREF, XZZ ,            &
714                XRADEFF, XSWU, XSWD, XLWU, XLWD, XDTHRADSW, XDTHRADLW                )
715 !
716
717       WRITE(UNIT=ILUOUT,FMT='("  RADIATIONS called for KTCOUNT=",I6,       &
718          &  "with the CLOUD_ONLY option set ",L2)')   KTCOUNT,GCLOUD_ONLY
719 !
720       WHERE( XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) >0. )
721         XALBUV(:,:) = (  XDIR_ALB(:,:,1) * XDIRFLASWD(:,:,1)   &
722                        + XSCA_ALB(:,:,1) * XSCAFLASWD(:,:,1) ) &
723                     / (XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) )
724       ELSEWHERE
725         XALBUV(:,:) = XDIR_ALB(:,:,1)
726       END WHERE
727 !
728   END SELECT
729 !
730   CALL SECOND_MNH2(ZTIME2)
731 !
732   PRAD = PRAD + ZTIME2 - ZTIME1
733 !
734   ZTIME1 = ZTIME2
735 !
736   CALL SURF_RAD_MODIF (XMAP, XXHAT, XYHAT,                 &
737                   ZCOSZEN, ZSINZEN, ZAZIMSOL, XZS, XZS_XY, &
738                   XDIRFLASWD, XDIRSRFSWD                   )
739 !
740 !* Azimuthal angle to be sent later to surface processes
741 !  Defined in radian, clockwise, from North
742 !
743   XAZIM = ZAZIMSOL
744 !
745   CALL SECOND_MNH2(ZTIME2)
746 !
747   PSHADOWS = PSHADOWS + ZTIME2 - ZTIME1
748 !
749   ZTIME1 = ZTIME2
750 !
751   DEALLOCATE(ZCOSZEN)
752   DEALLOCATE(ZSINZEN)
753   DEALLOCATE(ZAZIMSOL)
754 !
755 END IF
756 !
757 !
758 !*        1.4   control prints
759 !               --------------
760 !
761 !*        1.5   Radiative tendency integration
762 !               ------------------------------
763 !
764 IF (CRAD /='NONE') THEN
765   XRTHS(:,:,:) = XRTHS(:,:,:) + XRHODJ(:,:,:)*XDTHRAD(:,:,:)
766 END IF
767 !
768 !*        1.6   budget storage
769 !               --------------
770 !
771 IF (CRAD/='NONE' .AND. LBUDGET_TH) CALL BUDGET (XRTHS,4,'RAD_BU_RTH')
772 !
773 CALL SECOND_MNH2(ZTIME2)
774 !
775 PRAD = PRAD + ZTIME2 - ZTIME1 &
776      - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
777 !
778 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
779 !
780 !
781 !-----------------------------------------------------------------------------
782 !
783 !*        2.    DEEP CONVECTION SCHEME
784 !               ----------------------
785 !
786 ZTIME1 = ZTIME2
787 XTIME_BU_PROCESS = 0.
788 XTIME_LES_BU_PROCESS = 0.
789 !
790 CALL SECOND_MNH2(ZTIME1)
791 !
792 IF( CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) THEN
793 !
794 ! test to see if the deep convection scheme should be called
795 !
796   GDCONV = .FALSE.
797 !
798   CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,         &
799                      TDTCUR%TDATE%DAY, TDTCUR%TIME,                &
800                      TDTDCONV%TDATE%YEAR,TDTDCONV%TDATE%MONTH,     &
801                      TDTDCONV%TDATE%DAY, TDTDCONV%TIME,            &
802                      ZTEMP_DIST)
803   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN
804     TDTDCONV = TDTCUR
805     GDCONV   = .TRUE.
806   END IF
807 !
808   IF( GDCONV ) THEN
809     IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
810         ALLOCATE( ZRC(IIU,IJU,IKU) )
811         ALLOCATE( ZRI(IIU,IJU,IKU) )
812         ALLOCATE( ZWT(IIU,IJU,IKU) )
813         ALLOCATE( ZDXDY(IIU,IJU) )
814         ! Compute grid area
815         ZDXDY(:,:) = SPREAD(XDXHAT(1:IIU),2,IJU) * SPREAD(XDYHAT(1:IJU),1,IIU)
816         !
817         IF( LUSERC .AND. LUSERI ) THEN
818           ZRC(:,:,:) = XRT(:,:,:,2)
819           ZRI(:,:,:) = XRT(:,:,:,4)
820         ELSE IF( LUSERC .AND. (.NOT. LUSERI) ) THEN
821           ZRC(:,:,:) = XRT(:,:,:,2)
822           ZRI(:,:,:) = 0.0
823         ELSE
824           ZRC(:,:,:) = 0.0
825           ZRI(:,:,:) = 0.0
826         END IF
827         WRITE(UNIT=ILUOUT,FMT='("  CONVECTION called for KTCOUNT=",I6)')  &
828                                               KTCOUNT
829         IF ( LFORCING .AND. L1D ) THEN
830           ZWT(:,:,:) = XWTFRC(:,:,:)
831         ELSE
832           ZWT(:,:,:) = XWT(:,:,:)
833         ENDIF
834         IF (LDUST) CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF(:,:,:))
835         IF (LSALT) CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF(:,:,:))
836         IF (LCH_CONV_LINOX) THEN
837           CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, &
838                          LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM,           &
839                          XPABST, XZZ, ZDXDY,                                   &
840                          XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT,               &
841                          ZWT,XTKET(:,:,IKB),                                   &
842                          NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV,   &
843                          XPRCONV, XPRSCONV,                                    &
844                          XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,    &
845                          XCAPE, NCLTOPCONV, NCLBASCONV,                        &
846                          LCHTRANS, XSVT, XDSVCONV,                             &
847                          LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX,              &
848                          LDUST, LSALT,                                         &
849                          XRHODREF, XIC_RATE, XCG_RATE                          )
850         ELSE
851           CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, &
852                          LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM,           &
853                          XPABST, XZZ, ZDXDY,                                   &
854                          XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT,               &
855                          ZWT,XTKET(:,:,IKB),                                   &
856                          NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV,   &
857                          XPRCONV, XPRSCONV,                                    &
858                          XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,    &
859                          XCAPE, NCLTOPCONV, NCLBASCONV,                        &
860                          LCHTRANS, XSVT, XDSVCONV,                             &
861                          LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX,              &
862                          LDUST, LSALT,                                         &
863                          XRHODREF )
864         END IF
865 !
866         DEALLOCATE( ZRC )
867         DEALLOCATE( ZRI )
868         DEALLOCATE( ZWT )
869         DEALLOCATE( ZDXDY )
870     END IF    
871   END IF
872 !
873 !  Deep convection tendency integration
874 !
875   XRTHS(:,:,:)  = XRTHS(:,:,:)  + XRHODJ(:,:,:) * XDTHCONV(:,:,:)
876   XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * XDRVCONV(:,:,:)
877 !
878 !
879 ! Aerosols size distribution
880 ! Compute Rg and sigma before tracers convection tendency (for orilam, dust and sea
881 ! salt)
882 !
883
884   IF ( LCHTRANS ) THEN  ! update tracers for chemical transport
885     IF (LORILAM) ZRSVS(:,:,:,:) = XRSVS(:,:,:,:)    !
886     IF ((LDUST)) THEN ! dust convective balance
887       ALLOCATE(ZSIGDST(IIU,IJU,IKU,NMODE_DST))
888       ALLOCATE(ZRGDST(IIU,IJU,IKU,NMODE_DST))
889       ALLOCATE(ZNDST(IIU,IJU,IKU,NMODE_DST))
890       ALLOCATE(ZSVDST(IIU,IJU,IKU,NSV_DST))
891       !
892       DO JSV=1,NMODE_DST
893         IMODEIDX = JPDUSTORDER(JSV)
894         IF (CRGUNITD=="MASS") THEN
895           ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX) * EXP(-3.*(LOG(XINISIG(IMODEIDX)))**2)
896         ELSE
897           ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX)
898         END IF
899         ZSIGDST(:,:,:,JSV) = XINISIG(IMODEIDX)
900         ZRGDST(:,:,:,JSV)  = ZINIRADIUS(JSV)
901         ZNDST(:,:,:,JSV)   = XN0MIN(IMODEIDX)
902       ENDDO
903       !
904       DO JSV=NSV_DSTBEG,NSV_DSTEND
905         ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
906       ENDDO
907       CALL PPP2DUST(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),&
908               PSIG3D=ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
909               PN3D=ZNDST(IIB:IIE,IJB:IJE,IKB:IKE,:))
910     END IF
911     !
912     IF ((LSALT)) THEN ! sea salt convective balance
913       ALLOCATE(ZSIGSLT(IIU,IJU,IKU,NMODE_SLT))
914       ALLOCATE(ZRGSLT(IIU,IJU,IKU,NMODE_SLT))
915       ALLOCATE(ZNSLT(IIU,IJU,IKU,NMODE_SLT))
916       ALLOCATE(ZSVSLT(IIU,IJU,IKU,NSV_SLT))
917       !
918       DO JSV=1,NMODE_SLT
919         IMODEIDX = JPSALTORDER(JSV)
920         IF (CRGUNITS=="MASS") THEN
921           ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX) * &
922                             EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
923         ELSE
924           ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX)
925         END IF
926         ZSIGSLT(:,:,:,JSV) = XINISIG_SLT(IMODEIDX)
927         ZRGSLT(:,:,:,JSV)  = ZINIRADIUS_SLT(JSV)
928         ZNSLT(:,:,:,JSV)   = XN0MIN_SLT(IMODEIDX)
929       ENDDO
930       !
931       DO JSV=NSV_SLTBEG,NSV_SLTEND
932         ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
933       ENDDO
934       CALL PPP2SALT(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),&
935               PSIG3D=ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
936               PN3D=ZNSLT(IIB:IIE,IJB:IJE,IKB:IKE,:))
937     END IF
938     !
939 !
940 ! Compute convective tendency for all tracers
941 !
942   IF (LCHTRANS) THEN
943     DO JSV = 1, SIZE(XRSVS,4)
944       XRSVS(:,:,:,JSV) = XRSVS(:,:,:,JSV) + XRHODJ(:,:,:) * XDSVCONV(:,:,:,JSV)
945     END DO
946     IF (LORILAM) THEN
947       DO JSV = NSV_AERBEG,NSV_AEREND
948         ZWETDEPAER(:,:,:,JSV-NSV_AERBEG+1) = XDSVCONV(:,:,:,JSV) * XRHODJ(:,:,:)
949         XRSVS(:,:,:,JSV) = ZRSVS(:,:,:,JSV) 
950       END DO
951     END IF  
952   END IF
953 !
954   IF ((LDUST).AND.(LCHTRANS)) THEN ! dust convective balance
955     IF (CPROGRAM == "MESONH") THEN
956       DO JSV=NSV_DSTBEG,NSV_DSTEND
957           ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
958       ENDDO
959     ELSE
960       DO JSV=NSV_DSTBEG,NSV_DSTEND
961         ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XSVT(:,:,:,JSV)
962       ENDDO
963     ENDIF
964     CALL DUST2PPP(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), &
965                     XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),&
966                     ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:))
967     DO JSV=NSV_DSTBEG,NSV_DSTEND
968       XRSVS(:,:,:,JSV) =  ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) * XRHODJ(:,:,:) / XTSTEP
969     ENDDO
970     !
971     DEALLOCATE(ZSVDST)
972     DEALLOCATE(ZNDST)
973     DEALLOCATE(ZRGDST)
974     DEALLOCATE(ZSIGDST)
975   END IF
976     !
977   IF ((LSALT).AND.(LCHTRANS)) THEN ! sea salt convective balance
978     IF (CPROGRAM == "MESONH") THEN
979       DO JSV=NSV_SLTBEG,NSV_SLTEND
980         ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
981       ENDDO
982     ELSE
983       DO JSV=NSV_SLTBEG,NSV_SLTEND
984         ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XSVT(:,:,:,JSV)
985       ENDDO
986     END IF
987     CALL SALT2PPP(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), &
988                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),&
989                   ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:))
990     DO JSV=NSV_SLTBEG,NSV_SLTEND
991       XRSVS(:,:,:,JSV) =  ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) * XRHODJ(:,:,:) / XTSTEP
992     ENDDO
993     !
994     DEALLOCATE(ZSVSLT)
995     DEALLOCATE(ZNSLT)
996     DEALLOCATE(ZRGSLT)
997     DEALLOCATE(ZSIGSLT)
998   END IF
999   !
1000 END IF
1001 !
1002   IF( LUSERC .AND. LUSERI ) THEN
1003     XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * XDRCCONV(:,:,:)
1004     XRRS(:,:,:,4) = XRRS(:,:,:,4) + XRHODJ(:,:,:) * XDRICONV(:,:,:)
1005 !
1006   ELSE IF ( LUSERC .AND. (.NOT. LUSERI) ) THEN
1007 !
1008 !  If only cloud water but no cloud ice is used, the convective tendency
1009 !     for cloud ice is added to the tendency for cloud water
1010 !
1011       XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
1012                                                        XDRICONV(:,:,:)   )
1013 !     and cloud ice is melted
1014 !
1015       XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) *                      &
1016          ( XP00/XPABST(:,:,:) )**(XRD/XCPD) * XLMTT / XCPD * XDRICONV(:,:,:)
1017 !
1018   ELSE IF ( (.NOT. LUSERC) .AND. (.NOT. LUSERI) ) THEN
1019 !
1020 !  If no cloud water and no cloud ice are used the convective tendencies for these
1021 !     variables are added to the water vapor tendency
1022 !
1023       XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
1024                                                        XDRICONV(:,:,:)   )
1025 !     and all cloud condensate is evaporated
1026 !
1027       XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) / XCPD * (              &
1028                      XLVTT * XDRCCONV(:,:,:) + XLSTT * XDRICONV(:,:,:) ) *&
1029                     ( XP00 / XPABST(:,:,:) ) ** ( XRD / XCPD )
1030   END IF                                                               
1031 END IF
1032 !
1033 !  budget storage
1034 !
1035 IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
1036   IF (LBUDGET_TH) CALL BUDGET (XRTHS,4,'DCONV_BU_RTH')
1037   IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),6,'DCONV_BU_RRV')
1038   IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),7,'DCONV_BU_RRC')
1039   IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),9,'DCONV_BU_RRI')
1040   IF (LCHTRANS .AND. LBUDGET_SV) THEN
1041     DO JSV = 1, SIZE(XRSVS,4)
1042       CALL BUDGET (XRSVS(:,:,:,JSV),JSV+12,'DCONV_BU_RSV')
1043     END DO
1044   END IF
1045 END IF
1046 !
1047 CALL SECOND_MNH2(ZTIME2)
1048 !
1049 PKAFR = PKAFR + ZTIME2 - ZTIME1 &
1050        - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
1051 !
1052 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
1053 !
1054 !-----------------------------------------------------------------------------
1055 !
1056 !*        3.    TURBULENT SURFACE FLUXES
1057 !               ------------------------
1058 !
1059 ZTIME1 = ZTIME2
1060 !
1061 IF (CSURF=='EXTE') THEN
1062   CALL GOTO_SURFEX(IMI,.TRUE.)
1063 !
1064   IF( LTRANS ) THEN
1065     XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS
1066     XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) + XVTRANS
1067   END IF
1068   !
1069   ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH))
1070   ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
1071   ALLOCATE(ZEMIS  (IIU,IJU))
1072   ALLOCATE(ZTSRAD (IIU,IJU))
1073   !  
1074   IKIDM=0
1075   DO JKID = IMI+1,NMODEL  ! min value of the possible kids
1076     IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. &
1077      CPROGRAM=='MESONH' .AND. &
1078      (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
1079     !  where kids exist, use the two-way output fields (i.e. OMASKkids true)
1080     !  rather than the farther calculations in radiation and convection schemes
1081 ! BUG if number of the son does not follow the number of the dad
1082 !    IKIDM = JKID-IMI
1083       IKIDM = IKIDM + 1
1084       IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR.  &
1085           (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN
1086         WHERE (OMASKkids(:,:) )
1087           XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM)
1088         ENDWHERE
1089       END IF
1090       IF (LUSERR) THEN
1091         WHERE (OMASKkids(:,:) )
1092           XINPRR(:,:) = ZSAVE_INPRR(:,:,IKIDM)
1093         ENDWHERE
1094       END IF
1095       IF (LUSERS) THEN
1096         WHERE (OMASKkids(:,:) )
1097           XINPRS(:,:) = ZSAVE_INPRS(:,:,IKIDM)
1098        ENDWHERE
1099       END IF
1100       IF (LUSERG) THEN
1101         WHERE (OMASKkids(:,:) )
1102           XINPRG(:,:) = ZSAVE_INPRG(:,:,IKIDM)
1103         ENDWHERE
1104       END IF
1105       IF (LUSERH) THEN
1106         WHERE (OMASKkids(:,:) )
1107           XINPRH(:,:) = ZSAVE_INPRH(:,:,IKIDM)
1108         ENDWHERE
1109       END IF
1110       IF (CDCONV /= 'NONE') THEN
1111         WHERE (OMASKkids(:,:) )
1112           XPRCONV(:,:) = ZSAVE_PRCONV(:,:,IKIDM)
1113           XPRSCONV(:,:) = ZSAVE_PRSCONV(:,:,IKIDM)
1114         ENDWHERE
1115       END IF
1116       IF (CRAD /= 'NONE') THEN
1117         DO JSWB=1,NSWB_MNH
1118           WHERE (OMASKkids(:,:) ) 
1119             XDIRFLASWD(:,:,JSWB) = ZSAVE_DIRFLASWD(:,:,JSWB,IKIDM)
1120             XSCAFLASWD(:,:,JSWB) = ZSAVE_SCAFLASWD(:,:,JSWB,IKIDM)
1121             XDIRSRFSWD(:,:,JSWB) = ZSAVE_DIRSRFSWD(:,:,JSWB,IKIDM)
1122           ENDWHERE
1123         ENDDO
1124       END IF
1125     ENDIF
1126   END DO
1127   !
1128  IF (IMODSON /= 0 ) THEN
1129     DEALLOCATE( ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH)
1130     DEALLOCATE( ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV)
1131     DEALLOCATE( ZSAVE_DIRFLASWD,ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD)
1132  END IF
1133   CALL GROUND_PARAM_n(ZSFTH, ZSFRV, ZSFSV, ZSFCO2, ZSFU, ZSFV, &
1134                       ZDIR_ALB, ZSCA_ALB, ZEMIS, ZTSRAD        )
1135   !
1136   IF (SIZE(XEMIS)>0) THEN
1137     XDIR_ALB = ZDIR_ALB
1138     XSCA_ALB = ZSCA_ALB
1139     XEMIS    = ZEMIS
1140     XTSRAD   = ZTSRAD
1141   END IF
1142   !
1143   DEALLOCATE(ZDIR_ALB)
1144   DEALLOCATE(ZSCA_ALB)
1145   DEALLOCATE(ZEMIS   )
1146   DEALLOCATE(ZTSRAD  )
1147   !
1148   !
1149   IF( LTRANS ) THEN
1150     XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) - XUTRANS
1151     XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS
1152   END IF
1153 !
1154 ELSE
1155   ZSFTH    = 0.
1156   ZSFRV    = 0.
1157   ZSFSV    = 0.
1158   ZSFCO2   = 0.
1159   ZSFU     = 0.
1160   ZSFV     = 0.
1161 END IF
1162 !
1163 CALL SECOND_MNH2(ZTIME2)
1164 !
1165 PGROUND = PGROUND + ZTIME2 - ZTIME1
1166 !
1167 !-----------------------------------------------------------------------------
1168 !
1169 !*        3.1    EDDY FLUXES PARAMETRIZATION
1170 !               ------------------
1171 !
1172 IF (IMI==1) THEN  ! On calcule les flus turb. comme preconise par PP
1173
1174    ! Heat eddy fluxes
1175    IF ( LTH_FLX ) CALL EDDY_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRTHS,XVTH_FLUX_M,XWTH_FLUX_M)
1176    !
1177    ! Momentum eddy fluxes
1178    IF ( LUV_FLX ) CALL EDDYUV_FLUX_n(IMI,CLUOUT,KTCOUNT,XVT,XTHT,XRHODJ,XRHODREF,XPABSM,XRVS,XVU_FLUX_M)
1179
1180 ELSE
1181    ! TEST pour maille infèrieure à 20km ? 
1182    !      car pb d'instabilités ?
1183    !      Pour le modèle fils, on spawne les flux du modèle père
1184    ! Heat eddy fluxes
1185    IF ( LTH_FLX ) CALL EDDY_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
1186    !
1187    ! Momentum eddy fluxes
1188    IF ( LUV_FLX ) CALL EDDYUV_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
1189    !
1190 END IF
1191 !-----------------------------------------------------------------------------
1192 !
1193 !*        4.    PASSIVE POLLUTANTS
1194 !               ------------------
1195 !
1196 ZTIME1 = ZTIME2
1197 !
1198 IF (LPASPOL) CALL PASPOL(XTSTEP, ZSFSV, ILUOUT, NVERB, OCLOSE_OUT, HFMFILE, CLUOUT )
1199 !
1200 !
1201 !*        4b.  PASSIVE POLLUTANTS FOR MASS-FLUX SCHEME DIAGNOSTICS
1202 !              ---------------------------------------------------
1203 !
1204 IF (LCONDSAMP) CALL CONDSAMP(ZSFSV, ILUOUT, NVERB, OCLOSE_OUT, HFMFILE, CLUOUT)
1205 !
1206 CALL SECOND_MNH2(ZTIME2)
1207 !
1208 PTRACER = PTRACER + ZTIME2 - ZTIME1
1209 !-----------------------------------------------------------------------------
1210 !
1211 !*        5.    Drag force 
1212 !               ----------
1213 !
1214 ZTIME1 = ZTIME2
1215 XTIME_BU_PROCESS = 0.
1216 XTIME_LES_BU_PROCESS = 0.
1217 !
1218 IF (LDRAGTREE) CALL DRAG_VEG(XUT,XVT,XTKET,XRHODJ,XZZ,XRUS, XRVS, XRTKES)
1219 !
1220 CALL SECOND_MNH2(ZTIME2)
1221 !
1222 PDRAG = PDRAG + ZTIME2 - ZTIME1 &
1223              - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
1224 !
1225 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
1226 !
1227 !-----------------------------------------------------------------------------
1228 !
1229 !*        6.    TURBULENCE SCHEME
1230 !               -----------------
1231 !
1232 ZTIME1 = ZTIME2
1233 XTIME_BU_PROCESS = 0.
1234 XTIME_LES_BU_PROCESS = 0.
1235 !
1236 ZSFTH(:,:)  = ZSFTH(:,:) * XDIRCOSZW(:,:)
1237 ZSFRV(:,:)  = ZSFRV(:,:) * XDIRCOSZW(:,:)
1238 DO JSV=1,NSV
1239   ZSFSV(:,:,JSV)  = ZSFSV(:,:,JSV) * XDIRCOSZW(:,:)
1240 END DO
1241 !
1242 IF (LLES_CALL) CALL SWITCH_SBG_LES_n
1243 !
1244 !
1245 IF ( CTURB == 'TKEL' ) THEN
1246 !
1247
1248 !*        6.1 complete surface fluxe fields on the border
1249 !
1250 !!$  IF(NHALO == 1) THEN
1251     CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFTH)
1252     CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFRV)
1253     CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFU)
1254     CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFV)
1255     IF(NSV >0)THEN
1256       DO JSV=1,NSV
1257         CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFSV(:,:,JSV))
1258       END DO
1259     END IF
1260     CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFCO2)
1261     CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
1262     CALL CLEANLIST_ll(TZFIELDS_ll)
1263 !!$  END IF
1264 !
1265   CALL MPPDB_CHECK2D(ZSFU,"phys_param::ZSFU",PRECISION)
1266   !
1267   IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
1268     ZSFTH(IIB-1,:)=ZSFTH(IIB,:)
1269     ZSFRV(IIB-1,:)=ZSFRV(IIB,:)
1270     ZSFU(IIB-1,:)=ZSFU(IIB,:)
1271     ZSFV(IIB-1,:)=ZSFV(IIB,:)
1272     IF (NSV>0)           ZSFSV(IIB-1,:,:)=ZSFSV(IIB,:,:)
1273     ZSFCO2(IIB-1,:)=ZSFCO2(IIB,:)
1274   END IF
1275   IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
1276     ZSFTH(IIE+1,:)=ZSFTH(IIE,:)
1277     ZSFRV(IIE+1,:)=ZSFRV(IIE,:)
1278     ZSFU(IIE+1,:)=ZSFU(IIE,:)
1279     ZSFV(IIE+1,:)=ZSFV(IIE,:)
1280     IF (NSV>0)           ZSFSV(IIE+1,:,:)=ZSFSV(IIE,:,:)
1281     ZSFCO2(IIE+1,:)=ZSFCO2(IIE,:)
1282   END IF
1283   IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
1284     ZSFTH(:,IJB-1)=ZSFTH(:,IJB)
1285     ZSFRV(:,IJB-1)=ZSFRV(:,IJB)
1286     ZSFU(:,IJB-1)=ZSFU(:,IJB)
1287     ZSFV(:,IJB-1)=ZSFV(:,IJB)
1288     IF (NSV>0)           ZSFSV(:,IJB-1,:)=ZSFSV(:,IJB,:)
1289     ZSFCO2(:,IJB-1)=ZSFCO2(:,IJB)
1290   END IF
1291   IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
1292     ZSFTH(:,IJE+1)=ZSFTH(:,IJE)
1293     ZSFRV(:,IJE+1)=ZSFRV(:,IJE)
1294     ZSFU(:,IJE+1)=ZSFU(:,IJE)
1295     ZSFV(:,IJE+1)=ZSFV(:,IJE)
1296     IF (NSV>0)           ZSFSV(:,IJE+1,:)=ZSFSV(:,IJE,:)
1297     ZSFCO2(:,IJE+1)=ZSFCO2(:,IJE)
1298   END IF
1299 !
1300   IF( LTRANS ) THEN
1301     XUT(:,:,:) = XUT(:,:,:) + XUTRANS
1302     XVT(:,:,:) = XVT(:,:,:) + XVTRANS
1303   END IF
1304 !
1305 !
1306 IF(ALLOCATED(XTHW_FLUX))  THEN
1307  DEALLOCATE(XTHW_FLUX)
1308  ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
1309 ELSE
1310  ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
1311 END IF
1312
1313 IF(ALLOCATED(XRCW_FLUX))  THEN
1314  DEALLOCATE(XRCW_FLUX)
1315  ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
1316 ELSE
1317  ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
1318 END IF
1319 !
1320 IF(ALLOCATED(XSVW_FLUX))  THEN
1321  DEALLOCATE(XSVW_FLUX)
1322  ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
1323 ELSE
1324  ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
1325 END IF
1326 !
1327    CALL TURB(1,IKU,1,IMI,NRR, NRRL, NRRI, CLBCX, CLBCY, 1,NMODEL_CLOUD,     &
1328       OCLOSE_OUT,LTURB_FLX,LTURB_DIAG,LSUBG_COND,LRMC01,                    &
1329       CTURBDIM,CTURBLEN,CTOM,CTURBLEN_CLOUD,CCLOUD,XIMPL,                   &
1330       XTSTEP,HFMFILE,CLUOUT,                                                &
1331       XDXX,XDYY,XDZZ,XDZX,XDZY,XZZ,                                         &
1332       XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE,                    &
1333       XRHODJ,XTHVREF,XRHODREF,                                              &
1334       ZSFTH,ZSFRV,ZSFSV,ZSFU,ZSFV,                                          &
1335       XPABST,XUT,XVT,XWT,XTKET,XSVT,XSRCT,XBL_DEPTH,XSBL_DEPTH,             &
1336       XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT,                                &
1337       XTHT,XRT,                                                             &
1338       XRUS,XRVS,XRWS,XRTHS,XRRS,XRSVS,XRTKES,XRTKEMS, XSIGS, XWTHVMF,       &
1339       XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, XTR, XDISS,  XLEM         )
1340 !
1341 IF (LRMC01) THEN
1342   CALL ADD2DFIELD_ll(TZFIELDS_ll,XSBL_DEPTH)
1343   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
1344   CALL CLEANLIST_ll(TZFIELDS_ll)
1345   IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
1346     XSBL_DEPTH(IIB-1,:)=XSBL_DEPTH(IIB,:)
1347   END IF
1348   IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
1349     XSBL_DEPTH(IIE+1,:)=XSBL_DEPTH(IIE,:)
1350   END IF
1351   IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
1352     XSBL_DEPTH(:,IJB-1)=XSBL_DEPTH(:,IJB)
1353   END IF
1354   IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
1355     XSBL_DEPTH(:,IJE+1)=XSBL_DEPTH(:,IJE)
1356   END IF
1357 END IF
1358 !
1359 CALL SECOND_MNH2(ZTIME3)
1360 !
1361 !-----------------------------------------------------------------------------
1362 !
1363 !*        7.    EDMF SCHEME
1364 !               -----------
1365 !
1366 IF (CSCONV == 'EDKF') THEN
1367      ALLOCATE(ZEXN (IIU,IJU,IKU))
1368      ALLOCATE(ZSIGMF (IIU,IJU,IKU))
1369      ZSIGMF(:,:,:)=0.    
1370      ZEXN(:,:,:)=(XPABST(:,:,:)/XP00)**(XRD/XCPD)  
1371      !$20131113 check3d on ZEXN
1372      CALL MPPDB_CHECK3D(ZEXN,"physparan.7::ZEXN",PRECISION)
1373      CALL ADD3DFIELD_ll(TZFIELDS_ll, ZEXN)
1374      !$20131113 add update_halo_ll
1375      CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
1376      CALL CLEANLIST_ll(TZFIELDS_ll)
1377      CALL MPPDB_CHECK3D(ZEXN,"physparam.7::ZEXN",PRECISION)
1378  !    
1379      CALL SHALLOW_MF_PACK(NRR,NRRL,NRRI, CMF_UPDRAFT, CMF_CLOUD, LMIXUV,  &
1380                    OCLOSE_OUT,LMF_FLX,HFMFILE,CLUOUT,ZTIME_LES_MF,        &
1381                    XIMPL_MF, XTSTEP,                                      &
1382                    XDZZ, XZZ,                                             &
1383                    XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV,          &
1384                    XTHT,XRT,XUT,XVT,XWT,XTKET,XSVT,                           &
1385                    XRTHS,XRRS,XRUS,XRVS,XRSVS,                            &
1386                    ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF)
1387 !
1388 ELSE
1389     XWTHVMF(:,:,:)=0.
1390     XRC_MF(:,:,:)=0.
1391     XRI_MF(:,:,:)=0.
1392     XCF_MF(:,:,:)=0.
1393 ENDIF   
1394 !
1395 CALL SECOND_MNH2(ZTIME4)
1396
1397   IF( LTRANS ) THEN
1398     XUT(:,:,:) = XUT(:,:,:) - XUTRANS
1399     XVT(:,:,:) = XVT(:,:,:) - XVTRANS
1400   END IF
1401
1402   IF (CMF_CLOUD == 'STAT') THEN
1403     XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 )
1404   ENDIF
1405   IF (CSCONV == 'EDKF') THEN
1406     DEALLOCATE(ZSIGMF)
1407     DEALLOCATE(ZEXN)
1408   ENDIF
1409 END IF
1410 !
1411 IF (LLES_CALL) CALL SWITCH_SBG_LES_n
1412 !
1413 CALL SECOND_MNH2(ZTIME2)
1414 !
1415 PTURB = PTURB + ZTIME2 - ZTIME1 - (XTIME_LES-ZTIME_LES_MF) - XTIME_LES_BU_PROCESS &
1416       - XTIME_BU_PROCESS - (ZTIME4 - ZTIME3)
1417 !
1418 PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF
1419 !
1420 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
1421 !
1422 !-------------------------------------------------------------------------------
1423 !
1424 !*        8.    CHEMISTRY-AEROSOLS
1425 !               ------------------
1426 !
1427 ZTIME1 = ZTIME2
1428 XTIME_BU_PROCESS = 0.
1429 XTIME_LES_BU_PROCESS = 0.
1430 !
1431 IF (LUSECHEM) THEN
1432   CALL CH_MONITOR_n(ZWETDEPAER,KTCOUNT,XTSTEP, ILUOUT, NVERB)
1433 END IF
1434 !
1435 ! For inert aerosol (dust and sea salt) => aer_monitor_n
1436 IF ((LDUST).OR.(LSALT)) THEN
1437 !
1438 ! tests to see if any cloud exists
1439 !   
1440     GCLD=.TRUE.
1441     IF (GCLD .AND. NRR.LE.3 ) THEN 
1442       IF( MAXVAL(XCLDFR(:,:,:)).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN
1443           GCLD = .FALSE.                ! only the cloudy verticals would be 
1444                                         ! refreshed but there is no clouds 
1445       END IF
1446     END IF
1447 !
1448     IF (GCLD .AND. NRR.GE.4 ) THEN 
1449       IF( CCLOUD(1:3)=='ICE' )THEN
1450         IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND.             &
1451             MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. GCLOUD_ONLY ) THEN
1452             GCLD = .FALSE.            ! only the cloudy verticals would be 
1453                                       ! refreshed but there is no cloudwater and ice
1454         END IF
1455       END IF
1456       IF( CCLOUD=='C3R5' )THEN
1457         IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND.             &
1458             MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. GCLOUD_ONLY ) THEN
1459             GCLD = .FALSE.            ! only the cloudy verticals would be 
1460                                       ! refreshed but there is no cloudwater and ice
1461         END IF
1462       END IF
1463     END IF
1464
1465 !
1466         CALL AER_MONITOR_n(KTCOUNT,XTSTEP, ILUOUT, NVERB, GCLD)
1467 END IF
1468 !
1469 !
1470 CALL SECOND_MNH2(ZTIME2)
1471 !
1472 PCHEM = PCHEM + ZTIME2 - ZTIME1 &
1473       - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
1474 !
1475 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
1476 !
1477 !
1478 !-------------------------------------------------------------------------------
1479 !
1480 !* deallocation of variables used in more than one parameterization
1481 !
1482 DEALLOCATE(ZSFU  )         ! surface schemes + turbulence
1483 DEALLOCATE(ZSFV  )
1484 DEALLOCATE(ZSFTH )
1485 DEALLOCATE(ZSFRV )
1486 DEALLOCATE(ZSFSV )
1487 DEALLOCATE(ZSFCO2)
1488 !
1489 !-------------------------------------------------------------------------------
1490 !
1491 END SUBROUTINE PHYS_PARAM_n
1492