Skip to content
Snippets Groups Projects
ini_lesn.f90 69.7 KiB
Newer Older
!MNH_LIC Copyright 2000-2019 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
!! --------------------------------------------------------------------------
!
!*      0. DECLARATIONS
!          ------------
!
USE MODE_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
!
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
  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
!
!            ----------------------
!
allocate( xles_dates( nles_times ) )
allocate( xles_times( nles_times ) )
!            -------
!
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))
  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))
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_RF  = XUNDEF
621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
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
  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'>