diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90
index 261b4fd27ebe4881803f4bd1e6150f160e3ffdab..7863269a6893d3f19329cdd160a6367ce9de4f60 100644
--- a/src/arome/ext/aro_turb_mnh.F90
+++ b/src/arome/ext/aro_turb_mnh.F90
@@ -72,7 +72,7 @@ USE MODD_CONF
 USE MODD_NSV, ONLY: NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH
 USE MODD_CST, ONLY:CST
 USE MODD_CTURB, ONLY:CSTURB
-USE MODD_LES, ONLY:LLES_CALL
+USE MODD_LES, ONLY:TLES
 USE MODD_PARAMETERS
 USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
 USE MODD_IO, ONLY: TFILEDATA
@@ -425,11 +425,11 @@ DO JRR=1, NBUDGET_RI
   YLBUDGET(JRR)%YDMDDH=>YDMDDH
 ENDDO
 OCOMPUTE_SRC=SIZE(PSIGS, 3)/=0
-CALL TURB (CST,CSTURB,TBUCONF,TURBN, YLDIMPHYEX,&
-   & IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS, 1, &
+CALL TURB (CST,CSTURB,TBUCONF,TURBN, YLDIMPHYEX,TLES,&
+   & IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS,1, &
    & ISPLIT,IMI, KSV, KSV_LGBEG, KSV_LGEND, HPROGRAM,&
    & NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH,   &
-   & O2D, ONOMIXLG, OFLAT, LLES_CALL,OCOUPLES,OBLOWSNOW,& 
+   & O2D, ONOMIXLG, OFLAT, TLES%LLES_CALL,OCOUPLES,OBLOWSNOW,& 
    & OCOMPUTE_SRC, 1.0, &
    & OOCEAN,ODEEPOC, .FALSE.,   &
    & 'NONE',CMICRO,           &
diff --git a/src/arome/ext/aroini_turb.F90 b/src/arome/ext/aroini_turb.F90
index 5ba42b5abeffc1f4fdf82688db61331f673689bc..b5d06b2109c6e9590dc3ee664d9f82501b0ecea7 100644
--- a/src/arome/ext/aroini_turb.F90
+++ b/src/arome/ext/aroini_turb.F90
@@ -41,7 +41,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !        Original : 03-12-12
 !     ------------------------------------------------------------------
 
-USE MODD_LES,   ONLY : LLES, LLES_CALL
+USE MODD_LES,   ONLY : TLES
 USE MODD_CTURB, ONLY : XLINI
 USE MODD_TURB_n, ONLY: LHARAT, LSTATNW, CTURBLEN, TURB_GOTO_MODEL, LTURB_FLX, LTURB_DIAG, &
                        LSUBG_COND, LRMC01, CTURBDIM, XIMPL
@@ -67,7 +67,6 @@ IF (LHOOK) CALL DR_HOOK('AROINI_TURB',0,ZHOOK_HANDLE)
 CALL TURB_GOTO_MODEL(1,1)
 !
 CALL INI_CTURB
-
 !         1bis. Modification of MODD_CTURB values
 XLINI=PLINI
 LHARAT=OHARATU
@@ -75,8 +74,8 @@ LSTATNW=OSTATNW
 
 !         2. Set implicit default values for MODD_LES
 
-LLES=.FALSE.
-LLES_CALL=.FALSE.
+TLES%LLES=.FALSE.
+TLES%LLES_CALL=.FALSE.
 
 !         3. Set implicit default values for MODD_TURB_n
 
diff --git a/src/arome/micro/ini_rain_ice.F90 b/src/arome/micro/ini_rain_ice.F90
index ba3e4075a2ee6693bcbaaf54797d7b7d7104367b..3e01f18fd0cea9b93207fd63a40fffacc59d5fb6 100644
--- a/src/arome/micro/ini_rain_ice.F90
+++ b/src/arome/micro/ini_rain_ice.F90
@@ -448,8 +448,8 @@ XLBDAS_MAX = 100000.0
 XLBDAG_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 #if defined(REPRO48) || defined(REPRO55)
+IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 #else
 XLBDAS_MAX = 1.E6
 XLBDAS_MIN = 1000.
@@ -511,7 +511,7 @@ XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS)
 XFSEDS  = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)*                         &
           (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT
 #else
-IF (LRED) THEN
+IF (HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4') THEN
    XEXSEDS = -XDS-XBS
    XFSEDS  = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS))    &
             *(ZRHO00)**XCEXVT
@@ -822,12 +822,12 @@ IF( (KACCLBDAS/=RAIN_ICE_PARAM%NACCLBDAS) .OR. (KACCLBDAR/=RAIN_ICE_PARAM%NACCLB
     (PACCLBDAS_MIN/=RAIN_ICE_PARAM%XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=RAIN_ICE_PARAM%XACCLBDAR_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR,                     & 
+                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR,                     &
                  RAIN_ICE_PARAM%XACCLBDAS_MAX, RAIN_ICE_PARAM%XACCLBDAR_MAX, &
                  RAIN_ICE_PARAM%XACCLBDAS_MIN, RAIN_ICE_PARAM%XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS                        )
   CALL RZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0.,                 & 
+                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0.,                 &
                  RAIN_ICE_PARAM%XACCLBDAS_MAX, RAIN_ICE_PARAM%XACCLBDAR_MAX, &
                  RAIN_ICE_PARAM%XACCLBDAS_MIN, RAIN_ICE_PARAM%XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_RACCS                                        )
@@ -1033,7 +1033,7 @@ IF( (KDRYLBDAG/=RAIN_ICE_PARAM%NDRYLBDAG) .OR. (KDRYLBDAS/=RAIN_ICE_PARAM%NDRYLB
     (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
     (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
     (PEGS/=ZEGS) .OR. (PBS/=XBS)                                       .OR. &
-    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS)         .OR. &
+    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. &
     (PDRYLBDAG_MAX/=RAIN_ICE_PARAM%XDRYLBDAG_MAX) .OR. (PDRYLBDAS_MAX/=RAIN_ICE_PARAM%XDRYLBDAS_MAX) .OR. &
     (PDRYLBDAG_MIN/=RAIN_ICE_PARAM%XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=RAIN_ICE_PARAM%XDRYLBDAS_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
diff --git a/src/common/aux/modd_les.F90 b/src/common/aux/modd_les.F90
index 389e2b1a35b949d75779e3bd8d384eeaf8967b63..d4c91693e2326d7ce29c37f158b16db813b7f7c9 100644
--- a/src/common/aux/modd_les.F90
+++ b/src/common/aux/modd_les.F90
@@ -53,6 +53,16 @@ USE MODD_PARAMETERS
 !
 IMPLICIT NONE
 !
+PUBLIC :: LES_ALLOCATE_DIM
+INTERFACE LES_ALLOCATE_DIM
+  MODULE PROCEDURE LES_ALLOCATE_1DIMX, LES_ALLOCATE_2DIMX, &
+                   LES_ALLOCATE_3DIMX, LES_ALLOCATE_4DIMX, &
+                   LES_ALLOCATE_3DIML, LES_ALLOCATE_4DIML, &
+                   LES_ALLOCATE_3DIMI, LES_ALLOCATE_1DIMI,  &
+                   LES_ALLOCATE_2DIMC
+END INTERFACE LES_ALLOCATE_DIM
+
+TYPE TLES_t
 !-------------------------------------------------------------------------------
 !
 !* namelist variables
@@ -70,9 +80,9 @@ REAL,    DIMENSION(900) :: XLES_ALTITUDES      ! alt.  levels for LES comp.
 INTEGER, DIMENSION(900) :: NSPECTRA_LEVELS     ! physical model levels for spectra comp.
 REAL,    DIMENSION(900) :: XSPECTRA_ALTITUDES  ! alt.  levels for spectra comp.
 !
-INTEGER, DIMENSION( 10) :: NLES_TEMP_SERIE_I   ! I, J and Z point
-INTEGER, DIMENSION( 10) :: NLES_TEMP_SERIE_J   ! localizations to
-INTEGER, DIMENSION( 10) :: NLES_TEMP_SERIE_Z   ! record temporal data
+INTEGER, DIMENSION(10) :: NLES_TEMP_SERIE_I   ! I, J and Z point
+INTEGER, DIMENSION(10) :: NLES_TEMP_SERIE_J   ! localizations to
+INTEGER, DIMENSION(10) :: NLES_TEMP_SERIE_Z   ! record temporal data
 
 CHARACTER(LEN=4) :: CLES_NORM_TYPE ! type of turbulence normalization
 CHARACTER(LEN=3) :: CBL_HEIGHT_DEF ! definition of the boundary layer height
@@ -452,7 +462,1373 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: XLES_PDF_RG   ! rg pdf
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: XLES_PDF_RT   ! rt  pdf
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: XLES_PDF_THL  ! thetal pdf
 !
+END TYPE TLES_t
+!
+TYPE(TLES_t), SAVE, TARGET :: TLES
 !
 !-------------------------------------------------------------------------------
 !
+!* namelist variables
+!
+LOGICAL, POINTER :: LLES_MEAN     => NULL() ! flag to activate the mean computations
+LOGICAL, POINTER :: LLES_RESOLVED => NULL() ! flag to activate the resolved var. computations
+LOGICAL, POINTER :: LLES_SUBGRID  => NULL() ! flag to activate the subgrid var.  computations
+LOGICAL, POINTER :: LLES_UPDRAFT  => NULL() ! flag to activate the computations in updrafts
+LOGICAL, POINTER :: LLES_DOWNDRAFT=> NULL() ! flag to activate the computations in downdrafts
+LOGICAL, POINTER :: LLES_SPECTRA  => NULL() ! flag to activate the spectra computations
+LOGICAL, POINTER :: LLES_PDF     => NULL() ! flag to activate the pdf computations
+!
+INTEGER, DIMENSION(:), POINTER :: NLES_LEVELS        => NULL() ! physical model levels for LES comp.
+REAL,    DIMENSION(:), POINTER :: XLES_ALTITUDES     => NULL() ! alt.  levels for LES comp.
+INTEGER, DIMENSION(:), POINTER :: NSPECTRA_LEVELS    => NULL() ! physical model levels for spectra comp.
+REAL,    DIMENSION(:), POINTER :: XSPECTRA_ALTITUDES => NULL() ! alt.  levels for spectra comp.
+!
+INTEGER, DIMENSION(:), POINTER :: NLES_TEMP_SERIE_I  => NULL() ! I, J and Z point
+INTEGER, DIMENSION(:), POINTER :: NLES_TEMP_SERIE_J  => NULL() ! localizations to
+INTEGER, DIMENSION(:), POINTER :: NLES_TEMP_SERIE_Z  => NULL() ! record temporal data
+
+CHARACTER(LEN=4), POINTER :: CLES_NORM_TYPE=> NULL() ! type of turbulence normalization
+CHARACTER(LEN=3), POINTER :: CBL_HEIGHT_DEF=> NULL() ! definition of the boundary layer height
+
+REAL, POINTER :: XLES_TEMP_SAMPLING   => NULL() ! temporal sampling between each computation
+REAL, POINTER :: XLES_TEMP_MEAN_START => NULL() ! time (in s) from the beginning of the simulation
+REAL, POINTER :: XLES_TEMP_MEAN_END   => NULL() ! for start and end of the temporal averaged comp.
+REAL, POINTER :: XLES_TEMP_MEAN_STEP  => NULL() ! time step for each averaging
+
+LOGICAL, POINTER :: LLES_CART_MASK    => NULL() ! flag to use a cartesian mask
+INTEGER, POINTER :: NLES_IINF         => NULL() ! definition of the cartesians mask in physical domain
+INTEGER, POINTER :: NLES_ISUP         => NULL() !     for NLES_CART_MODNBR model
+INTEGER, POINTER :: NLES_JINF         => NULL() !               "
+INTEGER, POINTER :: NLES_JSUP         => NULL() !               "
+LOGICAL, POINTER :: LLES_NEB_MASK     => NULL() ! flag to use a 2D nebulosity mask
+LOGICAL, POINTER :: LLES_CORE_MASK    => NULL() ! flag to use a 3D cloud core mask
+LOGICAL, POINTER :: LLES_MY_MASK      => NULL() ! flag to use its own mask (must be coded by user)
+INTEGER, POINTER :: NLES_MASKS_USER   => NULL() ! number of user masks for LES computations
+LOGICAL, POINTER :: LLES_CS_MASK      => NULL() ! flag to use conditional sampling mask
+INTEGER, POINTER :: NPDF        => NULL() ! number of pdf intervals
+!
+!-------------------------------------------------------------------------------
+!
+INTEGER, DIMENSION(:), POINTER :: NLESn_IINF=> NULL() ! definition of the cartesians mask in physical domain
+INTEGER, DIMENSION(:), POINTER :: NLESn_ISUP=> NULL() !          for all models
+INTEGER, DIMENSION(:), POINTER :: NLESn_JINF=> NULL() !               "
+INTEGER, DIMENSION(:), POINTER :: NLESn_JSUP=> NULL() !               "
+!
+CHARACTER(LEN=4), DIMENSION(:,:), POINTER :: CLES_LBCX=> NULL()
+! X boundary conditions for 2 points correlations computations for all models
+!
+CHARACTER(LEN=4), DIMENSION(:,:), POINTER :: CLES_LBCY=> NULL()
+! Y boundary conditions for 2 points correlations computations for all models
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL, POINTER :: LLES              => NULL() ! flag to compute the LES diagnostics
+!
+LOGICAL, POINTER :: LLES_CALL         => NULL() ! flag to compute the LES diagnostics at current
+!                            => NULL() ! time step
+!
+!
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_CART_MASK=> NULL()
+! 2D cartesian mask of the current model
+!
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_NEB_MASK=> NULL()
+! 2D nebulosity mask of the current model
+!
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_CORE_MASK=> NULL()
+! 2D surface precipitations mask of the current model
+!
+! 2D owner mask of the current model
+LOGICAL, DIMENSION(:,:,:,:), POINTER :: LLES_CURRENT_MY_MASKS=> NULL()
+!
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_CS1_MASK=> NULL()
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_CS2_MASK=> NULL()
+LOGICAL, DIMENSION(:,:,:), POINTER :: LLES_CURRENT_CS3_MASK=> NULL()
+! 2D conditional sampling mask of the current model
+!
+INTEGER, POINTER :: NLES_CURRENT_TCOUNT=> NULL()
+! current model LES time counter
+!
+INTEGER, POINTER :: NLES_CURRENT_TIMES=> NULL()
+! current model NLES_TIMES (number of LES samplings)
+!
+INTEGER, POINTER :: NLES_CURRENT_IINF=> NULL(), NLES_CURRENT_ISUP=> NULL(), &
+                    NLES_CURRENT_JINF=> NULL(), NLES_CURRENT_JSUP=> NULL()
+! coordinates (in physical domain) for write_diachro, set to NLESn_IINF(current model), etc...
+!
+REAL, POINTER :: XLES_CURRENT_DOMEGAX=> NULL(), XLES_CURRENT_DOMEGAY=> NULL()
+! minimum wavelength in spectra analysis
+!
+CHARACTER(LEN=4), DIMENSION(:), POINTER :: CLES_CURRENT_LBCX=> NULL()
+! current model X boundary conditions for 2 points correlations computations
+!
+CHARACTER(LEN=4), DIMENSION(:), POINTER :: CLES_CURRENT_LBCY=> NULL()
+! current model Y boundary conditions for 2 points correlations computations
+!
+REAL, DIMENSION(:),   POINTER :: XLES_CURRENT_Z=> NULL()
+! altitudes for diachro
+!
+REAL, POINTER :: XLES_CURRENT_ZS=> NULL()
+! orography (used for normalization of altitudes)
+!
+INTEGER, DIMENSION(:,:,:), POINTER :: NKLIN_CURRENT_LES=> NULL()
+! levels for vertical interpolation
+!
+REAL, DIMENSION(:,:,:), POINTER :: XCOEFLIN_CURRENT_LES=> NULL()
+! coefficients for vertical interpolation
+!
+INTEGER, DIMENSION(:,:,:), POINTER :: NKLIN_CURRENT_SPEC=> NULL()
+! levels for vertical interpolation
+!
+REAL, DIMENSION(:,:,:), POINTER :: XCOEFLIN_CURRENT_SPEC=> NULL()
+! coefficients for vertical interpolation
+!
+REAL,DIMENSION(:), POINTER :: XTIME_LES=> NULL()
+! time spent in subgrid LES computations in this time-step in TURB
+!
+!-------------------------------------------------------------------------------
+!
+!* normalization variables
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_M=> NULL()
+! normalization coefficient for distances (Meters)
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_K=> NULL()
+! normalization coefficient for temperatures (Kelvin)
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_S=> NULL()
+! normalization coefficient for times (Seconds)
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_RHO=> NULL()
+! normalization coefficient for densities
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_RV=> NULL()
+! normalization coefficient for mixing ratio
+!
+REAL, DIMENSION(:,:), POINTER :: XLES_NORM_SV=> NULL()
+! normalization coefficient for scalar variables
+!
+REAL, DIMENSION(:), POINTER :: XLES_NORM_P=> NULL()
+! normalization coefficient for pressure
+!
+!-------------------------------------------------------------------------------
+!
+!* monitoring variables
+!
+INTEGER, POINTER :: NLES_MASKS        => NULL() ! number of masks for LES computations
+INTEGER, POINTER :: NLES_K            => NULL() ! number of vertical levels for local diagnostics
+INTEGER, POINTER :: NSPECTRA_K        => NULL() ! number of vertical levels for spectra
+!
+CHARACTER(LEN=1), POINTER :: CLES_LEVEL_TYPE    => NULL() ! type of vertical levels for local diag.
+CHARACTER(LEN=1), POINTER :: CSPECTRA_LEVEL_TYPE=> NULL() ! type of vertical levels for spectra
+!
+!-------------------------------------------------------------------------------
+!
+!* subgrid variables for current model
+!
+!                                                                ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_W_SBG_WThl=> NULL() !  <w'w'Thl'>
+!                                                                _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_W_SBG_WRt => NULL() !  <w'w'Rt'>
+!                                                                _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_W_SBG_Thl2=> NULL() !  <w'Thl'2>
+!                                                                ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_W_SBG_Rt2 => NULL() !  <w'Rt'2>
+!                                                                _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_W_SBG_ThlRt=> NULL()!  <w'Thl'Rt'>
+!                                                                _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_W_SBG_WSv => NULL() !  <w'w'Sv'>
+!                                                                ____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_W_SBG_Sv2=> NULL() !  <w'Sv'2>
+!
+REAL, DIMENSION(:,:,:), POINTER :: XLES_SUBGRID_RCSIGS=> NULL() ! rc sigmas
+!
+REAL, DIMENSION(:,:,:), POINTER :: XLES_SUBGRID_RCSIGC=> NULL() ! rc sigmac
+!                                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_U_SBG_UaU  => NULL() !  <du'/dxa ua'u'>
+!                                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_V_SBG_UaV  => NULL() !  <dv'/dxa ua'v'>
+!                                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_W_SBG_UaW  => NULL() !  <dw'/dxa ua'w'>
+!                                                                            _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_W_SBG_UaThl=> NULL() !  <dw'/dxa ua'Thl'>
+!                                                                              _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Thl_SBG_UaW=> NULL() !  <dThl'/dxa ua'w'>
+!                                                                              ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddz_Thl_SBG_W2  => NULL() !  <dThl'/dz w'2>
+!                                                                            ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_W_SBG_UaRt => NULL() !  <dw'/dxa ua'Rt'>
+!                                                                             _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Rt_SBG_UaW => NULL() !  <dRt'/dxa ua'w'>
+!                                                                             ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddz_Rt_SBG_W2   => NULL() !  <dRt'/dz w'2>
+!                                                                              ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Thl_SBG_UaRt=> NULL()!  <dThl'/dxa ua'Rt'>
+!                                                                             _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Rt_SBG_UaThl=> NULL()!  <dRt'/dxa ua'Thl'>
+!                                                                              _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Thl_SBG_UaThl=> NULL()! <dThl'/dxa ua'Thl'>
+!                                                                             ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_RES_ddxa_Rt_SBG_UaRt=> NULL() !  <dRt'/dxa ua'Rt'>
+!                                                                              ______
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_ddxa_W_SBG_UaSv => NULL() ! <dw'/dxa ua'Sv'>
+!                                                                               _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_ddxa_Sv_SBG_UaW => NULL() ! <dSv'/dxa ua'w'>
+!                                                                              ___
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_ddz_Sv_SBG_W2   => NULL() ! <dSv'/dz w'2>
+!                                                                               ______
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_RES_ddxa_Sv_SBG_UaSv=> NULL() ! <dSv'/dxa ua'Sv'>
+!
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_U2   => NULL() ! <u'2>
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_V2   => NULL() ! <v'2>
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_W2   => NULL() ! <w'2>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Thl2 => NULL() ! <Thl'2>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Rt2  => NULL() ! <Rt'2>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Rc2  => NULL() ! <Rc'2>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Ri2  => NULL() ! <Ri'2>
+!                                                            _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_ThlRt=> NULL() ! <Thl'Rt'>
+!                                                             ____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_Sv2  => NULL() ! <Sv'2>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_UV   => NULL() ! <u'v'>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WU   => NULL() ! <w'u'>
+!                                                            ____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WV   => NULL() ! <w'v'>
+!                                                            ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_UThl => NULL() ! <u'Thl'>
+!                                                            ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_VThl => NULL() ! <v'Thl'>
+!                                                            ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WThl => NULL() ! <w'Thl'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_URt  => NULL() ! <u'Rt'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_VRt  => NULL() ! <v'Rt'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WRt  => NULL() ! <w'Rt'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_URc  => NULL() ! <u'Rc'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_VRc  => NULL() ! <v'Rc'>
+!                                                            _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WRc  => NULL() ! <w'Rc'>
+!                                                            _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_USv=> NULL() ! <u'Sv'>
+!                                                            _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_VSv=> NULL() ! <v'Sv'>
+!                                                            _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_WSv=> NULL() ! <w'Sv'>
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_UTke => NULL() ! <u'e>
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_VTke => NULL() ! <v'e>
+!                                                            ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WTke => NULL() ! <w'e>
+!                                                                   ___
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_ddz_WTke => NULL() !  <dw'e/dz>
+!                                                             ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WThv  => NULL() ! <w'Thv'>
+!                                                             ________
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_ThlThv=> NULL() ! <Thl'Thv'>
+!                                                             _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RtThv => NULL() ! <Rt'Thv'>
+!                                                             _______
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_SvThv => NULL() ! <Sv'Thv'>
+!                                                             ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_W2Thl => NULL() ! <w'2Thl>
+!                                                              _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_W2Rt  => NULL() ! <w'2Rt>
+!                                                              _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_W2Sv  => NULL() ! <w'2Sv>
+!                                                             _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WThlRt=> NULL() ! <w'ThlRt>
+!                                                             ______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WThl2 => NULL() ! <w'Thl2>
+!                                                             _____
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WRt2  => NULL() ! <w'Rt2>
+!                                                              _____
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_WSv2  => NULL() ! <w'Sv2>
+!                                                               _______
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_DISS_Tke=> NULL() ! <epsilon>
+!                                                                 ____________
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_DISS_Thl2=> NULL() ! <epsilon_Thl2>
+!                                                                 ___________
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_DISS_Rt2 => NULL() ! <epsilon_Rt2>
+!                                                                ______________
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_DISS_ThlRt=> NULL()! <epsilon_ThlRt>
+!                                                                ___________
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_DISS_Sv2 => NULL() ! <epsilon_Sv2>
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WP    => NULL() ! <w'p'>
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_ThlPz => NULL() ! <Thl'dp'/dz>
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RtPz  => NULL() ! <Rt'dp'/dz>
+!
+REAL, DIMENSION(:,:,:,:), POINTER :: X_LES_SUBGRID_SvPz  => NULL() ! <Sv'dp'/dz>
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_PHI3  => NULL() ! phi3
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_PSI3  => NULL() ! psi3
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_LMix  => NULL() ! mixing length
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_LDiss => NULL() ! dissipative length
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Km    => NULL() ! eddy diffusivity for momentum
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_Kh    => NULL() ! eddy diffusivity for heat
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_THLUP_MF => NULL() ! Thl of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RTUP_MF  => NULL() ! Rt of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RVUP_MF  => NULL() ! Rv of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RCUP_MF  => NULL() ! Rc of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_RIUP_MF  => NULL() ! Ri of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WUP_MF   => NULL() ! Thl of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_MASSFLUX => NULL() ! Mass Flux
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_DETR     => NULL() ! Detrainment
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_ENTR     => NULL() ! Entrainment
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_FRACUP   => NULL() ! Updraft Fraction
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_THVUP_MF => NULL() ! Thv of the Updraft
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WTHLMF=> NULL() ! Flux of thl
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WRTMF => NULL() ! Flux of rt
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WTHVMF=> NULL() ! Flux of thv
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WUMF  => NULL() ! Flux of u
+!
+REAL, DIMENSION(:,:,:), POINTER :: X_LES_SUBGRID_WVMF  => NULL() ! Flux of v
+!
+!* surface variables
+!
+REAL, DIMENSION(:), POINTER :: X_LES_USTAR    => NULL() ! local u* temporal series
+REAL, DIMENSION(:), POINTER :: X_LES_UW0      => NULL() ! uw temporal series
+REAL, DIMENSION(:), POINTER :: X_LES_VW0      => NULL() ! vw temporal series
+REAL, DIMENSION(:), POINTER :: X_LES_Q0       => NULL() ! Qo temporal series
+REAL, DIMENSION(:), POINTER :: X_LES_E0       => NULL() ! Eo temporal series
+REAL, DIMENSION(:,:), POINTER :: X_LES_SV0    => NULL() ! scalar surface fluxes
+!
+!* pdf variables
+REAL                             , POINTER :: XRV_PDF_MIN      => NULL() ! min of rv pdf
+REAL                             , POINTER :: XRV_PDF_MAX      => NULL() ! max of rv pdf
+REAL                             , POINTER :: XTH_PDF_MIN      => NULL() ! min of theta pdf
+REAL                             , POINTER :: XTH_PDF_MAX      => NULL() ! max of theta pdf
+REAL                             , POINTER :: XW_PDF_MIN       => NULL() ! min of w pdf
+REAL                             , POINTER :: XW_PDF_MAX       => NULL() ! max of w pdf
+REAL                             , POINTER :: XTHV_PDF_MIN     => NULL() ! min of thetav pdf
+REAL                             , POINTER :: XTHV_PDF_MAX     => NULL() ! max of thetav pdf
+REAL                             , POINTER :: XRC_PDF_MIN      => NULL() ! min of rc pdf
+REAL                             , POINTER :: XRC_PDF_MAX      => NULL() ! max of rc pdf
+REAL                             , POINTER :: XRR_PDF_MIN      => NULL() ! min of rr pdf
+REAL                             , POINTER :: XRR_PDF_MAX      => NULL() ! max of rr pdf
+REAL                             , POINTER :: XRI_PDF_MIN      => NULL() ! min of ri pdf
+REAL                             , POINTER :: XRI_PDF_MAX      => NULL() ! max of ri pdf
+REAL                             , POINTER :: XRS_PDF_MIN      => NULL() ! min of rs pdf
+REAL                             , POINTER :: XRS_PDF_MAX      => NULL() ! max of rs pdf
+REAL                             , POINTER :: XRG_PDF_MIN      => NULL() ! min of rg pdf
+REAL                             , POINTER :: XRG_PDF_MAX      => NULL() ! max of rg pdf
+REAL                             , POINTER :: XRT_PDF_MIN      => NULL() ! min of rt pdf
+REAL                             , POINTER :: XRT_PDF_MAX      => NULL() ! max of rt pdf
+REAL                             , POINTER :: XTHL_PDF_MIN     => NULL() ! min of thetal pdf
+REAL                             , POINTER :: XTHL_PDF_MAX     => NULL() ! max of thetal pdf
+!-------------------------------------------------------------------------------
+!* pdf distribution
+!
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RV  => NULL() ! rv  pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_TH  => NULL() ! theta pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_W   => NULL() ! w  pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_THV => NULL() ! thetav pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RC  => NULL() ! rc  pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RR  => NULL() ! rr pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RI  => NULL() ! ri  pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RS  => NULL() ! rs pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RG  => NULL() ! rg pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_RT  => NULL() ! rt  pdf
+REAL, DIMENSION(:,:,:,:), POINTER :: XLES_PDF_THL => NULL() ! thetal pdf
+!-------------------------------------------------------------------------------
+!!
+CONTAINS
+SUBROUTINE LES_ASSOCIATE()
+  ! Associate all LES non-allocatable variables to the TYPE LES
+  IMPLICIT NONE
+  NLES_LEVELS => TLES%NLES_LEVELS
+  XLES_ALTITUDES => TLES%XLES_ALTITUDES
+  NSPECTRA_LEVELS => TLES%NSPECTRA_LEVELS
+  XSPECTRA_ALTITUDES => TLES%XSPECTRA_ALTITUDES
+  XTIME_LES => TLES%XTIME_LES
+  CLES_LBCX => TLES%CLES_LBCX
+  CLES_LBCY => TLES%CLES_LBCY
+  CLES_CURRENT_LBCY => TLES%CLES_CURRENT_LBCY
+  CLES_CURRENT_LBCX => TLES%CLES_CURRENT_LBCX
+  NLESn_IINF => TLES%NLESn_IINF
+  NLESn_ISUP => TLES%NLESn_ISUP
+  NLESn_JINF => TLES%NLESn_JINF
+  NLESn_JSUP => TLES%NLESn_JSUP
+  NLES_TEMP_SERIE_I => TLES%NLES_TEMP_SERIE_I
+  NLES_TEMP_SERIE_J => TLES%NLES_TEMP_SERIE_J
+  NLES_TEMP_SERIE_Z => TLES%NLES_TEMP_SERIE_Z
+  LLES_MEAN => TLES%LLES_MEAN
+  LLES_RESOLVED => TLES%LLES_RESOLVED
+  LLES_SUBGRID => TLES%LLES_SUBGRID
+  LLES_UPDRAFT => TLES%LLES_UPDRAFT
+  LLES_DOWNDRAFT => TLES%LLES_DOWNDRAFT
+  LLES_SPECTRA => TLES%LLES_SPECTRA
+  LLES_PDF => TLES%LLES_PDF
+  CLES_NORM_TYPE => TLES%CLES_NORM_TYPE
+  CBL_HEIGHT_DEF => TLES%CBL_HEIGHT_DEF
+  XLES_TEMP_SAMPLING => TLES%XLES_TEMP_SAMPLING
+  XLES_TEMP_MEAN_START => TLES%XLES_TEMP_MEAN_START
+  XLES_TEMP_MEAN_END => TLES%XLES_TEMP_MEAN_END
+  XLES_TEMP_MEAN_STEP => TLES%XLES_TEMP_MEAN_STEP
+  LLES_CART_MASK => TLES%LLES_CART_MASK
+  NLES_IINF => TLES%NLES_IINF
+  NLES_ISUP => TLES%NLES_ISUP
+  NLES_JINF => TLES%NLES_JINF
+  NLES_JSUP => TLES%NLES_JSUP
+  LLES_NEB_MASK => TLES%LLES_NEB_MASK
+  LLES_CORE_MASK => TLES%LLES_CORE_MASK
+  LLES_MY_MASK => TLES%LLES_MY_MASK
+  NLES_MASKS_USER => TLES%NLES_MASKS_USER
+  LLES_CS_MASK => TLES%LLES_CS_MASK
+  NPDF => TLES%NPDF
+  LLES => TLES%LLES
+  LLES_CALL => TLES%LLES_CALL
+  NLES_CURRENT_TCOUNT => TLES%NLES_CURRENT_TCOUNT
+  NLES_CURRENT_TIMES => TLES%NLES_CURRENT_TIMES
+  NLES_CURRENT_IINF => TLES%NLES_CURRENT_IINF
+  NLES_CURRENT_ISUP => TLES%NLES_CURRENT_ISUP
+  NLES_CURRENT_JINF => TLES%NLES_CURRENT_JINF
+  NLES_CURRENT_JSUP => TLES%NLES_CURRENT_JSUP
+  XLES_CURRENT_DOMEGAX => TLES%XLES_CURRENT_DOMEGAX
+  XLES_CURRENT_DOMEGAY => TLES%XLES_CURRENT_DOMEGAY
+  XLES_CURRENT_ZS => TLES%XLES_CURRENT_ZS
+  NLES_MASKS => TLES%NLES_MASKS
+  NLES_K => TLES%NLES_K
+  NSPECTRA_K => TLES%NSPECTRA_K
+  CLES_LEVEL_TYPE => TLES%CLES_LEVEL_TYPE
+  CSPECTRA_LEVEL_TYPE => TLES%CSPECTRA_LEVEL_TYPE
+  XRV_PDF_MIN => TLES%XRV_PDF_MIN
+  XRV_PDF_MAX => TLES%XRV_PDF_MAX
+  XTH_PDF_MIN => TLES%XTH_PDF_MIN
+  XTH_PDF_MAX => TLES%XTH_PDF_MAX
+  XW_PDF_MIN => TLES%XW_PDF_MIN
+  XW_PDF_MAX => TLES%XW_PDF_MAX
+  XTHV_PDF_MIN => TLES%XTHV_PDF_MIN
+  XTHV_PDF_MAX => TLES%XTHV_PDF_MAX
+  XRC_PDF_MIN => TLES%XRC_PDF_MIN
+  XRC_PDF_MAX => TLES%XRC_PDF_MAX
+  XRR_PDF_MIN => TLES%XRR_PDF_MIN
+  XRR_PDF_MAX => TLES%XRR_PDF_MAX
+  XRI_PDF_MIN => TLES%XRI_PDF_MIN
+  XRI_PDF_MAX => TLES%XRI_PDF_MAX
+  XRS_PDF_MIN => TLES%XRS_PDF_MIN
+  XRS_PDF_MAX => TLES%XRS_PDF_MAX
+  XRG_PDF_MIN => TLES%XRG_PDF_MIN
+  XRG_PDF_MAX => TLES%XRG_PDF_MAX
+  XRT_PDF_MIN => TLES%XRT_PDF_MIN
+  XRT_PDF_MAX => TLES%XRT_PDF_MAX
+  XTHL_PDF_MIN => TLES%XTHL_PDF_MIN
+  XTHL_PDF_MAX => TLES%XTHL_PDF_MAX
+END SUBROUTINE LES_ASSOCIATE
+!
+SUBROUTINE LES_ALLOCATE(HNAME,NDIMS)
+  IMPLICIT NONE
+  CHARACTER(LEN=*), INTENT(IN) :: HNAME
+  INTEGER, DIMENSION(:) :: NDIMS
+  !
+  SELECT CASE(HNAME)
+  !
+  CASE('LLES_CURRENT_CART_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_CART_MASK,NDIMS)
+    LLES_CURRENT_CART_MASK=>TLES%LLES_CURRENT_CART_MASK
+  CASE('LLES_CURRENT_NEB_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_NEB_MASK,NDIMS)
+    LLES_CURRENT_NEB_MASK=>TLES%LLES_CURRENT_NEB_MASK
+  CASE('LLES_CURRENT_CORE_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_CORE_MASK,NDIMS)
+    LLES_CURRENT_CORE_MASK=>TLES%LLES_CURRENT_CORE_MASK
+  CASE('LLES_CURRENT_MY_MASKS')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_MY_MASKS,NDIMS)
+    LLES_CURRENT_MY_MASKS=>TLES%LLES_CURRENT_MY_MASKS
+  CASE('LLES_CURRENT_CS1_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_CS1_MASK,NDIMS)
+    LLES_CURRENT_CS1_MASK=>TLES%LLES_CURRENT_CS1_MASK
+  CASE('LLES_CURRENT_CS2_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_CS2_MASK,NDIMS)
+    LLES_CURRENT_CS2_MASK=>TLES%LLES_CURRENT_CS2_MASK
+  CASE('LLES_CURRENT_CS3_MASK')
+    CALL LES_ALLOCATE_DIM(TLES%LLES_CURRENT_CS3_MASK,NDIMS)
+    LLES_CURRENT_CS3_MASK=>TLES%LLES_CURRENT_CS3_MASK
+  CASE('XLES_CURRENT_Z')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_CURRENT_Z,NDIMS)
+    XLES_CURRENT_Z=>TLES%XLES_CURRENT_Z
+  CASE('NKLIN_CURRENT_LES')
+    CALL LES_ALLOCATE_DIM(TLES%NKLIN_CURRENT_LES,NDIMS)
+    NKLIN_CURRENT_LES=>TLES%NKLIN_CURRENT_LES
+  CASE('XCOEFLIN_CURRENT_LES')
+    CALL LES_ALLOCATE_DIM(TLES%XCOEFLIN_CURRENT_LES,NDIMS)
+    XCOEFLIN_CURRENT_LES=>TLES%XCOEFLIN_CURRENT_LES
+  CASE('NKLIN_CURRENT_SPEC')
+    CALL LES_ALLOCATE_DIM(TLES%NKLIN_CURRENT_SPEC,NDIMS)
+    NKLIN_CURRENT_SPEC=>TLES%NKLIN_CURRENT_SPEC
+  CASE('XCOEFLIN_CURRENT_SPEC')
+    CALL LES_ALLOCATE_DIM(TLES%XCOEFLIN_CURRENT_SPEC,NDIMS)
+    XCOEFLIN_CURRENT_SPEC=>TLES%XCOEFLIN_CURRENT_SPEC
+  CASE('XLES_NORM_M')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_M,NDIMS)
+    XLES_NORM_M=>TLES%XLES_NORM_M
+  CASE('XLES_NORM_K')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_K,NDIMS)
+    XLES_NORM_K=>TLES%XLES_NORM_K
+  CASE('XLES_NORM_S')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_S,NDIMS)
+    XLES_NORM_S=>TLES%XLES_NORM_S
+  CASE('XLES_NORM_RHO')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_RHO,NDIMS)
+    XLES_NORM_RHO=>TLES%XLES_NORM_RHO
+  CASE('XLES_NORM_RV')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_RV,NDIMS)
+    XLES_NORM_RV=>TLES%XLES_NORM_RV
+  CASE('XLES_NORM_SV')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_SV,NDIMS)
+    XLES_NORM_SV=>TLES%XLES_NORM_SV
+  CASE('XLES_NORM_P')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_NORM_P,NDIMS)
+    XLES_NORM_P=>TLES%XLES_NORM_P
+  CASE('X_LES_RES_W_SBG_WThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_WThl,NDIMS)
+    X_LES_RES_W_SBG_WThl=>TLES%X_LES_RES_W_SBG_WThl
+  CASE('X_LES_RES_W_SBG_WRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_WRt,NDIMS)
+    X_LES_RES_W_SBG_WRt=>TLES%X_LES_RES_W_SBG_WRt
+  CASE('X_LES_RES_W_SBG_Thl2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_Thl2,NDIMS)
+    X_LES_RES_W_SBG_Thl2=>TLES%X_LES_RES_W_SBG_Thl2
+  CASE('X_LES_RES_W_SBG_Rt2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_Rt2,NDIMS)
+    X_LES_RES_W_SBG_Rt2=>TLES%X_LES_RES_W_SBG_Rt2
+  CASE('X_LES_RES_W_SBG_ThlRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_ThlRt,NDIMS)
+    X_LES_RES_W_SBG_ThlRt=>TLES%X_LES_RES_W_SBG_ThlRt
+  CASE('X_LES_RES_W_SBG_WSv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_WSv,NDIMS)
+    X_LES_RES_W_SBG_WSv=>TLES%X_LES_RES_W_SBG_WSv
+  CASE('X_LES_RES_W_SBG_Sv2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_W_SBG_Sv2,NDIMS)
+    X_LES_RES_W_SBG_Sv2=>TLES%X_LES_RES_W_SBG_Sv2
+  CASE('XLES_SUBGRID_RCSIGS')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_SUBGRID_RCSIGS,NDIMS)
+    XLES_SUBGRID_RCSIGS=>TLES%XLES_SUBGRID_RCSIGS
+  CASE('XLES_SUBGRID_RCSIGC')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_SUBGRID_RCSIGC,NDIMS)
+    XLES_SUBGRID_RCSIGC=>TLES%XLES_SUBGRID_RCSIGC
+  CASE('X_LES_RES_ddxa_U_SBG_UaU')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_U_SBG_UaU,NDIMS)
+    X_LES_RES_ddxa_U_SBG_UaU=>TLES%X_LES_RES_ddxa_U_SBG_UaU
+  CASE('X_LES_RES_ddxa_V_SBG_UaV')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_V_SBG_UaV,NDIMS)
+    X_LES_RES_ddxa_V_SBG_UaV=>TLES%X_LES_RES_ddxa_V_SBG_UaV
+  CASE('X_LES_RES_ddxa_W_SBG_UaW')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_W_SBG_UaW,NDIMS)
+    X_LES_RES_ddxa_W_SBG_UaW=>TLES%X_LES_RES_ddxa_W_SBG_UaW
+  CASE('X_LES_RES_ddxa_W_SBG_UaThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_W_SBG_UaThl,NDIMS)
+    X_LES_RES_ddxa_W_SBG_UaThl=>TLES%X_LES_RES_ddxa_W_SBG_UaThl
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaW')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Thl_SBG_UaW,NDIMS)
+    X_LES_RES_ddxa_Thl_SBG_UaW=>TLES%X_LES_RES_ddxa_Thl_SBG_UaW
+  CASE('X_LES_RES_ddz_Thl_SBG_W2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddz_Thl_SBG_W2,NDIMS)
+    X_LES_RES_ddz_Thl_SBG_W2=>TLES%X_LES_RES_ddz_Thl_SBG_W2
+  CASE('X_LES_RES_ddxa_W_SBG_UaRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_W_SBG_UaRt,NDIMS)
+    X_LES_RES_ddxa_W_SBG_UaRt=>TLES%X_LES_RES_ddxa_W_SBG_UaRt
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaW')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Rt_SBG_UaW,NDIMS)
+    X_LES_RES_ddxa_Rt_SBG_UaW=>TLES%X_LES_RES_ddxa_Rt_SBG_UaW
+  CASE('X_LES_RES_ddz_Rt_SBG_W2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddz_Rt_SBG_W2,NDIMS)
+    X_LES_RES_ddz_Rt_SBG_W2=>TLES%X_LES_RES_ddz_Rt_SBG_W2
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Thl_SBG_UaRt,NDIMS)
+    X_LES_RES_ddxa_Thl_SBG_UaRt=>TLES%X_LES_RES_ddxa_Thl_SBG_UaRt
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Rt_SBG_UaThl,NDIMS)
+    X_LES_RES_ddxa_Rt_SBG_UaThl=>TLES%X_LES_RES_ddxa_Rt_SBG_UaThl
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Thl_SBG_UaThl,NDIMS)
+    X_LES_RES_ddxa_Thl_SBG_UaThl=>TLES%X_LES_RES_ddxa_Thl_SBG_UaThl
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Rt_SBG_UaRt,NDIMS)
+    X_LES_RES_ddxa_Rt_SBG_UaRt=>TLES%X_LES_RES_ddxa_Rt_SBG_UaRt
+  CASE('X_LES_RES_ddxa_W_SBG_UaSv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_W_SBG_UaSv,NDIMS)
+    X_LES_RES_ddxa_W_SBG_UaSv=>TLES%X_LES_RES_ddxa_W_SBG_UaSv
+  CASE('X_LES_RES_ddxa_Sv_SBG_UaW')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Sv_SBG_UaW,NDIMS)
+    X_LES_RES_ddxa_Sv_SBG_UaW=>TLES%X_LES_RES_ddxa_Sv_SBG_UaW
+  CASE('X_LES_RES_ddz_Sv_SBG_W2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddz_Sv_SBG_W2,NDIMS)
+    X_LES_RES_ddz_Sv_SBG_W2=>TLES%X_LES_RES_ddz_Sv_SBG_W2
+  CASE('X_LES_RES_ddxa_Sv_SBG_UaSv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_RES_ddxa_Sv_SBG_UaSv,NDIMS)
+    X_LES_RES_ddxa_Sv_SBG_UaSv=>TLES%X_LES_RES_ddxa_Sv_SBG_UaSv
+  CASE('X_LES_SUBGRID_U2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_U2,NDIMS)
+    X_LES_SUBGRID_U2=>TLES%X_LES_SUBGRID_U2
+  CASE('X_LES_SUBGRID_V2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_V2,NDIMS)
+    X_LES_SUBGRID_V2=>TLES%X_LES_SUBGRID_V2
+  CASE('X_LES_SUBGRID_W2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_W2,NDIMS)
+    X_LES_SUBGRID_W2=>TLES%X_LES_SUBGRID_W2
+  CASE('X_LES_SUBGRID_Thl2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Thl2,NDIMS)
+    X_LES_SUBGRID_Thl2=>TLES%X_LES_SUBGRID_Thl2
+  CASE('X_LES_SUBGRID_Rt2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Rt2,NDIMS)
+    X_LES_SUBGRID_Rt2=>TLES%X_LES_SUBGRID_Rt2
+  CASE('X_LES_SUBGRID_Rc2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Rc2,NDIMS)
+    X_LES_SUBGRID_Rc2=>TLES%X_LES_SUBGRID_Rc2
+  CASE('X_LES_SUBGRID_Ri2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Ri2,NDIMS)
+    X_LES_SUBGRID_Ri2=>TLES%X_LES_SUBGRID_Ri2
+  CASE('X_LES_SUBGRID_ThlRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_ThlRt,NDIMS)
+    X_LES_SUBGRID_ThlRt=>TLES%X_LES_SUBGRID_ThlRt
+  CASE('X_LES_SUBGRID_Sv2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Sv2,NDIMS)
+    X_LES_SUBGRID_Sv2=>TLES%X_LES_SUBGRID_Sv2
+  CASE('X_LES_SUBGRID_UV')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_UV,NDIMS)
+    X_LES_SUBGRID_UV=>TLES%X_LES_SUBGRID_UV
+  CASE('X_LES_SUBGRID_WU')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WU,NDIMS)
+    X_LES_SUBGRID_WU=>TLES%X_LES_SUBGRID_WU
+  CASE('X_LES_SUBGRID_WV')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WV,NDIMS)
+    X_LES_SUBGRID_WV=>TLES%X_LES_SUBGRID_WV
+  CASE('X_LES_SUBGRID_UThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_UThl,NDIMS)
+    X_LES_SUBGRID_UThl=>TLES%X_LES_SUBGRID_UThl
+  CASE('X_LES_SUBGRID_VThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_VThl,NDIMS)
+    X_LES_SUBGRID_VThl=>TLES%X_LES_SUBGRID_VThl
+  CASE('X_LES_SUBGRID_WThl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WThl,NDIMS)
+    X_LES_SUBGRID_WThl=>TLES%X_LES_SUBGRID_WThl
+  CASE('X_LES_SUBGRID_URt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_URt,NDIMS)
+    X_LES_SUBGRID_URt=>TLES%X_LES_SUBGRID_URt
+  CASE('X_LES_SUBGRID_VRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_VRt,NDIMS)
+    X_LES_SUBGRID_VRt=>TLES%X_LES_SUBGRID_VRt
+  CASE('X_LES_SUBGRID_WRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WRt,NDIMS)
+    X_LES_SUBGRID_WRt=>TLES%X_LES_SUBGRID_WRt
+  CASE('X_LES_SUBGRID_URc')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_URc,NDIMS)
+    X_LES_SUBGRID_URc=>TLES%X_LES_SUBGRID_URc
+  CASE('X_LES_SUBGRID_VRc')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_VRc,NDIMS)
+    X_LES_SUBGRID_VRc=>TLES%X_LES_SUBGRID_VRc
+  CASE('X_LES_SUBGRID_WRc')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WRc,NDIMS)
+    X_LES_SUBGRID_WRc=>TLES%X_LES_SUBGRID_WRc
+  CASE('X_LES_SUBGRID_USv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_USv,NDIMS)
+    X_LES_SUBGRID_USv=>TLES%X_LES_SUBGRID_USv
+  CASE('X_LES_SUBGRID_VSv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_VSv,NDIMS)
+    X_LES_SUBGRID_VSv=>TLES%X_LES_SUBGRID_VSv
+  CASE('X_LES_SUBGRID_WSv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WSv,NDIMS)
+    X_LES_SUBGRID_WSv=>TLES%X_LES_SUBGRID_WSv
+  CASE('X_LES_SUBGRID_UTke')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_UTke,NDIMS)
+    X_LES_SUBGRID_UTke=>TLES%X_LES_SUBGRID_UTke
+  CASE('X_LES_SUBGRID_VTke')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_VTke,NDIMS)
+    X_LES_SUBGRID_VTke=>TLES%X_LES_SUBGRID_VTke
+  CASE('X_LES_SUBGRID_WTke')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WTke,NDIMS)
+    X_LES_SUBGRID_WTke=>TLES%X_LES_SUBGRID_WTke
+  CASE('X_LES_SUBGRID_ddz_WTke')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_ddz_WTke,NDIMS)
+    X_LES_SUBGRID_ddz_WTke=>TLES%X_LES_SUBGRID_ddz_WTke
+  CASE('X_LES_SUBGRID_WThv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WThv,NDIMS)
+    X_LES_SUBGRID_WThv=>TLES%X_LES_SUBGRID_WThv
+  CASE('X_LES_SUBGRID_ThlThv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_ThlThv,NDIMS)
+    X_LES_SUBGRID_ThlThv=>TLES%X_LES_SUBGRID_ThlThv
+  CASE('X_LES_SUBGRID_RtThv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RtThv,NDIMS)
+    X_LES_SUBGRID_RtThv=>TLES%X_LES_SUBGRID_RtThv
+  CASE('X_LES_SUBGRID_SvThv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_SvThv,NDIMS)
+    X_LES_SUBGRID_SvThv=>TLES%X_LES_SUBGRID_SvThv
+  CASE('X_LES_SUBGRID_W2Thl')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_W2Thl,NDIMS)
+    X_LES_SUBGRID_W2Thl=>TLES%X_LES_SUBGRID_W2Thl
+  CASE('X_LES_SUBGRID_W2Rt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_W2Rt,NDIMS)
+    X_LES_SUBGRID_W2Rt=>TLES%X_LES_SUBGRID_W2Rt
+  CASE('X_LES_SUBGRID_W2Sv')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_W2Sv,NDIMS)
+    X_LES_SUBGRID_W2Sv=>TLES%X_LES_SUBGRID_W2Sv
+  CASE('X_LES_SUBGRID_WThlRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WThlRt,NDIMS)
+    X_LES_SUBGRID_WThlRt=>TLES%X_LES_SUBGRID_WThlRt
+  CASE('X_LES_SUBGRID_WThl2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WThl2,NDIMS)
+    X_LES_SUBGRID_WThl2=>TLES%X_LES_SUBGRID_WThl2
+  CASE('X_LES_SUBGRID_WRt2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WRt2,NDIMS)
+    X_LES_SUBGRID_WRt2=>TLES%X_LES_SUBGRID_WRt2
+  CASE('X_LES_SUBGRID_WSv2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WSv2,NDIMS)
+    X_LES_SUBGRID_WSv2=>TLES%X_LES_SUBGRID_WSv2
+  CASE('X_LES_SUBGRID_DISS_Tke')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DISS_Tke,NDIMS)
+    X_LES_SUBGRID_DISS_Tke=>TLES%X_LES_SUBGRID_DISS_Tke
+  CASE('X_LES_SUBGRID_DISS_Thl2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DISS_Thl2,NDIMS)
+    X_LES_SUBGRID_DISS_Thl2=>TLES%X_LES_SUBGRID_DISS_Thl2
+  CASE('X_LES_SUBGRID_DISS_Rt2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DISS_Rt2,NDIMS)
+    X_LES_SUBGRID_DISS_Rt2=>TLES%X_LES_SUBGRID_DISS_Rt2
+  CASE('X_LES_SUBGRID_DISS_ThlRt')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DISS_ThlRt,NDIMS)
+    X_LES_SUBGRID_DISS_ThlRt=>TLES%X_LES_SUBGRID_DISS_ThlRt
+  CASE('X_LES_SUBGRID_DISS_Sv2')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DISS_Sv2,NDIMS)
+    X_LES_SUBGRID_DISS_Sv2=>TLES%X_LES_SUBGRID_DISS_Sv2
+  CASE('X_LES_SUBGRID_WP')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WP,NDIMS)
+    X_LES_SUBGRID_WP=>TLES%X_LES_SUBGRID_WP
+  CASE('X_LES_SUBGRID_ThlPz')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_ThlPz,NDIMS)
+    X_LES_SUBGRID_ThlPz=>TLES%X_LES_SUBGRID_ThlPz
+  CASE('X_LES_SUBGRID_RtPz')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RtPz,NDIMS)
+    X_LES_SUBGRID_RtPz=>TLES%X_LES_SUBGRID_RtPz
+  CASE('X_LES_SUBGRID_SvPz')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_SvPz,NDIMS)
+    X_LES_SUBGRID_SvPz=>TLES%X_LES_SUBGRID_SvPz
+  CASE('X_LES_SUBGRID_PHI3')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_PHI3,NDIMS)
+    X_LES_SUBGRID_PHI3=>TLES%X_LES_SUBGRID_PHI3
+  CASE('X_LES_SUBGRID_PSI3')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_PSI3,NDIMS)
+    X_LES_SUBGRID_PSI3=>TLES%X_LES_SUBGRID_PSI3
+  CASE('X_LES_SUBGRID_LMix')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_LMix,NDIMS)
+    X_LES_SUBGRID_LMix=>TLES%X_LES_SUBGRID_LMix
+  CASE('X_LES_SUBGRID_LDiss')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_LDiss,NDIMS)
+    X_LES_SUBGRID_LDiss=>TLES%X_LES_SUBGRID_LDiss
+  CASE('X_LES_SUBGRID_Km')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Km,NDIMS)
+    X_LES_SUBGRID_Km=>TLES%X_LES_SUBGRID_Km
+  CASE('X_LES_SUBGRID_Kh')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_Kh,NDIMS)
+    X_LES_SUBGRID_Kh=>TLES%X_LES_SUBGRID_Kh
+  CASE('X_LES_SUBGRID_THLUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_THLUP_MF,NDIMS)
+    X_LES_SUBGRID_THLUP_MF=>TLES%X_LES_SUBGRID_THLUP_MF
+  CASE('X_LES_SUBGRID_RTUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RTUP_MF,NDIMS)
+    X_LES_SUBGRID_RTUP_MF=>TLES%X_LES_SUBGRID_RTUP_MF
+  CASE('X_LES_SUBGRID_RVUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RVUP_MF,NDIMS)
+    X_LES_SUBGRID_RVUP_MF=>TLES%X_LES_SUBGRID_RVUP_MF
+  CASE('X_LES_SUBGRID_RCUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RCUP_MF,NDIMS)
+    X_LES_SUBGRID_RCUP_MF=>TLES%X_LES_SUBGRID_RCUP_MF
+  CASE('X_LES_SUBGRID_RIUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_RIUP_MF,NDIMS)
+    X_LES_SUBGRID_RIUP_MF=>TLES%X_LES_SUBGRID_RIUP_MF
+  CASE('X_LES_SUBGRID_WUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WUP_MF,NDIMS)
+    X_LES_SUBGRID_WUP_MF=>TLES%X_LES_SUBGRID_WUP_MF
+  CASE('X_LES_SUBGRID_MASSFLUX')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_MASSFLUX,NDIMS)
+    X_LES_SUBGRID_MASSFLUX=>TLES%X_LES_SUBGRID_MASSFLUX
+  CASE('X_LES_SUBGRID_DETR')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_DETR,NDIMS)
+    X_LES_SUBGRID_DETR=>TLES%X_LES_SUBGRID_DETR
+  CASE('X_LES_SUBGRID_ENTR')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_ENTR,NDIMS)
+    X_LES_SUBGRID_ENTR=>TLES%X_LES_SUBGRID_ENTR
+  CASE('X_LES_SUBGRID_FRACUP')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_FRACUP,NDIMS)
+    X_LES_SUBGRID_FRACUP=>TLES%X_LES_SUBGRID_FRACUP
+  CASE('X_LES_SUBGRID_THVUP_MF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_THVUP_MF,NDIMS)
+    X_LES_SUBGRID_THVUP_MF=>TLES%X_LES_SUBGRID_THVUP_MF
+  CASE('X_LES_SUBGRID_WTHLMF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WTHLMF,NDIMS)
+    X_LES_SUBGRID_WTHLMF=>TLES%X_LES_SUBGRID_WTHLMF
+  CASE('X_LES_SUBGRID_WRTMF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WRTMF,NDIMS)
+    X_LES_SUBGRID_WRTMF=>TLES%X_LES_SUBGRID_WRTMF
+  CASE('X_LES_SUBGRID_WTHVMF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WTHVMF,NDIMS)
+    X_LES_SUBGRID_WTHVMF=>TLES%X_LES_SUBGRID_WTHVMF
+  CASE('X_LES_SUBGRID_WUMF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WUMF,NDIMS)
+    X_LES_SUBGRID_WUMF=>TLES%X_LES_SUBGRID_WUMF
+  CASE('X_LES_SUBGRID_WVMF')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SUBGRID_WVMF,NDIMS)
+    X_LES_SUBGRID_WVMF=>TLES%X_LES_SUBGRID_WVMF
+  CASE('X_LES_USTAR')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_USTAR,NDIMS)
+    X_LES_USTAR=>TLES%X_LES_USTAR
+  CASE('X_LES_UW0')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_UW0,NDIMS)
+    X_LES_UW0=>TLES%X_LES_UW0
+  CASE('X_LES_VW0')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_VW0,NDIMS)
+    X_LES_VW0=>TLES%X_LES_VW0
+  CASE('X_LES_Q0')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_Q0,NDIMS)
+    X_LES_Q0=>TLES%X_LES_Q0
+  CASE('X_LES_E0')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_E0,NDIMS)
+    X_LES_E0=>TLES%X_LES_E0
+  CASE('X_LES_SV0')
+    CALL LES_ALLOCATE_DIM(TLES%X_LES_SV0,NDIMS)
+    X_LES_SV0=>TLES%X_LES_SV0
+  CASE('XLES_PDF_RV')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RV,NDIMS)
+    XLES_PDF_RV=>TLES%XLES_PDF_RV
+  CASE('XLES_PDF_TH')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_TH,NDIMS)
+    XLES_PDF_TH=>TLES%XLES_PDF_TH
+  CASE('XLES_PDF_W')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_W,NDIMS)
+    XLES_PDF_W=>TLES%XLES_PDF_W
+  CASE('XLES_PDF_THV')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_THV,NDIMS)
+    XLES_PDF_THV=>TLES%XLES_PDF_THV
+  CASE('XLES_PDF_RC')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RC,NDIMS)
+    XLES_PDF_RC=>TLES%XLES_PDF_RC
+  CASE('XLES_PDF_RR')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RR,NDIMS)
+    XLES_PDF_RR=>TLES%XLES_PDF_RR
+  CASE('XLES_PDF_RI')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RI,NDIMS)
+    XLES_PDF_RI=>TLES%XLES_PDF_RI
+  CASE('XLES_PDF_RS')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RS,NDIMS)
+    XLES_PDF_RS=>TLES%XLES_PDF_RS
+  CASE('XLES_PDF_RG')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RG,NDIMS)
+    XLES_PDF_RG=>TLES%XLES_PDF_RG
+  CASE('XLES_PDF_RT')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_RT,NDIMS)
+    XLES_PDF_RT=>TLES%XLES_PDF_RT
+  CASE('XLES_PDF_THL')
+    CALL LES_ALLOCATE_DIM(TLES%XLES_PDF_THL,NDIMS)
+    XLES_PDF_THL=>TLES%XLES_PDF_THL
+  END SELECT
+  !
+END SUBROUTINE LES_ALLOCATE
+!
+SUBROUTINE LES_DEALLOCATE(HNAME)
+  IMPLICIT NONE
+  CHARACTER(LEN=*), INTENT(IN) :: HNAME
+!
+  SELECT CASE(HNAME)
+  CASE('LLES_CURRENT_CART_MASK')
+    LLES_CURRENT_CART_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_CART_MASK)
+  CASE('LLES_CURRENT_NEB_MASK')
+    LLES_CURRENT_NEB_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_NEB_MASK)
+  CASE('LLES_CURRENT_CORE_MASK')
+    LLES_CURRENT_CORE_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_CORE_MASK)
+  CASE('LLES_CURRENT_MY_MASKS')
+    LLES_CURRENT_MY_MASKS=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_MY_MASKS)
+  CASE('LLES_CURRENT_CS1_MASK')
+    LLES_CURRENT_CS1_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_CS1_MASK)
+  CASE('LLES_CURRENT_CS2_MASK')
+    LLES_CURRENT_CS2_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_CS2_MASK)
+  CASE('LLES_CURRENT_CS3_MASK')
+    LLES_CURRENT_CS3_MASK=>NULL()
+    DEALLOCATE(TLES%LLES_CURRENT_CS3_MASK)
+  CASE('XLES_CURRENT_Z')
+    XLES_CURRENT_Z=>NULL()
+    DEALLOCATE(TLES%XLES_CURRENT_Z)
+  CASE('NKLIN_CURRENT_LES')
+    NKLIN_CURRENT_LES=>NULL()
+    DEALLOCATE(TLES%NKLIN_CURRENT_LES)
+  CASE('XCOEFLIN_CURRENT_LES')
+    XCOEFLIN_CURRENT_LES=>NULL()
+    DEALLOCATE(TLES%XCOEFLIN_CURRENT_LES)
+  CASE('NKLIN_CURRENT_SPEC')
+    NKLIN_CURRENT_SPEC=>NULL()
+    DEALLOCATE(TLES%NKLIN_CURRENT_SPEC)
+  CASE('XCOEFLIN_CURRENT_SPEC')
+    XCOEFLIN_CURRENT_SPEC=>NULL()
+    DEALLOCATE(TLES%XCOEFLIN_CURRENT_SPEC)
+  CASE('XLES_NORM_M')
+    XLES_NORM_M=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_M)
+  CASE('XLES_NORM_K')
+    XLES_NORM_K=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_K)
+  CASE('XLES_NORM_S')
+    XLES_NORM_S=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_S)
+  CASE('XLES_NORM_RHO')
+    XLES_NORM_RHO=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_RHO)
+  CASE('XLES_NORM_RV')
+    XLES_NORM_RV=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_RV)
+  CASE('XLES_NORM_SV')
+    XLES_NORM_SV=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_SV)
+  CASE('XLES_NORM_P')
+    XLES_NORM_P=>NULL()
+    DEALLOCATE(TLES%XLES_NORM_P)
+  CASE('X_LES_RES_W_SBG_WThl')
+    X_LES_RES_W_SBG_WThl=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_WThl)
+  CASE('X_LES_RES_W_SBG_WRt')
+    X_LES_RES_W_SBG_WRt=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_WRt)
+  CASE('X_LES_RES_W_SBG_Thl2')
+    X_LES_RES_W_SBG_Thl2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_Thl2)
+  CASE('X_LES_RES_W_SBG_Rt2')
+    X_LES_RES_W_SBG_Rt2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_Rt2)
+  CASE('X_LES_RES_W_SBG_ThlRt')
+    X_LES_RES_W_SBG_ThlRt=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_ThlRt)
+  CASE('X_LES_RES_W_SBG_WSv')
+    X_LES_RES_W_SBG_WSv=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_WSv)
+  CASE('X_LES_RES_W_SBG_Sv2')
+    X_LES_RES_W_SBG_Sv2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_W_SBG_Sv2)
+  CASE('XLES_SUBGRID_RCSIGS')
+    XLES_SUBGRID_RCSIGS=>NULL()
+    DEALLOCATE(TLES%XLES_SUBGRID_RCSIGS)
+  CASE('XLES_SUBGRID_RCSIGC')
+    XLES_SUBGRID_RCSIGC=>NULL()
+    DEALLOCATE(TLES%XLES_SUBGRID_RCSIGC)
+  CASE('X_LES_RES_ddxa_U_SBG_UaU')
+    X_LES_RES_ddxa_U_SBG_UaU=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_U_SBG_UaU)
+  CASE('X_LES_RES_ddxa_V_SBG_UaV')
+    X_LES_RES_ddxa_V_SBG_UaV=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_V_SBG_UaV)
+  CASE('X_LES_RES_ddxa_W_SBG_UaW')
+    X_LES_RES_ddxa_W_SBG_UaW=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_W_SBG_UaW)
+  CASE('X_LES_RES_ddxa_W_SBG_UaThl')
+    X_LES_RES_ddxa_W_SBG_UaThl=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_W_SBG_UaThl)
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaW')
+    X_LES_RES_ddxa_Thl_SBG_UaW=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Thl_SBG_UaW)
+  CASE('X_LES_RES_ddz_Thl_SBG_W2')
+    X_LES_RES_ddz_Thl_SBG_W2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddz_Thl_SBG_W2)
+  CASE('X_LES_RES_ddxa_W_SBG_UaRt')
+    X_LES_RES_ddxa_W_SBG_UaRt=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_W_SBG_UaRt)
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaW')
+    X_LES_RES_ddxa_Rt_SBG_UaW=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Rt_SBG_UaW)
+  CASE('X_LES_RES_ddz_Rt_SBG_W2')
+    X_LES_RES_ddz_Rt_SBG_W2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddz_Rt_SBG_W2)
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaRt')
+    X_LES_RES_ddxa_Thl_SBG_UaRt=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Thl_SBG_UaRt)
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaThl')
+    X_LES_RES_ddxa_Rt_SBG_UaThl=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Rt_SBG_UaThl)
+  CASE('X_LES_RES_ddxa_Thl_SBG_UaThl')
+    X_LES_RES_ddxa_Thl_SBG_UaThl=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Thl_SBG_UaThl)
+  CASE('X_LES_RES_ddxa_Rt_SBG_UaRt')
+    X_LES_RES_ddxa_Rt_SBG_UaRt=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Rt_SBG_UaRt)
+  CASE('X_LES_RES_ddxa_W_SBG_UaSv')
+    X_LES_RES_ddxa_W_SBG_UaSv=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_W_SBG_UaSv)
+  CASE('X_LES_RES_ddxa_Sv_SBG_UaW')
+    X_LES_RES_ddxa_Sv_SBG_UaW=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Sv_SBG_UaW)
+  CASE('X_LES_RES_ddz_Sv_SBG_W2')
+    X_LES_RES_ddz_Sv_SBG_W2=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddz_Sv_SBG_W2)
+  CASE('X_LES_RES_ddxa_Sv_SBG_UaSv')
+    X_LES_RES_ddxa_Sv_SBG_UaSv=>NULL()
+    DEALLOCATE(TLES%X_LES_RES_ddxa_Sv_SBG_UaSv)
+  CASE('X_LES_SUBGRID_U2')
+    X_LES_SUBGRID_U2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_U2)
+  CASE('X_LES_SUBGRID_V2')
+    X_LES_SUBGRID_V2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_V2)
+  CASE('X_LES_SUBGRID_W2')
+    X_LES_SUBGRID_W2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_W2)
+  CASE('X_LES_SUBGRID_Thl2')
+    X_LES_SUBGRID_Thl2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Thl2)
+  CASE('X_LES_SUBGRID_Rt2')
+    X_LES_SUBGRID_Rt2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Rt2)
+  CASE('X_LES_SUBGRID_Rc2')
+    X_LES_SUBGRID_Rc2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Rc2)
+  CASE('X_LES_SUBGRID_Ri2')
+    X_LES_SUBGRID_Ri2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Ri2)
+  CASE('X_LES_SUBGRID_ThlRt')
+    X_LES_SUBGRID_ThlRt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_ThlRt)
+  CASE('X_LES_SUBGRID_Sv2')
+    X_LES_SUBGRID_Sv2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Sv2)
+  CASE('X_LES_SUBGRID_UV')
+    X_LES_SUBGRID_UV=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_UV)
+  CASE('X_LES_SUBGRID_WU')
+    X_LES_SUBGRID_WU=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WU)
+  CASE('X_LES_SUBGRID_WV')
+    X_LES_SUBGRID_WV=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WV)
+  CASE('X_LES_SUBGRID_UThl')
+    X_LES_SUBGRID_UThl=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_UThl)
+  CASE('X_LES_SUBGRID_VThl')
+    X_LES_SUBGRID_VThl=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_VThl)
+  CASE('X_LES_SUBGRID_WThl')
+    X_LES_SUBGRID_WThl=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WThl)
+  CASE('X_LES_SUBGRID_URt')
+    X_LES_SUBGRID_URt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_URt)
+  CASE('X_LES_SUBGRID_VRt')
+    X_LES_SUBGRID_VRt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_VRt)
+  CASE('X_LES_SUBGRID_WRt')
+    X_LES_SUBGRID_WRt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WRt)
+  CASE('X_LES_SUBGRID_URc')
+    X_LES_SUBGRID_URc=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_URc)
+  CASE('X_LES_SUBGRID_VRc')
+    X_LES_SUBGRID_VRc=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_VRc)
+  CASE('X_LES_SUBGRID_WRc')
+    X_LES_SUBGRID_WRc=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WRc)
+  CASE('X_LES_SUBGRID_USv')
+    X_LES_SUBGRID_USv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_USv)
+  CASE('X_LES_SUBGRID_VSv')
+    X_LES_SUBGRID_VSv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_VSv)
+  CASE('X_LES_SUBGRID_WSv')
+    X_LES_SUBGRID_WSv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WSv)
+  CASE('X_LES_SUBGRID_UTke')
+    X_LES_SUBGRID_UTke=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_UTke)
+  CASE('X_LES_SUBGRID_VTke')
+    X_LES_SUBGRID_VTke=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_VTke)
+  CASE('X_LES_SUBGRID_WTke')
+    X_LES_SUBGRID_WTke=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WTke)
+  CASE('X_LES_SUBGRID_ddz_WTke')
+    X_LES_SUBGRID_ddz_WTke=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_ddz_WTke)
+  CASE('X_LES_SUBGRID_WThv')
+    X_LES_SUBGRID_WThv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WThv)
+  CASE('X_LES_SUBGRID_ThlThv')
+    X_LES_SUBGRID_ThlThv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_ThlThv)
+  CASE('X_LES_SUBGRID_RtThv')
+    X_LES_SUBGRID_RtThv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RtThv)
+  CASE('X_LES_SUBGRID_SvThv')
+    X_LES_SUBGRID_SvThv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_SvThv)
+  CASE('X_LES_SUBGRID_W2Thl')
+    X_LES_SUBGRID_W2Thl=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_W2Thl)
+  CASE('X_LES_SUBGRID_W2Rt')
+    X_LES_SUBGRID_W2Rt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_W2Rt)
+  CASE('X_LES_SUBGRID_W2Sv')
+    X_LES_SUBGRID_W2Sv=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_W2Sv)
+  CASE('X_LES_SUBGRID_WThlRt')
+    X_LES_SUBGRID_WThlRt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WThlRt)
+  CASE('X_LES_SUBGRID_WThl2')
+    X_LES_SUBGRID_WThl2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WThl2)
+  CASE('X_LES_SUBGRID_WRt2')
+    X_LES_SUBGRID_WRt2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WRt2)
+  CASE('X_LES_SUBGRID_WSv2')
+    X_LES_SUBGRID_WSv2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WSv2)
+  CASE('X_LES_SUBGRID_DISS_Tke')
+    X_LES_SUBGRID_DISS_Tke=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DISS_Tke)
+  CASE('X_LES_SUBGRID_DISS_Thl2')
+    X_LES_SUBGRID_DISS_Thl2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DISS_Thl2)
+  CASE('X_LES_SUBGRID_DISS_Rt2')
+    X_LES_SUBGRID_DISS_Rt2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DISS_Rt2)
+  CASE('X_LES_SUBGRID_DISS_ThlRt')
+    X_LES_SUBGRID_DISS_ThlRt=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DISS_ThlRt)
+  CASE('X_LES_SUBGRID_DISS_Sv2')
+    X_LES_SUBGRID_DISS_Sv2=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DISS_Sv2)
+  CASE('X_LES_SUBGRID_WP')
+    X_LES_SUBGRID_WP=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WP)
+  CASE('X_LES_SUBGRID_ThlPz')
+    X_LES_SUBGRID_ThlPz=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_ThlPz)
+  CASE('X_LES_SUBGRID_RtPz')
+    X_LES_SUBGRID_RtPz=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RtPz)
+  CASE('X_LES_SUBGRID_SvPz')
+    X_LES_SUBGRID_SvPz=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_SvPz)
+  CASE('X_LES_SUBGRID_PHI3')
+    X_LES_SUBGRID_PHI3=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_PHI3)
+  CASE('X_LES_SUBGRID_PSI3')
+    X_LES_SUBGRID_PSI3=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_PSI3)
+  CASE('X_LES_SUBGRID_LMix')
+    X_LES_SUBGRID_LMix=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_LMix)
+  CASE('X_LES_SUBGRID_LDiss')
+    X_LES_SUBGRID_LDiss=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_LDiss)
+  CASE('X_LES_SUBGRID_Km')
+    X_LES_SUBGRID_Km=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Km)
+  CASE('X_LES_SUBGRID_Kh')
+    X_LES_SUBGRID_Kh=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_Kh)
+  CASE('X_LES_SUBGRID_THLUP_MF')
+    X_LES_SUBGRID_THLUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_THLUP_MF)
+  CASE('X_LES_SUBGRID_RTUP_MF')
+    X_LES_SUBGRID_RTUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RTUP_MF)
+  CASE('X_LES_SUBGRID_RVUP_MF')
+    X_LES_SUBGRID_RVUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RVUP_MF)
+  CASE('X_LES_SUBGRID_RCUP_MF')
+    X_LES_SUBGRID_RCUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RCUP_MF)
+  CASE('X_LES_SUBGRID_RIUP_MF')
+    X_LES_SUBGRID_RIUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_RIUP_MF)
+  CASE('X_LES_SUBGRID_WUP_MF')
+    X_LES_SUBGRID_WUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WUP_MF)
+  CASE('X_LES_SUBGRID_MASSFLUX')
+    X_LES_SUBGRID_MASSFLUX=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_MASSFLUX)
+  CASE('X_LES_SUBGRID_DETR')
+    X_LES_SUBGRID_DETR=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_DETR)
+  CASE('X_LES_SUBGRID_ENTR')
+    X_LES_SUBGRID_ENTR=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_ENTR)
+  CASE('X_LES_SUBGRID_FRACUP')
+    X_LES_SUBGRID_FRACUP=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_FRACUP)
+  CASE('X_LES_SUBGRID_THVUP_MF')
+    X_LES_SUBGRID_THVUP_MF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_THVUP_MF)
+  CASE('X_LES_SUBGRID_WTHLMF')
+    X_LES_SUBGRID_WTHLMF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WTHLMF)
+  CASE('X_LES_SUBGRID_WRTMF')
+    X_LES_SUBGRID_WRTMF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WRTMF)
+  CASE('X_LES_SUBGRID_WTHVMF')
+    X_LES_SUBGRID_WTHVMF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WTHVMF)
+  CASE('X_LES_SUBGRID_WUMF')
+    X_LES_SUBGRID_WUMF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WUMF)
+  CASE('X_LES_SUBGRID_WVMF')
+    X_LES_SUBGRID_WVMF=>NULL()
+    DEALLOCATE(TLES%X_LES_SUBGRID_WVMF)
+  CASE('X_LES_USTAR')
+    X_LES_USTAR=>NULL()
+    DEALLOCATE(TLES%X_LES_USTAR)
+  CASE('X_LES_UW0')
+    X_LES_UW0=>NULL()
+    DEALLOCATE(TLES%X_LES_UW0)
+  CASE('X_LES_VW0')
+    X_LES_VW0=>NULL()
+    DEALLOCATE(TLES%X_LES_VW0)
+  CASE('X_LES_Q0')
+    X_LES_Q0=>NULL()
+    DEALLOCATE(TLES%X_LES_Q0)
+  CASE('X_LES_E0')
+    X_LES_E0=>NULL()
+    DEALLOCATE(TLES%X_LES_E0)
+  CASE('X_LES_SV0')
+    X_LES_SV0=>NULL()
+    DEALLOCATE(TLES%X_LES_SV0)
+  CASE('XLES_PDF_RV')
+    XLES_PDF_RV=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RV)
+  CASE('XLES_PDF_TH')
+    XLES_PDF_TH=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_TH)
+  CASE('XLES_PDF_W')
+    XLES_PDF_W=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_W)
+  CASE('XLES_PDF_THV')
+    XLES_PDF_THV=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_THV)
+  CASE('XLES_PDF_RC')
+    XLES_PDF_RC=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RC)
+  CASE('XLES_PDF_RR')
+    XLES_PDF_RR=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RR)
+  CASE('XLES_PDF_RI')
+    XLES_PDF_RI=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RI)
+  CASE('XLES_PDF_RS')
+    XLES_PDF_RS=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RS)
+  CASE('XLES_PDF_RG')
+    XLES_PDF_RG=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RG)
+  CASE('XLES_PDF_RT')
+    XLES_PDF_RT=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_RT)
+  CASE('XLES_PDF_THL')
+    XLES_PDF_THL=>NULL()
+    DEALLOCATE(TLES%XLES_PDF_THL)
+  END SELECT
+END SUBROUTINE LES_DEALLOCATE
+!!
+!SUBROUTINE LES_INI_TIMESTEP_DEALLOCATE()
+!  IMPLICIT NONE
+!  XCOEFLIN_CURRENT_SPEC=>NULL()
+!  DEALLOCATE(TLES%XCOEFLIN_CURRENT_SPEC)
+!END SUBROUTINE LES_INI_TIMESTEP_DEALLOCATE
+!
+SUBROUTINE LES_ALLOCATE_1DIMX(PVAR,KDIM)
+  IMPLICIT NONE
+  REAL, DIMENSION(:),ALLOCATABLE,  INTENT(OUT) :: PVAR
+  INTEGER, DIMENSION(1), INTENT(IN) :: KDIM
+  ALLOCATE(PVAR(KDIM(1)))
+END SUBROUTINE LES_ALLOCATE_1DIMX
+!
+SUBROUTINE LES_ALLOCATE_2DIMX(PVAR,KDIM)
+  IMPLICIT NONE
+  REAL, DIMENSION(:,:),ALLOCATABLE, INTENT(OUT) :: PVAR
+  INTEGER, DIMENSION(2), INTENT(IN) :: KDIM
+  ALLOCATE(PVAR(KDIM(1),KDIM(2)))
+END SUBROUTINE LES_ALLOCATE_2DIMX
+!
+SUBROUTINE LES_ALLOCATE_3DIMX(PVAR,KDIM)
+  IMPLICIT NONE
+  REAL, DIMENSION(:,:,:),ALLOCATABLE,  INTENT(OUT) :: PVAR
+  INTEGER, DIMENSION(3), INTENT(IN) :: KDIM
+  ALLOCATE(PVAR(KDIM(1),KDIM(2),KDIM(3)))
+END SUBROUTINE LES_ALLOCATE_3DIMX
+!
+SUBROUTINE LES_ALLOCATE_4DIMX(PVAR,KDIM)
+  IMPLICIT NONE
+  REAL, DIMENSION(:,:,:,:),ALLOCATABLE,  INTENT(OUT) :: PVAR
+  INTEGER, DIMENSION(4), INTENT(IN) :: KDIM
+  ALLOCATE(PVAR(KDIM(1),KDIM(2),KDIM(3),KDIM(4)))
+END SUBROUTINE LES_ALLOCATE_4DIMX
+!
+SUBROUTINE LES_ALLOCATE_1DIMI(KVAR,KDIM)
+  IMPLICIT NONE
+  INTEGER, DIMENSION(:),ALLOCATABLE,  INTENT(OUT) :: KVAR
+  INTEGER, DIMENSION(1), INTENT(IN) :: KDIM
+  ALLOCATE(KVAR(KDIM(1)))
+END SUBROUTINE LES_ALLOCATE_1DIMI
+!
+SUBROUTINE LES_ALLOCATE_3DIMI(KVAR,KDIM)
+  IMPLICIT NONE
+  INTEGER, DIMENSION(:,:,:),ALLOCATABLE,  INTENT(OUT) :: KVAR
+  INTEGER, DIMENSION(3), INTENT(IN) :: KDIM
+  ALLOCATE(KVAR(KDIM(1),KDIM(2),KDIM(3)))
+END SUBROUTINE LES_ALLOCATE_3DIMI
+!
+SUBROUTINE LES_ALLOCATE_3DIML(OVAR,KDIM)
+  IMPLICIT NONE
+  LOGICAL, DIMENSION(:,:,:),ALLOCATABLE,  INTENT(OUT) :: OVAR
+  INTEGER, DIMENSION(3), INTENT(IN) :: KDIM
+  ALLOCATE(OVAR(KDIM(1),KDIM(2),KDIM(3)))
+END SUBROUTINE LES_ALLOCATE_3DIML
+!
+SUBROUTINE LES_ALLOCATE_4DIML(OVAR,KDIM)
+  IMPLICIT NONE
+  LOGICAL, DIMENSION(:,:,:,:),ALLOCATABLE,  INTENT(OUT) :: OVAR
+  INTEGER, DIMENSION(4), INTENT(IN) :: KDIM
+  ALLOCATE(OVAR(KDIM(1),KDIM(2),KDIM(3),KDIM(4)))
+END SUBROUTINE LES_ALLOCATE_4DIML
+!
+SUBROUTINE LES_ALLOCATE_2DIMC(HVAR,KDIM)
+  IMPLICIT NONE
+  LOGICAL, DIMENSION(:,:),ALLOCATABLE,  INTENT(OUT) :: HVAR
+  INTEGER, DIMENSION(2), INTENT(IN) :: KDIM
+  ALLOCATE(HVAR(KDIM(1),KDIM(2)))
+END SUBROUTINE LES_ALLOCATE_2DIMC
+!
 END MODULE MODD_LES
diff --git a/src/common/micro/ini_rain_ice.F90 b/src/common/micro/ini_rain_ice.F90
index 71b021f84f0e88547b3fa576c27214b2fe0d6df2..daf8625c134f7b7fe8f34c669b2800d6c06622ca 100644
--- a/src/common/micro/ini_rain_ice.F90
+++ b/src/common/micro/ini_rain_ice.F90
@@ -79,6 +79,7 @@
 !!      S. Riette 2016-11: new ICE3/ICE4 options
 !!      P. Wautelet 22/01/2019 bug correction: incorrect write
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  J. Wurtz       03/2022: New snow characteristics with LSNOW_T
 !
 !-------------------------------------------------------------------------------
 !
@@ -155,7 +156,7 @@ REAL     :: PALPHAR,PALPHAS,PALPHAG,PALPHAH
 REAL     :: PNUR,PNUS,PNUG,PNUH
 REAL     :: PBR,PBS,PBG
 REAL     :: PCR,PCS,PCG,PCH
-REAL     :: PDR,PDS,PDG,PDH
+REAL     :: PDR,PDS,PFVELOS,PDG,PDH
 REAL     :: PESR,PEGS,PEGR,PEHS,PEHG,PEHR
 REAL     :: PFDINFTY
 REAL     :: PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN
@@ -266,11 +267,25 @@ XF2I = 0.14
 !
 XAS = 0.02
 XBS = 1.9
-XCS = 5.1
-XDS = 0.27
+IF (LSNOW_T) THEN
+  !Cas Gamma generalisee
+  XCS = 11.52
+  XDS = 0.39
+  XFVELOS =0.097
+  !Cas MP
+  !XCS = 13.2
+  !XDS = 0.423       
+  !XFVELOS = 25.14
+ELSE
+  XCS = 5.1
+  XDS = 0.27
+  XFVELOS = 0.
+END IF
 !
-XCCS = 5.0
-XCXS = 1.0
+IF (.NOT. LSNOW_T) THEN
+  XCCS = 5.0
+  XCXS = 1.0
+END IF
 !
 XF0S = 0.86
 XF1S = 0.28
@@ -346,8 +361,17 @@ XNUR    = 1.0  ! Exponential law
 XALPHAI = 3.0  ! Gamma law for the ice crystal volume
 XNUI    = 3.0  ! Gamma law with little dispersion
 !
-XALPHAS = 1.0  ! Exponential law
-XNUS    = 1.0  ! Exponential law
+IF (LSNOW_T) THEN
+!Cas GAMMAGEN
+   XALPHAS = .214   ! Generalized gamma law
+   XNUS    = 43.7   ! Generalized gamma law
+   XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / &
+                            ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) )
+ELSE
+   XALPHAS = 1.0  ! Exponential law
+   XNUS    = 1.0  ! Exponential law
+   XTRANS_MP_GAMMAS = 1.
+END IF
 !
 XALPHAG = 1.0  ! Exponential law
 XNUG    = 1.0  ! Exponential law
@@ -369,6 +393,10 @@ XLBR   = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR)
 XLBEXI = 1.0/(-XBI)
 XLBI   = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI)
 !
+#if defined(REPRO48) || defined(REPRO55)
+#else
+XNS   = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS))
+#endif
 XLBEXS = 1.0/(XCXS-XBS)
 XLBS   = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS)
 !
@@ -385,7 +413,12 @@ XLBDAS_MAX = 100000.0
 XLBDAG_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
+#if defined(REPRO48) || defined(REPRO55)
 IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+#else
+XLBDAS_MAX = 1.E6
+XLBDAS_MIN = 1000.
+#endif
 !
 XCONC_SEA=1E8 ! 100/cm3
 XCONC_LAND=3E8 ! 300/cm3
@@ -438,9 +471,21 @@ XEXCSEDI =-0.9324*3.0
 WRITE (KLUOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI =',XFSEDI
 !
 !
+#if defined(REPRO48) || defined(REPRO55)
 XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS)
 XFSEDS  = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)*                         &
+          (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT
+#else
+IF (HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4') THEN
+   XEXSEDS = -XDS-XBS
+   XFSEDS  = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS))    &
+            *(ZRHO00)**XCEXVT
+ELSE
+   XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS)
+   XFSEDS  = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)*                         &
             (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT
+END IF
+#endif
 !
 XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG)
 XFSEDG  = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)*                         &
@@ -513,10 +558,17 @@ XSCFAC = (0.63**(1./3.))*SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63
 X0DEPI = (4.0*XPI)*XC1I*XF0I*MOMG(XALPHAI,XNUI,1.)
 X2DEPI = (4.0*XPI)*XC1I*XF2I*XC_I*MOMG(XALPHAI,XNUI,XDI+2.0)
 !
+#if defined(REPRO48) || defined(REPRO55)
 X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
 X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
 XEX0DEPS = XCXS-1.0
 XEX1DEPS = XCXS-0.5*(XDS+3.0)
+#else
+X0DEPS = XNS*(4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
+X1DEPS = XNS*(4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
+XEX0DEPS = -1.0
+XEX1DEPS = -0.5*(XDS+3.0)
+#endif
 XRDEPSRED = 1.0
 !
 X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.)
@@ -566,8 +618,13 @@ END IF
 !
 XCOLIS   = 0.25 ! Collection efficiency of I+S
 XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency
+#if defined(REPRO48) || defined(REPRO55)
 XFIAGGS  = (XPI/4.0)*XCOLIS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
 XEXIAGGS = XCXS-XDS-2.0
+#else
+XFIAGGS  = XNS*(XPI/4.0)*XCOLIS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+XEXIAGGS = -XDS - 2.0 ! GAMMGEN LH_EXTENDED
+#endif
 !
 GFLAG = .TRUE.
 IF (GFLAG) THEN
@@ -618,15 +675,28 @@ XEX1EVAR = -1.0-0.5*(XDR+3.0)
 !
 XDCSLIM  = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989)
 XCOLCS   = 1.0
+#if defined(REPRO48) || defined(REPRO55)
 XEXCRIMSS= XCXS-XDS-2.0
 XCRIMSS  = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+#else
+XEXCRIMSS= -XDS-2.0
+XCRIMSS  = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+#endif
 XEXCRIMSG= XEXCRIMSS
 XCRIMSG  = XCRIMSS
+#if defined(REPRO48) || defined(REPRO55)
 XSRIMCG  = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS)
 XEXSRIMCG= XCXS-XBS
 XSRIMCG2 = XCCS*XAG*MOMG(XALPHAS,XNUS,XBG)
 XSRIMCG3 = XFRACM90
 XEXSRIMCG2=XCXS-XBG
+#else
+XSRIMCG  = XNS*XAS*MOMG(XALPHAS,XNUS,XBS)
+XEXSRIMCG = -XBS
+XSRIMCG2 = XNS*XAG*MOMG(XALPHAS,XNUS,XBG)
+XSRIMCG3 = XFRACM90
+XEXSRIMCG2=XBS-XBG
+#endif
 !
 GFLAG = .TRUE.
 IF (GFLAG) THEN
@@ -656,13 +726,21 @@ XRIMINTP2 = 1.0 + XRIMINTP1*LOG( XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS) )
 !
 !*       7.2    Constants for the accretion of raindrops onto aggregates
 !
+#if defined(REPRO48) || defined(REPRO55)
 XFRACCSS = ((XPI**2)/24.0)*XCCS*XCCR*XRHOLW*(ZRHO00**XCEXVT)
+#else
+XFRACCSS = XNS*((XPI**2)/24.0)*XCCR*XRHOLW*(ZRHO00**XCEXVT)
+#endif
 !
 XLBRACCS1   =    MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.)
 XLBRACCS2   = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.)
 XLBRACCS3   =                          MOMG(XALPHAR,XNUR,5.)
 !
+#if defined(REPRO48) || defined(REPRO55)
 XFSACCRG = (XPI/4.0)*XAS*XCCS*XCCR*(ZRHO00**XCEXVT)
+#else
+XFSACCRG = XNS*(XPI/4.0)*XAS*XCCR*(ZRHO00**XCEXVT)
+#endif
 !
 XLBSACCR1   =    MOMG(XALPHAR,XNUR,2.)*MOMG(XALPHAS,XNUS,XBS)
 XLBSACCR2   = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
@@ -696,28 +774,28 @@ IF( .NOT.ASSOCIATED(XKER_RACCSS) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RACCSS', N
 IF( .NOT.ASSOCIATED(XKER_RACCS ) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RACCS', NACCLBDAS,NACCLBDAR)
 IF( .NOT.ASSOCIATED(XKER_SACCRG) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SACCRG', NACCLBDAR,NACCLBDAS)
 !
-CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                &
-                      PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PCR,PDR, &
-                      PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,&
-                      PFDINFTY                                                )
+CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                        &
+                      PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
+                      PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,        &
+                      PFDINFTY                                                        )
 IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
     (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
     (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR)                               .OR. &
     (PESR/=ZESR) .OR. (PBS/=XBS) .OR. (PBR/=XBR)                       .OR. &
-    (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PCR/=XCR) .OR. (PDR/=XDR)         .OR. &
+    (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. (PCR/=XCR) .OR. (PDR/=XDR) .OR. &
     (PACCLBDAS_MAX/=XACCLBDAS_MAX) .OR. (PACCLBDAR_MAX/=XACCLBDAR_MAX) .OR. &
     (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, XCR, XDR,                              &
+                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR,                     &
                  XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS                        )
   CALL RZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, XCR, XDR,                              &
+                 ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0.,                 &
                  XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_RACCS                                        )
   CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBS, XCS, XDS, XCR, XDR,                              &
+                 ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR,                     &
                  XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_SACCRG,  XAG, XBS, XAS                       )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
@@ -738,6 +816,7 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=KLUOUT,FMT='("PBR=",E13.6)') XBR
   WRITE(UNIT=KLUOUT,FMT='("PCS=",E13.6)') XCS
   WRITE(UNIT=KLUOUT,FMT='("PDS=",E13.6)') XDS
+  WRITE(UNIT=KLUOUT,FMT='("PFVELOS=",E13.6)') XFVELOS
   WRITE(UNIT=KLUOUT,FMT='("PCR=",E13.6)') XCR
   WRITE(UNIT=KLUOUT,FMT='("PDR=",E13.6)') XDR
   WRITE(UNIT=KLUOUT,FMT='("PACCLBDAS_MAX=",E13.6)') &
@@ -777,10 +856,10 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
   END DO
   WRITE(UNIT=KLUOUT,FMT='("END IF")')
   ELSE
-  CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                               &
-                       PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PCR,PDR, &
-                       PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,&
-                       PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG             )
+  CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                       &
+                       PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
+                       PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,        &
+                       PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG                     )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RACCSS")')
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RACCS ")')
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_SACCRG")')
@@ -854,7 +933,11 @@ XCOLSG   = 0.01 ! Collection efficiency of S+G
 XCOLEXSG = 0.1  ! Temperature factor of the S+G collection efficiency
 WRITE (KLUOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln'
 WRITE (KLUOUT, FMT=*) ' XCOLSG, XCOLEXSG  = ',XCOLSG,XCOLEXSG
+#if defined(REPRO48) || defined(REPRO55)
 XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT)
+#else
+XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT)
+#endif
 !
 XLBSDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS)
 XLBSDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
@@ -905,19 +988,19 @@ ZFDINFTY = 20.0  ! computing the kernels XKER_SDRYG
 IF( .NOT.ASSOCIATED(XKER_SDRYG) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SDRYG', NDRYLBDAG,NDRYLBDAS)
 !
 CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                              &
-                   PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,      &
+                   PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
                    PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, &
                    PFDINFTY                                                 )
 IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
     (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
     (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
     (PEGS/=ZEGS) .OR. (PBS/=XBS)                                       .OR. &
-    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS)         .OR. &
+    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. &
     (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAS_MAX/=XDRYLBDAS_MAX) .OR. &
     (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS,                          &
-                ZEGS, XBS, XCG, XDG, XCS, XDS,                              &
+                ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS,                 &
                 XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, &
                 ZFDINFTY, XKER_SDRYG                                        )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
@@ -937,6 +1020,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=KLUOUT,FMT='("PDG=",E13.6)') XDG
   WRITE(UNIT=KLUOUT,FMT='("PCS=",E13.6)') XCS
   WRITE(UNIT=KLUOUT,FMT='("PDS=",E13.6)') XDS
+  WRITE(UNIT=KLUOUT,FMT='("PFVELOS=",E13.6)') XFVELOS
   WRITE(UNIT=KLUOUT,FMT='("PDRYLBDAG_MAX=",E13.6)') &
                                                     XDRYLBDAG_MAX
   WRITE(UNIT=KLUOUT,FMT='("PDRYLBDAS_MAX=",E13.6)') &
@@ -957,7 +1041,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=KLUOUT,FMT='("END IF")')
   ELSE
   CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                              &
-                     PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,      &
+                     PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
                      PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, &
                      PFDINFTY,XKER_SDRYG                                      )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_SDRYG")')
@@ -983,7 +1067,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
     (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR,                          &
-                ZEGR, XBR, XCG, XDG, XCR, XDR,                              &
+                ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0.,                      &
                 XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
                 ZFDINFTY, XKER_RDRYG                                        )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
@@ -1036,12 +1120,18 @@ END IF
   XFRMIN(7:9)=1.
   XFRMIN(10) =10.
   XFRMIN(11) =1.
-  XFRMIN(12) =100.
+  XFRMIN(12) =100. !0 in suparar
   XFRMIN(13) =1.0E-15
   XFRMIN(14) =120.
   XFRMIN(15) =1.0E-4
   XFRMIN(16:20)=0.
-  XFRMIN(21)=1.
+  XFRMIN(21:22)=1.
+  XFRMIN(23)=0.5
+  XFRMIN(24)=1.5
+  XFRMIN(25)=30.
+  XFRMIN(26:38)=0.
+  XFRMIN(39)=0.25
+  XFRMIN(40)=0.15
 !
 !
 !-------------------------------------------------------------------------------
@@ -1063,7 +1153,11 @@ XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0)
 !
 XCOLSH   = 0.01 ! Collection efficiency of S+H
 XCOLEXSH = 0.1  ! Temperature factor of the S+H collection efficiency
+#if defined(REPRO48) || defined(REPRO55)
 XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT)
+#else
+XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz
+#endif
 !
 XLBSWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS)
 XLBSWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
@@ -1123,19 +1217,19 @@ ZFDINFTY = 20.0  ! computing the kernels XKER_SWETH
 IF( .NOT.ASSOCIATED(XKER_SWETH) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SWETH', NWETLBDAH,NWETLBDAS)
 !
 CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                              &
-                   PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,      &
+                   PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
                    PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, &
                    PFDINFTY                                                 )
 IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
     (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH)                               .OR. &
     (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
     (PEHS/=ZEHS) .OR. (PBS/=XBS)                                       .OR. &
-    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCS/=XCS) .OR. (PDS/=XDS)         .OR. &
+    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. &
     (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAS_MAX/=XWETLBDAS_MAX) .OR. &
     (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS,                          &
-                ZEHS, XBS, XCH, XDH, XCS, XDS,                              &
+                ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS,                 &
                 XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &
                 ZFDINFTY, XKER_SWETH                                        )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
@@ -1155,6 +1249,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=KLUOUT,FMT='("PDH=",E13.6)') XDH
   WRITE(UNIT=KLUOUT,FMT='("PCS=",E13.6)') XCS
   WRITE(UNIT=KLUOUT,FMT='("PDS=",E13.6)') XDS
+  WRITE(UNIT=KLUOUT,FMT='("PFVELOS=",E13.6)') XFVELOS
   WRITE(UNIT=KLUOUT,FMT='("PWETLBDAH_MAX=",E13.6)') &
                                                     XWETLBDAH_MAX
   WRITE(UNIT=KLUOUT,FMT='("PWETLBDAS_MAX=",E13.6)') &
@@ -1175,7 +1270,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=KLUOUT,FMT='("END IF")')
   ELSE
   CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                              &
-                     PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,      &
+                     PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
                      PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, &
                      PFDINFTY,XKER_SWETH                                      )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_SWETH")')
@@ -1201,7 +1296,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. &
     (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG,                          &
-                ZEHG, XBG, XCH, XDH, XCG, XDG,                              &
+                ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0.,                      &
                 XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, &
                 ZFDINFTY, XKER_GWETH                                        )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
@@ -1267,7 +1362,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAR/=NWETLBDAR) .OR. (KND/=IND) .OR. &
     (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAR_MIN/=XWETLBDAR_MIN) .OR. &
     (PFDINFTY/=ZFDINFTY)                                               ) THEN
   CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAR, XNUR,                          &
-                ZEHR, XBR, XCH, XDH, XCR, XDR,                              &
+                ZEHR, XBR, XCH, XDH, 0., XCR, XDR, 0.,                      &
                 XWETLBDAH_MAX, XWETLBDAR_MAX, XWETLBDAH_MIN, XWETLBDAR_MIN, &
                 ZFDINFTY, XKER_RWETH                                        )
   WRITE(UNIT=KLUOUT,FMT='("*****************************************")')
diff --git a/src/common/turb/les_mean_subgrid.F90 b/src/common/turb/les_mean_subgrid.F90
new file mode 100644
index 0000000000000000000000000000000000000000..c36a69883ebb1be589e9fbc44c2a9a8b46d93204
--- /dev/null
+++ b/src/common/turb/les_mean_subgrid.F90
@@ -0,0 +1,74 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source$ $Revision$
+! MASDEV4_7 les 2006/08/30 18:41:10
+!-----------------------------------------------------------------
+!
+MODULE MODI_LES_MEAN_SUBGRID
+!      #####################
+!
+INTERFACE LES_MEAN_SUBGRID
+!
+      SUBROUTINE LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
+
+REAL,    DIMENSION(:,:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
+!
+END SUBROUTINE LES_MEAN_SUBGRID_3D
+!
+
+      SUBROUTINE LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
+
+REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:),   INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,       INTENT(IN)    :: OSUM
+!
+END SUBROUTINE LES_MEAN_SUBGRID_SURF
+!
+END INTERFACE
+!
+END MODULE MODI_LES_MEAN_SUBGRID
+!
+!     ##############################################
+      SUBROUTINE LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
+!     ##############################################
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+REAL,    DIMENSION(:,:,:), INTENT(IN)    :: PA
+REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
+LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
+!
+CALL ABORT ! AROME should not used this mesonh routine, if yes, check LLES_CALL
+!
+END SUBROUTINE LES_MEAN_SUBGRID_3D
+!
+!     ##############################################
+      SUBROUTINE LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
+!     ##############################################
+!
+IMPLICIT NONE
+!
+!*      0.1  declarations of arguments
+!
+REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
+REAL,    DIMENSION(:),   INTENT(INOUT) :: PA_MEAN
+LOGICAL, OPTIONAL,       INTENT(IN)    :: OSUM
+!
+!
+CALL ABORT ! AROME should not used this mesonh routine, if yes, check LLES_CALL
+!
+END SUBROUTINE LES_MEAN_SUBGRID_SURF
diff --git a/src/common/turb/les_mean_subgrid_3d.F90 b/src/common/turb/les_mean_subgrid_3d.F90
deleted file mode 100644
index d091f03c8f28c7d5b059832229c353c631275c15..0000000000000000000000000000000000000000
--- a/src/common/turb/les_mean_subgrid_3d.F90
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBROUTINE LES_MEAN_SUBGRID_3D
-END SUBROUTINE LES_MEAN_SUBGRID_3D
diff --git a/src/common/turb/les_mean_subgrid_phy.F90 b/src/common/turb/les_mean_subgrid_phy.F90
index 66f29f61ecd04493e5eba3d8e9c9307faa673b6f..f34cd613a8453aac7c4d89de44fcbe967a671118 100644
--- a/src/common/turb/les_mean_subgrid_phy.F90
+++ b/src/common/turb/les_mean_subgrid_phy.F90
@@ -15,25 +15,28 @@ MODULE MODI_LES_MEAN_SUBGRID_PHY
 INTERFACE LES_MEAN_SUBGRID_PHY
 !
 
-SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,PA, PA_MEAN, OSUM)
+SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,TLES,PA, PA_MEAN, OSUM)
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
 REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY
 !
-SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,PA, PA_MEAN, OSUM)
+SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,TLES,PA, PA_MEAN, OSUM)
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(:), INTENT(IN)    :: PA
 REAL,    DIMENSION(:), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
@@ -45,34 +48,40 @@ END INTERFACE LES_MEAN_SUBGRID_PHY
 END MODULE MODI_LES_MEAN_SUBGRID_PHY
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,TLES, PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
 REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
+CALL ABORT !not used in AROME
 END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,TLES, PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(:), INTENT(IN)    :: PA
 REAL,    DIMENSION(:), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
+CALL ABORT !not used in AROME
 END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY
diff --git a/src/common/turb/les_mean_subgrid_surf.F90 b/src/common/turb/les_mean_subgrid_surf.F90
deleted file mode 100644
index 407cb7f5130ecd9ab9b64d99bcb2c61965dd9ee0..0000000000000000000000000000000000000000
--- a/src/common/turb/les_mean_subgrid_surf.F90
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBROUTINE LES_MEAN_SUBGRID_SURF
-END SUBROUTINE LES_MEAN_SUBGRID_SURF
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index 1b16c4619620c1deb4c8986863910bbcc94c65a1..c17f91d839c6e9b5d5c9177d4991b0fdec7ca989 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -5,11 +5,11 @@
 MODULE MODE_TKE_EPS_SOURCES
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,TURBN,            &
+      SUBROUTINE TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,TURBN,TLES,       &
                     & HPROGRAM, KMI,PTKEM,PLM,PLEPS,PDP,               &
                     & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,        &
                     & PTSTEP,PEXPL,                                    &
-                    & TPFILE,OLES_CALL,ODIAG_IN_RUN,OOCEAN,            &
+                    & TPFILE,ODIAG_IN_RUN,OOCEAN,                      &
                     & PSFUM,PSFVM,                                     &
                     & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,&
                     & TBUDGETS, KBUDGETS,                              &
@@ -138,7 +138,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
 !
 USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_END_PHY, BUDGET_STORE_INIT_PHY
@@ -148,10 +148,6 @@ USE MODE_ll
 USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZF_PHY, DZM_PHY
 !
 USE MODI_GET_HALO
-!USE MODI_GRADIENT_M
-!USE MODI_GRADIENT_U
-!USE MODI_GRADIENT_V
-!USE MODI_GRADIENT_W
 USE MODI_LES_MEAN_SUBGRID_PHY
 USE MODE_TRIDIAG_TKE, ONLY: TRIDIAG_TKE
 !
@@ -167,6 +163,7 @@ TYPE(CST_t),             INTENT(IN)   :: CST
 TYPE(CSTURB_t),          INTENT(IN)   :: CSTURB
 TYPE(TBUDGETCONF_t),     INTENT(IN)   :: BUCONF
 TYPE(TURB_t),            INTENT(IN)   :: TURBN
+TYPE(TLES_t),            INTENT(INOUT):: TLES
 INTEGER,                 INTENT(IN)   ::  KMI          ! model index number  
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PTKEM        ! TKE at t-deltat
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PLM          ! mixing length         
@@ -179,7 +176,6 @@ REAL,                    INTENT(IN)   ::  PTSTEP       ! Time step
 REAL,                    INTENT(IN)   ::  PEXPL        ! Coef. temporal. disc.
 CHARACTER(LEN=6),        INTENT(IN)   ::  HPROGRAM     ! CPROGRAM is the program currently running (modd_conf)
 TYPE(TFILEDATA),         INTENT(IN)   ::  TPFILE       ! Output file
-LOGICAL,                 INTENT(IN)   ::  OLES_CALL    !
 LOGICAL,                 INTENT(IN)   ::  ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh)
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PDP          ! Dyn. prod. of TKE
@@ -345,7 +341,7 @@ PTDISS(IIJB:IIJE,1:D%NKT) = - ZFLX(IIJB:IIJE,1:D%NKT)*(PEXPL*PTKEM(IIJB:IIJE,1:D
                                       + TURBN%XIMPL*ZRES(IIJB:IIJE,1:D%NKT))
 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-IF ( OLES_CALL .OR.                         &
+IF ( TLES%LLES_CALL .OR.                         &
      (TURBN%LTURB_DIAG .AND. TPFILE%LOPENED)  ) THEN
 !
 ! Compute the cartesian vertical flux of TKE in ZFLX
@@ -378,10 +374,10 @@ IF ( OLES_CALL .OR.                         &
 !
 ! Storage in the LES configuration
 !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL MZF_PHY(D,ZFLX,ZMWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZMWORK1, X_LES_SUBGRID_WTke )
-    CALL LES_MEAN_SUBGRID_PHY(D, -ZTR, X_LES_SUBGRID_ddz_WTke )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMWORK1, TLES%X_LES_SUBGRID_WTke )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES, -ZTR, TLES%X_LES_SUBGRID_ddz_WTke )
   END IF
 !
 END IF
@@ -535,8 +531,8 @@ END IF
 ! Storage in the LES configuration of the Dynamic Production of TKE and
 ! the dissipation of TKE 
 ! 
-IF (OLES_CALL ) THEN
-  CALL LES_MEAN_SUBGRID_PHY(D, PDISS, X_LES_SUBGRID_DISS_Tke )
+IF (TLES%LLES_CALL ) THEN
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES, PDISS, TLES%X_LES_SUBGRID_DISS_Tke )
 END IF
 !
 !----------------------------------------------------------------------------
diff --git a/src/common/turb/mode_turb_hor.F90 b/src/common/turb/mode_turb_hor.F90
index bdaab01061d6bb8ddc7f6274b8f34e6446f39f48..892580aff988854eb1ad31e066ffc77f0ade9c4c 100644
--- a/src/common/turb/mode_turb_hor.F90
+++ b/src/common/turb/mode_turb_hor.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TURB_HOR  
 IMPLICIT NONE
 CONTAINS
-             SUBROUTINE TURB_HOR(D,CST,CSTURB,TURBN,                 &
+             SUBROUTINE TURB_HOR(D,CST,CSTURB,TURBN,TLES,            &
                       KSPLT, KRR, KRRL, KRRI, PTSTEP,                &
                       KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D,ONOMIXLG, &                      
                       OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,                 &
@@ -144,7 +144,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_TURB_HOR_THERMO_FLUX, ONLY: TURB_HOR_THERMO_FLUX
 USE MODE_TURB_HOR_THERMO_CORR, ONLY: TURB_HOR_THERMO_CORR
@@ -165,6 +165,7 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KSPLT         ! current split index
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -261,7 +262,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !*       6.   < V' R'np >
 !*       7.   < V' TPV' >
 !
-      CALL      TURB_HOR_THERMO_FLUX(TURBN,KSPLT, KRR, KRRL, KRRI,   &
+      CALL      TURB_HOR_THERMO_FLUX(TURBN,TLES,KSPLT, KRR, KRRL, KRRI,&
                       TPFILE,OFLAT, O2D,                             &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -276,7 +277,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !*       8.   TURBULENT CORRELATIONS : <THl THl>, <THl Rnp>, <Rnp Rnp>, Sigma_s
 !
       IF (KSPLT==1)                                                  &
-      CALL      TURB_HOR_THERMO_CORR(D,CST,TURBN,                    &
+      CALL      TURB_HOR_THERMO_CORR(D,CST,TURBN,TLES,               &
                       KRR, KRRL, KRRI,                               &
                       OOCEAN,OCOMPUTE_SRC,                           &
                       TPFILE,                                        &
@@ -293,7 +294,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !*      10.   < V'V'>
 !*      11.   < W'W'>
 ! 
-      CALL       TURB_HOR_DYN_CORR(TURBN,KSPLT, PTSTEP,              &
+      CALL       TURB_HOR_DYN_CORR(TURBN,TLES,KSPLT, PTSTEP,         &
                       KRR,KSV,OFLAT, O2D,                            &
                       TPFILE,                                        &
                       PK,PINV_PDZZ,                                  &
@@ -311,7 +312,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !
 !*      12.   < U'V'>
 !
-      CALL      TURB_HOR_UV(TURBN,KSPLT,OFLAT,O2D,                   &
+      CALL      TURB_HOR_UV(TURBN,TLES,KSPLT,OFLAT,O2D,              &
                       TPFILE,                                        &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -326,7 +327,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !
 !*      13.   < U'W'>
 !
-      CALL      TURB_HOR_UW(TURBN,KSPLT,                             &
+      CALL      TURB_HOR_UW(TURBN,TLES,KSPLT,                        &
                       KRR,KSV,OFLAT,                                 &
                       TPFILE,                                        &
                       PK,PINV_PDXX,PINV_PDZZ,PMZM_PRHODJ,            &
@@ -340,7 +341,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !
 !*      14.   < V'W'>
 !
-      CALL      TURB_HOR_VW(TURBN,KSPLT,                             &
+      CALL      TURB_HOR_VW(TURBN,TLES,KSPLT,                        &
                       KRR,KSV,OFLAT,O2D,                             &
                       TPFILE,                                        &
                       PK,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,            &
@@ -355,7 +356,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !
 !*      15.   HORIZONTAL FLUXES OF PASSIVE SCALARS
 !
-      CALL      TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW,OFLAT,        &
+      CALL      TURB_HOR_SV_FLUX(TURBN,TLES,KSPLT,OBLOWSNOW,OFLAT,   &
                       TPFILE,KSV_LGBEG,KSV_LGEND,O2D,ONOMIXLG,       &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW,               &
@@ -365,7 +366,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
                       PSVM,                                          &
                       PRSVS                                          )
 !
-      IF (KSPLT==1 .AND. LLES_CALL)                                  &
+      IF (KSPLT==1 .AND. TLES%LLES_CALL)                              &
       CALL      TURB_HOR_SV_CORR(D,CST,CSTURB,KSV,KSV_LGBEG,KSV_LGEND,&
                       KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,   &
                       ONOMIXLG,O2D,                                  &
diff --git a/src/common/turb/mode_turb_hor_dyn_corr.F90 b/src/common/turb/mode_turb_hor_dyn_corr.F90
index d9f4d2a61d3de07502b24fe37ac4791ac8b45bb1..6bfd6f98ef8d968586fcd46d5bea23844f4855f1 100644
--- a/src/common/turb/mode_turb_hor_dyn_corr.F90
+++ b/src/common/turb/mode_turb_hor_dyn_corr.F90
@@ -6,7 +6,7 @@
 MODULE MODE_TURB_HOR_DYN_CORR
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_DYN_CORR(TURBN,KSPLT, PTSTEP,              &
+      SUBROUTINE TURB_HOR_DYN_CORR(TURBN,TLES,KSPLT, PTSTEP,         &
                       KRR, KSV,OFLAT,O2D,                            &
                       TPFILE,                                        &
                       PK,PINV_PDZZ,                                  &
@@ -78,7 +78,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_ll
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
@@ -103,6 +103,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 REAL,                     INTENT(IN)    ::  PTSTEP       ! timestep
 INTEGER,                  INTENT(IN)    ::  KRR          ! number of moist var.
@@ -343,12 +344,12 @@ END IF
 !
 ! Storage in the LES configuration
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_U2 ) 
-  CALL LES_MEAN_SUBGRID( -ZWORK, X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
+  CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_U2 ) 
+  CALL LES_MEAN_SUBGRID( -ZWORK, TLES%X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 
 !
@@ -439,12 +440,12 @@ END IF
 !
 ! Storage in the LES configuration
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_V2 ) 
-  CALL LES_MEAN_SUBGRID( -ZWORK, X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
+  CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_V2 ) 
+  CALL LES_MEAN_SUBGRID( -ZWORK, TLES%X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !*      11.   < W'W'>
@@ -529,26 +530,26 @@ END IF
 ! Storage in the LES configuration
 !
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_W2 ) 
-  CALL LES_MEAN_SUBGRID( -ZWORK, X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
-  CALL LES_MEAN_SUBGRID( GZ_M_M(PTHLM,PDZZ)*ZFLX, X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
-  CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PTHLM,PDZZ)),X_LES_RES_ddz_Thl_SBG_W2)
+  CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_W2 ) 
+  CALL LES_MEAN_SUBGRID( -ZWORK, TLES%X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
+  CALL LES_MEAN_SUBGRID( GZ_M_M(PTHLM,PDZZ)*ZFLX, TLES%X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
+  CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PTHLM,PDZZ)),TLES%X_LES_RES_ddz_Thl_SBG_W2)
   IF (KRR>=1) THEN
     CALL LES_MEAN_SUBGRID( GZ_M_M(PRM(:,:,:,1),PDZZ)*ZFLX, &
-                           X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
     CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PRM(:,:,:,1),PDZZ)), &
-                           X_LES_RES_ddz_Rt_SBG_W2)
+                           TLES%X_LES_RES_ddz_Rt_SBG_W2)
   END IF
   DO JSV=1,KSV
     CALL LES_MEAN_SUBGRID( GZ_M_M(PSVM(:,:,:,JSV),PDZZ)*ZFLX, &
-                           X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.)
+                           TLES%X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.)
     CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PSVM(:,:,:,JSV),PDZZ)), &
-                           X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
+                           TLES%X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
   END DO
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 CALL CLEANLIST_ll(TZFIELDS_ll)
diff --git a/src/common/turb/mode_turb_hor_splt.F90 b/src/common/turb/mode_turb_hor_splt.F90
index d50a7bfb8688f47166bde43ba6544e4f81cebcc0..83fdd1ed2d39f76780a3613955029e4f50e1dfa5 100644
--- a/src/common/turb/mode_turb_hor_splt.F90
+++ b/src/common/turb/mode_turb_hor_splt.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TURB_HOR_SPLT
 IMPLICIT NONE
 CONTAINS
-           SUBROUTINE TURB_HOR_SPLT(D,CST,CSTURB,TURBN,              &
+           SUBROUTINE TURB_HOR_SPLT(D,CST,CSTURB,TURBN,TLES,         &
                       KSPLIT, KRR,KRRL,KRRI,KSV, KSV_LGBEG,KSV_LGEND,&
                       PTSTEP,HLBCX,HLBCY, OFLAT, O2D, ONOMIXLG,      &
                       OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW,          &
@@ -160,6 +160,7 @@ CONTAINS
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
 USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t
+USE MODD_LES, ONLY: TLES_t
 USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_IO, ONLY: TFILEDATA
@@ -182,6 +183,7 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time splitting
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -370,7 +372,7 @@ IF (KSPLIT>1 .AND. HPROGRAM=='MESONH') THEN
   DO JSPLT=1,KSPLIT
 !
 ! compute the turbulent tendencies for the small time step
-    CALL TURB_HOR(D,CST,CSTURB,TURBN,                             &
+    CALL TURB_HOR(D,CST,CSTURB,TURBN,TLES,                        &
                    JSPLT, KRR, KRRL, KRRI, PTSTEP,                &
                    KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D, ONOMIXLG,&
                    OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,                 &
@@ -391,7 +393,7 @@ IF (KSPLIT>1 .AND. HPROGRAM=='MESONH') THEN
 !
 ! horizontal transport of Tke
 !
-  CALL   TURB_HOR_TKE(JSPLT,OFLAT,O2D,                               &
+  CALL   TURB_HOR_TKE(JSPLT,TLES,OFLAT,O2D,                          &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
                       ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ,  &
                       ZK, PRHODJ, ZTKEM,                             &
@@ -513,7 +515,7 @@ IF (KSPLIT>1 .AND. HPROGRAM=='MESONH') THEN
 !
 ELSE
 !
-  CALL TURB_HOR(D,CST,CSTURB,TURBN,                            &
+  CALL TURB_HOR(D,CST,CSTURB,TURBN,TLES,                       &
                 1, KRR, KRRL, KRRI,  PTSTEP,                   &
                 KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D, ONOMIXLG,&                
                 OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,                 &
@@ -535,7 +537,7 @@ ELSE
 ! horizontal transport of Tke
 !
 
-  CALL   TURB_HOR_TKE(1,OFLAT,O2D,                                   &
+  CALL   TURB_HOR_TKE(1,TLES,OFLAT,O2D,                              &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
                       ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ,  &
                       ZK, PRHODJ, PTKEM,                             &
diff --git a/src/common/turb/mode_turb_hor_sv_corr.F90 b/src/common/turb/mode_turb_hor_sv_corr.F90
index cd776d573299e3c8ef5071e39d3c0fee9c217bdc..1ebc83f7fdef805bfb4504376260aecb9009c9bb 100644
--- a/src/common/turb/mode_turb_hor_sv_corr.F90
+++ b/src/common/turb/mode_turb_hor_sv_corr.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TURB_HOR_SV_CORR
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB,KSV,KSV_LGBEG,KSV_LGEND,&
+      SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB,TLES,KSV,KSV_LGBEG,KSV_LGEND,&
                       KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,   &
                       ONOMIXLG,O2D,                                  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW,               &
@@ -53,7 +53,7 @@ USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY : CSTURB_t
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -76,6 +76,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),         INTENT(IN)    ::  D
 TYPE(CST_t),              INTENT(IN)    ::  CST
 TYPE(CSTURB_t),           INTENT(IN)    ::  CSTURB
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KRR          ! number of moist var.
 INTEGER,                  INTENT(IN)    ::  KRRL         ! number of liquid var.
 INTEGER,                  INTENT(IN)    ::  KRRI         ! number of ice var.
@@ -137,7 +138,7 @@ DO JSV=1,KSV
   !
   ! variance Sv2
   !
-  IF (LLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     IF (.NOT. O2D) THEN
       ZFLX(:,:,:) =  ZCSV / ZCSVD * PLM(:,:,:) * PLEPS(:,:,:) *   &
          (  GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)**2             &
@@ -147,13 +148,13 @@ DO JSV=1,KSV
             GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)**2
     END IF
     CALL LES_MEAN_SUBGRID( -2.*ZCSVD*SQRT(PTKEM)*ZFLX/PLEPS, &
-                           X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV), .TRUE. )
-    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Sv2(:,:,:,JSV), .TRUE. )
+                           TLES%X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV), .TRUE. )
+    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, TLES%X_LES_RES_W_SBG_Sv2(:,:,:,JSV), .TRUE. )
   END IF
   !
   ! covariance SvThv
   !
-  IF (LLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
     IF (.NOT. O2D) THEN
       ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                          &
@@ -165,8 +166,8 @@ DO JSV=1,KSV
               * GX_M_M(PTHLM,PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
               * (CSTURB%XCSHF+ZCSV) / (2.*ZCTSVD)
     END IF
-    CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
+    CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
+    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
     !
     IF (KRR>=1) THEN
       CALL  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
@@ -180,15 +181,15 @@ DO JSV=1,KSV
                 * GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
                 * (CSTURB%XCHF+ZCSV) / (2.*ZCQSVD)
       END IF
-      CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
+      CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
     END IF
   END IF
 !
 END DO    ! end loop JSV
 !
 CALL SECOND_MNH(ZTIME2)
-XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 !
 END SUBROUTINE TURB_HOR_SV_CORR
 END MODULE MODE_TURB_HOR_SV_CORR
diff --git a/src/common/turb/mode_turb_hor_sv_flux.F90 b/src/common/turb/mode_turb_hor_sv_flux.F90
index a53b160b900286be9024b98d0d36d1698712f768..ae50bb870a833b4b7553d7eb95c33ba992679fcd 100644
--- a/src/common/turb/mode_turb_hor_sv_flux.F90
+++ b/src/common/turb/mode_turb_hor_sv_flux.F90
@@ -6,7 +6,7 @@
 MODULE MODE_TURB_HOR_SV_FLUX
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW,OFLAT,       &
+      SUBROUTINE TURB_HOR_SV_FLUX(TURBN,TLES,KSPLT,OBLOWSNOW,OFLAT,  &
                       TPFILE,KSV_LGBEG,KSV_LGEND,O2D,ONOMIXLG,       &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW,               &
@@ -66,7 +66,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -88,6 +88,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 TYPE(TFILEDATA),          INTENT(IN)    ::  TPFILE       ! Output file
 INTEGER,                  INTENT(IN)    ::  KSV_LGBEG,KSV_LGEND ! number of sv var.
@@ -214,15 +215,15 @@ DO JSV=1,ISV
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLXX)
   END IF
 !
-  IF (LLES_CALL .AND. KSPLT==1) THEN
+  IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MXF(ZFLXX), X_LES_SUBGRID_USv(:,:,:,JSV) ) 
+    CALL LES_MEAN_SUBGRID( MXF(ZFLXX), TLES%X_LES_SUBGRID_USv(:,:,:,JSV) ) 
     CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW(PWM,PDXX,PDZZ,PDZX)*MZM(ZFLXX))), &
-                           X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) , .TRUE. )
+                           TLES%X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) , .TRUE. )
     CALL LES_MEAN_SUBGRID( GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*MXF(ZFLXX), &
-                           X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV), .TRUE. )
+                           TLES%X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV), .TRUE. )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 !       15.2   <V' SVth'>
@@ -269,15 +270,15 @@ DO JSV=1,ISV
     ZFLXY=0.
   END IF
 !
-  IF (LLES_CALL .AND. KSPLT==1) THEN
+  IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MYF(ZFLXY), X_LES_SUBGRID_VSv(:,:,:,JSV) ) 
+    CALL LES_MEAN_SUBGRID( MYF(ZFLXY), TLES%X_LES_SUBGRID_VSv(:,:,:,JSV) ) 
     CALL LES_MEAN_SUBGRID( MZF(MYF(GY_W_VW(PWM,PDYY,PDZZ,PDZY)*MZM(ZFLXY))), &
-                           X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) , .TRUE. )
+                           TLES%X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) , .TRUE. )
     CALL LES_MEAN_SUBGRID( GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*MYF(ZFLXY), &
-                           X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) , .TRUE. )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 !
diff --git a/src/common/turb/mode_turb_hor_thermo_corr.F90 b/src/common/turb/mode_turb_hor_thermo_corr.F90
index 6e724513e414f6d1f4ffc9b0cbc850270a6e5cb0..33d7fbd4949741c7ebd0fcf6051fed4fb7723692 100644
--- a/src/common/turb/mode_turb_hor_thermo_corr.F90
+++ b/src/common/turb/mode_turb_hor_thermo_corr.F90
@@ -6,7 +6,7 @@
 MODULE MODE_TURB_HOR_THERMO_CORR
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_THERMO_CORR(D,CST,TURBN,                   &
+      SUBROUTINE TURB_HOR_THERMO_CORR(D,CST,TURBN,TLES,              &
                       KRR, KRRL, KRRI,                               &
                       OOCEAN,OCOMPUTE_SRC,                           &
                       TPFILE,                                        &
@@ -67,7 +67,7 @@ USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -93,6 +93,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
@@ -169,7 +170,7 @@ ZCOEFF(:,:,IKB)= - (PDZZ(:,:,IKB+2)+2.*PDZZ(:,:,IKB+1)) /      &
 !
 !
 IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) &
-                                  .OR. ( LLES_CALL )                  ) THEN
+                                  .OR. ( TLES%LLES_CALL )                  ) THEN
 !
 !*       8.1  <THl THl>
 !
@@ -225,16 +226,16 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
 !
 ! Storage in the LES configuration (addition to TURB_VER computation)
 !
-  IF (LLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Thl2, .TRUE. ) 
-    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Thl2, .TRUE. )
-    CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_Thl2, .TRUE. )
+    CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_Thl2, .TRUE. ) 
+    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, TLES%X_LES_RES_W_SBG_Thl2, .TRUE. )
+    CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,TLES%X_LES_SUBGRID_DISS_Thl2, .TRUE. )
     CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
-    CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
-    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz, .TRUE. )
+    CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_ThlThv, .TRUE. ) 
+    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_ThlPz, .TRUE. )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
   IF ( KRR /= 0 ) THEN
@@ -313,18 +314,18 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
 !
 !   Storage in the LES configuration (addition to TURB_VER computation)
 !
-    IF (LLES_CALL) THEN
+    IF (TLES%LLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
-      CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_ThlRt, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_ThlRt, .TRUE. )
-      CALL LES_MEAN_SUBGRID( -XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_ThlRt, .TRUE. )
-      CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_RtThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
+      CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_ThlRt, .TRUE. ) 
+      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, TLES%X_LES_RES_W_SBG_ThlRt, .TRUE. )
+      CALL LES_MEAN_SUBGRID( -XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,TLES%X_LES_SUBGRID_DISS_ThlRt, .TRUE. )
+      CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_RtThv, .TRUE. ) 
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_RtPz,.TRUE.)
       CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
-      CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz,.TRUE.)
+      CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_ThlThv, .TRUE. ) 
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_ThlPz,.TRUE.)
       CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+      TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
     END IF
 !
 !*       8.4  <Rnp Rnp>
@@ -381,15 +382,15 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
     !
     !   Storage in the LES configuration (addition to TURB_VER computation)
     !
-    IF (LLES_CALL) THEN
+    IF (TLES%LLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
-      CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Rt2, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Rt2, .TRUE. )
-      CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_RtThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
-      CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS, X_LES_SUBGRID_DISS_Rt2, .TRUE. )
+      CALL LES_MEAN_SUBGRID( ZFLX, TLES%X_LES_SUBGRID_Rt2, .TRUE. ) 
+      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, TLES%X_LES_RES_W_SBG_Rt2, .TRUE. )
+      CALL LES_MEAN_SUBGRID( ZA*ZFLX, TLES%X_LES_SUBGRID_RtThv, .TRUE. ) 
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, TLES%X_LES_SUBGRID_RtPz,.TRUE.)
+      CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS, TLES%X_LES_SUBGRID_DISS_Rt2, .TRUE. )
       CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+      TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
     END IF
   !
   END IF
diff --git a/src/common/turb/mode_turb_hor_thermo_flux.F90 b/src/common/turb/mode_turb_hor_thermo_flux.F90
index b28fa9996105e15d9ddfd692a4c485245b060ec1..93313669a3ffc01ca0ddf57ed8b0a999e541259f 100644
--- a/src/common/turb/mode_turb_hor_thermo_flux.F90
+++ b/src/common/turb/mode_turb_hor_thermo_flux.F90
@@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_THERMO_FLUX
 IMPLICIT NONE
 CONTAINS
 !     ################################################################
-      SUBROUTINE TURB_HOR_THERMO_FLUX(TURBN, KSPLT, KRR, KRRL, KRRI, &
+      SUBROUTINE TURB_HOR_THERMO_FLUX(TURBN, TLES,KSPLT, KRR, KRRL, KRRI, &
                       TPFILE,OFLAT,O2D,                              &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -68,7 +68,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -91,6 +91,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    :: KSPLT         ! split process index
 INTEGER,                  INTENT(IN)    :: KRR           ! number of moist var.
 INTEGER,                  INTENT(IN)    :: KRRL          ! number of liquid water var.
@@ -258,19 +259,19 @@ IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
-IF (KSPLT==1 .AND. LLES_CALL) THEN
+IF (KSPLT==1 .AND. TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MXF(ZFLX), X_LES_SUBGRID_UThl ) 
+  CALL LES_MEAN_SUBGRID( MXF(ZFLX), TLES%X_LES_SUBGRID_UThl ) 
   CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW(PWM,PDXX,PDZZ,PDZX)*MZM(ZFLX))),&
-                         X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
+                         TLES%X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
   CALL LES_MEAN_SUBGRID( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)*MXF(ZFLX),&
-                         X_LES_RES_ddxa_Thl_SBG_UaThl , .TRUE. )
+                         TLES%X_LES_RES_ddxa_Thl_SBG_UaThl , .TRUE. )
   IF (KRR>=1) THEN
     CALL LES_MEAN_SUBGRID( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)*MXF(ZFLX), &
-                           X_LES_RES_ddxa_Rt_SBG_UaThl , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaThl , .TRUE. )
   END IF
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !*       3.   < U' R'np >
@@ -361,25 +362,25 @@ IF (KRR/=0) THEN
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
   END IF
   !
-  IF (KSPLT==1 .AND. LLES_CALL) THEN
+  IF (KSPLT==1 .AND. TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MXF(ZFLX), X_LES_SUBGRID_URt ) 
+    CALL LES_MEAN_SUBGRID( MXF(ZFLX), TLES%X_LES_SUBGRID_URt ) 
     CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW(PWM,PDXX,PDZZ,PDZX)*MZM(ZFLX))),&
-                           X_LES_RES_ddxa_W_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_W_SBG_UaRt , .TRUE. )
     CALL LES_MEAN_SUBGRID( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)*MXF(ZFLX),&
-                           X_LES_RES_ddxa_Thl_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Thl_SBG_UaRt , .TRUE. )
     CALL LES_MEAN_SUBGRID( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)*MXF(ZFLX),&
-                           X_LES_RES_ddxa_Rt_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaRt , .TRUE. )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
   !
-  IF (KRRL>0 .AND. KSPLT==1 .AND. LLES_CALL) THEN
+  IF (KRRL>0 .AND. KSPLT==1 .AND. TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID(MXF(ZFLXC), X_LES_SUBGRID_URc )
+    CALL LES_MEAN_SUBGRID(MXF(ZFLXC), TLES%X_LES_SUBGRID_URc )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 END IF 
@@ -513,19 +514,19 @@ IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
-IF (KSPLT==1 .AND. LLES_CALL) THEN
+IF (KSPLT==1 .AND. TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MYF(ZFLX), X_LES_SUBGRID_VThl ) 
+  CALL LES_MEAN_SUBGRID( MYF(ZFLX), TLES%X_LES_SUBGRID_VThl ) 
   CALL LES_MEAN_SUBGRID( MZF(MYF(GY_W_VW(PWM,PDYY,PDZZ,PDZY)*MZM(ZFLX))),&
-                         X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
+                         TLES%X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
   CALL LES_MEAN_SUBGRID( GY_M_M(PTHLM,PDYY,PDZZ,PDZY)*MYF(ZFLX),&
-                         X_LES_RES_ddxa_Thl_SBG_UaThl , .TRUE. )
+                         TLES%X_LES_RES_ddxa_Thl_SBG_UaThl , .TRUE. )
   IF (KRR>=1) THEN
     CALL LES_MEAN_SUBGRID( GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)*MYF(ZFLX),&
-                           X_LES_RES_ddxa_Rt_SBG_UaThl , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaThl , .TRUE. )
   END IF
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
@@ -625,25 +626,25 @@ IF (KRR/=0) THEN
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
   END IF
   !
-  IF (KSPLT==1 .AND. LLES_CALL) THEN
+  IF (KSPLT==1 .AND. TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MYF(ZFLX), X_LES_SUBGRID_VRt ) 
+    CALL LES_MEAN_SUBGRID( MYF(ZFLX), TLES%X_LES_SUBGRID_VRt ) 
     CALL LES_MEAN_SUBGRID( MZF(MYF(GY_W_VW(PWM,PDYY,PDZZ,PDZY)*MZM(ZFLX))),&
-                           X_LES_RES_ddxa_W_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_W_SBG_UaRt , .TRUE. )
     CALL LES_MEAN_SUBGRID( GY_M_M(PTHLM,PDYY,PDZZ,PDZY)*MYF(ZFLX), &
-                           X_LES_RES_ddxa_Thl_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Thl_SBG_UaRt , .TRUE. )
     CALL LES_MEAN_SUBGRID( GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)*MYF(ZFLX), &
-                           X_LES_RES_ddxa_Rt_SBG_UaRt , .TRUE. )
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaRt , .TRUE. )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
   !
-  IF (KRRL>0 .AND. KSPLT==1 .AND. LLES_CALL) THEN
+  IF (KRRL>0 .AND. KSPLT==1 .AND. TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID(MYF(ZFLXC), X_LES_SUBGRID_VRc )
+    CALL LES_MEAN_SUBGRID(MYF(ZFLXC), TLES%X_LES_SUBGRID_VRc )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
   !
 END IF
diff --git a/src/common/turb/mode_turb_hor_tke.F90 b/src/common/turb/mode_turb_hor_tke.F90
index 5266601b269410b2a841beb684ceb9b96f7db3da..4c4006d546d34baf3d5640a4c1b515437fa7bc62 100644
--- a/src/common/turb/mode_turb_hor_tke.F90
+++ b/src/common/turb/mode_turb_hor_tke.F90
@@ -6,7 +6,7 @@
 MODULE MODE_TURB_HOR_TKE
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_TKE(KSPLT,OFLAT,O2D,                       &
+      SUBROUTINE TURB_HOR_TKE(KSPLT,TLES,OFLAT,O2D,                  &
                       PDXX, PDYY, PDZZ,PDZX,PDZY,                    &
                       PINV_PDXX, PINV_PDYY, PINV_PDZZ, PMZM_PRHODJ,  &
                       PK, PRHODJ, PTKEM,                             &
@@ -51,7 +51,7 @@ CONTAINS
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 !
 USE MODI_SHUMAN 
@@ -66,6 +66,7 @@ IMPLICIT NONE
 !*       0.1  declaration of arguments
 !
 !
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN) :: KSPLT        ! current split index
 LOGICAL,                  INTENT(IN) ::  OFLAT       ! Logical for zero ororography
 LOGICAL,                  INTENT(IN) ::  O2D         ! Logical for 2D model version (modd_conf)
@@ -151,11 +152,11 @@ ELSE
          ) /PRHODJ
 END IF
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MXF(ZFLX), X_LES_SUBGRID_UTke ) 
+  CALL LES_MEAN_SUBGRID( MXF(ZFLX), TLES%X_LES_SUBGRID_UTke ) 
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
@@ -198,11 +199,11 @@ IF (.NOT. O2D) THEN
                   ) /PRHODJ
   END IF
 !
-  IF (LLES_CALL .AND. KSPLT==1) THEN
+  IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MYF(ZFLX), X_LES_SUBGRID_VTke )
+    CALL LES_MEAN_SUBGRID( MYF(ZFLX), TLES%X_LES_SUBGRID_VTke )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 END IF
diff --git a/src/common/turb/mode_turb_hor_uv.F90 b/src/common/turb/mode_turb_hor_uv.F90
index fccdc2934e45df83ac2a8b0ae7522ebd34aae9a5..cd9a3f32a3147c77477cbd5c035ad92d62a56d75 100644
--- a/src/common/turb/mode_turb_hor_uv.F90
+++ b/src/common/turb/mode_turb_hor_uv.F90
@@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_UV
 IMPLICIT NONE
 CONTAINS
 !     ################################################################
-      SUBROUTINE TURB_HOR_UV(TURBN,KSPLT,OFLAT,O2D,                  &
+      SUBROUTINE TURB_HOR_UV(TURBN,TLES,KSPLT,OFLAT,O2D,             &
                       TPFILE,                                        &
                       PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,  &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -65,7 +65,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -87,6 +87,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 TYPE(TFILEDATA),          INTENT(IN)    ::  TPFILE       ! Output file
 LOGICAL,                  INTENT(IN)    ::  OFLAT        ! Logical for zero ororography
@@ -279,13 +280,13 @@ END IF
 !
 ! Storage in the LES configuration
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MXF(MYF(ZFLX)), X_LES_SUBGRID_UV ) 
-  CALL LES_MEAN_SUBGRID( MXF(MYF(GY_U_UV(PUM,PDYY,PDZZ,PDZY)*ZFLX)), X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
-  CALL LES_MEAN_SUBGRID( MXF(MYF(GX_V_UV(PVM,PDXX,PDZZ,PDZX)*ZFLX)), X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
+  CALL LES_MEAN_SUBGRID( MXF(MYF(ZFLX)), TLES%X_LES_SUBGRID_UV ) 
+  CALL LES_MEAN_SUBGRID( MXF(MYF(GY_U_UV(PUM,PDYY,PDZZ,PDZY)*ZFLX)), TLES%X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
+  CALL LES_MEAN_SUBGRID( MXF(MYF(GX_V_UV(PVM,PDXX,PDZZ,PDZX)*ZFLX)), TLES%X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
diff --git a/src/common/turb/mode_turb_hor_uw.F90 b/src/common/turb/mode_turb_hor_uw.F90
index d4a20a20bcc2b1fd6908811eaf995192b2e05e18..b13acfaa287d3038bec942634f4c1b85dcde385a 100644
--- a/src/common/turb/mode_turb_hor_uw.F90
+++ b/src/common/turb/mode_turb_hor_uw.F90
@@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_UW
 IMPLICIT NONE
 CONTAINS
 !     ################################################################
-      SUBROUTINE TURB_HOR_UW(TURBN,KSPLT,                            &
+      SUBROUTINE TURB_HOR_UW(TURBN,TLES,KSPLT,                       &
                       KRR,KSV,OFLAT,                                 &
                       TPFILE,                                        &
                       PK,PINV_PDXX,PINV_PDZZ,PMZM_PRHODJ,            &
@@ -69,7 +69,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -91,6 +91,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 INTEGER,                  INTENT(IN)    ::  KRR          ! number of moist var.
 INTEGER,                  INTENT(IN)    ::  KSV          ! number of sv var.
@@ -225,23 +226,23 @@ END IF
 !
 ! Storage in the LES configuration (addition to TURB_VER computation)
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MZF(MXF(ZFLX)), X_LES_SUBGRID_WU , .TRUE. )
-  CALL LES_MEAN_SUBGRID( MZF(MXF(GZ_U_UW(PUM,PDZZ)*ZFLX)), X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
-  CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW_PWM*ZFLX)), X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
+  CALL LES_MEAN_SUBGRID( MZF(MXF(ZFLX)), TLES%X_LES_SUBGRID_WU , .TRUE. )
+  CALL LES_MEAN_SUBGRID( MZF(MXF(GZ_U_UW(PUM,PDZZ)*ZFLX)), TLES%X_LES_RES_ddxa_U_SBG_UaU , .TRUE.)
+  CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW_PWM*ZFLX)), TLES%X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
   CALL LES_MEAN_SUBGRID( MXF(GX_M_U(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX)*MZF(ZFLX)),&
-                         X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
+                         TLES%X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
   IF (KRR>=1) THEN
     CALL LES_MEAN_SUBGRID( MXF(GX_M_U(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX)*MZF(ZFLX)), &
-                           X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
   END IF
   DO JSV=1,KSV
     CALL LES_MEAN_SUBGRID( MXF(GX_M_U(1,IKU,1,PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*MZF(ZFLX)), &
-                           X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.)
+                           TLES%X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.)
   END DO
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 
 !
diff --git a/src/common/turb/mode_turb_hor_vw.F90 b/src/common/turb/mode_turb_hor_vw.F90
index 807e229c48abc8f90ea7a0800a9ea8c9decd5f44..196734ea63a19cd4b31ef7e735e9fc2a50c89104 100644
--- a/src/common/turb/mode_turb_hor_vw.F90
+++ b/src/common/turb/mode_turb_hor_vw.F90
@@ -6,7 +6,7 @@
 MODULE MODE_TURB_HOR_VW
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_VW(TURBN,KSPLT,                            &
+      SUBROUTINE TURB_HOR_VW(TURBN,TLES,KSPLT,                       &
                       KRR,KSV,OFLAT,O2D,                             &
                       TPFILE,                                        &
                       PK,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ,            &
@@ -68,7 +68,7 @@ USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -90,6 +90,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TURB_t),             INTENT(IN)    :: TURBN
+TYPE(TLES_t),             INTENT(INOUT) :: TLES          ! modd_les structure
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 INTEGER,                  INTENT(IN)    ::  KRR          ! number of moist var.
 INTEGER,                  INTENT(IN)    ::  KSV          ! number of sv var.
@@ -234,25 +235,25 @@ END IF
 !
 ! Storage in the LES configuration (addition to TURB_VER computation)
 !
-IF (LLES_CALL .AND. KSPLT==1) THEN
+IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MZF(MYF(ZFLX)), X_LES_SUBGRID_WV , .TRUE. )
+  CALL LES_MEAN_SUBGRID( MZF(MYF(ZFLX)), TLES%X_LES_SUBGRID_WV , .TRUE. )
   CALL LES_MEAN_SUBGRID( MZF(MYF(GZ_V_VW(PVM,PDZZ)*ZFLX)),&
-                         X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
+                         TLES%X_LES_RES_ddxa_V_SBG_UaV , .TRUE.)
   CALL LES_MEAN_SUBGRID( MZF(MYF(GY_W_VW(PWM,PDYY,PDZZ,PDZY)*ZFLX)),&
-                         X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
+                         TLES%X_LES_RES_ddxa_W_SBG_UaW , .TRUE.)
   CALL LES_MEAN_SUBGRID( MXF(GY_M_V(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY)*MZF(ZFLX)),&
-                         X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
+                         TLES%X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE.)
   IF (KRR>=1) THEN
     CALL LES_MEAN_SUBGRID( MXF(GY_M_V(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY)*MZF(ZFLX)), &
-                           X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
+                           TLES%X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.)
   END IF
   DO JSV=1,KSV
     CALL LES_MEAN_SUBGRID( MXF(GY_M_V(1,IKU,1,PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*MZF(ZFLX)), &
-                           X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV), .TRUE.)
+                           TLES%X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV), .TRUE.)
   END DO
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90
index fba0b8c272a56d73590dc84981c2475769402f54..f7726a4ac475080fbdebed93f1a8171af41a5e11 100644
--- a/src/common/turb/mode_turb_ver.F90
+++ b/src/common/turb/mode_turb_ver.F90
@@ -5,11 +5,11 @@
 MODULE MODE_TURB_VER
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,KRR,KRRL,KRRI,KGRADIENTS,    &
+SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,TLES,KRR,KRRL,KRRI,KGRADIENTS,&
                       OOCEAN,ODEEPOC,OCOMPUTE_SRC,                  &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
                       PEXPL, HPROGRAM, O2D, ONOMIXLG, OFLAT,        &
-                      OLES_CALL,OCOUPLES,OBLOWSNOW,PRSNOW,          &                      
+                      OCOUPLES,OBLOWSNOW,PRSNOW,                    & 
                       PTSTEP, TPFILE,                               &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                       PCOSSLOPE,PSINSLOPE,                          &
@@ -218,7 +218,7 @@ USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODE_EMOIST, ONLY: EMOIST
@@ -244,6 +244,7 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -253,7 +254,6 @@ LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model v
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
 REAL,                   INTENT(IN)   ::  PRSNOW       ! Ratio for diffusion coeff. scalar (blowing snow)
@@ -469,14 +469,14 @@ CALL PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3,ZPSI
 !
 ! LES diagnostics
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZPHI3,X_LES_SUBGRID_PHI3)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZPHI3,TLES%X_LES_SUBGRID_PHI3)
   IF(KRR/=0) THEN
-    CALL LES_MEAN_SUBGRID_PHY(D,ZPSI3,X_LES_SUBGRID_PSI3)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZPSI3,TLES%X_LES_SUBGRID_PSI3)
   END IF
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !----------------------------------------------------------------------------
 !
@@ -499,10 +499,10 @@ ELSE
   ZLM(:,:)=PLM(:,:)
 ENDIF
 !
-  CALL  TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,                      &
+  CALL  TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,TLES,                 &
                         KRR,KRRL,KRRI,KSV,KGRADIENTS,                 &
                         OOCEAN,ODEEPOC,                               &
-                        OCOUPLES,OLES_CALL,OCOMPUTE_SRC,              &
+                        OCOUPLES,OCOMPUTE_SRC,                        &
                         PEXPL,PTSTEP,HPROGRAM,TPFILE,                 &
                         PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                         PRHODJ,PTHVREF,PHGRAD,PZS,                    &
@@ -518,10 +518,10 @@ ENDIF
                         PRTHLS,PRRS,ZTHLP,ZRP,PTP,PWTH,PWRC,          &
                         PSSTFL, PSSTFL_C, PSSRFL_C                    )
 !
-  CALL  TURB_VER_THERMO_CORR(D,CST,CSTURB,TURBN,                      &
+  CALL  TURB_VER_THERMO_CORR(D,CST,CSTURB,TURBN,TLES,                 &
                         KRR,KRRL,KRRI,KSV,                            &
                         OCOMPUTE_SRC,                                 &
-                        OCOUPLES,OLES_CALL,                           &
+                        OCOUPLES,                                     &
                         PEXPL,TPFILE,                                 &
                         PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,           &
                         PRHODJ,PTHVREF,                               &
@@ -551,8 +551,8 @@ ENDIF
 !
 IF (TURBN%LHARAT) ZLM(:,:)=PLENGTHM(:,:)
 !
-CALL  TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT,           &
-                      KRR,OOCEAN,OCOUPLES,OLES_CALL,                &
+CALL  TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,TLES,KSV,O2D,OFLAT,      &
+                      KRR,OOCEAN,OCOUPLES,                          &
                       PEXPL,PTSTEP,TPFILE,                          &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                       PCOSSLOPE,PSINSLOPE,                          &
@@ -572,9 +572,9 @@ CALL  TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT,           &
 IF (TURBN%LHARAT) ZLM(:,:)=PLENGTHH(:,:)
 !
 IF (KSV>0)                                                          &
-CALL  TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,ONOMIXLG,                 &
+CALL  TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,TLES,ONOMIXLG,            &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
-                      OBLOWSNOW,OLES_CALL,                          &
+                      OBLOWSNOW,                                    &
                       PEXPL,PTSTEP,TPFILE,PRSNOW,                   &
                       PDZZ,PDIRCOSZW,                               &
                       PRHODJ,PWM,                                   &
@@ -584,10 +584,10 @@ CALL  TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,ONOMIXLG,                 &
                       PRSVS,PWSV                                    )
 !
 !
-IF (KSV>0 .AND. OLES_CALL)                                          &
-CALL  TURB_VER_SV_CORR(D,CST,CSTURB,KRR,KRRL,KRRI,OOCEAN,           &
+IF (KSV>0 .AND. TLES%LLES_CALL)                                          &
+CALL  TURB_VER_SV_CORR(D,CST,CSTURB,TLES,KRR,KRRL,KRRI,OOCEAN,      &
                       PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG,        &
-                      OBLOWSNOW,OLES_CALL,OCOMPUTE_SRC,PRSNOW,      &
+                      OBLOWSNOW,OCOMPUTE_SRC,PRSNOW,                &
                       PTHLM,PRM,PTHVREF,                            &
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,ZPHI3,ZPSI3,  &
                       PWM,PSVM,                                     &
diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90
index 5157b5ac3bd74f8d739bb8eb3201ecb832fd3c38..2c635afa156c770b8d79809b5d5fc2fe411eefeb 100644
--- a/src/common/turb/mode_turb_ver_dyn_flux.F90
+++ b/src/common/turb/mode_turb_ver_dyn_flux.F90
@@ -5,8 +5,8 @@
 MODULE MODE_TURB_VER_DYN_FLUX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT,      &
-                      KRR,OOCEAN,OCOUPLES,OLES_CALL,                &
+SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,TLES,KSV,O2D,OFLAT, &
+                      KRR,OOCEAN,OCOUPLES,                          &
                       PEXPL,PTSTEP,TPFILE,                          &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                       PCOSSLOPE,PSINSLOPE,                          &
@@ -212,7 +212,7 @@ USE MODD_CTURB, ONLY: CSTURB_t
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
 USE MODD_TURB_n, ONLY: TURB_t
 !
@@ -240,11 +240,11 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KSV           ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  O2D          ! Logical for 2D model version (modd_conf)
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
@@ -570,12 +570,12 @@ END IF
 !
 ! Storage in the LES configuration
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
   !
   CALL MXF_PHY(D,ZFLXZ,ZWORK1)
   CALL MZF_PHY(D,ZWORK1,ZWORK2)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_SUBGRID_WU )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_WU )
   !
   CALL GZ_U_UW_PHY(D,PUM,PDZZ,ZWORK1)
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
@@ -583,15 +583,15 @@ IF (OLES_CALL) THEN
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   CALL MXF_PHY(D,ZWORK1,ZWORK2)
   CALL MZF_PHY(D,ZWORK2,ZWORK3) 
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_U_SBG_UaU )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_U_SBG_UaU )
   !
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK1(IIJB:IIJE,1:D%NKT) = ZCMFS * ZKEFF(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-  CALL LES_MEAN_SUBGRID_PHY(D, ZWORK1, X_LES_SUBGRID_Km )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_Km )
   !
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !*       5.3  Source of W wind component
@@ -697,7 +697,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
   !
   ! Storage in the LES configuration
   !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     !
     CALL GX_W_UW_PHY(D,OFLAT,PWM,PDXX,PDZZ,PDZX,ZWORK1)
@@ -706,7 +706,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MXF_PHY(D,ZWORK1,ZWORK2)
     CALL MZF_PHY(D,ZWORK2,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_RES_ddxa_W_SBG_UaW )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_RES_ddxa_W_SBG_UaW )
     !
     CALL GX_M_U_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZWORK1)
     CALL MZF_PHY(D,ZFLXZ,ZWORK2)
@@ -714,7 +714,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
     ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MXF_PHY(D,ZWORK2,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_RES_ddxa_Thl_SBG_UaW )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_RES_ddxa_Thl_SBG_UaW )
     !
     IF (KRR>=1) THEN
       CALL GX_U_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZWORK1)
@@ -723,7 +723,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
       ZWORK1(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZWORK2(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       CALL MXF_PHY(D,ZWORK1,ZWORK2)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2,X_LES_RES_ddxa_Rt_SBG_UaW )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Rt_SBG_UaW )
     END IF
     DO JSV=1,KSV
       CALL GX_U_M_PHY(D,OFLAT,PSVM(:,:,JSV),PDXX,PDZZ,PDZX,ZWORK1)
@@ -732,10 +732,10 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
       ZWORK1(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZWORK2(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       CALL MXF_PHY(D,ZWORK1,ZWORK2)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2,X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) )
     END DO
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 END IF
 !
@@ -940,12 +940,12 @@ PDP(IIJB:IIJE,1:D%NKT)=PDP(IIJB:IIJE,1:D%NKT)+ZA(IIJB:IIJE,1:D%NKT)
 !
 ! Storage in the LES configuration
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
   !
   CALL MYF_PHY(D,ZFLXZ,ZWORK1)
   CALL MZF_PHY(D,ZWORK1,ZWORK2)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_SUBGRID_WV )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_WV )
   !
   CALL GZ_V_VW_PHY(D,PVM,PDZZ,ZWORK1)
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
@@ -953,10 +953,10 @@ IF (OLES_CALL) THEN
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   CALL MYF_PHY(D,ZWORK1,ZWORK2)
   CALL MZF_PHY(D,ZWORK2,ZWORK1)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_RES_ddxa_V_SBG_UaV )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_RES_ddxa_V_SBG_UaV )
   !
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
@@ -1065,7 +1065,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
   !
   ! Storage in the LES configuration
   !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     !
     CALL GY_W_VW_PHY(D,OFLAT,PWM,PDYY,PDZZ,PDZY,ZWORK1)
@@ -1074,7 +1074,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MYF_PHY(D,ZWORK1,ZWORK2)
     CALL MZF_PHY(D,ZWORK2,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1,X_LES_RES_ddxa_W_SBG_UaW , .TRUE. )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1,TLES%X_LES_RES_ddxa_W_SBG_UaW , .TRUE. )
     !
     CALL GY_M_V_PHY(D,OFLAT,PTHLM,PDYY,PDZZ,PDZY,ZWORK1)
     CALL MZF_PHY(D,ZFLXZ,ZWORK2)
@@ -1082,7 +1082,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
     ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MYF_PHY(D,ZWORK2,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1,X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1,TLES%X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. )
     !
     IF (KRR>=1) THEN
       CALL GY_V_M_PHY(D,OFLAT,PRM(:,:,1),PDYY,PDZZ,PDZY,ZWORK1)
@@ -1091,11 +1091,11 @@ IF(TURBN%CTURBDIM=='3DIM') THEN
       ZWORK1(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZWORK2(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       CALL MYF_PHY(D,ZWORK1,ZWORK2)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2,X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE. )
     END IF
     !
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
   !
 END IF
diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90
index 2438f08f5c2491e707f84563961e0dc7e0b9be96..e790136bdbfd742e9f2af41640ea8244866ce6f5 100644
--- a/src/common/turb/mode_turb_ver_sv_corr.F90
+++ b/src/common/turb/mode_turb_ver_sv_corr.F90
@@ -5,9 +5,9 @@
 MODULE MODE_TURB_VER_SV_CORR
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_SV_CORR(D,CST,CSTURB,KRR,KRRL,KRRI,OOCEAN,&
+SUBROUTINE TURB_VER_SV_CORR(D,CST,CSTURB,TLES,KRR,KRRL,KRRI,OOCEAN, &
                       PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG,        &
-                      OBLOWSNOW,OLES_CALL,OCOMPUTE_SRC,PRSNOW,      &
+                      OBLOWSNOW,OCOMPUTE_SRC,PRSNOW,                &
                       PTHLM,PRM,PTHVREF,                            &
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PPHI3,PPSI3,  &
                       PWM,PSVM,                                     &
@@ -60,7 +60,7 @@ USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE SHUMAN_PHY, ONLY:  MZF_PHY
 USE MODE_GRADIENT_M_PHY, ONLY : GZ_M_W_PHY
@@ -79,10 +79,10 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),       INTENT(IN)   ::  D
 TYPE(CST_t),            INTENT(IN)   ::  CST
 TYPE(CSTURB_t),         INTENT(IN)   ::  CSTURB
+TYPE(TLES_t),           INTENT(INOUT)::  TLES         ! modd_les structure
 INTEGER,                INTENT(IN)   ::  KSV, KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables (modd_conf)
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
 REAL,                   INTENT(IN)   ::  PRSNOW       ! Ratio for diffusion coeff. scalar (blowing snow)
@@ -152,7 +152,7 @@ DO JSV=1,KSV
   !
   ! variance Sv2
   !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
     CALL GZ_M_W_PHY(D,PSVM(:,:,JSV),PDZZ,ZWORK1)
     CALL MZF_PHY(D,ZFLXZ,ZWORK2)
@@ -163,13 +163,13 @@ DO JSV=1,KSV
     ZWORK1(IIJB:IIJE,1:D%NKT) = -2.*ZCSVD*SQRT(PTKEM(IIJB:IIJE,1:D%NKT))*ZFLXZ(IIJB:IIJE,1:D%NKT)/PLEPS(IIJB:IIJE,1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK3(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
   END IF
   !
   ! covariance ThvSv
   !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
     CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
     !
@@ -188,8 +188,8 @@ DO JSV=1,KSV
     ZWORK2(IIJB:IIJE,1:D%NKT) = -CST%XG/PTHVREF(IIJB:IIJE,1:D%NKT)/3.*ZA(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)    
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     !
-    CALL LES_MEAN_SUBGRID_PHY(D, ZWORK1, X_LES_SUBGRID_SvThv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID_PHY(D, ZWORK2, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK2, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
     !
     IF (KRR>=1) THEN
       CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
@@ -205,15 +205,15 @@ DO JSV=1,KSV
       ZWORK1(IIJB:IIJE,1:D%NKT) = ZA(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
       ZWORK2(IIJB:IIJE,1:D%NKT) = -CST%XG/PTHVREF(IIJB:IIJE,1:D%NKT)/3.*ZA(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D, ZWORK1, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-      CALL LES_MEAN_SUBGRID_PHY(D, ZWORK2, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK2, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
     END IF
   END IF
   !
 END DO   ! end of scalar loop 
 !
 CALL SECOND_MNH(ZTIME2)
-IF(OLES_CALL) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+IF(TLES%LLES_CALL) TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 !----------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',1,ZHOOK_HANDLE)
diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90
index cc38eae30136b5f6f04a68ab237e6d4ce8efd851..d5e75f639495484bb152ecaa9be1b0b960aed452 100644
--- a/src/common/turb/mode_turb_ver_sv_flux.F90
+++ b/src/common/turb/mode_turb_ver_sv_flux.F90
@@ -5,9 +5,9 @@
 MODULE MODE_TURB_VER_SV_FLUX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,ONOMIXLG,            &
+SUBROUTINE TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,TLES,ONOMIXLG,       &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
-                      OBLOWSNOW,OLES_CALL,                          &
+                      OBLOWSNOW,                                    &
                       PEXPL,PTSTEP,TPFILE,PRSNOW,                   &
                       PDZZ,PDIRCOSZW,                               &
                       PRHODJ,PWM,                                   &
@@ -218,7 +218,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
 !
 
@@ -241,10 +241,10 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KSV, &
                                        KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables (modd_conf)
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
 REAL,                   INTENT(IN)   ::  PRSNOW       ! Ratio for diffusion coeff. scalar (blowing snow)
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
@@ -390,7 +390,7 @@ DO JSV=1,KSV
                     PRHODJ(IIJB:IIJE,IKB:IKE)*(ZRES(IIJB:IIJE,IKB:IKE)-PSVM(IIJB:IIJE,IKB:IKE,JSV))/PTSTEP
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-  IF ( (TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL ) THEN
+  IF ( (TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL ) THEN
     ! Diagnostic of the cartesian vertical flux
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
@@ -456,39 +456,39 @@ DO JSV=1,KSV
   !
   ! Storage in the LES configuration
   !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     !
     CALL MZF_PHY(D,ZFLXZ,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_WSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WSv(:,:,:,JSV) )
     !
     CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK3(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) )
     !
     CALL GZ_M_W_PHY(D,PSVM(:,:,JSV),PDZZ,ZWORK1)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK2,ZWORK3)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) )
     !
     CALL MZF_PHY(D,ZFLXZ,ZWORK1)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = -ZCSVP*SQRT(PTKEM(IIJB:IIJE,1:D%NKT))/PLM(IIJB:IIJE,1:D%NKT)*ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_SUBGRID_SvPz(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV) )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK1(IIJB:IIJE,1:D%NKT) = PWM(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK1,ZWORK2)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
     !
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
   !
 END DO   ! end of scalar loop
diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90
index 5e4479849272247b2ff41ceab5fd63bc3789afa8..a535dfb9c654ba15db362b3f509dddde05b223ed 100644
--- a/src/common/turb/mode_turb_ver_thermo_corr.F90
+++ b/src/common/turb/mode_turb_ver_thermo_corr.F90
@@ -5,9 +5,9 @@
 MODULE MODE_TURB_VER_THERMO_CORR
 IMPLICIT NONE
 CONTAINS      
-SUBROUTINE TURB_VER_THERMO_CORR(D,CST,CSTURB,TURBN,                 &
+SUBROUTINE TURB_VER_THERMO_CORR(D,CST,CSTURB,TURBN,TLES,            &
                       KRR,KRRL,KRRI,KSV,                            &
-                      OCOMPUTE_SRC,OCOUPLES,OLES_CALL,              &
+                      OCOMPUTE_SRC,OCOUPLES,                        &
                       PEXPL,TPFILE,                                 &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,           &
                       PRHODJ,PTHVREF,                               &
@@ -212,7 +212,7 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 !
 USE MODI_LES_MEAN_SUBGRID_PHY
 !
@@ -232,11 +232,11 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and version 
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
@@ -624,36 +624,36 @@ END IF
 !
 ! and we store in LES configuration
 !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     !
-    CALL LES_MEAN_SUBGRID_PHY(D,ZFLXZ, X_LES_SUBGRID_Thl2 )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZFLXZ, TLES%X_LES_SUBGRID_Thl2 )
     !
     CALL MZF_PHY(D,PWM,ZWORK1)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_W_SBG_Thl2 )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Thl2 )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK1(IIJB:IIJE,1:D%NKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT) &
                                       / PLEPS(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_DISS_Thl2 )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Thl2 )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK1(IIJB:IIJE,1:D%NKT) = PETHETA(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_ThlThv )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlThv )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK1(IIJB:IIJE,1:D%NKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:D%NKT)*PETHETA(IIJB:IIJE,1:D%NKT) &
                                       * ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_ThlPz, .TRUE. )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlPz, .TRUE. )
     !
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
   IF ( KRR /= 0 ) THEN
@@ -937,47 +937,47 @@ END IF
 !
 ! and we store in LES configuration
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
       !
-      CALL LES_MEAN_SUBGRID_PHY(D,ZFLXZ, X_LES_SUBGRID_THlRt )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZFLXZ, TLES%X_LES_SUBGRID_THlRt )
       !
       CALL MZF_PHY(D,PWM,ZWORK1)
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_W_SBG_ThlRt )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_ThlRt )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT) &
                                         / PLEPS(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_DISS_ThlRt )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_ThlRt )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = PETHETA(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_RtThv )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtThv )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:D%NKT)*PETHETA(IIJB:IIJE,1:D%NKT) &
                                         * ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_RtPz, .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtPz, .TRUE. )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = PEMOIST(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_ThlThv , .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlThv , .TRUE. )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:D%NKT)*PEMOIST(IIJB:IIJE,1:D%NKT) &
                                         * ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_ThlPz, .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlPz, .TRUE. )
       !
       CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+      TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !
@@ -1202,36 +1202,36 @@ ENDIF
     !
     ! and we store in LES configuration
     !
-    IF (OLES_CALL) THEN
+    IF (TLES%LLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
       !
-      CALL LES_MEAN_SUBGRID_PHY(D,ZFLXZ, X_LES_SUBGRID_Rt2 )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZFLXZ, TLES%X_LES_SUBGRID_Rt2 )
       !
       CALL MZF_PHY(D,PWM,ZWORK1)
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_W_SBG_Rt2 )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Rt2 )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = PEMOIST(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_RtThv , .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtThv , .TRUE. )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:D%NKT)*PEMOIST(IIJB:IIJE,1:D%NKT) &
                                         * ZFLXZ(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_RtPz, .TRUE. )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtPz, .TRUE. )
       !
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK1(IIJB:IIJE,1:D%NKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT) &
                                         / PLEPS(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_DISS_Rt2 )
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Rt2 )
       !
       CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+      TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
     END IF
     !
   END IF  ! end if KRR ne 0
diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90
index 669349c12ba2957af57d558c2e736689a52b9215..cb84c52a5c31ee58ca192dc23f958c17167ec19d 100644
--- a/src/common/turb/mode_turb_ver_thermo_flux.F90
+++ b/src/common/turb/mode_turb_ver_thermo_flux.F90
@@ -5,10 +5,10 @@
 MODULE MODE_TURB_VER_THERMO_FLUX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,                 &
+SUBROUTINE TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,TLES,            &
                       KRR,KRRL,KRRI,KSV,KGRADIENTS,                 &
                       OOCEAN,ODEEPOC,                               &
-                      OCOUPLES,OLES_CALL, OCOMPUTE_SRC,             &
+                      OCOUPLES, OCOMPUTE_SRC,                       &
                       PEXPL,PTSTEP,HPROGRAM,                        &
                       TPFILE,                                       &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
@@ -237,7 +237,7 @@ USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB, JPHEXT
 USE MODD_TURB_n,         ONLY: TURB_t
-USE MODD_LES
+USE MODD_LES, ONLY: TLES_t
 USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODI_LES_MEAN_SUBGRID_PHY
@@ -262,6 +262,7 @@ TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
@@ -274,7 +275,6 @@ CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! CPROGRAM is the program currently run
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 !
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
@@ -778,50 +778,50 @@ END IF
 !
 !*       2.4  Storage in LES configuration
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
   !
   CALL MZF_PHY(D,ZFLXZ,ZWORK1)
   !
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_WThl )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WThl )
   !
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK2(IIJB:IIJE,1:D%NKT) = PWM(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   CALL MZF_PHY(D,ZWORK2,ZWORK3)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_W_SBG_WThl )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_W_SBG_WThl )
   !
   CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2)
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK3(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK1(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_W_SBG_UaThl )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaThl )
   !
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK2(IIJB:IIJE,1:D%NKT) = PDTH_DZ(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   CALL MZF_PHY(D,ZWORK2,ZWORK3)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_Thl_SBG_UaThl )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Thl_SBG_UaThl )
   !
   CALL MZM_PHY(D,PETHETA,ZWORK2)
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK3(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   CALL MZF_PHY(D,ZWORK3,ZWORK4)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK4, X_LES_SUBGRID_WThv , .TRUE. ) 
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK4, TLES%X_LES_SUBGRID_WThv , .TRUE. ) 
   !
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZWORK2(IIJB:IIJE,1:D%NKT) = -CSTURB%XCTP*PSQRT_TKE(IIJB:IIJE,1:D%NKT)/PLM(IIJB:IIJE,1:D%NKT) &
                                     *ZWORK1(IIJB:IIJE,1:D%NKT)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_SUBGRID_ThlPz ) 
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_ThlPz ) 
   !
   IF (KRR>=1) THEN
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = PDR_DZ(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK2,ZWORK3)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_Rt_SBG_UaThl )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Rt_SBG_UaThl )
   END IF
   !
   !* diagnostic of mixing coefficient for heat
@@ -841,10 +841,10 @@ IF (OLES_CALL) THEN
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ZA(IIJB:IIJE,1:D%NKT) = MIN(MAX(ZA(IIJB:IIJE,1:D%NKT),-1000.),1000.)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZA, X_LES_SUBGRID_Kh )
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZA, TLES%X_LES_SUBGRID_Kh )
   !
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 !*       2.5  New boundary layer depth for TOMs
@@ -1164,51 +1164,51 @@ END IF
 !
 !*       3.4  Storage in LES configuration
 !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     !
     CALL MZF_PHY(D,ZFLXZ,ZWORK1)
     !
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_WRt )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WRt )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = PWM(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK2,ZWORK3)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_W_SBG_WRt )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_W_SBG_WRt )
     !
     CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK3(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_W_SBG_UaRt )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaRt )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = PDTH_DZ(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK2,ZWORK3)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_Thl_SBG_UaRt )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Thl_SBG_UaRt )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = PDR_DZ(IIJB:IIJE,1:D%NKT)*ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK2,ZWORK3)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK3, X_LES_RES_ddxa_Rt_SBG_UaRt )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Rt_SBG_UaRt )
     !
     CALL MZM_PHY(D,PEMOIST,ZWORK2)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK3(IIJB:IIJE,1:D%NKT) = ZWORK2(IIJB:IIJE,1:D%NKT) * ZFLXZ(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     CALL MZF_PHY(D,ZWORK3,ZWORK4)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK4, X_LES_SUBGRID_WThv , .TRUE. )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK4, TLES%X_LES_SUBGRID_WThv , .TRUE. )
     !
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT) = -CSTURB%XCTP*PSQRT_TKE(IIJB:IIJE,1:D%NKT)/PLM(IIJB:IIJE,1:D%NKT) &
                                       *ZWORK1(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_SUBGRID_RtPz )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_RtPz )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 END IF
@@ -1222,7 +1222,7 @@ END IF
 !
 !*       4.1  <w Rc>
 !
-IF ( ((TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL) .AND. (KRRL > 0) ) THEN
+IF ( ((TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL) .AND. (KRRL > 0) ) THEN
 !
 ! recover the Conservative potential temperature flux :
 ! With TURBN%LHARAT is true tke and length scales at half levels
@@ -1282,12 +1282,12 @@ IF ( ((TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL) .AND. (KRRL > 0) )
   !
 ! and we store in LES configuration this subgrid flux <w'rc'>
 !
-  IF (OLES_CALL) THEN
+  IF (TLES%LLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     CALL MZF_PHY(D,ZFLXZ,ZWORK1)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1, X_LES_SUBGRID_WRc )
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WRc )
     CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+    TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
   END IF
 !
 END IF !end of <w Rc>
diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90
index f03211008e41d80b5d1aef437cc5e01fcd6444e5..404de57d6fc6f257402e960af8fa23592b9de888 100644
--- a/src/common/turb/modi_turb.F90
+++ b/src/common/turb/modi_turb.F90
@@ -4,11 +4,11 @@
 !
 INTERFACE
 !
-      SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D,                      &
+      SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D,TLES,                 &
               & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO,       &
               & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM,    &
               & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH,   &
-              & O2D,ONOMIXLG,OFLAT,OLES_CALL,OCOUPLES,OBLOWSNOW,      &
+              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,                &
               & OCOMPUTE_SRC, PRSNOW,                                 &
               & OOCEAN,ODEEPOC,ODIAG_IN_RUN,                          &
               & HTURBLEN_CL,HCLOUD,                                   &
@@ -38,12 +38,14 @@ USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
 USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-!
-TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
-TYPE(CST_t),            INTENT(IN)   :: CST
-TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
-TYPE(TBUDGETCONF_t),    INTENT(IN)   :: BUCONF
-TYPE(TURB_t),           INTENT(IN)   :: TURBN
+USE MODD_LES, ONLY: TLES_t
+!
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D             ! PHYEX variables dimensions structure
+TYPE(CST_t),            INTENT(IN)   :: CST           ! modd_cst general constant structure
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB        ! modd_csturb turb constant structure
+TYPE(TBUDGETCONF_t),    INTENT(IN)   :: BUCONF        ! budget structure
+TYPE(TURB_t),           INTENT(IN)   :: TURBN         ! modn_turbn (turb namelist) structure
+TYPE(TLES_t),           INTENT(IN)   :: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 INTEGER,                INTENT(IN)   :: KMI           ! model index number
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -59,7 +61,6 @@ LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimension
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
 LOGICAL,                INTENT(IN)   ::  ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh)
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 919199a4a67fc004c982ad95f6d958dc815b5bf9..a6e511f70948dfcafee4a3f40a8e35d1404c059f 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -3,11 +3,11 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-      SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D,                      &
+      SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D,TLES,                 &
               & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO,       &
               & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM,    &
               & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH,   &
-              & O2D,ONOMIXLG,OFLAT,OLES_CALL,OCOUPLES,OBLOWSNOW,      &
+              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,                &
               & OCOMPUTE_SRC, PRSNOW,                                 &
               & OOCEAN,ODEEPOC,ODIAG_IN_RUN,                          &
               & HTURBLEN_CL,HCLOUD,                                   &
@@ -250,7 +250,7 @@ USE MODD_BUDGET, ONLY:      NBUDGET_U,  NBUDGET_V,  NBUDGET_W,  NBUDGET_TH, NBUD
 USE MODD_FIELD, ONLY: TFIELDDATA,TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
 !
-USE MODD_LES
+USE MODD_LES, ONLY : TLES_t
 USE MODD_IBM_PARAM_n,    ONLY: LIBM, XIBM_LS, XIBM_XMUT
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_TURB_n, ONLY: TURB_t
@@ -286,11 +286,12 @@ IMPLICIT NONE
 !
 !
 !
-TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
-TYPE(CST_t),            INTENT(IN)   :: CST
-TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
-TYPE(TBUDGETCONF_t),    INTENT(IN)   :: BUCONF
-TYPE(TURB_t),           INTENT(IN)   :: TURBN
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D             ! PHYEX variables dimensions structure
+TYPE(CST_t),            INTENT(IN)   :: CST           ! modd_cst general constant structure
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB        ! modd_csturb turb constant structure
+TYPE(TBUDGETCONF_t),    INTENT(IN)   :: BUCONF        ! budget structure
+TYPE(TURB_t),           INTENT(IN)   :: TURBN         ! modn_turbn (turb namelist) structure
+TYPE(TLES_t),           INTENT(INOUT)   :: TLES          ! modd_les structure
 INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 INTEGER,                INTENT(IN)   :: KMI           ! model index number
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -305,7 +306,6 @@ LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimension
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
-LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
 LOGICAL,                INTENT(IN)   ::  ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh)
@@ -509,7 +509,7 @@ IF (LHOOK) CALL DR_HOOK('TURB',0,ZHOOK_HANDLE)
 IF (TURBN%LHARAT .AND. TURBN%CTURBDIM /= '1DIM') THEN
   CALL ABOR1('TURBN%LHARATU only implemented for option TURBN%CTURBDIM=1DIM!')
 ENDIF
-IF (TURBN%LHARAT .AND. OLES_CALL) THEN
+IF (TURBN%LHARAT .AND. TLES%LLES_CALL) THEN
   CALL ABOR1('TURBN%LHARATU not implemented for option LLES_CALL')
 ENDIF
 !
@@ -993,11 +993,12 @@ IF( BUCONF%LBUDGET_SV ) THEN
   END DO
 END IF
 
-CALL TURB_VER(D,CST,CSTURB,TURBN,KRR,KRRL,KRRI,KGRADIENTS,&
+CALL TURB_VER(D,CST,CSTURB,TURBN,TLES,                   &
+          KRR,KRRL,KRRI,KGRADIENTS,                      &
           OOCEAN, ODEEPOC, OCOMPUTE_SRC,                 &
           KSV,KSV_LGBEG,KSV_LGEND,                       &
           ZEXPL,HPROGRAM, O2D, ONOMIXLG, OFLAT,          &
-          OLES_CALL,OCOUPLES,OBLOWSNOW, PRSNOW,          &
+          OCOUPLES,OBLOWSNOW, PRSNOW,                    &
           PTSTEP,TPFILE,                                 &
           PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,        &
           PCOSSLOPE,PSINSLOPE,                           &
@@ -1097,7 +1098,7 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
 !à supprimer une fois le précédent ifdef REPRO48 validé
 #ifdef REPRO48
 #else
-    CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN,                    &
+    CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN, TLES,              &
           KSPLIT, KRR, KRRL, KRRI, KSV,KSV_LGBEG,KSV_LGEND,    & 
           PTSTEP,HLBCX,HLBCY, OFLAT,O2D, ONOMIXLG,             & 
           OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW,                &
@@ -1199,11 +1200,11 @@ ELSE
   ZRTKEMS(:,:)=0.
 END IF
 !
-CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,TURBN,HPROGRAM,                &
+CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,TURBN,TLES,HPROGRAM,           &
                    & KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,                      &
                    & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,               &
                    & PTSTEP,ZEXPL,                                      &
-                   & TPFILE,OLES_CALL,ODIAG_IN_RUN,OOCEAN,              &
+                   & TPFILE,ODIAG_IN_RUN,OOCEAN,                        &
                    & PSFU,PSFV,                                         &
                    & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,ZRTKEMS,&
                    & TBUDGETS,KBUDGETS, PEDR=PEDR, PTR=PTR,PDISS=PDISS, &
@@ -1325,31 +1326,31 @@ CALL SOURCES_NEG_CORRECT_PHY(D,KSV,HCLOUD, 'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,P
 !*      9. LES averaged surface fluxes
 !          ---------------------------
 !
-IF (OLES_CALL) THEN
+IF (TLES%LLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID_PHY(D,PSFTH,X_LES_Q0)
-  CALL LES_MEAN_SUBGRID_PHY(D,PSFRV,X_LES_E0)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFTH,TLES%X_LES_Q0)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFRV,TLES%X_LES_E0)
   DO JSV=1,KSV
-    CALL LES_MEAN_SUBGRID_PHY(D,PSFSV(:,JSV),X_LES_SV0(:,JSV))
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFSV(:,JSV),TLES%X_LES_SV0(:,JSV))
   END DO
-  CALL LES_MEAN_SUBGRID_PHY(D,PSFU,X_LES_UW0)
-  CALL LES_MEAN_SUBGRID_PHY(D,PSFV,X_LES_VW0)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFU,TLES%X_LES_UW0)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFV,TLES%X_LES_VW0)
   !
   !$mnh_expand_array(JIJ=IIJB:IIJE)
   ZWORK2D(IIJB:IIJE) = (PSFU(IIJB:IIJE)*PSFU(IIJB:IIJE)+PSFV(IIJB:IIJE)*PSFV(IIJB:IIJE))**0.25
   !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2D,X_LES_USTAR)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2D,TLES%X_LES_USTAR)
 !----------------------------------------------------------------------------
 !
 !*     10. LES for 3rd order moments
 !          -------------------------
 !
-  CALL LES_MEAN_SUBGRID_PHY(D,ZMWTH,X_LES_SUBGRID_W2Thl)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZMTH2,X_LES_SUBGRID_WThl2)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMWTH,TLES%X_LES_SUBGRID_W2Thl)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMTH2,TLES%X_LES_SUBGRID_WThl2)
   IF (KRR>0) THEN
-    CALL LES_MEAN_SUBGRID_PHY(D,ZMWR,X_LES_SUBGRID_W2Rt)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZMTHR,X_LES_SUBGRID_WThlRt)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZMR2,X_LES_SUBGRID_WRt2)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMWR,TLES%X_LES_SUBGRID_W2Rt)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMTHR,TLES%X_LES_SUBGRID_WThlRt)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZMR2,TLES%X_LES_SUBGRID_WRt2)
   END IF
 !
 !----------------------------------------------------------------------------
@@ -1362,16 +1363,16 @@ IF (OLES_CALL) THEN
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK1(IIJB:IIJE,1:D%NKT) = 2./3.*PTKET(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK1,X_LES_SUBGRID_U2)
-    X_LES_SUBGRID_V2(:,:,:) = X_LES_SUBGRID_U2(:,:,:)
-    X_LES_SUBGRID_W2(:,:,:) = X_LES_SUBGRID_U2(:,:,:)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1,TLES%X_LES_SUBGRID_U2)
+    TLES%X_LES_SUBGRID_V2(:,:,:) = TLES%X_LES_SUBGRID_U2(:,:,:)
+    TLES%X_LES_SUBGRID_W2(:,:,:) = TLES%X_LES_SUBGRID_U2(:,:,:)
     !
     CALL GZ_M_W_PHY(D,PTHLT,PDZZ,ZWORK1)
     CALL MZF_PHY(D,ZWORK1,ZWORK2)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZWORK2(IIJB:IIJE,1:D%NKT)  = 2./3.*PTKET(IIJB:IIJE,1:D%NKT) *ZWORK2(IIJB:IIJE,1:D%NKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-    CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2,X_LES_RES_ddz_Thl_SBG_W2)
+    CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddz_Thl_SBG_W2)
     !
     IF (KRR>=1) THEN
       CALL GZ_M_W_PHY(D,PRT(:,:,1),PDZZ,ZWORK1)
@@ -1379,7 +1380,7 @@ IF (OLES_CALL) THEN
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK2(IIJB:IIJE,1:D%NKT)  = 2./3.*PTKET(IIJB:IIJE,1:D%NKT) *ZWORK2(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2,X_LES_RES_ddz_Rt_SBG_W2)
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddz_Rt_SBG_W2)
     END IF
     DO JSV=1,KSV
       CALL GZ_M_W_PHY(D,PSVT(:,:,JSV),PDZZ,ZWORK1)
@@ -1387,7 +1388,7 @@ IF (OLES_CALL) THEN
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
       ZWORK2(IIJB:IIJE,1:D%NKT)  = 2./3.*PTKET(IIJB:IIJE,1:D%NKT) *ZWORK2(IIJB:IIJE,1:D%NKT)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
-      CALL LES_MEAN_SUBGRID_PHY(D,ZWORK2, X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
+      CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
     END DO
   END IF
 
@@ -1396,16 +1397,16 @@ IF (OLES_CALL) THEN
 !*     12. LES mixing end dissipative lengths, presso-correlations
 !          -------------------------------------------------------
 !
-  CALL LES_MEAN_SUBGRID_PHY(D,ZLM,X_LES_SUBGRID_LMix)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZLEPS,X_LES_SUBGRID_LDiss)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZLM,TLES%X_LES_SUBGRID_LMix)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZLEPS,TLES%X_LES_SUBGRID_LDiss)
 !
 !* presso-correlations for subgrid Tke are equal to zero.
 !
   ZLEPS(:,:) = 0. !ZLEPS is used as a work array (not used anymore)
-  CALL LES_MEAN_SUBGRID_PHY(D,ZLEPS,X_LES_SUBGRID_WP)
+  CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZLEPS,TLES%X_LES_SUBGRID_WP)
 !
   CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+  TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
 IF(PRESENT(PLEM)) PLEM(IIJB:IIJE,IKTB:IKTE) = ZLM(IIJB:IIJE,IKTB:IKTE)
diff --git a/src/mesonh/ext/ini_lesn.f90 b/src/mesonh/ext/ini_lesn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..378e43f533ddc33eac977c0cc9a82b5b9e72e6be
--- /dev/null
+++ b/src/mesonh/ext/ini_lesn.f90
@@ -0,0 +1,2007 @@
+!MNH_LIC Copyright 2000-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     ####################
+      SUBROUTINE  INI_LES_n
+!     ####################
+!
+!
+!!****  *INI_LES_n* initializes the LES variables for model _n
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         07/02/00
+!!      Modification     01/02/01 (D.Gazen) add module MODD_NSV for NSV variable
+!!                       06/11/02 (V. Masson) add LES budgets
+!!                    10/2016 (C.Lac) Add droplet deposition
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 12/08/2020: bugfix: use NUNDEF instead of XUNDEF for integer variables
+!  P. Wautelet 04/01/2021: bugfix: nles_k was used instead of nspectra_k for a loop index
+!  P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain
+!  P. Wautelet 09/07/2021: bugfix: altitude levels are on the correct grid position (mass point)
+!  P. Wautelet 22/03/2022: LES averaging periods are more reliable (compute with integers instead of reals)
+! --------------------------------------------------------------------------
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODE_ll
+USE MODE_GATHER_ll
+USE MODE_MSG
+USE MODE_MODELN_HANDLER
+!
+USE MODD_LES
+USE MODD_LES_BUDGET
+USE MODD_LES_n
+!
+USE MODD_CONF
+USE MODD_PARAMETERS
+USE MODD_NESTING
+!
+USE MODD_LUNIT_n
+USE MODD_GRID_n
+USE MODD_DYN_n
+USE MODD_TIME_n
+USE MODD_DIM_n
+USE MODD_TURB_n
+USE MODD_CONF_n
+USE MODD_LBC_n
+USE MODD_PARAM_n
+USE MODD_DYN
+USE MODD_NSV, ONLY: NSV ! update_nsv is done in INI_MODEL
+USE MODD_CONDSAMP, ONLY : LCONDSAMP
+!
+USE MODI_INI_LES_CART_MASKn
+USE MODI_COEF_VER_INTERP_LIN
+USE MODI_SHUMAN
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+!
+!
+!
+!       0.2  declaration of local variables
+!
+!
+!      
+INTEGER :: ILUOUT, IRESP
+INTEGER :: JI,JJ, JK ! loop counters
+INTEGER :: IIU_ll    ! total domain I size
+INTEGER :: IJU_ll    ! total domain J size
+INTEGER :: IIMAX_ll  ! total physical domain I size
+INTEGER :: IJMAX_ll  ! total physical domain J size
+!
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_LES ! LES altitudes 3D array
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_SPEC! " for spectra
+!
+!
+REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! father model coordinates
+REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll !
+INTEGER :: IMI
+!
+!-------------------------------------------------------------------------------
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
+IIU_ll = IIMAX_ll+2*JPHEXT
+IJU_ll = IJMAX_ll+2*JPHEXT
+!
+ILUOUT = TLUOUT%NLU
+!
+!-------------------------------------------------------------------------------
+!
+!*      1.   Does LES computations are used?
+!            ------------------------------
+!
+LLES = LLES_MEAN .OR. LLES_RESOLVED  .OR. LLES_SUBGRID .OR. LLES_UPDRAFT &
+                 .OR. LLES_DOWNDRAFT .OR. LLES_SPECTRA
+!
+!
+IF (.NOT. LLES) RETURN
+!
+IF (L1D) THEN
+  LLES_RESOLVED    = .FALSE.
+  LLES_UPDRAFT     = .FALSE.
+  LLES_DOWNDRAFT   = .FALSE.
+  LLES_SPECTRA     = .FALSE.
+  LLES_NEB_MASK    = .FALSE.
+  LLES_CORE_MASK   = .FALSE.
+  LLES_CS_MASK     = .FALSE.
+  LLES_MY_MASK     = .FALSE.
+END IF
+!
+IF (LLES_RESOLVED )  LLES_MEAN = .TRUE.
+IF (LLES_SUBGRID  )  LLES_MEAN = .TRUE.
+IF (LLES_UPDRAFT  )  LLES_MEAN = .TRUE.
+IF (LLES_DOWNDRAFT)  LLES_MEAN = .TRUE.
+IF (LLES_SPECTRA  )  LLES_MEAN = .TRUE.
+!
+IF (CTURB=='NONE') THEN
+  WRITE(ILUOUT,FMT=*) 'LES diagnostics cannot be done without subgrid turbulence.'
+  WRITE(ILUOUT,FMT=*) 'You have chosen CTURB="NONE". You must choose a turbulence scheme.'
+  call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LB_n', 'LES diagnostics cannot be done without subgrid turbulence' )
+END IF
+!-------------------------------------------------------------------------------
+!
+!*      2.   Number and definition of masks
+!            ------------------------------
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.1  Cartesian (sub-)domain
+!            ----------------------
+!
+!* updates number of masks
+!  -----------------------
+!
+NLES_MASKS = 1
+!
+!* For model 1, set default values of cartesian mask, and defines cartesian mask
+!  -----------------------------------------------------------------------------
+!
+IF (IMI==1) THEN
+  IF ( LLES_CART_MASK ) THEN
+    !Compute LES diagnostics inside a cartesian mask
+
+    !Set default values to physical domain boundaries
+    IF ( NLES_IINF == NUNDEF ) NLES_IINF = 1
+    IF ( NLES_JINF == NUNDEF ) NLES_JINF = 1
+    IF ( NLES_ISUP == NUNDEF ) NLES_ISUP = NIMAX_ll
+    IF ( NLES_JSUP == NUNDEF ) NLES_JSUP = NJMAX_ll
+
+    !Check that selected indices are in physical domain
+    IF ( NLES_IINF < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too small (<1)' )
+    IF ( NLES_IINF > NIMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too large (>NIMAX)' )
+    IF ( NLES_ISUP < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too small (<1)' )
+    IF ( NLES_ISUP > NIMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too large (>NIMAX)' )
+    IF ( NLES_ISUP < NLES_IINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_ISUP < NLES_IINF' )
+
+    IF ( NLES_JINF < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too small (<1)' )
+    IF ( NLES_JINF > NJMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too large (>NJMAX)' )
+    IF ( NLES_JSUP < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too small (<1)' )
+    IF ( NLES_JSUP > NJMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too large (>NJMAX)' )
+    IF ( NLES_JSUP < NLES_JINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_JSUP < NLES_JINF' )
+
+    !Set LLES_CART_MASK to false if whole domain is selected
+    IF (       NLES_IINF == 1        .AND. NLES_JINF == 1        &
+         .AND. NLES_ISUP == NIMAX_ll .AND. NLES_ISUP == NJMAX_ll ) THEN
+      LLES_CART_MASK = .FALSE.
+    END IF
+  ELSE
+    !Compute LES diagnostics on whole physical domain
+    NLES_IINF = 1
+    NLES_JINF = 1
+    NLES_ISUP = NIMAX_ll
+    NLES_JSUP = NJMAX_ll
+  END IF
+  !
+  NLESn_IINF(1)= NLES_IINF
+  NLESn_ISUP(1)= NLES_ISUP
+  NLESn_JINF(1)= NLES_JINF
+  NLESn_JSUP(1)= NLES_JSUP
+!
+!* For other models, fits cartesian mask on model 1 mask
+!  -----------------------------------------------------
+!
+ELSE
+  ALLOCATE(ZXHAT_ll(IIU_ll))
+  ALLOCATE(ZYHAT_ll(IJU_ll))
+  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP)
+  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP)
+!
+  CALL GOTO_MODEL(NDAD(IMI))
+  CALL INI_LES_CART_MASK_n(IMI,ZXHAT_ll,ZYHAT_ll,          &
+                         NLESn_IINF(IMI),NLESn_JINF(IMI), &
+                         NLESn_ISUP(IMI),NLESn_JSUP(IMI)  )
+  CALL GOTO_MODEL(IMI)
+! 
+  DEALLOCATE(ZXHAT_ll)
+  DEALLOCATE(ZYHAT_ll)
+END IF
+!
+!* in non cyclic boundary conditions, limitiation of masks due to u and v grids
+!  ----------------------------------------------------------------------------
+!
+IF ( (.NOT. L1D) .AND. CLBCX(1)/='CYCL') THEN
+  NLESn_IINF(IMI) = MAX(NLESn_IINF(IMI),2)
+END IF
+IF ( (.NOT. L1D) .AND. (.NOT. L2D) .AND. CLBCY(1)/='CYCL') THEN
+  NLESn_JINF(IMI) = MAX(NLESn_JINF(IMI),2)
+END IF
+!
+!* X boundary conditions for 2points correlations computations
+!  -----------------------------------------------------------
+!
+IF ( CLBCX(1) == 'CYCL' .AND. NLESn_IINF(IMI) == 1 .AND. NLESn_ISUP(IMI) == NIMAX_ll ) THEN
+  CLES_LBCX(:,IMI) = 'CYCL'
+ELSE
+  CLES_LBCX(:,IMI) = 'OPEN'
+END IF
+!
+!* Y boundary conditions for 2points correlations computations
+!  -----------------------------------------------------------
+!
+IF ( CLBCY(1) == 'CYCL' .AND. NLESn_JINF(IMI) == 1 .AND. NLESn_JSUP(IMI) == NJMAX_ll ) THEN
+  CLES_LBCY(:,IMI) = 'CYCL'
+ELSE
+  CLES_LBCY(:,IMI) = 'OPEN'
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.2  Nebulosity mask
+!            ---------------
+!
+IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_NEB_MASK = .FALSE.
+!
+IF (LLES_NEB_MASK) NLES_MASKS = NLES_MASKS + 2
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.3  Cloud core mask
+!            ---------------
+!
+IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_CORE_MASK = .FALSE.
+!
+IF (LLES_CORE_MASK) NLES_MASKS = NLES_MASKS + 2
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.4  Conditional sampling mask
+!            -------------------------
+!
+IF (.NOT. LUSERC .AND. .NOT. LCONDSAMP) LLES_CS_MASK = .FALSE.
+!
+IF (LLES_CS_MASK) NLES_MASKS = NLES_MASKS + 3
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.5  User mask
+!            ---------
+!
+IF (LLES_MY_MASK) NLES_MASKS = NLES_MASKS + NLES_MASKS_USER
+!
+!-------------------------------------------------------------------------------
+!
+!*      3.   Number of temporal LES samplings
+!            --------------------------------
+!
+!*      3.1  Default value
+!            -------------
+!
+IF (XLES_TEMP_SAMPLING == XUNDEF) THEN
+  IF (CTURBDIM=='3DIM') THEN
+    XLES_TEMP_SAMPLING =  60.
+  ELSE
+    XLES_TEMP_SAMPLING = 300.
+  END IF
+END IF
+!
+!*      3.2  Number of time steps between two calls
+!            --------------------------------------
+!
+NLES_DTCOUNT = MAX( NINT( XLES_TEMP_SAMPLING / XTSTEP ) , 1)
+
+!
+!*      3.3  Redefinition of the LES sampling time coherent with model time-step
+!            -------------------------------------------------------------------
+!
+! Note that this modifies XLES_TEMP_SAMPLING only for father model (model number 1)
+! For nested models (for which integration time step is an integer part of  father model)
+! the following operation does not change XLES_TEMP_SAMPLING. This way, LEs
+! sampling is done at the same instants for all models.
+!
+XLES_TEMP_SAMPLING = XTSTEP * NLES_DTCOUNT
+!
+!
+!*      3.4  number of temporal calls to LES routines
+!            ----------------------------------------
+!
+!
+NLES_TIMES = ( NINT( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / XTSTEP ) ) / NLES_DTCOUNT
+!
+!*      3.5  current LES time counter
+!            ------------------------
+!
+NLES_TCOUNT = 0
+!
+!*      3.6  dates array for diachro
+!            ----------------------
+!
+allocate( tles_dates( nles_times ) )
+allocate( xles_times( nles_times ) )
+!
+!*      3.7  No data
+!            -------
+!
+IF (NLES_TIMES==0) THEN
+  LLES=.FALSE.
+  RETURN
+END IF
+!
+!*     3.8  Averaging
+!           ---------
+IF (     XLES_TEMP_MEAN_END   == XUNDEF &
+    .OR. XLES_TEMP_MEAN_START == XUNDEF &
+    .OR. XLES_TEMP_MEAN_STEP  == XUNDEF ) THEN
+  !No LES temporal averaging
+  NLES_MEAN_TIMES = 0
+  NLES_MEAN_STEP  = NNEGUNDEF
+  NLES_MEAN_START = NNEGUNDEF
+  NLES_MEAN_END   = NNEGUNDEF
+ELSE
+  !LES temporal averaging is enabled
+  !Ensure that XLES_TEMP_MEAN_END is not after segment end
+  XLES_TEMP_MEAN_END = MIN( XLES_TEMP_MEAN_END, XSEGLEN - DYN_MODEL(1)%XTSTEP )
+
+  NLES_MEAN_START = NINT( XLES_TEMP_MEAN_START / XTSTEP )
+
+  IF ( MODULO( NLES_MEAN_START, NLES_DTCOUNT ) /= 0 ) THEN
+    CMNHMSG(1) = 'XLES_TEMP_MEAN_START is not a multiple of XLES_TEMP_SAMPLING'
+    CMNHMSG(2) = 'LES averaging periods could be wrong'
+    CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' )
+  END IF
+
+  NLES_MEAN_END = NINT( XLES_TEMP_MEAN_END / XTSTEP )
+
+  NLES_MEAN_STEP = NINT( XLES_TEMP_MEAN_STEP / XTSTEP )
+
+  IF ( NLES_MEAN_STEP < NLES_DTCOUNT ) &
+    CALL Print_msg( NVERB_ERROR, 'IO', 'INI_LES_n', 'XLES_TEMP_MEAN_STEP < XLES_TEMP_SAMPLING not allowed' )
+
+  IF ( MODULO( NLES_MEAN_STEP, NLES_DTCOUNT ) /= 0 ) THEN
+    CMNHMSG(1) = 'XLES_TEMP_MEAN_STEP is not a multiple of XLES_TEMP_SAMPLING'
+    CMNHMSG(2) = 'LES averaging periods could be wrong'
+    CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' )
+  END IF
+
+  NLES_MEAN_TIMES = ( NLES_MEAN_END - NLES_MEAN_START ) / NLES_MEAN_STEP
+  !Add 1 averaging period if the last one is incomplete (for example: start=0., end=10., step=3.)
+  IF ( MODULO( NLES_MEAN_END - NLES_MEAN_START, NLES_MEAN_STEP ) > 0 ) NLES_MEAN_TIMES = NLES_MEAN_TIMES + 1
+END IF
+!-------------------------------------------------------------------------------
+!
+!*      4.   Number of vertical levels for local diagnostics
+!            -----------------------------------------------
+!
+NLES_K = 0
+!
+!*      4.1  Case of altitude levels (lowest priority)
+!            -----------------------
+!
+IF (ANY(XLES_ALTITUDES(:)/=XUNDEF)) THEN
+  NLES_K = COUNT (XLES_ALTITUDES(:)/=XUNDEF)
+  CLES_LEVEL_TYPE='Z'
+  !
+  ALLOCATE(XCOEFLIN_LES(SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
+  ALLOCATE(NKLIN_LES   (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
+  !
+  ALLOCATE(ZZ_LES      (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
+  DO JK=1,NLES_K
+    DO JJ=1,SIZE(XZZ,2)
+      DO JI=1,SIZE(XZZ,1)
+        ZZ_LES(JI,JJ,JK) = XLES_ALTITUDES(JK)
+      END DO
+    END DO
+  END DO
+  CALL COEF_VER_INTERP_LIN(MZF(XZZ),ZZ_LES,NKLIN_LES,XCOEFLIN_LES)
+  !
+  DEALLOCATE(ZZ_LES)
+END IF
+!
+!
+!*      4.2  Case of model levels (highest priority)
+!            --------------------
+!
+IF (ANY(NLES_LEVELS(:)/=NUNDEF)) THEN
+  DO JK = 1, SIZE( NLES_LEVELS )
+    IF ( NLES_LEVELS(JK) /= NUNDEF ) THEN
+      IF ( NLES_LEVELS(JK) < 1 )     CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too small (<1)' )
+      IF ( NLES_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too large (>NKMAX)' )
+    END IF
+  END DO
+
+  NLES_K = COUNT (NLES_LEVELS(:)/=NUNDEF)
+  CLES_LEVEL_TYPE='K'
+ELSE
+  IF (NLES_K==0) THEN
+    NLES_K = MIN(SIZE(NLES_LEVELS),NKMAX)
+    CLES_LEVEL_TYPE='K'
+    DO JK=1,NLES_K
+      NLES_LEVELS(JK) = JK
+    END DO
+  END IF
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      5.   Number of vertical levels for non-local diagnostics
+!            ---------------------------------------------------
+!
+NSPECTRA_K = 0
+CSPECTRA_LEVEL_TYPE='N'
+!
+!
+!*      5.1  Case of altitude levels (medium priority)
+!            -----------------------
+!
+IF (ANY(XSPECTRA_ALTITUDES(:)/=XUNDEF)) THEN
+  NSPECTRA_K = COUNT (XSPECTRA_ALTITUDES(:)/=XUNDEF)
+  CSPECTRA_LEVEL_TYPE='Z'
+  !
+  ALLOCATE(XCOEFLIN_SPEC(SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
+  ALLOCATE(NKLIN_SPEC   (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
+  !
+  ALLOCATE(ZZ_SPEC      (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
+  DO JK=1,NSPECTRA_K
+    DO JJ=1,SIZE(XZZ,2)
+      DO JI=1,SIZE(XZZ,1)
+        ZZ_SPEC(JI,JJ,JK) = XSPECTRA_ALTITUDES(JK)
+      END DO
+    END DO
+  END DO
+  CALL COEF_VER_INTERP_LIN(XZZ,ZZ_SPEC,NKLIN_SPEC,XCOEFLIN_SPEC)
+  !
+  DEALLOCATE(ZZ_SPEC)
+END IF
+!
+!
+!*      5.2  Case of model levels (highest priority)
+!            --------------------
+!
+IF (ANY(NSPECTRA_LEVELS(:)/=NUNDEF)) THEN
+  DO JK = 1, SIZE( NSPECTRA_LEVELS )
+    IF ( NSPECTRA_LEVELS(JK) /= NUNDEF ) THEN
+      IF ( NSPECTRA_LEVELS(JK) < 1 )     CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too small (<1)' )
+      IF ( NSPECTRA_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too large (>NKMAX)' )
+    END IF
+  END DO
+
+  NSPECTRA_K = COUNT (NSPECTRA_LEVELS(:)/=NUNDEF)
+  CSPECTRA_LEVEL_TYPE='K'
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      6.   Number of horizontal wavelengths for non-local diagnostics
+!            ----------------------------------------------------------
+!
+NSPECTRA_NI = NLESn_ISUP(IMI) - NLESn_IINF(IMI) + 1
+NSPECTRA_NJ = NLESn_JSUP(IMI) - NLESn_JINF(IMI) + 1
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*      7.   Allocations of temporal series of local diagnostics
+!            ---------------------------------------------------
+!
+!*      7.0  Altitude levels
+!            ---------------
+!
+ALLOCATE(XLES_Z  (NLES_K))
+!
+!*      7.1  Averaging control variables
+!            ---------------------------
+!
+ALLOCATE(NLES_AVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(NLES_UND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
+!
+NLES_AVG_PTS_ll = NUNDEF
+NLES_UND_PTS_ll = NUNDEF
+!
+!
+!*      7.2  Horizontally mean variables
+!            ---------------------------
+!
+ALLOCATE(XLES_MEAN_U  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_V  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_W  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_P  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_DP  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_TP  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_TR  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_DISS(NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_LM  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_RHO(NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_Th (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_Mf (NLES_K,NLES_TIMES,NLES_MASKS))  
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_MEAN_Thl(NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_Rt (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_KHt(NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_KHr(NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Thl(0,0,0))
+  ALLOCATE(XLES_MEAN_Rt (0,0,0))
+  ALLOCATE(XLES_MEAN_KHt(0,0,0))
+  ALLOCATE(XLES_MEAN_KHr(0,0,0))
+END IF
+IF (LUSERV) THEN
+  ALLOCATE(XLES_MEAN_Thv(NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Thv(0,0,0))
+END IF
+!
+IF (LUSERV ) THEN 
+  ALLOCATE(XLES_MEAN_Rv (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rv (0,0,0))
+END IF
+IF (LUSERV ) THEN 
+   ALLOCATE(XLES_MEAN_Rehu (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rehu (0,0,0))
+ENDIF
+IF (LUSERV ) THEN 
+   ALLOCATE(XLES_MEAN_Qs (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Qs (0,0,0))  
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_MEAN_Rc (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rc (0,0,0))
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_MEAN_Cf (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_INDCf (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_INDCf2 (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Cf (0,0,0))
+  ALLOCATE(XLES_MEAN_INDCf (0,0,0))
+  ALLOCATE(XLES_MEAN_INDCf2(0,0,0))  
+END IF
+IF (LUSERR ) THEN
+  ALLOCATE(XLES_MEAN_Rr (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_RF (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rr (0,0,0))
+  ALLOCATE(XLES_MEAN_RF (0,0,0))
+END IF
+IF (LUSERI ) THEN
+  ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_If (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Ri (0,0,0))
+  ALLOCATE(XLES_MEAN_If (0,0,0))
+END IF
+IF (LUSERS ) THEN
+  ALLOCATE(XLES_MEAN_Rs (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rs (0,0,0))
+END IF
+IF (LUSERG ) THEN
+  ALLOCATE(XLES_MEAN_Rg (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rg (0,0,0))
+END IF
+IF (LUSERH ) THEN
+  ALLOCATE(XLES_MEAN_Rh (NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_Rh (0,0,0))
+END IF
+IF (NSV>0  ) THEN
+  ALLOCATE(XLES_MEAN_Sv (NLES_K,NLES_TIMES,NLES_MASKS,NSV))
+ELSE
+  ALLOCATE(XLES_MEAN_Sv (0,0,0,0))
+END IF
+ALLOCATE(XLES_MEAN_WIND  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_dUdz  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_dVdz  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_dWdz  (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(XLES_MEAN_dThldz(NLES_K,NLES_TIMES,NLES_MASKS))
+IF (LUSERV) THEN
+  ALLOCATE(XLES_MEAN_dRtdz(NLES_K,NLES_TIMES,NLES_MASKS))
+ELSE
+  ALLOCATE(XLES_MEAN_dRtdz(0,0,0))
+END IF
+IF (NSV>0) THEN
+  ALLOCATE(XLES_MEAN_dSvdz(NLES_K,NLES_TIMES,NLES_MASKS,NSV))
+ELSE
+  ALLOCATE(XLES_MEAN_dSvdz(0,0,0,0))
+END IF
+!
+IF (LLES_PDF) THEN
+!pdf distributions and jpdf distributions
+  CALL LES_ALLOCATE('XLES_PDF_TH ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  CALL LES_ALLOCATE('XLES_PDF_W ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  CALL LES_ALLOCATE('XLES_PDF_THV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  IF (LUSERV) THEN
+   CALL LES_ALLOCATE('XLES_PDF_RV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RV ',(/0,0,0,0/))
+  END IF
+  IF (LUSERC) THEN 
+   CALL LES_ALLOCATE('XLES_PDF_RC ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+   CALL LES_ALLOCATE('XLES_PDF_RT ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+   CALL LES_ALLOCATE('XLES_PDF_THL',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RC ',(/0,0,0,0/))
+   CALL LES_ALLOCATE('XLES_PDF_RT ',(/0,0,0,0/))
+   CALL LES_ALLOCATE('XLES_PDF_THL',(/0,0,0,0/))
+  ENDIF
+  IF (LUSERR) THEN
+   CALL LES_ALLOCATE('XLES_PDF_RR ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RR ',(/0,0,0,0/))
+  ENDIF
+  IF (LUSERI) THEN 
+   CALL LES_ALLOCATE('XLES_PDF_RI ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RI ',(/0,0,0,0/))
+  END IF
+  IF (LUSERS) THEN
+   CALL LES_ALLOCATE('XLES_PDF_RS ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RS ',(/0,0,0,0/))
+  END IF
+  IF (LUSERG) THEN 
+   CALL LES_ALLOCATE('XLES_PDF_RG ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
+  ELSE
+   CALL LES_ALLOCATE('XLES_PDF_RG ',(/0,0,0,0/))
+  END IF
+ENDIF
+!  
+XLES_MEAN_U  = XUNDEF
+XLES_MEAN_V  = XUNDEF
+XLES_MEAN_W  = XUNDEF
+XLES_MEAN_P  = XUNDEF
+XLES_MEAN_DP  = XUNDEF
+XLES_MEAN_TP  = XUNDEF
+XLES_MEAN_TR  = XUNDEF
+XLES_MEAN_DISS= XUNDEF
+XLES_MEAN_LM  = XUNDEF
+XLES_MEAN_RHO= XUNDEF
+XLES_MEAN_Th = XUNDEF
+XLES_MEAN_Mf = XUNDEF
+IF (LUSERC ) XLES_MEAN_Thl= XUNDEF
+IF (LUSERV ) XLES_MEAN_Thv= XUNDEF
+IF (LUSERV ) XLES_MEAN_Rv  = XUNDEF
+IF (LUSERV ) XLES_MEAN_Rehu  = XUNDEF  
+IF (LUSERV ) XLES_MEAN_Qs  = XUNDEF
+IF (LUSERC ) XLES_MEAN_KHr = XUNDEF
+IF (LUSERC ) XLES_MEAN_KHt = XUNDEF
+IF (LUSERC ) XLES_MEAN_Rt  = XUNDEF
+IF (LUSERC ) XLES_MEAN_Rc  = XUNDEF
+IF (LUSERC ) XLES_MEAN_Cf  = XUNDEF
+IF (LUSERC ) XLES_MEAN_RF  = XUNDEF
+IF (LUSERC ) XLES_MEAN_INDCf  = XUNDEF
+IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF
+IF (LUSERR ) XLES_MEAN_Rr  = XUNDEF
+IF (LUSERI ) XLES_MEAN_Ri  = XUNDEF
+IF (LUSERI ) XLES_MEAN_If  = XUNDEF
+IF (LUSERS ) XLES_MEAN_Rs  = XUNDEF
+IF (LUSERG ) XLES_MEAN_Rg  = XUNDEF
+IF (LUSERH ) XLES_MEAN_Rh  = XUNDEF
+IF (NSV>0  ) XLES_MEAN_Sv  = XUNDEF
+XLES_MEAN_WIND  = XUNDEF
+XLES_MEAN_WIND  = XUNDEF
+XLES_MEAN_dUdz  = XUNDEF
+XLES_MEAN_dVdz  = XUNDEF
+XLES_MEAN_dWdz  = XUNDEF
+XLES_MEAN_dThldz= XUNDEF
+IF (LUSERV) XLES_MEAN_dRtdz = XUNDEF
+IF (NSV>0)  XLES_MEAN_dSvdz = XUNDEF
+!
+IF (LLES_PDF) THEN
+ XLES_PDF_TH   = XUNDEF
+ XLES_PDF_W    = XUNDEF
+ XLES_PDF_THV  = XUNDEF
+ IF (LUSERV) THEN
+  XLES_PDF_RV   = XUNDEF
+ END IF
+ IF (LUSERC) THEN
+  XLES_PDF_RC    = XUNDEF
+  XLES_PDF_RT    = XUNDEF
+  XLES_PDF_THL   = XUNDEF
+ END IF
+ IF (LUSERR) THEN
+  XLES_PDF_RR   = XUNDEF
+ END IF
+ IF (LUSERI) THEN
+  XLES_PDF_RI   = XUNDEF
+ END IF
+ IF (LUSERS) THEN
+  XLES_PDF_RS   = XUNDEF
+ END IF
+ IF (LUSERG) THEN
+  XLES_PDF_RG   = XUNDEF
+ END IF
+END IF
+!
+!
+!
+!*      7.3  Resolved quantities
+!            -------------------
+!
+ALLOCATE(XLES_RESOLVED_U2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'2>
+ALLOCATE(XLES_RESOLVED_V2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'2>
+ALLOCATE(XLES_RESOLVED_W2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2>
+ALLOCATE(XLES_RESOLVED_P2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <p'2>
+ALLOCATE(XLES_RESOLVED_Th2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'2>
+IF (LUSERV) THEN
+  ALLOCATE(XLES_RESOLVED_ThThv (NLES_K,NLES_TIMES,NLES_MASKS))   ! <Th'Thv'>
+ELSE
+  ALLOCATE(XLES_RESOLVED_ThThv (0,0,0))
+END IF
+IF (LUSERC) THEN
+  ALLOCATE(XLES_RESOLVED_Thl2  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <Thl'2>
+  ALLOCATE(XLES_RESOLVED_ThlThv(NLES_K,NLES_TIMES,NLES_MASKS))   ! <Thl'Thv'>
+ELSE
+  ALLOCATE(XLES_RESOLVED_Thl2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThlThv(0,0,0))
+END IF
+ALLOCATE(XLES_RESOLVED_Ke    (NLES_K,NLES_TIMES,NLES_MASKS))     ! 0.5 <u'2+v'2+w'2>
+ALLOCATE(XLES_RESOLVED_UV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'v'>
+ALLOCATE(XLES_RESOLVED_WU    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'u'>
+ALLOCATE(XLES_RESOLVED_WV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'v'>
+ALLOCATE(XLES_RESOLVED_UP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'p'>
+ALLOCATE(XLES_RESOLVED_VP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'p'>
+ALLOCATE(XLES_RESOLVED_WP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'p'>
+ALLOCATE(XLES_RESOLVED_UTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Th'>
+ALLOCATE(XLES_RESOLVED_VTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Th'>
+ALLOCATE(XLES_RESOLVED_WTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Th'>
+IF (LUSERC) THEN
+  ALLOCATE(XLES_RESOLVED_UThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <u'Thl'>
+  ALLOCATE(XLES_RESOLVED_VThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <v'Thl'>
+  ALLOCATE(XLES_RESOLVED_WThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <w'Thl'>
+ELSE
+  ALLOCATE(XLES_RESOLVED_UThl(0,0,0))
+  ALLOCATE(XLES_RESOLVED_VThl(0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThl(0,0,0))
+END IF
+IF (LUSERV) THEN
+  ALLOCATE(XLES_RESOLVED_UThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <u'Thv'>
+  ALLOCATE(XLES_RESOLVED_VThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <v'Thv'>
+  ALLOCATE(XLES_RESOLVED_WThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <w'Thv'>
+ELSE
+  ALLOCATE(XLES_RESOLVED_UThv(0,0,0))
+  ALLOCATE(XLES_RESOLVED_VThv(0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThv(0,0,0))
+END IF
+ALLOCATE(XLES_RESOLVED_U3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'3>
+ALLOCATE(XLES_RESOLVED_V3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'3>
+ALLOCATE(XLES_RESOLVED_W3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'3>
+ALLOCATE(XLES_RESOLVED_U4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'4>
+ALLOCATE(XLES_RESOLVED_V4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'4>
+ALLOCATE(XLES_RESOLVED_W4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'4>
+ALLOCATE(XLES_RESOLVED_ThlPz (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'dp'/dz>
+ALLOCATE(XLES_RESOLVED_WThl2 (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'2>
+ALLOCATE(XLES_RESOLVED_W2Thl (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Thl'>
+ALLOCATE(XLES_RESOLVED_MASSFX(NLES_K,NLES_TIMES,NLES_MASKS))     ! <upward mass flux>
+ALLOCATE(XLES_RESOLVED_UKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'(u'2+v'2+w'2)>
+ALLOCATE(XLES_RESOLVED_VKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'(u'2+v'2+w'2)>
+ALLOCATE(XLES_RESOLVED_WKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'(u'2+v'2+w'2)>
+
+IF (LUSERV ) THEN
+  ALLOCATE(XLES_RESOLVED_Rv2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'2>
+  ALLOCATE(XLES_RESOLVED_ThRv  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Rv'>
+  ALLOCATE(XLES_RESOLVED_ThvRv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Rv'>
+  ALLOCATE(XLES_RESOLVED_URv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rv'>
+  ALLOCATE(XLES_RESOLVED_VRv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rv'>
+  ALLOCATE(XLES_RESOLVED_WRv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'>
+  ALLOCATE(XLES_RESOLVED_WRv2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'2>
+  ALLOCATE(XLES_RESOLVED_W2Rv  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rv'>  
+  ALLOCATE(XLES_RESOLVED_W2Rt  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rt'> 
+  ALLOCATE(XLES_RESOLVED_WRt2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt2'>    
+  ALLOCATE(XLES_RESOLVED_RvPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'dp'/dz>
+  ALLOCATE(XLES_RESOLVED_WThlRv(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rv'>
+  ALLOCATE(XLES_RESOLVED_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rt'>  
+ELSE
+  ALLOCATE(XLES_RESOLVED_Rv2   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThRv  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThvRv (0,0,0))
+  ALLOCATE(XLES_RESOLVED_URv   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_VRv   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRv   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRv2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_W2Rv  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_W2Rt  (0,0,0)) 
+  ALLOCATE(XLES_RESOLVED_WRt2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_RvPz  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThlRv(0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThlRt(0,0,0))
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_RESOLVED_ThlRv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rv'>
+  !
+  ALLOCATE(XLES_RESOLVED_Rc2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'2>
+  ALLOCATE(XLES_RESOLVED_ThRc  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Rc'>
+  ALLOCATE(XLES_RESOLVED_ThlRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rc'>
+  ALLOCATE(XLES_RESOLVED_ThvRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Rc'>
+  ALLOCATE(XLES_RESOLVED_URc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rc'>
+  ALLOCATE(XLES_RESOLVED_VRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rc'>
+  ALLOCATE(XLES_RESOLVED_WRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'>
+  ALLOCATE(XLES_RESOLVED_WRc2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'2>
+  ALLOCATE(XLES_RESOLVED_W2Rc  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rc'>
+  ALLOCATE(XLES_RESOLVED_RcPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'dp'/dz>
+  ALLOCATE(XLES_RESOLVED_WThlRc(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rc'>
+  ALLOCATE(XLES_RESOLVED_WRvRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'Rc'>
+  ALLOCATE(XLES_RESOLVED_WRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'>
+  ALLOCATE(XLES_RESOLVED_Rt2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'2>
+  ALLOCATE(XLES_RESOLVED_RtPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'dp'/dz>
+ELSE
+  ALLOCATE(XLES_RESOLVED_ThlRv (0,0,0))
+  !
+  ALLOCATE(XLES_RESOLVED_Rc2   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThRc  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThlRc (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThvRc (0,0,0))
+  ALLOCATE(XLES_RESOLVED_URc   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_VRc   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRc   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRc2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_W2Rc  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_RcPz  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThlRc(0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRvRc (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRt   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_Rt2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_RtPz  (0,0,0))
+END IF
+IF (LUSERI ) THEN
+  ALLOCATE(XLES_RESOLVED_Ri2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'2>
+  ALLOCATE(XLES_RESOLVED_ThRi  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Ri'>
+  ALLOCATE(XLES_RESOLVED_ThlRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Ri'>
+  ALLOCATE(XLES_RESOLVED_ThvRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Ri'>
+  ALLOCATE(XLES_RESOLVED_URi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Ri'>
+  ALLOCATE(XLES_RESOLVED_VRi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Ri'>
+  ALLOCATE(XLES_RESOLVED_WRi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Ri'>
+  ALLOCATE(XLES_RESOLVED_WRi2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Ri'2>
+  ALLOCATE(XLES_RESOLVED_W2Ri  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Ri'>
+  ALLOCATE(XLES_RESOLVED_RiPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'dp'/dz>
+  ALLOCATE(XLES_RESOLVED_WThlRi(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Ri'>
+  ALLOCATE(XLES_RESOLVED_WRvRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'Ri'>
+ELSE
+  ALLOCATE(XLES_RESOLVED_Ri2   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThRi  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThlRi (0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThvRi (0,0,0))
+  ALLOCATE(XLES_RESOLVED_URi   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_VRi   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRi   (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRi2  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_W2Ri  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_RiPz  (0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThlRi(0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRvRi (0,0,0))
+END IF
+!
+IF (LUSERR) THEN
+  ALLOCATE(XLES_RESOLVED_WRr   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rr'>
+  ALLOCATE(XLES_INPRR3D        (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux
+  ALLOCATE(XLES_MAX_INPRR3D        (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux
+  ALLOCATE(XLES_EVAP3D        (NLES_K,NLES_TIMES,NLES_MASKS)) ! evap
+ELSE
+  ALLOCATE(XLES_RESOLVED_WRr   (0,0,0))
+  ALLOCATE(XLES_INPRR3D        (0,0,0))
+  ALLOCATE(XLES_MAX_INPRR3D        (0,0,0))
+  ALLOCATE(XLES_EVAP3D         (0,0,0))
+END IF
+IF (NSV>0  ) THEN
+  ALLOCATE(XLES_RESOLVED_Sv2   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'2>
+  ALLOCATE(XLES_RESOLVED_ThSv  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Th'Sv>
+  ALLOCATE(XLES_RESOLVED_USv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'>
+  ALLOCATE(XLES_RESOLVED_VSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'>
+  ALLOCATE(XLES_RESOLVED_WSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'>
+  ALLOCATE(XLES_RESOLVED_WSv2  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'2>
+  ALLOCATE(XLES_RESOLVED_W2Sv  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'2Sv'>
+  ALLOCATE(XLES_RESOLVED_SvPz  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'dp'/dz>
+  ALLOCATE(XLES_RESOLVED_WThlSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Thl'Sv'>
+  IF (LUSERV) THEN
+    ALLOCATE(XLES_RESOLVED_ThvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thv'Sv>
+    ALLOCATE(XLES_RESOLVED_WRvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Rv'Sv'>
+  ELSE
+    ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0))
+    ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0))
+  END IF
+  IF (LUSERC) THEN
+    ALLOCATE(XLES_RESOLVED_ThlSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thl'Sv>
+  ELSE
+    ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0))
+  END IF
+ELSE
+  ALLOCATE(XLES_RESOLVED_Sv2   (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThSv  (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_USv   (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_VSv   (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_WSv   (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_WSv2  (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_W2Sv  (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_SvPz  (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_WThlSv(0,0,0,0))
+  ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0))
+END IF
+!
+!
+XLES_RESOLVED_U2  = XUNDEF
+XLES_RESOLVED_V2  = XUNDEF
+XLES_RESOLVED_W2  = XUNDEF
+XLES_RESOLVED_P2  = XUNDEF
+XLES_RESOLVED_Th2 = XUNDEF
+IF( LUSERC) THEN
+  XLES_RESOLVED_Thl2= XUNDEF
+  XLES_RESOLVED_ThlThv= XUNDEF
+END IF
+IF (LUSERV) THEN
+  XLES_RESOLVED_ThThv = XUNDEF
+END IF
+XLES_RESOLVED_Ke  = XUNDEF
+XLES_RESOLVED_UV  = XUNDEF
+XLES_RESOLVED_WU  = XUNDEF
+XLES_RESOLVED_WV  = XUNDEF
+XLES_RESOLVED_UP  = XUNDEF
+XLES_RESOLVED_VP  = XUNDEF
+XLES_RESOLVED_WP  = XUNDEF
+XLES_RESOLVED_UTh = XUNDEF
+XLES_RESOLVED_VTh = XUNDEF
+XLES_RESOLVED_WTh = XUNDEF
+IF (LUSERC) THEN
+  XLES_RESOLVED_UThl= XUNDEF
+  XLES_RESOLVED_VThl= XUNDEF
+  XLES_RESOLVED_WThl= XUNDEF
+END IF
+IF (LUSERV) THEN
+  XLES_RESOLVED_UThv= XUNDEF
+  XLES_RESOLVED_VThv= XUNDEF
+  XLES_RESOLVED_WThv= XUNDEF
+END IF
+XLES_RESOLVED_U3  = XUNDEF
+XLES_RESOLVED_V3  = XUNDEF
+XLES_RESOLVED_W3  = XUNDEF
+XLES_RESOLVED_U4  = XUNDEF
+XLES_RESOLVED_V4  = XUNDEF
+XLES_RESOLVED_W4  = XUNDEF
+XLES_RESOLVED_WThl2  = XUNDEF
+XLES_RESOLVED_W2Thl  = XUNDEF
+XLES_RESOLVED_ThlPz  = XUNDEF
+!
+XLES_RESOLVED_MASSFX = XUNDEF
+XLES_RESOLVED_UKe = XUNDEF
+XLES_RESOLVED_VKe = XUNDEF
+XLES_RESOLVED_WKe = XUNDEF
+IF (LUSERV ) THEN
+  XLES_RESOLVED_Rv2  = XUNDEF
+  XLES_RESOLVED_ThRv = XUNDEF
+  IF (LUSERC) XLES_RESOLVED_ThlRv= XUNDEF
+  XLES_RESOLVED_ThvRv= XUNDEF
+  XLES_RESOLVED_URv = XUNDEF
+  XLES_RESOLVED_VRv = XUNDEF
+  XLES_RESOLVED_WRv = XUNDEF
+  XLES_RESOLVED_WRv2  = XUNDEF
+  XLES_RESOLVED_W2Rv  = XUNDEF
+  XLES_RESOLVED_WRt2 = XUNDEF
+  XLES_RESOLVED_W2Rt  = XUNDEF
+  XLES_RESOLVED_WThlRv= XUNDEF
+  XLES_RESOLVED_WThlRt= XUNDEF  
+  XLES_RESOLVED_RvPz  = XUNDEF
+END IF
+IF (LUSERC ) THEN
+  XLES_RESOLVED_Rc2  = XUNDEF
+  XLES_RESOLVED_ThRc = XUNDEF
+  XLES_RESOLVED_ThlRc= XUNDEF
+  XLES_RESOLVED_ThvRc= XUNDEF
+  XLES_RESOLVED_URc  = XUNDEF
+  XLES_RESOLVED_VRc  = XUNDEF
+  XLES_RESOLVED_WRc  = XUNDEF
+  XLES_RESOLVED_WRc2  = XUNDEF
+  XLES_RESOLVED_W2Rc  = XUNDEF
+  XLES_RESOLVED_WThlRc= XUNDEF
+  XLES_RESOLVED_WRvRc = XUNDEF
+  XLES_RESOLVED_RcPz  = XUNDEF
+  XLES_RESOLVED_RtPz  = XUNDEF
+  XLES_RESOLVED_WRt  = XUNDEF
+  XLES_RESOLVED_Rt2  = XUNDEF
+END IF
+IF (LUSERI ) THEN
+  XLES_RESOLVED_Ri2  = XUNDEF
+  XLES_RESOLVED_ThRi = XUNDEF
+  XLES_RESOLVED_ThlRi= XUNDEF
+  XLES_RESOLVED_ThvRi= XUNDEF
+  XLES_RESOLVED_URi  = XUNDEF
+  XLES_RESOLVED_VRi  = XUNDEF
+  XLES_RESOLVED_WRi  = XUNDEF
+  XLES_RESOLVED_WRi2  = XUNDEF
+  XLES_RESOLVED_W2Ri  = XUNDEF
+  XLES_RESOLVED_WThlRi= XUNDEF
+  XLES_RESOLVED_WRvRi = XUNDEF
+  XLES_RESOLVED_RiPz  = XUNDEF
+END IF
+!
+IF (LUSERR) XLES_RESOLVED_WRr = XUNDEF
+IF (LUSERR) XLES_MAX_INPRR3D = XUNDEF
+IF (LUSERR) XLES_INPRR3D = XUNDEF
+IF (LUSERR) XLES_EVAP3D = XUNDEF
+IF (NSV>0  ) THEN
+  XLES_RESOLVED_Sv2  = XUNDEF
+  XLES_RESOLVED_ThSv = XUNDEF
+  IF (LUSERC) XLES_RESOLVED_ThlSv= XUNDEF
+  IF (LUSERV) XLES_RESOLVED_ThvSv= XUNDEF
+  XLES_RESOLVED_USv = XUNDEF
+  XLES_RESOLVED_VSv = XUNDEF
+  XLES_RESOLVED_WSv = XUNDEF
+  XLES_RESOLVED_WSv2  = XUNDEF
+  XLES_RESOLVED_W2Sv  = XUNDEF
+  XLES_RESOLVED_WThlSv= XUNDEF
+  IF (LUSERV) XLES_RESOLVED_WRvSv = XUNDEF
+  XLES_RESOLVED_SvPz  = XUNDEF
+END IF
+!
+!
+!*      7.4  interactions of resolved and subgrid quantities
+!            -----------------------------------------------
+!
+ALLOCATE(XLES_RES_U_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <u'Tke>
+ALLOCATE(XLES_RES_V_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <v'Tke>
+ALLOCATE(XLES_RES_W_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Tke>
+!                                                                        ______
+ALLOCATE(XLES_RES_W_SBG_WThl        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Thl'>
+!                                                                        _____
+ALLOCATE(XLES_RES_W_SBG_Thl2        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'2>
+!                                                                              _____
+ALLOCATE(XLES_RES_ddxa_U_SBG_UaU    (NLES_K,NLES_TIMES,NLES_MASKS))!  <du'/dxa ua'u'>
+!                                                                              _____
+ALLOCATE(XLES_RES_ddxa_V_SBG_UaV    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dv'/dxa ua'v'>
+!                                                                              _____
+ALLOCATE(XLES_RES_ddxa_W_SBG_UaW    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'w'>
+!                                                                              _______
+ALLOCATE(XLES_RES_ddxa_W_SBG_UaThl  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Thl'>
+!                                                                                _____
+ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaW  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'w'>
+!                                                                               ___
+ALLOCATE(XLES_RES_ddz_Thl_SBG_W2    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dz w'2>
+!                                                                                _______
+ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaThl(NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Thl'>
+!
+IF (LUSERV) THEN
+!                                                                          _____
+  ALLOCATE(XLES_RES_W_SBG_WRt         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Rt'>
+!                                                                           ____
+  ALLOCATE(XLES_RES_W_SBG_Rt2         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Rt'2>
+!                                                                          _______
+  ALLOCATE(XLES_RES_W_SBG_ThlRt       (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'Rt'>
+!                                                                                ______
+  ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Rt'>
+!                                                                                 _____
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'w'>
+!                                                                                ___
+  ALLOCATE(XLES_RES_ddz_Rt_SBG_W2     (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dz w'2>
+!                                                                                  ______
+  ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Rt'>
+!                                                                                 _______
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'Thl'>
+!                                                                                  ______
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt  (NLES_K,NLES_TIMES,NLES_MASKS)) !  <dRt'/dxa ua'Rt'>
+ELSE
+  ALLOCATE(XLES_RES_W_SBG_WRt         (0,0,0))
+  ALLOCATE(XLES_RES_W_SBG_Rt2         (0,0,0))
+  ALLOCATE(XLES_RES_W_SBG_ThlRt       (0,0,0))
+  ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt   (0,0,0))
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW   (0,0,0))
+  ALLOCATE(XLES_RES_ddz_Rt_SBG_W2     (0,0,0))
+  ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (0,0,0))
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (0,0,0))
+  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt  (0,0,0))
+END IF
+!
+!                                                                                  ______
+ALLOCATE(XLES_RES_ddxa_W_SBG_UaSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dw'/dxa ua'Sv'>
+!                                                                                   _____
+ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'w'>
+!                                                                                   ___
+ALLOCATE(XLES_RES_ddz_Sv_SBG_W2   (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dz w'2>
+!                                                                                  ______
+ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'Sv'>
+!                                                                            _____
+ALLOCATE(XLES_RES_W_SBG_WSv       (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <w'w'Sv'>
+!                                                                            ____
+ALLOCATE(XLES_RES_W_SBG_Sv2       (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <w'Sv'2>
+!
+XLES_RES_U_SBG_Tke= XUNDEF
+XLES_RES_V_SBG_Tke= XUNDEF
+XLES_RES_W_SBG_Tke= XUNDEF
+XLES_RES_W_SBG_WThl         = XUNDEF
+XLES_RES_W_SBG_Thl2         = XUNDEF
+XLES_RES_ddxa_U_SBG_UaU     = XUNDEF
+XLES_RES_ddxa_V_SBG_UaV     = XUNDEF
+XLES_RES_ddxa_W_SBG_UaW     = XUNDEF
+XLES_RES_ddxa_W_SBG_UaThl   = XUNDEF
+XLES_RES_ddxa_Thl_SBG_UaW   = XUNDEF
+XLES_RES_ddz_Thl_SBG_W2     = XUNDEF
+XLES_RES_ddxa_Thl_SBG_UaThl = XUNDEF
+IF (LUSERV) THEN
+  XLES_RES_W_SBG_WRt        = XUNDEF
+  XLES_RES_W_SBG_Rt2        = XUNDEF
+  XLES_RES_W_SBG_ThlRt      = XUNDEF
+  XLES_RES_ddxa_W_SBG_UaRt  = XUNDEF
+  XLES_RES_ddxa_Rt_SBG_UaW  = XUNDEF
+  XLES_RES_ddz_Rt_SBG_W2    = XUNDEF
+  XLES_RES_ddxa_Thl_SBG_UaRt= XUNDEF
+  XLES_RES_ddxa_Rt_SBG_UaThl= XUNDEF
+  XLES_RES_ddxa_Rt_SBG_UaRt = XUNDEF
+END IF
+IF (NSV>0) THEN
+  XLES_RES_ddxa_W_SBG_UaSv = XUNDEF
+  XLES_RES_ddxa_Sv_SBG_UaW = XUNDEF
+  XLES_RES_ddz_Sv_SBG_W2   = XUNDEF
+  XLES_RES_ddxa_Sv_SBG_UaSv= XUNDEF
+  XLES_RES_W_SBG_WSv       = XUNDEF
+  XLES_RES_W_SBG_Sv2       = XUNDEF
+END IF
+!
+!
+!*      7.5  subgrid quantities
+!            ------------------
+!
+ALLOCATE(XLES_SUBGRID_U2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'2>
+ALLOCATE(XLES_SUBGRID_V2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'2>
+ALLOCATE(XLES_SUBGRID_W2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2>
+ALLOCATE(XLES_SUBGRID_Tke   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <e>
+ALLOCATE(XLES_SUBGRID_Thl2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'2>
+ALLOCATE(XLES_SUBGRID_UV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'v'>
+ALLOCATE(XLES_SUBGRID_WU    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'u'>
+ALLOCATE(XLES_SUBGRID_WV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'v'>
+ALLOCATE(XLES_SUBGRID_UThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Thl'>
+ALLOCATE(XLES_SUBGRID_VThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Thl'>
+ALLOCATE(XLES_SUBGRID_WThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'>
+ALLOCATE(XLES_SUBGRID_WThv     (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thv'>
+ALLOCATE(XLES_SUBGRID_ThlThv   (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'Thv'>
+ALLOCATE(XLES_SUBGRID_W2Thl    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'2Thl>
+ALLOCATE(XLES_SUBGRID_WThl2    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thl'2>
+ALLOCATE(XLES_SUBGRID_DISS_Tke (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon>
+ALLOCATE(XLES_SUBGRID_DISS_Thl2(NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Thl2>
+ALLOCATE(XLES_SUBGRID_WP       (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'p'>
+ALLOCATE(XLES_SUBGRID_PHI3     (NLES_K,NLES_TIMES,NLES_MASKS))  ! phi3
+ALLOCATE(XLES_SUBGRID_LMix     (NLES_K,NLES_TIMES,NLES_MASKS))  ! mixing length
+ALLOCATE(XLES_SUBGRID_LDiss    (NLES_K,NLES_TIMES,NLES_MASKS))  ! dissipative length
+ALLOCATE(XLES_SUBGRID_Km       (NLES_K,NLES_TIMES,NLES_MASKS))  ! Km
+ALLOCATE(XLES_SUBGRID_Kh       (NLES_K,NLES_TIMES,NLES_MASKS))  ! Kh
+ALLOCATE(XLES_SUBGRID_ThlPz    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'dp'/dz>
+ALLOCATE(XLES_SUBGRID_UTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Tke>
+ALLOCATE(XLES_SUBGRID_VTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Tke>
+ALLOCATE(XLES_SUBGRID_WTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Tke>
+ALLOCATE(XLES_SUBGRID_ddz_WTke  (NLES_K,NLES_TIMES,NLES_MASKS)) ! <dw'Tke/dz>
+
+ALLOCATE(XLES_SUBGRID_THLUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
+ALLOCATE(XLES_SUBGRID_RTUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rt of the Updraft
+ALLOCATE(XLES_SUBGRID_RVUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rv of the Updraft
+ALLOCATE(XLES_SUBGRID_RCUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rc of the Updraft
+ALLOCATE(XLES_SUBGRID_RIUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Ri of the Updraft
+ALLOCATE(XLES_SUBGRID_WUP_MF  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
+ALLOCATE(XLES_SUBGRID_MASSFLUX(NLES_K,NLES_TIMES,NLES_MASKS))  ! Mass Flux
+ALLOCATE(XLES_SUBGRID_DETR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Detrainment
+ALLOCATE(XLES_SUBGRID_ENTR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Entrainment
+ALLOCATE(XLES_SUBGRID_FRACUP  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Updraft Fraction 
+ALLOCATE(XLES_SUBGRID_THVUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thv of the Updraft
+ALLOCATE(XLES_SUBGRID_WTHLMF  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Flux of thl   
+ALLOCATE(XLES_SUBGRID_WRTMF   (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of rt
+ALLOCATE(XLES_SUBGRID_WTHVMF  (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of thv 
+ALLOCATE(XLES_SUBGRID_WUMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of u
+ALLOCATE(XLES_SUBGRID_WVMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of v
+
+IF (LUSERV ) THEN
+  ALLOCATE(XLES_SUBGRID_Rt2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'2>
+  ALLOCATE(XLES_SUBGRID_ThlRt (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rt'>
+  ALLOCATE(XLES_SUBGRID_URt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rt'>
+  ALLOCATE(XLES_SUBGRID_VRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rt'>
+  ALLOCATE(XLES_SUBGRID_WRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'>
+  ALLOCATE(XLES_SUBGRID_RtThv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'Thv'>
+  ALLOCATE(XLES_SUBGRID_W2Rt  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rt'>
+  ALLOCATE(XLES_SUBGRID_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rt'>
+  ALLOCATE(XLES_SUBGRID_WRt2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'2>
+  ALLOCATE(XLES_SUBGRID_DISS_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Rt2>
+  ALLOCATE(XLES_SUBGRID_DISS_ThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_ThlRt>
+  ALLOCATE(XLES_SUBGRID_RtPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'dp'/dz>
+  ALLOCATE(XLES_SUBGRID_PSI3  (NLES_K,NLES_TIMES,NLES_MASKS))     ! psi3
+ELSE
+  ALLOCATE(XLES_SUBGRID_Rt2   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_ThlRt (0,0,0))
+  ALLOCATE(XLES_SUBGRID_URt   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_VRt   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_WRt   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_RtThv (0,0,0))
+  ALLOCATE(XLES_SUBGRID_W2Rt  (0,0,0))
+  ALLOCATE(XLES_SUBGRID_WThlRt(0,0,0))
+  ALLOCATE(XLES_SUBGRID_WRt2  (0,0,0))
+  ALLOCATE(XLES_SUBGRID_DISS_Rt2 (0,0,0))
+  ALLOCATE(XLES_SUBGRID_DISS_ThlRt(0,0,0))
+  ALLOCATE(XLES_SUBGRID_RtPz  (0,0,0))
+  ALLOCATE(XLES_SUBGRID_PSI3  (0,0,0))
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_SUBGRID_Rc2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'2>
+  ALLOCATE(XLES_SUBGRID_URc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rc'>
+  ALLOCATE(XLES_SUBGRID_VRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rc'>
+  ALLOCATE(XLES_SUBGRID_WRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'>
+ELSE
+  ALLOCATE(XLES_SUBGRID_Rc2   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_URc   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_VRc   (0,0,0))
+  ALLOCATE(XLES_SUBGRID_WRc   (0,0,0))
+END IF
+IF (LUSERI ) THEN
+  ALLOCATE(XLES_SUBGRID_Ri2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'2>
+ELSE
+  ALLOCATE(XLES_SUBGRID_Ri2   (0,0,0))
+END IF
+IF (NSV>0  ) THEN
+  ALLOCATE(XLES_SUBGRID_USv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'>
+  ALLOCATE(XLES_SUBGRID_VSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'>
+  ALLOCATE(XLES_SUBGRID_WSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'>
+  ALLOCATE(XLES_SUBGRID_Sv2      (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'2>
+  ALLOCATE(XLES_SUBGRID_SvThv    (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'Thv'>
+  ALLOCATE(XLES_SUBGRID_W2Sv     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'2Sv'>
+  ALLOCATE(XLES_SUBGRID_WSv2     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'Sv'2>
+  ALLOCATE(XLES_SUBGRID_DISS_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <epsilon_Sv2>
+  ALLOCATE(XLES_SUBGRID_SvPz     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'dp'/dz>
+ELSE
+  ALLOCATE(XLES_SUBGRID_USv   (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_VSv   (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_WSv   (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_Sv2     (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_SvThv   (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_W2Sv    (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_WSv2    (0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_DISS_Sv2(0,0,0,0))
+  ALLOCATE(XLES_SUBGRID_SvPz    (0,0,0,0))
+END IF
+!
+XLES_SUBGRID_U2  = XUNDEF
+XLES_SUBGRID_V2  = XUNDEF
+XLES_SUBGRID_W2  = XUNDEF
+XLES_SUBGRID_Tke = XUNDEF
+XLES_SUBGRID_Thl2= XUNDEF
+XLES_SUBGRID_UV  = XUNDEF
+XLES_SUBGRID_WU  = XUNDEF
+XLES_SUBGRID_WV  = XUNDEF
+XLES_SUBGRID_UThl= XUNDEF
+XLES_SUBGRID_VThl= XUNDEF
+XLES_SUBGRID_WThl= XUNDEF
+XLES_SUBGRID_WThv= XUNDEF
+XLES_SUBGRID_ThlThv= XUNDEF
+XLES_SUBGRID_W2Thl= XUNDEF
+XLES_SUBGRID_WThl2    = XUNDEF
+XLES_SUBGRID_DISS_Tke = XUNDEF
+XLES_SUBGRID_DISS_Thl2= XUNDEF
+XLES_SUBGRID_WP       = XUNDEF
+XLES_SUBGRID_PHI3     = XUNDEF
+XLES_SUBGRID_LMix     = XUNDEF
+XLES_SUBGRID_LDiss    = XUNDEF
+XLES_SUBGRID_Km       = XUNDEF
+XLES_SUBGRID_Kh       = XUNDEF
+XLES_SUBGRID_ThlPz    = XUNDEF
+XLES_SUBGRID_UTke= XUNDEF
+XLES_SUBGRID_VTke= XUNDEF
+XLES_SUBGRID_WTke= XUNDEF
+XLES_SUBGRID_ddz_WTke  = XUNDEF
+
+XLES_SUBGRID_THLUP_MF = XUNDEF
+XLES_SUBGRID_RTUP_MF  = XUNDEF
+XLES_SUBGRID_RVUP_MF  = XUNDEF
+XLES_SUBGRID_RCUP_MF  = XUNDEF
+XLES_SUBGRID_RIUP_MF  = XUNDEF
+XLES_SUBGRID_WUP_MF   = XUNDEF
+XLES_SUBGRID_MASSFLUX = XUNDEF
+XLES_SUBGRID_DETR     = XUNDEF
+XLES_SUBGRID_ENTR     = XUNDEF
+XLES_SUBGRID_FRACUP   = XUNDEF
+XLES_SUBGRID_THVUP_MF = XUNDEF
+XLES_SUBGRID_WTHLMF   = XUNDEF  
+XLES_SUBGRID_WRTMF    = XUNDEF
+XLES_SUBGRID_WTHVMF   = XUNDEF
+XLES_SUBGRID_WUMF     = XUNDEF
+XLES_SUBGRID_WVMF     = XUNDEF
+
+IF (LUSERV ) THEN
+  XLES_SUBGRID_Rt2 = XUNDEF
+  XLES_SUBGRID_ThlRt= XUNDEF
+  XLES_SUBGRID_URt = XUNDEF
+  XLES_SUBGRID_VRt = XUNDEF
+  XLES_SUBGRID_WRt = XUNDEF
+  XLES_SUBGRID_RtThv   = XUNDEF
+  XLES_SUBGRID_W2Rt    = XUNDEF
+  XLES_SUBGRID_WThlRt  = XUNDEF
+  XLES_SUBGRID_WRt2    = XUNDEF
+  XLES_SUBGRID_DISS_Rt2= XUNDEF
+  XLES_SUBGRID_DISS_ThlRt= XUNDEF
+  XLES_SUBGRID_RtPz    = XUNDEF
+  XLES_SUBGRID_PSI3     = XUNDEF
+END IF
+IF (LUSERC ) THEN
+  XLES_SUBGRID_Rc2 = XUNDEF
+  XLES_SUBGRID_URc = XUNDEF
+  XLES_SUBGRID_VRc = XUNDEF
+  XLES_SUBGRID_WRc = XUNDEF
+END IF
+IF (LUSERI ) THEN
+  XLES_SUBGRID_Ri2 = XUNDEF
+END IF
+IF (NSV>0  ) THEN
+  XLES_SUBGRID_USv = XUNDEF
+  XLES_SUBGRID_VSv = XUNDEF
+  XLES_SUBGRID_WSv = XUNDEF
+  XLES_SUBGRID_Sv2     = XUNDEF
+  XLES_SUBGRID_SvThv   = XUNDEF
+  XLES_SUBGRID_W2Sv    = XUNDEF
+  XLES_SUBGRID_WSv2    = XUNDEF
+  XLES_SUBGRID_DISS_Sv2= XUNDEF
+  XLES_SUBGRID_SvPz    = XUNDEF
+END IF
+!
+!
+!*      7.6  updraft quantities (only on the cartesian mask)
+!            ------------------
+!
+ALLOCATE(XLES_UPDRAFT       (NLES_K,NLES_TIMES))    ! updraft fraction
+ALLOCATE(XLES_UPDRAFT_W     (NLES_K,NLES_TIMES))    ! <w>
+ALLOCATE(XLES_UPDRAFT_Th    (NLES_K,NLES_TIMES))    ! <theta>
+ALLOCATE(XLES_UPDRAFT_Ke    (NLES_K,NLES_TIMES))    ! <E>
+ALLOCATE(XLES_UPDRAFT_WTh   (NLES_K,NLES_TIMES))    ! <w'theta'>
+ALLOCATE(XLES_UPDRAFT_Th2   (NLES_K,NLES_TIMES))    ! <th'2>
+ALLOCATE(XLES_UPDRAFT_Tke   (NLES_K,NLES_TIMES))    ! <e>
+
+IF (LUSERV) THEN
+  ALLOCATE(XLES_UPDRAFT_Thv   (NLES_K,NLES_TIMES))    ! <thetav>
+  ALLOCATE(XLES_UPDRAFT_WThv  (NLES_K,NLES_TIMES))    ! <w'thv'>
+  ALLOCATE(XLES_UPDRAFT_ThThv (NLES_K,NLES_TIMES))    ! <th'thv'>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Thv   (0,0))
+  ALLOCATE(XLES_UPDRAFT_WThv  (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThThv (0,0))
+END IF
+!
+IF (LUSERC) THEN
+  ALLOCATE(XLES_UPDRAFT_Thl   (NLES_K,NLES_TIMES))    ! <thetal>
+  ALLOCATE(XLES_UPDRAFT_WThl  (NLES_K,NLES_TIMES))    ! <w'thetal'>
+  ALLOCATE(XLES_UPDRAFT_Thl2  (NLES_K,NLES_TIMES))    ! <thl'2>
+  ALLOCATE(XLES_UPDRAFT_ThlThv(NLES_K,NLES_TIMES))    ! <thl'thv'>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Thl   (0,0))
+  ALLOCATE(XLES_UPDRAFT_WThl  (0,0))
+  ALLOCATE(XLES_UPDRAFT_Thl2  (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThlThv(0,0))
+END IF
+
+IF (LUSERV ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rv    (NLES_K,NLES_TIMES))    ! <Rv>
+  ALLOCATE(XLES_UPDRAFT_WRv   (NLES_K,NLES_TIMES))    ! <w'Rv'>
+  ALLOCATE(XLES_UPDRAFT_Rv2   (NLES_K,NLES_TIMES))    ! <Rv'2>
+  ALLOCATE(XLES_UPDRAFT_ThRv  (NLES_K,NLES_TIMES))    ! <Th'Rv'>
+  ALLOCATE(XLES_UPDRAFT_ThvRv (NLES_K,NLES_TIMES))    ! <Thv'Rv'>
+  IF (LUSERC) THEN
+    ALLOCATE(XLES_UPDRAFT_ThlRv (NLES_K,NLES_TIMES))    ! <Thl'Rv'>
+  ELSE
+    ALLOCATE(XLES_UPDRAFT_ThlRv (0,0))
+  END IF
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rv    (0,0))
+  ALLOCATE(XLES_UPDRAFT_WRv   (0,0))
+  ALLOCATE(XLES_UPDRAFT_Rv2   (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThRv  (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThvRv (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThlRv (0,0))
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rc    (NLES_K,NLES_TIMES))    ! <Rc>
+  ALLOCATE(XLES_UPDRAFT_WRc   (NLES_K,NLES_TIMES))    ! <w'Rc'>
+  ALLOCATE(XLES_UPDRAFT_Rc2   (NLES_K,NLES_TIMES))    ! <Rc'2>
+  ALLOCATE(XLES_UPDRAFT_ThRc  (NLES_K,NLES_TIMES))    ! <Th'Rc'>
+  ALLOCATE(XLES_UPDRAFT_ThvRc (NLES_K,NLES_TIMES))    ! <Thv'Rc'>
+  ALLOCATE(XLES_UPDRAFT_ThlRc (NLES_K,NLES_TIMES))    ! <Thl'Rc'>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rc    (0,0))
+  ALLOCATE(XLES_UPDRAFT_WRc   (0,0))
+  ALLOCATE(XLES_UPDRAFT_Rc2   (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThRc  (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThvRc (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThlRc (0,0))
+END IF
+IF (LUSERR ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rr    (NLES_K,NLES_TIMES))    ! <Rr>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rr    (0,0))
+END IF
+IF (LUSERI ) THEN
+  ALLOCATE(XLES_UPDRAFT_Ri    (NLES_K,NLES_TIMES))    ! <Ri>
+  ALLOCATE(XLES_UPDRAFT_WRi   (NLES_K,NLES_TIMES))    ! <w'Ri'>
+  ALLOCATE(XLES_UPDRAFT_Ri2   (NLES_K,NLES_TIMES))    ! <Ri'2>
+  ALLOCATE(XLES_UPDRAFT_ThRi  (NLES_K,NLES_TIMES))    ! <Th'Ri'>
+  ALLOCATE(XLES_UPDRAFT_ThvRi (NLES_K,NLES_TIMES))    ! <Thv'Ri'>
+  ALLOCATE(XLES_UPDRAFT_ThlRi (NLES_K,NLES_TIMES))    ! <Thl'Ri'>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Ri    (0,0))
+  ALLOCATE(XLES_UPDRAFT_WRi   (0,0))
+  ALLOCATE(XLES_UPDRAFT_Ri2   (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThRi  (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThvRi (0,0))
+  ALLOCATE(XLES_UPDRAFT_ThlRi (0,0))
+END IF
+IF (LUSERS ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rs    (NLES_K,NLES_TIMES))    ! <Rs>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rs    (0,0))
+END IF
+IF (LUSERG ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rg    (NLES_K,NLES_TIMES))    ! <Rg>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rg    (0,0))
+END IF
+IF (LUSERH ) THEN
+  ALLOCATE(XLES_UPDRAFT_Rh    (NLES_K,NLES_TIMES))    ! <Rh>
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Rh    (0,0))
+END IF
+IF (NSV>0  ) THEN
+  ALLOCATE(XLES_UPDRAFT_Sv    (NLES_K,NLES_TIMES,NSV))! <Sv>
+  ALLOCATE(XLES_UPDRAFT_WSv   (NLES_K,NLES_TIMES,NSV))! <w'Sv'>
+  ALLOCATE(XLES_UPDRAFT_Sv2   (NLES_K,NLES_TIMES,NSV))! <Sv'2>
+  ALLOCATE(XLES_UPDRAFT_ThSv  (NLES_K,NLES_TIMES,NSV))! <Th'Sv'>
+  IF (LUSERV) THEN
+    ALLOCATE(XLES_UPDRAFT_ThvSv  (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'>
+  ELSE
+    ALLOCATE(XLES_UPDRAFT_ThvSv  (0,0,0))
+  END IF
+  IF (LUSERC) THEN
+    ALLOCATE(XLES_UPDRAFT_ThlSv  (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'>
+  ELSE
+    ALLOCATE(XLES_UPDRAFT_ThlSv  (0,0,0))
+  END IF
+ELSE
+  ALLOCATE(XLES_UPDRAFT_Sv    (0,0,0))
+  ALLOCATE(XLES_UPDRAFT_WSv   (0,0,0))
+  ALLOCATE(XLES_UPDRAFT_Sv2   (0,0,0))
+  ALLOCATE(XLES_UPDRAFT_ThSv  (0,0,0))
+  ALLOCATE(XLES_UPDRAFT_ThvSv (0,0,0))
+  ALLOCATE(XLES_UPDRAFT_ThlSv (0,0,0))
+END IF
+!
+!
+XLES_UPDRAFT     = XUNDEF
+XLES_UPDRAFT_W   = XUNDEF
+XLES_UPDRAFT_Th  = XUNDEF
+XLES_UPDRAFT_Thl = XUNDEF
+XLES_UPDRAFT_Tke  = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_Thv = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_Thl = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_Rv  = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_Rc  = XUNDEF
+IF (LUSERR ) XLES_UPDRAFT_Rr  = XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_Ri  = XUNDEF
+IF (LUSERS ) XLES_UPDRAFT_Rs  = XUNDEF
+IF (LUSERG ) XLES_UPDRAFT_Rg  = XUNDEF
+IF (LUSERH ) XLES_UPDRAFT_Rh  = XUNDEF
+IF (NSV>0  ) XLES_UPDRAFT_Sv  = XUNDEF
+XLES_UPDRAFT_Ke   = XUNDEF
+XLES_UPDRAFT_WTh  = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_WThv = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_WThl = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_WRv  = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_WRc  = XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_WRi  = XUNDEF
+IF (NSV>0  ) XLES_UPDRAFT_WSv  = XUNDEF
+XLES_UPDRAFT_Th2  = XUNDEF
+IF (LUSERV ) THEN
+  XLES_UPDRAFT_ThThv  = XUNDEF
+END IF
+IF (LUSERC ) THEN
+  XLES_UPDRAFT_Thl2   = XUNDEF
+  XLES_UPDRAFT_ThlThv = XUNDEF
+END IF
+IF (LUSERV ) XLES_UPDRAFT_Rv2  = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_Rc2  = XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_Ri2  = XUNDEF
+IF (NSV>0  ) XLES_UPDRAFT_Sv2  = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_ThRv = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_ThRc = XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_ThRi = XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_ThlRv= XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_ThlRc= XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_ThlRi= XUNDEF
+IF (NSV>0  ) XLES_UPDRAFT_ThSv = XUNDEF
+IF (LUSERV ) XLES_UPDRAFT_ThvRv= XUNDEF
+IF (LUSERC ) XLES_UPDRAFT_ThvRc= XUNDEF
+IF (LUSERI ) XLES_UPDRAFT_ThvRi= XUNDEF
+IF (NSV>0 .AND. LUSERV) XLES_UPDRAFT_ThvSv = XUNDEF
+IF (NSV>0 .AND. LUSERC) XLES_UPDRAFT_ThlSv = XUNDEF
+!
+!
+!*      7.7  downdraft quantities (only on the cartesian mask)
+!            --------------------
+!
+ALLOCATE(XLES_DOWNDRAFT       (NLES_K,NLES_TIMES))    ! updraft fraction
+ALLOCATE(XLES_DOWNDRAFT_W     (NLES_K,NLES_TIMES))    ! <w>
+ALLOCATE(XLES_DOWNDRAFT_Th    (NLES_K,NLES_TIMES))    ! <theta>
+ALLOCATE(XLES_DOWNDRAFT_Ke    (NLES_K,NLES_TIMES))    ! <E>
+ALLOCATE(XLES_DOWNDRAFT_WTh   (NLES_K,NLES_TIMES))    ! <w'theta'>
+ALLOCATE(XLES_DOWNDRAFT_Th2   (NLES_K,NLES_TIMES))    ! <th'2>
+ALLOCATE(XLES_DOWNDRAFT_Tke   (NLES_K,NLES_TIMES))    ! <e>
+
+IF (LUSERV) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Thv   (NLES_K,NLES_TIMES))    ! <thetav>
+  ALLOCATE(XLES_DOWNDRAFT_WThv  (NLES_K,NLES_TIMES))    ! <w'thv'>
+  ALLOCATE(XLES_DOWNDRAFT_ThThv (NLES_K,NLES_TIMES))    ! <th'thv'>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Thv   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WThv  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThThv (0,0))
+END IF
+!
+IF (LUSERC) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Thl   (NLES_K,NLES_TIMES))    ! <thetal>
+  ALLOCATE(XLES_DOWNDRAFT_WThl  (NLES_K,NLES_TIMES))    ! <w'thetal'>
+  ALLOCATE(XLES_DOWNDRAFT_Thl2  (NLES_K,NLES_TIMES))    ! <thl'2>
+  ALLOCATE(XLES_DOWNDRAFT_ThlThv(NLES_K,NLES_TIMES))    ! <thl'thv'>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Thl   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WThl  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_Thl2  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThlThv(0,0))
+END IF
+
+IF (LUSERV ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rv    (NLES_K,NLES_TIMES))    ! <Rv>
+  ALLOCATE(XLES_DOWNDRAFT_WRv   (NLES_K,NLES_TIMES))    ! <w'Rv'>
+  ALLOCATE(XLES_DOWNDRAFT_Rv2   (NLES_K,NLES_TIMES))    ! <Rv'2>
+  ALLOCATE(XLES_DOWNDRAFT_ThRv  (NLES_K,NLES_TIMES))    ! <Th'Rv'>
+  ALLOCATE(XLES_DOWNDRAFT_ThvRv (NLES_K,NLES_TIMES))    ! <Thv'Rv'>
+  IF (LUSERC) THEN
+    ALLOCATE(XLES_DOWNDRAFT_ThlRv (NLES_K,NLES_TIMES))    ! <Thl'Rv'>
+  ELSE
+    ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0))
+  END IF
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rv    (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WRv   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_Rv2   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThRv  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThvRv (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0))
+END IF
+IF (LUSERC ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rc    (NLES_K,NLES_TIMES))    ! <Rc>
+  ALLOCATE(XLES_DOWNDRAFT_WRc   (NLES_K,NLES_TIMES))    ! <w'Rc'>
+  ALLOCATE(XLES_DOWNDRAFT_Rc2   (NLES_K,NLES_TIMES))    ! <Rc'2>
+  ALLOCATE(XLES_DOWNDRAFT_ThRc  (NLES_K,NLES_TIMES))    ! <Th'Rc'>
+  ALLOCATE(XLES_DOWNDRAFT_ThvRc (NLES_K,NLES_TIMES))    ! <Thv'Rc'>
+  ALLOCATE(XLES_DOWNDRAFT_ThlRc (NLES_K,NLES_TIMES))    ! <Thl'Rc'>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rc    (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WRc   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_Rc2   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThRc  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThvRc (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThlRc (0,0))
+END IF
+IF (LUSERR ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rr    (NLES_K,NLES_TIMES))    ! <Rr>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rr    (0,0))
+END IF
+IF (LUSERI ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Ri    (NLES_K,NLES_TIMES))    ! <Ri>
+  ALLOCATE(XLES_DOWNDRAFT_WRi   (NLES_K,NLES_TIMES))    ! <w'Ri'>
+  ALLOCATE(XLES_DOWNDRAFT_Ri2   (NLES_K,NLES_TIMES))    ! <Ri'2>
+  ALLOCATE(XLES_DOWNDRAFT_ThRi  (NLES_K,NLES_TIMES))    ! <Th'Ri'>
+  ALLOCATE(XLES_DOWNDRAFT_ThvRi (NLES_K,NLES_TIMES))    ! <Thv'Ri'>
+  ALLOCATE(XLES_DOWNDRAFT_ThlRi (NLES_K,NLES_TIMES))    ! <Thl'Ri'>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Ri    (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WRi   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_Ri2   (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThRi  (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThvRi (0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThlRi (0,0))
+END IF
+IF (LUSERS ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rs    (NLES_K,NLES_TIMES))    ! <Rs>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rs    (0,0))
+END IF
+IF (LUSERG ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rg    (NLES_K,NLES_TIMES))    ! <Rg>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rg    (0,0))
+END IF
+IF (LUSERH ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Rh    (NLES_K,NLES_TIMES))    ! <Rh>
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Rh    (0,0))
+END IF
+IF (NSV>0  ) THEN
+  ALLOCATE(XLES_DOWNDRAFT_Sv    (NLES_K,NLES_TIMES,NSV))! <Sv>
+  ALLOCATE(XLES_DOWNDRAFT_WSv   (NLES_K,NLES_TIMES,NSV))! <w'Sv'>
+  ALLOCATE(XLES_DOWNDRAFT_Sv2   (NLES_K,NLES_TIMES,NSV))! <Sv'2>
+  ALLOCATE(XLES_DOWNDRAFT_ThSv  (NLES_K,NLES_TIMES,NSV))! <Th'Sv'>
+  IF (LUSERV) THEN
+    ALLOCATE(XLES_DOWNDRAFT_ThvSv  (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'>
+  ELSE
+    ALLOCATE(XLES_DOWNDRAFT_ThvSv  (0,0,0))
+  END IF
+  IF (LUSERC) THEN
+    ALLOCATE(XLES_DOWNDRAFT_ThlSv  (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'>
+  ELSE
+    ALLOCATE(XLES_DOWNDRAFT_ThlSv  (0,0,0))
+  END IF
+ELSE
+  ALLOCATE(XLES_DOWNDRAFT_Sv    (0,0,0))
+  ALLOCATE(XLES_DOWNDRAFT_WSv   (0,0,0))
+  ALLOCATE(XLES_DOWNDRAFT_Sv2   (0,0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThSv  (0,0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThvSv (0,0,0))
+  ALLOCATE(XLES_DOWNDRAFT_ThlSv (0,0,0))
+END IF
+!
+!
+XLES_DOWNDRAFT     = XUNDEF
+XLES_DOWNDRAFT_W   = XUNDEF
+XLES_DOWNDRAFT_Th  = XUNDEF
+XLES_DOWNDRAFT_Thl = XUNDEF
+XLES_DOWNDRAFT_Tke  = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_Thv = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_Thl = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_Rv  = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_Rc  = XUNDEF
+IF (LUSERR ) XLES_DOWNDRAFT_Rr  = XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_Ri  = XUNDEF
+IF (LUSERS ) XLES_DOWNDRAFT_Rs  = XUNDEF
+IF (LUSERG ) XLES_DOWNDRAFT_Rg  = XUNDEF
+IF (LUSERH ) XLES_DOWNDRAFT_Rh  = XUNDEF
+IF (NSV>0  ) XLES_DOWNDRAFT_Sv  = XUNDEF
+XLES_DOWNDRAFT_Ke   = XUNDEF
+XLES_DOWNDRAFT_WTh  = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_WThv = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_WThl = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_WRv  = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_WRc  = XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_WRi  = XUNDEF
+IF (NSV>0  ) XLES_DOWNDRAFT_WSv  = XUNDEF
+XLES_DOWNDRAFT_Th2  = XUNDEF
+IF (LUSERV ) THEN
+  XLES_DOWNDRAFT_ThThv  = XUNDEF
+END IF
+IF (LUSERC ) THEN
+  XLES_DOWNDRAFT_Thl2   = XUNDEF
+  XLES_DOWNDRAFT_ThlThv = XUNDEF
+END IF
+IF (LUSERV ) XLES_DOWNDRAFT_Rv2  = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_Rc2  = XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_Ri2  = XUNDEF
+IF (NSV>0  ) XLES_DOWNDRAFT_Sv2  = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_ThRv = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_ThRc = XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_ThRi = XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_ThlRv= XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_ThlRc= XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_ThlRi= XUNDEF
+IF (NSV>0  ) XLES_DOWNDRAFT_ThSv = XUNDEF
+IF (LUSERV ) XLES_DOWNDRAFT_ThvRv= XUNDEF
+IF (LUSERC ) XLES_DOWNDRAFT_ThvRc= XUNDEF
+IF (LUSERI ) XLES_DOWNDRAFT_ThvRi= XUNDEF
+IF (NSV>0 .AND. LUSERV) XLES_DOWNDRAFT_ThvSv = XUNDEF
+IF (NSV>0 .AND. LUSERC) XLES_DOWNDRAFT_ThlSv = XUNDEF
+!
+!*      7.8  production terms
+!            ----------------
+!
+ALLOCATE(XLES_BU_RES_KE   (NLES_K,NLES_TIMES,NLES_TOT))
+ALLOCATE(XLES_BU_RES_WThl (NLES_K,NLES_TIMES,NLES_TOT))
+ALLOCATE(XLES_BU_RES_Thl2 (NLES_K,NLES_TIMES,NLES_TOT))
+ALLOCATE(XLES_BU_SBG_TKE  (NLES_K,NLES_TIMES,NLES_TOT))
+XLES_BU_RES_KE    = 0.
+XLES_BU_RES_WThl  = 0.
+XLES_BU_RES_Thl2  = 0.
+XLES_BU_SBG_TKE   = 0.
+IF (LUSERV) THEN
+  ALLOCATE(XLES_BU_RES_WRt  (NLES_K,NLES_TIMES,NLES_TOT))
+  ALLOCATE(XLES_BU_RES_Rt2  (NLES_K,NLES_TIMES,NLES_TOT))
+  ALLOCATE(XLES_BU_RES_ThlRt(NLES_K,NLES_TIMES,NLES_TOT))
+  XLES_BU_RES_WRt   = 0.
+  XLES_BU_RES_Rt2   = 0.
+  XLES_BU_RES_ThlRt = 0.
+END IF
+ALLOCATE(XLES_BU_RES_WSv (NLES_K,NLES_TIMES,NLES_TOT,NSV))
+ALLOCATE(XLES_BU_RES_Sv2 (NLES_K,NLES_TIMES,NLES_TOT,NSV))
+IF (NSV>0) THEN
+  XLES_BU_RES_WSv = 0.
+  XLES_BU_RES_Sv2 = 0.
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      8.   Allocations of the normalization variables temporal series
+!            ----------------------------------------------------------
+!
+ALLOCATE(XLES_UW0       (NLES_TIMES))
+ALLOCATE(XLES_VW0       (NLES_TIMES))
+ALLOCATE(XLES_USTAR     (NLES_TIMES))
+ALLOCATE(XLES_WSTAR     (NLES_TIMES))
+ALLOCATE(XLES_Q0        (NLES_TIMES))
+ALLOCATE(XLES_E0        (NLES_TIMES))
+ALLOCATE(XLES_SV0       (NLES_TIMES,NSV))
+ALLOCATE(XLES_BL_HEIGHT (NLES_TIMES))
+ALLOCATE(XLES_MO_LENGTH (NLES_TIMES))
+ALLOCATE(XLES_ZCB       (NLES_TIMES))
+ALLOCATE(XLES_CFtot     (NLES_TIMES))
+ALLOCATE(XLES_CF2tot    (NLES_TIMES))
+ALLOCATE(XLES_LWP       (NLES_TIMES))
+ALLOCATE(XLES_LWPVAR    (NLES_TIMES))
+ALLOCATE(XLES_RWP       (NLES_TIMES))
+ALLOCATE(XLES_IWP       (NLES_TIMES))
+ALLOCATE(XLES_SWP       (NLES_TIMES))
+ALLOCATE(XLES_GWP       (NLES_TIMES))
+ALLOCATE(XLES_HWP       (NLES_TIMES))
+ALLOCATE(XLES_INT_TKE   (NLES_TIMES))
+ALLOCATE(XLES_ZMAXCF    (NLES_TIMES))
+ALLOCATE(XLES_ZMAXCF2   (NLES_TIMES))  
+ALLOCATE(XLES_INPRR     (NLES_TIMES))
+ALLOCATE(XLES_INPRC     (NLES_TIMES))
+ALLOCATE(XLES_INDEP     (NLES_TIMES))
+ALLOCATE(XLES_RAIN_INPRR(NLES_TIMES))
+ALLOCATE(XLES_ACPRR     (NLES_TIMES))
+ALLOCATE(XLES_PRECFR    (NLES_TIMES))
+ALLOCATE(XLES_SWU       (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_SWD       (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_LWU       (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_LWD       (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_DTHRADSW  (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_DTHRADLW  (NLES_K,NLES_TIMES))
+ALLOCATE(XLES_RADEFF    (NLES_K,NLES_TIMES))
+!
+XLES_UW0       = XUNDEF
+XLES_VW0       = XUNDEF
+XLES_USTAR     = XUNDEF
+XLES_WSTAR     = XUNDEF
+XLES_Q0        = XUNDEF
+XLES_E0        = XUNDEF
+XLES_SV0       = XUNDEF
+XLES_BL_HEIGHT = XUNDEF
+XLES_MO_LENGTH = XUNDEF
+XLES_ZCB       = XUNDEF
+XLES_CFtot     = XUNDEF
+XLES_CF2tot    = XUNDEF  
+XLES_LWP       = XUNDEF
+XLES_LWPVAR    = XUNDEF
+XLES_RWP       = XUNDEF
+XLES_IWP       = XUNDEF
+XLES_SWP       = XUNDEF
+XLES_GWP       = XUNDEF
+XLES_HWP       = XUNDEF
+XLES_INT_TKE   = XUNDEF
+XLES_ZMAXCF    = XUNDEF
+XLES_ZMAXCF2   = XUNDEF  
+XLES_PRECFR    = XUNDEF
+XLES_ACPRR     = XUNDEF
+XLES_INPRR     = XUNDEF
+XLES_INPRC     = XUNDEF
+XLES_INDEP     = XUNDEF
+XLES_RAIN_INPRR = XUNDEF
+XLES_SWU        = XUNDEF
+XLES_SWD        = XUNDEF
+XLES_LWU        = XUNDEF
+XLES_LWD        = XUNDEF
+XLES_DTHRADSW   = XUNDEF
+XLES_DTHRADLW   = XUNDEF
+XLES_RADEFF     = XUNDEF
+!
+!-------------------------------------------------------------------------------
+!
+!*      9.   Allocations of the normalization variables temporal series
+!            ----------------------------------------------------------
+!
+!       9.1  Two-points correlations in I direction
+!            --------------------------------------
+!
+ALLOCATE(XCORRi_UU    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between u and u
+ALLOCATE(XCORRi_VV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between v and v
+ALLOCATE(XCORRi_UV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between u and v
+ALLOCATE(XCORRi_WU    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and u
+ALLOCATE(XCORRi_WV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and v
+ALLOCATE(XCORRi_WW    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and w
+ALLOCATE(XCORRi_WTh   (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and theta
+ALLOCATE(XCORRi_ThTh  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between theta and theta
+IF (LUSERC) THEN
+  ALLOCATE(XCORRi_WThl  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and thetal
+  ALLOCATE(XCORRi_ThlThl(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))   ! between thetal and thetal
+ELSE
+  ALLOCATE(XCORRi_WThl  (0,0,0))
+  ALLOCATE(XCORRi_ThlThl(0,0,0))
+END IF
+
+
+IF (LUSERV ) THEN
+  ALLOCATE(XCORRi_WRv  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Rv
+  ALLOCATE(XCORRi_ThRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rv
+  IF (LUSERC) THEN
+    ALLOCATE(XCORRi_ThlRv(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rv
+  ELSE
+    ALLOCATE(XCORRi_ThlRv(0,0,0))
+  END IF
+  ALLOCATE(XCORRi_RvRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rv and Rv
+ELSE
+  ALLOCATE(XCORRi_WRv  (0,0,0))
+  ALLOCATE(XCORRi_ThRv (0,0,0))
+  ALLOCATE(XCORRi_ThlRv(0,0,0))
+  ALLOCATE(XCORRi_RvRv (0,0,0))
+END IF
+
+IF (LUSERC ) THEN
+  ALLOCATE(XCORRi_WRc  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Rc
+  ALLOCATE(XCORRi_ThRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
+  ALLOCATE(XCORRi_ThlRc(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
+  ALLOCATE(XCORRi_RcRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
+ELSE
+  ALLOCATE(XCORRi_WRc  (0,0,0))
+  ALLOCATE(XCORRi_ThRc (0,0,0))
+  ALLOCATE(XCORRi_ThlRc(0,0,0))
+  ALLOCATE(XCORRi_RcRc (0,0,0))
+END IF
+
+IF (LUSERI ) THEN
+  ALLOCATE(XCORRi_WRi  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Ri
+  ALLOCATE(XCORRi_ThRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
+  ALLOCATE(XCORRi_ThlRi(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
+  ALLOCATE(XCORRi_RiRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
+ELSE
+  ALLOCATE(XCORRi_WRi  (0,0,0))
+  ALLOCATE(XCORRi_ThRi (0,0,0))
+  ALLOCATE(XCORRi_ThlRi(0,0,0))
+  ALLOCATE(XCORRi_RiRi (0,0,0))
+END IF
+
+IF (NSV>0  ) THEN
+  ALLOCATE(XCORRi_WSv  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv
+  ALLOCATE(XCORRi_SvSv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv
+ELSE
+  ALLOCATE(XCORRi_WSv  (0,0,0,0))
+  ALLOCATE(XCORRi_SvSv (0,0,0,0))
+END IF
+!
+!
+XCORRi_UU  = XUNDEF
+XCORRi_VV  = XUNDEF
+XCORRi_UV  = XUNDEF
+XCORRi_WU  = XUNDEF
+XCORRi_WV  = XUNDEF
+XCORRi_WW  = XUNDEF
+XCORRi_WTh = XUNDEF
+IF (LUSERC ) XCORRi_WThl= XUNDEF
+IF (LUSERV ) XCORRi_WRv = XUNDEF
+IF (LUSERC ) XCORRi_WRc = XUNDEF
+IF (LUSERI ) XCORRi_WRi = XUNDEF
+IF (NSV>0  ) XCORRi_WSv = XUNDEF
+XCORRi_ThTh  = XUNDEF
+IF (LUSERC ) XCORRi_ThlThl= XUNDEF
+IF (LUSERV ) XCORRi_ThRv = XUNDEF
+IF (LUSERC ) XCORRi_ThRc = XUNDEF
+IF (LUSERI ) XCORRi_ThRi = XUNDEF
+IF (LUSERC ) XCORRi_ThlRv= XUNDEF
+IF (LUSERC ) XCORRi_ThlRc= XUNDEF
+IF (LUSERI ) XCORRi_ThlRi= XUNDEF
+IF (LUSERV ) XCORRi_RvRv = XUNDEF
+IF (LUSERC ) XCORRi_RcRc = XUNDEF
+IF (LUSERI ) XCORRi_RiRi = XUNDEF
+IF (NSV>0  ) XCORRi_SvSv = XUNDEF
+!
+!
+!       9.2  Two-points correlations in J direction
+!            --------------------------------------
+!
+ALLOCATE(XCORRj_UU    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between u and u
+ALLOCATE(XCORRj_VV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between v and v
+ALLOCATE(XCORRj_UV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between u and v
+ALLOCATE(XCORRj_WU    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and u
+ALLOCATE(XCORRj_WV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and v
+ALLOCATE(XCORRj_WW    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and w
+ALLOCATE(XCORRj_WTh   (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and theta
+ALLOCATE(XCORRj_ThTh  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between theta and theta
+IF (LUSERC) THEN
+  ALLOCATE(XCORRj_WThl  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and thetal
+  ALLOCATE(XCORRj_ThlThl(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))   ! between thetal and thetal
+ELSE
+  ALLOCATE(XCORRj_WThl  (0,0,0))
+  ALLOCATE(XCORRj_ThlThl(0,0,0))
+END IF
+
+IF (LUSERV ) THEN
+  ALLOCATE(XCORRj_WRv  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Rv
+  ALLOCATE(XCORRj_ThRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rv
+  IF (LUSERC) THEN
+    ALLOCATE(XCORRj_ThlRv(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rv
+  ELSE
+    ALLOCATE(XCORRj_ThlRv(0,0,0))
+  END IF
+  ALLOCATE(XCORRj_RvRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rv and Rv
+ELSE
+  ALLOCATE(XCORRj_WRv  (0,0,0))
+  ALLOCATE(XCORRj_ThRv (0,0,0))
+  ALLOCATE(XCORRj_ThlRv(0,0,0))
+  ALLOCATE(XCORRj_RvRv (0,0,0))
+END IF
+
+IF (LUSERC ) THEN
+  ALLOCATE(XCORRj_WRc  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Rc
+  ALLOCATE(XCORRj_ThRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
+  ALLOCATE(XCORRj_ThlRc(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
+  ALLOCATE(XCORRj_RcRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
+ELSE
+  ALLOCATE(XCORRj_WRc  (0,0,0))
+  ALLOCATE(XCORRj_ThRc (0,0,0))
+  ALLOCATE(XCORRj_ThlRc(0,0,0))
+  ALLOCATE(XCORRj_RcRc (0,0,0))
+END IF
+
+IF (LUSERI ) THEN
+  ALLOCATE(XCORRj_WRi  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Ri
+  ALLOCATE(XCORRj_ThRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
+  ALLOCATE(XCORRj_ThlRi(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
+  ALLOCATE(XCORRj_RiRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
+ELSE
+  ALLOCATE(XCORRj_WRi  (0,0,0))
+  ALLOCATE(XCORRj_ThRi (0,0,0))
+  ALLOCATE(XCORRj_ThlRi(0,0,0))
+  ALLOCATE(XCORRj_RiRi (0,0,0))
+END IF
+
+IF (NSV>0  ) THEN
+  ALLOCATE(XCORRj_WSv  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv
+  ALLOCATE(XCORRj_SvSv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv
+ELSE
+  ALLOCATE(XCORRj_WSv  (0,0,0,0))
+  ALLOCATE(XCORRj_SvSv (0,0,0,0))
+END IF
+!
+!
+XCORRj_UU  = XUNDEF
+XCORRj_VV  = XUNDEF
+XCORRj_UV  = XUNDEF
+XCORRj_WU  = XUNDEF
+XCORRj_WV  = XUNDEF
+XCORRj_WW  = XUNDEF
+XCORRj_WTh = XUNDEF
+IF (LUSERC ) XCORRj_WThl= XUNDEF
+IF (LUSERV ) XCORRj_WRv = XUNDEF
+IF (LUSERC ) XCORRj_WRc = XUNDEF
+IF (LUSERI ) XCORRj_WRi = XUNDEF
+IF (NSV>0  ) XCORRj_WSv = XUNDEF
+XCORRj_ThTh  = XUNDEF
+IF (LUSERC ) XCORRj_ThlThl= XUNDEF
+IF (LUSERV ) XCORRj_ThRv = XUNDEF
+IF (LUSERC ) XCORRj_ThRc = XUNDEF
+IF (LUSERI ) XCORRj_ThRi = XUNDEF
+IF (LUSERC ) XCORRj_ThlRv= XUNDEF
+IF (LUSERC ) XCORRj_ThlRc= XUNDEF
+IF (LUSERI ) XCORRj_ThlRi= XUNDEF
+IF (LUSERV ) XCORRj_RvRv = XUNDEF
+IF (LUSERC ) XCORRj_RcRc = XUNDEF
+IF (LUSERI ) XCORRj_RiRi = XUNDEF
+IF (NSV>0  ) XCORRj_SvSv = XUNDEF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE INI_LES_n
diff --git a/src/mesonh/ext/ini_segn.f90 b/src/mesonh/ext/ini_segn.f90
index 73a688ce0d4950903855cae513f2d5443be8b943..c581f7c0140586a06e2e0309fff7d0e1ceedd4ca 100644
--- a/src/mesonh/ext/ini_segn.f90
+++ b/src/mesonh/ext/ini_segn.f90
@@ -175,6 +175,7 @@ USE MODN_CONFZ
 USE MODD_DYN_n,            ONLY : LOCEAN
 USE MODD_DYN
 USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA
+USE MODD_LES,              ONLY: LES_ASSOCIATE
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL
 USE MODD_PARAM_n,          ONLY: CSURF
@@ -316,6 +317,7 @@ ILUSEG = TZFILE_DES%NLU
 !             ------------------
 !
 CALL PARAM_ICE_ASSOCIATE()
+CALL LES_ASSOCIATE()
 CALL DEFAULT_DESFM_n(KMI)
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/ext/les_cloud_masksn.f90 b/src/mesonh/ext/les_cloud_masksn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..10e9e4093fc35cf7e5d3ba3c0ebcce0047611694
--- /dev/null
+++ b/src/mesonh/ext/les_cloud_masksn.f90
@@ -0,0 +1,419 @@
+!MNH_LIC Copyright 2006-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     #######################
+      SUBROUTINE  LES_CLOUD_MASKS_n
+!     #######################
+!
+!
+!!****  *LES_MASKS_n* initializes the masks for clouds
+!!                         
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         07/2006
+!!      P. Aumond        10/2009 Add possibility of user maskS
+!!       F.Couvreux      06/2011 : Conditional sampling
+!!       C.Lac           10/2014 : Correction on user masks   
+!!       Q.Rodier        05/2019 : Missing parallelization 
+!!
+!! --------------------------------------------------------------------------
+!       
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_LES
+USE MODD_LES_n
+USE MODD_FIELD_n
+USE MODD_CONF_n
+USE MODD_CST    , ONLY : XRD, XRV
+USE MODD_NSV    , ONLY : NSV_CSBEG, NSV_CSEND, NSV_CS
+USE MODD_GRID_n , ONLY : XZHAT
+USE MODD_CONDSAMP
+!
+USE MODE_ll
+!
+USE MODI_LES_VER_INT
+USE MODI_LES_MEAN_ll
+USE MODI_SHUMAN
+!
+IMPLICIT NONE
+!
+!
+!       0.2  declaration of local variables
+!
+INTEGER :: JK                                  ! vertical loop counter
+INTEGER :: JI                                  ! loop index on masks  
+INTEGER :: IIU, IJU,IIB,IJB,IIE,IJE            ! hor. indices
+INTEGER :: IKU, KBASE, KTOP                    ! ver. index
+INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG   ! moist variables indices
+INTEGER :: JSV                                  ! ind of scalars
+!
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT  ! total water
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV ! Virtual potential temperature
+!
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZW_LES    ! W     on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRC_LES   ! Rc    on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRI_LES   ! Ri    on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT_LES   ! Rt    on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_LES  ! thv   on LES vertical grid
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_LES  ! thv   on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_ANOM ! thv-thv_mean   on LES vertical grid
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_ANOM ! sv-sv_mean
+REAL, DIMENSION(:,:),     ALLOCATABLE :: ZSTD_SV
+REAL, DIMENSION(:,:),     ALLOCATABLE :: ZSTD_SVTRES ! threshold of sv
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZWORK3D,ZWORK3DB
+REAL, DIMENSION(:),       ALLOCATABLE :: ZWORK1D
+REAL, DIMENSION(:),       ALLOCATABLE :: ZMEANRC
+!
+!
+!-------------------------------------------------------------------------------
+!
+CALL GET_DIM_EXT_ll('B',IIU,IJU)
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+IKU = SIZE(XTHT,3)
+!
+!-------------------------------------------------------------------------------
+!
+!*      1.0  Thermodynamical computations
+!            ----------------------------
+!
+ALLOCATE(ZRT      (IIU,IJU,IKU))
+ALLOCATE(ZMEANRC (IKU))
+ZRT = 0.
+!
+IRR=0
+IF (LUSERV) THEN
+  IRR=IRR+1
+  ZRT = ZRT + XRT(:,:,:,1)
+END IF
+IF (LUSERC) THEN
+  IRR=IRR+1
+  IRRC=IRR
+  ZRT = ZRT + XRT(:,:,:,IRRC)
+END IF
+IF (LUSERR) THEN
+  IRR=IRR+1
+  IRRR=IRR
+  ZRT = ZRT + XRT(:,:,:,IRRR)
+END IF
+IF (LUSERI) THEN
+  IRR=IRR+1
+  IRRI=IRR
+  ZRT = ZRT + XRT(:,:,:,IRRI)
+END IF
+IF (LUSERS) THEN
+  IRR=IRR+1
+  IRRS=IRR
+  ZRT = ZRT + XRT(:,:,:,IRRS)
+END IF
+IF (LUSERG) THEN
+  IRR=IRR+1
+  IRRG=IRR
+  ZRT = ZRT + XRT(:,:,:,IRRG)
+END IF
+!
+!
+!* computes fields on the LES grid in order to compute masks
+!
+ALLOCATE(ZTHV     (IIU,IJU,IKU))
+ZTHV = XTHT
+IF (LUSERV) ZTHV=ZTHV*(1.+XRV/XRD*XRT(:,:,:,1))/(1.+ZRT(:,:,:))
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.0  Fields on LES grid
+!            ------------------
+!
+!* allocates fields on the LES grid
+!
+!
+ALLOCATE(ZW_LES   (IIU,IJU,NLES_K))
+ALLOCATE(ZRC_LES  (IIU,IJU,NLES_K))
+ALLOCATE(ZRI_LES  (IIU,IJU,NLES_K))
+ALLOCATE(ZRT_LES  (IIU,IJU,NLES_K))
+ALLOCATE(ZTHV_LES (IIU,IJU,NLES_K))
+ALLOCATE(ZTHV_ANOM(IIU,IJU,NLES_K))
+ALLOCATE(ZSV_LES (IIU,IJU,NLES_K,NSV_CS))
+ALLOCATE(ZSV_ANOM(IIU,IJU,NLES_K,NSV_CS))
+ALLOCATE(ZSTD_SV(NLES_K,NSV_CS))
+ALLOCATE(ZSTD_SVTRES(NLES_K,NSV_CS))
+ALLOCATE(ZWORK1D(NLES_K))
+ALLOCATE(ZWORK3D(IIU,IJU,IKU))
+ALLOCATE(ZWORK3DB(IIU,IJU,NLES_K))
+!
+ZWORK1D=0.
+ZWORK3D=0.  
+ZWORK3DB=0.
+!
+CALL LES_VER_INT(MZF(XWT), ZW_LES)
+IF (NSV_CS>0) THEN
+  DO JSV=NSV_CSBEG, NSV_CSEND
+    CALL LES_VER_INT(  XSVT(:,:,:,JSV),  &
+                       ZSV_LES(:,:,:,JSV-NSV_CSBEG+1) )
+  END DO
+END IF
+IF (LUSERC) THEN
+  CALL LES_VER_INT(XRT(:,:,:,IRRC), ZRC_LES)
+ELSE
+  ZRC_LES = 0.
+END IF
+IF (LUSERI) THEN
+  CALL LES_VER_INT(XRT(:,:,:,IRRI), ZRI_LES)
+ELSE
+  ZRI_LES = 0.
+END IF
+CALL LES_VER_INT(ZRT, ZRT_LES)
+CALL LES_VER_INT(ZTHV, ZTHV_LES)
+CALL LES_ANOMALY_FIELD(ZTHV,ZTHV_ANOM)
+!
+IF (NSV_CS>0) THEN
+ DO JSV=NSV_CSBEG, NSV_CSEND
+  ZWORK3D(:,:,:)=XSVT(:,:,:,JSV)
+  CALL LES_ANOMALY_FIELD(ZWORK3D,ZWORK3DB)
+  ZSV_ANOM(:,:,:,JSV-NSV_CSBEG+1)=ZWORK3DB(:,:,:)
+  CALL LES_STDEV(ZWORK3DB,ZWORK1D)
+  ZSTD_SV(:,JSV-NSV_CSBEG+1)=ZWORK1D(:)
+  DO JK=1,NLES_K
+       ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)=SUM(ZSTD_SV(1:JK,JSV-NSV_CSBEG+1))/(1.*JK)
+  END DO
+ END DO
+END IF
+!
+DEALLOCATE(ZTHV     )
+DEALLOCATE(ZWORK3D)
+DEALLOCATE(ZWORK3DB)
+DEALLOCATE(ZWORK1D)
+!
+!-------------------------------------------------------------------------------
+!
+!*      3.0  Cloud mask
+!            ----------
+!
+IF (LLES_NEB_MASK) THEN
+  CALL LES_ALLOCATE('LLES_CURRENT_NEB_MASK',(/IIU,IJU,NLES_K/))
+  LLES_CURRENT_NEB_MASK (:,:,:) = .FALSE.
+  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0.)
+    LLES_CURRENT_NEB_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
+  END WHERE
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      4.0  Cloud core mask
+!            ---------------
+!
+IF (LLES_CORE_MASK) THEN
+  CALL LES_ALLOCATE('LLES_CURRENT_CORE_MASK',(/IIU,IJU,NLES_K/))
+  LLES_CURRENT_CORE_MASK (:,:,:) = .FALSE.
+  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) &
+         .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0. .AND. ZTHV_ANOM(IIB:IIE,IJB:IJE,:)>0.)  
+    LLES_CURRENT_CORE_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
+  END WHERE
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      4.0  Conditional sampling mask
+!            -------------------------
+!
+IF (LLES_CS_MASK) THEN
+!
+  CALL LES_MEAN_ll(ZRC_LES, LLES_CURRENT_CART_MASK, ZMEANRC  )
+  CALL LES_ALLOCATE('LLES_CURRENT_CS1_MASK',(/IIU,IJU,NLES_K/))
+  LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE.
+  IF (NSV_CS >= 2) THEN
+    CALL LES_ALLOCATE('LLES_CURRENT_CS2_MASK',(/IIU,IJU,NLES_K/))
+    LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE.
+    IF (NSV_CS == 3) THEN
+      CALL LES_ALLOCATE('LLES_CURRENT_CS3_MASK',(/IIU,IJU,NLES_K/))
+      LLES_CURRENT_CS3_MASK (:,:,:) = .FALSE.
+    END IF
+  END IF
+
+!
+! Cloud top and base computation                   
+!
+  KBASE=2
+  KTOP=NLES_K
+  DO JK=2,NLES_K
+   IF ((ZMEANRC(JK) > 1.E-7) .AND. (KBASE == 2)) KBASE=JK
+   IF ((ZMEANRC(JK) < 1.E-7) .AND. (KBASE > 2) .AND. (KTOP == NLES_K)) &
+              KTOP=JK-1
+  END DO
+!
+ DO JSV=NSV_CSBEG, NSV_CSEND
+  DO JK=2,NLES_K
+    IF (ZSTD_SV(JK,JSV-NSV_CSBEG+1) < 0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)) &
+       ZSTD_SV(JK,JSV-NSV_CSBEG+1)=0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)
+! case no cloud top and base                    
+    IF (JSV == NSV_CSBEG) THEN
+     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
+             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE       
+     END IF
+!
+! case cloud top and base defined                    
+!
+     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE
+     END IF     
+!
+     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1) .AND. &
+          ZRC_LES(IIB:IIE,IJB:IJE,JK)>1.E-6)
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE  
+     END IF
+    ELSE IF ( JSV == NSV_CSBEG + 1 ) THEN
+     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
+      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE       
+     END IF
+!
+! case cloud top and base defined                    
+!
+     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
+             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE
+     END IF     
+!
+     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE  
+     END IF
+!
+    ELSE 
+     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
+      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE       
+     END IF
+!
+! case cloud top and base defined                    
+!
+     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE
+     END IF     
+!
+     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
+             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
+      END WHERE  
+     END IF
+    END IF
+  END DO
+ END DO
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      5.0  User mask
+!            ---------
+!
+IF (LLES_MY_MASK) THEN
+  CALL LES_ALLOCATE('LLES_CURRENT_MY_MASKS',(/IIU,IJU,NLES_K,NLES_MASKS_USER/))
+  DO JI=1,NLES_MASKS_USER
+    LLES_CURRENT_MY_MASKS (IIB:IIE,IJB:IJE,:,JI) = .FALSE.
+  END DO
+! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) 
+!    LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE.
+! END WHERE
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+DEALLOCATE(ZW_LES   )
+DEALLOCATE(ZRC_LES  )
+DEALLOCATE(ZRI_LES  )
+DEALLOCATE(ZRT_LES  )
+DEALLOCATE(ZTHV_LES )
+DEALLOCATE(ZSV_LES  )
+DEALLOCATE(ZTHV_ANOM)
+DEALLOCATE(ZSV_ANOM)
+DEALLOCATE(ZSTD_SV)
+DEALLOCATE(ZSTD_SVTRES)
+!-------------------------------------------------------------------------------
+DEALLOCATE(ZRT )
+DEALLOCATE(ZMEANRC)
+!--------------------------------------------------------------------------------
+!
+CONTAINS
+!
+!--------------------------------------------------------------------------------
+!
+SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM
+
+REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN
+INTEGER :: JI, JJ
+
+CALL LES_VER_INT(PF, PF_ANOM)
+CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN  )
+DO JJ=1,SIZE(PF_ANOM,2)
+  DO JI=1,SIZE(PF_ANOM,1)
+    PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:)
+  END DO
+END DO
+
+END SUBROUTINE LES_ANOMALY_FIELD
+!--------------------------------------------------------------------------------
+!
+!--------------------------------------------------------------------------------
+!
+SUBROUTINE LES_STDEV(PF_ANOM,PF_STD)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF_ANOM
+REAL, DIMENSION(:), INTENT(OUT) :: PF_STD
+
+REAL, DIMENSION(SIZE(PF_ANOM,1),SIZE(PF_ANOM,2),SIZE(PF_ANOM,3)) :: Z2
+INTEGER :: JK
+
+Z2(:,:,:)=PF_ANOM(:,:,:)*PF_ANOM(:,:,:)
+CALL LES_MEAN_ll(Z2, LLES_CURRENT_CART_MASK, PF_STD  )
+DO JK=1,SIZE(PF_ANOM,3)
+     PF_STD(JK)=SQRT(PF_STD(JK))
+END DO
+
+END SUBROUTINE LES_STDEV
+!-------------------------------------------------------------------------------  
+!
+END SUBROUTINE LES_CLOUD_MASKS_n   
diff --git a/src/mesonh/ext/les_ini_timestepn.f90 b/src/mesonh/ext/les_ini_timestepn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..98c5cd306456bf19b2839c9ee608448392c07078
--- /dev/null
+++ b/src/mesonh/ext/les_ini_timestepn.f90
@@ -0,0 +1,407 @@
+!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!      #######################
+MODULE MODI_LES_INI_TIMESTEP_n
+!      #######################
+!
+!
+INTERFACE LES_INI_TIMESTEP_n
+!
+      SUBROUTINE LES_INI_TIMESTEP_n(KTCOUNT)
+!
+INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step
+!
+END SUBROUTINE LES_INI_TIMESTEP_n
+!
+END INTERFACE
+!
+END MODULE MODI_LES_INI_TIMESTEP_n
+
+!     ##############################
+      SUBROUTINE  LES_INI_TIMESTEP_n(KTCOUNT)
+!     ##############################
+!
+!
+!!****  *LES_INI_TIMESTEP_n* initializes the LES variables for
+!!                    the current time-step of model _n
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         06/11/02
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain
+! --------------------------------------------------------------------------
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_CST
+USE MODD_NSV
+USE MODD_LES
+USE MODD_LES_n
+USE MODD_FIELD_n
+USE MODD_METRICS_n
+USE MODD_REF_n
+USE MODD_CONF_n
+USE MODD_TIME_n
+USE MODD_DYN_n
+USE MODD_TIME
+USE MODD_CONF
+USE MODD_LES_BUDGET
+!
+use mode_datetime,       only: Datetime_distance
+USE MODE_ll
+USE MODE_MODELN_HANDLER
+!
+USE MODI_LES_VER_INT
+USE MODI_THL_RT_FROM_TH_R
+USE MODI_LES_MEAN_ll
+USE MODI_SHUMAN
+!
+USE MODI_SECOND_MNH
+USE MODI_LES_CLOUD_MASKS_N
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+!
+INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step
+!
+!
+!       0.2  declaration of local variables
+!
+INTEGER :: IXOR_ll, IYOR_ll                    ! origine point coordinates
+!                                              ! of current processor domain
+!                                              ! on model domain on all
+!                                              ! processors
+INTEGER :: IIB_ll, IJB_ll                      ! SO point coordinates of
+!                                              ! current processor phys. domain
+!                                              ! on model domain on all
+!                                              ! processors
+INTEGER :: IIE_ll, IJE_ll                      ! NE point coordinates of
+!                                              ! current processor phys. domain
+!                                              ! on model domain on all
+!                                              ! processors
+INTEGER :: IIINF_MASK, IISUP_MASK              ! cart. mask local proc. limits
+INTEGER :: IJINF_MASK, IJSUP_MASK              ! cart. mask local proc. limits
+!
+INTEGER :: JK                                  ! vertical loop counter
+INTEGER :: IIB, IJB, IIE, IJE                  ! hor. indices
+INTEGER :: IIU, IJU                            ! hor. indices
+INTEGER :: IKU                                 ! ver. index
+INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG   ! moist variables indices
+!
+INTEGER :: JSV                                 ! scalar variables counter
+!
+REAL    :: ZTIME1, ZTIME2                      ! CPU time counters
+!
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHL ! theta_l
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT  ! total water
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZL   ! Latent heat of vaporization
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZCP  ! Cp
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEXN ! Exner function
+INTEGER                               :: IMI  ! current model index
+!-------------------------------------------------------------------------------
+!
+!*      1.   Does current time-step is a LES time-step?
+!            -----------------------------------------
+!
+LLES_CALL= .FALSE.
+!
+CALL SECOND_MNH(ZTIME1)
+!
+IF (NLES_TCOUNT==NLES_TIMES) LLES_CALL=.FALSE.
+!
+IF ( KTCOUNT>1 .AND. MOD (KTCOUNT-1,NLES_DTCOUNT)==0) LLES_CALL=.TRUE.
+!
+IF (.NOT. LLES_CALL) RETURN
+!
+CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR,         &
+                  LUSERI, LUSERS, LUSERG, LUSERH  )
+!
+NLES_TCOUNT = NLES_TCOUNT + 1
+!
+NLES_CURRENT_TCOUNT = NLES_TCOUNT
+!
+tles_dates(nles_tcount) = tdtcur
+call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount) )
+!
+!* forward-in-time time-step
+!
+XCURRENT_TSTEP = XTSTEP
+!
+!-------------------------------------------------------------------------------
+!
+CALL GET_OR_ll     ('B',IXOR_ll,IYOR_ll)
+CALL GET_DIM_EXT_ll('B',IIU,IJU)
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+IIB_ll=IXOR_ll+IIB-1
+IJB_ll=IYOR_ll+IJB-1
+IIE_ll=IXOR_ll+IIE-1
+IJE_ll=IYOR_ll+IJE-1
+!
+IKU = SIZE(XTHT,3)
+!
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+!-------------------------------------------------------------------------------
+!
+!*      2.   Definition of masks
+!            -------------------
+!
+!*      2.1  Cartesian (sub-)domain (on local processor)
+!            ----------------------
+!
+CALL LES_ALLOCATE('LLES_CURRENT_CART_MASK',(/IIU,IJU,NLES_K/))
+!
+IIINF_MASK = MAX(IIB, NLESn_IINF(IMI)+JPHEXT-(IIB_ll-1-JPHEXT))
+IJINF_MASK = MAX(IJB, NLESn_JINF(IMI)+JPHEXT-(IJB_ll-1-JPHEXT))
+IISUP_MASK = MIN(IIE, NLESn_ISUP(IMI)+JPHEXT-(IIB_ll-1-JPHEXT))
+IJSUP_MASK = MIN(IJE, NLESn_JSUP(IMI)+JPHEXT-(IJB_ll-1-JPHEXT))
+!
+!
+LLES_CURRENT_CART_MASK(:,:,:) = .FALSE.
+LLES_CURRENT_CART_MASK(IIINF_MASK:IISUP_MASK,IJINF_MASK:IJSUP_MASK,:) = .TRUE.
+!
+CLES_CURRENT_LBCX(:) = CLES_LBCX(:,IMI)
+CLES_CURRENT_LBCY(:) = CLES_LBCY(:,IMI)
+!
+!-------------------------------------------------------------------------------
+!
+!*      3.   Definition of LES vertical grid for this model
+!            ----------------------------------------------
+!
+IF (CLES_LEVEL_TYPE=='Z') THEN
+  IF (ASSOCIATED(XCOEFLIN_CURRENT_LES)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_LES')
+  IF (ASSOCIATED(NKLIN_CURRENT_LES   )) CALL LES_DEALLOCATE('NKLIN_CURRENT_LES')
+  !
+  CALL LES_ALLOCATE('XCOEFLIN_CURRENT_LES',(/IIU,IJU,NLES_K/))
+  CALL LES_ALLOCATE('NKLIN_CURRENT_LES',(/IIU,IJU,NLES_K/))
+  !
+  XCOEFLIN_CURRENT_LES(:,:,:) = XCOEFLIN_LES(:,:,:)
+  NKLIN_CURRENT_LES   (:,:,:) = NKLIN_LES   (:,:,:)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      4.   Definition of variables used in budgets for current model
+!            ---------------------------------------------------------
+!
+IF (LUSERC) THEN
+  ALLOCATE(XCURRENT_L_O_EXN_CP (IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XCURRENT_L_O_EXN_CP (0,0,0))
+END IF
+ALLOCATE(XCURRENT_RHODJ      (IIU,IJU,IKU))
+!
+!* coefficients for Th to Thl conversion
+!
+IF (LUSERC) THEN
+  ALLOCATE(ZL  (IIU,IJU,IKU))
+  ALLOCATE(ZEXN(IIU,IJU,IKU))
+  ALLOCATE(ZCP (IIU,IJU,IKU))
+  !
+  !* Exner function
+  !
+  ZEXN(:,:,:) = (XPABST/XP00)**(XRD/XCPD)
+  !
+  !* Latent heat of vaporization
+  !
+  ZL(:,:,:) = XLVTT + (XCPD-XCL) * (XTHT(:,:,:)*ZEXN(:,:,:)-XTT)
+  !
+  !* heat capacity at constant pressure of the humid air
+  !
+  ZCP(:,:,:) = XCPD
+  IRR=2
+  ZCP(:,:,:) = ZCP(:,:,:) + XCPV * XRT(:,:,:,1)
+  ZCP(:,:,:) = ZCP(:,:,:) + XCL  * XRT(:,:,:,2)
+  IF (LUSERR) THEN
+    IRR=IRR+1
+    ZCP(:,:,:) = ZCP(:,:,:) + XCL  * XRT(:,:,:,IRR)
+  END IF
+  IF (LUSERI) THEN
+    IRR=IRR+1
+    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
+  END IF
+  IF (LUSERS) THEN
+    IRR=IRR+1
+    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
+  END IF
+  IF (LUSERG) THEN
+    IRR=IRR+1
+    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
+  END IF
+  IF (LUSERH) THEN
+    IRR=IRR+1
+    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
+  END IF
+  !
+  !* L / (Exn * Cp)
+  !
+  XCURRENT_L_O_EXN_CP(:,:,:) = ZL(:,:,:) / ZEXN(:,:,:) / ZCP(:,:,:)
+  !
+  DEALLOCATE(ZL  )
+  DEALLOCATE(ZEXN)
+  DEALLOCATE(ZCP )
+END IF
+!
+!* other initializations
+!
+XCURRENT_RHODJ=XRHODJ
+!
+LCURRENT_USERV=LUSERV
+LCURRENT_USERC=LUSERC
+LCURRENT_USERR=LUSERR
+LCURRENT_USERI=LUSERI
+LCURRENT_USERS=LUSERS
+LCURRENT_USERG=LUSERG
+LCURRENT_USERH=LUSERH
+!
+NCURRENT_RR = NRR
+!
+ALLOCATE(XCURRENT_RUS  (IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RVS  (IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RWS  (IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RTHS (IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RTKES(IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RRS  (IIU,IJU,IKU,NRR))
+ALLOCATE(XCURRENT_RSVS (IIU,IJU,IKU,NSV))
+ALLOCATE(XCURRENT_RTHLS(IIU,IJU,IKU))
+ALLOCATE(XCURRENT_RRTS (IIU,IJU,IKU))
+!
+XCURRENT_RUS  =XRUS
+XCURRENT_RVS  =XRVS
+XCURRENT_RWS  =XRWS
+XCURRENT_RTHS =XRTHS
+XCURRENT_RTKES=XRTKES
+XCURRENT_RRS  =XRRS
+XCURRENT_RSVS =XRSVS
+CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR,             &
+                      LUSERI, LUSERS, LUSERG, LUSERH,     &
+                      XCURRENT_L_O_EXN_CP,                &
+                      XCURRENT_RTHS, XCURRENT_RRS,        &
+                      XCURRENT_RTHLS, XCURRENT_RRTS       )
+
+ALLOCATE(X_LES_BU_RES_KE   (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_WThl (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_Thl2 (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_SBG_Tke  (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_WRt  (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_Rt2  (NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_ThlRt(NLES_K,NLES_TOT))
+ALLOCATE(X_LES_BU_RES_Sv2  (NLES_K,NLES_TOT,NSV))
+ALLOCATE(X_LES_BU_RES_WSv  (NLES_K,NLES_TOT,NSV))
+
+X_LES_BU_RES_KE   = 0.
+X_LES_BU_RES_WThl = 0.
+X_LES_BU_RES_Thl2 = 0.
+X_LES_BU_SBG_Tke  = 0.
+X_LES_BU_RES_WRt  = 0.
+X_LES_BU_RES_Rt2  = 0.
+X_LES_BU_RES_ThlRt= 0.
+X_LES_BU_RES_Sv2  = 0.
+X_LES_BU_RES_WSv  = 0.
+!
+!-------------------------------------------------------------------------------
+!
+!*      4.   Definition of anomaly fields
+!            ----------------------------
+!
+ALLOCATE (XU_ANOM  (IIU,IJU,NLES_K))
+ALLOCATE (XV_ANOM  (IIU,IJU,NLES_K))
+ALLOCATE (XW_ANOM  (IIU,IJU,NLES_K))
+ALLOCATE (XTHL_ANOM(IIU,IJU,NLES_K))
+IF (LUSERV) THEN
+  ALLOCATE (XRT_ANOM (IIU,IJU,NLES_K))
+ELSE
+  ALLOCATE (XRT_ANOM (0,0,0))
+END IF
+ALLOCATE (XSV_ANOM (IIU,IJU,NLES_K,NSV))
+!
+!*      4.1  conservative variables
+!            ----------------------
+!
+ALLOCATE(ZTHL(IIU,IJU,IKU))
+ALLOCATE(ZRT (IIU,IJU,IKU))
+CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR,             &
+                      LUSERI, LUSERS, LUSERG, LUSERH,     &
+                      XCURRENT_L_O_EXN_CP,                &
+                      XTHT, XRT,                          &
+                      ZTHL, ZRT                           )
+!
+!*      4.2  anomaly fields on the LES grid
+!            ------------------------------
+!
+CALL LES_ANOMALY_FIELD(MXF(XUT),XU_ANOM)
+CALL LES_ANOMALY_FIELD(MYF(XVT),XV_ANOM)
+CALL LES_ANOMALY_FIELD(MZF(XWT),XW_ANOM)
+CALL LES_ANOMALY_FIELD(ZTHL,XTHL_ANOM)
+IF (LUSERV) CALL LES_ANOMALY_FIELD(ZRT,XRT_ANOM)
+DO JSV=1,NSV
+  CALL LES_ANOMALY_FIELD(XSVT(:,:,:,JSV),XSV_ANOM(:,:,:,JSV))
+END DO
+!
+!-------------------------------------------------------------------------------
+!
+DEALLOCATE(ZTHL)
+DEALLOCATE(ZRT )
+!-------------------------------------------------------------------------------
+!
+!*      6.0  Nebulosity masks
+!            ----------------
+!
+CALL LES_CLOUD_MASKS_n
+!
+!-------------------------------------------------------------------------------
+CALL SECOND_MNH(ZTIME2)
+XTIME_LES_BU = XTIME_LES_BU + ZTIME2 - ZTIME1
+!--------------------------------------------------------------------------------
+!
+CONTAINS
+!
+!--------------------------------------------------------------------------------
+!
+SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM
+
+REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN
+INTEGER :: JI, JJ
+
+CALL LES_VER_INT(PF, PF_ANOM)
+CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN  )
+DO JJ=1,SIZE(PF_ANOM,2)
+  DO JI=1,SIZE(PF_ANOM,1)
+    PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:)
+  END DO
+END DO
+
+END SUBROUTINE LES_ANOMALY_FIELD
+!--------------------------------------------------------------------------------
+!
+END SUBROUTINE LES_INI_TIMESTEP_n   
+
diff --git a/src/mesonh/ext/lesn.f90 b/src/mesonh/ext/lesn.f90
index 7983b1217436ded08e54ac96f760572f8cd20495..f66f89eae81a2f226ff87fd494f3982cc065fc61 100644
--- a/src/mesonh/ext/lesn.f90
+++ b/src/mesonh/ext/lesn.f90
@@ -240,11 +240,11 @@ ILUOUT = TLUOUT%NLU
 !* interpolation coefficients for Z type grid
 !
 IF (CSPECTRA_LEVEL_TYPE=='Z') THEN
-  IF (ALLOCATED(XCOEFLIN_CURRENT_SPEC)) DEALLOCATE(XCOEFLIN_CURRENT_SPEC)
-  IF (ALLOCATED(NKLIN_CURRENT_SPEC   )) DEALLOCATE(NKLIN_CURRENT_SPEC   )
+  IF (ASSOCIATED(XCOEFLIN_CURRENT_SPEC)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_SPEC')
+  IF (ASSOCIATED(NKLIN_CURRENT_SPEC   )) CALL LES_DEALLOCATE('NKLIN_CURRENT_SPEC')
   !
-  ALLOCATE(XCOEFLIN_CURRENT_SPEC(IIU,IJU,NSPECTRA_K))
-  ALLOCATE(NKLIN_CURRENT_SPEC   (IIU,IJU,NSPECTRA_K))
+  CALL LES_ALLOCATE('XCOEFLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/))
+  CALL LES_ALLOCATE('NKLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/))
   !
   XCOEFLIN_CURRENT_SPEC(:,:,:) = XCOEFLIN_SPEC(:,:,:)
   NKLIN_CURRENT_SPEC   (:,:,:) = NKLIN_SPEC   (:,:,:)
@@ -1146,16 +1146,16 @@ DEALLOCATE(ZDTHRADLW_LES  )
 !*      9.2  current time-step LES masks (in MODD_LES)
 !            ---------------------------
 !
-DEALLOCATE(LLES_CURRENT_CART_MASK)
-IF (LLES_NEB_MASK)     DEALLOCATE(LLES_CURRENT_NEB_MASK)
-IF (LLES_CORE_MASK)    DEALLOCATE(LLES_CURRENT_CORE_MASK)
+CALL LES_DEALLOCATE('LLES_CURRENT_CART_MASK')
+IF (LLES_NEB_MASK)     CALL LES_DEALLOCATE('LLES_CURRENT_NEB_MASK')
+IF (LLES_CORE_MASK)    CALL LES_DEALLOCATE('LLES_CURRENT_CORE_MASK')
 IF (LLES_MY_MASK)   THEN
-   DEALLOCATE(LLES_CURRENT_MY_MASKS)
+   CALL LES_DEALLOCATE('LLES_CURRENT_MY_MASKS')
 END IF
 IF (LLES_CS_MASK)   THEN
-    DEALLOCATE(LLES_CURRENT_CS1_MASK)
-    IF (NSV_CS >= 2) DEALLOCATE(LLES_CURRENT_CS2_MASK)
-    IF (NSV_CS == 3) DEALLOCATE(LLES_CURRENT_CS3_MASK)
+    CALL LES_DEALLOCATE('LLES_CURRENT_CS1_MASK')
+    IF (NSV_CS >= 2) CALL LES_DEALLOCATE('LLES_CURRENT_CS2_MASK')
+    IF (NSV_CS == 3) CALL LES_DEALLOCATE('LLES_CURRENT_CS3_MASK')
 END IF
 !
 !
diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90
index 4dfac6d8acd37a94a03d72389d2ff5b03727aaa3..8a16b6df6ea4d303072c5044c3bdff06e0bd6668 100644
--- a/src/mesonh/ext/phys_paramn.f90
+++ b/src/mesonh/ext/phys_paramn.f90
@@ -868,12 +868,12 @@ IF (LOCEAN) THEN
   ZIZOCE(IKU)   = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA
   ZPROSOL1(IKU) = CST%XROC*ZIZOCE(IKU)
   ZPROSOL2(IKU) = (1.-CST%XROC)*ZIZOCE(IKU)
-!  IF(NVERB >= 5 ) THEN   
+  IF(NVERB >= 5 ) THEN   
 !    WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,&
 !       TDTCUR%xtime, XTSTEP, ZSFTH(2,2), ZSFU(2,2),ZSFV(2,2),ZIZOCE(IKU)
-!   WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', &
-!      XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2)
-!  END IF
+   WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', &
+      XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2)
+  END IF
   if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) 
   DO JKM=IKU-1,2,-1
     ZPROSOL1(JKM) = ZPROSOL1(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD1)
@@ -1564,7 +1564,7 @@ IF(LLEONARD) THEN
   ZHGRAD(:,:,:,5) = GX_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1)
   ZHGRAD(:,:,:,6) = GY_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1)
 END IF
-   CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,&
+   CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,TLES, &
               IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, IGRADIENTS, NHALO,                 &
               1, NMODEL_CLOUD,                                                       &
               NSV, NSV_LGBEG, NSV_LGEND,CPROGRAM,                                    &
diff --git a/src/mesonh/ext/switch_sbg_lesn.f90 b/src/mesonh/ext/switch_sbg_lesn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..2920680faff50dbca286eaea17c310b045650675
--- /dev/null
+++ b/src/mesonh/ext/switch_sbg_lesn.f90
@@ -0,0 +1,589 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source$ $Revision$ $Date$
+!-----------------------------------------------------------------
+!-----------------------------------------------------------------
+!     ########################## 
+      SUBROUTINE SWITCH_SBG_LES_n
+!     ##########################
+!
+!!****  *SWITCH_SBG_LESn* - moves LES subgrid quantities from modd_les
+!!                          to modd_lesn or the contrary.
+!!
+!!    PURPOSE
+!!    -------
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------ 
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!	   V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    June 14, 2002                
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_LES
+USE MODD_LES_n
+USE MODD_CONF_n
+USE MODD_NSV
+!
+USE MODI_SECOND_MNH
+!
+IMPLICIT NONE
+!
+REAL :: ZTIME1, ZTIME2
+!-------------------------------------------------------------------------------
+!
+!*      7.4  interactions of resolved and subgrid quantities
+!            -----------------------------------------------
+!
+CALL SECOND_MNH(ZTIME1)
+!
+IF (.NOT.   ASSOCIATED (X_LES_RES_W_SBG_WThl) ) THEN
+!                                                                           ______
+  CALL LES_ALLOCATE('X_LES_RES_W_SBG_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'w'Thl'>
+!                                                                        _____
+  CALL LES_ALLOCATE('X_LES_RES_W_SBG_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Thl'2>
+!                                                                              _____
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_U_SBG_UaU',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <du'/dxa ua'u'>
+!                                                                              _____
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_V_SBG_UaV',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dv'/dxa ua'v'>
+!                                                                             _____
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'w'>
+!                                                                              _______
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'Thl'>
+!                                                                                _____
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'w'>
+!                                                                                  ___
+  CALL LES_ALLOCATE('X_LES_RES_ddz_Thl_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dz w'2>
+!                                                                                _______
+  CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'Thl'>
+!
+  IF (LUSERV) THEN
+!                                                                          _____
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'w'Rt'>
+!                                                                           ____
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Rt'2>
+!                                                                          _______
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Thl'Rt'>
+!                                                                                ______
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'Rt'>
+!                                                                                 _____
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dxa ua'w'>
+!                                                                                   ___
+    CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dz w'2>
+!                                                                                  ______
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'Rt'>
+!                                                                                 _______
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dxa ua'Thl'>
+!                                                                                  ______
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) !  <dRt'/dxa ua'Rt'>
+  ELSE
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/0,0,0/))
+  END IF
+!                                                                                   ______
+CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dw'/dxa ua'Sv'>
+!                                                                                    _____
+CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dSv'/dxa ua'w'>
+!                                                                                    ___
+CALL LES_ALLOCATE('X_LES_RES_ddz_Sv_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/) ) !  <dSv'/dz w'2>
+!                                                                                   ______
+CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dSv'/dxa ua'Sv'>
+!                                                                             _____
+CALL LES_ALLOCATE('X_LES_RES_W_SBG_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <w'w'Sv'>
+!                                                                             ____
+CALL LES_ALLOCATE('X_LES_RES_W_SBG_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <w'Sv'2>
+!
+!
+  X_LES_RES_W_SBG_WThl         = XLES_RES_W_SBG_WThl
+  X_LES_RES_W_SBG_Thl2         = XLES_RES_W_SBG_Thl2
+  X_LES_RES_ddxa_U_SBG_UaU     = XLES_RES_ddxa_U_SBG_UaU
+  X_LES_RES_ddxa_V_SBG_UaV     = XLES_RES_ddxa_V_SBG_UaV
+  X_LES_RES_ddxa_W_SBG_UaW     = XLES_RES_ddxa_W_SBG_UaW
+  X_LES_RES_ddxa_W_SBG_UaThl   = XLES_RES_ddxa_W_SBG_UaThl
+  X_LES_RES_ddxa_Thl_SBG_UaW   = XLES_RES_ddxa_Thl_SBG_UaW
+  X_LES_RES_ddz_Thl_SBG_W2     = XLES_RES_ddz_Thl_SBG_W2
+  X_LES_RES_ddxa_Thl_SBG_UaThl = XLES_RES_ddxa_Thl_SBG_UaThl
+  IF (LUSERV) THEN
+    X_LES_RES_W_SBG_WRt        = XLES_RES_W_SBG_WRt
+    X_LES_RES_W_SBG_Rt2        = XLES_RES_W_SBG_Rt2
+    X_LES_RES_W_SBG_ThlRt      = XLES_RES_W_SBG_ThlRt
+    X_LES_RES_ddxa_W_SBG_UaRt  = XLES_RES_ddxa_W_SBG_UaRt
+    X_LES_RES_ddxa_Rt_SBG_UaW  = XLES_RES_ddxa_Rt_SBG_UaW
+    X_LES_RES_ddz_Rt_SBG_W2    = XLES_RES_ddz_Rt_SBG_W2
+    X_LES_RES_ddxa_Thl_SBG_UaRt= XLES_RES_ddxa_Thl_SBG_UaRt
+    X_LES_RES_ddxa_Rt_SBG_UaThl= XLES_RES_ddxa_Rt_SBG_UaThl
+    X_LES_RES_ddxa_Rt_SBG_UaRt = XLES_RES_ddxa_Rt_SBG_UaRt
+  END IF
+  IF (NSV>0) THEN
+    X_LES_RES_ddxa_W_SBG_UaSv  = XLES_RES_ddxa_W_SBG_UaSv
+    X_LES_RES_ddxa_Sv_SBG_UaW  = XLES_RES_ddxa_Sv_SBG_UaW
+    X_LES_RES_ddz_Sv_SBG_W2    = XLES_RES_ddz_Sv_SBG_W2
+    X_LES_RES_ddxa_Sv_SBG_UaSv = XLES_RES_ddxa_Sv_SBG_UaSv
+    X_LES_RES_W_SBG_WSv        = XLES_RES_W_SBG_WSv
+    X_LES_RES_W_SBG_Sv2        = XLES_RES_W_SBG_Sv2
+  END IF
+!
+!
+  CALL LES_ALLOCATE('X_LES_SUBGRID_U2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_V2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Thl'2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_UV',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'v'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WU',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'u'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WV',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'v'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_UThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Thl'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_VThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Thl'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Thl'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'Thv'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_ThlThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <Thl'Thv'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_W2Thl',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'2Thl>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WThl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'Thl'2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Tke',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon_Thl2>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WP',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'p'>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_PHI3',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  phi3
+  CALL LES_ALLOCATE('X_LES_SUBGRID_LMix',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Lmix
+  CALL LES_ALLOCATE('X_LES_SUBGRID_LDiss',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Ldiss
+  CALL LES_ALLOCATE('X_LES_SUBGRID_Km',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Km
+  CALL LES_ALLOCATE('X_LES_SUBGRID_Kh',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Kh
+  CALL LES_ALLOCATE('X_LES_SUBGRID_ThlPz',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <Thl'dp'/dz>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_UTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Tke>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_VTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Tke>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Tke>
+  CALL LES_ALLOCATE('X_LES_SUBGRID_ddz_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <dw'Tke/dz>
+
+  CALL LES_ALLOCATE('X_LES_SUBGRID_THLUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thl of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_RTUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rt of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_RVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rv of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_RCUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rc of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_RIUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Ri of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thl of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_MASSFLUX',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Mass Flux
+  CALL LES_ALLOCATE('X_LES_SUBGRID_DETR',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Detrainment
+  CALL LES_ALLOCATE('X_LES_SUBGRID_ENTR',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Entrainment
+  CALL LES_ALLOCATE('X_LES_SUBGRID_FRACUP',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Updraft Fraction 
+  CALL LES_ALLOCATE('X_LES_SUBGRID_THVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thv of the Updraft
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WTHLMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of thl   
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WRTMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of rt
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WTHVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of thv 
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WUMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of u
+  CALL LES_ALLOCATE('X_LES_SUBGRID_WVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of v
+  
+  IF (LUSERV ) THEN
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Thl'Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'Thv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'2Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Thl'Rt'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rt'2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon_Rt2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon_ThlRt>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'dp'/dz>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/NLES_K,NLES_TIMES,NLES_MASKS/))     !  psi3  
+  ELSE
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/0,0,0/))    
+  END IF
+  IF (LUSERC ) THEN
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rc'2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Rc'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Rc'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rc'>
+  ELSE
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/0,0,0/))
+  END IF
+  IF (LUSERI ) THEN
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Ri'2>
+  ELSE
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/0,0,0/))
+  END IF
+  IF (NSV>0  ) THEN
+    CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <u'Sv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <v'Sv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'Sv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'Thv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <w'2Sv'>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <w'Sv'2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <epsilon_Sv2>
+    CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'dp'/dz>
+  ELSE
+    CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/0,0,0,0/))
+    CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/0,0,0,0/))
+  END IF
+!
+  X_LES_SUBGRID_U2  = XLES_SUBGRID_U2 
+  X_LES_SUBGRID_V2  = XLES_SUBGRID_V2 
+  X_LES_SUBGRID_W2  = XLES_SUBGRID_W2 
+  X_LES_SUBGRID_Thl2= XLES_SUBGRID_Thl2
+  X_LES_SUBGRID_UV  = XLES_SUBGRID_UV 
+  X_LES_SUBGRID_WU  = XLES_SUBGRID_WU
+  X_LES_SUBGRID_WV  = XLES_SUBGRID_WV
+  X_LES_SUBGRID_UThl= XLES_SUBGRID_UThl
+  X_LES_SUBGRID_VThl= XLES_SUBGRID_VThl
+  X_LES_SUBGRID_WThl= XLES_SUBGRID_WThl
+  X_LES_SUBGRID_WThv     = XLES_SUBGRID_WThv
+  X_LES_SUBGRID_ThlThv   = XLES_SUBGRID_ThlThv
+  X_LES_SUBGRID_W2Thl    = XLES_SUBGRID_W2Thl
+  X_LES_SUBGRID_WThl2    = XLES_SUBGRID_WThl2
+  X_LES_SUBGRID_DISS_Tke = XLES_SUBGRID_DISS_Tke
+  X_LES_SUBGRID_DISS_Thl2= XLES_SUBGRID_DISS_Thl2
+  X_LES_SUBGRID_WP       = XLES_SUBGRID_WP
+  X_LES_SUBGRID_PHI3     = XLES_SUBGRID_PHI3
+  X_LES_SUBGRID_LMix     = XLES_SUBGRID_LMix
+  X_LES_SUBGRID_LDiss    = XLES_SUBGRID_LDiss
+  X_LES_SUBGRID_Km       = XLES_SUBGRID_Km
+  X_LES_SUBGRID_Kh       = XLES_SUBGRID_Kh
+  X_LES_SUBGRID_ThlPz    = XLES_SUBGRID_ThlPz
+  X_LES_SUBGRID_UTke= XLES_SUBGRID_UTke
+  X_LES_SUBGRID_VTke= XLES_SUBGRID_VTke
+  X_LES_SUBGRID_WTke= XLES_SUBGRID_WTke
+  X_LES_SUBGRID_ddz_WTke  =XLES_SUBGRID_ddz_WTke
+  
+  X_LES_SUBGRID_THLUP_MF = XLES_SUBGRID_THLUP_MF
+  X_LES_SUBGRID_RTUP_MF = XLES_SUBGRID_RTUP_MF 
+  X_LES_SUBGRID_RVUP_MF = XLES_SUBGRID_RVUP_MF 
+  X_LES_SUBGRID_RCUP_MF = XLES_SUBGRID_RCUP_MF 
+  X_LES_SUBGRID_RIUP_MF = XLES_SUBGRID_RIUP_MF 
+  X_LES_SUBGRID_WUP_MF = XLES_SUBGRID_WUP_MF  
+  X_LES_SUBGRID_MASSFLUX = XLES_SUBGRID_MASSFLUX
+  X_LES_SUBGRID_DETR = XLES_SUBGRID_DETR    
+  X_LES_SUBGRID_ENTR = XLES_SUBGRID_ENTR    
+  X_LES_SUBGRID_FRACUP = XLES_SUBGRID_FRACUP   
+  X_LES_SUBGRID_THVUP_MF = XLES_SUBGRID_THVUP_MF
+  X_LES_SUBGRID_WTHLMF = XLES_SUBGRID_WTHLMF     
+  X_LES_SUBGRID_WRTMF = XLES_SUBGRID_WRTMF   
+  X_LES_SUBGRID_WTHVMF = XLES_SUBGRID_WTHVMF   
+  X_LES_SUBGRID_WUMF = XLES_SUBGRID_WUMF    
+  X_LES_SUBGRID_WVMF = XLES_SUBGRID_WVMF    
+
+  IF (LUSERV ) THEN
+    X_LES_SUBGRID_Rt2  = XLES_SUBGRID_Rt2
+    X_LES_SUBGRID_ThlRt= XLES_SUBGRID_ThlRt
+    X_LES_SUBGRID_URt  = XLES_SUBGRID_URt
+    X_LES_SUBGRID_VRt  = XLES_SUBGRID_VRt
+    X_LES_SUBGRID_WRt  = XLES_SUBGRID_WRt
+    X_LES_SUBGRID_RtThv   = XLES_SUBGRID_RtThv
+    X_LES_SUBGRID_W2Rt    = XLES_SUBGRID_W2Rt
+    X_LES_SUBGRID_WThlRt  = XLES_SUBGRID_WThlRt
+    X_LES_SUBGRID_WRt2    = XLES_SUBGRID_WRt2
+    X_LES_SUBGRID_DISS_Rt2= XLES_SUBGRID_DISS_Rt2
+    X_LES_SUBGRID_DISS_ThlRt= XLES_SUBGRID_DISS_ThlRt
+    X_LES_SUBGRID_RtPz    = XLES_SUBGRID_RtPz
+    X_LES_SUBGRID_PSI3    = XLES_SUBGRID_PSI3  
+  END IF
+  IF (LUSERC ) THEN
+    X_LES_SUBGRID_Rc2 = XLES_SUBGRID_Rc2
+    X_LES_SUBGRID_URc = XLES_SUBGRID_URc
+    X_LES_SUBGRID_VRc = XLES_SUBGRID_VRc
+    X_LES_SUBGRID_WRc = XLES_SUBGRID_WRc
+  END IF
+  IF (LUSERI ) THEN
+    X_LES_SUBGRID_Ri2 = XLES_SUBGRID_Ri2
+  END IF
+  IF (NSV>0  ) THEN
+    X_LES_SUBGRID_USv = XLES_SUBGRID_USv
+    X_LES_SUBGRID_VSv = XLES_SUBGRID_VSv
+    X_LES_SUBGRID_WSv = XLES_SUBGRID_WSv
+    X_LES_SUBGRID_Sv2      = XLES_SUBGRID_Sv2 
+    X_LES_SUBGRID_SvThv    = XLES_SUBGRID_SvThv
+    X_LES_SUBGRID_W2Sv     = XLES_SUBGRID_W2Sv 
+    X_LES_SUBGRID_WSv2     = XLES_SUBGRID_WSv2    
+    X_LES_SUBGRID_DISS_Sv2 = XLES_SUBGRID_DISS_Sv2 
+    X_LES_SUBGRID_SvPz     = XLES_SUBGRID_SvPz  
+  END IF
+!
+!
+  CALL LES_ALLOCATE('X_LES_UW0',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('X_LES_VW0',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('X_LES_USTAR',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('X_LES_Q0',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('X_LES_E0',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('X_LES_SV0',(/NLES_TIMES,NSV/))
+!
+  X_LES_UW0       = XLES_UW0
+  X_LES_VW0       = XLES_VW0
+  X_LES_USTAR     = XLES_USTAR
+  X_LES_Q0        = XLES_Q0
+  X_LES_E0        = XLES_E0
+  IF (NSV>0) X_LES_SV0       = XLES_SV0
+
+ELSE
+!
+  XLES_RES_W_SBG_WThl         = X_LES_RES_W_SBG_WThl
+  XLES_RES_W_SBG_Thl2         = X_LES_RES_W_SBG_Thl2
+  XLES_RES_ddxa_U_SBG_UaU     = X_LES_RES_ddxa_U_SBG_UaU
+  XLES_RES_ddxa_V_SBG_UaV     = X_LES_RES_ddxa_V_SBG_UaV
+  XLES_RES_ddxa_W_SBG_UaW     = X_LES_RES_ddxa_W_SBG_UaW
+  XLES_RES_ddxa_W_SBG_UaThl   = X_LES_RES_ddxa_W_SBG_UaThl
+  XLES_RES_ddxa_Thl_SBG_UaW   = X_LES_RES_ddxa_Thl_SBG_UaW
+  XLES_RES_ddz_Thl_SBG_W2     = X_LES_RES_ddz_Thl_SBG_W2
+  XLES_RES_ddxa_Thl_SBG_UaThl = X_LES_RES_ddxa_Thl_SBG_UaThl
+  IF (LUSERV) THEN
+    XLES_RES_W_SBG_WRt        = X_LES_RES_W_SBG_WRt
+    XLES_RES_W_SBG_Rt2        = X_LES_RES_W_SBG_Rt2
+    XLES_RES_W_SBG_ThlRt      = X_LES_RES_W_SBG_ThlRt
+    XLES_RES_ddxa_W_SBG_UaRt  = X_LES_RES_ddxa_W_SBG_UaRt
+    XLES_RES_ddxa_Rt_SBG_UaW  = X_LES_RES_ddxa_Rt_SBG_UaW
+    XLES_RES_ddz_Rt_SBG_W2    = X_LES_RES_ddz_Rt_SBG_W2
+    XLES_RES_ddxa_Thl_SBG_UaRt= X_LES_RES_ddxa_Thl_SBG_UaRt
+    XLES_RES_ddxa_Rt_SBG_UaThl= X_LES_RES_ddxa_Rt_SBG_UaThl
+    XLES_RES_ddxa_Rt_SBG_UaRt = X_LES_RES_ddxa_Rt_SBG_UaRt
+  END IF
+  IF (NSV>0) THEN
+    XLES_RES_ddxa_W_SBG_UaSv  = X_LES_RES_ddxa_W_SBG_UaSv
+    XLES_RES_ddxa_Sv_SBG_UaW  = X_LES_RES_ddxa_Sv_SBG_UaW
+    XLES_RES_ddz_Sv_SBG_W2    = X_LES_RES_ddz_Sv_SBG_W2
+    XLES_RES_ddxa_Sv_SBG_UaSv = X_LES_RES_ddxa_Sv_SBG_UaSv
+    XLES_RES_W_SBG_WSv        = X_LES_RES_W_SBG_WSv
+    XLES_RES_W_SBG_Sv2        = X_LES_RES_W_SBG_Sv2
+  END IF
+  XLES_SUBGRID_U2  = X_LES_SUBGRID_U2 
+  XLES_SUBGRID_V2  = X_LES_SUBGRID_V2 
+  XLES_SUBGRID_W2  = X_LES_SUBGRID_W2 
+  XLES_SUBGRID_Thl2= X_LES_SUBGRID_Thl2
+  XLES_SUBGRID_UV  = X_LES_SUBGRID_UV 
+  XLES_SUBGRID_WU  = X_LES_SUBGRID_WU
+  XLES_SUBGRID_WV  = X_LES_SUBGRID_WV
+  XLES_SUBGRID_UThl= X_LES_SUBGRID_UThl
+  XLES_SUBGRID_VThl= X_LES_SUBGRID_VThl
+  XLES_SUBGRID_WThl= X_LES_SUBGRID_WThl
+  XLES_SUBGRID_WThv     = X_LES_SUBGRID_WThv
+  XLES_SUBGRID_ThlThv   = X_LES_SUBGRID_ThlThv
+  XLES_SUBGRID_W2Thl    = X_LES_SUBGRID_W2Thl
+  XLES_SUBGRID_WThl2    = X_LES_SUBGRID_WThl2
+  XLES_SUBGRID_DISS_Tke = X_LES_SUBGRID_DISS_Tke
+  XLES_SUBGRID_DISS_Thl2= X_LES_SUBGRID_DISS_Thl2
+  XLES_SUBGRID_WP       = X_LES_SUBGRID_WP
+  XLES_SUBGRID_PHI3     = X_LES_SUBGRID_PHI3
+  XLES_SUBGRID_LMix     = X_LES_SUBGRID_LMix
+  XLES_SUBGRID_LDiss    = X_LES_SUBGRID_LDiss
+  XLES_SUBGRID_Km       = X_LES_SUBGRID_Km
+  XLES_SUBGRID_Kh       = X_LES_SUBGRID_Kh
+  XLES_SUBGRID_ThlPz    = X_LES_SUBGRID_ThlPz
+  XLES_SUBGRID_UTke= X_LES_SUBGRID_UTke
+  XLES_SUBGRID_VTke= X_LES_SUBGRID_VTke
+  XLES_SUBGRID_WTke= X_LES_SUBGRID_WTke
+  XLES_SUBGRID_ddz_WTke  =X_LES_SUBGRID_ddz_WTke
+
+  XLES_SUBGRID_THLUP_MF = X_LES_SUBGRID_THLUP_MF
+  XLES_SUBGRID_RTUP_MF = X_LES_SUBGRID_RTUP_MF 
+  XLES_SUBGRID_RVUP_MF = X_LES_SUBGRID_RVUP_MF 
+  XLES_SUBGRID_RCUP_MF = X_LES_SUBGRID_RCUP_MF 
+  XLES_SUBGRID_RIUP_MF = X_LES_SUBGRID_RIUP_MF 
+  XLES_SUBGRID_WUP_MF = X_LES_SUBGRID_WUP_MF  
+  XLES_SUBGRID_MASSFLUX = X_LES_SUBGRID_MASSFLUX
+  XLES_SUBGRID_DETR = X_LES_SUBGRID_DETR    
+  XLES_SUBGRID_ENTR = X_LES_SUBGRID_ENTR    
+  XLES_SUBGRID_FRACUP = X_LES_SUBGRID_FRACUP   
+  XLES_SUBGRID_THVUP_MF = X_LES_SUBGRID_THVUP_MF
+  XLES_SUBGRID_WTHLMF = X_LES_SUBGRID_WTHLMF     
+  XLES_SUBGRID_WRTMF = X_LES_SUBGRID_WRTMF   
+  XLES_SUBGRID_WTHVMF = X_LES_SUBGRID_WTHVMF   
+  XLES_SUBGRID_WUMF = X_LES_SUBGRID_WUMF    
+  XLES_SUBGRID_WVMF = X_LES_SUBGRID_WVMF    
+  
+  IF (LUSERV ) THEN
+    XLES_SUBGRID_Rt2  = X_LES_SUBGRID_Rt2
+    XLES_SUBGRID_ThlRt= X_LES_SUBGRID_ThlRt
+    XLES_SUBGRID_URt  = X_LES_SUBGRID_URt
+    XLES_SUBGRID_VRt  = X_LES_SUBGRID_VRt
+    XLES_SUBGRID_WRt  = X_LES_SUBGRID_WRt
+    XLES_SUBGRID_RtThv   = X_LES_SUBGRID_RtThv
+    XLES_SUBGRID_W2Rt    = X_LES_SUBGRID_W2Rt
+    XLES_SUBGRID_WThlRt  = X_LES_SUBGRID_WThlRt
+    XLES_SUBGRID_WRt2    = X_LES_SUBGRID_WRt2
+    XLES_SUBGRID_DISS_Rt2= X_LES_SUBGRID_DISS_Rt2
+    XLES_SUBGRID_DISS_ThlRt= X_LES_SUBGRID_DISS_ThlRt
+    XLES_SUBGRID_RtPz    = X_LES_SUBGRID_RtPz
+    XLES_SUBGRID_PSI3    = X_LES_SUBGRID_PSI3
+  END IF
+  IF (LUSERC ) THEN
+    XLES_SUBGRID_Rc2 = X_LES_SUBGRID_Rc2
+    XLES_SUBGRID_URc = X_LES_SUBGRID_URc
+    XLES_SUBGRID_VRc = X_LES_SUBGRID_VRc
+    XLES_SUBGRID_WRc = X_LES_SUBGRID_WRc
+  END IF
+  IF (LUSERI ) THEN
+    XLES_SUBGRID_Ri2 = X_LES_SUBGRID_Ri2
+  END IF
+  IF (NSV>0  ) THEN
+    XLES_SUBGRID_USv = X_LES_SUBGRID_USv
+    XLES_SUBGRID_VSv = X_LES_SUBGRID_VSv
+    XLES_SUBGRID_WSv = X_LES_SUBGRID_WSv
+    XLES_SUBGRID_Sv2      = X_LES_SUBGRID_Sv2 
+    XLES_SUBGRID_SvThv    = X_LES_SUBGRID_SvThv
+    XLES_SUBGRID_W2Sv     = X_LES_SUBGRID_W2Sv 
+    XLES_SUBGRID_WSv2     = X_LES_SUBGRID_WSv2    
+    XLES_SUBGRID_DISS_Sv2 = X_LES_SUBGRID_DISS_Sv2 
+    XLES_SUBGRID_SvPz     = X_LES_SUBGRID_SvPz  
+  END IF
+  XLES_UW0       = X_LES_UW0
+  XLES_VW0       = X_LES_VW0
+  XLES_USTAR     = X_LES_USTAR
+  XLES_Q0        = X_LES_Q0
+  XLES_E0        = X_LES_E0
+  IF (NSV>0) XLES_SV0       = X_LES_SV0
+!
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WThl')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Thl2')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_U_SBG_UaU')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_V_SBG_UaV')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaW')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW')
+  CALL LES_DEALLOCATE('X_LES_RES_ddz_Thl_SBG_W2')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WRt')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Rt2')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_ThlRt')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW')
+  CALL LES_DEALLOCATE('X_LES_RES_ddz_Rt_SBG_W2')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW')
+  CALL LES_DEALLOCATE('X_LES_RES_ddz_Sv_SBG_W2')
+  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WSv')
+  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Sv2')
+!
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_U2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_V2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Thl2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_UV')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WU')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WV')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_UThl')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_VThl')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlThv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Thl')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Tke')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Thl2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WP')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_PHI3')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_LMix')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_LDiss')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Km')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Kh')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlPz')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_UTke')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_VTke')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTke')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_ddz_WTke')
+
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_THLUP_MF')  
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RTUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RVUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RCUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RIUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_MASSFLUX')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DETR')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_ENTR')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_FRACUP')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_THVUP_MF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHLMF')  
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRTMF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHVMF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WUMF')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WVMF')
+  
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Rt2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlRt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_URt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_VRt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RtThv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Rt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThlRt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Rt2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_ThlRt')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_RtPz')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_PSI3')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Rc2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_URc')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_VRc')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRc')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Ri2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_USv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_VSv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_Sv2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_SvThv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Sv')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Sv2')
+  CALL LES_DEALLOCATE('X_LES_SUBGRID_SvPz')
+  !
+  CALL LES_DEALLOCATE('X_LES_UW0')
+  CALL LES_DEALLOCATE('X_LES_VW0')
+  CALL LES_DEALLOCATE('X_LES_USTAR')
+  CALL LES_DEALLOCATE('X_LES_Q0')
+  CALL LES_DEALLOCATE('X_LES_E0')
+  CALL LES_DEALLOCATE('X_LES_SV0')
+!
+END IF
+!
+CALL SECOND_MNH(ZTIME2)
+!
+XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
+!
+END SUBROUTINE SWITCH_SBG_LES_n
diff --git a/src/mesonh/ext/write_lesn.f90 b/src/mesonh/ext/write_lesn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..9b6b326bc92ca2ebae7d62a7019a319903edebc4
--- /dev/null
+++ b/src/mesonh/ext/write_lesn.f90
@@ -0,0 +1,1319 @@
+!MNH_LIC Copyright 2000-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!######################
+module mode_write_les_n
+!######################
+
+use modd_field, only: tfield_metadata_base
+
+implicit none
+
+private
+
+public :: Write_les_n
+
+
+character(len=:), allocatable :: cgroup
+character(len=:), allocatable :: cgroupcomment
+
+logical :: ldoavg    ! Compute and store time average
+logical :: ldonorm   ! Compute and store normalized field
+
+type(tfield_metadata_base) :: tfield
+type(tfield_metadata_base) :: tfieldx
+type(tfield_metadata_base) :: tfieldy
+
+interface Les_diachro_write
+  module procedure Les_diachro_write_1D, Les_diachro_write_2D, Les_diachro_write_3D, Les_diachro_write_4D
+end interface
+
+contains
+
+!###################################
+subroutine  Write_les_n( tpdiafile )
+!###################################
+!
+!
+!!****  *WRITE_LES_n* writes the LES final diagnostics for model _n
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         07/02/00
+!!                       01/02/01 (D. Gazen) add module MODD_NSV for NSV variable
+!!                       06/11/02 (V. Masson) some minor bugs
+!!                       01/04/03 (V. Masson) idem
+!!                       10/10/09 (P. Aumond) Add user multimaskS
+!!                          11/15 (C.Lac) Add production terms of TKE
+!!                    10/2016 (C.Lac) Add droplet deposition
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  C. Lac         02/2019: add rain fraction as a LES diagnostic
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 12/10/2020: remove HLES_AVG dummy argument and group all 4 calls
+!  P. Wautelet 13/10/2020: bugfix: correct some names for LES_DIACHRO_2PT diagnostics (Ri)
+!  P. Wautelet 26/10/2020: bugfix: correct some comments and conditions + add missing RES_RTPZ
+!  P. Wautelet 26/10/2020: restructure subroutines to use tfield_metadata_base type
+! --------------------------------------------------------------------------
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use modd_conf_n,     only: luserv, luserc, luserr, luseri, lusers, luserg, luserh
+use modd_io,         only: tfiledata
+use modd_field,      only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_MASK, &
+                           NMNHDIM_BUDGET_LES_PDF,                                                                            &
+                           NMNHDIM_SPECTRA_2PTS_NI, NMNHDIM_SPECTRA_2PTS_NJ,  NMNHDIM_SPECTRA_LEVEL, NMNHDIM_UNUSED,          &
+                           TYPEREAL
+use modd_grid_n,     only: xdxhat, xdyhat
+use modd_nsv,        only: nsv
+use modd_les
+use modd_les_n
+use modd_param_n,    only: ccloud
+use modd_param_c2r2, only: ldepoc
+use modd_param_ice,  only: ldeposc
+use modd_parameters, only: XUNDEF
+
+use mode_les_spec_n,            only: Les_spec_n
+use mode_modeln_handler,        only: Get_current_model_index
+use mode_write_les_budget_n,    only: Write_les_budget_n
+use mode_write_les_rt_budget_n, only: Write_les_rt_budget_n
+use mode_write_les_sv_budget_n, only: Write_les_sv_budget_n
+
+IMPLICIT NONE
+!
+!*      0.1  declarations of arguments
+!
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
+!
+!
+!*      0.2  declaration of local variables
+!
+INTEGER :: IMASK
+!
+INTEGER :: JSV       ! scalar loop counter
+INTEGER :: JI        ! loop counter
+!
+character(len=3)                        :: ynum
+CHARACTER(len=5)                        :: YGROUP
+character(len=7), dimension(nles_masks) :: ymasks
+!
+logical :: gdoavg    ! Compute and store time average
+logical :: gdonorm   ! Compute and store normalized field
+REAL, DIMENSION(:,:,:), ALLOCATABLE     :: ZAVG_PTS_ll
+REAL, DIMENSION(:,:,:), ALLOCATABLE     :: ZUND_PTS_ll
+REAL                                    :: ZCART_PTS_ll
+INTEGER                                 :: IMI ! Current model inde
+!
+!-------------------------------------------------------------------------------
+!
+IF (.NOT. LLES) RETURN
+!
+!
+!*      1.   Initializations
+!            ---------------
+!
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+!
+!*      1.1  Normalization variables
+!            -----------------------
+!
+IF (CLES_NORM_TYPE/='NONE' ) THEN
+  CALL LES_ALLOCATE('XLES_NORM_M',  (/NLES_TIMES/))
+  CALL LES_ALLOCATE('XLES_NORM_S',  (/NLES_TIMES/))
+  CALL LES_ALLOCATE('XLES_NORM_K',  (/NLES_TIMES/))
+  CALL LES_ALLOCATE('XLES_NORM_RHO',(/NLES_TIMES/))
+  CALL LES_ALLOCATE('XLES_NORM_RV', (/NLES_TIMES/))
+  CALL LES_ALLOCATE('XLES_NORM_SV', (/NLES_TIMES,NSV/))
+  CALL LES_ALLOCATE('XLES_NORM_P',  (/NLES_TIMES/))
+  !
+  IF (CLES_NORM_TYPE=='CONV') THEN
+    WHERE (XLES_WSTAR(:)>0.)
+      XLES_NORM_M(:)   = XLES_BL_HEIGHT(:)
+      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_WSTAR(:)
+      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_WSTAR(:)
+      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
+      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_WSTAR(:)
+      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_WSTAR(:)**2
+    ELSEWHERE
+      XLES_NORM_M(:)   = 0.
+      XLES_NORM_S(:)   = 0.
+      XLES_NORM_K(:)   = 0.
+      XLES_NORM_RHO(:) = 0.
+      XLES_NORM_RV(:)  = 0.
+      XLES_NORM_P(:)   = 0.
+    END WHERE
+    DO JSV=1,NSV
+      WHERE (XLES_WSTAR(:)>0.)
+        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_WSTAR(:)
+      ELSEWHERE
+        XLES_NORM_SV(:,JSV)= 0.
+      END WHERE
+    END DO
+  ELSE IF (CLES_NORM_TYPE=='EKMA') THEN
+    WHERE (XLES_USTAR(:)>0.)
+      XLES_NORM_M(:)   = XLES_BL_HEIGHT(:)
+      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_USTAR(:)
+      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_USTAR(:)
+      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
+      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_USTAR(:)
+      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2
+    ELSEWHERE
+      XLES_NORM_M(:)   = 0.
+      XLES_NORM_S(:)   = 0.
+      XLES_NORM_K(:)   = 0.
+      XLES_NORM_RHO(:) = 0.
+      XLES_NORM_RV(:)  = 0.
+      XLES_NORM_P(:)   = 0.
+    END WHERE
+    DO JSV=1,NSV
+      WHERE (XLES_USTAR(:)>0.)
+        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:)
+      ELSEWHERE
+        XLES_NORM_SV(:,JSV)= 0.
+      END WHERE
+    END DO
+  ELSE IF (CLES_NORM_TYPE=='MOBU') THEN
+    XLES_NORM_M(:) = XLES_MO_LENGTH(:)
+    WHERE (XLES_USTAR(:)>0.)
+      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_USTAR(:)
+      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_USTAR(:)
+      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
+      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_USTAR(:)
+      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2
+    ELSEWHERE
+      XLES_NORM_S(:)   = 0.
+      XLES_NORM_K(:)   = 0.
+      XLES_NORM_RHO(:) = 0.
+      XLES_NORM_RV(:)  = 0.
+      XLES_NORM_P(:)   = 0.
+    END WHERE
+    DO JSV=1,NSV
+      WHERE (XLES_USTAR(:)>0.)
+        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:)
+      ELSEWHERE
+        XLES_NORM_SV(:,JSV)= 0.
+      END WHERE
+    END DO
+  END IF
+END IF
+!
+!*      1.2  Initializations for WRITE_DIACHRO
+!            ---------------------------------
+!
+NLES_CURRENT_TIMES=NLES_TIMES
+!
+CALL LES_ALLOCATE('XLES_CURRENT_Z',(/NLES_K/))
+
+XLES_CURRENT_Z(:) = XLES_Z(:)
+!
+XLES_CURRENT_ZS = XLES_ZS
+!
+NLES_CURRENT_IINF=NLESn_IINF(IMI)
+NLES_CURRENT_ISUP=NLESn_ISUP(IMI)
+NLES_CURRENT_JINF=NLESn_JINF(IMI)
+NLES_CURRENT_JSUP=NLESn_JSUP(IMI)
+!
+XLES_CURRENT_DOMEGAX=XDXHAT(1)
+XLES_CURRENT_DOMEGAY=XDYHAT(1)
+
+tfield%ngrid = 0 !Not on the Arakawa grid
+tfield%ntype = TYPEREAL
+!
+!*      2.   (z,t) profiles (all masks)
+!            --------------
+IMASK = 1
+ymasks(imask) = 'cart'
+IF (LLES_NEB_MASK) THEN
+  IMASK=IMASK+1
+  ymasks(imask) = 'neb'
+  IMASK=IMASK+1
+  ymasks(imask) = 'clear'
+END IF
+IF (LLES_CORE_MASK) THEN
+  IMASK=IMASK+1
+  ymasks(imask) = 'core'
+  IMASK=IMASK+1
+  ymasks(imask) = 'env'
+END IF
+IF (LLES_MY_MASK) THEN
+   DO JI=1,NLES_MASKS_USER
+        IMASK=IMASK+1
+        Write( ynum, '( i3.3 )' ) ji
+        ymasks(imask) = 'user' // ynum
+   END DO
+END IF
+IF (LLES_CS_MASK) THEN
+  IMASK=IMASK+1
+  ymasks(imask) = 'cs1'
+  IMASK=IMASK+1
+  ymasks(imask) = 'cs2'
+  IMASK=IMASK+1
+  ymasks(imask) = 'cs3'
+END IF
+!
+!*      2.0  averaging diagnostics
+!            ---------------------
+!
+ALLOCATE(ZAVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
+ALLOCATE(ZUND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
+
+ZAVG_PTS_ll(:,:,:) = NLES_AVG_PTS_ll(:,:,:)
+ZUND_PTS_ll(:,:,:) = NLES_UND_PTS_ll(:,:,:)
+ZCART_PTS_ll       = (NLESn_ISUP(IMI)-NLESn_IINF(IMI)+1) * (NLESn_JSUP(IMI)-NLESn_JINF(IMI)+1)
+
+tfield%ndims = 3
+tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+ldonorm = .false.
+
+cgroup        = 'Miscellaneous'
+cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
+
+call Les_diachro_write( tpdiafile, zavg_pts_ll,                'AVG_PTS',  'number of points used for averaging',   '1', ymasks )
+call Les_diachro_write( tpdiafile, zavg_pts_ll / zcart_pts_ll, 'AVG_PTSF', 'fraction of points used for averaging', '1', ymasks )
+call Les_diachro_write( tpdiafile, zund_pts_ll,                'UND_PTS',  'number of points below orography',      '1', ymasks )
+call Les_diachro_write( tpdiafile, zund_pts_ll / zcart_pts_ll, 'UND_PTSF', 'fraction of points below orography',    '1', ymasks )
+
+DEALLOCATE(ZAVG_PTS_ll)
+DEALLOCATE(ZUND_PTS_ll)
+!
+!*      2.1  mean quantities
+!            ---------------
+!
+cgroup = 'Mean'
+cgroupcomment = 'Mean vertical profiles of the model variables'
+
+tfield%ndims = 3
+tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+ldonorm = trim(cles_norm_type) /= 'NONE'
+
+call Les_diachro_write( tpdiafile, XLES_MEAN_U,      'MEAN_U',      'Mean U Profile',                        'm s-1',  ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_V,      'MEAN_V',      'Mean V Profile',                        'm s-1',  ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_W,      'MEAN_W',      'Mean W Profile',                        'm s-1',  ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_P,      'MEAN_PRE',    'Mean pressure Profile',                 'Pa',     ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_DP,     'MEAN_DP',     'Mean Dyn production TKE Profile',       'm2 s-3', ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_TP,     'MEAN_TP',     'Mean Thermal production TKE Profile',   'm2 s-3', ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_TR,     'MEAN_TR',     'Mean transport production TKE Profile', 'm2 s-3', ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_DISS,   'MEAN_DISS',   'Mean Dissipation TKE Profile',          'm2 s-3', ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_LM,     'MEAN_LM',     'Mean mixing length Profile',            'm',      ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_RHO,    'MEAN_RHO',    'Mean density Profile',                  'kg m-3', ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_Th,     'MEAN_TH',     'Mean potential temperature Profile',    'K',      ymasks )
+call Les_diachro_write( tpdiafile, XLES_MEAN_Mf,     'MEAN_MF',     'Mass-flux Profile',                     'm s-1',  ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Thl,    'MEAN_THL',    'Mean liquid potential temperature Profile',  'K', ymasks )
+if ( luserv ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Thv,    'MEAN_THV',    'Mean virtual potential temperature Profile', 'K', ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rt,     'MEAN_RT',     'Mean Rt Profile', 'kg kg-1', ymasks )
+if ( luserv ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rv,     'MEAN_RV',     'Mean Rv Profile', 'kg kg-1', ymasks )
+if ( luserv ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rehu,   'MEAN_REHU',   'Mean Rh Profile', 'percent', ymasks )
+if ( luserv ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Qs,     'MEAN_QS',     'Mean Qs Profile', 'kg kg-1', ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_KHt,    'MEAN_KHT',    'Eddy-diffusivity (temperature) Profile', 'm2 s-1', ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_KHr,    'MEAN_KHR',    'Eddy-diffusivity (vapor) Profile',      'm2 s-1', ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rc,     'MEAN_RC',     'Mean Rc Profile',              'kg kg-1', ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Cf,     'MEAN_CF',     'Mean Cf Profile',              '1',       ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf,  'MEAN_INDCF',  'Mean Cf>1-6 Profile (0 or 1)', '1',       ymasks )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf2, 'MEAN_INDCF2', 'Mean Cf>1-5 Profile (0 or 1)', '1',       ymasks )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rr,     'MEAN_RR',     'Mean Rr Profile',              'kg kg-1', ymasks )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_RF,     'MEAN_RF',     'Mean RF Profile',              '1',       ymasks )
+if ( luseri ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Ri,     'MEAN_RI',     'Mean Ri Profile',              'kg kg-1', ymasks )
+if ( luseri ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_If,     'MEAN_IF',     'Mean If Profile',              '1',       ymasks )
+if ( lusers ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rs,     'MEAN_RS',     'Mean Rs Profile',              'kg kg-1', ymasks )
+if ( luserg ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rg,     'MEAN_RG',     'Mean Rg Profile',              'kg kg-1', ymasks )
+if ( luserh ) &
+call Les_diachro_write( tpdiafile, XLES_MEAN_Rh,     'MEAN_RH',     'Mean Rh Profile',              'kg kg-1', ymasks )
+
+if ( nsv > 0 ) then
+  tfield%ndims = 4
+  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
+  tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+  call Les_diachro_write( tpdiafile, XLES_MEAN_Sv, 'MEAN_SV', 'Mean Sv Profiles', 'kg kg-1', ymasks )
+
+  tfield%ndims = 3
+  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4)  = NMNHDIM_UNUSED
+  !tfield%ndimlist(5:) = NMNHDIM_UNUSED
+end if
+
+call Les_diachro_write( tpdiafile, XLES_MEAN_WIND, 'MEANWIND',       'Profile of Mean Modulus of Wind', 'm s-1',      ymasks )
+call Les_diachro_write( tpdiafile, XLES_RESOLVED_MASSFX, 'MEANMSFX', 'Total updraft mass flux',         'kg m-2 s-1', ymasks )
+
+if ( lles_pdf ) then
+  cgroup = 'PDF'
+  cgroupcomment = ''
+
+  tfield%ndims = 4
+  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_PDF
+  tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+  call Les_diachro_write( tpdiafile,   XLES_PDF_TH,  'PDF_TH',  'Pdf potential temperature Profiles', '1', ymasks )
+  call Les_diachro_write( tpdiafile,   XLES_PDF_W,   'PDF_W',   'Pdf vertical velocity Profiles',     '1', ymasks )
+  call Les_diachro_write( tpdiafile,   XLES_PDF_THV, 'PDF_THV', 'Pdf virtual pot. temp. Profiles',    '1', ymasks )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile,   XLES_PDF_RV,  'PDF_RV',  'Pdf Rv Profiles',                    '1', ymasks )
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_PDF_RC,  'PDF_RC',  'Pdf Rc Profiles',                    '1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_PDF_RT,  'PDF_RT',  'Pdf Rt Profiles',                    '1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_PDF_THL, 'PDF_THL', 'Pdf Thl Profiles',                   '1', ymasks )
+  end if
+  if ( luserr ) &
+  call Les_diachro_write( tpdiafile,   XLES_PDF_RR,  'PDF_RR',  'Pdf Rr Profiles',                    '1', ymasks )
+  if ( luseri ) &
+  call Les_diachro_write( tpdiafile,   XLES_PDF_RI,  'PDF_RI',  'Pdf Ri Profiles',                    '1', ymasks )
+  if ( lusers ) &
+  call Les_diachro_write( tpdiafile,   XLES_PDF_RS,  'PDF_RS',  'Pdf Rs Profiles',                    '1', ymasks )
+  if ( luserg ) &
+  call Les_diachro_write( tpdiafile,   XLES_PDF_RG,  'PDF_RG',  'Pdf Rg Profiles',                    '1', ymasks )
+end if
+!
+!*      2.2  resolved quantities
+!            -------------------
+!
+if ( lles_resolved ) then
+  !Prepare metadata (used in Les_diachro_write calls)
+  ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+  ldonorm = trim(cles_norm_type) /= 'NONE'
+
+  cgroup = 'Resolved'
+  cgroupcomment = 'Mean vertical profiles of the resolved fluxes, variances and covariances'
+
+  tfield%ndims = 3
+  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U2, 'RES_U2',  'Resolved <u2> variance',        'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V2, 'RES_V2',  'Resolved <v2> variance',        'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2, 'RES_W2',  'Resolved <w2> variance',        'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UV, 'RES_UV',  'Resolved <uv> Flux',            'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WU, 'RES_WU',  'Resolved <wu> Flux',            'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WV, 'RES_WV',  'Resolved <wv> Flux',            'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ke, 'RES_KE',  'Resolved TKE Profile',          'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_P2, 'RES_P2',  'Resolved pressure variance',    'Pa2',    ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UP, 'RES_UPZ', 'Resolved <up> horizontal Flux', 'Pa s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VP, 'RES_VPZ', 'Resolved <vp> horizontal Flux', 'Pa s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WP, 'RES_WPZ', 'Resolved <wp> vertical Flux',   'Pa s-1', ymasks )
+
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThThv, 'RES_THTV', &
+                          'Resolved potential temperature - virtual potential temperature covariance',        'K2', ymasks )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlThv, 'RES_TLTV', &
+                          'Resolved liquid potential temperature - virtual potential temperature covariance', 'K2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Th2, 'RES_TH2', 'Resolved potential temperature variance', 'K2', ymasks )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Thl2, 'RES_THL2', 'Resolved liquid potential temperature variance', 'K2',&
+                          ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UTh, 'RES_UTH', 'Resolved <uth> horizontal Flux', 'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VTh, 'RES_VTH', 'Resolved <vth> horizontal Flux', 'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WTh, 'RES_WTH', 'Resolved <wth> vertical Flux',   'm K s-1', ymasks )
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThl, 'RES_UTHL', 'Resolved <uthl> horizontal Flux', 'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThl, 'RES_VTHL', 'Resolved <vthl> horizontal Flux', 'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl, 'RES_WTHL', 'Resolved <wthl> vertical Flux',   'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rt2,  'RES_RT2',  'Resolved total water variance',   'kg2 kg-2',      ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt,  'RES_WRT',  'Resolved <wrt> vertical Flux',    'm kg kg-1 s-1', ymasks )
+  end if
+
+  if ( luserv ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThv,  'RES_UTHV', 'Resolved <uthv> horizontal Flux', 'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThv,  'RES_VTHV', 'Resolved <vthv> horizontal Flux', 'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThv,  'RES_WTHV', 'Resolved <wthv> vertical Flux',   'm K s-1',       ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rv2,   'RES_RV2',  'Resolved water vapor variance',   'kg2 kg-2',      ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRv,  'RES_THRV', 'Resolved <thrv> covariance',      'K kg kg-1',     ymasks )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRv, 'RES_TLRV', 'Resolved <thlrv> covariance',     'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRv, 'RES_TVRV', 'Resolved <thvrv> covariance',     'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URv,   'RES_URV',  'Resolved <urv> horizontal flux',  'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRv,   'RES_VRV',  'Resolved <vrv> horizontal flux',  'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv,   'RES_WRV',  'Resolved <wrv> vertical flux',    'm kg kg-1 s-1', ymasks )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rc2,   'RES_RC2',  'Resolved cloud water variance',  'kg2 kg-2',      ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRc,  'RES_THRC', 'Resolved <thrc> covariance',     'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRc, 'RES_TLRC', 'Resolved <thlrc> covariance',    'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRc, 'RES_TVRC', 'Resolved <thvrc> covariance',    'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URc,   'RES_URC',  'Resolved <urc> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRc,   'RES_VRC',  'Resolved <vrc> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc,   'RES_WRC',  'Resolved <wrc> vertical flux',   'm kg kg-1 s-1', ymasks )
+  end if
+
+  if ( luseri ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ri2,   'RES_RI2',  'Resolved cloud ice variance',    'kg2 kg-2',      ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRi,  'RES_THRI', 'Resolved <thri> covariance',     'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRi, 'RES_TLRI', 'Resolved <thlri> covariance',    'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRi, 'RES_TVRI', 'Resolved <thvri> covariance',    'K kg kg-1',     ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URi,   'RES_URI',  'Resolved <uri> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRi,   'RES_VRI',  'Resolved <vri> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi,   'RES_WRI',  'Resolved <wri> vertical flux',   'm kg kg-1 s-1', ymasks )
+  end if
+
+  if ( luserr ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRr,   'RES_WRR',   'Resolved <wrr> vertical flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_INPRR3D,        'INPRR3D',   'Precipitation flux',           'm s-1',         ymasks )
+    call Les_diachro_write( tpdiafile, XLES_MAX_INPRR3D,    'MAXINPR3D', 'Max Precip flux',              'm s-1',         ymasks )
+    call Les_diachro_write( tpdiafile, XLES_EVAP3D,         'EVAP3D',    'Evaporation profile',          'kg kg-1 s-1',   ymasks )
+  end if
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 4
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Sv2,   'RES_SV2',  'Resolved scalar variables variances', 'kg2 kg-2', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThSv,  'RES_THSV', 'Resolved <ThSv> variance',  'K kg kg-1',          ymasks )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlSv, 'RES_TLSV', 'Resolved <ThlSv> variance', 'K kg kg-1',          ymasks )
+    if ( luserv ) &
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvSv, 'RES_TVSV', 'Resolved <ThvSv> variance', 'K kg kg-1',          ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_USv,   'RES_USV',  'Resolved <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VSv,   'RES_VSV',  'Resolved <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv,   'RES_WSV',  'Resolved <wSv> vertical flux', 'm kg kg-1 s-1',   ymasks )
+
+    tfield%ndims = 3
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_UNUSED
+    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U3, 'RES_U3', 'Resolved <u3>', 'm3 s-3', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V3, 'RES_V3', 'Resolved <v3>', 'm3 s-3', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W3, 'RES_W3', 'Resolved <w3>', 'm3 s-3', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U4, 'RES_U4', 'Resolved <u4>', 'm4 s-4', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V4, 'RES_V4', 'Resolved <v4>', 'm4 s-4', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W4, 'RES_W4', 'Resolved <w4>', 'm4 s-4', ymasks )
+
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl2, 'RES_WTL2', 'Resolved <wThl2>', 'm K2 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Thl, 'RES_W2TL', 'Resolved <w2Thl>', 'm2 K s-2', ymasks )
+
+  if ( luserv ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv2,   'RES_WRV2', 'Resolved <wRv2>',   'm kg2 kg-2 s-1',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rv,   'RES_W2RV', 'Resolved <w2Rv>',   'm2 kg kg-1 s-2',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt2,   'RES_WRT2', 'Resolved <wRt2>',   'm kg2 kg-2 s-1',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rt,   'RES_W2RT', 'Resolved <w2Rt>',   'm2 kg kg-1 s-2',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRv, 'RE_WTLRV', 'Resolved <wThlRv>', 'm K kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRt, 'RE_WTLRT', 'Resolved <wThlRt>', 'm K kg kg-1 s-1', ymasks )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc2,   'RES_WRC2', 'Resolved <wRc2>',   'm kg2 kg-2 s-1',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rc,   'RES_W2RC', 'Resolved <w2Rc>',   'm2 kg kg-1 s-2',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRc, 'RE_WTLRC', 'Resolved <wThlRc>', 'm K kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRc,  'RE_WRVRC', 'Resolved <wRvRc>',  'm kg2 kg-2 s-1',  ymasks )
+  end if
+
+  if ( luseri ) then
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi2,   'RES_WRI2', 'Resolved <wRi2>',   'm kg2 kg-2 s-1',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Ri,   'RES_W2RI', 'Resolved <w2Ri>',   'm2 kg kg-1 s-2',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRi, 'RE_WTLRI', 'Resolved <wThlRi>', 'm K kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRi,  'RE_WRVRI', 'Resolved <wRvRi>',  'm kg2 kg-2 s-1',  ymasks )
+  end if
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 4
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv2,   'RES_WSV2', 'Resolved <wSv2>',   'm kg2 kg-2 s-1',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Sv,   'RES_W2SV', 'Resolved <w2Sv>',   'm2 kg kg-1 s-2',  ymasks )
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlSv, 'RE_WTLSV', 'Resolved <wThlSv>', 'm K kg kg-1 s-1', ymasks )
+    if ( luserv ) &
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvSv,  'RE_WRVSV', 'Resolved <wRvSv>',  'm kg2 kg-2 s-1',  ymasks )
+
+    tfield%ndims = 3
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_UNUSED
+    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlPz, 'RES_TLPZ', 'Resolved <Thldp/dz>', 'K Pa m-1',        ymasks )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RtPz,  'RES_RTPZ', 'Resolved <Rtdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RvPz,  'RES_RVPZ', 'Resolved <Rvdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RcPz,  'RES_RCPZ', 'Resolved <Rcdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
+  if ( luseri ) &
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RiPz,  'RES_RIPZ', 'Resolved <Ridp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 4
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_RESOLVED_SvPz, 'RES_SVPZ', 'Resolved <Svdp/dz>', 'kg2 kg-2 Pa m-1', ymasks )
+
+    tfield%ndims = 3
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_UNUSED
+    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UKe, 'RES_UKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VKe, 'RES_VKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WKe, 'RES_WKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
+end if
+!
+!
+!*      2.3  subgrid quantities
+!            ------------------
+!
+if ( lles_subgrid ) then
+  !Prepare metadata (used in Les_diachro_write calls)
+  ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+  ldonorm = trim(cles_norm_type) /= 'NONE'
+
+  cgroup = 'Subgrid'
+  cgroupcomment = 'Mean vertical profiles of the subgrid fluxes, variances and covariances'
+
+  tfield%ndims = 3
+  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Tke,  'SBG_TKE',  'Subgrid TKE',           'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_U2,   'SBG_U2',   'Subgrid <u2> variance', 'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_V2,   'SBG_V2',   'Subgrid <v2> variance', 'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2,   'SBG_W2',   'Subgrid <w2> variance', 'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UV,   'SBG_UV',   'Subgrid <uv> flux',     'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WU,   'SBG_WU',   'Subgrid <wu> flux',     'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WV,   'SBG_WV',   'Subgrid <wv> flux',     'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Thl2, 'SBG_THL2', 'Subgrid liquid potential temperature variance', &
+                          'K2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UThl, 'SBG_UTHL', 'Subgrid horizontal flux of liquid potential temperature',  &
+                          'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_VThl, 'SBG_VTHL', 'Subgrid horizontal flux of liquid potential temperature',  &
+                          'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl, 'SBG_WTHL', 'Subgrid vertical flux of liquid potential temperature', &
+                          'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WP,   'SBG_WP',   'Subgrid <wp> vertical Flux', 'm Pa s-1', ymasks )
+
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_THLUP_MF, 'THLUP_MF', 'Subgrid <thl> of updraft',    'K',          ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RTUP_MF,  'RTUP_MF',  'Subgrid <rt> of updraft',     'kg kg-1',    ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RVUP_MF,  'RVUP_MF',  'Subgrid <rv> of updraft',     'kg kg-1',    ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RCUP_MF,  'RCUP_MF',  'Subgrid <rc> of updraft',     'kg kg-1',    ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RIUP_MF,  'RIUP_MF',  'Subgrid <ri> of updraft',     'kg kg-1',    ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUP_MF,   'WUP_MF',   'Subgrid <w> of updraft',      'm s-1',      ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_MASSFLUX, 'MAFLX_MF', 'Subgrid <MF> of updraft',     'kg m-2 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_DETR,     'DETR_MF',  'Subgrid <detr> of updraft',   'kg m-3 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_ENTR,     'ENTR_MF',  'Subgrid <entr> of updraft',   'kg m-3 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_FRACUP,   'FRCUP_MF', 'Subgrid <FracUp> of updraft', '1',          ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_THVUP_MF, 'THVUP_MF', 'Subgrid <thv> of updraft',    'K',          ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHLMF,   'WTHL_MF',  'Subgrid <wthl> of mass flux convection scheme', &
+                          'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRTMF,    'WRT_MF',   'Subgrid <wrt> of mass flux convection scheme',  &
+                          'm kg kg-1 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHVMF,   'WTHV_MF',  'Subgrid <wthv> of mass flux convection scheme', &
+                          'm K s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUMF,     'WU_MF',    'Subgrid <wu> of mass flux convection scheme',   &
+                          'm2 s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WVMF,     'WV_MF',    'Subgrid <wv> of mass flux convection scheme',   &
+                          'm2 s-2', ymasks )
+
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_PHI3,  'SBG_PHI3', 'Subgrid Phi3 function',         '1',      ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_LMix,  'SBG_LMIX', 'Subgrid Mixing Length',         '1',      ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_LDiss, 'SBG_LDIS', 'Subgrid Dissipation Length',    '1',      ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Km,    'SBG_KM',   'Eddy diffusivity for momentum', 'm2 s-1', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Kh,    'SBG_KH',   'Eddy diffusivity for heat',     'm2 s-1', ymasks )
+
+  if ( luserv ) then
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThv,  'SBG_WTHV', 'Subgrid vertical flux of liquid potential temperature', &
+                            'm K s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rt2,   'SBG_RT2',  'Subgrid total water variance', 'kg2 kg-2', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_ThlRt, 'SBG_TLRT', 'Subgrid <thlrt> covariance',  'K kg kg-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_URt,   'SBG_URT',  'Subgrid total water horizontal flux', &
+                            'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRt,   'SBG_VRT',  'Subgrid total water horizontal flux', &
+                            'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRt,   'SBG_WRT',  'Subgrid total water vertical flux',   &
+                            'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_PSI3,  'SBG_PSI3', 'Subgrid Psi3 function', '1', ymasks )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rc2, 'SBG_RC2', 'Subgrid cloud water variance',        'kg2 kg-2', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_URc, 'SBG_URC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', &
+                            ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRc, 'SBG_VRC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', &
+                            ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRc, 'SBG_WRC', 'Subgrid cloud water vertical flux',   'm kg kg-1 s-1', &
+                            ymasks )
+  end if
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 4
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_USv, 'SBG_USV', 'Subgrid <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VSv, 'SBG_VSV', 'Subgrid <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
+    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WSv, 'SBG_WSV', 'Subgrid <wSv> vertical flux',   'm kg kg-1 s-1', ymasks )
+
+    tfield%ndims = 3
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+    tfield%ndimlist(4)  = NMNHDIM_UNUSED
+    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
+
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UTke,  'SBG_UTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_VTke,  'SBG_VTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTke,  'SBG_WTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2Thl, 'SBG_W2TL', 'Subgrid flux of subgrid kinetic energy', 'm2 K s-2', ymasks )
+  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl2, 'SBG_WTL2', 'Subgrid flux of subgrid kinetic energy', 'm K2 s-1', ymasks )
+end if
+
+
+!Prepare metadata (used in Les_diachro_write calls)
+tfield%ndims = 2
+tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+tfield%ndimlist(3:) = NMNHDIM_UNUSED
+
+ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+ldonorm = trim(cles_norm_type) /= 'NONE'
+!
+!*      2.4  Updraft quantities
+!            ------------------
+!
+if ( lles_updraft ) then
+  cgroup = 'Updraft'
+  cgroupcomment = 'Updraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
+
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT,     'UP_FRAC', 'Updraft fraction',                                 '1' )
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_W,   'UP_W',    'Updraft W mean value',                             'm s-1' )
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th,  'UP_TH',   'Updraft potential temperature mean value',         'K' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl, 'UP_THL',  'Updraft liquid potential temperature mean value',  'K' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thv, 'UP_THV',  'Updraft virtual potential temperature mean value', 'K' )
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ke,  'UP_KE',   'Updraft resolved TKE mean value',                   'm2 s-2' )
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Tke, 'UP_TKE',  'Updraft subgrid TKE mean value',                    'm2 s-2' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv,  'UP_RV',   'Updraft water vapor mean value',                    'kg kg-1' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc,  'UP_RC',   'Updraft cloud water mean value',                    'kg kg-1' )
+  if ( luserr ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rr,  'UP_RR',   'Updraft rain mean value',                           'kg kg-1' )
+  if ( luseri ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri,  'UP_RI',   'Updraft ice mean value',                            'kg kg-1' )
+  if ( lusers ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rs,  'UP_RS',   'Updraft snow mean value',                           'kg kg-1' )
+  if ( luserg ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rg,  'UP_RG',   'Updraft graupel mean value',                        'kg kg-1' )
+  if ( luserh ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rh,  'UP_RH',   'Updraft hail mean value',                           'kg kg-1' )
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 3
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv, 'UP_SV', 'Updraft scalar variables mean values', 'kg kg-1' )
+
+    tfield%ndims = 2
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3) = NMNHDIM_UNUSED
+    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th2,    'UP_TH2',  'Updraft resolved Theta variance',             'K2' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl2,   'UP_THL2', 'Updraft resolved Theta_l variance',           'K2' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThThv,  'UP_THTV', 'Updraft resolved Theta Theta_v covariance',   'K2' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlThv, 'UP_TLTV', 'Updraft resolved Theta_l Theta_v covariance', 'K2' )
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WTh,    'UP_WTH',  'Updraft resolved WTh flux',                    'm K s-1' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThl,   'UP_WTHL', 'Updraft resolved WThl flux',                   'm K s-1' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThv,   'UP_WTHV', 'Updraft resolved WThv flux',                   'm K s-1' )
+
+  if ( luserv ) then
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv2,   'UP_RV2',   'Updraft resolved water vapor variance', 'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRv,  'UP_THRV',  'Updraft resolved <thrv> covariance',    'K kg kg-1' )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRv, 'UP_THLRV', 'Updraft resolved <thlrv> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRv, 'UP_THVRV', 'Updraft resolved <thvrv> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRv,   'UP_WRV',   'Updraft resolved <wrv> vertical flux',  'm kg kg-1 s-1' )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc2,   'UP_RC2',   'Updraft resolved cloud water variance', 'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRc,  'UP_THRC',  'Updraft resolved <thrc> covariance',    'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRc, 'UP_THLRC', 'Updraft resolved <thlrc> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRc, 'UP_THVRC', 'Updraft resolved <thvrc> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRc,   'UP_WRC',   'Updraft resolved <wrc> vertical flux',  'm kg kg-1 s-1' )
+  end if
+
+  if ( luseri ) then
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri2,   'UP_RI2',   'Updraft resolved cloud ice variance',   'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRi,  'UP_THRI',  'Updraft resolved <thri> covariance',    'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRi, 'UP_THLRI', 'Updraft resolved <thlri> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRi, 'UP_THVRI', 'Updraft resolved <thvri> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRi,   'UP_WRI',   'Updraft resolved <wri> vertical flux',  'm kg kg-1 s-1' )
+  end if
+
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 3
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv2,   'UP_SV2',   'Updraft resolved scalar variables variances', 'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThSv,  'UP_THSV',  'Updraft resolved <ThSv> variance',            'K kg kg-1' )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlSv, 'UP_THLSV', 'Updraft resolved <ThlSv> variance',           'K kg kg-1' )
+    if ( luserv ) &
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvSv, 'UP_THVSV', 'Updraft resolved <ThvSv> variance',           'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WSv,   'UP_WSV',   'Updraft resolved <wSv> vertical flux', 'm kg kg-1 s-1' )
+
+    tfield%ndims = 2
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3) = NMNHDIM_UNUSED
+    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
+  end if
+end if
+!
+!
+!*      2.5  Downdraft quantities
+!            --------------------
+!
+if ( lles_downdraft ) then
+  cgroup = 'Downdraft'
+  cgroupcomment = 'Downdraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
+
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT,     'DW_FRAC', 'Downdraft fraction',                                 '1' )
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_W,   'DW_W',    'Downdraft W mean value',                             'm s-1' )
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th,  'DW_TH',   'Downdraft potential temperature mean value',         'K' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl, 'DW_THL',  'Downdraft liquid potential temperature mean value',  'K' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thv, 'DW_THV',  'Downdraft virtual potential temperature mean value', 'K' )
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ke,  'DW_KE',   'Downdraft resolved TKE mean value',                 'm2 s-2' )
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Tke, 'DW_TKE',  'Downdraft subgrid TKE mean value',                  'm2 s-2' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv,  'DW_RV',   'Downdraft water vapor mean value',                 'kg kg-1' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc,  'DW_RC',   'Downdraft cloud water mean value',                 'kg kg-1' )
+  if ( luserr ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rr,  'DW_RR',   'Downdraft rain mean value',                        'kg kg-1' )
+  if ( luseri ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri,  'DW_RI',   'Downdraft ice mean value',                         'kg kg-1' )
+  if ( lusers ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rs,  'DW_RS',   'Downdraft snow mean value',                        'kg kg-1' )
+  if ( luserg ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rg,  'DW_RG',   'Downdraft graupel mean value',                     'kg kg-1' )
+  if ( luserh ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rh,  'DW_RH',   'Downdraft hail mean value',                        'kg kg-1' )
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 3
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv, 'DW_SV', 'Downdraft scalar variables mean values', 'kg kg-1' )
+
+    tfield%ndims = 2
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3) = NMNHDIM_UNUSED
+    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
+  end if
+
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th2,    'DW_TH2',  'Downdraft resolved Theta variance',             'K2' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl2,   'DW_THL2', 'Downdraft resolved Theta_l variance',           'K2' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThThv,  'DW_THTV', 'Downdraft resolved Theta Theta_v covariance',   'K2' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlThv, 'DW_TLTV', 'Downdraft resolved Theta_l Theta_v covariance', 'K2' )
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WTh,    'DW_WTH',  'Downdraft resolved WTh flux',                   'm K s-1' )
+  if ( luserc ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThl,   'DW_WTHL', 'Downdraft resolved WThl flux',                  'm K s-1' )
+  if ( luserv ) &
+  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThv,   'DW_WTHV', 'Downdraft resolved WThv flux',                  'm K s-1' )
+
+  if ( luserv ) then
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv2,   'DW_RV2',   'Downdraft resolved water vapor variance', 'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRv,  'DW_THRV',  'Downdraft resolved <thrv> covariance',    'K kg kg-1' )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRv, 'DW_THLRV', 'Downdraft resolved <thlrv> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRv, 'DW_THVRV', 'Downdraft resolved <thvrv> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRv,   'DW_WRV',   'Downdraft resolved <wrv> vertical flux',  &
+                            'm kg kg-1 s-1' )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc2,   'DW_RC2',   'Downdraft resolved cloud water variance', 'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRc,  'DW_THRC',  'Downdraft resolved <thrc> covariance',    'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRc, 'DW_THLRC', 'Downdraft resolved <thlrc> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRc, 'DW_THVRC', 'Downdraft resolved <thvrc> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRc,   'DW_WRC',   'Downdraft resolved <wrc> vertical flux',  &
+                            'm kg kg-1 s-1' )
+  end if
+
+  if ( luseri ) then
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri2,   'DW_RI2',   'Downdraft resolved cloud ice variance',   'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRi,  'DW_THRI',  'Downdraft resolved <thri> covariance',    'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRi, 'DW_THLRI', 'Downdraft resolved <thlri> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRi, 'DW_THVRI', 'Downdraft resolved <thvri> covariance',   'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRi,   'DW_WRI',   'Downdraft resolved <wri> vertical flux',  &
+                            'm kg kg-1 s-1' )
+  end if
+
+
+  if ( nsv > 0 ) then
+    tfield%ndims = 3
+    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
+    tfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv2,   'DW_SV2',   'Downdraft resolved scalar variables variances', &
+                            'kg2 kg-2' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThSv,  'DW_THSV',  'Downdraft resolved <ThSv> variance',            &
+                            'K kg kg-1' )
+    if ( luserc ) &
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlSv, 'DW_THLSV', 'Downdraft resolved <ThlSv> variance',           &
+                            'K kg kg-1' )
+    if ( luserv ) &
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvSv, 'DW_THVSV', 'Downdraft resolved <ThvSv> variance',           &
+                            'K kg kg-1' )
+    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WSv,   'DW_WSV',   'Downdraft resolved <wSv> vertical flux',        &
+                            'm kg kg-1 s-1' )
+
+    tfield%ndims = 2
+    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+    tfield%ndimlist(3) = NMNHDIM_UNUSED
+    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
+  end if
+end if
+!
+!-------------------------------------------------------------------------------
+!
+!*      3.   surface normalization parameters
+!            --------------------------------
+!
+cgroup = 'Radiation'
+cgroupcomment = 'Radiative terms'
+
+!Prepare metadata (used in Les_diachro_write calls)
+tfield%ndims = 2
+tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+tfield%ndimlist(3:) = NMNHDIM_UNUSED
+
+ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+ldonorm = .false.
+
+call Les_diachro_write( tpdiafile, XLES_SWU,      'SWU',      'SW upward radiative flux',          'W m-2' )
+call Les_diachro_write( tpdiafile, XLES_SWD,      'SWD',      'SW downward radiative flux',        'W m-2' )
+call Les_diachro_write( tpdiafile, XLES_LWU,      'LWU',      'LW upward radiative flux',          'W m-2' )
+call Les_diachro_write( tpdiafile, XLES_LWD,      'LWD',      'LW downward radiative flux',        'W m-2' )
+call Les_diachro_write( tpdiafile, XLES_DTHRADSW, 'DTHRADSW', 'SW radiative temperature tendency', 'K s-1' )
+call Les_diachro_write( tpdiafile, XLES_DTHRADLW, 'DTHRADLW', 'LW radiative temperature tendency', 'K s-1' )
+!writes mean_effective radius at all levels
+call Les_diachro_write( tpdiafile, XLES_RADEFF,   'RADEFF',   'Mean effective radius',             'micron' )
+
+
+cgroup = 'Surface'
+cgroupcomment = 'Averaged surface fields'
+
+! !Prepare metadate (used in Les_diachro_write calls)
+tfield%ndims = 1
+tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
+tfield%ndimlist(2:) = NMNHDIM_UNUSED
+
+call Les_diachro_write( tpdiafile, XLES_Q0, 'Q0', 'Sensible heat flux at the surface', 'm K s-1' )
+if ( luserv ) &
+call Les_diachro_write( tpdiafile, XLES_E0, 'E0', 'Latent heat flux at the surface',   'kg kg-1 m s-1' )
+
+if ( nsv > 0 ) then
+  tfield%ndims = 2
+  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
+  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_SV
+  tfield%ndimlist(3:) = NMNHDIM_UNUSED
+
+  call Les_diachro_write( tpdiafile, XLES_SV0, 'SV0', 'Scalar variable fluxes at the surface', 'kg kg-1 m s-1' )
+
+  tfield%ndims = 1
+  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
+  tfield%ndimlist(2)  = NMNHDIM_UNUSED
+  !tfield%ndimlist(3:) = NMNHDIM_UNUSED
+end if
+
+call Les_diachro_write( tpdiafile, XLES_USTAR,      'Ustar',      'Friction velocity',                   'm s-1' )
+call Les_diachro_write( tpdiafile, XLES_WSTAR,      'Wstar',      'Convective velocity',                 'm s-1' )
+call Les_diachro_write( tpdiafile, XLES_MO_LENGTH,  'L_MO',       'Monin-Obukhov length',                'm' )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_PRECFR,     'PREC_FRAC',  'Fraction of columns where rain at surface',  '1' )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_INPRR,      'INST_PREC',  'Instantaneous precipitation rate',       'mm day-1' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_INPRC,      'INST_SEDIM', 'Instantaneous cloud precipitation rate', 'mm day-1' )
+if ( luserc .and. ( ldeposc .or. ldepoc ) ) &
+call Les_diachro_write( tpdiafile, XLES_INDEP,      'INST_DEPOS', 'Instantaneous cloud deposition rate',    'mm day-1' )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_RAIN_INPRR, 'RAIN_PREC',  'Instantaneous precipitation rate over rainy grid cells', &
+                        'mm day-1' )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_ACPRR,      'ACCU_PREC',  'Accumulated precipitation rate',             'mm' )
+
+
+cgroup        = 'Miscellaneous'
+cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
+
+call Les_diachro_write( tpdiafile, XLES_BL_HEIGHT,  'BL_H',       'Boundary Layer Height',               'm' )
+call Les_diachro_write( tpdiafile, XLES_INT_TKE,    'INT_TKE',    'Vertical integrated TKE',             'm2 s-2' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_ZCB,        'ZCB',        'Cloud base Height',                   'm' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_CFtot,      'ZCFTOT',     'Total cloud cover (rc>1e-6)',         '1' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_CF2tot,     'ZCF2TOT',    'Total cloud cover (rc>1e-5)',         '1' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_LWP,        'LWP',        'Liquid Water path',                   'kg m-2' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_LWPVAR,     'LWPVAR',     'Liquid Water path variance',          'kg m-4' )
+if ( luserr ) &
+call Les_diachro_write( tpdiafile, XLES_RWP,        'RWP',        'Rain Water path',                     'kg m-2' )
+if ( luseri ) &
+call Les_diachro_write( tpdiafile, XLES_IWP,        'IWP',        'Ice Water path',                      'kg m-2' )
+if ( lusers ) &
+call Les_diachro_write( tpdiafile, XLES_SWP,        'SWP',        'Snow Water path',                     'kg m-2' )
+if ( luserg ) &
+call Les_diachro_write( tpdiafile, XLES_GWP,        'GWP',        'Graupel Water path',                  'kg m-2' )
+if ( luserh ) &
+call Les_diachro_write( tpdiafile, XLES_HWP,        'HWP',        'Hail Water path',                     'kg m-2' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_ZMAXCF,     'ZMAXCF',     'Height of Cloud fraction maximum (rc>1e-6)', 'm' )
+if ( luserc ) &
+call Les_diachro_write( tpdiafile, XLES_ZMAXCF2,    'ZMAXCF2',    'Height of Cloud fraction maximum (rc>1e-5)', 'm' )
+
+!-------------------------------------------------------------------------------
+!
+!*      4.   LES budgets
+!            -----------
+!
+call Write_les_budget_n( tpdiafile )
+
+if ( luserv )  call Write_les_rt_budget_n( tpdiafile )
+
+if ( nsv > 0 ) call Write_les_sv_budget_n( tpdiafile )
+!
+!-------------------------------------------------------------------------------
+!
+!*      5.   (ni,z,t) and (nj,z,t) 2points correlations
+!            ------------------------------------------
+!
+if ( nspectra_k > 0 ) then
+  tfieldx%cstdname = ''
+  tfieldx%ngrid    = 0 !Not on the Arakawa grid
+  tfieldx%ntype    = TYPEREAL
+  tfieldx%ndims    = 3
+  tfieldx%ndimlist(1)  = NMNHDIM_SPECTRA_2PTS_NI
+  tfieldx%ndimlist(2)  = NMNHDIM_SPECTRA_LEVEL
+  tfieldx%ndimlist(3)  = NMNHDIM_BUDGET_LES_TIME
+  tfieldx%ndimlist(4:) = NMNHDIM_UNUSED
+
+  tfieldy%cstdname = ''
+  tfieldy%ngrid    = 0 !Not on the Arakawa grid
+  tfieldy%ntype    = TYPEREAL
+  tfieldy%ndims    = 3
+  tfieldy%ndimlist(1)  = NMNHDIM_SPECTRA_2PTS_NJ
+  tfieldy%ndimlist(2)  = NMNHDIM_SPECTRA_LEVEL
+  tfieldy%ndimlist(3)  = NMNHDIM_BUDGET_LES_TIME
+  tfieldy%ndimlist(4:) = NMNHDIM_UNUSED
+
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_UU, XCORRj_UU, 'UU', 'U*U     2 points correlations', 'm2 s-2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_VV, XCORRj_VV, 'VV', 'V*V     2 points correlations', 'm2 s-2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_WW, XCORRj_WW, 'WW', 'W*W     2 points correlations', 'm2 s-2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_UV, XCORRj_UV, 'UV', 'U*V     2 points correlations', 'm2 s-2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_WU, XCORRj_WU, 'WU', 'W*U     2 points correlations', 'm2 s-2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_WV, XCORRj_WV, 'WV', 'W*V     2 points correlations', 'm2 s-2' )
+
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_ThTh, XCORRj_ThTh, 'THTH', 'Th*Th   2 points correlations', 'K2' )
+  if ( luserc ) &
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlThl, XCORRj_ThlThl, 'TLTL', 'Thl*Thl 2 points correlations', 'K2' )
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_WTh,    XCORRj_WTh,    'WTH',  'W*Th    2 points correlations', 'm K s-1' )
+  if ( luserc ) &
+  call Les_diachro_2pt_write( tpdiafile, XCORRi_WThl,   XCORRj_WThl,   'WTHL', 'W*Thl   2 points correlations', 'm K s-1' )
+
+  if ( luserv ) then
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_RvRv,  XCORRj_RvRv,  'RVRV', 'rv*rv   2 points correlations', 'kg2 kg-2' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRv,  XCORRj_ThRv,  'THRV', 'TH*RV   2 points correlations', 'K kg kg-1' )
+    if ( luserc ) &
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRv, XCORRj_ThlRv, 'TLRV', 'thl*rv  2 points correlations', 'K kg kg-1' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRv,   XCORRj_WRv,   'WRV',  'W*rv    2 points correlations', 'm kg s-1 kg-1' )
+  end if
+
+  if ( luserc ) then
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_RcRc,  XCORRj_RcRc,  'RCRC', 'rc*rc   2 points correlations', 'kg2 kg-2' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRc,  XCORRj_ThRc,  'THRC', 'th*rc   2 points correlations', 'K kg kg-1' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRc, XCORRj_ThlRc, 'TLRC', 'thl*rc  2 points correlations', 'K kg kg-1' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRc,   XCORRj_WRc,   'WRC',  'W*rc    2 points correlations', 'm kg s-1 kg-1' )
+  end if
+
+  if ( luseri ) then
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_RiRi,  XCORRj_RiRi,  'RIRI', 'ri*ri   2 points correlations', 'kg2 kg-2' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRi,  XCORRj_ThRi,  'THRI', 'th*ri   2 points correlations', 'K kg kg-1' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRi, XCORRj_ThlRi, 'TLRI', 'thl*ri  2 points correlations', 'K kg kg-1' )
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRi,   XCORRj_WRi,   'WRI',  'W*ri    2 points correlations', 'm kg s-1 kg-1' )
+  end if
+
+!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!)
+  do jsv = 1, nsv
+    Write( ygroup, fmt = "( a2, i3.3 )" ) "SS", jsv
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_SvSv(:,:,:,JSV), XCORRj_SvSv(:,:,:,JSV), ygroup, &
+                                'Sv*Sv   2 points correlations','kg2 kg-2' )
+  end do
+
+!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!)
+  do jsv = 1, nsv
+    Write( ygroup, fmt = "( a2, i3.3 )" ) "WS", jsv
+    call Les_diachro_2pt_write( tpdiafile, XCORRi_WSv(:,:,:,JSV), XCORRj_WSv(:,:,:,JSV), ygroup, &
+                                'W*Sv    2 points correlations','m kg s-1 kg-1' )
+  end do
+end if
+!
+!-------------------------------------------------------------------------------
+!
+!*      6.   spectra and time-averaged profiles (if first call to WRITE_LES_n)
+!            ----------------------------------
+!
+call Les_spec_n( tpdiafile )
+!
+!-------------------------------------------------------------------------------
+!
+!*      7.   deallocations
+!            -------------
+!
+CALL LES_DEALLOCATE('XLES_CURRENT_Z')
+
+IF (CLES_NORM_TYPE/='NONE' ) THEN
+  CALL LES_DEALLOCATE('XLES_NORM_M')
+  CALL LES_DEALLOCATE('XLES_NORM_S')
+  CALL LES_DEALLOCATE('XLES_NORM_K')
+  CALL LES_DEALLOCATE('XLES_NORM_RHO')
+  CALL LES_DEALLOCATE('XLES_NORM_RV')
+  CALL LES_DEALLOCATE('XLES_NORM_SV')
+  CALL LES_DEALLOCATE('XLES_NORM_P')
+END IF
+
+end subroutine Write_les_n
+
+!------------------------------------------------------------------------------
+
+subroutine Les_diachro_write_1D( tpdiafile, pdata, hmnhname, hcomment, hunits )
+
+use modd_io,          only: tfiledata
+
+use mode_les_diachro, only: Les_diachro
+
+type(tfiledata),    intent(in) :: tpdiafile ! file to write
+real, dimension(:), intent(in) :: pdata
+character(len=*),   intent(in) :: hmnhname
+character(len=*),   intent(in) :: hcomment
+character(len=*),   intent(in) :: hunits
+
+tfield%cmnhname  = hmnhname
+tfield%clongname = hmnhname
+tfield%ccomment  = hcomment
+tfield%cunits    = hunits
+
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
+
+end subroutine Les_diachro_write_1D
+
+!------------------------------------------------------------------------------
+
+subroutine Les_diachro_write_2D( tpdiafile, pdata, hmnhname, hcomment, hunits )
+
+use modd_io,          only: tfiledata
+
+use mode_les_diachro, only: Les_diachro
+
+type(tfiledata),      intent(in) :: tpdiafile ! file to write
+real, dimension(:,:), intent(in) :: pdata
+character(len=*),     intent(in) :: hmnhname
+character(len=*),     intent(in) :: hcomment
+character(len=*),     intent(in) :: hunits
+
+tfield%cmnhname  = hmnhname
+tfield%clongname = hmnhname
+tfield%ccomment  = hcomment
+tfield%cunits    = hunits
+
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
+
+end subroutine Les_diachro_write_2D
+
+!------------------------------------------------------------------------------
+
+subroutine Les_diachro_write_3D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks )
+
+use modd_io,          only: tfiledata
+
+use mode_les_diachro, only: Les_diachro
+
+type(tfiledata),                          intent(in) :: tpdiafile ! file to write
+real,             dimension(:,:,:),       intent(in) :: pdata
+character(len=*),                         intent(in) :: hmnhname
+character(len=*),                         intent(in) :: hcomment
+character(len=*),                         intent(in) :: hunits
+character(len=*), dimension(:), optional, intent(in) :: hmasks
+
+tfield%cmnhname  = hmnhname
+tfield%clongname = hmnhname
+tfield%ccomment  = hcomment
+tfield%cunits    = hunits
+
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
+
+end subroutine Les_diachro_write_3D
+
+!------------------------------------------------------------------------------
+
+subroutine Les_diachro_write_4D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks )
+
+use modd_io,          only: tfiledata
+
+use mode_les_diachro, only: Les_diachro
+
+type(tfiledata),                            intent(in) :: tpdiafile ! file to write
+real,             dimension(:,:,:,:),       intent(in) :: pdata
+character(len=*),                           intent(in) :: hmnhname
+character(len=*),                           intent(in) :: hcomment
+character(len=*),                           intent(in) :: hunits
+character(len=*), dimension(:),   optional, intent(in) :: hmasks
+
+tfield%cmnhname  = hmnhname
+tfield%clongname = hmnhname
+tfield%ccomment  = hcomment
+tfield%cunits    = hunits
+
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
+
+end subroutine Les_diachro_write_4D
+
+!------------------------------------------------------------------------------
+
+subroutine Les_diachro_2pt_write( tpdiafile, zcorri, zcorrj, hmnhname, hcomment, hunits )
+
+use modd_io,          only: tfiledata
+
+use mode_les_diachro, only: Les_diachro_2pt
+
+type(tfiledata),          intent(in) :: tpdiafile ! file to write
+real, dimension(:,:,:),   intent(in) :: zcorri    ! 2 pts correlation data
+real, dimension(:,:,:),   intent(in) :: zcorrj    ! 2 pts correlation data
+character(len=*),         intent(in) :: hmnhname
+character(len=*),         intent(in) :: hcomment
+character(len=*),         intent(in) :: hunits
+
+tfieldx%cmnhname  = hmnhname
+tfieldx%clongname = hmnhname
+tfieldx%ccomment  = hcomment
+tfieldx%cunits    = hunits
+
+tfieldy%cmnhname  = hmnhname
+tfieldy%clongname = hmnhname
+tfieldy%ccomment  = hcomment
+tfieldy%cunits    = hunits
+
+call Les_diachro_2pt( tpdiafile, tfieldx, tfieldy, zcorri, zcorrj )
+
+end subroutine Les_diachro_2pt_write
+
+!------------------------------------------------------------------------------
+
+end module mode_write_les_n
diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90
index b82b51d2049279137762e857576db41862f72151..38f8fed026c66cf7102942d0cb5d9ed0d25fc317 100644
--- a/src/mesonh/micro/ini_rain_ice.f90
+++ b/src/mesonh/micro/ini_rain_ice.f90
@@ -1149,12 +1149,18 @@ END IF
   XFRMIN(7:9)=1.
   XFRMIN(10) =10.
   XFRMIN(11) =1.
-  XFRMIN(12) =100.
+  XFRMIN(12) =100. !0 in suparar
   XFRMIN(13) =1.0E-15
   XFRMIN(14) =120.
   XFRMIN(15) =1.0E-4
   XFRMIN(16:20)=0.
-  XFRMIN(21)=1.
+  XFRMIN(21:22)=1.
+  XFRMIN(23)=0.5
+  XFRMIN(24)=1.5
+  XFRMIN(25)=30.
+  XFRMIN(26:38)=0.
+  XFRMIN(39)=0.25
+  XFRMIN(40)=0.15
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/turb/les_mean_subgrid.f90 b/src/mesonh/turb/les_mean_subgrid.f90
new file mode 100644
index 0000000000000000000000000000000000000000..24895fdb06e56b851a2297c1c025eb9881da7c3c
--- /dev/null
+++ b/src/mesonh/turb/les_mean_subgrid.f90
@@ -0,0 +1,362 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source$ $Revision$
+! MASDEV4_7 les 2006/08/30 18:41:10
+!-----------------------------------------------------------------
+!      #####################
+MODULE MODI_LES_MEAN_SUBGRID
+!      #####################
+!
+INTERFACE LES_MEAN_SUBGRID
+!
+      SUBROUTINE LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
+
+REAL,    DIMENSION(:,:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
+!
+END SUBROUTINE LES_MEAN_SUBGRID_3D
+!
+
+      SUBROUTINE LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
+
+REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:),   INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,       INTENT(IN)    :: OSUM
+!
+END SUBROUTINE LES_MEAN_SUBGRID_SURF
+!
+END INTERFACE
+!
+END MODULE MODI_LES_MEAN_SUBGRID
+!
+!     ##############################################
+      SUBROUTINE LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
+!     ##############################################
+!
+!
+!!****  *LES_MEAN_SUBGRID* computes the average of one subgrid
+!!                         field on one processor
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         07/02/00
+!!      V. Masson        06/11/02 use of 2D masks
+!!       C.Lac           10/2014 : Correction on user masks
+!!
+!! --------------------------------------------------------------------------
+!       
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_LES
+!
+USE MODI_LES_VER_INT
+USE MODI_LES_MEAN_1PROC
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+REAL,    DIMENSION(:,:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
+!
+!
+!       0.2  declaration of local variables
+!
+REAL,    DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA_MEAN,1)) :: ZA_LES
+REAL,    DIMENSION(SIZE(PA_MEAN,1))                       :: ZA_MEAN
+REAL,    DIMENSION(SIZE(PA_MEAN,1))                       :: ZA_MEAN_OLD
+LOGICAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA_MEAN,1)) :: GMASK
+!
+INTEGER, DIMENSION(SIZE(PA_MEAN,1)) :: IAVG_PTS
+INTEGER, DIMENSION(SIZE(PA_MEAN,1)) :: IUND_PTS
+!
+INTEGER                             :: IMASK     ! mask counter
+INTEGER                             :: JI        ! loop control
+!-------------------------------------------------------------------------------
+!
+IF (.NOT. LLES_CALL) RETURN
+!
+ZA_MEAN_OLD(:) = 0.
+!-------------------------------------------------------------------------------
+!
+!* interpolation on LES vertical levels.
+!
+CALL LES_VER_INT(PA,ZA_LES)
+!
+!* subgrid computations on cartesian mask
+!  --------------------------------------
+!
+IMASK = 1
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+CALL LES_MEAN_1PROC(ZA_LES, LLES_CURRENT_CART_MASK(:,:,:), ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+IF (PRESENT(OSUM)) THEN
+  IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+END IF
+PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+!-------------------------------------------------------------------------------
+!
+!* subgrid computations on nebulosity/clear-sky masks
+!  --------------------------------------------------
+!
+IF (LLES_NEB_MASK) THEN
+!
+!* on nebulosity mask
+!  ------------------
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_NEB_MASK (:,:,:) .AND.  LLES_CURRENT_CART_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+!* on clear-sky mask
+!  -----------------
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = (.NOT. LLES_CURRENT_NEB_MASK (:,:,:)) .AND. LLES_CURRENT_CART_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!* subgrid computations on core/no core masks
+!  --------------------------------------------------------------
+!
+IF (LLES_CORE_MASK) THEN
+!
+!* on core mask
+!  ------------
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_CORE_MASK(:,:,:) .AND. LLES_CURRENT_CART_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+!* on NO core mask
+!  ------------------------
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = (.NOT. LLES_CURRENT_CORE_MASK(:,:,:)) .AND. LLES_CURRENT_CART_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!* subgrid computations on conditional sampling mask
+!  -------------------------------------------------
+!
+IF (LLES_CS_MASK) THEN
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_CS1_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_CS2_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+!
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_CS3_MASK(:,:,:)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!* subgrid computations on user mask
+!  ---------------------------------
+!
+IF (LLES_MY_MASK) THEN
+ DO JI=1,NLES_MASKS_USER
+  IMASK = IMASK + 1
+!
+  GMASK(:,:,:) = LLES_CURRENT_MY_MASKS(:,:,:,JI)
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+  CALL LES_MEAN_1PROC(ZA_LES, GMASK, ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+  IF (PRESENT(OSUM)) THEN
+    IF (OSUM) ZA_MEAN_OLD(:) = PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK)
+  END IF
+  PA_MEAN(:,NLES_CURRENT_TCOUNT,IMASK) = ZA_MEAN_OLD(:) + ZA_MEAN(:)
+ END DO
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE LES_MEAN_SUBGRID_3D
+!
+!     ##############################################
+      SUBROUTINE LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
+!     ##############################################
+!
+!
+!!****  *LES_MEAN_SUBGRID* computes the average of one subgrid
+!!                         field on one processor
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         07/02/00
+!!
+!! --------------------------------------------------------------------------
+!       
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_LES
+!
+USE MODI_LES_MEAN_1PROC
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+REAL,    DIMENSION(:,:), INTENT(IN)    :: PA
+!
+REAL,    DIMENSION(:),   INTENT(INOUT) :: PA_MEAN
+!
+LOGICAL, OPTIONAL,       INTENT(IN)    :: OSUM
+!
+!
+!       0.2  declaration of local variables
+!
+REAL    :: ZA_MEAN
+REAL    :: ZA_MEAN_OLD
+!
+INTEGER :: IAVG_PTS
+INTEGER :: IUND_PTS
+!
+!-------------------------------------------------------------------------------
+!
+IF (.NOT. LLES_CALL) RETURN
+!
+ZA_MEAN_OLD = 0.
+IF (PRESENT(OSUM)) THEN
+  IF (OSUM) ZA_MEAN_OLD = PA_MEAN(NLES_CURRENT_TCOUNT)
+END IF
+!-------------------------------------------------------------------------------
+!
+!* subgrid computations on cartesian mask
+!  --------------------------------------
+!
+!* averaging on the current processor domain of the subgrid variable
+!
+CALL LES_MEAN_1PROC(PA, LLES_CURRENT_CART_MASK(:,:,1), ZA_MEAN, IAVG_PTS, IUND_PTS)
+!
+PA_MEAN(NLES_CURRENT_TCOUNT) = ZA_MEAN_OLD + ZA_MEAN
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE LES_MEAN_SUBGRID_SURF
diff --git a/src/mesonh/turb/les_mean_subgrid_phy.f90 b/src/mesonh/turb/les_mean_subgrid_phy.f90
index 637d1cc7326f4a9e0181dfdedba578d7e3adcabf..88a7d2c7260c6756fca71fcaabaebfbaa19b0f34 100644
--- a/src/mesonh/turb/les_mean_subgrid_phy.f90
+++ b/src/mesonh/turb/les_mean_subgrid_phy.f90
@@ -15,31 +15,33 @@ MODULE MODI_LES_MEAN_SUBGRID_PHY
 INTERFACE LES_MEAN_SUBGRID_PHY
 !
 
-SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,PA, PA_MEAN, OSUM)
+SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, TLES, PA, PA_MEAN, OSUM)
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PA
 !
-REAL,    DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 !
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY
 !
-SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,PA, PA_MEAN, OSUM)
+SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, TLES, PA, PA_MEAN, OSUM)
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT), INTENT(IN)    :: PA
 !
-REAL,    DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
 !
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
@@ -50,57 +52,60 @@ END INTERFACE LES_MEAN_SUBGRID_PHY
 END MODULE MODI_LES_MEAN_SUBGRID_PHY
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, TLES,PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PA
-REAL,    DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
-CALL LES_MEAN_SUBGRID_unpack3D(D,PA, PA_MEAN, OSUM)
+CALL LES_MEAN_SUBGRID_unpack3D(D,TLES, PA, PA_MEAN, OSUM)
 !
 END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, TLES,PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT), INTENT(IN)    :: PA
-REAL,    DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
-CALL LES_MEAN_SUBGRID_unpackSURF(D,PA, PA_MEAN, OSUM)
+CALL LES_MEAN_SUBGRID_unpackSURF(D, TLES, PA, PA_MEAN, OSUM)
 !
 END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_unpack3D(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_unpack3D(D, TLES,PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 USE MODI_LES_MEAN_SUBGRID
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PA
-REAL,    DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
@@ -108,21 +113,22 @@ CALL LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
 END SUBROUTINE LES_MEAN_SUBGRID_unpack3D
 !
 !     ##############################################
-      SUBROUTINE LES_MEAN_SUBGRID_unpackSURF(D, PA, PA_MEAN, OSUM)
+      SUBROUTINE LES_MEAN_SUBGRID_unpackSURF(D, TLES,PA, PA_MEAN, OSUM)
 !     ##############################################
 !
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT
+USE MODD_LES, ONLY: TLES_t
 USE MODI_LES_MEAN_SUBGRID
 !
 IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
+TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIT,D%NJT), INTENT(IN)    :: PA
-REAL,    DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
diff --git a/tools/PHYEX2IAL.sh b/tools/PHYEX2IAL.sh
new file mode 100755
index 0000000000000000000000000000000000000000..94d7b28fe81367e4d26f67f6ebaabe78d57650a6
--- /dev/null
+++ b/tools/PHYEX2IAL.sh
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+set -e
+set -x
+
+################################
+#Command line arguments and help
+
+full_command="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}") $@"
+
+function usage {
+  echo "Usage: $0 [-h] [--phyex-repo-user PHYEXREPOuser] [--phyex-repo-protocol PHYEXREPOprotocol]"
+  echo "       IALDIRECTORY:IALVERSION PHYEXVERSION BRANCH"
+  echo
+  echo "--phyex-repo-user PHYEXREPOuser         user hosting the PHYEX repository on github,"
+  echo "                                        defaults to the env variable PHYEXREOuser (=$PHYEXREPOuser)"
+  echo "--phyex-repo-protocol PHYEXREPOprotocol protocol (https or ssh) to reach the PHYEX repository on github,"
+  echo "                                        defaults to the env variable PHYEXREOprotocol (=$PHYEXREPOprotocol)"
+  echo "IALDIRECTORY                            local directory containing the IAL repository"
+  echo "IALVERSION                              version to checkout in the IAL repository"
+  echo "PHYEXVERSION                            commit, tag (as tags/<tag>) of PHYEX to use"
+  echo
+  echo "The scripts builds a pack using PHYEX (with the help of the check_commit_ial.sh script)"
+  echo "and puts the content of the pack in the IAL repository."
+  echo "It is important that the PHYEXVERSION is based on the same version as the selected IALVERSION."
+}
+
+IALDIRECTORY=''
+IALVERSION=''
+PHYEXVERSION=''
+BRANCH=''
+
+positional=0
+while [ -n "$1" ]; do
+  case "$1" in
+    '-h') usage; exit;;
+    '--phyex-repo-user') export PHYEXREPOuser="$2"; shift;;
+    '--phyex-repo-protocol') export PHYEXREPOprotocol="$2"; shift;;
+    *) positional=$(($positional + 1))
+       case $positional in
+         1) if echo "$1" | grep ':'; then
+              IALDIRECTORY=$(echo "$1" | cut -d: -f1)
+              IALVERSION=$(echo "$1" | cut -d: -f2-)
+            else
+              echo "First mandatory argument must take the form IALDIRECTORY:IALVERSION with ':' as separator"
+              exit 1
+            fi;;
+         2) PHYEXVERSION="$1";;
+         3) BRANCH="$1";;
+         *) echo "Only three positional arguments are allowed"
+            exit 2;;
+       esac
+  esac
+  shift
+done
+
+if [ -z "${BRANCH-}" ]; then
+  echo "This script needs positional arguments, you can use the -h option to get help"
+  exit 3
+fi
+
+##################################################
+#Create a gmkpack's pack and filling it with PHYEX
+
+# Create temporary directory and set up its automatic destruction
+export TMP_LOC=$(mktemp -d --tmpdir=$TMP XXXXXX)
+trap "echo Removing now temporary directory $TMP_LOC ; \rm -rf $TMP_LOC" EXIT
+
+# Creates a pack using check_commit_ial.sh script
+echo "Creating pack in $TMP_LOC using $PHYEXVERSION PHYEX version with"
+echo "PHYEXREPOuser=$PHYEXREPOuser and PHYEXREPOprotocol=$PHYEXREPOprotocol"
+HOMEPACK=$TMP_LOC check_commit_ial.sh -p -f "${PHYEXVERSION}"
+
+#########################################
+#Create branch in IAL, fill it and commit
+
+# Create the branch in the IAL repository
+cd "${IALDIRECTORY}"
+if [ ! -z "$(git status --porcelain)" ]; then
+  echo "The IAL repository ($IALDIRECTORY) cannot be used as it is not clean"
+  exit 4
+fi
+git checkout -b "${BRANCH}" "${IALVERSION}"
+
+# copy the pack created with PHYEX into the IAL branch
+cd $TMP_LOC/PHYEX/*/src/local/
+for rep in *; do
+  rsync -r --delete $rep /home/riette/IAL/
+done
+
+# commit
+cd "${IALDIRECTORY}"
+git add .
+git commit -m "Integration of PHYEX version $PHYEXVERSION in IAL" \
+           -m "PHYEXREPOuser=$PHYEXREPOuser PHYEXREPOprotocol=$PHYEXREPOprotocol $full_command"
+
diff --git a/tools/compare.py b/tools/compare.py
index 816cac5f7e2090166bbc9995741d47e36f2d8c39..34f2084051c94187541a190eecf7883284b2e982 100755
--- a/tools/compare.py
+++ b/tools/compare.py
@@ -4,28 +4,17 @@ import xarray as xr
 
 avail_groups=['Stations/sta1',
 'LES_budgets/Miscellaneous/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/Miscellaneous/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/Mean/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/Mean/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/Resolved/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/Resolved/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/Subgrid/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/Subgrid/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/Surface/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/Surface/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_KE/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_KE/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_THL2/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_THL2/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_WTHL/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_WTHL/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_RT2/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_RT2/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_WRT/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_WRT/Cartesian/Time_averaged/Not_normalized/cart/',
 'LES_budgets/BU_THLR/Cartesian/Not_time_averaged/Not_normalized/cart/',
-'LES_budgets/BU_THLR/Cartesian/Time_averaged/Not_normalized/cart/']
-
+]
 
 
 def compareBACKUPFiles(file_user, file_ref):
@@ -73,6 +62,10 @@ def compareTSERIESFiles(file_user, file_ref):
   da = xr.open_dataset(file_user)
   da2 = xr.open_dataset(file_ref)
   variables = list(da.keys())
+  try: 
+    nk=len(da['level_les'])
+  except:
+    pass
   for var in variables:
     try:
       ecart_min = float(da2[var].min())-float(da[var].min())
@@ -86,11 +79,9 @@ def compareTSERIESFiles(file_user, file_ref):
   # Groups comparison
   for grp in avail_groups:
     try:
-      nk=len(da['level_les'])
       da = xr.open_dataset(file_user, group=grp)
       da2 = xr.open_dataset(file_ref, group=grp)
       variables = list(da.keys())
-      print(grp)
       for var in variables:
         try:
           ecart_min = float(da2[var][:,:nk-JPVEXT].min())-float(da[var][:,:nk-JPVEXT].min())