Skip to content
Snippets Groups Projects
ini_lesn.f90 69.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • !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.
    
    ! _Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_lesn.f90,v _
    !-----------------------------------------------------------------
    !     ####################
          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
    
    !!
    !! --------------------------------------------------------------------------
    !
    !*      0. DECLARATIONS
    !          ------------
    !
    USE MODE_ll
    USE MODE_IO_ll
    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_GATHER_ll
    !
    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
    !
    CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
    !
    
    NLES_TOTADV  = 1
    NLES_RELA  = 2
    NLES_RAD   = 3
    NLES_GRAV  = 4
    NLES_COR   = 5
    NLES_MICR  = 6
    NLES_HTURB = 7
    NLES_VTURB = 8
    NLES_FORC  = 9
    NLES_PRES  = 10
    NLES_DIFF  = 11
    NLES_CURV  = 12
    NLES_PREF  = 13
    NLES_DP    = 14
    NLES_TP    = 15
    NLES_TR    = 16
    NLES_DISS  = 17
    NLES_TEND  = 18
    NLES_ADVR  = 19
    NLES_ADVM  = 20
    NLES_NEST  = 21
    NLES_MISC  = 22
    !
    NLES_TOT = 22
    
    !
    !-------------------------------------------------------------------------------
    !
    !*      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.'
      WRITE(ILUOUT,FMT=*) 'STOP'
    !callabortstop
      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
      CALL ABORT
      STOP
    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
      NLESn_IINF(1)= NUNDEF
      NLESn_ISUP(1)= NUNDEF
      NLESn_JINF(1)= NUNDEF
      NLESn_JSUP(1)= NUNDEF
      !
      IF (LLES_CART_MASK) THEN
        IF (NLES_IINF==NUNDEF) NLES_IINF=JPHEXT+1
        IF (NLES_JINF==NUNDEF) NLES_JINF=JPHEXT+1
        IF (NLES_ISUP==NUNDEF) NLES_ISUP=IIU_ll-JPHEXT
        IF (NLES_JSUP==NUNDEF) NLES_JSUP=IJU_ll-JPHEXT
      END IF
      !
      IF (       NLES_IINF==JPHEXT+1      .AND. NLES_JINF==JPHEXT+1       &
           .AND. NLES_ISUP==IIU_ll-JPHEXT .AND. NLES_ISUP==IJU_ll-JPHEXT  ) THEN
        LLES_CART_MASK=.FALSE.
      END IF
      !
      IF (.NOT. LLES_CART_MASK) THEN
        NLES_IINF=JPHEXT+1
        NLES_JINF=JPHEXT+1
        NLES_ISUP=IIU_ll-JPHEXT
        NLES_JSUP=IJU_ll-JPHEXT
      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),JPHEXT+2)
    END IF
    IF ( (.NOT. L1D) .AND. (.NOT. L2D) .AND. CLBCY(1)/='CYCL') THEN
      NLESn_JINF(IMI) = MAX(NLESn_JINF(IMI),JPHEXT+2)
    END IF
    !
    !* X boundary conditions for 2points correlations computations
    !  -----------------------------------------------------------
    !
    IF ( NLESn_IINF(IMI)==JPHEXT+1 .AND. NLESn_ISUP(IMI)==IIU_ll-JPHEXT  &
                                  .AND. CLBCX(1)=='CYCL'               ) THEN
      CLES_LBCX(:,IMI) = 'CYCL'
    ELSE
      CLES_LBCX(:,IMI) = 'OPEN'
    END IF
    !
    !* Y boundary conditions for 2points correlations computations
    !  -----------------------------------------------------------
    !
    IF ( NLESn_JINF(IMI)==JPHEXT+1 .AND. NLESn_JSUP(IMI)==IJU_ll-JPHEXT  &
                                  .AND. CLBCY(1)=='CYCL'               ) 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 = ( INT( (XSEGLEN-XTSTEP+1.E-6) / XTSTEP ) ) / NLES_DTCOUNT
    !
    !*      3.5  current LES time counter
    !            ------------------------
    !
    NLES_TCOUNT = 0
    !
    !*      3.6  date array for diachro
    !            ----------------------
    !
    ALLOCATE(XLES_DATIME(16,NLES_TIMES))
    !
    !*      3.7  sampling times array for diachro
    !            --------------------------------
    !
    ALLOCATE(XLES_TRAJT(NLES_TIMES,1))
    !
    !*      3.8  No data
    !            -------
    !
    IF (NLES_TIMES==0) THEN
      LLES=.FALSE.
      RETURN
    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(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
      NLES_K = COUNT (NLES_LEVELS(:)/=XUNDEF)
      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 + JPVEXT
        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,NLES_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(:)/=XUNDEF)) THEN
      NSPECTRA_K = COUNT (NSPECTRA_LEVELS(:)/=XUNDEF)
      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))
    ELSE
      ALLOCATE(XLES_MEAN_Rr (0,0,0))
    END IF
    IF (LUSERI ) THEN
      ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS))
    ELSE
      ALLOCATE(XLES_MEAN_Ri (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_INDCf  = XUNDEF
    IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF
    IF (LUSERR ) XLES_MEAN_Rr  = XUNDEF
    IF (LUSERI ) XLES_MEAN_Ri  = 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_Ua_ddxa_P(NLES_K,NLES_TIMES,NLES_MASKS))  ! <ua'dp'/dxa>
    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_Ua_ddxa_P = 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