diff --git a/src/mesonh/ext/ini_lesn.f90 b/src/mesonh/ext/ini_lesn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..ff089c8c480444dd13b575e408294467283ff8c4
--- /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
+  ALLOCATE(XLES_PDF_TH (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ALLOCATE(XLES_PDF_W (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ALLOCATE(XLES_PDF_THV (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  IF (LUSERV) THEN
+   ALLOCATE(XLES_PDF_RV (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   ALLOCATE(XLES_PDF_RV (0,0,0,0))
+  END IF
+  IF (LUSERC) THEN 
+   ALLOCATE(XLES_PDF_RC (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+   ALLOCATE(XLES_PDF_RT (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+   ALLOCATE(XLES_PDF_THL(NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   ALLOCATE(XLES_PDF_RC (0,0,0,0))
+   ALLOCATE(XLES_PDF_RT (0,0,0,0))
+   ALLOCATE(XLES_PDF_THL(0,0,0,0))
+  ENDIF
+  IF (LUSERR) THEN
+   ALLOCATE(XLES_PDF_RR (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   ALLOCATE(XLES_PDF_RR (0,0,0,0))
+  ENDIF
+  IF (LUSERI) THEN 
+   ALLOCATE(XLES_PDF_RI (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   ALLOCATE(XLES_PDF_RI (0,0,0,0))
+  END IF
+  IF (LUSERS) THEN
+   ALLOCATE(XLES_PDF_RS (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   ALLOCATE(XLES_PDF_RS (0,0,0,0))
+  END IF
+  IF (LUSERG) THEN 
+   ALLOCATE(XLES_PDF_RG (NLES_K,NLES_TIMES,NLES_MASKS,NPDF))
+  ELSE
+   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/les_cloud_masksn.f90 b/src/mesonh/ext/les_cloud_masksn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..9b9bbf3b2bec186d39db42ade3c6b34e8bd54806
--- /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
+  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
+  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  )
+  ALLOCATE(LLES_CURRENT_CS1_MASK(IIU,IJU,NLES_K))
+  LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE.
+  IF (NSV_CS >= 2) THEN
+    ALLOCATE(LLES_CURRENT_CS2_MASK(IIU,IJU,NLES_K))
+    LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE.
+    IF (NSV_CS == 3) THEN
+      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
+  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..c93c4c887d19394fa34a5e9ee91e760fddb04503
--- /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)
+!            ----------------------
+!
+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 (ALLOCATED(XCOEFLIN_CURRENT_LES)) DEALLOCATE(XCOEFLIN_CURRENT_LES)
+  IF (ALLOCATED(NKLIN_CURRENT_LES   )) DEALLOCATE(NKLIN_CURRENT_LES   )
+  !
+  ALLOCATE(XCOEFLIN_CURRENT_LES(IIU,IJU,NLES_K))
+  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/switch_sbg_lesn.f90 b/src/mesonh/ext/switch_sbg_lesn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..1f1ebf4bf32d3f81d7307a26c109b5334a555d30
--- /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.   ALLOCATED (X_LES_RES_W_SBG_WThl) ) THEN
+!                                                                           ______
+  ALLOCATE(X_LES_RES_W_SBG_WThl        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Thl'>
+!                                                                        _____
+  ALLOCATE(X_LES_RES_W_SBG_Thl2        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'2>
+!                                                                              _____
+  ALLOCATE(X_LES_RES_ddxa_U_SBG_UaU    (NLES_K,NLES_TIMES,NLES_MASKS))!  <du'/dxa ua'u'>
+!                                                                              _____
+  ALLOCATE(X_LES_RES_ddxa_V_SBG_UaV    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dv'/dxa ua'v'>
+!                                                                              _____
+  ALLOCATE(X_LES_RES_ddxa_W_SBG_UaW    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'w'>
+!                                                                              _______
+  ALLOCATE(X_LES_RES_ddxa_W_SBG_UaThl  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Thl'>
+!                                                                                _____
+  ALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaW  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'w'>
+!                                                                                  ___
+  ALLOCATE(X_LES_RES_ddz_Thl_SBG_W2    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dz w'2>
+!                                                                                _______
+  ALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaThl(NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Thl'>
+!
+  IF (LUSERV) THEN
+!                                                                          _____
+    ALLOCATE(X_LES_RES_W_SBG_WRt         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Rt'>
+!                                                                           ____
+    ALLOCATE(X_LES_RES_W_SBG_Rt2         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Rt'2>
+!                                                                          _______
+    ALLOCATE(X_LES_RES_W_SBG_ThlRt       (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'Rt'>
+!                                                                                ______
+    ALLOCATE(X_LES_RES_ddxa_W_SBG_UaRt   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Rt'>
+!                                                                                 _____
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaW   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'w'>
+!                                                                                   ___
+    ALLOCATE(X_LES_RES_ddz_Rt_SBG_W2     (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dz w'2>
+!                                                                                  ______
+    ALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Rt'>
+!                                                                                 _______
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaThl (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'Thl'>
+!                                                                                  ______
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaRt  (NLES_K,NLES_TIMES,NLES_MASKS)) !  <dRt'/dxa ua'Rt'>
+  ELSE
+    ALLOCATE(X_LES_RES_W_SBG_WRt         (0,0,0))
+    ALLOCATE(X_LES_RES_W_SBG_Rt2         (0,0,0))
+    ALLOCATE(X_LES_RES_W_SBG_ThlRt       (0,0,0))
+    ALLOCATE(X_LES_RES_ddxa_W_SBG_UaRt   (0,0,0))
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaW   (0,0,0))
+    ALLOCATE(X_LES_RES_ddz_Rt_SBG_W2     (0,0,0))
+    ALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaRt (0,0,0))
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaThl (0,0,0))
+    ALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaRt  (0,0,0))
+  END IF
+!                                                                                   ______
+ALLOCATE(X_LES_RES_ddxa_W_SBG_UaSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dw'/dxa ua'Sv'>
+!                                                                                    _____
+ALLOCATE(X_LES_RES_ddxa_Sv_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'w'>
+!                                                                                    ___
+ALLOCATE(X_LES_RES_ddz_Sv_SBG_W2   (NLES_K,NLES_TIMES,NLES_MASKS,NSV) ) !  <dSv'/dz w'2>
+!                                                                                   ______
+ALLOCATE(X_LES_RES_ddxa_Sv_SBG_UaSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'Sv'>
+!                                                                             _____
+ALLOCATE(X_LES_RES_W_SBG_WSv       (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <w'w'Sv'>
+!                                                                             ____
+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
+!
+!
+  ALLOCATE(X_LES_SUBGRID_U2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'2>
+  ALLOCATE(X_LES_SUBGRID_V2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'2>
+  ALLOCATE(X_LES_SUBGRID_W2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2>
+  ALLOCATE(X_LES_SUBGRID_Thl2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'2>
+  ALLOCATE(X_LES_SUBGRID_UV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'v'>
+  ALLOCATE(X_LES_SUBGRID_WU    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'u'>
+  ALLOCATE(X_LES_SUBGRID_WV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'v'>
+  ALLOCATE(X_LES_SUBGRID_UThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Thl'>
+  ALLOCATE(X_LES_SUBGRID_VThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Thl'>
+  ALLOCATE(X_LES_SUBGRID_WThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'>
+  ALLOCATE(X_LES_SUBGRID_WThv     (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thv'>
+  ALLOCATE(X_LES_SUBGRID_ThlThv   (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'Thv'>
+  ALLOCATE(X_LES_SUBGRID_W2Thl    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'2Thl>
+  ALLOCATE(X_LES_SUBGRID_WThl2    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thl'2>
+  ALLOCATE(X_LES_SUBGRID_DISS_Tke (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon>
+  ALLOCATE(X_LES_SUBGRID_DISS_Thl2(NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Thl2>
+  ALLOCATE(X_LES_SUBGRID_WP       (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'p'>
+  ALLOCATE(X_LES_SUBGRID_PHI3     (NLES_K,NLES_TIMES,NLES_MASKS))  !  phi3
+  ALLOCATE(X_LES_SUBGRID_LMix     (NLES_K,NLES_TIMES,NLES_MASKS))  !  Lmix
+  ALLOCATE(X_LES_SUBGRID_LDiss    (NLES_K,NLES_TIMES,NLES_MASKS))  !  Ldiss
+  ALLOCATE(X_LES_SUBGRID_Km       (NLES_K,NLES_TIMES,NLES_MASKS))  !  Km
+  ALLOCATE(X_LES_SUBGRID_Kh       (NLES_K,NLES_TIMES,NLES_MASKS))  !  Kh
+  ALLOCATE(X_LES_SUBGRID_ThlPz    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'dp'/dz>
+  ALLOCATE(X_LES_SUBGRID_UTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Tke>
+  ALLOCATE(X_LES_SUBGRID_VTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Tke>
+  ALLOCATE(X_LES_SUBGRID_WTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Tke>
+  ALLOCATE(X_LES_SUBGRID_ddz_WTke  (NLES_K,NLES_TIMES,NLES_MASKS)) ! <dw'Tke/dz>
+
+  ALLOCATE(X_LES_SUBGRID_THLUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
+  ALLOCATE(X_LES_SUBGRID_RTUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rt of the Updraft
+  ALLOCATE(X_LES_SUBGRID_RVUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rv of the Updraft
+  ALLOCATE(X_LES_SUBGRID_RCUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rc of the Updraft
+  ALLOCATE(X_LES_SUBGRID_RIUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Ri of the Updraft
+  ALLOCATE(X_LES_SUBGRID_WUP_MF  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
+  ALLOCATE(X_LES_SUBGRID_MASSFLUX(NLES_K,NLES_TIMES,NLES_MASKS))  ! Mass Flux
+  ALLOCATE(X_LES_SUBGRID_DETR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Detrainment
+  ALLOCATE(X_LES_SUBGRID_ENTR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Entrainment
+  ALLOCATE(X_LES_SUBGRID_FRACUP  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Updraft Fraction 
+  ALLOCATE(X_LES_SUBGRID_THVUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thv of the Updraft
+  ALLOCATE(X_LES_SUBGRID_WTHLMF  (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of thl   
+  ALLOCATE(X_LES_SUBGRID_WRTMF   (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of rt
+  ALLOCATE(X_LES_SUBGRID_WTHVMF  (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of thv 
+  ALLOCATE(X_LES_SUBGRID_WUMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of u
+  ALLOCATE(X_LES_SUBGRID_WVMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of v
+  
+  IF (LUSERV ) THEN
+    ALLOCATE(X_LES_SUBGRID_Rt2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'2>
+    ALLOCATE(X_LES_SUBGRID_ThlRt (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rt'>
+    ALLOCATE(X_LES_SUBGRID_URt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rt'>
+    ALLOCATE(X_LES_SUBGRID_VRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rt'>
+    ALLOCATE(X_LES_SUBGRID_WRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'>
+    ALLOCATE(X_LES_SUBGRID_RtThv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'Thv'>
+    ALLOCATE(X_LES_SUBGRID_W2Rt  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rt'>
+    ALLOCATE(X_LES_SUBGRID_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rt'>
+    ALLOCATE(X_LES_SUBGRID_WRt2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'2>
+    ALLOCATE(X_LES_SUBGRID_DISS_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Rt2>
+    ALLOCATE(X_LES_SUBGRID_DISS_ThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_ThlRt>
+    ALLOCATE(X_LES_SUBGRID_RtPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'dp'/dz>
+    ALLOCATE(X_LES_SUBGRID_PSI3  (NLES_K,NLES_TIMES,NLES_MASKS))     !  psi3  
+  ELSE
+    ALLOCATE(X_LES_SUBGRID_Rt2   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_ThlRt (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_URt   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_VRt   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WRt   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_RtThv (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_W2Rt  (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WThlRt(0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WRt2  (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_DISS_Rt2 (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_DISS_ThlRt(0,0,0))
+    ALLOCATE(X_LES_SUBGRID_RtPz  (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_PSI3  (0,0,0))    
+  END IF
+  IF (LUSERC ) THEN
+    ALLOCATE(X_LES_SUBGRID_Rc2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'2>
+    ALLOCATE(X_LES_SUBGRID_URc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rc'>
+    ALLOCATE(X_LES_SUBGRID_VRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rc'>
+    ALLOCATE(X_LES_SUBGRID_WRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'>
+  ELSE
+    ALLOCATE(X_LES_SUBGRID_Rc2   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_URc   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_VRc   (0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WRc   (0,0,0))
+  END IF
+  IF (LUSERI ) THEN
+    ALLOCATE(X_LES_SUBGRID_Ri2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'2>
+  ELSE
+    ALLOCATE(X_LES_SUBGRID_Ri2   (0,0,0))
+  END IF
+  IF (NSV>0  ) THEN
+    ALLOCATE(X_LES_SUBGRID_USv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'>
+    ALLOCATE(X_LES_SUBGRID_VSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'>
+    ALLOCATE(X_LES_SUBGRID_WSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'>
+    ALLOCATE(X_LES_SUBGRID_Sv2      (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'2>
+    ALLOCATE(X_LES_SUBGRID_SvThv    (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'Thv'>
+    ALLOCATE(X_LES_SUBGRID_W2Sv     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'2Sv'>
+    ALLOCATE(X_LES_SUBGRID_WSv2     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'Sv'2>
+    ALLOCATE(X_LES_SUBGRID_DISS_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <epsilon_Sv2>
+    ALLOCATE(X_LES_SUBGRID_SvPz     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'dp'/dz>
+  ELSE
+    ALLOCATE(X_LES_SUBGRID_USv   (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_VSv   (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WSv   (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_Sv2      (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_SvThv    (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_W2Sv     (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_WSv2     (0,0,0,0))
+    ALLOCATE(X_LES_SUBGRID_DISS_Sv2 (0,0,0,0))
+    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
+!
+!
+  ALLOCATE(X_LES_UW0       (NLES_TIMES))
+  ALLOCATE(X_LES_VW0       (NLES_TIMES))
+  ALLOCATE(X_LES_USTAR     (NLES_TIMES))
+  ALLOCATE(X_LES_Q0        (NLES_TIMES))
+  ALLOCATE(X_LES_E0        (NLES_TIMES))
+  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
+!
+  DEALLOCATE(X_LES_RES_W_SBG_WThl        )
+  DEALLOCATE(X_LES_RES_W_SBG_Thl2        )
+  DEALLOCATE(X_LES_RES_ddxa_U_SBG_UaU    )
+  DEALLOCATE(X_LES_RES_ddxa_V_SBG_UaV    )
+  DEALLOCATE(X_LES_RES_ddxa_W_SBG_UaW    )
+  DEALLOCATE(X_LES_RES_ddxa_W_SBG_UaThl  )
+  DEALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaW  )
+  DEALLOCATE(X_LES_RES_ddz_Thl_SBG_W2    )
+  DEALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaThl)
+  DEALLOCATE(X_LES_RES_W_SBG_WRt         )
+  DEALLOCATE(X_LES_RES_W_SBG_Rt2         )
+  DEALLOCATE(X_LES_RES_W_SBG_ThlRt       )
+  DEALLOCATE(X_LES_RES_ddxa_W_SBG_UaRt   )
+  DEALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaW   )
+  DEALLOCATE(X_LES_RES_ddz_Rt_SBG_W2     )
+  DEALLOCATE(X_LES_RES_ddxa_Thl_SBG_UaRt )
+  DEALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaThl )
+  DEALLOCATE(X_LES_RES_ddxa_Rt_SBG_UaRt  )
+  DEALLOCATE(X_LES_RES_ddxa_W_SBG_UaSv   )
+  DEALLOCATE(X_LES_RES_ddxa_Sv_SBG_UaW   )
+  DEALLOCATE(X_LES_RES_ddz_Sv_SBG_W2     )
+  DEALLOCATE(X_LES_RES_ddxa_Sv_SBG_UaSv  )
+  DEALLOCATE(X_LES_RES_W_SBG_WSv         )
+  DEALLOCATE(X_LES_RES_W_SBG_Sv2         )
+!
+  DEALLOCATE(X_LES_SUBGRID_U2    )
+  DEALLOCATE(X_LES_SUBGRID_V2    )
+  DEALLOCATE(X_LES_SUBGRID_W2    )
+  DEALLOCATE(X_LES_SUBGRID_Thl2  )
+  DEALLOCATE(X_LES_SUBGRID_UV    )
+  DEALLOCATE(X_LES_SUBGRID_WU    )
+  DEALLOCATE(X_LES_SUBGRID_WV    )
+  DEALLOCATE(X_LES_SUBGRID_UThl  )
+  DEALLOCATE(X_LES_SUBGRID_VThl  )
+  DEALLOCATE(X_LES_SUBGRID_WThl  )
+  DEALLOCATE(X_LES_SUBGRID_WThv     )
+  DEALLOCATE(X_LES_SUBGRID_ThlThv   )
+  DEALLOCATE(X_LES_SUBGRID_W2Thl    )
+  DEALLOCATE(X_LES_SUBGRID_WThl2    )
+  DEALLOCATE(X_LES_SUBGRID_DISS_Tke )
+  DEALLOCATE(X_LES_SUBGRID_DISS_Thl2)
+  DEALLOCATE(X_LES_SUBGRID_WP       )
+  DEALLOCATE(X_LES_SUBGRID_PHI3     )
+  DEALLOCATE(X_LES_SUBGRID_LMix     )
+  DEALLOCATE(X_LES_SUBGRID_LDiss    )
+  DEALLOCATE(X_LES_SUBGRID_Km       )
+  DEALLOCATE(X_LES_SUBGRID_Kh       )
+  DEALLOCATE(X_LES_SUBGRID_ThlPz    )
+  DEALLOCATE(X_LES_SUBGRID_UTke  )
+  DEALLOCATE(X_LES_SUBGRID_VTke  )
+  DEALLOCATE(X_LES_SUBGRID_WTke  )
+  DEALLOCATE(X_LES_SUBGRID_ddz_WTke  )
+
+  DEALLOCATE(X_LES_SUBGRID_THLUP_MF)  
+  DEALLOCATE(X_LES_SUBGRID_RTUP_MF )
+  DEALLOCATE(X_LES_SUBGRID_RVUP_MF )
+  DEALLOCATE(X_LES_SUBGRID_RCUP_MF )
+  DEALLOCATE(X_LES_SUBGRID_RIUP_MF )
+  DEALLOCATE(X_LES_SUBGRID_WUP_MF  )
+  DEALLOCATE(X_LES_SUBGRID_MASSFLUX)
+  DEALLOCATE(X_LES_SUBGRID_DETR    )
+  DEALLOCATE(X_LES_SUBGRID_ENTR    )
+  DEALLOCATE(X_LES_SUBGRID_FRACUP  )
+  DEALLOCATE(X_LES_SUBGRID_THVUP_MF)
+  DEALLOCATE(X_LES_SUBGRID_WTHLMF  )  
+  DEALLOCATE(X_LES_SUBGRID_WRTMF   )
+  DEALLOCATE(X_LES_SUBGRID_WTHVMF  )
+  DEALLOCATE(X_LES_SUBGRID_WUMF    )
+  DEALLOCATE(X_LES_SUBGRID_WVMF    )
+  
+  DEALLOCATE(X_LES_SUBGRID_Rt2   )
+  DEALLOCATE(X_LES_SUBGRID_ThlRt )
+  DEALLOCATE(X_LES_SUBGRID_URt   )
+  DEALLOCATE(X_LES_SUBGRID_VRt   )
+  DEALLOCATE(X_LES_SUBGRID_WRt   )
+  DEALLOCATE(X_LES_SUBGRID_RtThv )
+  DEALLOCATE(X_LES_SUBGRID_W2Rt  )
+  DEALLOCATE(X_LES_SUBGRID_WThlRt)
+  DEALLOCATE(X_LES_SUBGRID_WRt2  )
+  DEALLOCATE(X_LES_SUBGRID_DISS_Rt2 )
+  DEALLOCATE(X_LES_SUBGRID_DISS_ThlRt )
+  DEALLOCATE(X_LES_SUBGRID_RtPz  )
+  DEALLOCATE(X_LES_SUBGRID_PSI3  )
+  DEALLOCATE(X_LES_SUBGRID_Rc2   )
+  DEALLOCATE(X_LES_SUBGRID_URc   )
+  DEALLOCATE(X_LES_SUBGRID_VRc   )
+  DEALLOCATE(X_LES_SUBGRID_WRc   )
+  DEALLOCATE(X_LES_SUBGRID_Ri2   )
+  DEALLOCATE(X_LES_SUBGRID_USv   )
+  DEALLOCATE(X_LES_SUBGRID_VSv   )
+  DEALLOCATE(X_LES_SUBGRID_WSv   )
+  DEALLOCATE(X_LES_SUBGRID_Sv2      )
+  DEALLOCATE(X_LES_SUBGRID_SvThv    )
+  DEALLOCATE(X_LES_SUBGRID_W2Sv     )
+  DEALLOCATE(X_LES_SUBGRID_WSv2     )
+  DEALLOCATE(X_LES_SUBGRID_DISS_Sv2 )
+  DEALLOCATE(X_LES_SUBGRID_SvPz     )
+  !
+  DEALLOCATE(X_LES_UW0       )
+  DEALLOCATE(X_LES_VW0       )
+  DEALLOCATE(X_LES_USTAR     )
+  DEALLOCATE(X_LES_Q0        )
+  DEALLOCATE(X_LES_E0        )
+  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..d1fedaada44a7c8cbbd0ce15dcc9358a6c038d15
--- /dev/null
+++ b/src/mesonh/ext/write_lesn.f90
@@ -0,0 +1,1318 @@
+!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
+  ALLOCATE(XLES_NORM_M  (NLES_TIMES))
+  ALLOCATE(XLES_NORM_S  (NLES_TIMES))
+  ALLOCATE(XLES_NORM_K  (NLES_TIMES))
+  ALLOCATE(XLES_NORM_RHO(NLES_TIMES))
+  ALLOCATE(XLES_NORM_RV (NLES_TIMES))
+  ALLOCATE(XLES_NORM_SV (NLES_TIMES,NSV))
+  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
+!
+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
+!            -------------
+!
+DEALLOCATE( XLES_CURRENT_Z )
+
+IF (CLES_NORM_TYPE/='NONE' ) THEN
+  DEALLOCATE(XLES_NORM_M  )
+  DEALLOCATE(XLES_NORM_S  )
+  DEALLOCATE(XLES_NORM_K  )
+  DEALLOCATE(XLES_NORM_RHO)
+  DEALLOCATE(XLES_NORM_RV )
+  DEALLOCATE(XLES_NORM_SV )
+  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