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