diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90
index e5c5486f4e82bdeee8d05923b989474081080fe2..552070615f2cd7a2e0667def6a9263933666cea9 100644
--- a/src/arome/ext/aro_turb_mnh.F90
+++ b/src/arome/ext/aro_turb_mnh.F90
@@ -429,7 +429,7 @@ CALL TURB (CST,CSTURB,TBUCONF,TURBN, YLDIMPHYEX,TLES,&
    & IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS,1, &
    & ISPLIT,IMI, KSV, KSV_LGBEG, KSV_LGEND, HPROGRAM,&
    & NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH,   &
-   & O2D, ONOMIXLG, OFLAT, OCOUPLES,OBLOWSNOW,& 
+   & O2D, ONOMIXLG, OFLAT, OCOUPLES,OBLOWSNOW,.FALSE.,& 
    & .FALSE., OCOMPUTE_SRC, 1.0, &
    & OOCEAN,ODEEPOC, .FALSE.,   &
    & 'NONE',CMICRO,           &
diff --git a/src/common/aux/gradient_m_phy.F90 b/src/common/aux/gradient_m_phy.F90
index 2b1636b6306e94862bb3086835ae484fd97d9c2a..348dea22e2e0f2301f5b7e15a5ad8dd6bb750b48 100644
--- a/src/common/aux/gradient_m_phy.F90
+++ b/src/common/aux/gradient_m_phy.F90
@@ -436,7 +436,7 @@ REAL, DIMENSION(D%NIT*D%NJT*D%NKT),  INTENT(IN)  :: PDZX    ! metric coefficient
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PGX_M_U  ! result at flux
                                                               ! side
 REAL, DIMENSION(D%NIT*D%NJT*D%NKT) :: ZGX_M_U
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT):: ZY, ZDXX,ZDZZ,ZDZX
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT):: ZY, ZDXX
 INTEGER  IIU,IKU,JI,JK,IKL, IKA
 !
 INTEGER :: JJK,IJU
@@ -456,6 +456,10 @@ IJU=D%NJT
 IKU=D%NKT
 IKL=D%NKL
 IKA=D%NKA
+!
+CALL D1D_TO_3D(D,PDXX,ZDXX)
+CALL D1D_TO_3D(D,PY,ZY)
+!
 IF (.NOT. OFLAT) THEN
   JIJKOR  = 1 + JPHEXT + IIU*IJU*(JPVEXT_TURB+1 - 1)
   JIJKEND = IIU*IJU*(IKU-JPVEXT_TURB)
@@ -479,26 +483,22 @@ IF (.NOT. OFLAT) THEN
        ) * PDZX(JIJKP1)* 0.25                                   &
         )  / PDXX(JIJK)
   END DO
-
+!
 CALL D1D_TO_3D(D,ZGX_M_U,PGX_M_U)
-CALL D1D_TO_3D(D,PDXX,ZDXX)
-CALL D1D_TO_3D(D,PDZZ,ZDZZ)
-CALL D1D_TO_3D(D,PDZX,ZDZX)
-CALL D1D_TO_3D(D,PY,ZY)
 !
   DO JI=1+JPHEXT,IIU
     PGX_M_U(JI,:,IKU)=  ( ZY(JI,:,IKU)-ZY(JI-1,:,IKU)  )  / ZDXX(JI,:,IKU)
     PGX_M_U(JI,:,IKA)=  -999.
   END DO
-!
-  PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:)
 ELSE
 !  PGX_M_U = DXM(PY) / PDXX
-  PGX_M_U(1+JPHEXT:IIU,:,:) = ( ZY(1+JPHEXT:IIU,:,:)-ZY(JPHEXT:IIU-1,:,:) ) &
-                             / ZDXX(1+JPHEXT:IIU,:,:)
+  PGX_M_U(1+1:IIU,:,:) = ( ZY(1+1:IIU,:,:)-ZY(1:IIU-1,:,:) ) &
+                             / ZDXX(1+1:IIU,:,:)
 !
-  PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:)
 ENDIF
+DO JI=1,JPHEXT
+  PGX_M_U(JI,:,:)=PGX_M_U(IIU-2*JPHEXT+JI,:,:) ! for reprod JPHEXT <> 1
+END DO  
 !
 !-------------------------------------------------------------------------------
 !
@@ -623,14 +623,15 @@ IF (.NOT. OFLAT) THEN
     PGY_M_V(:,JJ,IKA)=  -999.
   END DO
 !
-  PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:)
 ELSE
 !  PGY_M_V = DYM(PY)/PDYY
-  PGY_M_V(:,1+JPHEXT:IJU,:) = ( PY(:,1+JPHEXT:IJU,:)-PY(:,JPHEXT:IJU-1,:) ) &
-                               / PDYY(:,1+JPHEXT:IJU,:)
+  PGY_M_V(:,1+1:IJU,:) = ( PY(:,1+1:IJU,:)-PY(:,1:IJU-1,:) ) &
+                               / PDYY(:,1+1:IJU,:)
 !
-  PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:)
 ENDIF
+DO JJ=1,JPHEXT
+  PGY_M_V(:,JJ,:)=PGY_M_V(:,IJU-2*JPHEXT+JJ,:)
+END DO
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/aux/modd_cst.F90 b/src/common/aux/modd_cst.F90
index 544c754648621b3c66d725c261c57bedf412b244..cb0aed25e632bec67853d370ac79198d944051e4 100644
--- a/src/common/aux/modd_cst.F90
+++ b/src/common/aux/modd_cst.F90
@@ -1,10 +1,10 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###############
-      MODULE MODD_CST      
+      MODULE MODD_CST
 !     ###############
 !
 !!****  *MODD_CST* - declaration of Physic constants 
@@ -12,7 +12,7 @@
 !!    PURPOSE
 !!    -------
 !       The purpose of this declarative module is to declare  the 
-!     Physics constants.    
+!     Physics constants.
 !
 !!
 !!**  IMPLICIT ARGUMENTS
@@ -38,85 +38,85 @@
 !!      V. Masson   01/03/03  add conductivity of ice
 !!      R. El Khatib 04/08/14 add pre-computed quantities
 !!      J.Escobar : 10/2017 : for real*4 , add XMNH_HUGE_12_LOG
-!!      J.L. Redelsperger 03/2021  add constants for ocean penetrating solar
-!!      S. Riette:  Jan 2022: introduction of a strucuture
+!  J.L. Redelsperger 03/2021: add constants for ocean penetrating solar
+!  S. Riette      01/2022: introduction of a structure
+!  P. Wautelet 20/05/2022: add RASTA cloud radar wavelength
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 IMPLICIT NONE 
+
+REAL, PARAMETER :: XLAM_CRAD = 3.154E-3 ! RASTA cloud radar wavelength (m) <=> 95.04 GHz
+
 TYPE CST_t
-REAL :: XPI                ! Pi
-!
-REAL :: XDAY,XSIYEA,XSIDAY ! day duration, sideral year duration,
-                                ! sideral day duration
-!
-REAL :: XKARMAN            ! von karman constant
-REAL :: XLIGHTSPEED        ! light speed
-REAL :: XPLANCK            ! Planck constant
-REAL :: XBOLTZ             ! Boltzman constant 
-REAL :: XAVOGADRO          ! Avogadro number
-!
-REAL :: XRADIUS,XOMEGA     ! Earth radius, earth rotation
-REAL :: XG                 ! Gravity constant
-!
-REAL :: XP00               ! Reference pressure
-REAL :: XP00OCEAN          ! Reference pressure for ocean model
-REAL :: XRH00OCEAN         ! Reference density for ocean model
-!
-REAL :: XSTEFAN,XI0        ! Stefan-Boltzman constant, solar constant
-!
-REAL :: XMD,XMV            ! Molar mass of dry air and molar mass of vapor
-REAL :: XRD,XRV            ! Gaz constant for dry air, gaz constant for vapor
-REAL :: XEPSILO            ! XMV/XMD
-REAL :: XCPD,XCPV          ! Cpd (dry air), Cpv (vapor)
-REAL :: XRHOLW             ! Volumic mass of liquid water
-REAL :: XCL,XCI            ! Cl (liquid), Ci (ice)
-REAL :: XTT                ! Triple point temperature
-REAL :: XLVTT              ! Vaporization heat constant
-REAL :: XLSTT              ! Sublimation heat constant
-REAL :: XLMTT              ! Melting heat constant
-REAL :: XESTT              ! Saturation vapor pressure  at triple point
-                                ! temperature  
-REAL :: XALPW,XBETAW,XGAMW ! Constants for saturation vapor 
-                                !  pressure  function 
-REAL :: XALPI,XBETAI,XGAMI ! Constants for saturation vapor
-                                !  pressure  function over solid ice
-REAL :: XCONDI             ! thermal conductivity of ice (W m-1 K-1)
-REAL :: XALPHAOC           ! thermal expansion coefficient for ocean (K-1)
-REAL :: XBETAOC             ! Haline contraction coeff for ocean (S-1)
-REAL :: XTH00              ! reference value  for the potential temperature
-REAL :: XTH00OCEAN         ! Ref value for pot temp in ocean model
-REAL :: XSA00OCEAN         ! Ref value for SAlinity in ocean model
-REAL :: XROC=0.69! 3 coeffs for SW penetration in  Ocean (Hoecker et al)
-REAL :: XD1=1.1
-REAL :: XD2=23.
-! Values used in SURFEX CMO
-!REAL :: XROC=0.58
-!REAL :: XD1=0.35
-!REAL :: XD2=23.
+  REAL :: XPI                ! Pi
+  !
+  REAL :: XDAY,XSIYEA,XSIDAY ! day duration, sideral year duration, sideral day duration
+  !
+  REAL :: XKARMAN            ! von karman constant
+  REAL :: XLIGHTSPEED        ! light speed
+  REAL :: XPLANCK            ! Planck constant
+  REAL :: XBOLTZ             ! Boltzman constant
+  REAL :: XAVOGADRO          ! Avogadro number
+  !
+  REAL :: XRADIUS,XOMEGA     ! Earth radius, earth rotation
+  REAL :: XG                 ! Gravity constant
+  !
+  REAL :: XP00               ! Reference pressure
+  REAL :: XP00OCEAN          ! Reference pressure for ocean model
+  REAL :: XRH00OCEAN         ! Reference density for ocean model
+  !
+  REAL :: XSTEFAN,XI0        ! Stefan-Boltzman constant, solar constant
+  !
+  REAL :: XMD,XMV            ! Molar mass of dry air and molar mass of vapor
+  REAL :: XRD,XRV            ! Gaz constant for dry air, gaz constant for vapor
+  REAL :: XEPSILO            ! XMV/XMD
+  REAL :: XCPD,XCPV          ! Cpd (dry air), Cpv (vapor)
+  REAL :: XRHOLW             ! Volumic mass of liquid water
+  REAL :: XCL,XCI            ! Cl (liquid), Ci (ice)
+  REAL :: XTT                ! Triple point temperature
+  REAL :: XLVTT              ! Vaporization heat constant
+  REAL :: XLSTT              ! Sublimation heat constant
+  REAL :: XLMTT              ! Melting heat constant
+  REAL :: XESTT              ! Saturation vapor pressure  at triple point temperature
+  REAL :: XALPW,XBETAW,XGAMW ! Constants for saturation vapor pressure function
+  REAL :: XALPI,XBETAI,XGAMI ! Constants for saturation vapor pressure  function over solid ice
+  REAL :: XCONDI             ! thermal conductivity of ice (W m-1 K-1)
+  REAL :: XALPHAOC           ! thermal expansion coefficient for ocean (K-1)
+  REAL :: XBETAOC            ! Haline contraction coeff for ocean (S-1)
+  REAL :: XTH00              ! reference value  for the potential temperature
+  REAL :: XTH00OCEAN         ! Ref value for pot temp in ocean model
+  REAL :: XSA00OCEAN         ! Ref value for SAlinity in ocean model
+  REAL :: XROC=0.69! 3 coeffs for SW penetration in  Ocean (Hoecker et al)
+  REAL :: XD1=1.1
+  REAL :: XD2=23.
+  ! Values used in SURFEX CMO
+  !REAL :: XROC=0.58
+  !REAL :: XD1=0.35
+  !REAL :: XD2=23.
 
-REAL :: XRHOLI             ! Volumic mass of ice
-!
-INTEGER :: NDAYSEC        ! Number of seconds in a day
-!
-REAL :: RDSRV              !  XRD/XRV
-REAL :: RDSCPD             !  XRD/XCPD
-REAL :: RINVXP00           !  1./XP00
-!
-!   Some machine precision value depending of real4/8 use  
-!
-REAL :: XMNH_TINY          ! minimum real on this machine
-REAL :: XMNH_TINY_12       ! sqrt(minimum real on this machine)
-REAL :: XMNH_EPSILON       ! minimum space with 1.0
-REAL :: XMNH_HUGE          ! maximum real on this machine
-REAL :: XMNH_HUGE_12_LOG   ! maximum log(sqrt(real)) on this machine
+  REAL :: XRHOLI             ! Volumic mass of ice
+  !
+  INTEGER :: NDAYSEC         ! Number of seconds in a day
+  !
+  REAL :: RDSRV              !  XRD/XRV
+  REAL :: RDSCPD             !  XRD/XCPD
+  REAL :: RINVXP00           !  1./XP00
+  !
+  !   Some machine precision value depending of real4/8 use
+  !
+  REAL :: XMNH_TINY          ! minimum real on this machine
+  REAL :: XMNH_TINY_12       ! sqrt(minimum real on this machine)
+  REAL :: XMNH_EPSILON       ! minimum space with 1.0
+  REAL :: XMNH_HUGE          ! maximum real on this machine
+  REAL :: XMNH_HUGE_12_LOG   ! maximum log(sqrt(real)) on this machine
 
-REAL :: XEPS_DT            ! default value for DT test 
-REAL :: XRES_FLAT_CART     ! default     flat&cart residual tolerance
-REAL :: XRES_OTHER         ! default not flat&cart residual tolerance
-REAL :: XRES_PREP          ! default     prep      residual tolerance
+  REAL :: XEPS_DT            ! default value for DT test
+  REAL :: XRES_FLAT_CART     ! default     flat&cart residual tolerance
+  REAL :: XRES_OTHER         ! default not flat&cart residual tolerance
+  REAL :: XRES_PREP          ! default     prep      residual tolerance
 END TYPE CST_t
 
 TYPE(CST_t), TARGET, SAVE :: CST
@@ -172,6 +172,7 @@ REAL, POINTER :: XRES_OTHER=>NULL()
 REAL, POINTER :: XRES_PREP=>NULL()
 !
 CONTAINS
+
 SUBROUTINE CST_ASSOCIATE()
   IMPLICIT NONE
   XPI=>CST%XPI
diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90
index 8b46541123e578150e769d33e4a467814ecd8bd4..31fda664b8e3671dc4eff6ccdd3b7135b40b2f7e 100644
--- a/src/common/micro/condensation.F90
+++ b/src/common/micro/condensation.F90
@@ -239,10 +239,12 @@ ZDZREF = ICEP%XFRMIN(25) ! Thickness for unchanged vqsigsat (only used for LHGT_
 PRC_OUT = PRC_IN
 PRV_OUT = PRV_IN
 PRI_OUT = PRI_IN
-PHLC_HRC = 0.
-PHLC_HCF = 0.
-PHLI_HRI = 0.
-PHLI_HCF = 0.
+IF(PRESENT(PHLC_HRC)) THEN
+ PHLC_HRC = 0.
+ PHLC_HCF = 0.
+ PHLI_HRI = 0.
+ PHLI_HCF = 0.
+END IF
 #endif
 IF(OCND2)ZPRIFACT = 0.
 !
diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index 120b784a5e170829bae52f188ff7f2b49a1501ce..9a0d77c6dd45218aecc31b142635e444bbb1d2c4 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -144,16 +144,16 @@ CONTAINS
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
-USE MODD_CST, ONLY : CST_t
-USE MODD_CTURB, ONLY : CSTURB_t
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_CST,            ONLY: CST_t
+USE MODD_CTURB,          ONLY: CSTURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
+USE MODD_PARAMETERS,     ONLY: JPVEXT_TURB
 !
+USE MODE_EMOIST,         ONLY: EMOIST
+USE MODE_ETHETA,         ONLY: ETHETA
 USE MODE_GRADIENT_M_PHY, ONLY: GX_M_M_PHY, GY_M_M_PHY
-USE MODE_EMOIST, ONLY : EMOIST
-USE MODE_ETHETA, ONLY : ETHETA
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
 !
 IMPLICIT NONE
@@ -174,7 +174,7 @@ LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  OHARAT
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
-LOGICAL, INTENT(IN) :: O2D               ! Logical for 2D model version (modd_conf)
+LOGICAL,                INTENT(IN)   :: O2D           ! Logical for 2D model version (modd_conf)
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
 CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
@@ -230,7 +230,7 @@ INTEGER :: IIJB,IIJE,IKT,IKA,IKL
 
 INTEGER :: JLOOP
 REAL    :: ZMINVAL
-TYPE(TFIELDDATA)  :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! ---------------------------------------------------------------------------
 !
 !*      1.  DEFAULT VALUES,  1D REDELSPERGER NUMBERS 
@@ -656,68 +656,73 @@ END DO
 IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN
   !
   ! stores the RED_TH1
-  TZFIELD%CMNHNAME   = 'RED_TH1'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED_TH1'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_TH1'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(       &
+    CMNHNAME   = 'RED_TH1',       &
+    CSTDNAME   = '',              &
+    CLONGNAME  = 'RED_TH1',       &
+    CUNITS     = '1',             &
+    CDIR       = 'XY',            &
+    CCOMMENT   = 'X_Y_Z_RED_TH1', &
+    NGRID      = 4,               &
+    NTYPE      = TYPEREAL,        &
+    NDIMS      = 3,               &
+    LTIMEDEP   = .TRUE.           )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PREDTH1)
   !
   ! stores the RED_R1
-  TZFIELD%CMNHNAME   = 'RED_R1'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED_R1'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_R1'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(      &
+    CMNHNAME   = 'RED_R1',       &
+    CSTDNAME   = '',             &
+    CLONGNAME  = 'RED_R1',       &
+    CUNITS     = '1',            &
+    CDIR       = 'XY',           &
+    CCOMMENT   = 'X_Y_Z_RED_R1', &
+    NGRID      = 4,              &
+    NTYPE      = TYPEREAL,       &
+    NDIMS      = 3,              &
+    LTIMEDEP   = .TRUE.          )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PREDR1)
   !
   ! stores the RED2_TH3
-  TZFIELD%CMNHNAME   = 'RED2_TH3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_TH3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_TH3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'RED2_TH3',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'RED2_TH3',       &
+    CUNITS     = '1',              &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_RED2_TH3', &
+    NGRID      = 4,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PRED2TH3)
   !
   ! stores the RED2_R3
-  TZFIELD%CMNHNAME   = 'RED2_R3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_R3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_R3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(       &
+    CMNHNAME   = 'RED2_R3',       &
+    CSTDNAME   = '',              &
+    CLONGNAME  = 'RED2_R3',       &
+    CUNITS     = '1',             &
+    CDIR       = 'XY',            &
+    CCOMMENT   = 'X_Y_Z_RED2_R3', &
+    NGRID      = 4,               &
+    NTYPE      = TYPEREAL,        &
+    NDIMS      = 3,               &
+    LTIMEDEP   = .TRUE.           )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PRED2R3)
   !
   ! stores the RED2_THR3
-  TZFIELD%CMNHNAME   = 'RED2_THR3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_THR3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_THR3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(         &
+    CMNHNAME   = 'RED2_THR3',       &
+    CSTDNAME   = '',                &
+    CLONGNAME  = 'RED2_THR3',       &
+    CUNITS     = '1',               &
+    CDIR       = 'XY',              &
+    CCOMMENT   = 'X_Y_Z_RED2_THR3', &
+    NGRID      = 4,                 &
+    NTYPE      = TYPEREAL,          &
+    NDIMS      = 3,                 &
+    LTIMEDEP   = .TRUE.             )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PRED2THR3)
   !
 END IF
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index 516d4e6896a51f3b007965a5f8cae6dae742175b..f7f6a5082ae0c68b332cc8b4fed22347fbd2bfd1 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -2,6 +2,7 @@
 !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_TKE_EPS_SOURCES
 IMPLICIT NONE
 CONTAINS
@@ -116,7 +117,6 @@ CONTAINS
 !!                     2012-02 Y. Seity,  add possibility to run with reversed 
 !!                                    vertical levels
 !!                     2014-11 Y. Seity,  add output terms for TKE DDHs budgets
-!! --------------------------------------------------------------------------
 !!                     2015-01 (J. Escobar) missing get_halo(ZRES) for JPHEXT<> 1 
 !!     J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
@@ -127,29 +127,28 @@ CONTAINS
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZF_PHY, DZM_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
 !
 USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
-USE MODD_BUDGET, ONLY: TBUDGETCONF_t, NBUDGET_TKE, NBUDGET_TH, TBUDGETDATA
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_TURB_n, ONLY: TURB_t
-USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES, ONLY: TLES_t
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-!
-USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_END_PHY, BUDGET_STORE_INIT_PHY
+USE MODD_BUDGET,         ONLY: TBUDGETCONF_t, NBUDGET_TKE, NBUDGET_TH, TBUDGETDATA
+USE MODD_CST,            ONLY: CST_t
+USE MODD_CTURB,          ONLY: CSTURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LES,            ONLY: TLES_t
+USE MODD_PARAMETERS,     ONLY: JPVEXT_TURB
+USE MODD_TURB_n,         ONLY: TURB_t
+!
+USE MODE_BUDGET,         ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_END_PHY, BUDGET_STORE_INIT_PHY
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
 USE MODE_ll
 !
-USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZF_PHY, DZM_PHY
-!
 USE MODI_GET_HALO
 USE MODI_LES_MEAN_SUBGRID_PHY
-USE MODE_TRIDIAG_TKE, ONLY: TRIDIAG_TKE
+USE MODE_TRIDIAG_TKE,          ONLY: TRIDIAG_TKE
 !
 !
 IMPLICIT NONE
@@ -164,37 +163,35 @@ TYPE(CSTURB_t),          INTENT(IN)   :: CSTURB
 TYPE(TBUDGETCONF_t),     INTENT(IN)   :: BUCONF
 TYPE(TURB_t),            INTENT(IN)   :: TURBN
 TYPE(TLES_t),            INTENT(INOUT):: TLES
+CHARACTER(LEN=6),        INTENT(IN)   ::  HPROGRAM     ! CPROGRAM is the program currently running (modd_conf)
 INTEGER,                 INTENT(IN)   ::  KMI          ! model index number  
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PTKEM        ! TKE at t-deltat
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PLM          ! mixing length         
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PLEPS        ! dissipative length
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PDP          ! Dyn. prod. of TKE
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PTRH
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PRHODJ       ! density * grid volume
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
-                                                       ! metric coefficients
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PZZ          ! physical height w-pt
 REAL,                    INTENT(IN)   ::  PTSTEP       ! Time step 
 REAL,                    INTENT(IN)   ::  PEXPL        ! Coef. temporal. disc.
-CHARACTER(LEN=6),        INTENT(IN)   ::  HPROGRAM     ! CPROGRAM is the program currently running (modd_conf)
 TYPE(TFILEDATA),         INTENT(IN)   ::  TPFILE       ! Output file
 LOGICAL,                 INTENT(IN)   ::  ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh)
-LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PDP          ! Dyn. prod. of TKE
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PTRH
+LOGICAL,                 INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
+REAL, DIMENSION(D%NIJT),        INTENT(IN)    :: PSFUM,PSFVM ! momentum sfc flux
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PTP          ! Ther. prod. of TKE
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PRTKES       ! RHOD * Jacobian *
-                                                       ! TKE at t+deltat
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PRTKES       ! RHOD * Jacobian * TKE at t+deltat
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
 REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)  ::  PRTKEMS      ! Advection source
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(IN)   ::  PRTKEMS      ! Advection source
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
-INTEGER, INTENT(IN) :: KBUDGETS
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PDISS        ! Dissipation of TKE
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PEDR         ! EDR 
-REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT), OPTIONAL  ::  PCURRENT_TKE_DISS ! if ODIAG_IN_RUN in mesonh
-REAL, DIMENSION(D%NIJT),   INTENT(IN)    :: PSFUM,PSFVM ! momentum sfc flux
+INTEGER,                        INTENT(IN)   :: KBUDGETS
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT),   OPTIONAL ::  PEDR              ! EDR 
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT),   OPTIONAL ::  PTR               ! Transport prod. of TKE
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(OUT),   OPTIONAL ::  PDISS             ! Dissipation of TKE
+REAL, DIMENSION(D%NIJT,D%NKT),  INTENT(INOUT), OPTIONAL ::  PCURRENT_TKE_DISS ! if ODIAG_IN_RUN in mesonh
 !
 !
 !
@@ -220,7 +217,7 @@ INTEGER             :: IIJB,IIJE,IKB,IKE,IKT,IKA,IKL  ! Index value for the mass
 !
 TYPE(LIST_ll), POINTER :: TZFIELDDISS_ll ! list of fields to exchange
 INTEGER                :: IINFO_ll       ! return code of parallel routine
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA)   :: TZFIELD
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 INTEGER :: JIJ,JK
 !
@@ -476,58 +473,62 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 !
 ! stores the dynamic production 
 !
-  TZFIELD%CMNHNAME   = 'DP'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'DP'
-  TZFIELD%CUNITS     = 'm2 s-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_DP'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(  &
+    CMNHNAME   = 'DP',       &
+    CSTDNAME   = '',         &
+    CLONGNAME  = 'DP',       &
+    CUNITS     = 'm2 s-3',   &
+    CDIR       = 'XY',       &
+    CCOMMENT   = 'X_Y_Z_DP', &
+    NGRID      = 1,          &
+    NTYPE      = TYPEREAL,   &
+    NDIMS      = 3,          &
+    LTIMEDEP   = .TRUE.      )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PDP)
 !
 ! stores the thermal production 
 !
-  TZFIELD%CMNHNAME   = 'TP'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'TP'
-  TZFIELD%CUNITS     = 'm2 s-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_TP'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(  &
+    CMNHNAME   = 'TP',       &
+    CSTDNAME   = '',         &
+    CLONGNAME  = 'TP',       &
+    CUNITS     = 'm2 s-3',   &
+    CDIR       = 'XY',       &
+    CCOMMENT   = 'X_Y_Z_TP', &
+    NGRID      = 1,          &
+    NTYPE      = TYPEREAL,   &
+    NDIMS      = 3,          &
+    LTIMEDEP   = .TRUE.      )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PTP)
 !
 ! stores the whole turbulent transport
 !
-  TZFIELD%CMNHNAME   = 'TR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'TR'
-  TZFIELD%CUNITS     = 'm2 s-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_TR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(  &
+    CMNHNAME   = 'TR',       &
+    CSTDNAME   = '',         &
+    CLONGNAME  = 'TR',       &
+    CUNITS     = 'm2 s-3',   &
+    CDIR       = 'XY',       &
+    CCOMMENT   = 'X_Y_Z_TR', &
+    NGRID      = 1,          &
+    NTYPE      = TYPEREAL,   &
+    NDIMS      = 3,          &
+    LTIMEDEP   = .TRUE.      )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZTR)
 !
 ! stores the dissipation of TKE 
 !
-  TZFIELD%CMNHNAME   = 'DISS'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'DISS'
-  TZFIELD%CUNITS     = 'm2 s-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_DISS'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'DISS',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'DISS',       &
+    CUNITS     = 'm2 s-3',     &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_DISS', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PDISS)
 END IF
 !
diff --git a/src/common/turb/mode_turb_hor_dyn_corr.F90 b/src/common/turb/mode_turb_hor_dyn_corr.F90
index 6bfd6f98ef8d968586fcd46d5bea23844f4855f1..32270e64e5176722c2eaf993ef9376614878d4e9 100644
--- a/src/common/turb/mode_turb_hor_dyn_corr.F90
+++ b/src/common/turb/mode_turb_hor_dyn_corr.F90
@@ -75,7 +75,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+use modd_field,          only: tfieldmetadata, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -189,7 +189,7 @@ REAL :: ZTIME1, ZTIME2
 REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF , ZDZZ
                                     ! coefficients for the uncentred gradient 
                                     ! computation near the ground
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! --------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARY COMPUTATIONS
@@ -304,17 +304,18 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) -  ZFLX(:,:,IKB)
 CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
   ! stores <U U>  
-  TZFIELD%CMNHNAME   = 'U_VAR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'U_VAR'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_U_VAR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
+  TZFIELD = TFIELDMETADATA(     &
+    CMNHNAME   = 'U_VAR',       &
+    CSTDNAME   = '',            &
+    CLONGNAME  = 'U_VAR',       &
+    CUNITS     = 'm2 s-2',      &
+    CDIR       = 'XY',          &
+    CCOMMENT   = 'X_Y_Z_U_VAR', &
+    NGRID      = 1,             &
+    NTYPE      = TYPEREAL,      &
+    NDIMS      = 3,             &
+    LTIMEDEP   = .TRUE.         )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the U tendency
@@ -399,17 +400,18 @@ CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
 !
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
   ! stores <V V>  
-  TZFIELD%CMNHNAME   = 'V_VAR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'V_VAR'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_V_VAR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
+  TZFIELD = TFIELDMETADATA(     &
+    CMNHNAME   = 'V_VAR',       &
+    CSTDNAME   = '',            &
+    CLONGNAME  = 'V_VAR',       &
+    CUNITS     = 'm2 s-2',      &
+    CDIR       = 'XY',          &
+    CCOMMENT   = 'X_Y_Z_V_VAR', &
+    NGRID      = 1,             &
+    NTYPE      = TYPEREAL,      &
+    NDIMS      = 3,             &
+    LTIMEDEP   = .TRUE.         )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the V tendency
@@ -486,17 +488,18 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) - ZFLX(:,:,IKB)
 !
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
   ! stores <W W>  
-  TZFIELD%CMNHNAME   = 'W_VAR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'W_VAR'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_W_VAR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
+  TZFIELD = TFIELDMETADATA(     &
+    CMNHNAME   = 'W_VAR',       &
+    CSTDNAME   = '',            &
+    CLONGNAME  = 'W_VAR',       &
+    CUNITS     = 'm2 s-2',      &
+    CDIR       = 'XY',          &
+    CCOMMENT   = 'X_Y_Z_W_VAR', &
+    NGRID      = 1,             &
+    NTYPE      = TYPEREAL,      &
+    NDIMS      = 3,             &
+    LTIMEDEP   = .TRUE.         )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the W tendency
diff --git a/src/common/turb/mode_turb_hor_sv_flux.F90 b/src/common/turb/mode_turb_hor_sv_flux.F90
index ae50bb870a833b4b7553d7eb95c33ba992679fcd..db1b033eb0a08f2670ba8cc52706c4b97b8bf8f1 100644
--- a/src/common/turb/mode_turb_hor_sv_flux.F90
+++ b/src/common/turb/mode_turb_hor_sv_flux.F90
@@ -63,7 +63,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+use modd_field,          only: tfieldmetadata, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -139,8 +139,9 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF
                                     ! coefficients for the uncentred gradient 
                                     ! computation near the ground
 !
+CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME
 INTEGER :: IKU
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 REAL :: ZTIME1, ZTIME2
 ! ---------------------------------------------------------------------------
 !
@@ -202,17 +203,19 @@ DO JSV=1,ISV
   !
   ! stores  <U SVth>
   IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-    WRITE(TZFIELD%CMNHNAME,'("USV_FLX_",I3.3)') JSV
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'SVUNIT m s-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%NGRID      = 2
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLXX)
+    WRITE(YMNHNAME,'("USV_FLX_",I3.3)') JSV
+    TZFIELD = TFIELDMETADATA(                    &
+      CMNHNAME   = TRIM( YMNHNAME ),             &
+      CSTDNAME   = '',                           &
+      CLONGNAME  = TRIM( YMNHNAME ),             &
+      CUNITS     = 'SVUNIT m s-1',               &
+      CDIR       = 'XY',                         &
+      CCOMMENT   = 'X_Y_Z_' // TRIM( YMNHNAME ), &
+      NGRID      = 2,                            &
+      NTYPE      = TYPEREAL,                     &
+      NDIMS      = 3,                            &
+      LTIMEDEP   = .TRUE.                        )
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXX)
   END IF
 !
   IF (TLES%LLES_CALL .AND. KSPLT==1) THEN
@@ -253,17 +256,19 @@ DO JSV=1,ISV
   !
   ! stores  <V SVth>
     IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-      WRITE(TZFIELD%CMNHNAME,'("VSV_FLX_",I3.3)') JSV
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'SVUNIT m s-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%NGRID      = 3
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLXY)
+      WRITE(YMNHNAME,'("VSV_FLX_",I3.3)') JSV
+    TZFIELD = TFIELDMETADATA(                        &
+      CMNHNAME   = TRIM( YMNHNAME ),                 &
+      CSTDNAME   = '',                               &
+      CLONGNAME  = TRIM(TZFIELD%CMNHNAME),           &
+      CUNITS     = 'SVUNIT m s-1',                   &
+      CDIR       = 'XY',                             &
+      CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME), &
+      NGRID      = 3,                                &
+      NTYPE      = TYPEREAL,                         &
+      NDIMS      = 3,                                &
+      LTIMEDEP   = .TRUE.                            )
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXY)
     END IF
 !
   ELSE
diff --git a/src/common/turb/mode_turb_hor_thermo_corr.F90 b/src/common/turb/mode_turb_hor_thermo_corr.F90
index 6c00603eac98ae37d90ce1b495ed6df6a695eaf3..268f923931607513832a9af54690e02638893bde 100644
--- a/src/common/turb/mode_turb_hor_thermo_corr.F90
+++ b/src/common/turb/mode_turb_hor_thermo_corr.F90
@@ -59,14 +59,14 @@ CONTAINS
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST, ONLY : CST_t
+USE MODD_CST,           ONLY : CST_t
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_TURB_n, ONLY: TURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
+USE MODD_PARAMETERS
+USE MODD_TURB_n,         ONLY: TURB_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
@@ -142,7 +142,7 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF
                                     ! coefficients for the uncentred gradient 
                                     ! computation near the ground
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !
 ! ---------------------------------------------------------------------------
 !
@@ -211,16 +211,17 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
   !
   ! stores <THl THl>
   IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    TZFIELD%CMNHNAME   = 'THL_HVAR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'THL_HVAR'
-    TZFIELD%CUNITS     = 'K2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_THL_HVAR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(        &
+      CMNHNAME   = 'THL_HVAR',       &
+      CSTDNAME   = '',               &
+      CLONGNAME  = 'THL_HVAR',       &
+      CUNITS     = 'K2',             &
+      CDIR       = 'XY',             &
+      CCOMMENT   = 'X_Y_Z_THL_HVAR', &
+      NGRID      = 1,                &
+      NTYPE      = TYPEREAL,         &
+      NDIMS      = 3,                &
+      LTIMEDEP   = .TRUE.            )
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
   END IF
 !
@@ -299,16 +300,17 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
     !
     ! stores <THl Rnp>
     IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'THLR_HCOR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'THLR_HCOR'
-      TZFIELD%CUNITS     = 'K kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_THLR_HCOR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+      TZFIELD = TFIELDMETADATA(         &
+        CMNHNAME   = 'THLR_HCOR',       &
+        CSTDNAME   = '',                &
+        CLONGNAME  = 'THLR_HCOR',       &
+        CUNITS     = 'K kg kg-1',       &
+        CDIR       = 'XY',              &
+        CCOMMENT   = 'X_Y_Z_THLR_HCOR', &
+        NGRID      = 1,                 &
+        NTYPE      = TYPEREAL,          &
+        NDIMS      = 3,                 &
+        LTIMEDEP   = .TRUE.             )
       CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
     END IF
 !
@@ -367,16 +369,17 @@ IF ( ( KRRL > 0 .AND. TURBN%LSUBG_COND) .OR. ( TURBN%LTURB_FLX .AND. TPFILE%LOPE
     !
     ! stores <Rnp Rnp>
     IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'R_HVAR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'R_HVAR'
-      TZFIELD%CUNITS     = 'kg2 kg-2'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_R_HVAR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+      TZFIELD = TFIELDMETADATA(      &
+        CMNHNAME   = 'R_HVAR',       &
+        CSTDNAME   = '',             &
+        CLONGNAME  = 'R_HVAR',       &
+        CUNITS     = 'kg2 kg-2',     &
+        CDIR       = 'XY',           &
+        CCOMMENT   = 'X_Y_Z_R_HVAR', &
+        NGRID      = 1,              &
+        NTYPE      = TYPEREAL,       &
+        NDIMS      = 3,              &
+        LTIMEDEP   = .TRUE.          )
       CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
     END IF
     !
diff --git a/src/common/turb/mode_turb_hor_thermo_flux.F90 b/src/common/turb/mode_turb_hor_thermo_flux.F90
index 93313669a3ffc01ca0ddf57ed8b0a999e541259f..0654ed9918e6e044ccc1c1ee87988a1e6d9e674c 100644
--- a/src/common/turb/mode_turb_hor_thermo_flux.F90
+++ b/src/common/turb/mode_turb_hor_thermo_flux.F90
@@ -65,7 +65,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -149,7 +149,7 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF
                                     ! computation near the ground
 !
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! ---------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARY COMPUTATIONS
@@ -246,16 +246,17 @@ END IF
 !
 ! stores the horizontal  <U THl>
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-  TZFIELD%CMNHNAME   = 'UTHL_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'UTHL_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_UTHL_FLX'
-  TZFIELD%NGRID      = 2
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'UTHL_FLX',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'UTHL_FLX',       &
+    CUNITS     = 'K m s-1',        &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_UTHL_FLX', &
+    NGRID      = 2,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
@@ -349,16 +350,17 @@ IF (KRR/=0) THEN
   !
   ! stores the horizontal  <U Rnp>
   IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-    TZFIELD%CMNHNAME   = 'UR_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'UR_FLX'
-    TZFIELD%CUNITS     = 'kg kg-1 m s-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_UR_FLX'
-    TZFIELD%NGRID      = 2
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(       &
+      CMNHNAME   = 'UR_FLX',        &
+      CSTDNAME   = '',              &
+      CLONGNAME  = 'UR_FLX',        &
+      CUNITS     = 'kg kg-1 m s-1', &
+      CDIR       = 'XY',            &
+      CCOMMENT   = 'X_Y_Z_UR_FLX',  &
+      NGRID      = 2,               &
+      NTYPE      = TYPEREAL,        &
+      NDIMS      = 3,               &
+      LTIMEDEP   = .TRUE.           )
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
   END IF
   !
@@ -398,16 +400,17 @@ END IF
 !!  !
 !!  ! stores the horizontal  <U VPT>
 !!  IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-!!    TZFIELD%CMNHNAME   = 'UVPT_FLX'
-!!    TZFIELD%CSTDNAME   = ''
-!!    TZFIELD%CLONGNAME  = 'UVPT_FLX'
-!!    TZFIELD%CUNITS     = 'K m s-1'
-!!    TZFIELD%CDIR       = 'XY'
-!!    TZFIELD%CCOMMENT   = 'X_Y_Z_UVPT_FLX'
-!!    TZFIELD%NGRID      = 2
-!!    TZFIELD%NTYPE      = TYPEREAL
-!!    TZFIELD%NDIMS      = 3
-!!    TZFIELD%LTIMEDEP   = .TRUE.
+!!    TZFIELD = TFIELDMETADATA(        &
+!!      CMNHNAME   = 'UVPT_FLX',       &
+!!      CSTDNAME   = '',               &
+!!      CLONGNAME  = 'UVPT_FLX',       &
+!!      CUNITS     = 'K m s-1',        &
+!!      CDIR       = 'XY',             &
+!!      CCOMMENT   = 'X_Y_Z_UVPT_FLX', &
+!!      NGRID      = 2,                &
+!!      NTYPE      = TYPEREAL,         &
+!!      NDIMS      = 3,                &
+!!      LTIMEDEP   = .TRUE.            )
 !!    CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZVPTU)
 !!  END IF
 !!!
@@ -501,16 +504,17 @@ END IF
 !
 ! stores the horizontal  <V THl>
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-  TZFIELD%CMNHNAME   = 'VTHL_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'VTHL_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_VTHL_FLX'
-  TZFIELD%NGRID      = 3
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'VTHL_FLX',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'VTHL_FLX',       &
+    CUNITS     = 'K m s-1',        &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_VTHL_FLX', &
+    NGRID      = 3,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
@@ -613,16 +617,17 @@ IF (KRR/=0) THEN
   !
   ! stores the horizontal  <V Rnp>
   IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-    TZFIELD%CMNHNAME   = 'VR_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'VR_FLX'
-    TZFIELD%CUNITS     = 'kg kg-1 m s-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_VR_FLX'
-    TZFIELD%NGRID      = 3
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(       &
+      CMNHNAME   = 'VR_FLX',        &
+      CSTDNAME   = '',              &
+      CLONGNAME  = 'VR_FLX',        &
+      CUNITS     = 'kg kg-1 m s-1', &
+      CDIR       = 'XY',            &
+      CCOMMENT   = 'X_Y_Z_VR_FLX',  &
+      NGRID      = 3,               &
+      NTYPE      = TYPEREAL,        &
+      NDIMS      = 3,               &
+      LTIMEDEP   = .TRUE.           )
     CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
   END IF
   !
@@ -666,16 +671,17 @@ END IF
 !!  !
 !!  ! stores the horizontal  <V VPT>
 !!  IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-!!    TZFIELD%CMNHNAME   = 'VVPT_FLX'
-!!    TZFIELD%CSTDNAME   = ''
-!!    TZFIELD%CLONGNAME  = 'VVPT_FLX'
-!!    TZFIELD%CUNITS     = 'K m s-1'
-!!    TZFIELD%CDIR       = 'XY'
-!!    TZFIELD%CCOMMENT   = 'X_Y_Z_VVPT_FLX'
-!!    TZFIELD%NGRID      = 3
-!!    TZFIELD%NTYPE      = TYPEREAL
-!!    TZFIELD%NDIMS      = 3
-!!    TZFIELD%LTIMEDEP   = .TRUE.
+!!    TZFIELD = TFIELDMETADATA(        &
+!!      CMNHNAME   = 'VVPT_FLX',       &
+!!      CSTDNAME   = '',               &
+!!      CLONGNAME  = 'VVPT_FLX',       &
+!!      CUNITS     = 'K m s-1',        &
+!!      CDIR       = 'XY',             &
+!!      CCOMMENT   = 'X_Y_Z_VVPT_FLX', &
+!!      NGRID      = 3,                &
+!!      NTYPE      = TYPEREAL,         &
+!!      NDIMS      = 3,                &
+!!      LTIMEDEP   = .TRUE.            )
 !!    CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZVPTV)
 !!  END IF
 !!!
diff --git a/src/common/turb/mode_turb_hor_uv.F90 b/src/common/turb/mode_turb_hor_uv.F90
index cd9a3f32a3147c77477cbd5c035ad92d62a56d75..717ef59073695384a958d49e2c3a1ff00090ec2b 100644
--- a/src/common/turb/mode_turb_hor_uv.F90
+++ b/src/common/turb/mode_turb_hor_uv.F90
@@ -62,7 +62,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -146,7 +146,7 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3))  :: GY_U_UV_PUM
 REAL, DIMENSION(SIZE(PVM,1),SIZE(PVM,2),SIZE(PVM,3))  :: GX_V_UV_PVM
 !
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! ---------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARY COMPUTATIONS
@@ -208,16 +208,17 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( MYM( ZFLX(:,:,IKB-1:IKB-1) ) )  &
 !     
 ! stores  <U V>
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-  TZFIELD%CMNHNAME   = 'UV_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'UV_FLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_UV_FLX'
-  TZFIELD%NGRID      = 5
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(      &
+    CMNHNAME   = 'UV_FLX',       &
+    CSTDNAME   = '',             &
+    CLONGNAME  = 'UV_FLX',       &
+    CUNITS     = 'm2 s-2',       &
+    CDIR       = 'XY',           &
+    CCOMMENT   = 'X_Y_Z_UV_FLX', &
+    NGRID      = 5,              &
+    NTYPE      = TYPEREAL,       &
+    NDIMS      = 3,              &
+    LTIMEDEP   = .TRUE.          )
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
diff --git a/src/common/turb/mode_turb_hor_uw.F90 b/src/common/turb/mode_turb_hor_uw.F90
index b13acfaa287d3038bec942634f4c1b85dcde385a..1885d3d9eda92940af4df9714b87cb8cf6db225a 100644
--- a/src/common/turb/mode_turb_hor_uw.F90
+++ b/src/common/turb/mode_turb_hor_uw.F90
@@ -66,7 +66,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -137,7 +137,7 @@ INTEGER             :: JSV          ! scalar loop counter
 REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3))  :: GX_W_UW_PWM
 !
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! ---------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARY COMPUTATIONS
@@ -170,16 +170,17 @@ ZFLX(:,:,IKB-1)=2.*ZFLX(:,:,IKB)- ZFLX(:,:,IKB+1)
 !
 ! stores  <U W>
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-  TZFIELD%CMNHNAME   = 'UW_HFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'UW_HFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_UW_HFLX'
-  TZFIELD%NGRID      = 6
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(     &
+  CMNHNAME   = 'UW_HFLX',       &
+  CSTDNAME   = '',              &
+  CLONGNAME  = 'UW_HFLX',       &
+  CUNITS     = 'm2 s-2',        &
+  CDIR       = 'XY',            &
+  CCOMMENT   = 'X_Y_Z_UW_HFLX', &
+  NGRID      = 6,               &
+  NTYPE      = TYPEREAL,        &
+  NDIMS      = 3,               &
+  LTIMEDEP   = .TRUE.           )
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
diff --git a/src/common/turb/mode_turb_hor_vw.F90 b/src/common/turb/mode_turb_hor_vw.F90
index 196734ea63a19cd4b31ef7e735e9fc2a50c89104..2fe089f60f8dc098787ad3c5dea9dd9b858fa9d2 100644
--- a/src/common/turb/mode_turb_hor_vw.F90
+++ b/src/common/turb/mode_turb_hor_vw.F90
@@ -65,7 +65,7 @@ USE MODD_TURB_n, ONLY: TURB_t
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES, ONLY: TLES_t
@@ -136,7 +136,7 @@ INTEGER             :: JSV          ! scalar loop counter
 REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3))  :: GY_W_VW_PWM
 !
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 ! ---------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARY COMPUTATIONS
@@ -176,16 +176,17 @@ ZFLX(:,:,IKB-1)= 2.*ZFLX(:,:,IKB) - ZFLX(:,:,IKB+1)
 !
 ! stores  <V W>
 IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN
-  TZFIELD%CMNHNAME   = 'VW_HFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'VW_HFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_VW_HFLX'
-  TZFIELD%NGRID      = 7
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(       &
+    CMNHNAME   = 'VW_HFLX',       &
+    CSTDNAME   = '',              &
+    CLONGNAME  = 'VW_HFLX',       &
+    CUNITS     = 'm2 s-2',        &
+    CDIR       = 'XY',            &
+    CCOMMENT   = 'X_Y_Z_VW_HFLX', &
+    NGRID      = 7,               &
+    NTYPE      = TYPEREAL,        &
+    NDIMS      = 3,               &
+    LTIMEDEP   = .TRUE.           )
   CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZFLX)
 END IF
 !
diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90
index ddc28851ffc77d70ccf07113d61a243b2297a583..b014aa191d35db68f45b60b86ade811c2159ec3e 100644
--- a/src/common/turb/mode_turb_ver.F90
+++ b/src/common/turb/mode_turb_ver.F90
@@ -2,6 +2,7 @@
 !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_TURB_VER
 IMPLICIT NONE
 CONTAINS
@@ -9,7 +10,7 @@ SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,TLES,KRR,KRRL,KRRI,KGRADIENTS,&
                       OOCEAN,ODEEPOC,OCOMPUTE_SRC,                  &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
                       PEXPL, HPROGRAM, O2D, ONOMIXLG, OFLAT,        &
-                      OCOUPLES,OBLOWSNOW,PRSNOW,                    & 
+                      OCOUPLES,OBLOWSNOW,OFLYER,PRSNOW,             & 
                       PTSTEP, TPFILE,                               &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                       PCOSSLOPE,PSINSLOPE,                          &
@@ -209,29 +210,29 @@ SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,TLES,KRR,KRRL,KRRI,KGRADIENTS,&
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE PARKIND1, ONLY: JPRB
+USE YOMHOOK,  ONLY: LHOOK, DR_HOOK
 !
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_CST,            ONLY: CST_t
+USE MODD_CTURB,          ONLY: CSTURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES, ONLY: TLES_t
-USE MODD_TURB_n, ONLY: TURB_t
-!
-USE MODE_EMOIST, ONLY: EMOIST
-USE MODE_ETHETA, ONLY: ETHETA
-USE MODE_GRADIENT_M_PHY, ONLY : GZ_M_W_PHY
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
-USE MODE_PRANDTL, ONLY: PSI_SV, PSI3, PHI3, PRANDTL
-USE MODE_SBL_DEPTH, ONLY: SBL_DEPTH
+USE MODD_PARAMETERS,     ONLY: JPVEXT_TURB
+USE MODD_LES,            ONLY: TLES_t
+USE MODD_TURB_n,         ONLY: TURB_t
+!
+USE MODE_EMOIST,               ONLY: EMOIST
+USE MODE_ETHETA,               ONLY: ETHETA
+USE MODE_GRADIENT_M_PHY,       ONLY: GZ_M_W_PHY
+USE MODE_IO_FIELD_WRITE,       ONLY: IO_FIELD_WRITE_PHY
+USE MODE_PRANDTL,              ONLY: PSI_SV, PSI3, PHI3, PRANDTL
+USE MODE_SBL_DEPTH,            ONLY: SBL_DEPTH
+USE MODE_TURB_VER_DYN_FLUX,    ONLY: TURB_VER_DYN_FLUX
+USE MODE_TURB_VER_SV_FLUX,     ONLY: TURB_VER_SV_FLUX
+USE MODE_TURB_VER_SV_CORR,     ONLY: TURB_VER_SV_CORR
 USE MODE_TURB_VER_THERMO_FLUX, ONLY: TURB_VER_THERMO_FLUX
 USE MODE_TURB_VER_THERMO_CORR, ONLY: TURB_VER_THERMO_CORR
-USE MODE_TURB_VER_DYN_FLUX, ONLY: TURB_VER_DYN_FLUX
-USE MODE_TURB_VER_SV_FLUX, ONLY: TURB_VER_SV_FLUX
-USE MODE_TURB_VER_SV_CORR, ONLY: TURB_VER_SV_CORR
 !
 USE MODI_LES_MEAN_SUBGRID_PHY
 USE MODI_SECOND_MNH
@@ -252,6 +253,7 @@ INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
 INTEGER,                INTENT(IN)   :: KSV, KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
+LOGICAL,                INTENT(IN)   ::  OFLYER       ! MesoNH flyer diagnostic
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
@@ -386,8 +388,8 @@ INTEGER :: IKB,IKE,IIJE,IIJB,IKT   ! index value for the Beginning
 INTEGER :: JSV,JIJ,JK ! loop counter
 REAL    :: ZTIME1
 REAL    :: ZTIME2
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-TYPE(TFIELDDATA) :: TZFIELD
+REAL(KIND=JPRB)      :: ZHOOK_HANDLE
+TYPE(TFIELDMETADATA) :: TZFIELD
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
 !
@@ -502,7 +504,7 @@ ENDIF
 !
   CALL  TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,TLES,                 &
                         KRR,KRRL,KRRI,KSV,KGRADIENTS,                 &
-                        OOCEAN,ODEEPOC,                               &
+                        OOCEAN,ODEEPOC,OFLYER,                        &
                         OCOUPLES,OCOMPUTE_SRC,                        &
                         PEXPL,PTSTEP,HPROGRAM,TPFILE,                 &
                         PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
@@ -575,7 +577,7 @@ IF (TURBN%LHARAT) ZLM(:,:)=PLENGTHH(:,:)
 IF (KSV>0)                                                          &
 CALL  TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,TLES,ONOMIXLG,            &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
-                      OBLOWSNOW,                                    &
+                      OBLOWSNOW,OFLYER,                             &
                       PEXPL,PTSTEP,TPFILE,PRSNOW,                   &
                       PDZZ,PDIRCOSZW,                               &
                       PRHODJ,PWM,                                   &
@@ -613,42 +615,46 @@ IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED .AND. .NOT. TURBN%LHARAT) THEN
 !
 ! stores the Turbulent Prandtl number
 ! 
-  TZFIELD%CMNHNAME   = 'PHI3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'PHI3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'Turbulent Prandtl number'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                  &
+    CMNHNAME   = 'PHI3',                     &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'PHI3',                     &
+    CUNITS     = '1',                        &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'Turbulent Prandtl number', &
+    NGRID      = 4,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZPHI3)
 !
 ! stores the Turbulent Schmidt number
 ! 
-  TZFIELD%CMNHNAME   = 'PSI3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'PSI3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'Turbulent Schmidt number'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                  &
+    CMNHNAME   = 'PSI3',                     &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'PSI3',                     &
+    CUNITS     = '1',                        &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'Turbulent Schmidt number', &
+    NGRID      = 4,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZPSI3)
 !
 !
 ! stores the Turbulent Schmidt number for the scalar variables
 ! 
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                    &
+    CMNHNAME   = 'generic for SV in turb_ver', & !Temporary name to ease identification
+    CSTDNAME   = '',                           &
+    CUNITS     = '1',                          &
+    CDIR       = 'XY',                         &
+    NGRID      = 4,                            &
+    NTYPE      = TYPEREAL,                     &
+    NDIMS      = 3,                            &
+    LTIMEDEP   = .TRUE.                        )
   DO JSV=1,KSV
     WRITE(TZFIELD%CMNHNAME, '("PSI_SV_",I3.3)') JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90
index f68fc2d2377fd6263dac088a2fc9570162bf782f..17f8d55009e8e4a0c251bc3f79d9b715a4ebcf6c 100644
--- a/src/common/turb/mode_turb_ver_dyn_flux.F90
+++ b/src/common/turb/mode_turb_ver_dyn_flux.F90
@@ -204,31 +204,29 @@ SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,TLES,KSV,O2D,OFLAT, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
 !
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_CST,            ONLY: CST_t
+USE MODD_CTURB,          ONLY: CSTURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_LES, ONLY: TLES_t
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
-USE MODD_TURB_n, ONLY: TURB_t
+USE MODD_LES,            ONLY: TLES_t
+USE MODD_PARAMETERS,     ONLY: JPVEXT_TURB, XUNDEF
+USE MODD_TURB_n,         ONLY: TURB_t
 !
-USE SHUMAN_PHY
 USE MODE_GRADIENT_U_PHY, ONLY : GZ_U_UW_PHY, GX_U_M_PHY
 USE MODE_GRADIENT_V_PHY, ONLY : GZ_V_VW_PHY, GY_V_M_PHY
 USE MODE_GRADIENT_W_PHY, ONLY : GX_W_UW_PHY, GY_W_VW_PHY, GZ_W_M_PHY
 USE MODE_GRADIENT_M_PHY, ONLY : GX_M_U_PHY, GY_M_V_PHY
-!
-USE MODI_SECOND_MNH
-!
-USE MODE_TRIDIAG_WIND, ONLY: TRIDIAG_WIND
-USE MODI_LES_MEAN_SUBGRID_PHY
-!
 USE MODE_IO_FIELD_WRITE, only: IO_FIELD_WRITE_PHY
 USE MODE_ll
+USE MODE_TRIDIAG_WIND,   ONLY: TRIDIAG_WIND
+!
+USE MODI_LES_MEAN_SUBGRID_PHY
+USE MODI_SECOND_MNH
 !
 IMPLICIT NONE
 !
@@ -334,7 +332,7 @@ REAL, DIMENSION(D%NIJT)   :: ZCOEFFLXU, &
                                     ! PVSLOPEM in local 3D arrays
 !
 REAL :: ZTIME1, ZTIME2, ZCMFS
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !----------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARIES
@@ -516,16 +514,17 @@ END IF
 !
 IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
   ! stores the U wind component vertical flux
-  TZFIELD%CMNHNAME   = 'UW_VFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'UW_VFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'U wind component vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                        &
+    CMNHNAME   = 'UW_VFLX',                        &
+    CSTDNAME   = '',                               &
+    CLONGNAME  = 'UW_VFLX',                        &
+    CUNITS     = 'm2 s-2',                         &
+    CDIR       = 'XY',                             &
+    CCOMMENT   = 'U wind component vertical flux', &
+    NGRID      = 4,                                &
+    NTYPE      = TYPEREAL,                         &
+    NDIMS      = 3,                                &
+    LTIMEDEP   = .TRUE.                            )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
@@ -882,16 +881,17 @@ END IF
 !
 IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
   ! stores the V wind component vertical flux
-  TZFIELD%CMNHNAME   = 'VW_VFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'VW_VFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'V wind component vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                        &
+    CMNHNAME   = 'VW_VFLX',                        &
+    CSTDNAME   = '',                               &
+    CLONGNAME  = 'VW_VFLX',                        &
+    CUNITS     = 'm2 s-2',                         &
+    CDIR       = 'XY',                             &
+    CCOMMENT   = 'V wind component vertical flux', &
+    NGRID      = 4,                                &
+    NTYPE      = TYPEREAL,                         &
+    NDIMS      = 3,                                &
+    LTIMEDEP   = .TRUE.                            )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
@@ -1119,16 +1119,17 @@ IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED .AND. TURBN%CTURBDIM == '1DIM') THEN
   ! to be tested &
   !   +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:)
   ! stores the W variance
-  TZFIELD%CMNHNAME   = 'W_VVAR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'W_VVAR'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_W_VVAR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(      &
+    CMNHNAME   = 'W_VVAR',       &
+    CSTDNAME   = '',             &
+    CLONGNAME  = 'W_VVAR',       &
+    CUNITS     = 'm2 s-2',       &
+    CDIR       = 'XY',           &
+    CCOMMENT   = 'X_Y_Z_W_VVAR', &
+    NGRID      = 1,              &
+    NTYPE      = TYPEREAL,       &
+    NDIMS      = 3,              &
+    LTIMEDEP   = .TRUE.          )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90
index e1bc59249485149a8d7189f5fd8c4801ae66b5a8..09d51b09c9b107d184a2c192d057c3043afd55fe 100644
--- a/src/common/turb/mode_turb_ver_sv_flux.F90
+++ b/src/common/turb/mode_turb_ver_sv_flux.F90
@@ -1,13 +1,14 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-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.
+!-----------------------------------------------------------------
 MODULE MODE_TURB_VER_SV_FLUX
 IMPLICIT NONE
 CONTAINS
 SUBROUTINE TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,TLES,ONOMIXLG,       &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
-                      OBLOWSNOW,                                    &
+                      OBLOWSNOW,OFLYER,                             &
                       PEXPL,PTSTEP,TPFILE,PRSNOW,                   &
                       PDZZ,PDIRCOSZW,                               &
                       PRHODJ,PWM,                                   &
@@ -201,35 +202,34 @@ SUBROUTINE TURB_VER_SV_FLUX(D,CST,CSTURB,TURBN,TLES,ONOMIXLG,       &
 !!                                   to avoid unknwon values outside physical domain
 !!                                   and avoid negative values in sv tendencies
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      Modifications: June 2019 (Wim de Rooy) with energycascade, 50MF nog
-!!                                             longer necessary
+!  Wim de Rooy    06/2019: with energycascade, 50MF nog longer necessary
+!  P. Wautelet 30/11/2022: compute PWSV only when needed
 !!--------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_TURB_n, ONLY: TURB_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES, ONLY: TLES_t
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
-!
-
-USE SHUMAN_PHY , ONLY : DZM_PHY, MZM_PHY, MZF_PHY
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: DZM_PHY, MZM_PHY, MZF_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
+!
+USE MODD_CST,              ONLY: CST_t
+USE MODD_CTURB,            ONLY: CSTURB_t
+USE MODD_DIMPHYEX,         ONLY: DIMPHYEX_t
+USE MODD_FIELD,            ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LES,              ONLY: TLES_t
+USE MODD_PARAMETERS,       ONLY: JPVEXT_TURB, NMNHNAMELGTMAX
+USE MODD_TURB_n,           ONLY: TURB_t
+!
+USE MODE_EMOIST,         ONLY: EMOIST
+USE MODE_ETHETA,         ONLY: ETHETA
 USE MODE_GRADIENT_W_PHY, ONLY: GZ_W_M_PHY
 USE MODE_GRADIENT_M_PHY, ONLY: GZ_M_W_PHY
-USE MODE_TRIDIAG, ONLY: TRIDIAG
-USE MODE_EMOIST, ONLY: EMOIST
-USE MODE_ETHETA, ONLY: ETHETA
-USE MODI_LES_MEAN_SUBGRID_PHY
+USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
+USE MODE_TRIDIAG,        ONLY: TRIDIAG
 !
+USE MODI_LES_MEAN_SUBGRID_PHY
 USE MODI_SECOND_MNH
 !
 IMPLICIT NONE
@@ -246,6 +246,7 @@ INTEGER,                INTENT(IN)   :: KSV, &
                                        KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables (modd_conf)
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
+LOGICAL,                INTENT(IN)   ::  OFLYER       ! MesoNH flyer diagnostic
 REAL,                   INTENT(IN)   ::  PRSNOW       ! Ratio for diffusion coeff. scalar (blowing snow)
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
@@ -302,13 +303,14 @@ REAL :: ZTIME1, ZTIME2
 REAL :: ZCSVP = 4.0  ! constant for scalar flux presso-correlation (RS81)
 REAL :: ZCSV          !constant for the scalar flux
 !
-TYPE(TFIELDDATA)  :: TZFIELD
+CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME
+REAL(KIND=JPRB)               :: ZHOOK_HANDLE
+TYPE(TFIELDMETADATA)          :: TZFIELD
 !----------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARIES
 !             -------------
 !
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_FLUX',0,ZHOOK_HANDLE)
 !
 IKT=D%NKT  
@@ -323,7 +325,7 @@ IIJB=D%NIJB
 !
 IF (TURBN%LHARAT) THEN
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
-  ZKEFF(IIJB:IIJE,IKB:IKE) =  PLM(IIJB:IIJE,IKB:IKE) * SQRT(PTKEM(IIJB:IIJE,IKB:IKE))
+  ZKEFF(IIJB:IIJE,1:IKT) =  PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT))
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
 ELSE
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
@@ -351,16 +353,16 @@ DO JSV=1,KSV
 ! Preparation of the arguments for TRIDIAG
     IF (TURBN%LHARAT) THEN
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)  
-      ZA(IIJB:IIJE,IKB:IKE) = -PTSTEP * ZKEFF(IIJB:IIJE,IKB:IKE) * ZWORK1(IIJB:IIJE,IKB:IKE) &
-                                   / PDZZ(IIJB:IIJE,IKB:IKE)**2
+      ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZKEFF(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) &
+                                   / PDZZ(IIJB:IIJE,1:IKT)**2
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
     ELSE
       !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
-      ZA(IIJB:IIJE,IKB:IKE) = -PTSTEP*ZCSV*PPSI_SV(IIJB:IIJE,IKB:IKE,JSV) *   &
-                   ZKEFF(IIJB:IIJE,IKB:IKE) * ZWORK1(IIJB:IIJE,IKB:IKE) / PDZZ(IIJB:IIJE,IKB:IKE)**2
+      ZA(IIJB:IIJE,1:IKT) = -PTSTEP*ZCSV*PPSI_SV(IIJB:IIJE,1:IKT,JSV) *   &
+                   ZKEFF(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT)**2
       !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
     ENDIF
-  ZSOURCE(IIJB:IIJE,IKB:IKE) = 0.
+  ZSOURCE(IIJB:IIJE,1:IKT) = 0.
 !
 ! Compute the sources for the JSVth scalar variable
 
@@ -389,8 +391,8 @@ DO JSV=1,KSV
 !
 !  Compute the equivalent tendency for the JSV scalar variable
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
-  PRSVS(IIJB:IIJE,IKB:IKE,JSV)= PRSVS(IIJB:IIJE,IKB:IKE,JSV)+    &
-                    PRHODJ(IIJB:IIJE,IKB:IKE)*(ZRES(IIJB:IIJE,IKB:IKE)-PSVM(IIJB:IIJE,IKB:IKE,JSV))/PTSTEP
+  PRSVS(IIJB:IIJE,1:IKT,JSV)= PRSVS(IIJB:IIJE,1:IKT,JSV)+    &
+                    PRHODJ(IIJB:IIJE,1:IKT)*(ZRES(IIJB:IIJE,1:IKT)-PSVM(IIJB:IIJE,1:IKT,JSV))/PTSTEP
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
 !
   IF ( (TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL ) THEN
@@ -403,9 +405,9 @@ DO JSV=1,KSV
     CALL MZM_PHY(D,ZWORK1,ZWORK3)
     CALL DZM_PHY(D,ZWORK2,ZWORK4)
     !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
-    ZFLXZ(IIJB:IIJE,IKB:IKE) = -ZCSV * PPSI_SV(IIJB:IIJE,IKB:IKE,JSV) * ZWORK3(IIJB:IIJE,IKB:IKE) & 
-                                    / PDZZ(IIJB:IIJE,IKB:IKE) * &
-                  ZWORK4(IIJB:IIJE,IKB:IKE)
+    ZFLXZ(IIJB:IIJE,1:IKT) = -ZCSV * PPSI_SV(IIJB:IIJE,1:IKT,JSV) * ZWORK3(IIJB:IIJE,1:IKT) & 
+                                    / PDZZ(IIJB:IIJE,1:IKT) * &
+                  ZWORK4(IIJB:IIJE,1:IKT)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
     ! surface flux
     !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
@@ -429,30 +431,35 @@ DO JSV=1,KSV
     !$mnh_expand_array(JIJ=IIJB:IIJE)
     ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-    DO JK=IKTB+1,IKTE-1
+
+    IF ( OFLYER ) THEN
+      DO JK=IKTB+1,IKTE-1
+        !$mnh_expand_array(JIJ=IIJB:IIJE)
+        PWSV(IIJB:IIJE,JK,JSV)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
+        !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+      END DO
       !$mnh_expand_array(JIJ=IIJB:IIJE)
-      PWSV(IIJB:IIJE,JK,JSV)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
+      PWSV(IIJB:IIJE,IKB,JSV)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL))
+      PWSV(IIJB:IIJE,IKE,JSV)=PWSV(IIJB:IIJE,IKE-IKL,JSV)
       !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-    END DO
-    !$mnh_expand_array(JIJ=IIJB:IIJE)
-    PWSV(IIJB:IIJE,IKB,JSV)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL))
-    PWSV(IIJB:IIJE,IKE,JSV)=PWSV(IIJB:IIJE,IKE-IKL,JSV)
-    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+    END IF
  END IF
   !
   IF (TURBN%LTURB_FLX .AND. TPFILE%LOPENED) THEN
     ! stores the JSVth vertical flux
-    WRITE(TZFIELD%CMNHNAME,'("WSV_FLX_",I3.3)') JSV
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    WRITE(YMNHNAME,'("WSV_FLX_",I3.3)') JSV
+    TZFIELD = TFIELDMETADATA(                    &
+      CMNHNAME   = TRIM( YMNHNAME ),             &
+      CSTDNAME   = '',                           &
+      CLONGNAME  = TRIM( YMNHNAME ),             &
     !PW: TODO: use the correct units of the JSV variable (and multiply it by m s-1)
-    TZFIELD%CUNITS     = 'SVUNIT m s-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+      CUNITS     = 'SVUNIT m s-1',               &
+      CDIR       = 'XY',                         &
+      CCOMMENT   = 'X_Y_Z_' // TRIM( YMNHNAME ), &
+      NGRID      = 4,                            &
+      NTYPE      = TYPEREAL,                     &
+      NDIMS      = 3,                            &
+      LTIMEDEP   = .TRUE.                        )
     !
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
   END IF
diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90
index 6d71d9196a2fb302dd634267dfcd024065342357..56c4e01d7c54ac8f2e02d8f7a272f356846a767a 100644
--- a/src/common/turb/mode_turb_ver_thermo_corr.F90
+++ b/src/common/turb/mode_turb_ver_thermo_corr.F90
@@ -2,6 +2,7 @@
 !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_TURB_VER_THERMO_CORR
 IMPLICIT NONE
 CONTAINS      
@@ -203,23 +204,23 @@ SUBROUTINE TURB_VER_THERMO_CORR(D,CST,CSTURB,TURBN,TLES,            &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_TURB_n, ONLY: TURB_t
-USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_LES, ONLY: TLES_t
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZM_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
 !
-USE MODI_LES_MEAN_SUBGRID_PHY
+USE MODD_CST,            ONLY: CST_t
+USE MODD_CTURB,          ONLY: CSTURB_t
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_FIELD,          ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LES,            ONLY: TLES_t
+USE MODD_PARAMETERS,     ONLY: JPVEXT_TURB
+USE MODD_TURB_n,         ONLY: TURB_t
 !
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
 USE MODE_PRANDTL
-USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZM_PHY
 !
+USE MODI_LES_MEAN_SUBGRID_PHY
 USE MODI_SECOND_MNH
 !
 IMPLICIT NONE
@@ -248,7 +249,6 @@ REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of t
                                                       ! normal to the ground surface
 !
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
 
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual
                                                       ! Potential Temperature
@@ -299,6 +299,7 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN)    :: PTHLP      ! guess of thl at t+ deltat
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN)    :: PRP        ! guess of r at t+ deltat
 !
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
 REAL, DIMENSION(MERGE(D%NIJT,0,OCOMPUTE_SRC),&
                 MERGE(D%NKT,0,OCOMPUTE_SRC)),   INTENT(OUT)  ::  PSIGS     ! Vert. part of Sigma_s at t
 !
@@ -346,7 +347,7 @@ LOGICAL :: GFWTH    ! flag to use w'2th'
 LOGICAL :: GFR2     ! flag to use w'r'2
 LOGICAL :: GFWR     ! flag to use w'2r'
 LOGICAL :: GFTHR    ! flag to use w'th'r'
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !----------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARIES
@@ -614,16 +615,17 @@ END IF
   !
   ! stores <THl THl>
   IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    TZFIELD%CMNHNAME   = 'THL_VVAR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'THL_VVAR'
-    TZFIELD%CUNITS     = 'K2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_THL_VVAR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(        &
+      CMNHNAME   = 'THL_VVAR',       &
+      CSTDNAME   = '',               &
+      CLONGNAME  = 'THL_VVAR',       &
+      CUNITS     = 'K2',             &
+      CDIR       = 'XY',             &
+      CCOMMENT   = 'X_Y_Z_THL_VVAR', &
+      NGRID      = 1,                &
+      NTYPE      = TYPEREAL,         &
+      NDIMS      = 3,                &
+      LTIMEDEP   = .TRUE.            )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
   END IF
 !
@@ -927,16 +929,17 @@ END IF
     END IF
     ! stores <THl Rnp>
     IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'THLRCONS_VCOR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'THLRCONS_VCOR'
-      TZFIELD%CUNITS     = 'K kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_THLRCONS_VCOR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+      TZFIELD = TFIELDMETADATA(             &
+        CMNHNAME   = 'THLRCONS_VCOR',       &
+        CSTDNAME   = '',                    &
+        CLONGNAME  = 'THLRCONS_VCOR',       &
+        CUNITS     = 'K kg kg-1',           &
+        CDIR       = 'XY',                  &
+        CCOMMENT   = 'X_Y_Z_THLRCONS_VCOR', &
+        NGRID      = 1,                     &
+        NTYPE      = TYPEREAL,              &
+        NDIMS      = 3,                     &
+        LTIMEDEP   = .TRUE.                 )
       CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
     END IF
 !
@@ -1192,16 +1195,17 @@ ENDIF
     END IF
     ! stores <Rnp Rnp>
     IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'RTOT_VVAR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'RTOT_VVAR'
-      TZFIELD%CUNITS     = 'kg2 kg-2'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_RTOT_VVAR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+      TZFIELD = TFIELDMETADATA(         &
+        CMNHNAME   = 'RTOT_VVAR',       &
+        CSTDNAME   = '',                &
+        CLONGNAME  = 'RTOT_VVAR',       &
+        CUNITS     = 'kg2 kg-2',        &
+        CDIR       = 'XY',              &
+        CCOMMENT   = 'X_Y_Z_RTOT_VVAR', &
+        NGRID      = 1,                 &
+        NTYPE      = TYPEREAL,          &
+        NDIMS      = 3,                 &
+        LTIMEDEP   = .TRUE.             )
       CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
     END IF
     !
diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90
index 97366b22aef729e9d8007ddaf0108e881367d009..618fb377a19214004ad7dcd906efc3e6fbad40b5 100644
--- a/src/common/turb/mode_turb_ver_thermo_flux.F90
+++ b/src/common/turb/mode_turb_ver_thermo_flux.F90
@@ -1,13 +1,14 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-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.
+!-----------------------------------------------------------------
 MODULE MODE_TURB_VER_THERMO_FLUX
 IMPLICIT NONE
 CONTAINS
 SUBROUTINE TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,TLES,            &
                       KRR,KRRL,KRRI,KSV,KGRADIENTS,                 &
-                      OOCEAN,ODEEPOC,                               &
+                      OOCEAN,ODEEPOC,OFLYER,                        &
                       OCOUPLES, OCOMPUTE_SRC,                       &
                       PEXPL,PTSTEP,HPROGRAM,                        &
                       TPFILE,                                       &
@@ -222,34 +223,32 @@ SUBROUTINE TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,TLES,            &
 !!                     June 2020 (B. Vie) Patch preventing negative rc and ri in 2.3 and 3.3
 !! JL Redelsperger  : 03/2021: Ocean and Autocoupling O-A LES Cases
 !!                             Sfc flux shape for LDEEPOC Case
+!  P. Wautelet 30/11/2022: compute PWTH and PWRC only when needed
 !!--------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: DZF_PHY, DZM_PHY, MXF_PHY, MYF_PHY, MZF_PHY, MZM_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
 !
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB, JPHEXT
-USE MODD_TURB_n,         ONLY: TURB_t
-USE MODD_LES, ONLY: TLES_t
-USE MODD_TURB_n, ONLY: TURB_t
-!
-USE MODI_LES_MEAN_SUBGRID_PHY
-USE MODE_TRIDIAG_THERMO, ONLY: TRIDIAG_THERMO
-USE MODE_TM06_H, ONLY: TM06_H
+USE MODD_CST,              ONLY: CST_t
+USE MODD_CTURB,            ONLY: CSTURB_t
+USE MODD_DIMPHYEX,         ONLY: DIMPHYEX_t
+USE MODD_FIELD,            ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LES,              ONLY: TLES_t
+USE MODD_PARAMETERS,       ONLY: JPVEXT_TURB, JPHEXT, XUNDEF
+USE MODD_TURB_n,           ONLY: TURB_t
 !
+USE MODE_GRADIENT_W_PHY, ONLY: GZ_W_M_PHY
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
 USE MODE_PRANDTL
-USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZM_PHY, DZF_PHY, &
-                      MXF_PHY,MYF_PHY
-USE MODE_GRADIENT_W_PHY, ONLY: GZ_W_M_PHY
+USE MODE_TM06_H,         ONLY: TM06_H
+USE MODE_TRIDIAG_THERMO, ONLY: TRIDIAG_THERMO
 !
+USE MODI_LES_MEAN_SUBGRID_PHY
 USE MODI_SECOND_MNH
 !
 IMPLICIT NONE
@@ -263,44 +262,36 @@ TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
 TYPE(TLES_t),           INTENT(INOUT):: TLES          ! modd_les structure
-INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
+INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
+INTEGER,                INTENT(IN)   :: KGRADIENTS    ! Number of stored horizontal gradients
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
+LOGICAL,                INTENT(IN)   ::  OFLYER       ! MesoNH flyer diagnostic
+LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
-CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! CPROGRAM is the program currently running (modd_conf)
 REAL,                   INTENT(IN)   ::  PEXPL        ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
+CHARACTER(LEN=6),       INTENT(IN)   :: HPROGRAM      ! CPROGRAM is the program currently running (modd_conf)
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 !
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
-                                                      ! Metric coefficients
-REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY ! Metric coefficients
+REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the normal to the ground surface
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PZZ          ! altitudes
 !
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual
-                                                      ! Potential Temperature
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual Potential Temperature
 !
-REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
-!                                                     ! t - deltat
-!
-REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
-!                                                     ! t + deltat
+REAL, DIMENSION(D%NIJT,D%NKT,KGRADIENTS),INTENT(IN) :: PHGRAD  ! horizontal gradients
 REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PZS ! orography (for LEONARD terms)
+REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time t - deltat
+REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time t + deltat
 !
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PWM
-! Vertical wind
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTHLM
-! potential temperature at t-Delta t
-REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios
-                                                      ! at t-Delta t
+REAL, DIMENSION(D%NIJT,D%NKT),     INTENT(IN) ::  PWM          ! Vertical wind
+REAL, DIMENSION(D%NIJT,D%NKT),     INTENT(IN) ::  PTHLM        ! potential temperature at t-Delta t
+REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios at t-Delta t
 REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! Mixing ratios
 !
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
@@ -335,13 +326,13 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-REAL, DIMENSION(D%NIJT,D%NKT,KGRADIENTS),INTENT(IN) :: PHGRAD  ! horizontal gradients
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
 REAL, DIMENSION(MERGE(D%NIT,0,TURBN%CTOM=='TM06'),&
                 MERGE(D%NJT,0,TURBN%CTOM=='TM06')),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT)  :: PWTHV         ! buoyancy flux
 !
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(INOUT) :: PRTHLS     ! cumulated source for theta
-REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(INOUT) :: PRRS       ! cumulated source for rt
+REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(INOUT) :: PRRS     ! cumulated source for rt
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(OUT)   :: PTHLP      ! guess of thl at t+ deltat
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(OUT)   :: PRP        ! guess of r at t+ deltat
 !
@@ -396,7 +387,7 @@ LOGICAL :: GFWTH    ! flag to use w'2th'
 LOGICAL :: GFR2     ! flag to use w'r'2
 LOGICAL :: GFWR     ! flag to use w'2r'
 LOGICAL :: GFTHR    ! flag to use w'th'r'
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !----------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARIES
@@ -672,42 +663,48 @@ ELSE
   !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END IF
 !
-DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JIJ=IIJB:IIJE)
-  PWTH(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
-  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-END DO
-!
-!$mnh_expand_array(JIJ=IIJB:IIJE)
-PWTH(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL)) 
-!$mnh_end_expand_array(JIJ=IIJB:IIJE)
-!
-IF (OOCEAN) THEN
-  !$mnh_expand_array(JIJ=IIJB:IIJE)
-  PWTH(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL))
-  PWTH(IIJB:IIJE,IKA)=0.
-  PWTH(IIJB:IIJE,IKU)=PWTH(IIJB:IIJE,IKE)! not used
-  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-ELSE
+IF ( OFLYER ) THEN
+  PWTH(:,:IKTB) = XUNDEF
+  PWTH(:,IKTE:) = XUNDEF
+  !
+  DO JK = IKTB + 1, IKTE - 1
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PWTH(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+  END DO
+  !
   !$mnh_expand_array(JIJ=IIJB:IIJE)
-  PWTH(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL))
-  PWTH(IIJB:IIJE,IKE)=PWTH(IIJB:IIJE,IKE-IKL)
-  PWTH(IIJB:IIJE,IKU)=0.
+  PWTH(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL)) 
   !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+  !
+  IF (OOCEAN) THEN
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PWTH(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL))
+    PWTH(IIJB:IIJE,IKA)=0.
+    PWTH(IIJB:IIJE,IKU)=PWTH(IIJB:IIJE,IKE)! not used
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+  ELSE
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PWTH(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL))
+    PWTH(IIJB:IIJE,IKE)=PWTH(IIJB:IIJE,IKE-IKL)
+    PWTH(IIJB:IIJE,IKU)=0.
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+  END IF
 END IF
 !
 IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
   ! stores the conservative potential temperature vertical flux
-  TZFIELD%CMNHNAME   = 'THW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'THW_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'Conservative potential temperature vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                                         &
+   CMNHNAME   = 'THW_FLX',                                          &
+   CSTDNAME   = '',                                                 &
+   CLONGNAME  = 'THW_FLX',                                          &
+   CUNITS     = 'K m s-1',                                          &
+   CDIR       = 'XY',                                               &
+   CCOMMENT   = 'Conservative potential temperature vertical flux', &
+   NGRID      = 4,                                                  &
+   NTYPE      = TYPEREAL,                                           &
+   NDIMS      = 3,                                                  &
+   LTIMEDEP   = .TRUE.                                              )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
@@ -1061,41 +1058,44 @@ IF (KRR /= 0) THEN
     ZFLXZ(IIJB:IIJE,IKU) = ZFLXZ(IIJB:IIJE,IKE)
   END IF
   !
-  DO JK=IKTB+1,IKTE-1
+  IF ( OFLYER ) THEN
+    DO JK=IKTB+1,IKTE-1
+      !$mnh_expand_array(JIJ=IIJB:IIJE)
+      PWRC(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
+      !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+    END DO
     !$mnh_expand_array(JIJ=IIJB:IIJE)
-    PWRC(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL))
+    PWRC(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL))
     !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-  END DO
-  !$mnh_expand_array(JIJ=IIJB:IIJE)
-  PWRC(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL))
-  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
-  !
-  IF (OOCEAN) THEN
-    !$mnh_expand_array(JIJ=IIJB:IIJE)          
-    PWRC(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL))
-    PWRC(IIJB:IIJE,IKA)=0.
-    PWRC(IIJB:IIJE,IKE+1)=ZFLXZ(IIJB:IIJE,IKE+1)
-    !$mnh_end_expand_array(JIJ=IIJB:IIJE)    
-  ELSE
-    !$mnh_expand_array(JIJ=IIJB:IIJE)
-    PWRC(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL))
-    PWRC(IIJB:IIJE,IKE)=PWRC(IIJB:IIJE,IKE-IKL)
-    PWRC(IIJB:IIJE,IKU)=0.
-    !$mnh_end_expand_array(JIJ=IIJB:IIJE)    
-  ENDIF
+    !
+    IF (OOCEAN) THEN
+      !$mnh_expand_array(JIJ=IIJB:IIJE)          
+      PWRC(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL))
+      PWRC(IIJB:IIJE,IKA)=0.
+      PWRC(IIJB:IIJE,IKE+1)=ZFLXZ(IIJB:IIJE,IKE+1)
+      !$mnh_end_expand_array(JIJ=IIJB:IIJE)    
+    ELSE
+      !$mnh_expand_array(JIJ=IIJB:IIJE)
+      PWRC(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL))
+      PWRC(IIJB:IIJE,IKE)=PWRC(IIJB:IIJE,IKE-IKL)
+      PWRC(IIJB:IIJE,IKU)=0.
+      !$mnh_end_expand_array(JIJ=IIJB:IIJE)    
+    END IF
+  END IF
   !
   IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
     ! stores the conservative mixing ratio vertical flux
-    TZFIELD%CMNHNAME   = 'RCONSW_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RCONSW_FLX'
-    TZFIELD%CUNITS     = 'kg m s-1 kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Conservative mixing ratio vertical flux'
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(                                 &
+      CMNHNAME   = 'RCONSW_FLX',                              &
+      CSTDNAME   = '',                                        &
+      CLONGNAME  = 'RCONSW_FLX',                              &
+      CUNITS     = 'kg m s-1 kg-1',                           &
+      CDIR       = 'XY',                                      &
+      CCOMMENT   = 'Conservative mixing ratio vertical flux', &
+      NGRID      = 4,                                         &
+      NTYPE      = TYPEREAL,                                  &
+      NDIMS      = 3,                                         &
+      LTIMEDEP   = .TRUE.                                     )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
@@ -1273,16 +1273,17 @@ IF ( ((TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL) .AND. (KRRL >
   !
   ! store the liquid water mixing ratio vertical flux
   IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    TZFIELD%CMNHNAME   = 'RCW_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RCW_FLX'
-    TZFIELD%CUNITS     = 'kg m s-1 kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Liquid water mixing ratio vertical flux'
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(                                 &
+      CMNHNAME   = 'RCW_FLX',                                 &
+      CSTDNAME   = '',                                        &
+      CLONGNAME  = 'RCW_FLX',                                 &
+      CUNITS     = 'kg m s-1 kg-1',                           &
+      CDIR       = 'XY',                                      &
+      CCOMMENT   = 'Liquid water mixing ratio vertical flux', &
+      NGRID      = 4,                                         &
+      NTYPE      = TYPEREAL,                                  &
+      NDIMS      = 3,                                         &
+      LTIMEDEP   = .TRUE.                                     )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90
index 3694890aeed0689c5cfd322fe6b39c9dfdb739b5..747f10538154c6456a3824f929eff22814de4330 100644
--- a/src/common/turb/modi_turb.F90
+++ b/src/common/turb/modi_turb.F90
@@ -8,7 +8,7 @@ INTERFACE
               & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO,       &
               & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM,    &
               & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH,   &
-              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,OIBM,           &
+              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,OIBM,OFLYER,    &
               & OCOMPUTE_SRC, PRSNOW,                                 &
               & OOCEAN,ODEEPOC,ODIAG_IN_RUN,                          &
               & HTURBLEN_CL,HCLOUD,                                   &
@@ -61,6 +61,7 @@ INTEGER,                INTENT(IN)   ::  KHALO        ! Size of the halo for par
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
+LOGICAL,                INTENT(IN)   ::  OFLYER       ! MesoNH flyer diagnostic
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
diff --git a/src/common/turb/shallow_mf.F90 b/src/common/turb/shallow_mf.F90
index ec3a76764d15e02c60fa00531c59a39a99fb6bad..898883076890bc04c938b2339d1c956b653fff5c 100644
--- a/src/common/turb/shallow_mf.F90
+++ b/src/common/turb/shallow_mf.F90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -72,6 +72,10 @@
 !*      0. DECLARATIONS
 !          ------------
 !
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: MXM_PHY, MYM_PHY
+USE YOMHOOK,    ONLY: LHOOK, DR_HOOK
+!
 USE MODD_BUDGET,          ONLY: TBUDGETCONF_t, TBUDGETDATA, NBUDGET_U,  NBUDGET_V, &
                                 NBUDGET_TH,  NBUDGET_RV, NBUDGET_SV1
 USE MODD_DIMPHYEX,        ONLY: DIMPHYEX_t
@@ -82,18 +86,15 @@ USE MODD_TURB_n,          ONLY: TURB_t
 USE MODD_CTURB,           ONLY: CSTURB_t
 USE MODD_PARAMETERS,      ONLY: JPSVMAX
 !
-USE MODE_BUDGET,         ONLY: BUDGET_STORE_ADD_PHY
-USE MODE_THL_RT_FROM_TH_R_MF, ONLY: THL_RT_FROM_TH_R_MF
-USE MODE_COMPUTE_UPDRAFT, ONLY: COMPUTE_UPDRAFT
+USE MODE_BUDGET,                 ONLY: BUDGET_STORE_ADD_PHY
+USE MODE_COMPUTE_MF_CLOUD,       ONLY: COMPUTE_MF_CLOUD
+USE MODE_COMPUTE_UPDRAFT,        ONLY: COMPUTE_UPDRAFT
+USE MODE_COMPUTE_UPDRAFT_RAHA,   ONLY: COMPUTE_UPDRAFT_RAHA
 USE MODE_COMPUTE_UPDRAFT_RHCJ10, ONLY: COMPUTE_UPDRAFT_RHCJ10
-USE MODE_COMPUTE_UPDRAFT_RAHA, ONLY: COMPUTE_UPDRAFT_RAHA
-USE MODE_MF_TURB, ONLY: MF_TURB
-USE MODE_MF_TURB_EXPL, ONLY: MF_TURB_EXPL
-USE MODE_COMPUTE_MF_CLOUD, ONLY: COMPUTE_MF_CLOUD
-USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE SHUMAN_PHY, ONLY: MXM_PHY, MYM_PHY
+USE MODE_MF_TURB,                ONLY: MF_TURB
+USE MODE_MF_TURB_EXPL,           ONLY: MF_TURB_EXPL
+USE MODE_MSG,                    ONLY: PRINT_MSG, NVERB_FATAL
+USE MODE_THL_RT_FROM_TH_R_MF,    ONLY: THL_RT_FROM_TH_R_MF
 !
 IMPLICIT NONE
 
@@ -120,16 +121,15 @@ REAL,                   INTENT(IN)   :: PTSTEP    ! Dynamical timestep
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PZZ         ! Height of flux point
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PDZZ        ! Metric coefficients
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PRHODJ      ! dry density * Grid size
-REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PRHODREF    ! dry density of the
-                                                     ! reference state
+REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PRHODREF    ! dry density of the reference state
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PPABSM      ! Pressure at time t-1
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PEXNM       ! Exner function at t-dt
 
-REAL, DIMENSION(D%NIJT),   INTENT(IN)   ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
-REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)   ::  PTHM        ! Theta at t-dt
+REAL, DIMENSION(D%NIJT),           INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv
+REAL, DIMENSION(D%NIJT,D%NKT),     INTENT(IN) ::  PTHM        ! Theta at t-dt
 REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(IN) ::  PRM         ! water var. at t-dt
-REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
-REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(IN) ::  PTKEM       ! tke at t-dt
+REAL, DIMENSION(D%NIJT,D%NKT),     INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
+REAL, DIMENSION(D%NIJT,D%NKT),     INTENT(IN) ::  PTKEM       ! tke at t-dt
 REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
 
 REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(OUT)::  PDUDT_MF     ! tendency of U   by massflux scheme
@@ -157,13 +157,13 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT) ::  PFRAC_UP  ! updraft fraction
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT) ::  PEMF      ! updraft mass flux
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) ::  PDETR     ! updraft detrainment
 REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) ::  PENTR     ! updraft entrainment
-INTEGER,DIMENSION(D%NIJT), INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL
-REAL,                 INTENT(IN)  :: PDX, PDY
-REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN),OPTIONAL ::  PRSVS ! sources of sv (for Budgets with lagrangian tracer)
-TYPE(TBUDGETCONF_t),    INTENT(IN),OPTIONAL   :: BUCONF       ! budget structure
-INTEGER,                INTENT(IN)   :: KBUDGETS     ! option. because not used in arpifs
-TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT),OPTIONAL :: TBUDGETS 
-REAL,DIMENSION(JPSVMAX),INTENT(IN),OPTIONAL   :: PSVMIN       ! minimum value for SV variables (for Budgets)
+INTEGER,DIMENSION(D%NIJT),     INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL
+REAL,                          INTENT(IN)  :: PDX, PDY
+REAL, DIMENSION(D%NIJT,D%NKT,KSV),      INTENT(IN),    OPTIONAL :: PRSVS ! sources of sv (for Budgets with lagrangian tracer)
+REAL,DIMENSION(JPSVMAX),                INTENT(IN),    OPTIONAL :: PSVMIN       ! minimum value for SV variables (for Budgets)
+TYPE(TBUDGETCONF_t),                    INTENT(IN),    OPTIONAL :: BUCONF       ! budget structure
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT), OPTIONAL :: TBUDGETS
+INTEGER,                                INTENT(IN)              :: KBUDGETS     ! option. because not used in arpifs
 
 !
 !                     0.2  Declaration of local variables
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index e0713fcd3a642d3f4888df1f9548d6769958e08a..58e0ba1847373e468597bdfa8ed1590f97281dc0 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -7,7 +7,7 @@
               & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO,       &
               & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM,    &
               & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH,   &
-              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,OIBM,           &
+              & O2D,ONOMIXLG,OFLAT,OCOUPLES,OBLOWSNOW,OIBM,OFLYER,    &
               & OCOMPUTE_SRC, PRSNOW,                                 &
               & OOCEAN,ODEEPOC,ODIAG_IN_RUN,                          &
               & HTURBLEN_CL,HCLOUD,                                   &
@@ -226,7 +226,7 @@
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
 !  Q. Rodier      01/2018: introduction of RM17
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!!                     June 2019 (Wim de Rooy)  update statistical cloud scheme
+!  Wim de Rooy    06/2019: update statistical cloud scheme
 !  P. Wautelet    02/2020: use the new data structures and subroutines for budgets
 !  B. Vie         03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets
 !  P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices
@@ -239,45 +239,44 @@
 !*      0. DECLARATIONS
 !          ------------
 !
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE PARKIND1,   ONLY: JPRB
+USE SHUMAN_PHY, ONLY: MZF_PHY,MXF_PHY,MYF_PHY
+USE YOMHOOK ,   ONLY: LHOOK, DR_HOOK
 !
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB, XUNDEF
-USE MODD_CST, ONLY: CST_t
-USE MODD_CTURB, ONLY: CSTURB_t
-USE MODD_BUDGET, ONLY:      NBUDGET_U,  NBUDGET_V,  NBUDGET_W,  NBUDGET_TH, NBUDGET_RV, NBUDGET_RC,  &
+USE MODD_BUDGET,     ONLY:  NBUDGET_U,  NBUDGET_V,  NBUDGET_W,  NBUDGET_TH, NBUDGET_RV, NBUDGET_RC,  &
                             NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
                             TBUDGETDATA, TBUDGETCONF_t
-USE MODD_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODD_IO, ONLY: TFILEDATA
-!
-USE MODD_LES, ONLY : TLES_t
+USE MODD_CST,        ONLY: CST_t
+USE MODD_CTURB,      ONLY: CSTURB_t
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_TURB_n, ONLY: TURB_t
-!
-USE MODE_BL89, ONLY: BL89
-USE MODE_TURB_VER, ONLY : TURB_VER
-USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND, UPDATE_ROTATE_WIND
-USE MODE_TURB_HOR_SPLT, ONLY: TURB_HOR_SPLT
-USE MODE_TKE_EPS_SOURCES, ONLY: TKE_EPS_SOURCES
-USE MODE_RMC01, ONLY: RMC01
-USE MODE_TM06, ONLY: TM06
-USE MODE_UPDATE_LM, ONLY: UPDATE_LM
-USE MODE_BUDGET,         ONLY: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE_PHY
-USE MODE_SBL_PHY, ONLY: LMO
+USE MODD_FIELD,      ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LES,        ONLY: TLES_t
+USE MODD_PARAMETERS, ONLY: JPVEXT_TURB, XUNDEF
+USE MODD_TURB_n,     ONLY: TURB_t
+!
+USE MODE_BL89,                ONLY: BL89
+USE MODE_BUDGET,              ONLY: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
+USE MODE_EMOIST,              ONLY: EMOIST
+USE MODE_ETHETA,              ONLY: ETHETA
+USE MODE_GRADIENT_U_PHY,      ONLY: GZ_U_UW_PHY
+USE MODE_GRADIENT_V_PHY,      ONLY: GZ_V_VW_PHY
+USE MODE_GRADIENT_W_PHY,      ONLY: GZ_W_M_PHY
+USE MODE_GRADIENT_M_PHY,      ONLY: GZ_M_W_PHY
+USE MODE_IBM_MIXINGLENGTH,    ONLY: IBM_MIXINGLENGTH
+USE MODE_IO_FIELD_WRITE,      ONLY: IO_FIELD_WRITE_PHY
+USE MODE_RMC01,               ONLY: RMC01
+USE MODE_ROTATE_WIND,         ONLY: ROTATE_WIND, UPDATE_ROTATE_WIND
+USE MODE_SBL_PHY,             ONLY: LMO
 USE MODE_SOURCES_NEG_CORRECT, ONLY: SOURCES_NEG_CORRECT_PHY
-USE MODE_EMOIST, ONLY: EMOIST
-USE MODE_ETHETA, ONLY: ETHETA
-USE MODE_IBM_MIXINGLENGTH, ONLY: IBM_MIXINGLENGTH
+USE MODE_TM06,                ONLY: TM06
+USE MODE_TKE_EPS_SOURCES,     ONLY: TKE_EPS_SOURCES
+USE MODE_TURB_HOR_SPLT,       ONLY: TURB_HOR_SPLT
+USE MODE_TURB_VER,            ONLY: TURB_VER
+USE MODE_UPDATE_LM,           ONLY: UPDATE_LM
 !
 USE MODI_LES_MEAN_SUBGRID_PHY
 !
-USE SHUMAN_PHY, ONLY : MZF_PHY,MXF_PHY,MYF_PHY
-USE MODE_GRADIENT_U_PHY, ONLY : GZ_U_UW_PHY
-USE MODE_GRADIENT_V_PHY, ONLY : GZ_V_VW_PHY
-USE MODE_GRADIENT_W_PHY, ONLY : GZ_W_M_PHY
-USE MODE_GRADIENT_M_PHY, ONLY : GZ_M_W_PHY
 !
 IMPLICIT NONE
 !
@@ -305,6 +304,7 @@ INTEGER,                INTENT(IN)   :: KMODEL_CL     ! model number for cloud m
 LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
+LOGICAL,                INTENT(IN)   ::  OFLYER       ! MesoNH flyer diagnostic
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
@@ -500,7 +500,7 @@ REAL                :: ZALPHA       ! work coefficient :
 !                                   !   BL89 mixing length near the surface
 !
 REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !
 !*      1.PRELIMINARIES
 !         -------------
@@ -533,7 +533,7 @@ ZEXPL = 1.- TURBN%XIMPL
 ZRVORD= CST%XRV / CST%XRD
 !
 !Copy data into ZTHLM and ZRM only if needed
-IF (TURBN%CTURBLEN=='BL89' .OR. TURBN%CTURBLEN=='RM17' .OR. TURBN%CTURBLEN=='ADAP' .OR. TURBN%LRMC01) THEN
+IF (TURBN%CTURBLEN=='BL89' .OR. TURBN%CTURBLEN=='RM17' .OR. TURBN%CTURBLEN=='HM21' .OR. TURBN%LRMC01) THEN
   ZTHLM(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT)
   ZRM(IIJB:IIJE,1:IKT,:) = PRT(IIJB:IIJE,1:IKT,:)
 END IF
@@ -641,28 +641,30 @@ IF (KRRL >=1) THEN
 !
 !
   IF ( TPFILE%LOPENED .AND. TURBN%LTURB_DIAG ) THEN
-    TZFIELD%CMNHNAME   = 'ATHETA'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'ATHETA'
-    TZFIELD%CUNITS     = 'm'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_ATHETA'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(      &
+      CMNHNAME   = 'ATHETA',       &
+      CSTDNAME   = '',             &
+      CLONGNAME  = 'ATHETA',       &
+      CUNITS     = 'm',            &
+      CDIR       = 'XY',           &
+      CCOMMENT   = 'X_Y_Z_ATHETA', &
+      NGRID      = 1,              &
+      NTYPE      = TYPEREAL,       &
+      NDIMS      = 3,              &
+      LTIMEDEP   = .TRUE.          )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZATHETA)
 !
-    TZFIELD%CMNHNAME   = 'AMOIST'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'AMOIST'
-    TZFIELD%CUNITS     = 'm'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_AMOIST'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(      &
+      CMNHNAME   = 'AMOIST',       &
+      CSTDNAME   = '',             &
+      CLONGNAME  = 'AMOIST',       &
+      CUNITS     = 'm',            &
+      CDIR       = 'XY',           &
+      CCOMMENT   = 'X_Y_Z_AMOIST', &
+      NGRID      = 1,              &
+      NTYPE      = TYPEREAL,       &
+      NDIMS      = 3,              &
+      LTIMEDEP   = .TRUE.          )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZAMOIST)
   END IF
 !
@@ -748,7 +750,7 @@ SELECT CASE (TURBN%CTURBLEN)
 !*      3.3 Grey-zone combined RM17 & Deardorff mixing lengths
 !           --------------------------------------------------
 
-  CASE ('ADAP')
+  CASE ('HM21')
     CALL GZ_U_UW_PHY(D,PUT,PDZZ,ZWORK1)
     CALL MZF_PHY(D,ZWORK1,ZWORK2)
     CALL MXF_PHY(D,ZWORK2,ZDUDZ)
@@ -851,8 +853,8 @@ IF (TURBN%LRMC01) THEN
   CALL RMC01(D,CST,CSTURB,TURBN%CTURBLEN,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
 END IF
 !
-!RMC01 is only applied on RM17 in ADAP
-IF (TURBN%CTURBLEN=='ADAP') THEN
+!RMC01 is only applied on RM17 in HM21
+IF (TURBN%CTURBLEN=='HM21') THEN
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
   ZLEPS(IIJB:IIJE,1:IKT) = MIN(ZLEPS(IIJB:IIJE,1:IKT),ZLMW(IIJB:IIJE,1:IKT)*TURBN%XCADAP)
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
@@ -1006,7 +1008,7 @@ CALL TURB_VER(D,CST,CSTURB,TURBN,TLES,                   &
           OOCEAN, ODEEPOC, OCOMPUTE_SRC,                 &
           KSV,KSV_LGBEG,KSV_LGEND,                       &
           ZEXPL,HPROGRAM, O2D, ONOMIXLG, OFLAT,          &
-          OCOUPLES,OBLOWSNOW, PRSNOW,                    &
+          OCOUPLES,OBLOWSNOW,OFLYER, PRSNOW,             &
           PTSTEP,TPFILE,                                 &
           PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,        &
           PCOSSLOPE,PSINSLOPE,                           &
@@ -1239,46 +1241,49 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 !
 ! stores the mixing length
 !
-  TZFIELD%CMNHNAME   = 'LM'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'LM'
-  TZFIELD%CUNITS     = 'm'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'Mixing length'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(       &
+    CMNHNAME   = 'LM',            &
+    CSTDNAME   = '',              &
+    CLONGNAME  = 'LM',            &
+    CUNITS     = 'm',             &
+    CDIR       = 'XY',            &
+    CCOMMENT   = 'Mixing length', &
+    NGRID      = 1,               &
+    NTYPE      = TYPEREAL,        &
+    NDIMS      = 3,               &
+    LTIMEDEP   = .TRUE.           )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZLM)
 !
   IF (KRR /= 0) THEN
 !
 ! stores the conservative potential temperature
 !
-    TZFIELD%CMNHNAME   = 'THLM'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'THLM'
-    TZFIELD%CUNITS     = 'K'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Conservative potential temperature'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(                          &
+    CMNHNAME   = 'THLM',                               &
+    CSTDNAME   = '',                                   &
+    CLONGNAME  = 'THLM',                               &
+    CUNITS     = 'K',                                  &
+    CDIR       = 'XY',                                 &
+    CCOMMENT   = 'Conservative potential temperature', &
+    NGRID      = 1,                                    &
+    NTYPE      = TYPEREAL,                             &
+    NDIMS      = 3,                                    &
+    LTIMEDEP   = .TRUE.                                )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PTHLT)
 !
 ! stores the conservative mixing ratio
 !
-    TZFIELD%CMNHNAME   = 'RNPM'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RNPM'
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Conservative mixing ratio'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(                &
+    CMNHNAME   = 'RNPM',                     &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'RNPM',                     &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'Conservative mixing ratio',&
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
     CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,PRT(:,:,1))
    END IF
 END IF
@@ -1951,7 +1956,7 @@ ELSE
 !
 !*         3.1 BL89 mixing length
 !           ------------------
-  CASE ('BL89','RM17','ADAP')
+  CASE ('BL89','RM17','HM21')
     ZSHEAR(:,:)=0.
     CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD,OOCEAN,HPROGRAM)
 !
@@ -1973,16 +1978,17 @@ ENDIF
 !
 ! Impression before modification of the mixing length
 IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
-  TZFIELD%CMNHNAME   = 'LM_CLEAR_SKY'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'LM_CLEAR_SKY'
-  TZFIELD%CUNITS     = 'm'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_LM CLEAR SKY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(            &
+    CMNHNAME   = 'LM_CLEAR_SKY',       &
+    CSTDNAME   = '',                   &
+    CLONGNAME  = 'LM_CLEAR_SKY',       &
+    CUNITS     = 'm',                  &
+    CDIR       = 'XY',                 &
+    CCOMMENT   = 'X_Y_Z_LM CLEAR SKY', &
+    NGRID      = 1,                    &
+    NTYPE      = TYPEREAL,             &
+    NDIMS      = 3,                    &
+    LTIMEDEP   = .TRUE.                )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZLM)
 ENDIF
 !
@@ -2007,27 +2013,30 @@ END WHERE
 !              ----------
 !
 IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
-  TZFIELD%CMNHNAME   = 'COEF_AMPL'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'COEF_AMPL'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_COEF AMPL'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(         &
+    CMNHNAME   = 'COEF_AMPL',       &
+    CSTDNAME   = '',                &
+    CLONGNAME  = 'COEF_AMPL',       &
+    CUNITS     = '1',               &
+    CDIR       = 'XY',              &
+    CCOMMENT   = 'X_Y_Z_COEF AMPL', &
+    NGRID      = 1,                 &
+    NTYPE      = TYPEREAL,          &
+    NDIMS      = 3,                 &
+    LTIMEDEP   = .TRUE.             )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZCOEF_AMPL)
   !
-  TZFIELD%CMNHNAME   = 'LM_CLOUD'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'LM_CLOUD'
-  TZFIELD%CUNITS     = 'm'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_LM CLOUD'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'LM_CLOUD',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'LM_CLOUD',       &
+    CUNITS     = 'm',              &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_LM CLOUD', &
+    NGRID      = 1,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_FIELD_WRITE_PHY(D,TPFILE,TZFIELD,ZLM_CLOUD)
   !
 ENDIF
diff --git a/src/mesonh/aux/modd_budget.f90 b/src/mesonh/aux/modd_budget.f90
index 65d6ce37bebf22b6490e804acf4cc6552176b36d..0270f474a0e5b53d71ccc86620c9c9bcafefd866 100644
--- a/src/mesonh/aux/modd_budget.f90
+++ b/src/mesonh/aux/modd_budget.f90
@@ -35,7 +35,7 @@
 !  P. Wautelet 19/07/2019: parameters to identify budget number
 !  P. Wautelet 15/11/2019: remove unused CBURECORD variable
 !  P. Wautelet 17/01/2020: add new budget data types
-!  P. Wautelet 27/01/2020: use the tfield_metadata_base abstract datatype
+!  P. Wautelet 27/01/2020: use the tfieldmetadata_base abstract datatype
 !  P. Wautelet 28/01/2020: add trhodj in tbudgetdata datatype
 !  P. Wautelet 09/03/2020: add tburhodj variable
 !  P. Wautelet 17/04/2020: set default values for budgets switch values
@@ -53,7 +53,7 @@
 !*       0.   DECLARATIONS
 !             ------------
 
-use modd_field,      only: tfield_metadata_base
+use modd_field,      only: tfieldmetadata_base
 use modd_parameters, only: NBUNAMELGTMAX, NCOMMENTLGTMAX
 
 implicit none
@@ -102,7 +102,7 @@ character(len=*), dimension(NMAXLEVELS), parameter :: CNCGROUPNAMES = [ &
 integer :: nbudgets ! Number of budget categories
 
 
-type, extends( tfield_metadata_base ) :: tbusourcedata
+type, extends( tfieldmetadata_base ) :: tbusourcedata
   integer :: ngroup = 0 ! Number of the source term group in which storing the source term
                         !  (0: no store, 1: individual store, >1: number of the group)
   logical :: lavailable = .false. ! If true, the source is available in the run (conditions to access it are met),
@@ -114,16 +114,17 @@ type, extends( tfield_metadata_base ) :: tbusourcedata
                                   ! It may be true only if the source term is in a group not containing other sources
 end type tbusourcedata
 
-type, extends( tfield_metadata_base ) :: tbugroupdata
+type, extends( tfieldmetadata_base ) :: tbugroupdata
   integer :: nsources = 0 ! Number of source terms composing this group
   integer, dimension(:),     allocatable :: nsourcelist ! List of the source terms composing this group
   real,    dimension(:,:,:), allocatable :: xdata ! Array to store the budget data
 end type tbugroupdata
 
-type, extends( tfield_metadata_base ) :: tburhodata
+type, extends( tfieldmetadata_base ) :: tburhodata
   real, dimension(:,:,:), allocatable :: xdata ! Array to store the budget data
 end type tburhodata
 
+!PW: a commenter + renommer???
 type :: tbudiachrometadata
   character(len=NBUNAMELGTMAX),  dimension(NMAXLEVELS) :: clevels  = '' !Name of the different groups/levels in the netCDF file
   character(len=NCOMMENTLGTMAX), dimension(NMAXLEVELS) :: ccomments ='' !Comments for the different groups/levels in the netCDF file
@@ -164,20 +165,20 @@ type tbudgetdata
 end type tbudgetdata
 
 TYPE TBUDGETCONF_t
- LOGICAL :: LBU_ENABLE
- LOGICAL :: LBUDGET_U  ! flag to compute budget of RhoJu  and/or LES budgets with u
- LOGICAL :: LBUDGET_V  ! flag to compute budget of RhoJv  and/or LES budgets with u
- LOGICAL :: LBUDGET_W  ! flag to compute budget of RhoJw  and/or LES budgets with u
- LOGICAL :: LBUDGET_TH ! flag to compute budget of RhoJTh and/or LES budgets with th
- LOGICAL :: LBUDGET_TKE! flag to compute budget of RhoJTke and/or LES budgets with Tke
- LOGICAL :: LBUDGET_RV ! flag to compute budget of RhoJrv and/or LES budgets with rv
- LOGICAL :: LBUDGET_RC ! flag to compute budget of RhoJrc and/or LES budgets with rc
- LOGICAL :: LBUDGET_RR ! flag to compute budget of RhoJrr and/or LES budgets with rr
- LOGICAL :: LBUDGET_RI ! flag to compute budget of RhoJri and/or LES budgets with ri
- LOGICAL :: LBUDGET_RS ! flag to compute budget of RhoJrs and/or LES budgets with rs
- LOGICAL :: LBUDGET_RG ! flag to compute budget of RhoJrg and/or LES budgets with rg
- LOGICAL :: LBUDGET_RH ! flag to compute budget of RhoJrh and/or LES budgets with rh
- LOGICAL :: LBUDGET_SV ! flag to compute budget of RhoJsv and/or LES budgets with sv
+ LOGICAL :: LBU_ENABLE=.FALSE.
+ LOGICAL :: LBUDGET_U=.FALSE.  ! flag to compute budget of RhoJu  and/or LES budgets with u
+ LOGICAL :: LBUDGET_V=.FALSE.  ! flag to compute budget of RhoJv  and/or LES budgets with u
+ LOGICAL :: LBUDGET_W=.FALSE.  ! flag to compute budget of RhoJw  and/or LES budgets with u
+ LOGICAL :: LBUDGET_TH=.FALSE. ! flag to compute budget of RhoJTh and/or LES budgets with th
+ LOGICAL :: LBUDGET_TKE=.FALSE.! flag to compute budget of RhoJTke and/or LES budgets with Tke
+ LOGICAL :: LBUDGET_RV=.FALSE. ! flag to compute budget of RhoJrv and/or LES budgets with rv
+ LOGICAL :: LBUDGET_RC=.FALSE. ! flag to compute budget of RhoJrc and/or LES budgets with rc
+ LOGICAL :: LBUDGET_RR=.FALSE. ! flag to compute budget of RhoJrr and/or LES budgets with rr
+ LOGICAL :: LBUDGET_RI=.FALSE. ! flag to compute budget of RhoJri and/or LES budgets with ri
+ LOGICAL :: LBUDGET_RS=.FALSE. ! flag to compute budget of RhoJrs and/or LES budgets with rs
+ LOGICAL :: LBUDGET_RG=.FALSE. ! flag to compute budget of RhoJrg and/or LES budgets with rg
+ LOGICAL :: LBUDGET_RH=.FALSE. ! flag to compute budget of RhoJrh and/or LES budgets with rh
+ LOGICAL :: LBUDGET_SV=.FALSE. ! flag to compute budget of RhoJsv and/or LES budgets with sv
 END TYPE TBUDGETCONF_t
 !
 TYPE(TBUDGETCONF_t), TARGET :: TBUCONF
@@ -187,7 +188,7 @@ type(tburhodata),                pointer,     save :: tburhodj => null() ! Budge
 
 
 !                       General variables
-LOGICAL, POINTER :: LBU_ENABLE=>TBUCONF%LBU_ENABLE
+LOGICAL, POINTER :: LBU_ENABLE=>NULL()
 !
 CHARACTER (LEN=4), SAVE :: CBUTYPE         ! type of desired budget 'CART'
                                            ! (cartesian box) or 'MASK' (budget
@@ -369,18 +370,38 @@ CHARACTER(LEN=NBULISTMAXLEN), DIMENSION(:), ALLOCATABLE :: CBULIST_RSV
 REAL :: XTIME_BU          ! budget time in this time-step
 REAL :: XTIME_BU_PROCESS  ! budget time per process for this time-step
 !
-LOGICAL, POINTER :: LBUDGET_U=>TBUCONF%LBUDGET_U  ! flag to compute budget of RhoJu  and/or LES budgets with u
-LOGICAL, POINTER :: LBUDGET_V=>TBUCONF%LBUDGET_V  ! flag to compute budget of RhoJv  and/or LES budgets with u
-LOGICAL, POINTER :: LBUDGET_W=>TBUCONF%LBUDGET_W  ! flag to compute budget of RhoJw  and/or LES budgets with u
-LOGICAL, POINTER :: LBUDGET_TH=>TBUCONF%LBUDGET_TH ! flag to compute budget of RhoJTh and/or LES budgets with th
-LOGICAL, POINTER :: LBUDGET_TKE=>TBUCONF%LBUDGET_TKE ! flag to compute budget of RhoJTke and/or LES budgets with Tke
-LOGICAL, POINTER :: LBUDGET_RV=>TBUCONF%LBUDGET_RV ! flag to compute budget of RhoJrv and/or LES budgets with rv
-LOGICAL, POINTER :: LBUDGET_RC=>TBUCONF%LBUDGET_RC ! flag to compute budget of RhoJrc and/or LES budgets with rc
-LOGICAL, POINTER :: LBUDGET_RR=>TBUCONF%LBUDGET_RR ! flag to compute budget of RhoJrr and/or LES budgets with rr
-LOGICAL, POINTER :: LBUDGET_RI=>TBUCONF%LBUDGET_RI ! flag to compute budget of RhoJri and/or LES budgets with ri
-LOGICAL, POINTER :: LBUDGET_RS=>TBUCONF%LBUDGET_RS ! flag to compute budget of RhoJrs and/or LES budgets with rs
-LOGICAL, POINTER :: LBUDGET_RG=>TBUCONF%LBUDGET_RG ! flag to compute budget of RhoJrg and/or LES budgets with rg
-LOGICAL, POINTER :: LBUDGET_RH=>TBUCONF%LBUDGET_RH ! flag to compute budget of RhoJrh and/or LES budgets with rh
-LOGICAL, POINTER :: LBUDGET_SV=>TBUCONF%LBUDGET_SV ! flag to compute budget of RhoJsv and/or LES budgets with sv
-!
+LOGICAL, POINTER :: LBUDGET_U=>NULL() ! flag to compute budget of RhoJu  and/or LES budgets with u
+LOGICAL, POINTER :: LBUDGET_V=>NULL()  ! flag to compute budget of RhoJv  and/or LES budgets with u
+LOGICAL, POINTER :: LBUDGET_W=>NULL()  ! flag to compute budget of RhoJw  and/or LES budgets with u
+LOGICAL, POINTER :: LBUDGET_TH=>NULL() ! flag to compute budget of RhoJTh and/or LES budgets with th
+LOGICAL, POINTER :: LBUDGET_TKE=>NULL() ! flag to compute budget of RhoJTke and/or LES budgets with Tke
+LOGICAL, POINTER :: LBUDGET_RV=>NULL() ! flag to compute budget of RhoJrv and/or LES budgets with rv
+LOGICAL, POINTER :: LBUDGET_RC=>NULL() ! flag to compute budget of RhoJrc and/or LES budgets with rc
+LOGICAL, POINTER :: LBUDGET_RR=>NULL() ! flag to compute budget of RhoJrr and/or LES budgets with rr
+LOGICAL, POINTER :: LBUDGET_RI=>NULL() ! flag to compute budget of RhoJri and/or LES budgets with ri
+LOGICAL, POINTER :: LBUDGET_RS=>NULL() ! flag to compute budget of RhoJrs and/or LES budgets with rs
+LOGICAL, POINTER :: LBUDGET_RG=>NULL() ! flag to compute budget of RhoJrg and/or LES budgets with rg
+LOGICAL, POINTER :: LBUDGET_RH=>NULL() ! flag to compute budget of RhoJrh and/or LES budgets with rh
+LOGICAL, POINTER :: LBUDGET_SV=>NULL() ! flag to compute budget of RhoJsv and/or LES budgets with sv
+!
+CONTAINS
+SUBROUTINE TBUCONF_ASSOCIATE()
+  IMPLICIT NONE
+  LBU_ENABLE=>TBUCONF%LBU_ENABLE
+
+  LBUDGET_U=>TBUCONF%LBUDGET_U
+  LBUDGET_V=>TBUCONF%LBUDGET_V
+  LBUDGET_W=>TBUCONF%LBUDGET_W
+  LBUDGET_TH=>TBUCONF%LBUDGET_TH
+  LBUDGET_TKE=>TBUCONF%LBUDGET_TKE
+  LBUDGET_RV=>TBUCONF%LBUDGET_RV
+  LBUDGET_RC=>TBUCONF%LBUDGET_RC
+  LBUDGET_RR=>TBUCONF%LBUDGET_RR
+  LBUDGET_RI=>TBUCONF%LBUDGET_RI
+  LBUDGET_RS=>TBUCONF%LBUDGET_RS
+  LBUDGET_RG=>TBUCONF%LBUDGET_RG
+  LBUDGET_RH=>TBUCONF%LBUDGET_RH
+  LBUDGET_SV=>TBUCONF%LBUDGET_SV
+END SUBROUTINE TBUCONF_ASSOCIATE
+
 END MODULE MODD_BUDGET
diff --git a/src/mesonh/aux/mode_io_field_write.f90 b/src/mesonh/aux/mode_io_field_write.f90
index a4a6a28c0f76c12701db46b997a5cf1cc96fbb80..e513093ca60097b15caa167b738b12576ebc5a8e 100644
--- a/src/mesonh/aux/mode_io_field_write.f90
+++ b/src/mesonh/aux/mode_io_field_write.f90
@@ -25,7 +25,8 @@
 
 MODULE MODE_IO_FIELD_WRITE
 
-  use modd_field,        only: tfielddata, tfieldlist, TYPECHAR, TYPEDATE, TYPEINT, TYPELOG, TYPEREAL
+  use modd_field,        only: tfieldlist, tfieldmetadata, tfieldmetadata_base, &
+                               TYPECHAR, TYPEDATE, TYPEINT, TYPELOG, TYPEREAL
   USE MODD_IO,         ONLY: TFILEDATA, TOUTBAK
   USE MODD_MPIF
   use modd_parameters, only: NMNHNAMELGTMAX
@@ -86,10 +87,10 @@ MODULE MODE_IO_FIELD_WRITE
 CONTAINS 
 
   SUBROUTINE IO_Field_metadata_check(TPFIELD,KTYPE,KDIMS,HCALLER)
-    TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD ! Field to check
-    INTEGER,          INTENT(IN) :: KTYPE   ! Expected datatype
-    INTEGER,          INTENT(IN) :: KDIMS   ! Expected number of dimensions
-    CHARACTER(LEN=*), INTENT(IN) :: HCALLER ! name of the calling subroutine
+    CLASS(tfieldmetadata_base), INTENT(IN) :: TPFIELD ! Field to check
+    INTEGER,                    INTENT(IN) :: KTYPE   ! Expected datatype
+    INTEGER,                    INTENT(IN) :: KDIMS   ! Expected number of dimensions
+    CHARACTER(LEN=*),           INTENT(IN) :: HCALLER ! name of the calling subroutine
     !
     CHARACTER(LEN=2) :: YDIMOK,YDIMKO
     CHARACTER(LEN=8) :: YTYPEOK,YTYPEKO
@@ -182,13 +183,13 @@ CONTAINS
   subroutine IO_Field_write_error_check( tpfile, tpfield, hsubr, kresp_in, kresp_lfi, kresp_nc4, kresp_out )
     use modd_io, only: gsmonoproc
 
-    type(tfiledata),  intent(in)  :: tpfile
-    type(tfielddata), intent(in)  :: tpfield
-    character(len=*), intent(in)  :: hsubr
-    integer,          intent(in)  :: kresp_in
-    integer,          intent(in)  :: kresp_lfi
-    integer,          intent(in)  :: kresp_nc4
-    integer,          intent(out) :: kresp_out
+    type(tfiledata),            intent(in)  :: tpfile
+    class(tfieldmetadata_base), intent(in)  :: tpfield
+    character(len=*),           intent(in)  :: hsubr
+    integer,                    intent(in)  :: kresp_in
+    integer,                    intent(in)  :: kresp_lfi
+    integer,                    intent(in)  :: kresp_nc4
+    integer,                    intent(out) :: kresp_out
 
     character(len=:), allocatable :: ymsg
     character(len=6)              :: yresp
@@ -316,14 +317,14 @@ subroutine IO_Field_create( tpfile, tpfield )
   use modd_field
   use modd_io,            only: gsmonoproc, isp
 
-  type(tfiledata),  intent(in) :: tpfile
-  type(tfielddata), intent(in) :: tpfield
+  type(tfiledata),       intent(in) :: tpfile
+  class(tfieldmetadata), intent(in) :: tpfield
 
-  integer                  :: ik_file
-  integer                  :: iresp
-  logical                  :: glfi, gnc4
-  type(tfielddata)         :: tzfield
-  type(tfiledata), pointer :: tzfile
+  integer                            :: ik_file
+  integer                            :: iresp
+  logical                            :: glfi, gnc4
+  class(tfieldmetadata), allocatable :: tzfield
+  type(tfiledata),       pointer     :: tzfile
 
   call Print_msg( NVERB_DEBUG, 'IO', 'IO_Field_create', Trim( tpfile%cname ) // ': creating ' // Trim( tpfield%cmnhname ) )
 
@@ -345,7 +346,7 @@ subroutine IO_Field_create( tpfile, tpfield )
   end if
 
   if ( iresp == 0 ) then
-    tzfield = tpfield
+    Allocate( tzfield, source = tpfield )
 
     if ( All( tzfield%ntype /= [ TYPEINT, TYPELOG, TYPEREAL, TYPECHAR, TYPEDATE ] ) ) then
       call Print_msg( NVERB_ERROR, 'IO', 'IO_Field_create', Trim( tpfile%cname ) // ': ' &
@@ -448,8 +449,8 @@ subroutine IO_Ndimlist_reduce( tpfile, tpfield )
   use modd_io,            only: gsmonoproc, l1d, l2d, lpack
   use modd_parameters_ll, only: jphext
 
-  type(tfiledata),  intent(in)    :: tpfile
-  type(tfielddata), intent(inout) :: tpfield
+  type(tfiledata),            intent(in)    :: tpfile
+  class(tfieldmetadata_base), intent(inout) :: tpfield
 
   integer :: ihextot
   integer :: ji
@@ -534,7 +535,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(IN) :: TPFIELD
     REAL,TARGET,                 INTENT(IN) :: PFIELD   ! array containing the data field
     INTEGER,OPTIONAL,            INTENT(OUT):: KRESP    ! return-code 
     !
@@ -633,7 +634,7 @@ end subroutine IO_Ndimlist_reduce
     !
     TYPE(DIMPHYEX_t),                     INTENT(IN)  :: D
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    TYPE(TFIELDMETADATA),                 INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(D%NIJT,D%NKT),TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(3),      optional, intent(in)  :: koffset
@@ -651,7 +652,7 @@ end subroutine IO_Ndimlist_reduce
     !
     TYPE(DIMPHYEX_t),                     INTENT(IN)  :: D
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    TYPE(TFIELDMETADATA),                 INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(D%NIT,D%NJT,D%NKT),TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(3),      optional, intent(in)  :: koffset
@@ -669,7 +670,7 @@ end subroutine IO_Ndimlist_reduce
     !
     TYPE(DIMPHYEX_t),                     INTENT(IN)  :: D
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    TYPE(TFIELDMETADATA),                 INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(D%NIJT),TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(3),      optional, intent(in)  :: koffset
@@ -687,7 +688,7 @@ end subroutine IO_Ndimlist_reduce
     !
     TYPE(DIMPHYEX_t),                     INTENT(IN)  :: D
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    TYPE(TFIELDMETADATA),                 INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(D%NIT,D%NJT),TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(3),      optional, intent(in)  :: koffset
@@ -708,7 +709,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),                INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:),TARGET,             INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(1),      optional, intent(in)  :: koffset
@@ -838,7 +839,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),                INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:,:),TARGET,           INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                    OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(2),      optional, intent(in)  :: koffset
@@ -866,7 +867,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -897,8 +898,8 @@ end subroutine IO_Ndimlist_reduce
       IF (GSMONOPROC) THEN ! sequential execution
          !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN
         IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3) !Necessary if time dimension
@@ -915,7 +916,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp0d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -930,8 +930,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3) !Necessary if time dimension
@@ -947,7 +947,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp1d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = NMNHDIM_ONE
             end if
@@ -1097,7 +1096,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),TARGET,                 INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                       INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),                  INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:,:,:),TARGET,           INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                      OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(3),        optional, intent(in)  :: koffset
@@ -1140,7 +1139,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     TYPE(TFILEDATA),POINTER                  :: TZFILE
     !
     TZFILE => NULL()
@@ -1178,8 +1177,8 @@ end subroutine IO_Ndimlist_reduce
       IF (GSMONOPROC .AND. TPFILE%NSUBFILES_IOZ==0 ) THEN ! sequential execution
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN
         IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3)
@@ -1196,7 +1195,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp1d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -1210,8 +1208,8 @@ end subroutine IO_Ndimlist_reduce
             end if
           endif
         ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -1229,7 +1227,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp2d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             zfieldp => pfield(:, jphext + 1 : jphext + 1, :)
             if ( Present ( koffset ) ) then
@@ -1503,7 +1500,7 @@ end subroutine IO_Ndimlist_reduce
 ! end of MNH_GA
 #endif
         !Not global reduction because a broadcast is done in IO_Field_write_error_check
-        call MPI_REDUCE( -Abs( [ iresp_lfi, iresp_nc4 ] ), iresps(:), 1, MNHINT_MPI, MPI_MIN, &
+        call MPI_REDUCE( -Abs( [ iresp_lfi, iresp_nc4 ] ), iresps(:), 2, MNHINT_MPI, MPI_MIN, &
                          tpfile%nmaster_rank - 1, tpfile%nmpicomm, ierr )
         iresp_lfi = iresps(1)
         iresp_nc4 = iresps(2)
@@ -1562,7 +1559,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                          INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                         INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),                    INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:,:,:,:),TARGET,           INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                        OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(4),          optional, intent(in)  :: koffset
@@ -1585,7 +1582,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -1615,8 +1612,8 @@ end subroutine IO_Ndimlist_reduce
       IF (GSMONOPROC) THEN ! sequential execution
         !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN
         IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3)
@@ -1635,7 +1632,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp2d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -1650,8 +1646,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -1671,7 +1667,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp3d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             zfieldp => pfield(:, jphext + 1 : jphext + 1, :, :)
             if ( Present( koffset ) ) then
@@ -1777,7 +1772,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                 INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),                INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),           INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD   ! array containing the data field
     INTEGER,OPTIONAL,                INTENT(OUT):: KRESP    ! return-code 
     !
@@ -1797,7 +1792,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -1822,8 +1817,8 @@ end subroutine IO_Ndimlist_reduce
       IF (GSMONOPROC) THEN ! sequential execution
         !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN
         IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3)
@@ -1836,7 +1831,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, zfieldp3d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp3d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -1846,8 +1840,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -1860,7 +1854,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, zfieldp4d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, zfieldp4d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             zfieldp => pfield(:, jphext + 1 : jphext + 1, :, :, :)
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, zfieldp, iresp_lfi )
@@ -1950,7 +1943,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                   INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),                  INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),             INTENT(IN)  :: TPFIELD
     REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD   ! array containing the data field
     INTEGER,OPTIONAL,                  INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2061,7 +2054,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(IN) :: TPFIELD
     INTEGER,                     INTENT(IN) :: KFIELD   ! array containing the data field
     INTEGER,OPTIONAL,            INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2153,7 +2146,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),              INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),             INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),        INTENT(IN)  :: TPFIELD
     INTEGER,DIMENSION(:),TARGET,  INTENT(IN) :: KFIELD   ! array containing the data field
     INTEGER,OPTIONAL,             INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2265,7 +2258,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),              INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),             INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),        INTENT(IN)  :: TPFIELD
     INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KFIELD   ! array containing the data field
     INTEGER,OPTIONAL,             INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2288,7 +2281,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -2314,8 +2307,8 @@ end subroutine IO_Ndimlist_reduce
     IF (IRESP==0) THEN
       IF (GSMONOPROC) THEN ! sequential execution
         IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3) !Necessary if time dimension
@@ -2325,7 +2318,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ifieldp0d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp0d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -2335,8 +2327,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3) !Necessary if time dimension
@@ -2346,7 +2338,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ifieldp1d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp1d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = NMNHDIM_ONE
             end if
@@ -2446,7 +2437,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),               INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),          INTENT(IN)  :: TPFIELD
     INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KFIELD   ! array containing the data field
     INTEGER,OPTIONAL,               INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2468,7 +2459,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -2494,8 +2485,8 @@ end subroutine IO_Ndimlist_reduce
     IF (IRESP==0) THEN
       IF (GSMONOPROC) THEN ! sequential execution
         IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3)
@@ -2506,7 +2497,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ifieldp1d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp1d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -2516,8 +2506,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -2528,7 +2518,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ifieldp2d, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp2d, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             ifieldp => kfield(:, jphext + 1 : jphext + 1, :)
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ifieldp, iresp_lfi )
@@ -2624,7 +2613,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                             INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                            INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),                       INTENT(IN)  :: TPFIELD
     INTEGER,DIMENSION(:,:,:,:),TARGET,           INTENT(IN)  :: KFIELD   ! array containing the data field
     INTEGER,                           OPTIONAL, INTENT(OUT) :: KRESP    ! return-code
     integer, dimension(4),             optional, intent(in)  :: koffset
@@ -2647,7 +2636,7 @@ end subroutine IO_Ndimlist_reduce
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -2677,8 +2666,8 @@ end subroutine IO_Ndimlist_reduce
       IF (GSMONOPROC) THEN ! sequential execution
         !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN
         IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 2
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1)  = tzfield%ndimlist(3)
@@ -2697,7 +2686,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp2d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(1:2) = NMNHDIM_ONE
             end if
@@ -2712,8 +2700,8 @@ end subroutine IO_Ndimlist_reduce
           endif
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
         ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -2733,7 +2721,6 @@ end subroutine IO_Ndimlist_reduce
               if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ifieldp3d, iresp_nc4 )
             end if
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             ifieldp => kfield(:, jphext + 1 : jphext + 1, :, :)
             if ( Present( koffset ) ) then
@@ -2833,7 +2820,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(IN)  :: TPFIELD
     LOGICAL,                     INTENT(IN) :: OFIELD   ! array containing the data field
     INTEGER,OPTIONAL,            INTENT(OUT):: KRESP    ! return-code 
     !
@@ -2925,7 +2912,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),              INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),             INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),        INTENT(IN)  :: TPFIELD
     LOGICAL,DIMENSION(:),TARGET,  INTENT(IN) :: OFIELD   ! array containing the data field
     INTEGER,OPTIONAL,             INTENT(OUT):: KRESP    ! return-code 
     !
@@ -3032,7 +3019,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(IN)  :: TPFIELD
     CHARACTER(LEN=*),            INTENT(IN) :: HFIELD   ! array containing the data field
     INTEGER,OPTIONAL,            INTENT(OUT):: KRESP    ! return-code 
     !
@@ -3112,7 +3099,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),              INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),             INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),        INTENT(IN)  :: TPFIELD
     CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD   ! array containing the data field
     INTEGER,OPTIONAL,             INTENT(OUT):: KRESP    ! return-code 
     !
@@ -3216,7 +3203,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(IN)  :: TPFIELD
     TYPE (DATE_TIME),            INTENT(IN) :: TFIELD   ! array containing the data field
     INTEGER,OPTIONAL,            INTENT(OUT):: KRESP    ! return-code 
     !
@@ -3293,7 +3280,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),               INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),              INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),         INTENT(IN)  :: TPFIELD
     TYPE (DATE_TIME),DIMENSION(:), INTENT(IN) :: TFIELD   ! array containing the data field
     INTEGER,OPTIONAL,              INTENT(OUT):: KRESP    ! return-code
     !
@@ -3373,7 +3360,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),             INTENT(IN)    :: TPFILE
-    TYPE(TFIELDDATA),            INTENT(INOUT) :: TPFIELD
+    CLASS(TFIELDMETADATA),       INTENT(INOUT) :: TPFIELD
     INTEGER,                     INTENT(IN)    :: KL3D   ! size of the LB array in FM
     REAL,DIMENSION(:,:,:),TARGET,INTENT(IN)    :: PLB    ! array containing the LB field
     INTEGER,OPTIONAL,            INTENT(OUT)   :: KRESP  ! return-code 
@@ -3402,7 +3389,7 @@ end subroutine IO_Ndimlist_reduce
     TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:)    :: T_TX3DP
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
-    type(tfielddata)                         :: tzfield
+    class(tfieldmetadata), allocatable       :: tzfield
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -3437,8 +3424,8 @@ end subroutine IO_Ndimlist_reduce
     IF (IRESP==0) THEN
       IF (GSMONOPROC) THEN  ! sequential execution
         IF (LPACK .AND. L2D) THEN
+          Allocate( tzfield, source = tpfield )
           if ( tpfile%ldimreduced ) then
-            tzfield = tpfield
             tzfield%ndims = tzfield%ndims - 1
             if ( tzfield%ndimlist(1) /= NMNHDIM_UNKNOWN ) then
               tzfield%ndimlist(2)  = tzfield%ndimlist(3)
@@ -3449,7 +3436,6 @@ end subroutine IO_Ndimlist_reduce
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, ztx2dp, iresp_lfi )
             if ( gnc4 ) call IO_Field_write_nc4( tpfile, tzfield, ztx2dp, iresp_nc4 )
           else
-            tzfield = tpfield
             if ( tzfield%ndimlist(2) /= NMNHDIM_UNKNOWN ) tzfield%ndimlist(2) = NMNHDIM_ONE
             tx3dp => plb(:, jphext + 1 : jphext + 1, :)
             if ( glfi ) call IO_Field_write_lfi( tpfile, tzfield, tx3dp, iresp_lfi )
@@ -3533,7 +3519,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                 INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),           INTENT(IN)  :: TPFIELD
     CHARACTER(LEN=*),                INTENT(IN)  :: HBUDGET  ! 'BUDGET' (budget)  or 'OTHER' (MesoNH field)
     REAL,   DIMENSION(:,:), TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                         INTENT(IN)  :: KXOBOX   !
@@ -3627,7 +3613,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                 INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),           INTENT(IN)  :: TPFIELD
     CHARACTER(LEN=*),                INTENT(IN)  :: HBUDGET  ! 'BUDGET' (budget)  or 'OTHER' (MesoNH field)
     REAL, DIMENSION(:,:,:), TARGET,  INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                         INTENT(IN)  :: KXOBOX   !
@@ -3721,7 +3707,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                    INTENT(IN)  :: TPFILE
-    TYPE(TFIELDDATA),                   INTENT(IN)  :: TPFIELD
+    CLASS(TFIELDMETADATA),              INTENT(IN)  :: TPFIELD
     CHARACTER(LEN=*),                   INTENT(IN)  :: HBUDGET  ! 'BUDGET' (budget)  or 'OTHER' (MesoNH field)
     REAL, DIMENSION(:,:,:,:), TARGET,   INTENT(IN)  :: PFIELD   ! array containing the data field
     INTEGER,                            INTENT(IN)  :: KXOBOX   !
@@ -3815,7 +3801,7 @@ end subroutine IO_Ndimlist_reduce
     !*      0.1   Declarations of arguments
     !
     TYPE(TFILEDATA),                 INTENT(IN) :: TPFILE
-    TYPE(TFIELDDATA),                INTENT(IN) :: TPFIELD
+    CLASS(TFIELDMETADATA),           INTENT(IN) :: TPFIELD
     CHARACTER(LEN=*),                INTENT(IN) :: HBUDGET  ! 'BUDGET' (budget)  or 'OTHER' (MesoNH field)
     REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD   ! array containing the data field
     INTEGER,                         INTENT(IN) :: KXOBOX   ! 
@@ -4325,7 +4311,7 @@ IMPLICIT NONE
 !
 TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
 !
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !
 #if 0
 INTEGER          :: IKB
diff --git a/src/mesonh/ext/deallocate_model1.f90 b/src/mesonh/ext/deallocate_model1.f90
deleted file mode 100644
index 4a940c6d89977fc8eef400fc57aac4f123ba5138..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/deallocate_model1.f90
+++ /dev/null
@@ -1,703 +0,0 @@
-!MNH_LIC Copyright 1997-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_DEALLOCATE_MODEL1
-!############################
-!
-INTERFACE
-!
-SUBROUTINE DEALLOCATE_MODEL1 (KCALL)
-!
-INTEGER, INTENT(IN) :: KCALL
-!
-END SUBROUTINE DEALLOCATE_MODEL1
-!
-END INTERFACE 
-!
-END MODULE MODI_DEALLOCATE_MODEL1
-!
-!
-!     ####################################
-      SUBROUTINE DEALLOCATE_MODEL1 (KCALL)
-!     ####################################
-!
-!!****  *DEALLOCATE_MODEL1* - deallocate all model1 fields
-!!
-!!    PURPOSE
-!!    -------
-!       deallocate all model #1 fields in order to spare memory in spawning
-!
-!!**  METHOD
-!!    ------
-!!   
-!!    KCALL = 1   --> deallocates all SOURCES, LES, FORCING and SOLVER variables
-!!
-!!    KCALL = 2   --> deallocates all METRIC, RADIATION and CORIOLIS variables
-!!
-!!    KCALL = 3   --> deallocates all other variables of model1
-!!
-!!    KCALL = 4   --> deallocates all variables common to ALL models
-!!
-!!    1 + 2         --> all variables used in spawning
-!!    1 + 2 + 3 + 4 --> in diag after a file has been treated
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    REFERENCE
-!!    ---------
-!!      
-!!
-!!    AUTHOR
-!!    ------
-!!  	V. Masson       * Meteo France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     08/12/97
-!!
-!!                   20/05/98  use the LB fields
-!!                   15/03/99 new PGD fields
-!!                   08/03/01 D.Gazen add chemical emission field
-!!                   01/2004 V. Masson surface externalization
-!!                   06/2012 M.Tomasini add 2D nesting ADVFRC
-!!                   10/2016 M.Mazoyer New KHKO output fields
-!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
-!  C. Lac         02/2019: add rain fraction as an output field
-!  P. Wautelet 07/06/2019: bugfix: deallocate XLSRVM only if allocated
-!  S. Riette      04/2020: XHL* fields
-!  A. Costes      12:2021: Blaze Fire model variables
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODD_REF
-!
-USE MODD_METRICS_n
-USE MODD_FIELD_n
-USE MODD_DUMMY_GR_FIELD_n
-USE MODD_LSFIELD_n
-USE MODD_GRID_n
-USE MODD_REF_n
-USE MODD_CURVCOR_n
-USE MODD_DYN_n
-USE MODD_DEEP_CONVECTION_n
-USE MODD_RADIATIONS_n
-USE MODD_FRC
-USE MODD_PRECIP_n
-USE MODD_ELEC_n
-USE MODD_PASPOL_n
-USE MODD_RAIN_ICE_PARAM
-USE MODD_RAIN_ICE_DESCR
-USE MODD_PARAM_n , ONLY : CCLOUD
-USE MODE_MODELN_HANDLER
-!
-! Modif 2D
-USE MODD_LATZ_EDFLX                      ! For ADVFRC and EDDY FLUXES
-USE MODD_DEF_EDDY_FLUX_n           ! For EDDY FLUXES
-USE MODD_DEF_EDDYUV_FLUX_n         ! For EDDY FLUXES
-!
-USE MODD_2D_FRC
-USE MODD_ADVFRC_n                  ! For ADVFRC and EDDY FLUXES
-USE MODD_RELFRC_n
-USE MODD_ADV_n
-USE MODD_PAST_FIELD_n
-USE MODD_TURB_n
-USE MODD_PARAM_C2R2, ONLY :LSUPSAT
-!
-IMPLICIT NONE
-!
-!*       0.1   declarations of arguments
-!
-INTEGER, INTENT(IN) :: KCALL ! number of times this routine has been called
-INTEGER :: IMI ! Current Model index
-!
-!*       0.2   declarations of local variables
-!
-!-------------------------------------------------------------------------------
-!
-! Save current Model index and switch to model 1 variables
-IMI = GET_CURRENT_MODEL_INDEX()
-CALL GOTO_MODEL(1)
-!*       1.    Module MODD_FIELD$n
-!
-IF ( KCALL==3 ) THEN
-  IF (CUVW_ADV_SCHEME(1:3)=='CEN'.AND. CTEMP_SCHEME=='LEFR') THEN
-    DEALLOCATE(XUM)
-    DEALLOCATE(XVM)
-    DEALLOCATE(XWM)
-    DEALLOCATE(XDUM)
-    DEALLOCATE(XDVM)
-    DEALLOCATE(XDWM)
-  END IF
-  DEALLOCATE(XUT)
-  DEALLOCATE(XVT)
-  DEALLOCATE(XWT)
-  DEALLOCATE(XTHT)
-  IF (L2D_ADV_FRC) THEN
-    IF (ASSOCIATED(XDTHFRC)) DEALLOCATE(XDTHFRC)
-    IF (ASSOCIATED(XDRVFRC)) DEALLOCATE(XDRVFRC)
-    IF (ASSOCIATED(TDTADVFRC)) DEALLOCATE(TDTADVFRC)
-  END IF
-    IF (L2D_REL_FRC) THEN
-    IF (ASSOCIATED(XTHREL)) DEALLOCATE(XTHREL)
-    IF (ASSOCIATED(XRVREL)) DEALLOCATE(XRVREL)
-    IF (ASSOCIATED(TDTRELFRC)) DEALLOCATE(TDTRELFRC)
-  END IF
-  ! DEALLOCATE EDDY FLUXES 
-  IF (LTH_FLX) THEN
-    DEALLOCATE(XVTH_FLUX_M)
-    DEALLOCATE(XWTH_FLUX_M)
-  END IF
-  IF (LUV_FLX) THEN
-    DEALLOCATE(XVU_FLUX_M)
-  END IF
-END IF
-IF ( KCALL==1 ) THEN
-  DEALLOCATE(XRUS)
-  DEALLOCATE(XRVS)
-  DEALLOCATE(XRWS)
-  DEALLOCATE(XRTHS)
-  DEALLOCATE(XRUS_PRES, XRVS_PRES, XRWS_PRES )                
-  DEALLOCATE(XRTHS_CLD )
-END IF
-!
-IF ( KCALL==3 ) THEN
-  IF (ASSOCIATED(XTKET)) DEALLOCATE(XTKET)
-END IF
-IF ( ASSOCIATED(XRTKES) .AND. KCALL==1 ) THEN
-  DEALLOCATE(XRTKES)
-END IF
-!
-IF ( KCALL==3 ) THEN
-  DEALLOCATE(XPABST)
-!
-  DEALLOCATE(XRT)
-END IF
-!
-IF ( KCALL==1 ) THEN
-  DEALLOCATE(XRRS)
-  DEALLOCATE(XRRS_CLD)
-END IF
-!
-IF ( ASSOCIATED(XSRCT) .AND. KCALL==3 ) THEN
-  DEALLOCATE(XSRCT)
-  DEALLOCATE(XSIGS)
-END IF   
-!
-IF ( ASSOCIATED(XHLC_HRC) .AND. KCALL==3 ) THEN
-  DEALLOCATE(XHLC_HRC)
-  DEALLOCATE(XHLC_HCF)
-  DEALLOCATE(XHLI_HRI)
-  DEALLOCATE(XHLI_HCF)
-END IF
-!
-IF ( ASSOCIATED(XCLDFR) .AND. KCALL==2 ) THEN
-  DEALLOCATE(XCLDFR)
-END IF   
-!
-IF ( ASSOCIATED(XICEFR) .AND. KCALL==2 ) THEN
-  DEALLOCATE(XICEFR)
-END IF   
-!
-IF ( ASSOCIATED(XRAINFR) .AND. KCALL==2 ) THEN
-  DEALLOCATE(XRAINFR)
-END IF   
-!
-IF ( KCALL == 3 ) THEN
-  DEALLOCATE(XSVT)
-END IF
-IF ( KCALL == 1 ) THEN
-  DEALLOCATE(XRSVS)
-  DEALLOCATE(XRSVS_CLD)
-END IF
-!
-IF ((CCLOUD == 'KHKO') .AND. LSUPSAT)  THEN
-    DEALLOCATE(XSUPSAT)
-    DEALLOCATE(XNACT)
-    DEALLOCATE(XNPRO)
-    DEALLOCATE(XSSPRO)
-END IF
-!
-IF (ASSOCIATED(XDUMMY_GR_FIELDS) .AND. KCALL==3 ) THEN
-  DEALLOCATE(XDUMMY_GR_FIELDS)
-END IF
-
-IF (ASSOCIATED(XLSPHI)) THEN
-  DEALLOCATE(XLSPHI)
-END IF
-
-IF (ASSOCIATED(XBMAP)) THEN
-  DEALLOCATE(XBMAP)
-END IF
-
-IF (ASSOCIATED(XFMRFA)) THEN
-  DEALLOCATE(XFMRFA)
-END IF
-
-IF (ASSOCIATED(XFMWF0)) THEN
-  DEALLOCATE(XFMWF0)
-END IF
-
-IF (ASSOCIATED(XFMR0)) THEN
-  DEALLOCATE(XFMR0)
-END IF
-
-IF (ASSOCIATED(XFMR00)) THEN
-  DEALLOCATE(XFMR00)
-END IF
-
-IF (ASSOCIATED(XFMIGNITION)) THEN
-  DEALLOCATE(XFMIGNITION)
-END IF
-
-IF (ASSOCIATED(XFMFUELTYPE)) THEN
-  DEALLOCATE(XFMFUELTYPE)
-END IF
-
-IF (ASSOCIATED(XFIRETAU)) THEN
-  DEALLOCATE(XFIRETAU)
-END IF
-
-IF (ASSOCIATED(XFLUXPARAMH)) THEN
-  DEALLOCATE(XFLUXPARAMH)
-END IF
-
-IF (ASSOCIATED(XFLUXPARAMW)) THEN
-  DEALLOCATE(XFLUXPARAMW)
-END IF
-
-IF (ASSOCIATED(XFIRERW)) THEN
-  DEALLOCATE(XFIRERW)
-END IF
-
-IF (ASSOCIATED(XFMASE)) THEN
-  DEALLOCATE(XFMASE)
-END IF
-
-IF (ASSOCIATED(XFMAWC)) THEN
-  DEALLOCATE(XFMAWC)
-END IF
-
-IF (ASSOCIATED(XFMWALKIG)) THEN
-  DEALLOCATE(XFMWALKIG)
-END IF
-
-IF (ASSOCIATED(XFMFLUXHDH)) THEN
-  DEALLOCATE(XFMFLUXHDH)
-END IF
-
-IF (ASSOCIATED(XFMFLUXHDW)) THEN
-  DEALLOCATE(XFMFLUXHDW)
-END IF
-
-IF (ASSOCIATED(XFMHWS)) THEN
-  DEALLOCATE(XFMHWS)
-END IF
-
-IF (ASSOCIATED(XFMWINDU)) THEN
-  DEALLOCATE(XFMWINDU)
-END IF
-
-IF (ASSOCIATED(XFMWINDV)) THEN
-  DEALLOCATE(XFMWINDV)
-END IF
-
-IF (ASSOCIATED(XFMWINDW)) THEN
-  DEALLOCATE(XFMWINDW)
-END IF
-
-IF (ASSOCIATED(XFMGRADOROX)) THEN
-  DEALLOCATE(XFMGRADOROX)
-END IF
-
-IF (ASSOCIATED(XFMGRADOROY)) THEN
-  DEALLOCATE(XFMGRADOROY)
-END IF
-
-IF (ASSOCIATED(XGRADLSPHIX)) THEN
-  DEALLOCATE(XGRADLSPHIX)
-END IF
-
-IF (ASSOCIATED(XGRADLSPHIY)) THEN
-  DEALLOCATE(XGRADLSPHIY)
-END IF
-
-IF (ASSOCIATED(XFIREWIND)) THEN
-  DEALLOCATE(XFIREWIND)
-END IF
-
-IF (ASSOCIATED(XLSPHI2D)) THEN
-  DEALLOCATE(XLSPHI2D)
-END IF
-
-IF (ASSOCIATED(XGRADLSPHIX2D)) THEN
-  DEALLOCATE(XGRADLSPHIX2D)
-END IF
-
-IF (ASSOCIATED(XGRADLSPHIY2D)) THEN
-  DEALLOCATE(XGRADLSPHIY2D)
-END IF
-
-IF (ASSOCIATED(XGRADMASKX)) THEN
-  DEALLOCATE(XGRADMASKX)
-END IF
-
-IF (ASSOCIATED(XGRADMASKY)) THEN
-  DEALLOCATE(XGRADMASKY)
-END IF
-
-IF (ASSOCIATED(XSURFRATIO2D)) THEN
-  DEALLOCATE(XSURFRATIO2D)
-END IF
-
-IF (ASSOCIATED(XLSDIFFUX2D)) THEN
-  DEALLOCATE(XLSDIFFUX2D)
-END IF
-
-IF (ASSOCIATED(XLSDIFFUY2D)) THEN
-  DEALLOCATE(XLSDIFFUY2D)
-END IF
-
-IF (ASSOCIATED(XFIRERW2D)) THEN
-  DEALLOCATE(XFIRERW2D)
-END IF
-!
-!*       3.    Module MODD_GRID$n
-!
-IF ( ASSOCIATED(XLON) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XLON)
-  DEALLOCATE(XLAT)
-  DEALLOCATE(XMAP)
-END IF
-!
-IF ( KCALL == 3 ) THEN
-  !Philippe W.: do not deallocate XXHAT, XYHAT and XZHAT because they are needed later on
-  !As they are 1D, their memory footprint is negligible
-  ! DEALLOCATE(XXHAT)
-  DEALLOCATE(XDXHAT)
-  ! DEALLOCATE(XYHAT)
-  DEALLOCATE(XDYHAT)
-  DEALLOCATE(XZS)
-  DEALLOCATE(XZSMT)
-  DEALLOCATE(XZZ)
-  ! DEALLOCATE(XZHAT)
-END IF
-!
-IF ( KCALL == 2 ) THEN
-  DEALLOCATE(XDIRCOSZW)
-  DEALLOCATE(XDIRCOSXW)
-  DEALLOCATE(XDIRCOSYW)
-  DEALLOCATE(XCOSSLOPE)
-  DEALLOCATE(XSINSLOPE)
-END IF
-
-IF ( KCALL == 2 ) THEN
-  DEALLOCATE(XDXX)
-  DEALLOCATE(XDYY)
-  DEALLOCATE(XDZX)
-  DEALLOCATE(XDZY)
-  DEALLOCATE(XDZZ)
-END IF
-!
-!*       4.    Modules MODD_REF and  MODD_REF$n
-!
-IF ( KCALL == 4 ) THEN
-  DEALLOCATE(XRHODREFZ)
-  DEALLOCATE(XTHVREFZ)
-END IF
-!
-IF ( KCALL == 3 ) THEN
-  DEALLOCATE(XRHODREF)
-  DEALLOCATE(XTHVREF)
-  DEALLOCATE(XEXNREF)
-  DEALLOCATE(XRHODJ)
-  IF ( ASSOCIATED(XRVREF) ) THEN
-    DEALLOCATE(XRVREF)  
-  END IF
-END IF
-!
-!*       5.    Module MODD_CURVCOR$n
-!
-IF ( ASSOCIATED(XCORIOX) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(XCORIOX)
-  DEALLOCATE(XCORIOY)
-END IF
-IF ( KCALL == 2 ) THEN
-  DEALLOCATE(XCORIOZ)
-END IF
-IF ( ASSOCIATED(XCURVX) .AND. KCALL == 2) THEN
-  DEALLOCATE(XCURVX)
-  DEALLOCATE(XCURVY)
-END IF
-!
-!*       6.    Module MODD_DYN$n
-!
-IF ( KCALL == 1 ) THEN
-  DEALLOCATE(XBFY)
-  DEALLOCATE(XAF,XCF)
-  DEALLOCATE(XTRIGSX)
-  DEALLOCATE(XTRIGSY)
-  DEALLOCATE(XRHOM)
-  DEALLOCATE(XALK)
-  DEALLOCATE(XALKW)
-  DEALLOCATE(XALKBAS)
-  DEALLOCATE(XALKWBAS)
-  IF ( ASSOCIATED(XKURELAX) ) THEN
-    DEALLOCATE(XKURELAX)
-    DEALLOCATE(XKVRELAX)
-    DEALLOCATE(XKWRELAX)
-    DEALLOCATE(LMASK_RELAX)
-  END IF
-END IF
-!
-!*       7.    Larger Scale variables (Module MODD_LSFIELD$n)
-!
-IF ( KCALL == 3 ) THEN
-  DEALLOCATE(XLSUM)
-  DEALLOCATE(XLSVM)
-  DEALLOCATE(XLSWM)
-  DEALLOCATE(XLSTHM)
-  IF(ASSOCIATED(XLSRVM)) DEALLOCATE(XLSRVM)
-  IF (ASSOCIATED(XLBXUM)) THEN
-    DEALLOCATE(XLBXUM)
-    DEALLOCATE(XLBYUM)
-    DEALLOCATE(XLBXVM)
-    DEALLOCATE(XLBYVM)
-    DEALLOCATE(XLBXWM)
-    DEALLOCATE(XLBYWM)
-    DEALLOCATE(XLBXTHM)
-    DEALLOCATE(XLBYTHM)
-  END IF
-  IF (ASSOCIATED(XLBXTKEM)) THEN
-    DEALLOCATE(XLBXTKEM)
-    DEALLOCATE(XLBYTKEM)
-  END IF
-  IF (ASSOCIATED(XLBXRM)) THEN
-    DEALLOCATE(XLBXRM)
-    DEALLOCATE(XLBYRM)
-  END IF
-  IF (ASSOCIATED(XLBXSVM)) THEN
-    DEALLOCATE(XLBXSVM)
-    DEALLOCATE(XLBYSVM)
-  END IF
-END IF
-!
-                  ! steady LS fields only for model 1 or independent models
-!
-IF( ASSOCIATED(XLSUS) .AND. KCALL == 3 ) THEN
-    DEALLOCATE(XLSUS)
-    DEALLOCATE(XLSVS)
-    DEALLOCATE(XLSWS)
-    DEALLOCATE(XLSTHS)
-    IF(ASSOCIATED(XLSRVS))  DEALLOCATE(XLSRVS)
-!
-    IF ( ASSOCIATED(XLBXUS) ) THEN
-      DEALLOCATE(XLBXUS)
-      DEALLOCATE(XLBYUS)
-      DEALLOCATE(XLBXVS)
-      DEALLOCATE(XLBYVS)
-      DEALLOCATE(XLBXWS)
-      DEALLOCATE(XLBYWS)
-      DEALLOCATE(XLBXTHS)
-      DEALLOCATE(XLBYTHS)
-    END IF
-    IF ( ASSOCIATED(XLBXTKES) ) THEN
-      DEALLOCATE(XLBXTKES)
-      DEALLOCATE(XLBYTKES)
-    END IF
-!
-    IF ( ASSOCIATED(XLBXRS) ) THEN
-      DEALLOCATE(XLBXRS)
-      DEALLOCATE(XLBYRS)
-    END IF
-!
-    IF ( ASSOCIATED(XLBXSVS) ) THEN
-      DEALLOCATE(XLBXSVS)
-      DEALLOCATE(XLBYSVS)
-    END IF
-!
-    IF ( ASSOCIATED(XCOEFLIN_LBXM) ) THEN
-      DEALLOCATE(XCOEFLIN_LBXM)
-      DEALLOCATE(NKLIN_LBXM)
-    END IF
-
-    IF ( ASSOCIATED(XCOEFLIN_LBYM) ) THEN
-      DEALLOCATE(XCOEFLIN_LBYM)
-      DEALLOCATE(NKLIN_LBYM)
-    END IF
-
-    IF ( ASSOCIATED(XCOEFLIN_LBXU) ) THEN
-      DEALLOCATE(XCOEFLIN_LBXU)
-      DEALLOCATE(NKLIN_LBXU)
-      DEALLOCATE(XCOEFLIN_LBYU)
-      DEALLOCATE(NKLIN_LBYU)
-      DEALLOCATE(XCOEFLIN_LBXV)
-      DEALLOCATE(NKLIN_LBXV)
-      DEALLOCATE(XCOEFLIN_LBYV)
-      DEALLOCATE(NKLIN_LBYV)
-      DEALLOCATE(XCOEFLIN_LBXW)
-      DEALLOCATE(NKLIN_LBXW)
-      DEALLOCATE(XCOEFLIN_LBYW)
-      DEALLOCATE(NKLIN_LBYW)
-    END IF 
-END IF
-!
-!*       8.    L.E.S. variables 
-!
-
-!
-!*       9.    Module MODD_RADIATIONS$n
-!
-!
-IF ( ASSOCIATED(XSLOPANG) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(XSLOPANG)
-  DEALLOCATE(XSLOPAZI)
-  DEALLOCATE(XDTHRAD)
-  DEALLOCATE(XFLALWD)
-  DEALLOCATE(XDIRFLASWD)
-  DEALLOCATE(XSCAFLASWD)
-  DEALLOCATE(XDIRSRFSWD)
-  DEALLOCATE(XSWU)
-  DEALLOCATE(XSWD)
-  DEALLOCATE(XLWU)
-  DEALLOCATE(XLWD)
-  DEALLOCATE(XDTHRADSW)
-  DEALLOCATE(XDTHRADLW)
-  DEALLOCATE(XRADEFF)
-  DEALLOCATE(NCLEARCOL_TM1)
-END IF
-IF (ASSOCIATED(XSTATM)) DEALLOCATE(XSTATM)
-!
-!*      10.    Module MODD_DEEP_CONVECTION$n
-!
-IF ( ASSOCIATED(XDTHCONV) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(NCOUNTCONV)
-  DEALLOCATE(XDTHCONV)
-  DEALLOCATE(XDRVCONV)
-  DEALLOCATE(XDRCCONV)
-  DEALLOCATE(XDRICONV)
-END IF
-!
-IF ( ASSOCIATED(XPRCONV) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(XPRCONV)
-  DEALLOCATE(XPACCONV)
-END IF
-IF ( ASSOCIATED(XPRSCONV) .AND. KCALL == 2  ) THEN
-  DEALLOCATE(XPRSCONV)
-END IF
-!
-IF ( ASSOCIATED(XDSVCONV) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(XDSVCONV)
-END IF
-!
-!*     11.   Forcing variables (Module MODD_FRC)
-!
-IF ( ALLOCATED(XUFRC) .AND. KCALL == 4 ) THEN
-    DEALLOCATE(TDTFRC)
-    DEALLOCATE(XUFRC)
-    DEALLOCATE(XVFRC)
-    DEALLOCATE(XWFRC)
-    DEALLOCATE(XTHFRC)
-    DEALLOCATE(XRVFRC)
-    DEALLOCATE(XTENDTHFRC)
-    DEALLOCATE(XTENDRVFRC)
-    DEALLOCATE(XGXTHFRC)
-    DEALLOCATE(XGYTHFRC)
-    DEALLOCATE(XPGROUNDFRC)
-END IF
-!
-!*     12.     Module MODD_ICE_CONC$n
-!
-IF ( ASSOCIATED(XCIT) .AND. KCALL == 2 ) THEN
-  DEALLOCATE(XCIT)
-END IF
-!
-!*     13.     Module MODD_PRECIP$n
-!
-IF ( ASSOCIATED(XINPRC) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XINPRC)
-  DEALLOCATE(XACPRC)
-END IF
-!
-IF ( ASSOCIATED(XINPRR) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XINPRR)
-  DEALLOCATE(XACPRR)
-END IF
-!
-IF ( ASSOCIATED(XINPRR3D) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XINPRR3D)
-  DEALLOCATE(XEVAP3D)
-END IF
-!
-IF ( ASSOCIATED(XINPRS) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XINPRS)
-  DEALLOCATE(XACPRS)
-  DEALLOCATE(XINPRG)
-  DEALLOCATE(XACPRG)
-END IF
-!
-IF ( ASSOCIATED(XINPRH) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XINPRH)
-  DEALLOCATE(XACPRH)
-END IF
-!
-!*     13b.     Module MODD_ELEC$n
-!
-IF ( ASSOCIATED(XNI_SDRYG) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XNI_SDRYG)
-  DEALLOCATE(XNI_IDRYG)
-  DEALLOCATE(XNI_IAGGS)
-  DEALLOCATE(XEW)
-  DEALLOCATE(XIND_RATE)
-END IF
-!
-IF ( ASSOCIATED(XEFIELDU) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XEFIELDU)
-  DEALLOCATE(XEFIELDV)
-  DEALLOCATE(XEFIELDW)
-  DEALLOCATE(XESOURCEFW)
-  DEALLOCATE(XIONSOURCEFW)
-  DEALLOCATE(XCION_POS_FW)
-  DEALLOCATE(XCION_NEG_FW)
-  DEALLOCATE(XMOBIL_POS)  
-  DEALLOCATE(XMOBIL_NEG)  
-END IF
-!
-IF ( ASSOCIATED(XRHOM_E) .AND. KCALL == 3 ) THEN
-  DEALLOCATE (XRHOM_E)
-  DEALLOCATE (XAF_E)
-  DEALLOCATE (XCF_E)
-  DEALLOCATE (XBFY_E)
-END IF
-!
-!*     14.     Modules RAIN_ICE_DESCR and MODD_RAIN_ICE_PARAM
-!
-IF (  ASSOCIATED(XRTMIN) .AND. KCALL == 4 ) THEN
-  CALL RAIN_ICE_DESCR_DEALLOCATE()
-  CALL RAIN_ICE_PARAM_DEALLOCATE()
-END IF
-!
-!*     15.     Module PASPOLn           
-!
-IF ( ASSOCIATED(XATC) .AND. KCALL == 3 ) THEN
-  DEALLOCATE(XATC)
-END IF
-!
-!*     16.     Module TURBn           
-!
-IF ( KCALL==3 ) THEN
-  IF (ASSOCIATED(XDYP)) DEALLOCATE(XDYP)
-  IF (ASSOCIATED(XTHP)) DEALLOCATE(XTHP)
-  IF (ASSOCIATED(XTR)) DEALLOCATE(XTR)
-  IF (ASSOCIATED(XDISS)) DEALLOCATE(XDISS)
-  IF (ASSOCIATED(XLEM)) DEALLOCATE(XLEM)
-END IF
-!-------------------------------------------------------------------------------
-!
-CALL GOTO_MODEL(IMI)
-!
-END SUBROUTINE DEALLOCATE_MODEL1
diff --git a/src/mesonh/ext/diagnos_les_mf.f90 b/src/mesonh/ext/diagnos_les_mf.f90
deleted file mode 100644
index 665d1ea7666f6047ab2a4d8e9343253fb2852446..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/diagnos_les_mf.f90
+++ /dev/null
@@ -1,244 +0,0 @@
-!MNH_LIC Copyright 2009-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.
-!-----------------------------------------------------------------
-!    ###########################
-     MODULE MODI_DIAGNOS_LES_MF
-!    ###########################
-!
-INTERFACE
-!
-!     #################################################################
-      SUBROUTINE DIAGNOS_LES_MF(KIU,KJU,KKU,PTIME_LES,               &
-                                PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, &
-                                PU_UP, PV_UP, PTHV_UP, PW_UP,        &
-                                PFRAC_UP,PEMF,PDETR,PENTR,           &
-                                PWTHMF,PWTHVMF,PWRTMF,               &
-                                PWUMF,PWVMF,                         &
-                                KKLCL,KKETL,KKCTL)
-!     #################################################################
-!
-!*                    1.1  Declaration of Arguments
-!
-use modd_precision, only: MNHTIME
-!
-INTEGER,                INTENT(IN)  :: KIU, KJU, KKU ! 3D grid size
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHL_UP,PRT_UP,PRV_UP,&
-                                       PRC_UP,PRI_UP   ! updraft properties
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PU_UP, PV_UP
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHV_UP,PW_UP,&
-                                       PFRAC_UP,PEMF,PDETR,PENTR
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PWTHMF,PWTHVMF,PWRTMF, &
-                                       PWUMF,PWVMF
-INTEGER, DIMENSION(:),  INTENT(IN)  :: KKLCL,KKETL,KKCTL
-                                           
-
-END SUBROUTINE DIAGNOS_LES_MF
-
-END INTERFACE
-!
-END MODULE MODI_DIAGNOS_LES_MF
-!
-!     #################################################################
-      SUBROUTINE DIAGNOS_LES_MF(KIU,KJU,KKU,PTIME_LES,               &
-                                PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, &
-                                PU_UP, PV_UP, PTHV_UP, PW_UP,        &
-                                PFRAC_UP,PEMF,PDETR,PENTR,           &
-                                PWTHMF,PWTHVMF,PWRTMF,               &
-                                PWUMF,PWVMF,                         &
-                                KKLCL,KKETL,KKCTL)
-!     #################################################################
-!!
-!!****  *DIAGNOS_LES_MF* - Edit in File the updraft properties as
-!!                         LES diagnostics 
-!!
-!!    PURPOSE
-!!    -------
-!!****  The purpose of this routine is to write updraft variable as
-!!       LES diagnostics         
-!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!      
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!     REFERENCE
-!!     ---------
-!!      
-!!
-!!     AUTHOR
-!!     ------
-!!     J.pergaud
-!
-! Modifications:
-!  V. Masson      09/2010: Optimization
-!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
-!! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_LES
-use modd_precision, only: MNHTIME
-!
-USE MODE_MNH_TIMING
-!
-USE MODI_LES_VER_INT
-USE MODI_LES_MEAN_ll
-USE MODI_SHUMAN
-!
-IMPLICIT NONE
-
-!*                    0.1  Declaration of Arguments
-!
-!
-INTEGER,                INTENT(IN)  :: KIU, KJU, KKU ! 3D grid size
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHL_UP,PRT_UP,PRV_UP,&
-                                       PRC_UP,PRI_UP   ! updraft properties
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PU_UP, PV_UP
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHV_UP,PW_UP,&
-                                       PFRAC_UP,PEMF,PDETR,PENTR
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PWTHMF,PWTHVMF,PWRTMF, &
-                                       PWUMF,PWVMF
-INTEGER, DIMENSION(:),  INTENT(IN)  :: KKLCL,KKETL,KKCTL
-                                           
-!
-!
-!                     0.2  Declaration of local variables
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZTHLMFFLX_LES,ZRTMFFLX_LES, &
-                                         ZTHVMFFLX_LES,ZUMFFLX_LES, &
-                                         ZVMFFLX_LES
-REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZTHLUP_MF_LES,ZRTUP_MF_LES, &
-                                         ZRCUP_MF_LES,ZEMF_MF_LES,   &
-                                         ZDETR_MF_LES, ZENTR_MF_LES, & 
-                                         ZWUP_MF_LES,ZFRACUP_MF_LES, &
-                                         ZTHVUP_MF_LES,ZRVUP_MF_LES, &
-                                         ZRIUP_MF_LES
-REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2
-!------------------------------------------------------------------------
-!
-
-CALL SECOND_MNH2(ZTIME1)
-
- IF (LLES_CALL) THEN
-
-    ALLOCATE( ZTHLUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZRTUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZRVUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZRCUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZRIUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZEMF_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZDETR_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZENTR_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZWUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZFRACUP_MF_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZTHVUP_MF_LES(KIU,KJU,NLES_K) )
-
-    ALLOCATE( ZTHLMFFLX_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZRTMFFLX_LES (KIU,KJU,NLES_K) )
-    ALLOCATE( ZTHVMFFLX_LES(KIU,KJU,NLES_K) )
-    ALLOCATE( ZUMFFLX_LES  (KIU,KJU,NLES_K) )
-    ALLOCATE( ZVMFFLX_LES  (KIU,KJU,NLES_K) )
-
-    
-    CALL LES_VER_INT(MZF(PWTHMF)  ,ZTHLMFFLX_LES  )
-    CALL LES_MEAN_ll(ZTHLMFFLX_LES,LLES_CURRENT_CART_MASK, &
-                    X_LES_SUBGRID_WTHLMF(:,NLES_CURRENT_TCOUNT,1))
-    
-    CALL LES_VER_INT( MZF(PWRTMF)  ,ZRTMFFLX_LES  )
-    CALL LES_MEAN_ll (ZRTMFFLX_LES , LLES_CURRENT_CART_MASK,          &
-                    X_LES_SUBGRID_WRTMF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PWUMF)  ,ZUMFFLX_LES  )
-    CALL LES_MEAN_ll (ZUMFFLX_LES , LLES_CURRENT_CART_MASK,              &
-                    X_LES_SUBGRID_WUMF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PWVMF)  ,ZVMFFLX_LES  )
-    CALL LES_MEAN_ll (ZVMFFLX_LES , LLES_CURRENT_CART_MASK,                   &
-                    X_LES_SUBGRID_WVMF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PWTHVMF)  ,ZTHVMFFLX_LES  )
-    CALL LES_MEAN_ll (ZTHVMFFLX_LES , LLES_CURRENT_CART_MASK,    &
-                    X_LES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-
-    CALL LES_VER_INT( MZF(PTHL_UP)  ,ZTHLUP_MF_LES  )
-    CALL LES_MEAN_ll (ZTHLUP_MF_LES , LLES_CURRENT_CART_MASK,    &
-                   X_LES_SUBGRID_THLUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-    CALL LES_VER_INT( MZF(PRT_UP)  ,ZRTUP_MF_LES  )
-    CALL LES_MEAN_ll (ZRTUP_MF_LES , LLES_CURRENT_CART_MASK,       &
-                    X_LES_SUBGRID_RTUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PRV_UP)  ,ZRVUP_MF_LES  )
-    CALL LES_MEAN_ll (ZRVUP_MF_LES , LLES_CURRENT_CART_MASK,       &
-                    X_LES_SUBGRID_RVUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PRC_UP)  ,ZRCUP_MF_LES  )
-    CALL LES_MEAN_ll (ZRCUP_MF_LES , LLES_CURRENT_CART_MASK,        &
-                    X_LES_SUBGRID_RCUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                    
-    CALL LES_VER_INT( MZF(PRI_UP)  ,ZRIUP_MF_LES  )
-    CALL LES_MEAN_ll (ZRIUP_MF_LES , LLES_CURRENT_CART_MASK,        &
-                    X_LES_SUBGRID_RIUP_MF(:,NLES_CURRENT_TCOUNT,1)     )            
-                    
-    CALL LES_VER_INT( MZF(PEMF)  ,ZEMF_MF_LES  )
-    CALL LES_MEAN_ll (ZEMF_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_MASSFLUX(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-    CALL LES_VER_INT( MZF(PDETR)  ,ZDETR_MF_LES  )
-    CALL LES_MEAN_ll (ZDETR_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_DETR(:,NLES_CURRENT_TCOUNT,1)         )
-                   
-    CALL LES_VER_INT( MZF(PENTR)  ,ZENTR_MF_LES  )
-    CALL LES_MEAN_ll (ZENTR_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_ENTR(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-    CALL LES_VER_INT( MZF(PW_UP)  ,ZWUP_MF_LES  )
-    CALL LES_MEAN_ll (ZWUP_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_WUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-    CALL LES_VER_INT( MZF(PFRAC_UP)  ,ZFRACUP_MF_LES  )
-    CALL LES_MEAN_ll (ZFRACUP_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_FRACUP(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-    CALL LES_VER_INT( MZF(PTHV_UP)  ,ZTHVUP_MF_LES  )
-    CALL LES_MEAN_ll (ZTHVUP_MF_LES , LLES_CURRENT_CART_MASK,       &
-                   X_LES_SUBGRID_THVUP_MF(:,NLES_CURRENT_TCOUNT,1)     )
-                   
-     
-        
-    DEALLOCATE( ZTHLMFFLX_LES )
-    DEALLOCATE( ZRTMFFLX_LES )
-    DEALLOCATE( ZTHVMFFLX_LES )
-    DEALLOCATE( ZUMFFLX_LES  )
-    DEALLOCATE( ZVMFFLX_LES  )
-
-    
-    DEALLOCATE( ZTHLUP_MF_LES )
-    DEALLOCATE( ZRTUP_MF_LES )
-    DEALLOCATE( ZRVUP_MF_LES )    
-    DEALLOCATE( ZRCUP_MF_LES )
-    DEALLOCATE( ZRIUP_MF_LES )
-    DEALLOCATE( ZENTR_MF_LES )
-    DEALLOCATE( ZDETR_MF_LES )
-    DEALLOCATE( ZEMF_MF_LES )
-    DEALLOCATE( ZWUP_MF_LES )
-    DEALLOCATE( ZFRACUP_MF_LES )
-    DEALLOCATE( ZTHVUP_MF_LES )
-    
-ENDIF
-
-CALL SECOND_MNH2(ZTIME2)
-PTIME_LES =             ZTIME2 - ZTIME1
-XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-
-END SUBROUTINE DIAGNOS_LES_MF           
diff --git a/src/mesonh/ext/ground_paramn.f90 b/src/mesonh/ext/ground_paramn.f90
deleted file mode 100644
index 5d872413b3361b500da93f8a7671510c51adfdac..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ground_paramn.f90
+++ /dev/null
@@ -1,1230 +0,0 @@
-!MNH_LIC Copyright 1994-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.
-!-----------------------------------------------------------------
-!     ##########
-MODULE MODI_GROUND_PARAM_n
-!     ##########
-!
-INTERFACE 
-!
-      SUBROUTINE GROUND_PARAM_n(D, PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, &
-                                 PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, KTCOUNT, TPFILE )
-!
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-!* surface fluxes
-!  --------------
-!
-USE MODD_IO,      ONLY: TFILEDATA
-!
-TYPE(DIMPHYEX_t),     INTENT(IN)   :: D
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor           (m/s*kg/kg)
-REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar                (m/s*kg/kg)
-                                           ! flux of chemical var.                 (ppp.m/s)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2                   (m/s*kg/kg)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU  ! surface fluxes of horizontal   
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV  ! momentum in x and y directions        (m2/s2)
-!
-!* Radiative parameters
-!  --------------------
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! direct  albedo for each spectral band (-)
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each spectral band (-)
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEMIS     ! surface emissivity                    (-)
-REAL, DIMENSION(:,:),   INTENT(OUT) :: PTSRAD    ! surface radiative temperature         (K)
-!
-INTEGER,                INTENT(IN)  :: KTCOUNT   ! temporal iteration count
-TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE    ! Synchronous output file
-END SUBROUTINE GROUND_PARAM_n
-!
-END INTERFACE
-!
-END MODULE MODI_GROUND_PARAM_n
-!
-!     ######################################################################
-      SUBROUTINE GROUND_PARAM_n(D, PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, &
-                                 PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, KTCOUNT, TPFILE )
-!     #######################################################################
-!
-!
-!!****  *GROUND_PARAM*  
-!!
-!!    PURPOSE
-!!    -------
-!       Monitor to call the externalized surface
-!     
-!!**  METHOD
-!!    ------
-!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    Noilhan and Planton (1989)
-!!      
-!!    AUTHOR
-!!    ------
-!!	S. Belair           * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    10/03/95 
-!!      (J.Stein)   25/10/95  add the rain flux computation at the ground
-!!                            and the lbc
-!!      (J.Stein)   15/11/95  include the strong slopes cases
-!!      (J.Stein)   06/02/96  bug correction for the precipitation flux writing 
-!!      (J.Stein)   20/05/96  set the right IGRID value for the rain rate
-!!      (J.Viviand) 04/02/97  add cold and convective precipitation rate
-!!      (J.Stein)   22/06/97  use the absolute pressure    
-!!      (V.Masson)  09/07/97  add directional z0 computations and RESA correction     
-!!      (V.Masson)  13/02/98  merge the ISBA and TSZ0 routines,
-!!                            rename the routine as a monitor, called by PHYS_PARAMn
-!!                            add the town parameterization
-!!                            recomputes z0 where snow is.
-!!                            pack and unpack of 2D fields into 1D fields
-!!      (V.Masson)  04/01/00  removes the TSZ0 case
-!       (F.Solmon/V.Masson)   adapatation for patch approach
-!                             modification of internal subroutine pack/ allocation in function 
-!                              of patch indices
-!                             calling of isba for each defined patch
-!                             averaging of patch fluxes to get nat fluxes 
-!       (P. Tulet/G.Guenais)  04/02/01  separation of vegetatives class
-!                                           for friction velocity and 
-!                                           aerodynamical resistance
-!      (S Donnier)            09/12/02  add specific humidity at 2m for diagnostic
-!      (V.Masson)             01/03/03  externalisation of the surface schemes!
-!      (P.Tulet )             01/11/03  externalisation of the surface chemistry!
-!!     (D.Gazen)              01/12/03  change emissions handling for surf. externalization
-!!     (J.escobar)            18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n
-!      (J.escobar)            02/2014 add Forefire coupling
-!!     (G.Delautier)          06/2016 phasage surfex 8
-!!     (B.Vie)                2016 LIMA
-!!     (J.Pianezze)           08/2016 add send/recv oasis functions
-!!      (M.Leriche)            24/03/16 remove flag for chemical surface fluxes
-!!      (M.Leriche)           01/07/2017 Add DIAG chimical surface fluxes
-!!  01/2018      (G.Delautier) SURFEX 8.1
-!!                   02/2018 Q.Libois ECRAD
-!!     (P.Wautelet) 28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
-
-!!     (V. Vionnet)           18/07/2017 add coupling for blowing snow module 
-!!     (Bielli S.) 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
-!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!  P. Wautelet 09/02/2022: bugfix: add missing XCURRENT_LEI computation
-!  A. Costes      12/2021: Blaze Fire model
-!-------------------------------------------------------------------------------
-!
-!*       0.     DECLARATIONS
-!               ------------
-!
-! 
-#ifdef CPLOASIS
-USE MODI_GET_HALO
-USE MODI_MNH_OASIS_RECV
-USE MODI_MNH_OASIS_SEND
-USE MODD_SFX_OASIS, ONLY : LOASIS
-USE MODD_DYN,       ONLY : XSEGLEN
-USE MODD_DYN_n,     ONLY : DYN_MODEL
-#endif
-!
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO
-USE MODD_DIMPHYEX,   ONLY : DIMPHYEX_t
-USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF
-USE MODD_DYN_n,      ONLY : XTSTEP
-USE MODD_CH_MNHC_n,  ONLY : LUSECHEM
-USE MODD_CH_M9_n,   ONLY : CNAMES
-USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS,&
-XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,&
-XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,&
-XFMFLUXHDH, XFMFLUXHDW, XRTHS, XRRS, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, &
-XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY
-USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
-USE MODD_DIM_n,      ONLY : NKMAX
-USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
-                            XCOSSLOPE, XSINSLOPE, XZS
-USE MODD_REF_n,      ONLY : XRHODREF,XRHODJ,XEXNREF
-USE MODD_CONF_n,     ONLY : NRR
-USE MODD_PARAM_n,    ONLY : CDCONV,CCLOUD, CRAD
-USE MODD_PRECIP_n,   ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
-USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV
-USE MODD_CONF,       ONLY : LCARTESIAN, CPROGRAM
-USE MODD_TIME_n,     ONLY : TDTCUR
-USE MODD_RADIATIONS_n,   ONLY : XFLALWD, XCCO2, XTSIDER, &
-                                XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
-                                XZENITH, XAZIM, XAER, XSWU, XLWU
-USE MODD_NSV
-USE MODD_GRID,       ONLY : XLON0, XRPK, XBETA
-USE MODD_PARAM_ICE,  ONLY : LSEDIC
-USE MODD_PARAM_C2R2, ONLY : LSEDC
-USE MODD_DIAG_IN_RUN
-USE MODD_DUST,       ONLY : LDUST 
-USE MODD_SALT,       ONLY : LSALT
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODD_CSTS_DUST,  ONLY : XMOLARWEIGHT_DUST
-USE MODD_CSTS_SALT,  ONLY : XMOLARWEIGHT_SALT
-USE MODD_CH_FLX_n, ONLY : XCHFLX
-USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG
-!
-USE MODI_NORMAL_INTERPOL
-USE MODE_ROTATE_WIND, ONLY : ROTATE_WIND
-USE MODI_SHUMAN
-USE MODI_MNHGET_SURF_PARAM_n
-USE MODI_COUPLING_SURF_ATM_n
-USE MODI_DIAG_SURF_ATM_n
-USE MODD_MNH_SURFEX_n
-!
-USE MODE_DATETIME
-USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-#ifdef MNH_FOREFIRE
-!** MODULES FOR FOREFIRE **!
-USE MODD_FOREFIRE
-USE MODD_FOREFIRE_n
-USE MODI_COUPLING_FOREFIRE_n
-#endif
-!
-USE MODD_TIME_n
-USE MODD_TIME
-!
-USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC
-!
-USE MODD_FIRE
-USE MODD_FIELD
-USE MODI_FIRE_MODEL
-USE MODD_CONF, ONLY : NVERB, NHALO
-USE MODE_MNH_TIMING, ONLY : SECOND_MNH2
-USE MODE_MSG
-USE MODD_IO,      ONLY: TFILEDATA
-!
-IMPLICIT NONE
-!
-!
-!
-!*      0.1    declarations of arguments
-!
-!* surface fluxes
-!  --------------
-!
-TYPE(DIMPHYEX_t),     INTENT(IN)   :: D
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor           (m/s*kg/kg)
-REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar                (m/s*kg/kg)
-                                           ! flux of chemical var.                 (ppp.m/s)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2                   (m/s*kg/kg)
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU  ! surface fluxes of horizontal   
-REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV  ! momentum in x and y directions        (m2/s2)
-!
-!* Radiative parameters
-!  --------------------
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! direct  albedo for each spectral band (-)
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each spectral band (-)
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEMIS     ! surface emissivity                    (-)
-REAL, DIMENSION(:,:),   INTENT(OUT) :: PTSRAD    ! surface radiative temperature         (K)
-!
-INTEGER,                INTENT(IN)  :: KTCOUNT   ! temporal iteration count
-TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE    ! Synchronous output file
-!
-!-------------------------------------------------------------------------------
-!
-!
-!
-!*      0.2    declarations of local variables
-!              -------------------------------
-!
-!
-!* Atmospheric variables
-!  ---------------------
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE         :: ZRV    ! vapor mixing ratio
-!
-!            suffix 'A' stands for atmospheric variable at first model level
-!
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZZREF  ! Forcing height
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTA    ! Temperature
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRVA   ! vapor mixing ratio
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZQA    ! humidity (kg/m3)
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZPA    ! Pressure
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZPS    ! Pressure
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZEXNA  ! Exner function
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZEXNS  ! Exner function
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTHA   ! potential temperature
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRAIN  ! liquid precipitation (kg/m2/s)
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSNOW  ! solid precipitation  (kg/m2/s)
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTSUN  ! solar time           (s since midnight)
-!
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZUA    ! u component of the wind
-!                                                       ! parallel to the orography
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZVA    ! v component of the wind
-!                                                       ! parallel to the orography
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZU     ! zonal wind
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZV     ! meridian wind
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZWIND  ! wind parallel to the orography
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRHOA  ! air density
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZDIR   ! wind direction (rad from N clockwise)
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFU   ! zonal momentum flux
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFV   ! meridian momentum flux
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZCO2   ! CO2 concentration (kg/kg)
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZALFA  ! angle between the wind
-!                                                       ! and the x axis
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZU2D   ! u and v component of the
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZV2D   ! wind at mass point
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFTH  ! Turbulent flux of heat
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFTQ  ! Turbulent flux of water
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFCO2 ! Turbulent flux of CO2
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NSV):: ZSFTS! Turbulent flux of scalar
-!
-REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NBLOWSNOW_2D)  :: ZBLOWSNOW_2D  ! 2D blowing snow variables
-                                                                            ! after advection
-                                  ! They refer to the 2D fields advected by MNH including:
-                                  !             - total number concentration in Canopy
-                                  !             - total mass concentration in Canopy
-                                  !             - equivalent concentration in the saltation layer
-!
-!* Dimensions
-!  ----------
-!
-INTEGER :: IIB  ! physical boundary
-INTEGER :: IIE  ! physical boundary
-INTEGER :: IJB  ! physical boundary
-INTEGER :: IJE  ! physical boundary
-INTEGER :: IKB  ! physical boundary
-INTEGER :: IKE  ! physical boundary
-INTEGER :: IKU  ! vertical array sizes
-!
-INTEGER :: JLAYER ! loop counter
-INTEGER :: JSV    ! loop counter
-INTEGER :: JI,JJ,JK ! loop index
-!
-INTEGER :: IDIM1 ! X physical dimension
-INTEGER :: IDIM2 ! Y physical dimension
-INTEGER :: IDIM1D! total physical dimension
-INTEGER :: IKRAD
-!
-INTEGER :: KSV_SURF  ! Number of scalar variables sent to SURFEX
-!
-!* Arrays put in 1D vectors
-!  ------------------------
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSUN     ! solar time
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZENITH   ! zenithal angle
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_AZIM     ! azimuthal angle
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZREF     ! forcing height
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZS       ! orography
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_U        ! zonal wind
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_V        ! meridian wind
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_QA       ! air humidity  (kg/m3)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TA       ! air temperature
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RHOA     ! air density
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SV       ! scalar at first atmospheric level
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_CO2      ! air CO2 concentration
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RAIN     ! liquid precipitation
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SNOW     ! solid precipitation
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_LW       ! incoming longwave
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_SW   ! direct incoming shortwave
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_SW   ! diffuse incoming shortwave
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PS       ! surface pressure
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PA       ! pressure at first atmospheric level
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZWS      ! significant wave height (m)
-
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTQ     ! water vapor flux
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTH     ! potential temperature flux
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SFTS     ! scalar flux
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFCO2    ! CO2 flux
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFU      ! zonal momentum flux
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFV      ! meridian momentum flux
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSRAD    ! radiative surface temperature
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB  ! direct albedo
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB  ! diffuse albedo
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_EMIS     ! emissivity
-
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSURF
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0H
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_QSURF
-
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PET_A_COEF
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEQ_A_COEF
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PET_B_COEF
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEQ_B_COEF
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RN        ! net radiation           (W/m2)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_H         ! sensible heat flux      (W/m2)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_LE        ! Total latent heat flux  (W/m2)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_LEI       ! Solid Latent heat flux  (W/m2)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_GFLUX     ! ground flux             (W/m2)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_T2M       ! Air temperature at 2 meters (K)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Q2M       ! Air humidity at 2 meters    (kg/kg)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_HU2M      ! Air relative humidity at 2 meters (-)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZON10M    ! zonal Wind at 10 meters     (m/s)
-REAL, DIMENSION(:),   ALLOCATABLE :: ZP_MER10M    ! meridian Wind at 10 meters  (m/s)
-TYPE(LIST_ll), POINTER            :: TZFIELDSURF_ll    ! list of fields to exchange
-INTEGER                           :: IINFO_ll       ! return code of parallel routine
-!
-!
-CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar variables
-                                                        ! sent to SURFEX
-!                                                        
-REAL                              :: ZTIMEC
-INTEGER           :: ILUOUT         ! logical unit
-!
-! Fire model
-REAL, DIMENSION(2)                    :: ZFIRETIME1, ZFIRETIME2           ! CPU time for Blaze perf profiling
-REAL, DIMENSION(2)                    :: ZGRADTIME1, ZGRADTIME2           ! CPU time for Blaze perf profiling
-REAL, DIMENSION(2)                    :: ZPROPAGTIME1, ZPROPAGTIME2       ! CPU time for Blaze perf profiling
-REAL, DIMENSION(2)                    :: ZFLUXTIME1, ZFLUXTIME2           ! CPU time for Blaze perf profiling
-REAL, DIMENSION(2)                    :: ZROSWINDTIME1, ZROSWINDTIME2     ! CPU time for Blaze perf profiling
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZFIREFUELMAP                     ! Fuel map
-CHARACTER(LEN=7)                      :: YFUELMAPFILE                     ! Fuel Map file name
-TYPE(LIST_ll), POINTER                :: TZFIELDFIRE_ll                   ! list of fields to exchange
-
-!-------------------------------------------------------------------------------
-!
-!
-ILUOUT=TLUOUT%NLU
-IKB= 1+JPVEXT
-IKU=NKMAX + 2* JPVEXT
-IKE=IKU-JPVEXT
-!
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-!
-PSFTH    = XUNDEF
-PSFRV    = XUNDEF
-PSFSV    = XUNDEF
-PSFCO2   = XUNDEF
-PSFU     = XUNDEF
-PSFV     = XUNDEF
-PDIR_ALB = XUNDEF
-PSCA_ALB = XUNDEF
-PEMIS    = XUNDEF
-PTSRAD   = XUNDEF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.     CONVERSION OF THE ATMOSPHERIC VARIABLES
-!               --------------------------------------- 
-!
-!        1.1    water vapor
-!               -----------
-
-!
-ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU))
-!
-IF(NRR>0) THEN
-  ZRV(:,:,:)=XRT(:,:,:,1)
-ELSE
-  ZRV(:,:,:)=0.
-END IF
-!
-!        1.2    Horizontal wind direction (rad from N clockwise)
-!               -------------------------
-!
-ZU2D(:,:,:)=MXF(XUT(:,:,IKB:IKB))
-ZV2D(:,:,:)=MYF(XVT(:,:,IKB:IKB))
-!
-!* angle between Y axis and wind (rad., clockwise)
-!
-ZALFA = 0.
-WHERE(ZU2D(:,:,1)/=0. .OR. ZV2D(:,:,1)/=0.)
-  ZALFA(:,:)=ATAN2(ZU2D(:,:,1),ZV2D(:,:,1))
-END WHERE
-WHERE(ZALFA(:,:)<0.) ZALFA(:,:) = ZALFA(:,:) + 2. * XPI
-!
-!* angle between North and wind (rad., clockwise)
-!
-IF (.NOT. LCARTESIAN) THEN
-  ZDIR =   ( (XRPK*(XLON(:,:)-XLON0)) - XBETA ) * XPI/180.  + ZALFA
-ELSE
-  ZDIR =                              - XBETA   * XPI/180.  + ZALFA
-END IF
-!
-!
-!        1.3    Rotate the wind
-!               ---------------
-!
-CALL ROTATE_WIND(D,XUT,XVT,XWT,           &
-     XDIRCOSXW, XDIRCOSYW, XDIRCOSZW,   &
-     XCOSSLOPE,XSINSLOPE,               &
-     XDXX,XDYY,XDZZ,                    &
-     ZUA,ZVA                            )
-
-!
-!        1.4    zonal and meridian components of the wind parallel to the slope
-!               ---------------------------------------------------------------
-!
-ZWIND(:,:) = SQRT( ZUA**2 + ZVA**2 )
-!
-ZU(:,:) = ZWIND(:,:) * SIN(ZDIR)
-ZV(:,:) = ZWIND(:,:) * COS(ZDIR)
-!
-!        1.5   Horizontal interpolation the thermodynamic fields
-!              -------------------------------------------------
-!
-CALL NORMAL_INTERPOL(XTHT,ZRV,XPABST,                    &
-     XDIRCOSXW, XDIRCOSYW, XDIRCOSZW,                    &
-     XCOSSLOPE,XSINSLOPE,                                &
-     XDXX,XDYY,XDZZ,                                     &
-     ZTHA,ZRVA,ZEXNA                                     )
-!
-DEALLOCATE(ZRV)
-!
-!
-!        1.6    Pressure and Exner function
-!               ---------------------------
-!
-!
-ZPA(:,:) = XP00 * ZEXNA(:,:) **(XCPD/XRD)
-!
-ZEXNS(:,:) = 0.5 * ( (XPABST(:,:,IKB-1)/XP00)**(XRD/XCPD)  &
-                    +(XPABST(:,:,IKB  )/XP00)**(XRD/XCPD)  &
-                   )
-ZPS(:,:) = XP00 * ZEXNS(:,:) **(XCPD/XRD)
-!
-!        1.7    humidity in kg/m3 from the mixing ratio
-!               ---------------------------------------
-!
-!
-ZQA(:,:) = ZRVA(:,:) * XRHODREF(:,:,IKB)
-!
-!
-!        1.8    Temperature from the potential temperature
-!               ------------------------------------------
-!
-!
-ZTA(:,:) = ZTHA(:,:) * ZEXNA(:,:)
-!
-!
-!        1.9    Air density
-!               -----------
-!
-ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ &
-                                         (1. + ZRVA(:,:))))
-!
-!
-!        1.10   Precipitations
-!               --------------
-!
-ZRAIN=0.
-ZSNOW=0.
-IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN
-  IF (( CCLOUD(1:3) == 'ICE'                                          .AND. LSEDIC) .OR. &
-      ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC)  .OR. &
-      ( CCLOUD=='LIMA'                                                .AND. MSEDC))   THEN
-    ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW
-  ELSE
-    ZRAIN = ZRAIN + XINPRR * XRHOLW
-  END IF
-END IF
-IF (CDCONV == 'KAFR')  THEN
-  ZRAIN = ZRAIN + (XPRCONV - XPRSCONV)  * XRHOLW
-  ZSNOW = ZSNOW + XPRSCONV * XRHOLW
-END IF
-IF( NRR    >= 5    .AND. SIZE(XINPRS)>0 ) ZSNOW = ZSNOW + XINPRS * XRHOLW
-IF( NRR    >= 6    .AND. SIZE(XINPRG)>0 ) ZSNOW = ZSNOW + XINPRG * XRHOLW
-IF( NRR    >= 7    .AND. SIZE(XINPRH)>0 ) ZSNOW = ZSNOW + XINPRH * XRHOLW
-!
-!
-!        1.11   Solar time
-!               ----------
-!
-IF (.NOT. LCARTESIAN) THEN
-  ZTSUN(:,:) = MOD(TDTCUR%xtime -XTSIDER*3600. +XLON(:,:)*240., XDAY)
-ELSE
-  ZTSUN(:,:) = MOD(TDTCUR%xtime -XTSIDER*3600. +XLON0    *240., XDAY)
-END IF
-!
-!        1.12   Forcing level
-!               -------------
-!
-ZZREF(:,:) = 0.5*( XZZ(:,:,IKB+1)-XZZ(:,:,IKB) )*XDIRCOSZW(:,:)
-!
-!
-!        1.13   CO2 concentration (kg/m3)
-!               -----------------
-!
-ZCO2(:,:) = XCCO2 * XRHODREF(:,:,IKB)
-!
-!
-!
-!        1.14   Blowing snow scheme (optional)
-!               -----------------
-!
-ZBLOWSNOW_2D=0.
-
-IF(LBLOWSNOW) THEN
-    KSV_SURF = NSV+NBLOWSNOW_2D ! When blowing snow scheme is used
-                  ! NBLOWSN0W_2D variables are sent to SURFEX through ZP_SV.
-                  ! They refer to the 2D fields advected by MNH including:
-                  !             - total number concentration in Canopy
-                  !             - total mass concentration in Canopy
-                  !             - equivalent concentration in the saltation layer
-    ! Initialize array of scalar to be sent to SURFEX including 2D blowing snow fields
-    ALLOCATE(YSV_SURF(KSV_SURF))
-    YSV_SURF(1:NSV)          = CSV(:)
-    YSV_SURF(NSV+1:KSV_SURF) = YPBLOWSNOW_2D(:)
-
-
-    DO JSV=1,NBLOWSNOW_2D 
-       ZBLOWSNOW_2D(:,:,JSV) = XRSNWCANOS(:,:,JSV)*XTSTEP/XRHODJ(:,:,IKB)
-    END DO
-
-ELSE
-    KSV_SURF = NSV
-    ALLOCATE(YSV_SURF(KSV_SURF))
-    YSV_SURF(:)     = CSV(:)
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.     Call to surface monitor with 2D variables
-!               -----------------------------------------
-!
-!
-! initial values:
-!
-IDIM1       = IIE-IIB+1
-IDIM2       = IJE-IJB+1
-IDIM1D      = IDIM1*IDIM2
-!
-!
-! Transform 2D input fields into 1D:
-!
-CALL RESHAPE_SURF(IDIM1D)
-!
-! call to have the cumulated time since beginning of simulation
-!
-CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC)
-
-#ifdef CPLOASIS
-IF (LOASIS) THEN
-  IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN
-    IF ( NINT(ZTIMEC-(XSEGLEN-DYN_MODEL(1)%XTSTEP)) .LT. 0 ) THEN
-      WRITE(ILUOUT,*) '----------------------------'
-      WRITE(ILUOUT,*) ' Reception des champs avec OASIS'
-      WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC)
-      CALL MNH_OASIS_RECV(CPROGRAM,IDIM1D,SIZE(XSW_BANDS),ZTIMEC+XTSTEP,XTSTEP,         &
-                        ZP_ZENITH,XSW_BANDS                                         ,         &
-                        ZP_TSRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF)
-      WRITE(ILUOUT,*) '----------------------------'
-    END IF
-  END IF
-END IF
-#endif
-!
-! Call to surface schemes
-!                       
-CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC,                                            &
-               XTSTEP, TDTCUR%nyear, TDTCUR%nmonth, TDTCUR%nday, TDTCUR%xtime,                      &
-               IDIM1D,KSV_SURF,SIZE(XSW_BANDS),                                                     &
-               ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM,                                               &
-               ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, YSV_SURF, &
-               ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA,              &
-               ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV,                                 &
-               ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF,        &
-               ZP_PEW_A_COEF, ZP_PEW_B_COEF,                                                        &
-               ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,ZP_ZWS,                   &
-               'OK'                                                                                 )
-!
-#ifdef CPLOASIS
-IF (LOASIS) THEN
-  IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN
-    IF (NINT(ZTIMEC-(XSEGLEN-DYN_MODEL(1)%XTSTEP)) .LT. 0) THEN
-      WRITE(ILUOUT,*) '----------------------------'
-      WRITE(ILUOUT,*) ' Envoi des champs avec OASIS'
-      WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC)
-      CALL MNH_OASIS_SEND(CPROGRAM,IDIM1D,ZTIMEC+XTSTEP,XTSTEP)
-      WRITE(ILUOUT,*) '----------------------------'
-    END IF
-  END IF
-END IF
-#endif
-!
-IF (CPROGRAM=='DIAG  ' .OR. LDIAG_IN_RUN) THEN
-  CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH')
-  CALL  MNHGET_SURF_PARAM_n( PRN = ZP_RN,         PH = ZP_H,           PLE = ZP_LE,   PLEI = ZP_LEI,   &
-                             PGFLUX = ZP_GFLUX,   PT2M = ZP_T2M,       PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, &
-                             PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M                                  )
-END IF
-!
-! Transform 1D output fields into 2D:
-!
-CALL UNSHAPE_SURF(IDIM1,IDIM2)
-#ifdef MNH_FOREFIRE
-!------------------------!
-! COUPLING WITH FOREFIRE !
-!------------------------!
-	
-IF ( LFOREFIRE ) THEN
-	CALL FOREFIRE_DUMP_FIELDS_n(XUT, XVT, XWT, XSVT&
-	           , XTHT, XRT(:,:,:,1), XPABST, XTKET&
-	           , IDIM1+2, IDIM2+2, NKMAX+2)
-END IF
-
-IF ( FFCOUPLING ) THEN
-
-	CALL SEND_GROUND_WIND_n(XUT, XVT, IKB, IINFO_ll)
-	
-	CALL FOREFIRE_RECEIVE_PARAL_n()
-   
-   CALL COUPLING_FOREFIRE_n(XTSTEP, ZSFTH, ZSFTQ, ZSFTS)
-	
-	CALL FOREFIRE_SEND_PARAL_n(IINFO_ll)
-   
-END IF
-
-FF_TIME = FF_TIME + XTSTEP
-#endif
-!
-! Friction of components along slope axes (U: largest local slope axis, V: zero slope axis)
-!
-! 
-PSFU(:,:) = 0.
-PSFV(:,:) = 0.
-!
-WHERE (ZSFU(:,:)/=XUNDEF .AND. ZWIND(:,:)>0.)
-  PSFU(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZUA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB)
-  PSFV(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZVA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB)
-END WHERE
-!
-
-!*       2.1    Blaze Fire Model
-!               ----------------
-!
-IF (LBLAZE) THEN
-  ! get start time
-  CALL SECOND_MNH2( ZFIRETIME1 )
-
-  !*       2.1.1  Local variables allocation
-  !               --------------------------
-  !
-
-  ! Parallel fuel
-  NULLIFY(TZFIELDFIRE_ll)
-  IF (KTCOUNT <= 1) THEN
-    ! fuelmap
-    SELECT CASE (CPROPAG_MODEL)
-    CASE('SANTONI2011')
-      !
-      ALLOCATE( ZFIREFUELMAP(SIZE(XLSPHI,1), SIZE(XLSPHI,2), SIZE(XLSPHI,3), 22) );
-      ! Parallel fuel
-      CALL ADD4DFIELD_ll( TZFIELDFIRE_ll, ZFIREFUELMAP(:,:,:,1::22), 'MODEL_n::ZFIREFUELMAP' )
-      ! Default value
-      ZFIREFUELMAP(:,:,:,:) = 0.
-    END SELECT
-
-    !*       2.1.2  Read fuel map file
-    !               ------------------
-    !
-    ! Fuel map file name
-    YFUELMAPFILE = 'FuelMap'
-    !
-    CALL FIRE_READFUEL( TPFILE, ZFIREFUELMAP, XFMIGNITION, XFMWALKIG )
-
-    !*       2.1.3  Ignition LS function with ignition map
-    !               --------------------------------------
-    !
-    SELECT CASE (CFIRE_CPL_MODE)
-    CASE('2WAYCPL', 'ATM2FIR')
-      ! force ignition
-      WHERE (XFMIGNITION <= TDTCUR%XTIME ) XLSPHI = 1.
-      ! walking ignition
-      CALL FIRE_LS_RECONSTRUCTION_FROM_BMAP( XLSPHI, XFMWALKIG, 0.)
-      !
-      !*       2.1.4  Update BMAP
-      !               -----------
-      !
-      WHERE (XLSPHI >= .5 .AND. XBMAP < 0) XBMAP = TDTCUR%XTIME
-      !
-    CASE('FIR2ATM')
-      CALL FIRE_READBMAP(TPFILE,XBMAP)
-      
-    END SELECT
-    !
-    !*       2.1.5  Compute R0, A, Wf0, R00
-    !               -----------------------
-    !
-    SELECT CASE (CPROPAG_MODEL)
-    CASE('SANTONI2011')
-      CALL FIRE_NOWINDROS( ZFIREFUELMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMFUELTYPE, XFIRETAU, XFLUXPARAMH, &
-                           XFLUXPARAMW, XFMASE, XFMAWC )
-    END SELECT
-    !
-    !*       2.1.6  Compute orographic gradient
-    !               ---------------------------
-    CALL FIRE_GRAD_OROGRAPHY( XZS, XFMGRADOROX, XFMGRADOROY )
-    !
-    !*       2.1.7  Test halo size
-    !               --------------
-    IF (NHALO < 2 .AND. NFIRE_WENO_ORDER == 3) THEN
-      WRITE(ILUOUT,'(A/A)') 'ERROR BLAZE-FIRE : WENO3 fire gradient calculation needs NHALO >= 2'
-      !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','GROUND_PARAM_n','')
-    ELSEIF (NHALO < 3 .AND. NFIRE_WENO_ORDER == 5) THEN
-      WRITE(ILUOUT,'(A/A)') 'ERROR : WENO5 fire gradient calculation needs NHALO >= 3'
-      !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','GROUND_PARAM_n','')
-    END IF
-    !
-  END IF
-  !
-  !*       2.1.6  Compute grad of level set function phi
-  !               --------------------------------------
-  !
-  SELECT CASE (CFIRE_CPL_MODE)
-  CASE('2WAYCPL', 'ATM2FIR')
-    ! get time 1
-    CALL SECOND_MNH2( ZGRADTIME1 )
-    CALL FIRE_GRADPHI( XLSPHI, XGRADLSPHIX, XGRADLSPHIY )
-
-    ! get time 2
-    CALL SECOND_MNH2( ZGRADTIME2 )
-    XGRADPERF = XGRADPERF + ZGRADTIME2 - ZGRADTIME1
-    !
-    !*       2.1.7  Get horizontal wind speed projected on LS gradient direction
-    !               ------------------------------------------------------------
-    !
-    CALL FIRE_GETWIND( XUT, XVT, XWT, XGRADLSPHIX, XGRADLSPHIY, XFIREWIND, KTCOUNT, XTSTEP, XFMGRADOROX, XFMGRADOROY )
-    !
-    !*       2.1.8  Compute ROS XFIRERW with wind
-    !               -----------------------------
-    !
-    !
-    SELECT CASE (CPROPAG_MODEL)
-    CASE('SANTONI2011')
-      CALL FIRE_RATEOFSPREAD( XFMFUELTYPE, XFMR0, XFMRFA, XFMWF0, XFMR00, XFIREWIND, XGRADLSPHIX, XGRADLSPHIY, &
-                              XFMGRADOROX, XFMGRADOROY, XFIRERW )
-    END SELECT
-    CALL SECOND_MNH2( ZROSWINDTIME2 )
-    XROSWINDPERF = XROSWINDPERF + ZROSWINDTIME2 - ZGRADTIME2
-    !
-    !*       2.1.8  Integrate model on atm time step to propagate
-    !               ---------------------------------------------
-    !
-    SELECT CASE (CPROPAG_MODEL)
-    CASE('SANTONI2011')
-      CALL FIRE_PROPAGATE( XLSPHI, XBMAP, XFMIGNITION, XFMWALKIG, XGRADLSPHIX, XGRADLSPHIY, XTSTEP, XFIRERW )
-    END SELECT
-    CALL SECOND_MNH2( ZPROPAGTIME2 )
-    XPROPAGPERF = XPROPAGPERF + ZPROPAGTIME2 - ZROSWINDTIME2
-    !
-  CASE('FIR2ATM')
-    !
-    CALL SECOND_MNH2( ZPROPAGTIME1 )
-    CALL FIRE_LS_RECONSTRUCTION_FROM_BMAP( XLSPHI, XBMAP, XTSTEP )
-    CALL SECOND_MNH2( ZPROPAGTIME2 )
-    XPROPAGPERF = XPROPAGPERF + ZPROPAGTIME2 - ZPROPAGTIME1
-    XGRADPERF(:) = 0.
-    !
-  END SELECT
-  !
-  !*       2.1.8  Compute fluxes
-  !               --------------
-  !
-  SELECT CASE (CFIRE_CPL_MODE)
-  CASE('2WAYCPL','FIR2ATM')
-    CALL SECOND_MNH2( ZFLUXTIME1 )
-    ! 2 way coupling
-    CALL FIRE_HEATFLUXES( XLSPHI, XBMAP, XFIRETAU, XTSTEP, XFLUXPARAMH, XFLUXPARAMW, XFMFLUXHDH, XFMFLUXHDW, XFMASE, XFMAWC )
-    ! vertical distribution of fire heat fluxes
-    CALL FIRE_VERTICALFLUXDISTRIB( XFMFLUXHDH, XFMFLUXHDW, XRTHS, XRRS, ZSFTS, XEXNREF, XRHODJ, XRT, XRHODREF )
-    !
-    CALL SECOND_MNH2( ZFLUXTIME2 )
-    XFLUXPERF = XFLUXPERF + ZFLUXTIME2 - ZFLUXTIME1
-  CASE DEFAULT
-    XFLUXPERF(:) = 0.
-  END SELECT
-  ! get end time
-  CALL SECOND_MNH2( ZFIRETIME2 )
-  ! add to Blaze time
-  XFIREPERF = XFIREPERF + ZFIRETIME2 - ZFIRETIME1
-END IF
-!* conversion from H (W/m2) to w'Theta'
-!
-PSFTH(:,:) = ZSFTH(:,:) /  XCPD / XRHODREF(:,:,IKB)
-!
-!
-!* conversion from water flux (kg/m2/s) to w'rv'
-!
-PSFRV(:,:) = ZSFTQ(:,:) / XRHODREF(:,:,IKB)
-!
-!
-!* conversion from scalar flux (kg/m2/s) to w'rsv'
-!
-IF(NSV .GT. 0) THEN
-   DO JSV=1,NSV
-     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) / XRHODREF(:,:,IKB)
-   END DO
-END IF
-!
-!* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1)
-!
-IF (LUSECHEM) THEN
-   DO JSV=NSV_CHEMBEG,NSV_CHEMEND
-      PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB))
-      IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG  ')) XCHFLX(:,:,JSV-NSV_CHEMBEG+1) = PSFSV(:,:,JSV)    
-   END DO
-ELSE
-  PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0.
-END IF
-!
-!* conversion from dust flux (kg/m2/s) to (ppp.m.s-1)
-!
-IF (LDUST) THEN
-  DO JSV=NSV_DSTBEG,NSV_DSTEND
-     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_DUST * XRHODREF(:,:,IKB))
-  END DO
-ELSE
-  PSFSV(:,:,NSV_DSTBEG:NSV_DSTEND) = 0.
-END IF
-!
-!* conversion from sea salt flux (kg/m2/s) to (ppp.m.s-1)
-!
-IF (LSALT) THEN
-  DO JSV=NSV_SLTBEG,NSV_SLTEND
-     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_SALT * XRHODREF(:,:,IKB))
-  END DO
-ELSE
-  PSFSV(:,:,NSV_SLTBEG:NSV_SLTEND) = 0.
-END IF
-!
-!* conversion from aerosol flux (molec/m2/s) to (ppp.m.s-1)
-!
-IF (LORILAM) THEN
-  DO JSV=NSV_AERBEG,NSV_AEREND
-    PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB))
-  END DO
-ELSE
-  PSFSV(:,:,NSV_AERBEG:NSV_AEREND) = 0.
-END IF
-!
-!* conversion from blowing snow flux (kg/m2/s) to [kg(snow)/kg(dry air).m.s-1]
-!
-IF (LBLOWSNOW) THEN
-  DO JSV=NSV_SNWBEG,NSV_SNWEND
-     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV)/ (ZRHOA(:,:))
-  END DO
-  !* Update tendency for blowing snow 2D fields
-  DO JSV=1,(NBLOWSNOW_2D)
-     XRSNWCANOS(:,:,JSV) = ZBLOWSNOW_2D(:,:,JSV)*XRHODJ(:,:,IKB)/(XTSTEP*ZRHOA(:,:))
-  END DO
-
-ELSE
-  PSFSV(:,:,NSV_SNWBEG:NSV_SNWEND) = 0.
-END IF
-!
-!* conversion from CO2 flux (kg/m2/s) to w'CO2'
-!
-PSFCO2(:,:) = ZSFCO2(:,:) / XRHODREF(:,:,IKB)
-!
-!
-!*  Diagnostics
-!   -----------
-!
-!
-IF (LDIAG_IN_RUN) THEN
-  !
-  XCURRENT_SFCO2(:,:) = ZSFCO2(:,:)
-  XCURRENT_DSTAOD(:,:)=0.0
-  XCURRENT_SLTAOD(:,:)=0.0
-  IF (CRAD/='NONE') THEN
-  XCURRENT_LWD  (:,:) = XFLALWD(:,:)
-  XCURRENT_SWD  (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3)
-  XCURRENT_LWU  (:,:) = XLWU(:,:,IKB) 
-  XCURRENT_SWU  (:,:) = XSWU(:,:,IKB) 
-  XCURRENT_SWDIR(:,:) = SUM(XDIRSRFSWD,DIM=3)
-  XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) 
-  DO JK=IKB,IKE
-    IKRAD = JK - 1 
-    DO JJ=IJB,IJE
-       DO JI=IIB,IIE
-         XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3)
-         XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2)
-       ENDDO
-    ENDDO
-  ENDDO
-  END IF
-!
-  NULLIFY(TZFIELDSURF_ll)
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN,     'GROUND_PARAM_n::XCURRENT_RN'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H,      'GROUND_PARAM_n::XCURRENT_H'      )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE,     'GROUND_PARAM_n::XCURRENT_LE'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX,  'GROUND_PARAM_n::XCURRENT_GFLUX'  )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD,    'GROUND_PARAM_n::XCURRENT_SWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU,    'GROUND_PARAM_n::XCURRENT_SWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD,    'GROUND_PARAM_n::XCURRENT_LWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU,    'GROUND_PARAM_n::XCURRENT_LWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M,    'GROUND_PARAM_n::XCURRENT_T2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M,    'GROUND_PARAM_n::XCURRENT_Q2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M,   'GROUND_PARAM_n::XCURRENT_HU2M'   )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS,    'GROUND_PARAM_n::XCURRENT_ZWS'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,  'GROUND_PARAM_n::XCURRENT_SFCO2'  )
-
-  CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
-  CALL CLEANLIST_ll(TZFIELDSURF_ll)
-END IF
-!
-IF (LBLAZE) THEN
-  IF (KTCOUNT <= 1) THEN
-      DEALLOCATE(ZFIREFUELMAP)
-  END IF
-  CALL CLEANLIST_ll(TZFIELDFIRE_ll)
-END IF
-!==================================================================================
-!
-CONTAINS
-!
-!==================================================================================
-!
-SUBROUTINE RESHAPE_SURF(KDIM1D)
-!
-INTEGER, INTENT(IN)   :: KDIM1D
-INTEGER, DIMENSION(1) :: ISHAPE_1
-!
-ISHAPE_1 = (/KDIM1D/)
-!
-ALLOCATE(ZP_TSUN    (KDIM1D))
-ALLOCATE(ZP_ZENITH  (KDIM1D))
-ALLOCATE(ZP_AZIM    (KDIM1D))
-ALLOCATE(ZP_ZREF    (KDIM1D))
-ALLOCATE(ZP_ZS      (KDIM1D))
-ALLOCATE(ZP_U       (KDIM1D))
-ALLOCATE(ZP_V       (KDIM1D))
-ALLOCATE(ZP_QA      (KDIM1D))
-ALLOCATE(ZP_TA      (KDIM1D))
-ALLOCATE(ZP_RHOA    (KDIM1D))
-ALLOCATE(ZP_SV      (KDIM1D,KSV_SURF))
-ALLOCATE(ZP_CO2     (KDIM1D))
-ALLOCATE(ZP_RAIN    (KDIM1D))
-ALLOCATE(ZP_SNOW    (KDIM1D))
-ALLOCATE(ZP_LW      (KDIM1D))
-ALLOCATE(ZP_DIR_SW  (KDIM1D,SIZE(XDIRSRFSWD,3)))
-ALLOCATE(ZP_SCA_SW  (KDIM1D,SIZE(XSCAFLASWD,3)))
-ALLOCATE(ZP_PS      (KDIM1D))
-ALLOCATE(ZP_PA      (KDIM1D))
-ALLOCATE(ZP_ZWS     (KDIM1D))
-
-ALLOCATE(ZP_SFTQ    (KDIM1D))
-ALLOCATE(ZP_SFTH    (KDIM1D))
-ALLOCATE(ZP_SFU     (KDIM1D))
-ALLOCATE(ZP_SFV     (KDIM1D))
-ALLOCATE(ZP_SFTS    (KDIM1D,KSV_SURF))
-ALLOCATE(ZP_SFCO2   (KDIM1D))
-ALLOCATE(ZP_TSRAD   (KDIM1D))
-ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3)))
-ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3)))
-ALLOCATE(ZP_EMIS    (KDIM1D))
-ALLOCATE(ZP_TSURF   (KDIM1D))
-ALLOCATE(ZP_Z0      (KDIM1D))
-ALLOCATE(ZP_Z0H     (KDIM1D))
-ALLOCATE(ZP_QSURF   (KDIM1D))
-ALLOCATE(ZP_RN      (KDIM1D))
-ALLOCATE(ZP_H       (KDIM1D))
-ALLOCATE(ZP_LE      (KDIM1D))
-ALLOCATE(ZP_LEI     (KDIM1D))
-ALLOCATE(ZP_GFLUX   (KDIM1D))
-ALLOCATE(ZP_T2M     (KDIM1D))
-ALLOCATE(ZP_Q2M     (KDIM1D))
-ALLOCATE(ZP_HU2M    (KDIM1D))
-ALLOCATE(ZP_ZON10M  (KDIM1D))
-ALLOCATE(ZP_MER10M  (KDIM1D))
-
-!* explicit coupling only
-ALLOCATE(ZP_PEW_A_COEF  (KDIM1D))
-ALLOCATE(ZP_PEW_B_COEF  (KDIM1D))
-ALLOCATE(ZP_PET_A_COEF  (KDIM1D))
-ALLOCATE(ZP_PEQ_A_COEF  (KDIM1D))
-ALLOCATE(ZP_PET_B_COEF  (KDIM1D))
-ALLOCATE(ZP_PEQ_B_COEF  (KDIM1D))
-
-ZP_TSUN(:)        = RESHAPE(ZTSUN(IIB:IIE,IJB:IJE),        ISHAPE_1)
-ZP_TA(:)          = RESHAPE(ZTA(IIB:IIE,IJB:IJE),          ISHAPE_1)
-ZP_QA(:)          = RESHAPE(ZQA(IIB:IIE,IJB:IJE),          ISHAPE_1)
-ZP_RHOA(:)        = RESHAPE(ZRHOA(IIB:IIE,IJB:IJE),        ISHAPE_1)
-ZP_U(:)           = RESHAPE(ZU(IIB:IIE,IJB:IJE),           ISHAPE_1)
-ZP_V(:)           = RESHAPE(ZV(IIB:IIE,IJB:IJE),           ISHAPE_1)
-ZP_PS(:)          = RESHAPE(ZPS(IIB:IIE,IJB:IJE),          ISHAPE_1)
-ZP_PA(:)          = RESHAPE(ZPA(IIB:IIE,IJB:IJE),          ISHAPE_1)
-ZP_ZS(:)          = RESHAPE(XZS(IIB:IIE,IJB:IJE),          ISHAPE_1)
-ZP_CO2(:)         = RESHAPE(ZCO2(IIB:IIE,IJB:IJE),         ISHAPE_1)
-ZP_SNOW(:)        = RESHAPE(ZSNOW(IIB:IIE,IJB:IJE),        ISHAPE_1)
-ZP_RAIN(:)        = RESHAPE(ZRAIN(IIB:IIE,IJB:IJE),        ISHAPE_1)
-ZP_ZREF(:)        = RESHAPE(ZZREF(IIB:IIE,IJB:IJE),        ISHAPE_1)
-ZP_ZWS(:)         = RESHAPE(XZWS(IIB:IIE,IJB:IJE),         ISHAPE_1)
-
-DO JLAYER=1,NSV
-  ZP_SV(:,JLAYER) = RESHAPE(XSVT(IIB:IIE,IJB:IJE,IKB,JLAYER), ISHAPE_1)
-END DO
-!
-IF(LBLOWSNOW) THEN
-  DO JLAYER=1,NBLOWSNOW_2D
-      ZP_SV(:,NSV+JLAYER) = RESHAPE(ZBLOWSNOW_2D(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1)
-  END DO
-END IF
-!
-!chemical conversion : from part/part to molec./m3
-DO JLAYER=NSV_CHEMBEG,NSV_CHEMEND
-  ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD
-END DO
-DO JLAYER=NSV_AERBEG,NSV_AEREND
-  ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD
-END DO
-!dust  conversion : from part/part to kg/m3
-DO JLAYER=NSV_DSTBEG,NSV_DSTEND
- ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) *  XMOLARWEIGHT_DUST* ZP_RHOA(:) / XMD
-END DO
-!sea salt  conversion : from part/part to kg/m3
-DO JLAYER=NSV_SLTBEG,NSV_SLTEND
- ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) *  XMOLARWEIGHT_SALT* ZP_RHOA(:) / XMD
-END DO
-!
-!blowing snow conversion : from kg(snow)/kg(dry air) to kg(snow)/m3
-DO JLAYER=NSV_SNWBEG,NSV_SNWEND
- ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * ZP_RHOA(:)
-END DO
-
-IF(LBLOWSNOW) THEN ! Convert 2D blowing snow fields
-                    ! from kg(snow)/kg(dry air) to kg(snow)/m3
-  DO JLAYER=(NSV+1),KSV_SURF
-     ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * ZP_RHOA(:)
-  END DO
-END IF
-!
-ZP_ZENITH(:)      = RESHAPE(XZENITH(IIB:IIE,IJB:IJE),      ISHAPE_1)
-ZP_AZIM  (:)      = RESHAPE(XAZIM  (IIB:IIE,IJB:IJE),      ISHAPE_1)
-ZP_LW(:)          = RESHAPE(XFLALWD(IIB:IIE,IJB:IJE),      ISHAPE_1)
-DO JLAYER=1,SIZE(XDIRSRFSWD,3)
-  ZP_DIR_SW(:,JLAYER)  = RESHAPE(XDIRSRFSWD(IIB:IIE,IJB:IJE,JLAYER),  ISHAPE_1)
-  ZP_SCA_SW(:,JLAYER)  = RESHAPE(XSCAFLASWD(IIB:IIE,IJB:IJE,JLAYER),  ISHAPE_1)
-END DO
-!
-ZP_PEW_A_COEF = 0.
-ZP_PEW_B_COEF = 0.
-ZP_PET_A_COEF = 0.
-ZP_PEQ_A_COEF = 0.
-ZP_PET_B_COEF = 0.
-ZP_PEQ_B_COEF = 0.
-!
-END SUBROUTINE RESHAPE_SURF
-!================================================i=================================
-SUBROUTINE UNSHAPE_SURF(KDIM1,KDIM2)
-!
-INTEGER, INTENT(IN)   :: KDIM1, KDIM2
-INTEGER, DIMENSION(2) :: ISHAPE_2
-!
-ISHAPE_2 = (/KDIM1,KDIM2/)
-!
-! Arguments in call to surface:
-!
-ZSFTH = XUNDEF
-ZSFTQ = XUNDEF
-IF (NSV>0) ZSFTS = XUNDEF
-ZSFCO2 = XUNDEF
-ZSFU = XUNDEF
-ZSFV = XUNDEF
-!
-ZSFTH   (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFTH(:),       ISHAPE_2)
-ZSFTQ   (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFTQ(:),       ISHAPE_2)
-DO JLAYER=1,SIZE(PSFSV,3)
-  ZSFTS   (IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SFTS(:,JLAYER),  ISHAPE_2)
-END DO
-ZSFCO2  (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFCO2(:),    ISHAPE_2)
-ZSFU    (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFU(:),      ISHAPE_2)
-ZSFV    (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFV(:),      ISHAPE_2)
-DO JLAYER=1,SIZE(PEMIS,3)
-    PEMIS   (IIB:IIE,IJB:IJE,JLAYER)     = RESHAPE(ZP_EMIS(:),     ISHAPE_2)
-END DO
-PTSRAD  (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_TSRAD(:),    ISHAPE_2)
-IF(LBLOWSNOW) THEN
-  DO JLAYER=1,NBLOWSNOW_2D
-    ZBLOWSNOW_2D(IIB:IIE,IJB:IJE,JLAYER)  =  RESHAPE(ZP_SFTS(:,NSV+JLAYER),  ISHAPE_2)
-  END DO
-END IF
-!
-IF (LDIAG_IN_RUN) THEN
-  XCURRENT_RN      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_RN(:),     ISHAPE_2)
-  XCURRENT_H       (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_H (:),     ISHAPE_2)
-  XCURRENT_LE      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_LE(:),     ISHAPE_2)
-  XCURRENT_LEI     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_LEI(:),    ISHAPE_2)
-  XCURRENT_GFLUX   (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_GFLUX(:),  ISHAPE_2)
-  XCURRENT_T2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_T2M(:),    ISHAPE_2)
-  XCURRENT_Q2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_Q2M(:),    ISHAPE_2)
-  XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
-  XCURRENT_ZON10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZON10M(:), ISHAPE_2)
-  XCURRENT_MER10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_MER10M(:), ISHAPE_2)
-  XCURRENT_ZWS  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:), ISHAPE_2)
-ENDIF
-!
-DO JLAYER=1,SIZE(PDIR_ALB,3)
-  PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2)
-  PSCA_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SCA_ALB(:,JLAYER), ISHAPE_2)
-END DO
-!
-DEALLOCATE(ZP_TSUN    )
-DEALLOCATE(ZP_ZENITH  )
-DEALLOCATE(ZP_AZIM    )
-DEALLOCATE(ZP_ZREF    )
-DEALLOCATE(ZP_ZS      )
-DEALLOCATE(ZP_U       )
-DEALLOCATE(ZP_V       )
-DEALLOCATE(ZP_QA      )
-DEALLOCATE(ZP_TA      )
-DEALLOCATE(ZP_RHOA    )
-DEALLOCATE(ZP_SV      )
-DEALLOCATE(ZP_CO2     )
-DEALLOCATE(ZP_RAIN    )
-DEALLOCATE(ZP_SNOW    )
-DEALLOCATE(ZP_LW      )
-DEALLOCATE(ZP_DIR_SW  )
-DEALLOCATE(ZP_SCA_SW  )
-DEALLOCATE(ZP_PS      )
-DEALLOCATE(ZP_PA      )
-DEALLOCATE(ZP_ZWS     )
-
-DEALLOCATE(ZP_SFTQ    )
-DEALLOCATE(ZP_SFTH    )
-DEALLOCATE(ZP_SFTS    )
-DEALLOCATE(ZP_SFCO2   )
-DEALLOCATE(ZP_SFU     )
-DEALLOCATE(ZP_SFV     )
-DEALLOCATE(ZP_TSRAD   )
-DEALLOCATE(ZP_DIR_ALB )
-DEALLOCATE(ZP_SCA_ALB )
-DEALLOCATE(ZP_EMIS    )
-DEALLOCATE(ZP_RN      )
-DEALLOCATE(ZP_H       )
-DEALLOCATE(ZP_LE      )
-DEALLOCATE(ZP_LEI     )
-DEALLOCATE(ZP_GFLUX   )
-DEALLOCATE(ZP_T2M     )
-DEALLOCATE(ZP_Q2M     )
-DEALLOCATE(ZP_HU2M     )
-DEALLOCATE(ZP_ZON10M  )
-DEALLOCATE(ZP_MER10M  )
-
-DEALLOCATE(ZP_PEW_A_COEF  )
-DEALLOCATE(ZP_PEW_B_COEF  )
-DEALLOCATE(ZP_PET_A_COEF  )
-DEALLOCATE(ZP_PEQ_A_COEF  )
-DEALLOCATE(ZP_PET_B_COEF  )
-DEALLOCATE(ZP_PEQ_B_COEF  )
-!
-END SUBROUTINE UNSHAPE_SURF
-!==================================================================================
-!
-END SUBROUTINE GROUND_PARAM_n
diff --git a/src/mesonh/ext/ibm_affectv.f90 b/src/mesonh/ext/ibm_affectv.f90
deleted file mode 100644
index 74df9a13dcc052c86357bf674ab178fff8dcfae7..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ibm_affectv.f90
+++ /dev/null
@@ -1,402 +0,0 @@
-!MNH_LIC Copyright 2019-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_IBM_AFFECTV  
-  !    ####################### 
-  !
-  INTERFACE
-     !
-     SUBROUTINE IBM_AFFECTV(PVAR,PVAR2,PVAR3,HVAR,KIBM_LAYER,HIBM_MODE_INTE3,&
-          HIBM_FORC_BOUNR,PRADIUS,PPOWERS,&
-          HIBM_MODE_INT1N,HIBM_TYPE_BOUNN,HIBM_MODE_BOUNN,HIBM_FORC_BOUNN,PIBM_FORC_BOUNN,&
-          HIBM_MODE_INT1T,HIBM_TYPE_BOUNT,HIBM_MODE_BOUNT,HIBM_FORC_BOUNT,PIBM_FORC_BOUNT,&
-          HIBM_MODE_INT1C,HIBM_TYPE_BOUNC,HIBM_MODE_BOUNC,HIBM_FORC_BOUNC,PIBM_FORC_BOUNC,PXMU,PDIV)
-       !
-       REAL, DIMENSION(:,:,:)   ,INTENT(INOUT) :: PVAR
-       REAL, DIMENSION(:,:,:,:) ,INTENT(IN)    :: PVAR2,PVAR3
-       CHARACTER(LEN=1)         ,INTENT(IN)    :: HVAR
-       INTEGER                  ,INTENT(IN)    :: KIBM_LAYER
-       REAL                     ,INTENT(IN)    :: PRADIUS
-       REAL                     ,INTENT(IN)    :: PPOWERS
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNR
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INTE3
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1N
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNN
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNN 
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNN
-       REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNN
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1T
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNT
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNT
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNT
-       REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNT
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1C
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNC
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNC
-       CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNC
-       REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNC
-       REAL, DIMENSION(:,:,:)   ,INTENT(IN)    :: PXMU
-       REAL, DIMENSION(:,:,:)   ,INTENT(IN)    :: PDIV
-       !
-     END SUBROUTINE IBM_AFFECTV
-     !
-  END INTERFACE
-  !
-END MODULE MODI_IBM_AFFECTV
-!
-!     ########################################################
-SUBROUTINE IBM_AFFECTV(PVAR,PVAR2,PVAR3,HVAR,KIBM_LAYER,HIBM_MODE_INTE3,&
-     HIBM_FORC_BOUNR,PRADIUS,PPOWERS,&
-     HIBM_MODE_INT1N,HIBM_TYPE_BOUNN,HIBM_MODE_BOUNN,HIBM_FORC_BOUNN,PIBM_FORC_BOUNN,&
-     HIBM_MODE_INT1T,HIBM_TYPE_BOUNT,HIBM_MODE_BOUNT,HIBM_FORC_BOUNT,PIBM_FORC_BOUNT,&
-     HIBM_MODE_INT1C,HIBM_TYPE_BOUNC,HIBM_MODE_BOUNC,HIBM_FORC_BOUNC,PIBM_FORC_BOUNC,PXMU,PDIV)
-  !     ########################################################
-  !
-  !
-  !****  IBM_AFFECTV computes the variable PVAR on desired ghost points :
-  !                 - the V type of the ghost/image 
-  !                 - the 3D interpolation mode (HIBM_MODE_INTE3)
-  !                 - the 1D interpolation mode (HIBM_MODE_INTE1)
-  !                 - the boundary condition    (HIBM_TYPE_BOUND)  
-  !                 - the symmetry character    (HIBM_MODE_BOUND)
-  !                 - the forcing type          (HIBM_FORC_BOUND)    
-  !                 - the forcing term          (HIBM_FORC_BOUND)
-  !       Choice of forcing type is depending on 
-  !                 the normal, binormal, tangent vectors (N,C,T)
-  !                   
-  !                
-  !    PURPOSE
-  !    -------
-  !****  Ghosts (resp. Images) locations are stored in KIBM_STOR_GHOST (resp. KIBM_STOR_IMAGE).
-  !      Solutions are computed in regard of the symmetry character of the solution:
-  !                                      HIBM_MODE_BOUND = 'SYM' (Symmetrical)
-  !                                      HIBM_MODE_BOUND = 'ASY' (Anti-symmetrical)
-  !      The ghost value is depending on the variable value at the interface:
-  !                                      HIBM_TYPE_BOUND = "CST" (constant value)
-  !                                      HIBM_TYPE_BOUND = "LAW" (wall models)
-  !                                      HIBM_TYPE_BOUND = "LIN" (linear evolution, only IMAGE2 type)
-  !                                      HIBM_TYPE_BOUND = "LOG" (logarithmic evol, only IMAGE2 type)
-  !      Three 3D interpolations exists  HIBM_MODE_INTE3 = "IDW" (Inverse  Distance Weighting)
-  !                                      HIBM_MODE_INTE3 = "MDW" (Modified Distance Weighting)
-  !                                      HIBM_MODE_INTE3 = "LAG" (Trilinear Lagrange interp. )
-  !      Three 1D interpolations exists  HIBM_MODE_INTE1 = "CL0" (Lagrange Polynomials - 1 points - MIRROR)
-  !                                      HIBM_MODE_INTE1 = "CL1" (Lagrange Polynomials - 2 points - IMAGE1)
-  !                                      HIBM_MODE_INTE1 = "CL2" (Lagrange Polynomials - 3 points - IMAGE2)
-  !    METHOD
-  !    ------
-  !      - loop on ghosts
-  !      - functions storage
-  !      - computations of the location of the corners cell containing MIRROR/IMAGE1/IMAGE2
-  !      - 3D interpolation (IDW, MDW, CLI)  to obtain the MIRROR/IMAGE1/IMAGE2 values
-  !      - computation of the value at the interface 
-  !      - 1D interpolation (CLI1,CLI2,CLI3) to obtain the GHOSTS values
-  !      - Affectation
-  !
-  !    EXTERNAL
-  !    --------
-  !      SUBROUTINE ?
-  !
-  !    IMPLICIT ARGUMENTS
-  !    ------------------
-  !       MODD_?   
-  !
-  !    REFERENCE
-  !    ---------
-  !
-  !    AUTHOR
-  !    ------
-  !      Franck Auguste (CERFACS-AE)
-  !
-  !    MODIFICATIONS
-  !    -------------
-  !      Original         01/01/2019
-  !
-  !------------------------------------------------------------------------------
-  !       
-  !**** 0. DECLARATIONS
-  !     ---------------
-  ! module
-  USE MODE_POS
-  USE MODE_ll
-  USE MODE_IO
-  USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-  !
-  ! declaration
-  USE MODD_IBM_PARAM_n
-  USE MODD_FIELD_n
-  USE MODD_PARAM_n, ONLY: CTURB
-  USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZZ
-  USE MODD_VAR_ll,  ONLY: IP
-  USE MODD_LBC_n
-  USE MODD_REF_n, ONLY: XRHODJ,XRHODREF
-  !
-  ! interface
-  USE MODI_IBM_VALUECORN
-  USE MODI_IBM_LOCATCORN
-  USE MODI_IBM_3DINT
-  USE MODI_IBM_1DINT
-  USE MODI_IBM_0DINT
-  USE MODI_IBM_VALUEMAT1
-  USE MODI_IBM_VALUEMAT2
-  USE MODI_SHUMAN
-  USE MODD_DYN_n
-  USE MODD_FIELD_n
-  USE MODD_CST
-  USE MODD_CTURB
-  USE MODD_RADIATIONS_n
-  !
-  IMPLICIT NONE
-  !
-  !------------------------------------------------------------------------------
-  !
-  !       0.1  declarations of arguments
-  !
-  REAL, DIMENSION(:,:,:)   ,INTENT(INOUT) :: PVAR
-  REAL, DIMENSION(:,:,:,:) ,INTENT(IN)    :: PVAR2,PVAR3
-  CHARACTER(LEN=1)         ,INTENT(IN)    :: HVAR
-  INTEGER                  ,INTENT(IN)    :: KIBM_LAYER
-  REAL                     ,INTENT(IN)    :: PRADIUS
-  REAL                     ,INTENT(IN)    :: PPOWERS
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNR
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INTE3
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1N
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNN
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNN
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNN
-  REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNN
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1T
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNT
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNT
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNT
-  REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNT
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_INT1C
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_TYPE_BOUNC
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_MODE_BOUNC
-  CHARACTER(LEN=3)         ,INTENT(IN)    :: HIBM_FORC_BOUNC
-  REAL                     ,INTENT(IN)    :: PIBM_FORC_BOUNC
-  REAL, DIMENSION(:,:,:)   ,INTENT(IN)    :: PXMU
-  REAL, DIMENSION(:,:,:)   ,INTENT(IN)    :: PDIV
-  !
-  !------------------------------------------------------------------------------
-  !
-  !       0.2  declaration of local variables
-  !
-  INTEGER                                    :: JI,JJ,JK,JL,JM,JMM,JN,JNN,JH,JLL         ! loop index
-  INTEGER, DIMENSION(:)  , ALLOCATABLE       :: I_INDEX_CORN                             ! reference corner index 
-  INTEGER                                    :: I_GHOST_NUMB                             ! ghost number per layer
-  REAL   , DIMENSION(:,:), ALLOCATABLE       :: Z_LOCAT_CORN,Z_LOCAT_IMAG                ! corners coordinates
-  REAL   , DIMENSION(:)  , ALLOCATABLE       :: Z_TESTS_CORN                             ! interface distance dependence 
-  REAL   , DIMENSION(:)  , ALLOCATABLE       :: Z_VALUE_CORN                             ! value variables at corners
-  REAL   , DIMENSION(:,:), ALLOCATABLE       :: Z_VALUE_IMAG,Z_VALUE_TEMP,Z_VALUE_ZLKE   ! value at mirror/image1/image2 
-  REAL   , DIMENSION(:)  , ALLOCATABLE       :: Z_LOCAT_BOUN,Z_LOCAT_GHOS,Z_TEMP_ZLKE    ! location of bound and ghost
-  REAL                                       :: Z_DELTA_IMAG,ZIBM_VISC,ZIBM_DIVK
-  CHARACTER(LEN=3),DIMENSION(:), ALLOCATABLE :: Y_TYPE_BOUND,Y_FORC_BOUND,Y_MODE_BOUND,Y_MODE_INTE1
-  REAL   , DIMENSION(:)  , ALLOCATABLE       :: Z_FORC_BOUND,Z_VALUE_GHOS
-  REAL   , DIMENSION(:,:), ALLOCATABLE       :: Z_VALUE_MAT1,Z_VALUE_MAT2
-  REAL                                       :: ZIBM_HALO
-  !
-  !------------------------------------------------------------------------------
-  !
-  !       0.3  Allocation
-  !
-  ALLOCATE(I_INDEX_CORN(3))
-  ALLOCATE(Z_LOCAT_CORN(8,3))
-  ALLOCATE(Z_VALUE_CORN(8))
-  ALLOCATE(Z_TESTS_CORN(8))
-  ALLOCATE(Z_LOCAT_IMAG(3,3))
-  ALLOCATE(Z_VALUE_IMAG(4,3))
-  ALLOCATE(Z_VALUE_TEMP(4,3))
-  ALLOCATE(Z_LOCAT_BOUN(3))
-  ALLOCATE(Z_LOCAT_GHOS(3))
-  ALLOCATE(Z_VALUE_GHOS(3))
-  ALLOCATE(Y_TYPE_BOUND(3),Y_FORC_BOUND(3))
-  ALLOCATE(Y_MODE_BOUND(3),Y_MODE_INTE1(3))
-  ALLOCATE(Z_FORC_BOUND(3))
-  ALLOCATE(Z_VALUE_MAT1(3,3))
-  ALLOCATE(Z_VALUE_MAT2(3,3))
-  !
-  !------------------------------------------------------------------------------
-  !
-  !**** 1. PRELIMINARIES
-  !     ----------------
-  I_INDEX_CORN(:)    = 0
-  Z_LOCAT_CORN(:,:)  = 0.
-  Z_VALUE_CORN(:)    = 0.
-  Z_TESTS_CORN(:)    = 0.
-  Z_LOCAT_IMAG(:,:)  = 0.
-  Z_VALUE_IMAG(:,:)  = 0.
-  Z_VALUE_TEMP(:,:)  = 0.
-  Z_LOCAT_GHOS(:)    = 0.
-  Z_LOCAT_BOUN(:)    = 0.
-  Z_VALUE_GHOS(:)    = 0.
-  Z_VALUE_MAT1(:,:)  = 0.
-  Z_VALUE_MAT2(:,:)  = 0.
-  IF (HVAR=='U') JH = 1
-  IF (HVAR=='V') JH = 2
-  IF (HVAR=='W') JH = 3
-  Y_TYPE_BOUND(1) = HIBM_TYPE_BOUNN
-  Y_TYPE_BOUND(2) = HIBM_TYPE_BOUNT
-  Y_TYPE_BOUND(3) = HIBM_TYPE_BOUNC
-  Y_FORC_BOUND(1) = HIBM_FORC_BOUNN
-  Y_FORC_BOUND(2) = HIBM_FORC_BOUNT
-  Y_FORC_BOUND(3) = HIBM_FORC_BOUNC
-  Y_MODE_BOUND(1) = HIBM_MODE_BOUNN
-  Y_MODE_BOUND(2) = HIBM_MODE_BOUNT
-  Y_MODE_BOUND(3) = HIBM_MODE_BOUNC
-  Y_MODE_INTE1(1) = HIBM_MODE_INT1N
-  Y_MODE_INTE1(2) = HIBM_MODE_INT1T
-  Y_MODE_INTE1(3) = HIBM_MODE_INT1C
-  Z_FORC_BOUND(1) = PIBM_FORC_BOUNN
-  Z_FORC_BOUND(2) = PIBM_FORC_BOUNT
-  Z_FORC_BOUND(3) = PIBM_FORC_BOUNC
-  !
-  ALLOCATE(Z_VALUE_ZLKE(4,3))
-  ALLOCATE(Z_TEMP_ZLKE(3))
-  Z_VALUE_ZLKE(:,:) = 0.
-  Z_TEMP_ZLKE(:)  = 0.
-  !
-  DO JMM=1,KIBM_LAYER
-     !
-     ! searching number of ghosts 
-     JM = size(NIBM_GHOST_V,1)
-     JI = 0
-     JJ = 0
-     JK = 0
-     DO WHILE ((JI==0.and.JJ==0.and.JK==0).and.JM>0)
-        JI = NIBM_GHOST_V(JM,JMM,JH,1)
-        JJ = NIBM_GHOST_V(JM,JMM,JH,2)
-        JK = NIBM_GHOST_V(JM,JMM,JH,3)
-        IF (JI==0.and.JJ==0.and.JK==0) JM = JM - 1
-     ENDDO
-     I_GHOST_NUMB = JM
-     !
-     ! Loop on each P Ghosts 
-     IF (I_GHOST_NUMB<=0) GO TO 666
-     DO JM = 1,I_GHOST_NUMB
-        !
-        ! ghost index/ls
-        JI = NIBM_GHOST_V(JM,JMM,JH,1)
-        JJ = NIBM_GHOST_V(JM,JMM,JH,2)
-        JK = NIBM_GHOST_V(JM,JMM,JH,3)
-        IF (JI==0.or.JJ==0.or.JK==0) GO TO 777 
-        Z_LOCAT_GHOS(:) =  XIBM_GHOST_V(JM,JMM,JH,:)
-        Z_LOCAT_BOUN(:) = 2.0*XIBM_IMAGE_V(JM,JMM,JH,1,:)-1.0*XIBM_IMAGE_V(JM,JMM,JH,2,:) 
-        ZIBM_HALO = 1.
-        !
-        DO JN = 1,3
-           !
-           Z_LOCAT_IMAG(JN,:)= XIBM_IMAGE_V(JM,JMM,JH  ,JN,:)
-           Z_DELTA_IMAG      = ((XXHAT(JI+1)-XXHAT(JI))*(XYHAT(JJ+1)-XYHAT(JJ)))**0.5
-           !
-           DO JLL=1,3
-              I_INDEX_CORN(:)       = NIBM_IMAGE_V(JM,JMM,JH,JLL,JN,:)
-              IF (I_INDEX_CORN(1)==0.AND.JN==2) ZIBM_HALO=0.
-              IF (I_INDEX_CORN(2)==0.AND.JN==2) ZIBM_HALO=0.
-              Z_LOCAT_CORN(:,:)     = IBM_LOCATCORN(I_INDEX_CORN,JLL+1)
-              Z_TESTS_CORN(:)       = XIBM_TESTI_V(JM,JMM,JH,JLL,JN,:)
-              Z_VALUE_CORN(:)       = IBM_VALUECORN(PVAR2(:,:,:,JLL),I_INDEX_CORN)          
-              Z_VALUE_IMAG(JN,JLL)  = IBM_3DINT(JN,Z_VALUE_IMAG(:,JLL),Z_LOCAT_BOUN,Z_TESTS_CORN,&
-                   Z_LOCAT_CORN,Z_VALUE_CORN,Z_LOCAT_IMAG(JN,:),&
-                   HIBM_MODE_INTE3,PRADIUS,PPOWERS)
-           ENDDO
-           !
-        ENDDO
-        ZIBM_VISC = PXMU(JI,JJ,JK)
-        ZIBM_DIVK = PDIV(JI,JJ,JK)
-        !
-        ! projection step
-        Z_VALUE_MAT1(:,:) = IBM_VALUEMAT1(Z_LOCAT_IMAG(1,:),Z_LOCAT_BOUN,Z_VALUE_IMAG,HIBM_FORC_BOUNR)
-        DO JN=1,3 
-           Z_VALUE_TEMP(JN,:)= Z_VALUE_MAT1(:,1)*Z_VALUE_IMAG(JN,1) +&
-                Z_VALUE_MAT1(:,2)*Z_VALUE_IMAG(JN,2) +&
-                Z_VALUE_MAT1(:,3)*Z_VALUE_IMAG(JN,3) 
-        ENDDO
-        !
-        ! === BOUND computation ===
-        !
-        JN=4
-        DO JLL=1,3
-           Z_VALUE_TEMP(JN,JLL)  = IBM_0DINT(Z_DELTA_IMAG,Z_VALUE_TEMP(:,JLL),Y_TYPE_BOUND(JLL),Y_FORC_BOUND(JLL), & 
-                Z_FORC_BOUND(JLL),ZIBM_VISC,ZIBM_DIVK)
-        ENDDO
-        !
-        ! inverse projection step
-        Z_VALUE_MAT2(:,:) = IBM_VALUEMAT2(Z_VALUE_MAT1)
-        Z_VALUE_IMAG(JN,:)= Z_VALUE_MAT2(:,1)*Z_VALUE_TEMP(JN,1) +&
-             Z_VALUE_MAT2(:,2)*Z_VALUE_TEMP(JN,2) +&
-             Z_VALUE_MAT2(:,3)*Z_VALUE_TEMP(JN,3)
-        !
-        ! === GHOST computation ===
-        !
-        ! functions storage
-        Z_LOCAT_IMAG(1,3) = ((XIBM_GHOST_V(JM,JMM,JH,1)-Z_LOCAT_BOUN(1))**2.+&
-             (XIBM_GHOST_V(JM,JMM,JH,2)-Z_LOCAT_BOUN(2))**2.+&
-             (XIBM_GHOST_V(JM,JMM,JH,3)-Z_LOCAT_BOUN(3))**2.)**0.5
-        IF (Z_LOCAT_IMAG(1,3)>Z_DELTA_IMAG.AND.ZIBM_HALO>0.5) THEN
-           Z_LOCAT_IMAG(1,1) = ((XIBM_IMAGE_V(JM,JMM,JH,1,1)-Z_LOCAT_BOUN(1))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,1,2)-Z_LOCAT_BOUN(2))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,1,3)-Z_LOCAT_BOUN(3))**2.)**0.5
-           Z_LOCAT_IMAG(1,2) = ((XIBM_IMAGE_V(JM,JMM,JH,2,1)-Z_LOCAT_BOUN(1))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,2,2)-Z_LOCAT_BOUN(2))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,2,3)-Z_LOCAT_BOUN(3))**2.)**0.5
-        ELSE
-           Z_LOCAT_IMAG(1,1) = ((XIBM_IMAGE_V(JM,JMM,JH,3,1)-Z_LOCAT_BOUN(1))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,3,2)-Z_LOCAT_BOUN(2))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,3,3)-Z_LOCAT_BOUN(3))**2.)**0.5
-           Z_LOCAT_IMAG(1,2) = ((XIBM_IMAGE_V(JM,JMM,JH,1,1)-Z_LOCAT_BOUN(1))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,1,2)-Z_LOCAT_BOUN(2))**2.+&
-                (XIBM_IMAGE_V(JM,JMM,JH,1,3)-Z_LOCAT_BOUN(3))**2.)**0.5
-           Z_VALUE_TEMP(2,:) = Z_VALUE_TEMP(1,:)
-           Z_VALUE_TEMP(1,:) = Z_VALUE_TEMP(3,:)
-        ENDIF
-        ! 
-        DO JLL=1,3
-           Z_VALUE_GHOS(JLL) = IBM_1DINT(Z_LOCAT_IMAG(1,:),Z_VALUE_TEMP(:,JLL),Y_MODE_INTE1(JLL))
-           IF (Y_MODE_BOUND(JLL)=='SYM') Z_VALUE_GHOS(JLL) = +Z_VALUE_GHOS(JLL)
-           IF (Y_MODE_BOUND(JLL)=='ASY') Z_VALUE_GHOS(JLL) = -Z_VALUE_GHOS(JLL) + 2.*Z_VALUE_TEMP(4,JLL)
-           IF (Y_MODE_BOUND(JLL)=='CST') Z_VALUE_GHOS(JLL) = Z_VALUE_TEMP(4,JLL) 
-        ENDDO
-        !
-        PVAR(JI,JJ,JK) =  Z_VALUE_MAT2(JH,1)*Z_VALUE_GHOS(1) +&
-             Z_VALUE_MAT2(JH,2)*Z_VALUE_GHOS(2) +&
-             Z_VALUE_MAT2(JH,3)*Z_VALUE_GHOS(3)
-        !
-        IF ((JH==3).AND.(JK==2)) THEN
-           PVAR(JI,JJ,JK) = 0.
-        ENDIF
-        !
-777     CONTINUE
-        !
-     ENDDO
-  ENDDO
-  !
-666 CONTINUE
-  !
-  !**** X. DEALLOCATIONS/CLOSES
-  !     -----------------------
-  !
-  DEALLOCATE(I_INDEX_CORN)
-  DEALLOCATE(Z_LOCAT_CORN)
-  DEALLOCATE(Z_VALUE_CORN)
-  DEALLOCATE(Z_LOCAT_IMAG)
-  DEALLOCATE(Z_VALUE_IMAG)
-  DEALLOCATE(Z_VALUE_TEMP)
-  DEALLOCATE(Z_LOCAT_BOUN)
-  DEALLOCATE(Z_LOCAT_GHOS)
-  DEALLOCATE(Z_VALUE_GHOS)
-  DEALLOCATE(Z_TESTS_CORN)
-  DEALLOCATE(Y_TYPE_BOUND,Y_FORC_BOUND)
-  DEALLOCATE(Y_MODE_BOUND,Y_MODE_INTE1)
-  DEALLOCATE(Z_FORC_BOUND)
-  DEALLOCATE(Z_VALUE_MAT1)
-  DEALLOCATE(Z_VALUE_MAT2)
-  DEALLOCATE(Z_VALUE_ZLKE)
-  DEALLOCATE(Z_TEMP_ZLKE)
-  ! 
-  RETURN
-  !
-END SUBROUTINE IBM_AFFECTV
diff --git a/src/mesonh/ext/ice_adjust_bis.f90 b/src/mesonh/ext/ice_adjust_bis.f90
deleted file mode 100644
index 44ab0c680b6d689ab050c53ddd39ec799bf0b100..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ice_adjust_bis.f90
+++ /dev/null
@@ -1,160 +0,0 @@
-!MNH_LIC Copyright 2012-2019 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!     ######spl
-     MODULE MODI_ICE_ADJUST_BIS
-!    ###############################
-!
-INTERFACE
-!
-!     #################################################################
-      SUBROUTINE ICE_ADJUST_BIS(PP,PTH,PR)
-!     #################################################################
-!
-!!               
-!*               1.1  Declaration of Arguments
-!! 
-
-REAL, DIMENSION(:,:,:),  INTENT(IN)     :: PP     ! Pressure
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)  :: PTH    ! thetal to transform into th
-REAL, DIMENSION(:,:,:,:),INTENT(INOUT)  :: PR     ! Total mixing ratios to transform into rv,rc and ri
-!
-END SUBROUTINE ICE_ADJUST_BIS
-
-END INTERFACE
-!
-END MODULE MODI_ICE_ADJUST_BIS
-!     ######spl
-      SUBROUTINE ICE_ADJUST_BIS(PP,PTH,PR)
-!     #################################################################
-!
-!
-!!****  *ICE_ADJUST_BIS* - computes an adjusted state of thermodynamical variables
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Valery Masson & C. Lac * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         09/2012
-!!      M.Moge           08/2015 UPDATE_HALO_ll on PTH, ZRV, ZRC, ZRI
-!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!!
-!! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST, ONLY : XCPD, XRD, XP00, CST
-USE MODD_NEB, ONLY : NEB
-!
-USE MODI_COMPUTE_FUNCTION_THERMO
-USE MODI_THLRT_FROM_THRVRCRI
-!
-USE MODE_ll
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-REAL, DIMENSION(:,:,:),  INTENT(IN)     :: PP    ! Pressure
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)  :: PTH   ! thetal to transform into th
-REAL, DIMENSION(:,:,:,:),INTENT(INOUT)  :: PR    ! Total mixing ratios to transform into rv,rc and ri
-!
-!-------------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTHL, ZRW, ZRV, ZRC, &
-                                                        ZRI, ZWORK
-REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZFRAC_ICE, ZRSATW, ZRSATI
-REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZT, ZEXN, ZLVOCPEXN,ZLSOCPEXN
-REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3), 16) :: ZBUF
-INTEGER :: IRR
-CHARACTER(LEN=1) :: YFRAC_ICE
-!
-INTEGER :: IINFO_ll
-TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL()   ! list of fields to exchange
-!----------------------------------------------------------------------------
-!
-!*      1 Initialisation
-!         --------------
-!
-IRR = SIZE(PR,4)
-!
-ZRV(:,:,:)=0.
-IF (IRR>=1) &
-ZRV(:,:,:)=PR(:,:,:,1)
-ZRC(:,:,:)=0.
-IF (IRR>=2) &
-ZRC(:,:,:)=PR(:,:,:,2)
-ZRI(:,:,:)=0.
-IF (IRR>=4) &
-ZRI(:,:,:)=PR(:,:,:,4)
-!
-YFRAC_ICE='T'
-ZFRAC_ICE(:,:,:) = 0.
-!
-!*      2 Computation
-!         -----------
-!
-ZEXN(:,:,:)=(PP(:,:,:)/XP00)**(XRD/XCPD)
-!
-CALL COMPUTE_FUNCTION_THERMO( IRR,                                &
-                              PTH, PR, ZEXN, PP,                  &
-                              ZT,ZLVOCPEXN,ZLSOCPEXN              )
-
-!
-CALL THLRT_FROM_THRVRCRI( IRR, PTH, PR, ZLVOCPEXN, ZLSOCPEXN,&
-                          ZTHL, ZRW                          )
-!
-CALL TH_R_FROM_THL_RT(CST, NEB, SIZE(ZFRAC_ICE), YFRAC_ICE,ZFRAC_ICE(:,:,:),PP(:,:,:), &
-                         ZTHL(:,:,:), ZRW(:,:,:), PTH(:,:,:),  &
-                         ZRV(:,:,:), ZRC(:,:,:), ZRI(:,:,:),   &
-                         ZRSATW(:,:,:), ZRSATI(:,:,:),OOCEAN=.FALSE.,&
-                         PBUF=ZBUF)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, PTH, 'ICE_ADJUST_BIS::PTH')
-IF (IRR>=1) THEN
-  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRV, 'ICE_ADJUST_BIS::ZRV' )
-ENDIF
-IF (IRR>=2) THEN
-  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRC, 'ICE_ADJUST_BIS::ZRC' )
-ENDIF
-IF (IRR>=4) THEN
-  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRI, 'ICE_ADJUST_BIS::ZRI' )
-ENDIF
-CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-CALL CLEANLIST_ll(TZFIELDS_ll)
-!
-
-IF (IRR>=1) &
-PR(:,:,:,1) = ZRV(:,:,:)
-IF (IRR>=2) &
-PR(:,:,:,2) = ZRC(:,:,:)
-IF (IRR>=4) &
-PR(:,:,:,4) = ZRI(:,:,:)
-!
-CONTAINS
-INCLUDE "th_r_from_thl_rt.func.h"
-INCLUDE "compute_frac_ice.func.h"
-END SUBROUTINE ICE_ADJUST_BIS
diff --git a/src/mesonh/ext/ini_lesn.f90 b/src/mesonh/ext/ini_lesn.f90
deleted file mode 100644
index 378e43f533ddc33eac977c0cc9a82b5b9e72e6be..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ini_lesn.f90
+++ /dev/null
@@ -1,2007 +0,0 @@
-!MNH_LIC Copyright 2000-2022 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!     ####################
-      SUBROUTINE  INI_LES_n
-!     ####################
-!
-!
-!!****  *INI_LES_n* initializes the LES variables for model _n
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         07/02/00
-!!      Modification     01/02/01 (D.Gazen) add module MODD_NSV for NSV variable
-!!                       06/11/02 (V. Masson) add LES budgets
-!!                    10/2016 (C.Lac) Add droplet deposition
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
-!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
-!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!  P. Wautelet 12/08/2020: bugfix: use NUNDEF instead of XUNDEF for integer variables
-!  P. Wautelet 04/01/2021: bugfix: nles_k was used instead of nspectra_k for a loop index
-!  P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain
-!  P. Wautelet 09/07/2021: bugfix: altitude levels are on the correct grid position (mass point)
-!  P. Wautelet 22/03/2022: LES averaging periods are more reliable (compute with integers instead of reals)
-! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODE_ll
-USE MODE_GATHER_ll
-USE MODE_MSG
-USE MODE_MODELN_HANDLER
-!
-USE MODD_LES
-USE MODD_LES_BUDGET
-USE MODD_LES_n
-!
-USE MODD_CONF
-USE MODD_PARAMETERS
-USE MODD_NESTING
-!
-USE MODD_LUNIT_n
-USE MODD_GRID_n
-USE MODD_DYN_n
-USE MODD_TIME_n
-USE MODD_DIM_n
-USE MODD_TURB_n
-USE MODD_CONF_n
-USE MODD_LBC_n
-USE MODD_PARAM_n
-USE MODD_DYN
-USE MODD_NSV, ONLY: NSV ! update_nsv is done in INI_MODEL
-USE MODD_CONDSAMP, ONLY : LCONDSAMP
-!
-USE MODI_INI_LES_CART_MASKn
-USE MODI_COEF_VER_INTERP_LIN
-USE MODI_SHUMAN
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-!
-!
-!
-!       0.2  declaration of local variables
-!
-!
-!      
-INTEGER :: ILUOUT, IRESP
-INTEGER :: JI,JJ, JK ! loop counters
-INTEGER :: IIU_ll    ! total domain I size
-INTEGER :: IJU_ll    ! total domain J size
-INTEGER :: IIMAX_ll  ! total physical domain I size
-INTEGER :: IJMAX_ll  ! total physical domain J size
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_LES ! LES altitudes 3D array
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_SPEC! " for spectra
-!
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! father model coordinates
-REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll !
-INTEGER :: IMI
-!
-!-------------------------------------------------------------------------------
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
-IIU_ll = IIMAX_ll+2*JPHEXT
-IJU_ll = IJMAX_ll+2*JPHEXT
-!
-ILUOUT = TLUOUT%NLU
-!
-!-------------------------------------------------------------------------------
-!
-!*      1.   Does LES computations are used?
-!            ------------------------------
-!
-LLES = LLES_MEAN .OR. LLES_RESOLVED  .OR. LLES_SUBGRID .OR. LLES_UPDRAFT &
-                 .OR. LLES_DOWNDRAFT .OR. LLES_SPECTRA
-!
-!
-IF (.NOT. LLES) RETURN
-!
-IF (L1D) THEN
-  LLES_RESOLVED    = .FALSE.
-  LLES_UPDRAFT     = .FALSE.
-  LLES_DOWNDRAFT   = .FALSE.
-  LLES_SPECTRA     = .FALSE.
-  LLES_NEB_MASK    = .FALSE.
-  LLES_CORE_MASK   = .FALSE.
-  LLES_CS_MASK     = .FALSE.
-  LLES_MY_MASK     = .FALSE.
-END IF
-!
-IF (LLES_RESOLVED )  LLES_MEAN = .TRUE.
-IF (LLES_SUBGRID  )  LLES_MEAN = .TRUE.
-IF (LLES_UPDRAFT  )  LLES_MEAN = .TRUE.
-IF (LLES_DOWNDRAFT)  LLES_MEAN = .TRUE.
-IF (LLES_SPECTRA  )  LLES_MEAN = .TRUE.
-!
-IF (CTURB=='NONE') THEN
-  WRITE(ILUOUT,FMT=*) 'LES diagnostics cannot be done without subgrid turbulence.'
-  WRITE(ILUOUT,FMT=*) 'You have chosen CTURB="NONE". You must choose a turbulence scheme.'
-  call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LB_n', 'LES diagnostics cannot be done without subgrid turbulence' )
-END IF
-!-------------------------------------------------------------------------------
-!
-!*      2.   Number and definition of masks
-!            ------------------------------
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.1  Cartesian (sub-)domain
-!            ----------------------
-!
-!* updates number of masks
-!  -----------------------
-!
-NLES_MASKS = 1
-!
-!* For model 1, set default values of cartesian mask, and defines cartesian mask
-!  -----------------------------------------------------------------------------
-!
-IF (IMI==1) THEN
-  IF ( LLES_CART_MASK ) THEN
-    !Compute LES diagnostics inside a cartesian mask
-
-    !Set default values to physical domain boundaries
-    IF ( NLES_IINF == NUNDEF ) NLES_IINF = 1
-    IF ( NLES_JINF == NUNDEF ) NLES_JINF = 1
-    IF ( NLES_ISUP == NUNDEF ) NLES_ISUP = NIMAX_ll
-    IF ( NLES_JSUP == NUNDEF ) NLES_JSUP = NJMAX_ll
-
-    !Check that selected indices are in physical domain
-    IF ( NLES_IINF < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too small (<1)' )
-    IF ( NLES_IINF > NIMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too large (>NIMAX)' )
-    IF ( NLES_ISUP < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too small (<1)' )
-    IF ( NLES_ISUP > NIMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too large (>NIMAX)' )
-    IF ( NLES_ISUP < NLES_IINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_ISUP < NLES_IINF' )
-
-    IF ( NLES_JINF < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too small (<1)' )
-    IF ( NLES_JINF > NJMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too large (>NJMAX)' )
-    IF ( NLES_JSUP < 1 )         CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too small (<1)' )
-    IF ( NLES_JSUP > NJMAX_ll )  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too large (>NJMAX)' )
-    IF ( NLES_JSUP < NLES_JINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_JSUP < NLES_JINF' )
-
-    !Set LLES_CART_MASK to false if whole domain is selected
-    IF (       NLES_IINF == 1        .AND. NLES_JINF == 1        &
-         .AND. NLES_ISUP == NIMAX_ll .AND. NLES_ISUP == NJMAX_ll ) THEN
-      LLES_CART_MASK = .FALSE.
-    END IF
-  ELSE
-    !Compute LES diagnostics on whole physical domain
-    NLES_IINF = 1
-    NLES_JINF = 1
-    NLES_ISUP = NIMAX_ll
-    NLES_JSUP = NJMAX_ll
-  END IF
-  !
-  NLESn_IINF(1)= NLES_IINF
-  NLESn_ISUP(1)= NLES_ISUP
-  NLESn_JINF(1)= NLES_JINF
-  NLESn_JSUP(1)= NLES_JSUP
-!
-!* For other models, fits cartesian mask on model 1 mask
-!  -----------------------------------------------------
-!
-ELSE
-  ALLOCATE(ZXHAT_ll(IIU_ll))
-  ALLOCATE(ZYHAT_ll(IJU_ll))
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP)
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP)
-!
-  CALL GOTO_MODEL(NDAD(IMI))
-  CALL INI_LES_CART_MASK_n(IMI,ZXHAT_ll,ZYHAT_ll,          &
-                         NLESn_IINF(IMI),NLESn_JINF(IMI), &
-                         NLESn_ISUP(IMI),NLESn_JSUP(IMI)  )
-  CALL GOTO_MODEL(IMI)
-! 
-  DEALLOCATE(ZXHAT_ll)
-  DEALLOCATE(ZYHAT_ll)
-END IF
-!
-!* in non cyclic boundary conditions, limitiation of masks due to u and v grids
-!  ----------------------------------------------------------------------------
-!
-IF ( (.NOT. L1D) .AND. CLBCX(1)/='CYCL') THEN
-  NLESn_IINF(IMI) = MAX(NLESn_IINF(IMI),2)
-END IF
-IF ( (.NOT. L1D) .AND. (.NOT. L2D) .AND. CLBCY(1)/='CYCL') THEN
-  NLESn_JINF(IMI) = MAX(NLESn_JINF(IMI),2)
-END IF
-!
-!* X boundary conditions for 2points correlations computations
-!  -----------------------------------------------------------
-!
-IF ( CLBCX(1) == 'CYCL' .AND. NLESn_IINF(IMI) == 1 .AND. NLESn_ISUP(IMI) == NIMAX_ll ) THEN
-  CLES_LBCX(:,IMI) = 'CYCL'
-ELSE
-  CLES_LBCX(:,IMI) = 'OPEN'
-END IF
-!
-!* Y boundary conditions for 2points correlations computations
-!  -----------------------------------------------------------
-!
-IF ( CLBCY(1) == 'CYCL' .AND. NLESn_JINF(IMI) == 1 .AND. NLESn_JSUP(IMI) == NJMAX_ll ) THEN
-  CLES_LBCY(:,IMI) = 'CYCL'
-ELSE
-  CLES_LBCY(:,IMI) = 'OPEN'
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.2  Nebulosity mask
-!            ---------------
-!
-IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_NEB_MASK = .FALSE.
-!
-IF (LLES_NEB_MASK) NLES_MASKS = NLES_MASKS + 2
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.3  Cloud core mask
-!            ---------------
-!
-IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_CORE_MASK = .FALSE.
-!
-IF (LLES_CORE_MASK) NLES_MASKS = NLES_MASKS + 2
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.4  Conditional sampling mask
-!            -------------------------
-!
-IF (.NOT. LUSERC .AND. .NOT. LCONDSAMP) LLES_CS_MASK = .FALSE.
-!
-IF (LLES_CS_MASK) NLES_MASKS = NLES_MASKS + 3
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.5  User mask
-!            ---------
-!
-IF (LLES_MY_MASK) NLES_MASKS = NLES_MASKS + NLES_MASKS_USER
-!
-!-------------------------------------------------------------------------------
-!
-!*      3.   Number of temporal LES samplings
-!            --------------------------------
-!
-!*      3.1  Default value
-!            -------------
-!
-IF (XLES_TEMP_SAMPLING == XUNDEF) THEN
-  IF (CTURBDIM=='3DIM') THEN
-    XLES_TEMP_SAMPLING =  60.
-  ELSE
-    XLES_TEMP_SAMPLING = 300.
-  END IF
-END IF
-!
-!*      3.2  Number of time steps between two calls
-!            --------------------------------------
-!
-NLES_DTCOUNT = MAX( NINT( XLES_TEMP_SAMPLING / XTSTEP ) , 1)
-
-!
-!*      3.3  Redefinition of the LES sampling time coherent with model time-step
-!            -------------------------------------------------------------------
-!
-! Note that this modifies XLES_TEMP_SAMPLING only for father model (model number 1)
-! For nested models (for which integration time step is an integer part of  father model)
-! the following operation does not change XLES_TEMP_SAMPLING. This way, LEs
-! sampling is done at the same instants for all models.
-!
-XLES_TEMP_SAMPLING = XTSTEP * NLES_DTCOUNT
-!
-!
-!*      3.4  number of temporal calls to LES routines
-!            ----------------------------------------
-!
-!
-NLES_TIMES = ( NINT( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / XTSTEP ) ) / NLES_DTCOUNT
-!
-!*      3.5  current LES time counter
-!            ------------------------
-!
-NLES_TCOUNT = 0
-!
-!*      3.6  dates array for diachro
-!            ----------------------
-!
-allocate( tles_dates( nles_times ) )
-allocate( xles_times( nles_times ) )
-!
-!*      3.7  No data
-!            -------
-!
-IF (NLES_TIMES==0) THEN
-  LLES=.FALSE.
-  RETURN
-END IF
-!
-!*     3.8  Averaging
-!           ---------
-IF (     XLES_TEMP_MEAN_END   == XUNDEF &
-    .OR. XLES_TEMP_MEAN_START == XUNDEF &
-    .OR. XLES_TEMP_MEAN_STEP  == XUNDEF ) THEN
-  !No LES temporal averaging
-  NLES_MEAN_TIMES = 0
-  NLES_MEAN_STEP  = NNEGUNDEF
-  NLES_MEAN_START = NNEGUNDEF
-  NLES_MEAN_END   = NNEGUNDEF
-ELSE
-  !LES temporal averaging is enabled
-  !Ensure that XLES_TEMP_MEAN_END is not after segment end
-  XLES_TEMP_MEAN_END = MIN( XLES_TEMP_MEAN_END, XSEGLEN - DYN_MODEL(1)%XTSTEP )
-
-  NLES_MEAN_START = NINT( XLES_TEMP_MEAN_START / XTSTEP )
-
-  IF ( MODULO( NLES_MEAN_START, NLES_DTCOUNT ) /= 0 ) THEN
-    CMNHMSG(1) = 'XLES_TEMP_MEAN_START is not a multiple of XLES_TEMP_SAMPLING'
-    CMNHMSG(2) = 'LES averaging periods could be wrong'
-    CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' )
-  END IF
-
-  NLES_MEAN_END = NINT( XLES_TEMP_MEAN_END / XTSTEP )
-
-  NLES_MEAN_STEP = NINT( XLES_TEMP_MEAN_STEP / XTSTEP )
-
-  IF ( NLES_MEAN_STEP < NLES_DTCOUNT ) &
-    CALL Print_msg( NVERB_ERROR, 'IO', 'INI_LES_n', 'XLES_TEMP_MEAN_STEP < XLES_TEMP_SAMPLING not allowed' )
-
-  IF ( MODULO( NLES_MEAN_STEP, NLES_DTCOUNT ) /= 0 ) THEN
-    CMNHMSG(1) = 'XLES_TEMP_MEAN_STEP is not a multiple of XLES_TEMP_SAMPLING'
-    CMNHMSG(2) = 'LES averaging periods could be wrong'
-    CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' )
-  END IF
-
-  NLES_MEAN_TIMES = ( NLES_MEAN_END - NLES_MEAN_START ) / NLES_MEAN_STEP
-  !Add 1 averaging period if the last one is incomplete (for example: start=0., end=10., step=3.)
-  IF ( MODULO( NLES_MEAN_END - NLES_MEAN_START, NLES_MEAN_STEP ) > 0 ) NLES_MEAN_TIMES = NLES_MEAN_TIMES + 1
-END IF
-!-------------------------------------------------------------------------------
-!
-!*      4.   Number of vertical levels for local diagnostics
-!            -----------------------------------------------
-!
-NLES_K = 0
-!
-!*      4.1  Case of altitude levels (lowest priority)
-!            -----------------------
-!
-IF (ANY(XLES_ALTITUDES(:)/=XUNDEF)) THEN
-  NLES_K = COUNT (XLES_ALTITUDES(:)/=XUNDEF)
-  CLES_LEVEL_TYPE='Z'
-  !
-  ALLOCATE(XCOEFLIN_LES(SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
-  ALLOCATE(NKLIN_LES   (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
-  !
-  ALLOCATE(ZZ_LES      (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K))
-  DO JK=1,NLES_K
-    DO JJ=1,SIZE(XZZ,2)
-      DO JI=1,SIZE(XZZ,1)
-        ZZ_LES(JI,JJ,JK) = XLES_ALTITUDES(JK)
-      END DO
-    END DO
-  END DO
-  CALL COEF_VER_INTERP_LIN(MZF(XZZ),ZZ_LES,NKLIN_LES,XCOEFLIN_LES)
-  !
-  DEALLOCATE(ZZ_LES)
-END IF
-!
-!
-!*      4.2  Case of model levels (highest priority)
-!            --------------------
-!
-IF (ANY(NLES_LEVELS(:)/=NUNDEF)) THEN
-  DO JK = 1, SIZE( NLES_LEVELS )
-    IF ( NLES_LEVELS(JK) /= NUNDEF ) THEN
-      IF ( NLES_LEVELS(JK) < 1 )     CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too small (<1)' )
-      IF ( NLES_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too large (>NKMAX)' )
-    END IF
-  END DO
-
-  NLES_K = COUNT (NLES_LEVELS(:)/=NUNDEF)
-  CLES_LEVEL_TYPE='K'
-ELSE
-  IF (NLES_K==0) THEN
-    NLES_K = MIN(SIZE(NLES_LEVELS),NKMAX)
-    CLES_LEVEL_TYPE='K'
-    DO JK=1,NLES_K
-      NLES_LEVELS(JK) = JK
-    END DO
-  END IF
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      5.   Number of vertical levels for non-local diagnostics
-!            ---------------------------------------------------
-!
-NSPECTRA_K = 0
-CSPECTRA_LEVEL_TYPE='N'
-!
-!
-!*      5.1  Case of altitude levels (medium priority)
-!            -----------------------
-!
-IF (ANY(XSPECTRA_ALTITUDES(:)/=XUNDEF)) THEN
-  NSPECTRA_K = COUNT (XSPECTRA_ALTITUDES(:)/=XUNDEF)
-  CSPECTRA_LEVEL_TYPE='Z'
-  !
-  ALLOCATE(XCOEFLIN_SPEC(SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
-  ALLOCATE(NKLIN_SPEC   (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
-  !
-  ALLOCATE(ZZ_SPEC      (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K))
-  DO JK=1,NSPECTRA_K
-    DO JJ=1,SIZE(XZZ,2)
-      DO JI=1,SIZE(XZZ,1)
-        ZZ_SPEC(JI,JJ,JK) = XSPECTRA_ALTITUDES(JK)
-      END DO
-    END DO
-  END DO
-  CALL COEF_VER_INTERP_LIN(XZZ,ZZ_SPEC,NKLIN_SPEC,XCOEFLIN_SPEC)
-  !
-  DEALLOCATE(ZZ_SPEC)
-END IF
-!
-!
-!*      5.2  Case of model levels (highest priority)
-!            --------------------
-!
-IF (ANY(NSPECTRA_LEVELS(:)/=NUNDEF)) THEN
-  DO JK = 1, SIZE( NSPECTRA_LEVELS )
-    IF ( NSPECTRA_LEVELS(JK) /= NUNDEF ) THEN
-      IF ( NSPECTRA_LEVELS(JK) < 1 )     CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too small (<1)' )
-      IF ( NSPECTRA_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too large (>NKMAX)' )
-    END IF
-  END DO
-
-  NSPECTRA_K = COUNT (NSPECTRA_LEVELS(:)/=NUNDEF)
-  CSPECTRA_LEVEL_TYPE='K'
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      6.   Number of horizontal wavelengths for non-local diagnostics
-!            ----------------------------------------------------------
-!
-NSPECTRA_NI = NLESn_ISUP(IMI) - NLESn_IINF(IMI) + 1
-NSPECTRA_NJ = NLESn_JSUP(IMI) - NLESn_JINF(IMI) + 1
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*      7.   Allocations of temporal series of local diagnostics
-!            ---------------------------------------------------
-!
-!*      7.0  Altitude levels
-!            ---------------
-!
-ALLOCATE(XLES_Z  (NLES_K))
-!
-!*      7.1  Averaging control variables
-!            ---------------------------
-!
-ALLOCATE(NLES_AVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(NLES_UND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
-!
-NLES_AVG_PTS_ll = NUNDEF
-NLES_UND_PTS_ll = NUNDEF
-!
-!
-!*      7.2  Horizontally mean variables
-!            ---------------------------
-!
-ALLOCATE(XLES_MEAN_U  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_V  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_W  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_P  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_DP  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_TP  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_TR  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_DISS(NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_LM  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_RHO(NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_Th (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_Mf (NLES_K,NLES_TIMES,NLES_MASKS))  
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_MEAN_Thl(NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_Rt (NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_KHt(NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_KHr(NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Thl(0,0,0))
-  ALLOCATE(XLES_MEAN_Rt (0,0,0))
-  ALLOCATE(XLES_MEAN_KHt(0,0,0))
-  ALLOCATE(XLES_MEAN_KHr(0,0,0))
-END IF
-IF (LUSERV) THEN
-  ALLOCATE(XLES_MEAN_Thv(NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Thv(0,0,0))
-END IF
-!
-IF (LUSERV ) THEN 
-  ALLOCATE(XLES_MEAN_Rv (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rv (0,0,0))
-END IF
-IF (LUSERV ) THEN 
-   ALLOCATE(XLES_MEAN_Rehu (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rehu (0,0,0))
-ENDIF
-IF (LUSERV ) THEN 
-   ALLOCATE(XLES_MEAN_Qs (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Qs (0,0,0))  
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_MEAN_Rc (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rc (0,0,0))
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_MEAN_Cf (NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_INDCf (NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_INDCf2 (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Cf (0,0,0))
-  ALLOCATE(XLES_MEAN_INDCf (0,0,0))
-  ALLOCATE(XLES_MEAN_INDCf2(0,0,0))  
-END IF
-IF (LUSERR ) THEN
-  ALLOCATE(XLES_MEAN_Rr (NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_RF (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rr (0,0,0))
-  ALLOCATE(XLES_MEAN_RF (0,0,0))
-END IF
-IF (LUSERI ) THEN
-  ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS))
-  ALLOCATE(XLES_MEAN_If (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Ri (0,0,0))
-  ALLOCATE(XLES_MEAN_If (0,0,0))
-END IF
-IF (LUSERS ) THEN
-  ALLOCATE(XLES_MEAN_Rs (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rs (0,0,0))
-END IF
-IF (LUSERG ) THEN
-  ALLOCATE(XLES_MEAN_Rg (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rg (0,0,0))
-END IF
-IF (LUSERH ) THEN
-  ALLOCATE(XLES_MEAN_Rh (NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_Rh (0,0,0))
-END IF
-IF (NSV>0  ) THEN
-  ALLOCATE(XLES_MEAN_Sv (NLES_K,NLES_TIMES,NLES_MASKS,NSV))
-ELSE
-  ALLOCATE(XLES_MEAN_Sv (0,0,0,0))
-END IF
-ALLOCATE(XLES_MEAN_WIND  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_dUdz  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_dVdz  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_dWdz  (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(XLES_MEAN_dThldz(NLES_K,NLES_TIMES,NLES_MASKS))
-IF (LUSERV) THEN
-  ALLOCATE(XLES_MEAN_dRtdz(NLES_K,NLES_TIMES,NLES_MASKS))
-ELSE
-  ALLOCATE(XLES_MEAN_dRtdz(0,0,0))
-END IF
-IF (NSV>0) THEN
-  ALLOCATE(XLES_MEAN_dSvdz(NLES_K,NLES_TIMES,NLES_MASKS,NSV))
-ELSE
-  ALLOCATE(XLES_MEAN_dSvdz(0,0,0,0))
-END IF
-!
-IF (LLES_PDF) THEN
-!pdf distributions and jpdf distributions
-  CALL LES_ALLOCATE('XLES_PDF_TH ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  CALL LES_ALLOCATE('XLES_PDF_W ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  CALL LES_ALLOCATE('XLES_PDF_THV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  IF (LUSERV) THEN
-   CALL LES_ALLOCATE('XLES_PDF_RV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RV ',(/0,0,0,0/))
-  END IF
-  IF (LUSERC) THEN 
-   CALL LES_ALLOCATE('XLES_PDF_RC ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-   CALL LES_ALLOCATE('XLES_PDF_RT ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-   CALL LES_ALLOCATE('XLES_PDF_THL',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RC ',(/0,0,0,0/))
-   CALL LES_ALLOCATE('XLES_PDF_RT ',(/0,0,0,0/))
-   CALL LES_ALLOCATE('XLES_PDF_THL',(/0,0,0,0/))
-  ENDIF
-  IF (LUSERR) THEN
-   CALL LES_ALLOCATE('XLES_PDF_RR ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RR ',(/0,0,0,0/))
-  ENDIF
-  IF (LUSERI) THEN 
-   CALL LES_ALLOCATE('XLES_PDF_RI ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RI ',(/0,0,0,0/))
-  END IF
-  IF (LUSERS) THEN
-   CALL LES_ALLOCATE('XLES_PDF_RS ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RS ',(/0,0,0,0/))
-  END IF
-  IF (LUSERG) THEN 
-   CALL LES_ALLOCATE('XLES_PDF_RG ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/))
-  ELSE
-   CALL LES_ALLOCATE('XLES_PDF_RG ',(/0,0,0,0/))
-  END IF
-ENDIF
-!  
-XLES_MEAN_U  = XUNDEF
-XLES_MEAN_V  = XUNDEF
-XLES_MEAN_W  = XUNDEF
-XLES_MEAN_P  = XUNDEF
-XLES_MEAN_DP  = XUNDEF
-XLES_MEAN_TP  = XUNDEF
-XLES_MEAN_TR  = XUNDEF
-XLES_MEAN_DISS= XUNDEF
-XLES_MEAN_LM  = XUNDEF
-XLES_MEAN_RHO= XUNDEF
-XLES_MEAN_Th = XUNDEF
-XLES_MEAN_Mf = XUNDEF
-IF (LUSERC ) XLES_MEAN_Thl= XUNDEF
-IF (LUSERV ) XLES_MEAN_Thv= XUNDEF
-IF (LUSERV ) XLES_MEAN_Rv  = XUNDEF
-IF (LUSERV ) XLES_MEAN_Rehu  = XUNDEF  
-IF (LUSERV ) XLES_MEAN_Qs  = XUNDEF
-IF (LUSERC ) XLES_MEAN_KHr = XUNDEF
-IF (LUSERC ) XLES_MEAN_KHt = XUNDEF
-IF (LUSERC ) XLES_MEAN_Rt  = XUNDEF
-IF (LUSERC ) XLES_MEAN_Rc  = XUNDEF
-IF (LUSERC ) XLES_MEAN_Cf  = XUNDEF
-IF (LUSERC ) XLES_MEAN_RF  = XUNDEF
-IF (LUSERC ) XLES_MEAN_INDCf  = XUNDEF
-IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF
-IF (LUSERR ) XLES_MEAN_Rr  = XUNDEF
-IF (LUSERI ) XLES_MEAN_Ri  = XUNDEF
-IF (LUSERI ) XLES_MEAN_If  = XUNDEF
-IF (LUSERS ) XLES_MEAN_Rs  = XUNDEF
-IF (LUSERG ) XLES_MEAN_Rg  = XUNDEF
-IF (LUSERH ) XLES_MEAN_Rh  = XUNDEF
-IF (NSV>0  ) XLES_MEAN_Sv  = XUNDEF
-XLES_MEAN_WIND  = XUNDEF
-XLES_MEAN_WIND  = XUNDEF
-XLES_MEAN_dUdz  = XUNDEF
-XLES_MEAN_dVdz  = XUNDEF
-XLES_MEAN_dWdz  = XUNDEF
-XLES_MEAN_dThldz= XUNDEF
-IF (LUSERV) XLES_MEAN_dRtdz = XUNDEF
-IF (NSV>0)  XLES_MEAN_dSvdz = XUNDEF
-!
-IF (LLES_PDF) THEN
- XLES_PDF_TH   = XUNDEF
- XLES_PDF_W    = XUNDEF
- XLES_PDF_THV  = XUNDEF
- IF (LUSERV) THEN
-  XLES_PDF_RV   = XUNDEF
- END IF
- IF (LUSERC) THEN
-  XLES_PDF_RC    = XUNDEF
-  XLES_PDF_RT    = XUNDEF
-  XLES_PDF_THL   = XUNDEF
- END IF
- IF (LUSERR) THEN
-  XLES_PDF_RR   = XUNDEF
- END IF
- IF (LUSERI) THEN
-  XLES_PDF_RI   = XUNDEF
- END IF
- IF (LUSERS) THEN
-  XLES_PDF_RS   = XUNDEF
- END IF
- IF (LUSERG) THEN
-  XLES_PDF_RG   = XUNDEF
- END IF
-END IF
-!
-!
-!
-!*      7.3  Resolved quantities
-!            -------------------
-!
-ALLOCATE(XLES_RESOLVED_U2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'2>
-ALLOCATE(XLES_RESOLVED_V2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'2>
-ALLOCATE(XLES_RESOLVED_W2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2>
-ALLOCATE(XLES_RESOLVED_P2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <p'2>
-ALLOCATE(XLES_RESOLVED_Th2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'2>
-IF (LUSERV) THEN
-  ALLOCATE(XLES_RESOLVED_ThThv (NLES_K,NLES_TIMES,NLES_MASKS))   ! <Th'Thv'>
-ELSE
-  ALLOCATE(XLES_RESOLVED_ThThv (0,0,0))
-END IF
-IF (LUSERC) THEN
-  ALLOCATE(XLES_RESOLVED_Thl2  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <Thl'2>
-  ALLOCATE(XLES_RESOLVED_ThlThv(NLES_K,NLES_TIMES,NLES_MASKS))   ! <Thl'Thv'>
-ELSE
-  ALLOCATE(XLES_RESOLVED_Thl2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThlThv(0,0,0))
-END IF
-ALLOCATE(XLES_RESOLVED_Ke    (NLES_K,NLES_TIMES,NLES_MASKS))     ! 0.5 <u'2+v'2+w'2>
-ALLOCATE(XLES_RESOLVED_UV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'v'>
-ALLOCATE(XLES_RESOLVED_WU    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'u'>
-ALLOCATE(XLES_RESOLVED_WV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'v'>
-ALLOCATE(XLES_RESOLVED_UP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'p'>
-ALLOCATE(XLES_RESOLVED_VP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'p'>
-ALLOCATE(XLES_RESOLVED_WP    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'p'>
-ALLOCATE(XLES_RESOLVED_UTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Th'>
-ALLOCATE(XLES_RESOLVED_VTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Th'>
-ALLOCATE(XLES_RESOLVED_WTh   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Th'>
-IF (LUSERC) THEN
-  ALLOCATE(XLES_RESOLVED_UThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <u'Thl'>
-  ALLOCATE(XLES_RESOLVED_VThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <v'Thl'>
-  ALLOCATE(XLES_RESOLVED_WThl  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <w'Thl'>
-ELSE
-  ALLOCATE(XLES_RESOLVED_UThl(0,0,0))
-  ALLOCATE(XLES_RESOLVED_VThl(0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThl(0,0,0))
-END IF
-IF (LUSERV) THEN
-  ALLOCATE(XLES_RESOLVED_UThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <u'Thv'>
-  ALLOCATE(XLES_RESOLVED_VThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <v'Thv'>
-  ALLOCATE(XLES_RESOLVED_WThv  (NLES_K,NLES_TIMES,NLES_MASKS))   ! <w'Thv'>
-ELSE
-  ALLOCATE(XLES_RESOLVED_UThv(0,0,0))
-  ALLOCATE(XLES_RESOLVED_VThv(0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThv(0,0,0))
-END IF
-ALLOCATE(XLES_RESOLVED_U3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'3>
-ALLOCATE(XLES_RESOLVED_V3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'3>
-ALLOCATE(XLES_RESOLVED_W3    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'3>
-ALLOCATE(XLES_RESOLVED_U4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'4>
-ALLOCATE(XLES_RESOLVED_V4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'4>
-ALLOCATE(XLES_RESOLVED_W4    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'4>
-ALLOCATE(XLES_RESOLVED_ThlPz (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'dp'/dz>
-ALLOCATE(XLES_RESOLVED_WThl2 (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'2>
-ALLOCATE(XLES_RESOLVED_W2Thl (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Thl'>
-ALLOCATE(XLES_RESOLVED_MASSFX(NLES_K,NLES_TIMES,NLES_MASKS))     ! <upward mass flux>
-ALLOCATE(XLES_RESOLVED_UKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'(u'2+v'2+w'2)>
-ALLOCATE(XLES_RESOLVED_VKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'(u'2+v'2+w'2)>
-ALLOCATE(XLES_RESOLVED_WKe   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'(u'2+v'2+w'2)>
-
-IF (LUSERV ) THEN
-  ALLOCATE(XLES_RESOLVED_Rv2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'2>
-  ALLOCATE(XLES_RESOLVED_ThRv  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Rv'>
-  ALLOCATE(XLES_RESOLVED_ThvRv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Rv'>
-  ALLOCATE(XLES_RESOLVED_URv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rv'>
-  ALLOCATE(XLES_RESOLVED_VRv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rv'>
-  ALLOCATE(XLES_RESOLVED_WRv   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'>
-  ALLOCATE(XLES_RESOLVED_WRv2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'2>
-  ALLOCATE(XLES_RESOLVED_W2Rv  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rv'>  
-  ALLOCATE(XLES_RESOLVED_W2Rt  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rt'> 
-  ALLOCATE(XLES_RESOLVED_WRt2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt2'>    
-  ALLOCATE(XLES_RESOLVED_RvPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'dp'/dz>
-  ALLOCATE(XLES_RESOLVED_WThlRv(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rv'>
-  ALLOCATE(XLES_RESOLVED_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rt'>  
-ELSE
-  ALLOCATE(XLES_RESOLVED_Rv2   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThRv  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThvRv (0,0,0))
-  ALLOCATE(XLES_RESOLVED_URv   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_VRv   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRv   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRv2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_W2Rv  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_W2Rt  (0,0,0)) 
-  ALLOCATE(XLES_RESOLVED_WRt2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_RvPz  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThlRv(0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThlRt(0,0,0))
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_RESOLVED_ThlRv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rv'>
-  !
-  ALLOCATE(XLES_RESOLVED_Rc2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'2>
-  ALLOCATE(XLES_RESOLVED_ThRc  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Rc'>
-  ALLOCATE(XLES_RESOLVED_ThlRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rc'>
-  ALLOCATE(XLES_RESOLVED_ThvRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Rc'>
-  ALLOCATE(XLES_RESOLVED_URc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rc'>
-  ALLOCATE(XLES_RESOLVED_VRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rc'>
-  ALLOCATE(XLES_RESOLVED_WRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'>
-  ALLOCATE(XLES_RESOLVED_WRc2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'2>
-  ALLOCATE(XLES_RESOLVED_W2Rc  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rc'>
-  ALLOCATE(XLES_RESOLVED_RcPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'dp'/dz>
-  ALLOCATE(XLES_RESOLVED_WThlRc(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rc'>
-  ALLOCATE(XLES_RESOLVED_WRvRc (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'Rc'>
-  ALLOCATE(XLES_RESOLVED_WRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'>
-  ALLOCATE(XLES_RESOLVED_Rt2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'2>
-  ALLOCATE(XLES_RESOLVED_RtPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rv'dp'/dz>
-ELSE
-  ALLOCATE(XLES_RESOLVED_ThlRv (0,0,0))
-  !
-  ALLOCATE(XLES_RESOLVED_Rc2   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThRc  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThlRc (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThvRc (0,0,0))
-  ALLOCATE(XLES_RESOLVED_URc   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_VRc   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRc   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRc2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_W2Rc  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_RcPz  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThlRc(0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRvRc (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRt   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_Rt2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_RtPz  (0,0,0))
-END IF
-IF (LUSERI ) THEN
-  ALLOCATE(XLES_RESOLVED_Ri2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'2>
-  ALLOCATE(XLES_RESOLVED_ThRi  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Th'Ri'>
-  ALLOCATE(XLES_RESOLVED_ThlRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Ri'>
-  ALLOCATE(XLES_RESOLVED_ThvRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thv'Ri'>
-  ALLOCATE(XLES_RESOLVED_URi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Ri'>
-  ALLOCATE(XLES_RESOLVED_VRi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Ri'>
-  ALLOCATE(XLES_RESOLVED_WRi   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Ri'>
-  ALLOCATE(XLES_RESOLVED_WRi2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Ri'2>
-  ALLOCATE(XLES_RESOLVED_W2Ri  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Ri'>
-  ALLOCATE(XLES_RESOLVED_RiPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'dp'/dz>
-  ALLOCATE(XLES_RESOLVED_WThlRi(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Ri'>
-  ALLOCATE(XLES_RESOLVED_WRvRi (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rv'Ri'>
-ELSE
-  ALLOCATE(XLES_RESOLVED_Ri2   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThRi  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThlRi (0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThvRi (0,0,0))
-  ALLOCATE(XLES_RESOLVED_URi   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_VRi   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRi   (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRi2  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_W2Ri  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_RiPz  (0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThlRi(0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRvRi (0,0,0))
-END IF
-!
-IF (LUSERR) THEN
-  ALLOCATE(XLES_RESOLVED_WRr   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rr'>
-  ALLOCATE(XLES_INPRR3D        (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux
-  ALLOCATE(XLES_MAX_INPRR3D        (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux
-  ALLOCATE(XLES_EVAP3D        (NLES_K,NLES_TIMES,NLES_MASKS)) ! evap
-ELSE
-  ALLOCATE(XLES_RESOLVED_WRr   (0,0,0))
-  ALLOCATE(XLES_INPRR3D        (0,0,0))
-  ALLOCATE(XLES_MAX_INPRR3D        (0,0,0))
-  ALLOCATE(XLES_EVAP3D         (0,0,0))
-END IF
-IF (NSV>0  ) THEN
-  ALLOCATE(XLES_RESOLVED_Sv2   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'2>
-  ALLOCATE(XLES_RESOLVED_ThSv  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Th'Sv>
-  ALLOCATE(XLES_RESOLVED_USv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'>
-  ALLOCATE(XLES_RESOLVED_VSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'>
-  ALLOCATE(XLES_RESOLVED_WSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'>
-  ALLOCATE(XLES_RESOLVED_WSv2  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'2>
-  ALLOCATE(XLES_RESOLVED_W2Sv  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'2Sv'>
-  ALLOCATE(XLES_RESOLVED_SvPz  (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'dp'/dz>
-  ALLOCATE(XLES_RESOLVED_WThlSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Thl'Sv'>
-  IF (LUSERV) THEN
-    ALLOCATE(XLES_RESOLVED_ThvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thv'Sv>
-    ALLOCATE(XLES_RESOLVED_WRvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Rv'Sv'>
-  ELSE
-    ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0))
-    ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0))
-  END IF
-  IF (LUSERC) THEN
-    ALLOCATE(XLES_RESOLVED_ThlSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thl'Sv>
-  ELSE
-    ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0))
-  END IF
-ELSE
-  ALLOCATE(XLES_RESOLVED_Sv2   (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThSv  (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_USv   (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_VSv   (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_WSv   (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_WSv2  (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_W2Sv  (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_SvPz  (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_WThlSv(0,0,0,0))
-  ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0))
-END IF
-!
-!
-XLES_RESOLVED_U2  = XUNDEF
-XLES_RESOLVED_V2  = XUNDEF
-XLES_RESOLVED_W2  = XUNDEF
-XLES_RESOLVED_P2  = XUNDEF
-XLES_RESOLVED_Th2 = XUNDEF
-IF( LUSERC) THEN
-  XLES_RESOLVED_Thl2= XUNDEF
-  XLES_RESOLVED_ThlThv= XUNDEF
-END IF
-IF (LUSERV) THEN
-  XLES_RESOLVED_ThThv = XUNDEF
-END IF
-XLES_RESOLVED_Ke  = XUNDEF
-XLES_RESOLVED_UV  = XUNDEF
-XLES_RESOLVED_WU  = XUNDEF
-XLES_RESOLVED_WV  = XUNDEF
-XLES_RESOLVED_UP  = XUNDEF
-XLES_RESOLVED_VP  = XUNDEF
-XLES_RESOLVED_WP  = XUNDEF
-XLES_RESOLVED_UTh = XUNDEF
-XLES_RESOLVED_VTh = XUNDEF
-XLES_RESOLVED_WTh = XUNDEF
-IF (LUSERC) THEN
-  XLES_RESOLVED_UThl= XUNDEF
-  XLES_RESOLVED_VThl= XUNDEF
-  XLES_RESOLVED_WThl= XUNDEF
-END IF
-IF (LUSERV) THEN
-  XLES_RESOLVED_UThv= XUNDEF
-  XLES_RESOLVED_VThv= XUNDEF
-  XLES_RESOLVED_WThv= XUNDEF
-END IF
-XLES_RESOLVED_U3  = XUNDEF
-XLES_RESOLVED_V3  = XUNDEF
-XLES_RESOLVED_W3  = XUNDEF
-XLES_RESOLVED_U4  = XUNDEF
-XLES_RESOLVED_V4  = XUNDEF
-XLES_RESOLVED_W4  = XUNDEF
-XLES_RESOLVED_WThl2  = XUNDEF
-XLES_RESOLVED_W2Thl  = XUNDEF
-XLES_RESOLVED_ThlPz  = XUNDEF
-!
-XLES_RESOLVED_MASSFX = XUNDEF
-XLES_RESOLVED_UKe = XUNDEF
-XLES_RESOLVED_VKe = XUNDEF
-XLES_RESOLVED_WKe = XUNDEF
-IF (LUSERV ) THEN
-  XLES_RESOLVED_Rv2  = XUNDEF
-  XLES_RESOLVED_ThRv = XUNDEF
-  IF (LUSERC) XLES_RESOLVED_ThlRv= XUNDEF
-  XLES_RESOLVED_ThvRv= XUNDEF
-  XLES_RESOLVED_URv = XUNDEF
-  XLES_RESOLVED_VRv = XUNDEF
-  XLES_RESOLVED_WRv = XUNDEF
-  XLES_RESOLVED_WRv2  = XUNDEF
-  XLES_RESOLVED_W2Rv  = XUNDEF
-  XLES_RESOLVED_WRt2 = XUNDEF
-  XLES_RESOLVED_W2Rt  = XUNDEF
-  XLES_RESOLVED_WThlRv= XUNDEF
-  XLES_RESOLVED_WThlRt= XUNDEF  
-  XLES_RESOLVED_RvPz  = XUNDEF
-END IF
-IF (LUSERC ) THEN
-  XLES_RESOLVED_Rc2  = XUNDEF
-  XLES_RESOLVED_ThRc = XUNDEF
-  XLES_RESOLVED_ThlRc= XUNDEF
-  XLES_RESOLVED_ThvRc= XUNDEF
-  XLES_RESOLVED_URc  = XUNDEF
-  XLES_RESOLVED_VRc  = XUNDEF
-  XLES_RESOLVED_WRc  = XUNDEF
-  XLES_RESOLVED_WRc2  = XUNDEF
-  XLES_RESOLVED_W2Rc  = XUNDEF
-  XLES_RESOLVED_WThlRc= XUNDEF
-  XLES_RESOLVED_WRvRc = XUNDEF
-  XLES_RESOLVED_RcPz  = XUNDEF
-  XLES_RESOLVED_RtPz  = XUNDEF
-  XLES_RESOLVED_WRt  = XUNDEF
-  XLES_RESOLVED_Rt2  = XUNDEF
-END IF
-IF (LUSERI ) THEN
-  XLES_RESOLVED_Ri2  = XUNDEF
-  XLES_RESOLVED_ThRi = XUNDEF
-  XLES_RESOLVED_ThlRi= XUNDEF
-  XLES_RESOLVED_ThvRi= XUNDEF
-  XLES_RESOLVED_URi  = XUNDEF
-  XLES_RESOLVED_VRi  = XUNDEF
-  XLES_RESOLVED_WRi  = XUNDEF
-  XLES_RESOLVED_WRi2  = XUNDEF
-  XLES_RESOLVED_W2Ri  = XUNDEF
-  XLES_RESOLVED_WThlRi= XUNDEF
-  XLES_RESOLVED_WRvRi = XUNDEF
-  XLES_RESOLVED_RiPz  = XUNDEF
-END IF
-!
-IF (LUSERR) XLES_RESOLVED_WRr = XUNDEF
-IF (LUSERR) XLES_MAX_INPRR3D = XUNDEF
-IF (LUSERR) XLES_INPRR3D = XUNDEF
-IF (LUSERR) XLES_EVAP3D = XUNDEF
-IF (NSV>0  ) THEN
-  XLES_RESOLVED_Sv2  = XUNDEF
-  XLES_RESOLVED_ThSv = XUNDEF
-  IF (LUSERC) XLES_RESOLVED_ThlSv= XUNDEF
-  IF (LUSERV) XLES_RESOLVED_ThvSv= XUNDEF
-  XLES_RESOLVED_USv = XUNDEF
-  XLES_RESOLVED_VSv = XUNDEF
-  XLES_RESOLVED_WSv = XUNDEF
-  XLES_RESOLVED_WSv2  = XUNDEF
-  XLES_RESOLVED_W2Sv  = XUNDEF
-  XLES_RESOLVED_WThlSv= XUNDEF
-  IF (LUSERV) XLES_RESOLVED_WRvSv = XUNDEF
-  XLES_RESOLVED_SvPz  = XUNDEF
-END IF
-!
-!
-!*      7.4  interactions of resolved and subgrid quantities
-!            -----------------------------------------------
-!
-ALLOCATE(XLES_RES_U_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <u'Tke>
-ALLOCATE(XLES_RES_V_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <v'Tke>
-ALLOCATE(XLES_RES_W_SBG_Tke         (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Tke>
-!                                                                        ______
-ALLOCATE(XLES_RES_W_SBG_WThl        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Thl'>
-!                                                                        _____
-ALLOCATE(XLES_RES_W_SBG_Thl2        (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'2>
-!                                                                              _____
-ALLOCATE(XLES_RES_ddxa_U_SBG_UaU    (NLES_K,NLES_TIMES,NLES_MASKS))!  <du'/dxa ua'u'>
-!                                                                              _____
-ALLOCATE(XLES_RES_ddxa_V_SBG_UaV    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dv'/dxa ua'v'>
-!                                                                              _____
-ALLOCATE(XLES_RES_ddxa_W_SBG_UaW    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'w'>
-!                                                                              _______
-ALLOCATE(XLES_RES_ddxa_W_SBG_UaThl  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Thl'>
-!                                                                                _____
-ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaW  (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'w'>
-!                                                                               ___
-ALLOCATE(XLES_RES_ddz_Thl_SBG_W2    (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dz w'2>
-!                                                                                _______
-ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaThl(NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Thl'>
-!
-IF (LUSERV) THEN
-!                                                                          _____
-  ALLOCATE(XLES_RES_W_SBG_WRt         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'w'Rt'>
-!                                                                           ____
-  ALLOCATE(XLES_RES_W_SBG_Rt2         (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Rt'2>
-!                                                                          _______
-  ALLOCATE(XLES_RES_W_SBG_ThlRt       (NLES_K,NLES_TIMES,NLES_MASKS))!  <w'Thl'Rt'>
-!                                                                                ______
-  ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dw'/dxa ua'Rt'>
-!                                                                                 _____
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW   (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'w'>
-!                                                                                ___
-  ALLOCATE(XLES_RES_ddz_Rt_SBG_W2     (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dz w'2>
-!                                                                                  ______
-  ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS))!  <dThl'/dxa ua'Rt'>
-!                                                                                 _______
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (NLES_K,NLES_TIMES,NLES_MASKS))!  <dRt'/dxa ua'Thl'>
-!                                                                                  ______
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt  (NLES_K,NLES_TIMES,NLES_MASKS)) !  <dRt'/dxa ua'Rt'>
-ELSE
-  ALLOCATE(XLES_RES_W_SBG_WRt         (0,0,0))
-  ALLOCATE(XLES_RES_W_SBG_Rt2         (0,0,0))
-  ALLOCATE(XLES_RES_W_SBG_ThlRt       (0,0,0))
-  ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt   (0,0,0))
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW   (0,0,0))
-  ALLOCATE(XLES_RES_ddz_Rt_SBG_W2     (0,0,0))
-  ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (0,0,0))
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (0,0,0))
-  ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt  (0,0,0))
-END IF
-!
-!                                                                                  ______
-ALLOCATE(XLES_RES_ddxa_W_SBG_UaSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dw'/dxa ua'Sv'>
-!                                                                                   _____
-ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'w'>
-!                                                                                   ___
-ALLOCATE(XLES_RES_ddz_Sv_SBG_W2   (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dz w'2>
-!                                                                                  ______
-ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <dSv'/dxa ua'Sv'>
-!                                                                            _____
-ALLOCATE(XLES_RES_W_SBG_WSv       (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <w'w'Sv'>
-!                                                                            ____
-ALLOCATE(XLES_RES_W_SBG_Sv2       (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  !  <w'Sv'2>
-!
-XLES_RES_U_SBG_Tke= XUNDEF
-XLES_RES_V_SBG_Tke= XUNDEF
-XLES_RES_W_SBG_Tke= XUNDEF
-XLES_RES_W_SBG_WThl         = XUNDEF
-XLES_RES_W_SBG_Thl2         = XUNDEF
-XLES_RES_ddxa_U_SBG_UaU     = XUNDEF
-XLES_RES_ddxa_V_SBG_UaV     = XUNDEF
-XLES_RES_ddxa_W_SBG_UaW     = XUNDEF
-XLES_RES_ddxa_W_SBG_UaThl   = XUNDEF
-XLES_RES_ddxa_Thl_SBG_UaW   = XUNDEF
-XLES_RES_ddz_Thl_SBG_W2     = XUNDEF
-XLES_RES_ddxa_Thl_SBG_UaThl = XUNDEF
-IF (LUSERV) THEN
-  XLES_RES_W_SBG_WRt        = XUNDEF
-  XLES_RES_W_SBG_Rt2        = XUNDEF
-  XLES_RES_W_SBG_ThlRt      = XUNDEF
-  XLES_RES_ddxa_W_SBG_UaRt  = XUNDEF
-  XLES_RES_ddxa_Rt_SBG_UaW  = XUNDEF
-  XLES_RES_ddz_Rt_SBG_W2    = XUNDEF
-  XLES_RES_ddxa_Thl_SBG_UaRt= XUNDEF
-  XLES_RES_ddxa_Rt_SBG_UaThl= XUNDEF
-  XLES_RES_ddxa_Rt_SBG_UaRt = XUNDEF
-END IF
-IF (NSV>0) THEN
-  XLES_RES_ddxa_W_SBG_UaSv = XUNDEF
-  XLES_RES_ddxa_Sv_SBG_UaW = XUNDEF
-  XLES_RES_ddz_Sv_SBG_W2   = XUNDEF
-  XLES_RES_ddxa_Sv_SBG_UaSv= XUNDEF
-  XLES_RES_W_SBG_WSv       = XUNDEF
-  XLES_RES_W_SBG_Sv2       = XUNDEF
-END IF
-!
-!
-!*      7.5  subgrid quantities
-!            ------------------
-!
-ALLOCATE(XLES_SUBGRID_U2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'2>
-ALLOCATE(XLES_SUBGRID_V2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'2>
-ALLOCATE(XLES_SUBGRID_W2    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2>
-ALLOCATE(XLES_SUBGRID_Tke   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <e>
-ALLOCATE(XLES_SUBGRID_Thl2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'2>
-ALLOCATE(XLES_SUBGRID_UV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'v'>
-ALLOCATE(XLES_SUBGRID_WU    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'u'>
-ALLOCATE(XLES_SUBGRID_WV    (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'v'>
-ALLOCATE(XLES_SUBGRID_UThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Thl'>
-ALLOCATE(XLES_SUBGRID_VThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Thl'>
-ALLOCATE(XLES_SUBGRID_WThl  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'>
-ALLOCATE(XLES_SUBGRID_WThv     (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thv'>
-ALLOCATE(XLES_SUBGRID_ThlThv   (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'Thv'>
-ALLOCATE(XLES_SUBGRID_W2Thl    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'2Thl>
-ALLOCATE(XLES_SUBGRID_WThl2    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'Thl'2>
-ALLOCATE(XLES_SUBGRID_DISS_Tke (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon>
-ALLOCATE(XLES_SUBGRID_DISS_Thl2(NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Thl2>
-ALLOCATE(XLES_SUBGRID_WP       (NLES_K,NLES_TIMES,NLES_MASKS))  ! <w'p'>
-ALLOCATE(XLES_SUBGRID_PHI3     (NLES_K,NLES_TIMES,NLES_MASKS))  ! phi3
-ALLOCATE(XLES_SUBGRID_LMix     (NLES_K,NLES_TIMES,NLES_MASKS))  ! mixing length
-ALLOCATE(XLES_SUBGRID_LDiss    (NLES_K,NLES_TIMES,NLES_MASKS))  ! dissipative length
-ALLOCATE(XLES_SUBGRID_Km       (NLES_K,NLES_TIMES,NLES_MASKS))  ! Km
-ALLOCATE(XLES_SUBGRID_Kh       (NLES_K,NLES_TIMES,NLES_MASKS))  ! Kh
-ALLOCATE(XLES_SUBGRID_ThlPz    (NLES_K,NLES_TIMES,NLES_MASKS))  ! <Thl'dp'/dz>
-ALLOCATE(XLES_SUBGRID_UTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Tke>
-ALLOCATE(XLES_SUBGRID_VTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Tke>
-ALLOCATE(XLES_SUBGRID_WTke  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Tke>
-ALLOCATE(XLES_SUBGRID_ddz_WTke  (NLES_K,NLES_TIMES,NLES_MASKS)) ! <dw'Tke/dz>
-
-ALLOCATE(XLES_SUBGRID_THLUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
-ALLOCATE(XLES_SUBGRID_RTUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rt of the Updraft
-ALLOCATE(XLES_SUBGRID_RVUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rv of the Updraft
-ALLOCATE(XLES_SUBGRID_RCUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Rc of the Updraft
-ALLOCATE(XLES_SUBGRID_RIUP_MF (NLES_K,NLES_TIMES,NLES_MASKS))  ! Ri of the Updraft
-ALLOCATE(XLES_SUBGRID_WUP_MF  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Thl of the Updraft
-ALLOCATE(XLES_SUBGRID_MASSFLUX(NLES_K,NLES_TIMES,NLES_MASKS))  ! Mass Flux
-ALLOCATE(XLES_SUBGRID_DETR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Detrainment
-ALLOCATE(XLES_SUBGRID_ENTR    (NLES_K,NLES_TIMES,NLES_MASKS))  ! Entrainment
-ALLOCATE(XLES_SUBGRID_FRACUP  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Updraft Fraction 
-ALLOCATE(XLES_SUBGRID_THVUP_MF(NLES_K,NLES_TIMES,NLES_MASKS))  ! Thv of the Updraft
-ALLOCATE(XLES_SUBGRID_WTHLMF  (NLES_K,NLES_TIMES,NLES_MASKS))  ! Flux of thl   
-ALLOCATE(XLES_SUBGRID_WRTMF   (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of rt
-ALLOCATE(XLES_SUBGRID_WTHVMF  (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of thv 
-ALLOCATE(XLES_SUBGRID_WUMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of u
-ALLOCATE(XLES_SUBGRID_WVMF    (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of v
-
-IF (LUSERV ) THEN
-  ALLOCATE(XLES_SUBGRID_Rt2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'2>
-  ALLOCATE(XLES_SUBGRID_ThlRt (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Thl'Rt'>
-  ALLOCATE(XLES_SUBGRID_URt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rt'>
-  ALLOCATE(XLES_SUBGRID_VRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rt'>
-  ALLOCATE(XLES_SUBGRID_WRt   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'>
-  ALLOCATE(XLES_SUBGRID_RtThv (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'Thv'>
-  ALLOCATE(XLES_SUBGRID_W2Rt  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'2Rt'>
-  ALLOCATE(XLES_SUBGRID_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Thl'Rt'>
-  ALLOCATE(XLES_SUBGRID_WRt2  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rt'2>
-  ALLOCATE(XLES_SUBGRID_DISS_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS))  ! <epsilon_Rt2>
-  ALLOCATE(XLES_SUBGRID_DISS_ThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_ThlRt>
-  ALLOCATE(XLES_SUBGRID_RtPz  (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rt'dp'/dz>
-  ALLOCATE(XLES_SUBGRID_PSI3  (NLES_K,NLES_TIMES,NLES_MASKS))     ! psi3
-ELSE
-  ALLOCATE(XLES_SUBGRID_Rt2   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_ThlRt (0,0,0))
-  ALLOCATE(XLES_SUBGRID_URt   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_VRt   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_WRt   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_RtThv (0,0,0))
-  ALLOCATE(XLES_SUBGRID_W2Rt  (0,0,0))
-  ALLOCATE(XLES_SUBGRID_WThlRt(0,0,0))
-  ALLOCATE(XLES_SUBGRID_WRt2  (0,0,0))
-  ALLOCATE(XLES_SUBGRID_DISS_Rt2 (0,0,0))
-  ALLOCATE(XLES_SUBGRID_DISS_ThlRt(0,0,0))
-  ALLOCATE(XLES_SUBGRID_RtPz  (0,0,0))
-  ALLOCATE(XLES_SUBGRID_PSI3  (0,0,0))
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_SUBGRID_Rc2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Rc'2>
-  ALLOCATE(XLES_SUBGRID_URc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <u'Rc'>
-  ALLOCATE(XLES_SUBGRID_VRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <v'Rc'>
-  ALLOCATE(XLES_SUBGRID_WRc   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <w'Rc'>
-ELSE
-  ALLOCATE(XLES_SUBGRID_Rc2   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_URc   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_VRc   (0,0,0))
-  ALLOCATE(XLES_SUBGRID_WRc   (0,0,0))
-END IF
-IF (LUSERI ) THEN
-  ALLOCATE(XLES_SUBGRID_Ri2   (NLES_K,NLES_TIMES,NLES_MASKS))     ! <Ri'2>
-ELSE
-  ALLOCATE(XLES_SUBGRID_Ri2   (0,0,0))
-END IF
-IF (NSV>0  ) THEN
-  ALLOCATE(XLES_SUBGRID_USv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'>
-  ALLOCATE(XLES_SUBGRID_VSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'>
-  ALLOCATE(XLES_SUBGRID_WSv   (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'>
-  ALLOCATE(XLES_SUBGRID_Sv2      (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'2>
-  ALLOCATE(XLES_SUBGRID_SvThv    (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'Thv'>
-  ALLOCATE(XLES_SUBGRID_W2Sv     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'2Sv'>
-  ALLOCATE(XLES_SUBGRID_WSv2     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <w'Sv'2>
-  ALLOCATE(XLES_SUBGRID_DISS_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <epsilon_Sv2>
-  ALLOCATE(XLES_SUBGRID_SvPz     (NLES_K,NLES_TIMES,NLES_MASKS,NSV))  ! <Sv'dp'/dz>
-ELSE
-  ALLOCATE(XLES_SUBGRID_USv   (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_VSv   (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_WSv   (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_Sv2     (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_SvThv   (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_W2Sv    (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_WSv2    (0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_DISS_Sv2(0,0,0,0))
-  ALLOCATE(XLES_SUBGRID_SvPz    (0,0,0,0))
-END IF
-!
-XLES_SUBGRID_U2  = XUNDEF
-XLES_SUBGRID_V2  = XUNDEF
-XLES_SUBGRID_W2  = XUNDEF
-XLES_SUBGRID_Tke = XUNDEF
-XLES_SUBGRID_Thl2= XUNDEF
-XLES_SUBGRID_UV  = XUNDEF
-XLES_SUBGRID_WU  = XUNDEF
-XLES_SUBGRID_WV  = XUNDEF
-XLES_SUBGRID_UThl= XUNDEF
-XLES_SUBGRID_VThl= XUNDEF
-XLES_SUBGRID_WThl= XUNDEF
-XLES_SUBGRID_WThv= XUNDEF
-XLES_SUBGRID_ThlThv= XUNDEF
-XLES_SUBGRID_W2Thl= XUNDEF
-XLES_SUBGRID_WThl2    = XUNDEF
-XLES_SUBGRID_DISS_Tke = XUNDEF
-XLES_SUBGRID_DISS_Thl2= XUNDEF
-XLES_SUBGRID_WP       = XUNDEF
-XLES_SUBGRID_PHI3     = XUNDEF
-XLES_SUBGRID_LMix     = XUNDEF
-XLES_SUBGRID_LDiss    = XUNDEF
-XLES_SUBGRID_Km       = XUNDEF
-XLES_SUBGRID_Kh       = XUNDEF
-XLES_SUBGRID_ThlPz    = XUNDEF
-XLES_SUBGRID_UTke= XUNDEF
-XLES_SUBGRID_VTke= XUNDEF
-XLES_SUBGRID_WTke= XUNDEF
-XLES_SUBGRID_ddz_WTke  = XUNDEF
-
-XLES_SUBGRID_THLUP_MF = XUNDEF
-XLES_SUBGRID_RTUP_MF  = XUNDEF
-XLES_SUBGRID_RVUP_MF  = XUNDEF
-XLES_SUBGRID_RCUP_MF  = XUNDEF
-XLES_SUBGRID_RIUP_MF  = XUNDEF
-XLES_SUBGRID_WUP_MF   = XUNDEF
-XLES_SUBGRID_MASSFLUX = XUNDEF
-XLES_SUBGRID_DETR     = XUNDEF
-XLES_SUBGRID_ENTR     = XUNDEF
-XLES_SUBGRID_FRACUP   = XUNDEF
-XLES_SUBGRID_THVUP_MF = XUNDEF
-XLES_SUBGRID_WTHLMF   = XUNDEF  
-XLES_SUBGRID_WRTMF    = XUNDEF
-XLES_SUBGRID_WTHVMF   = XUNDEF
-XLES_SUBGRID_WUMF     = XUNDEF
-XLES_SUBGRID_WVMF     = XUNDEF
-
-IF (LUSERV ) THEN
-  XLES_SUBGRID_Rt2 = XUNDEF
-  XLES_SUBGRID_ThlRt= XUNDEF
-  XLES_SUBGRID_URt = XUNDEF
-  XLES_SUBGRID_VRt = XUNDEF
-  XLES_SUBGRID_WRt = XUNDEF
-  XLES_SUBGRID_RtThv   = XUNDEF
-  XLES_SUBGRID_W2Rt    = XUNDEF
-  XLES_SUBGRID_WThlRt  = XUNDEF
-  XLES_SUBGRID_WRt2    = XUNDEF
-  XLES_SUBGRID_DISS_Rt2= XUNDEF
-  XLES_SUBGRID_DISS_ThlRt= XUNDEF
-  XLES_SUBGRID_RtPz    = XUNDEF
-  XLES_SUBGRID_PSI3     = XUNDEF
-END IF
-IF (LUSERC ) THEN
-  XLES_SUBGRID_Rc2 = XUNDEF
-  XLES_SUBGRID_URc = XUNDEF
-  XLES_SUBGRID_VRc = XUNDEF
-  XLES_SUBGRID_WRc = XUNDEF
-END IF
-IF (LUSERI ) THEN
-  XLES_SUBGRID_Ri2 = XUNDEF
-END IF
-IF (NSV>0  ) THEN
-  XLES_SUBGRID_USv = XUNDEF
-  XLES_SUBGRID_VSv = XUNDEF
-  XLES_SUBGRID_WSv = XUNDEF
-  XLES_SUBGRID_Sv2     = XUNDEF
-  XLES_SUBGRID_SvThv   = XUNDEF
-  XLES_SUBGRID_W2Sv    = XUNDEF
-  XLES_SUBGRID_WSv2    = XUNDEF
-  XLES_SUBGRID_DISS_Sv2= XUNDEF
-  XLES_SUBGRID_SvPz    = XUNDEF
-END IF
-!
-!
-!*      7.6  updraft quantities (only on the cartesian mask)
-!            ------------------
-!
-ALLOCATE(XLES_UPDRAFT       (NLES_K,NLES_TIMES))    ! updraft fraction
-ALLOCATE(XLES_UPDRAFT_W     (NLES_K,NLES_TIMES))    ! <w>
-ALLOCATE(XLES_UPDRAFT_Th    (NLES_K,NLES_TIMES))    ! <theta>
-ALLOCATE(XLES_UPDRAFT_Ke    (NLES_K,NLES_TIMES))    ! <E>
-ALLOCATE(XLES_UPDRAFT_WTh   (NLES_K,NLES_TIMES))    ! <w'theta'>
-ALLOCATE(XLES_UPDRAFT_Th2   (NLES_K,NLES_TIMES))    ! <th'2>
-ALLOCATE(XLES_UPDRAFT_Tke   (NLES_K,NLES_TIMES))    ! <e>
-
-IF (LUSERV) THEN
-  ALLOCATE(XLES_UPDRAFT_Thv   (NLES_K,NLES_TIMES))    ! <thetav>
-  ALLOCATE(XLES_UPDRAFT_WThv  (NLES_K,NLES_TIMES))    ! <w'thv'>
-  ALLOCATE(XLES_UPDRAFT_ThThv (NLES_K,NLES_TIMES))    ! <th'thv'>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Thv   (0,0))
-  ALLOCATE(XLES_UPDRAFT_WThv  (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThThv (0,0))
-END IF
-!
-IF (LUSERC) THEN
-  ALLOCATE(XLES_UPDRAFT_Thl   (NLES_K,NLES_TIMES))    ! <thetal>
-  ALLOCATE(XLES_UPDRAFT_WThl  (NLES_K,NLES_TIMES))    ! <w'thetal'>
-  ALLOCATE(XLES_UPDRAFT_Thl2  (NLES_K,NLES_TIMES))    ! <thl'2>
-  ALLOCATE(XLES_UPDRAFT_ThlThv(NLES_K,NLES_TIMES))    ! <thl'thv'>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Thl   (0,0))
-  ALLOCATE(XLES_UPDRAFT_WThl  (0,0))
-  ALLOCATE(XLES_UPDRAFT_Thl2  (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThlThv(0,0))
-END IF
-
-IF (LUSERV ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rv    (NLES_K,NLES_TIMES))    ! <Rv>
-  ALLOCATE(XLES_UPDRAFT_WRv   (NLES_K,NLES_TIMES))    ! <w'Rv'>
-  ALLOCATE(XLES_UPDRAFT_Rv2   (NLES_K,NLES_TIMES))    ! <Rv'2>
-  ALLOCATE(XLES_UPDRAFT_ThRv  (NLES_K,NLES_TIMES))    ! <Th'Rv'>
-  ALLOCATE(XLES_UPDRAFT_ThvRv (NLES_K,NLES_TIMES))    ! <Thv'Rv'>
-  IF (LUSERC) THEN
-    ALLOCATE(XLES_UPDRAFT_ThlRv (NLES_K,NLES_TIMES))    ! <Thl'Rv'>
-  ELSE
-    ALLOCATE(XLES_UPDRAFT_ThlRv (0,0))
-  END IF
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rv    (0,0))
-  ALLOCATE(XLES_UPDRAFT_WRv   (0,0))
-  ALLOCATE(XLES_UPDRAFT_Rv2   (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThRv  (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThvRv (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThlRv (0,0))
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rc    (NLES_K,NLES_TIMES))    ! <Rc>
-  ALLOCATE(XLES_UPDRAFT_WRc   (NLES_K,NLES_TIMES))    ! <w'Rc'>
-  ALLOCATE(XLES_UPDRAFT_Rc2   (NLES_K,NLES_TIMES))    ! <Rc'2>
-  ALLOCATE(XLES_UPDRAFT_ThRc  (NLES_K,NLES_TIMES))    ! <Th'Rc'>
-  ALLOCATE(XLES_UPDRAFT_ThvRc (NLES_K,NLES_TIMES))    ! <Thv'Rc'>
-  ALLOCATE(XLES_UPDRAFT_ThlRc (NLES_K,NLES_TIMES))    ! <Thl'Rc'>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rc    (0,0))
-  ALLOCATE(XLES_UPDRAFT_WRc   (0,0))
-  ALLOCATE(XLES_UPDRAFT_Rc2   (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThRc  (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThvRc (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThlRc (0,0))
-END IF
-IF (LUSERR ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rr    (NLES_K,NLES_TIMES))    ! <Rr>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rr    (0,0))
-END IF
-IF (LUSERI ) THEN
-  ALLOCATE(XLES_UPDRAFT_Ri    (NLES_K,NLES_TIMES))    ! <Ri>
-  ALLOCATE(XLES_UPDRAFT_WRi   (NLES_K,NLES_TIMES))    ! <w'Ri'>
-  ALLOCATE(XLES_UPDRAFT_Ri2   (NLES_K,NLES_TIMES))    ! <Ri'2>
-  ALLOCATE(XLES_UPDRAFT_ThRi  (NLES_K,NLES_TIMES))    ! <Th'Ri'>
-  ALLOCATE(XLES_UPDRAFT_ThvRi (NLES_K,NLES_TIMES))    ! <Thv'Ri'>
-  ALLOCATE(XLES_UPDRAFT_ThlRi (NLES_K,NLES_TIMES))    ! <Thl'Ri'>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Ri    (0,0))
-  ALLOCATE(XLES_UPDRAFT_WRi   (0,0))
-  ALLOCATE(XLES_UPDRAFT_Ri2   (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThRi  (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThvRi (0,0))
-  ALLOCATE(XLES_UPDRAFT_ThlRi (0,0))
-END IF
-IF (LUSERS ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rs    (NLES_K,NLES_TIMES))    ! <Rs>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rs    (0,0))
-END IF
-IF (LUSERG ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rg    (NLES_K,NLES_TIMES))    ! <Rg>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rg    (0,0))
-END IF
-IF (LUSERH ) THEN
-  ALLOCATE(XLES_UPDRAFT_Rh    (NLES_K,NLES_TIMES))    ! <Rh>
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Rh    (0,0))
-END IF
-IF (NSV>0  ) THEN
-  ALLOCATE(XLES_UPDRAFT_Sv    (NLES_K,NLES_TIMES,NSV))! <Sv>
-  ALLOCATE(XLES_UPDRAFT_WSv   (NLES_K,NLES_TIMES,NSV))! <w'Sv'>
-  ALLOCATE(XLES_UPDRAFT_Sv2   (NLES_K,NLES_TIMES,NSV))! <Sv'2>
-  ALLOCATE(XLES_UPDRAFT_ThSv  (NLES_K,NLES_TIMES,NSV))! <Th'Sv'>
-  IF (LUSERV) THEN
-    ALLOCATE(XLES_UPDRAFT_ThvSv  (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'>
-  ELSE
-    ALLOCATE(XLES_UPDRAFT_ThvSv  (0,0,0))
-  END IF
-  IF (LUSERC) THEN
-    ALLOCATE(XLES_UPDRAFT_ThlSv  (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'>
-  ELSE
-    ALLOCATE(XLES_UPDRAFT_ThlSv  (0,0,0))
-  END IF
-ELSE
-  ALLOCATE(XLES_UPDRAFT_Sv    (0,0,0))
-  ALLOCATE(XLES_UPDRAFT_WSv   (0,0,0))
-  ALLOCATE(XLES_UPDRAFT_Sv2   (0,0,0))
-  ALLOCATE(XLES_UPDRAFT_ThSv  (0,0,0))
-  ALLOCATE(XLES_UPDRAFT_ThvSv (0,0,0))
-  ALLOCATE(XLES_UPDRAFT_ThlSv (0,0,0))
-END IF
-!
-!
-XLES_UPDRAFT     = XUNDEF
-XLES_UPDRAFT_W   = XUNDEF
-XLES_UPDRAFT_Th  = XUNDEF
-XLES_UPDRAFT_Thl = XUNDEF
-XLES_UPDRAFT_Tke  = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_Thv = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_Thl = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_Rv  = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_Rc  = XUNDEF
-IF (LUSERR ) XLES_UPDRAFT_Rr  = XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_Ri  = XUNDEF
-IF (LUSERS ) XLES_UPDRAFT_Rs  = XUNDEF
-IF (LUSERG ) XLES_UPDRAFT_Rg  = XUNDEF
-IF (LUSERH ) XLES_UPDRAFT_Rh  = XUNDEF
-IF (NSV>0  ) XLES_UPDRAFT_Sv  = XUNDEF
-XLES_UPDRAFT_Ke   = XUNDEF
-XLES_UPDRAFT_WTh  = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_WThv = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_WThl = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_WRv  = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_WRc  = XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_WRi  = XUNDEF
-IF (NSV>0  ) XLES_UPDRAFT_WSv  = XUNDEF
-XLES_UPDRAFT_Th2  = XUNDEF
-IF (LUSERV ) THEN
-  XLES_UPDRAFT_ThThv  = XUNDEF
-END IF
-IF (LUSERC ) THEN
-  XLES_UPDRAFT_Thl2   = XUNDEF
-  XLES_UPDRAFT_ThlThv = XUNDEF
-END IF
-IF (LUSERV ) XLES_UPDRAFT_Rv2  = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_Rc2  = XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_Ri2  = XUNDEF
-IF (NSV>0  ) XLES_UPDRAFT_Sv2  = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_ThRv = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_ThRc = XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_ThRi = XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_ThlRv= XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_ThlRc= XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_ThlRi= XUNDEF
-IF (NSV>0  ) XLES_UPDRAFT_ThSv = XUNDEF
-IF (LUSERV ) XLES_UPDRAFT_ThvRv= XUNDEF
-IF (LUSERC ) XLES_UPDRAFT_ThvRc= XUNDEF
-IF (LUSERI ) XLES_UPDRAFT_ThvRi= XUNDEF
-IF (NSV>0 .AND. LUSERV) XLES_UPDRAFT_ThvSv = XUNDEF
-IF (NSV>0 .AND. LUSERC) XLES_UPDRAFT_ThlSv = XUNDEF
-!
-!
-!*      7.7  downdraft quantities (only on the cartesian mask)
-!            --------------------
-!
-ALLOCATE(XLES_DOWNDRAFT       (NLES_K,NLES_TIMES))    ! updraft fraction
-ALLOCATE(XLES_DOWNDRAFT_W     (NLES_K,NLES_TIMES))    ! <w>
-ALLOCATE(XLES_DOWNDRAFT_Th    (NLES_K,NLES_TIMES))    ! <theta>
-ALLOCATE(XLES_DOWNDRAFT_Ke    (NLES_K,NLES_TIMES))    ! <E>
-ALLOCATE(XLES_DOWNDRAFT_WTh   (NLES_K,NLES_TIMES))    ! <w'theta'>
-ALLOCATE(XLES_DOWNDRAFT_Th2   (NLES_K,NLES_TIMES))    ! <th'2>
-ALLOCATE(XLES_DOWNDRAFT_Tke   (NLES_K,NLES_TIMES))    ! <e>
-
-IF (LUSERV) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Thv   (NLES_K,NLES_TIMES))    ! <thetav>
-  ALLOCATE(XLES_DOWNDRAFT_WThv  (NLES_K,NLES_TIMES))    ! <w'thv'>
-  ALLOCATE(XLES_DOWNDRAFT_ThThv (NLES_K,NLES_TIMES))    ! <th'thv'>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Thv   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WThv  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThThv (0,0))
-END IF
-!
-IF (LUSERC) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Thl   (NLES_K,NLES_TIMES))    ! <thetal>
-  ALLOCATE(XLES_DOWNDRAFT_WThl  (NLES_K,NLES_TIMES))    ! <w'thetal'>
-  ALLOCATE(XLES_DOWNDRAFT_Thl2  (NLES_K,NLES_TIMES))    ! <thl'2>
-  ALLOCATE(XLES_DOWNDRAFT_ThlThv(NLES_K,NLES_TIMES))    ! <thl'thv'>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Thl   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WThl  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_Thl2  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThlThv(0,0))
-END IF
-
-IF (LUSERV ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rv    (NLES_K,NLES_TIMES))    ! <Rv>
-  ALLOCATE(XLES_DOWNDRAFT_WRv   (NLES_K,NLES_TIMES))    ! <w'Rv'>
-  ALLOCATE(XLES_DOWNDRAFT_Rv2   (NLES_K,NLES_TIMES))    ! <Rv'2>
-  ALLOCATE(XLES_DOWNDRAFT_ThRv  (NLES_K,NLES_TIMES))    ! <Th'Rv'>
-  ALLOCATE(XLES_DOWNDRAFT_ThvRv (NLES_K,NLES_TIMES))    ! <Thv'Rv'>
-  IF (LUSERC) THEN
-    ALLOCATE(XLES_DOWNDRAFT_ThlRv (NLES_K,NLES_TIMES))    ! <Thl'Rv'>
-  ELSE
-    ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0))
-  END IF
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rv    (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WRv   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_Rv2   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThRv  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThvRv (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0))
-END IF
-IF (LUSERC ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rc    (NLES_K,NLES_TIMES))    ! <Rc>
-  ALLOCATE(XLES_DOWNDRAFT_WRc   (NLES_K,NLES_TIMES))    ! <w'Rc'>
-  ALLOCATE(XLES_DOWNDRAFT_Rc2   (NLES_K,NLES_TIMES))    ! <Rc'2>
-  ALLOCATE(XLES_DOWNDRAFT_ThRc  (NLES_K,NLES_TIMES))    ! <Th'Rc'>
-  ALLOCATE(XLES_DOWNDRAFT_ThvRc (NLES_K,NLES_TIMES))    ! <Thv'Rc'>
-  ALLOCATE(XLES_DOWNDRAFT_ThlRc (NLES_K,NLES_TIMES))    ! <Thl'Rc'>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rc    (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WRc   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_Rc2   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThRc  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThvRc (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThlRc (0,0))
-END IF
-IF (LUSERR ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rr    (NLES_K,NLES_TIMES))    ! <Rr>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rr    (0,0))
-END IF
-IF (LUSERI ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Ri    (NLES_K,NLES_TIMES))    ! <Ri>
-  ALLOCATE(XLES_DOWNDRAFT_WRi   (NLES_K,NLES_TIMES))    ! <w'Ri'>
-  ALLOCATE(XLES_DOWNDRAFT_Ri2   (NLES_K,NLES_TIMES))    ! <Ri'2>
-  ALLOCATE(XLES_DOWNDRAFT_ThRi  (NLES_K,NLES_TIMES))    ! <Th'Ri'>
-  ALLOCATE(XLES_DOWNDRAFT_ThvRi (NLES_K,NLES_TIMES))    ! <Thv'Ri'>
-  ALLOCATE(XLES_DOWNDRAFT_ThlRi (NLES_K,NLES_TIMES))    ! <Thl'Ri'>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Ri    (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WRi   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_Ri2   (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThRi  (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThvRi (0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThlRi (0,0))
-END IF
-IF (LUSERS ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rs    (NLES_K,NLES_TIMES))    ! <Rs>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rs    (0,0))
-END IF
-IF (LUSERG ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rg    (NLES_K,NLES_TIMES))    ! <Rg>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rg    (0,0))
-END IF
-IF (LUSERH ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Rh    (NLES_K,NLES_TIMES))    ! <Rh>
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Rh    (0,0))
-END IF
-IF (NSV>0  ) THEN
-  ALLOCATE(XLES_DOWNDRAFT_Sv    (NLES_K,NLES_TIMES,NSV))! <Sv>
-  ALLOCATE(XLES_DOWNDRAFT_WSv   (NLES_K,NLES_TIMES,NSV))! <w'Sv'>
-  ALLOCATE(XLES_DOWNDRAFT_Sv2   (NLES_K,NLES_TIMES,NSV))! <Sv'2>
-  ALLOCATE(XLES_DOWNDRAFT_ThSv  (NLES_K,NLES_TIMES,NSV))! <Th'Sv'>
-  IF (LUSERV) THEN
-    ALLOCATE(XLES_DOWNDRAFT_ThvSv  (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'>
-  ELSE
-    ALLOCATE(XLES_DOWNDRAFT_ThvSv  (0,0,0))
-  END IF
-  IF (LUSERC) THEN
-    ALLOCATE(XLES_DOWNDRAFT_ThlSv  (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'>
-  ELSE
-    ALLOCATE(XLES_DOWNDRAFT_ThlSv  (0,0,0))
-  END IF
-ELSE
-  ALLOCATE(XLES_DOWNDRAFT_Sv    (0,0,0))
-  ALLOCATE(XLES_DOWNDRAFT_WSv   (0,0,0))
-  ALLOCATE(XLES_DOWNDRAFT_Sv2   (0,0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThSv  (0,0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThvSv (0,0,0))
-  ALLOCATE(XLES_DOWNDRAFT_ThlSv (0,0,0))
-END IF
-!
-!
-XLES_DOWNDRAFT     = XUNDEF
-XLES_DOWNDRAFT_W   = XUNDEF
-XLES_DOWNDRAFT_Th  = XUNDEF
-XLES_DOWNDRAFT_Thl = XUNDEF
-XLES_DOWNDRAFT_Tke  = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_Thv = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_Thl = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_Rv  = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_Rc  = XUNDEF
-IF (LUSERR ) XLES_DOWNDRAFT_Rr  = XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_Ri  = XUNDEF
-IF (LUSERS ) XLES_DOWNDRAFT_Rs  = XUNDEF
-IF (LUSERG ) XLES_DOWNDRAFT_Rg  = XUNDEF
-IF (LUSERH ) XLES_DOWNDRAFT_Rh  = XUNDEF
-IF (NSV>0  ) XLES_DOWNDRAFT_Sv  = XUNDEF
-XLES_DOWNDRAFT_Ke   = XUNDEF
-XLES_DOWNDRAFT_WTh  = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_WThv = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_WThl = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_WRv  = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_WRc  = XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_WRi  = XUNDEF
-IF (NSV>0  ) XLES_DOWNDRAFT_WSv  = XUNDEF
-XLES_DOWNDRAFT_Th2  = XUNDEF
-IF (LUSERV ) THEN
-  XLES_DOWNDRAFT_ThThv  = XUNDEF
-END IF
-IF (LUSERC ) THEN
-  XLES_DOWNDRAFT_Thl2   = XUNDEF
-  XLES_DOWNDRAFT_ThlThv = XUNDEF
-END IF
-IF (LUSERV ) XLES_DOWNDRAFT_Rv2  = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_Rc2  = XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_Ri2  = XUNDEF
-IF (NSV>0  ) XLES_DOWNDRAFT_Sv2  = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_ThRv = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_ThRc = XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_ThRi = XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_ThlRv= XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_ThlRc= XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_ThlRi= XUNDEF
-IF (NSV>0  ) XLES_DOWNDRAFT_ThSv = XUNDEF
-IF (LUSERV ) XLES_DOWNDRAFT_ThvRv= XUNDEF
-IF (LUSERC ) XLES_DOWNDRAFT_ThvRc= XUNDEF
-IF (LUSERI ) XLES_DOWNDRAFT_ThvRi= XUNDEF
-IF (NSV>0 .AND. LUSERV) XLES_DOWNDRAFT_ThvSv = XUNDEF
-IF (NSV>0 .AND. LUSERC) XLES_DOWNDRAFT_ThlSv = XUNDEF
-!
-!*      7.8  production terms
-!            ----------------
-!
-ALLOCATE(XLES_BU_RES_KE   (NLES_K,NLES_TIMES,NLES_TOT))
-ALLOCATE(XLES_BU_RES_WThl (NLES_K,NLES_TIMES,NLES_TOT))
-ALLOCATE(XLES_BU_RES_Thl2 (NLES_K,NLES_TIMES,NLES_TOT))
-ALLOCATE(XLES_BU_SBG_TKE  (NLES_K,NLES_TIMES,NLES_TOT))
-XLES_BU_RES_KE    = 0.
-XLES_BU_RES_WThl  = 0.
-XLES_BU_RES_Thl2  = 0.
-XLES_BU_SBG_TKE   = 0.
-IF (LUSERV) THEN
-  ALLOCATE(XLES_BU_RES_WRt  (NLES_K,NLES_TIMES,NLES_TOT))
-  ALLOCATE(XLES_BU_RES_Rt2  (NLES_K,NLES_TIMES,NLES_TOT))
-  ALLOCATE(XLES_BU_RES_ThlRt(NLES_K,NLES_TIMES,NLES_TOT))
-  XLES_BU_RES_WRt   = 0.
-  XLES_BU_RES_Rt2   = 0.
-  XLES_BU_RES_ThlRt = 0.
-END IF
-ALLOCATE(XLES_BU_RES_WSv (NLES_K,NLES_TIMES,NLES_TOT,NSV))
-ALLOCATE(XLES_BU_RES_Sv2 (NLES_K,NLES_TIMES,NLES_TOT,NSV))
-IF (NSV>0) THEN
-  XLES_BU_RES_WSv = 0.
-  XLES_BU_RES_Sv2 = 0.
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      8.   Allocations of the normalization variables temporal series
-!            ----------------------------------------------------------
-!
-ALLOCATE(XLES_UW0       (NLES_TIMES))
-ALLOCATE(XLES_VW0       (NLES_TIMES))
-ALLOCATE(XLES_USTAR     (NLES_TIMES))
-ALLOCATE(XLES_WSTAR     (NLES_TIMES))
-ALLOCATE(XLES_Q0        (NLES_TIMES))
-ALLOCATE(XLES_E0        (NLES_TIMES))
-ALLOCATE(XLES_SV0       (NLES_TIMES,NSV))
-ALLOCATE(XLES_BL_HEIGHT (NLES_TIMES))
-ALLOCATE(XLES_MO_LENGTH (NLES_TIMES))
-ALLOCATE(XLES_ZCB       (NLES_TIMES))
-ALLOCATE(XLES_CFtot     (NLES_TIMES))
-ALLOCATE(XLES_CF2tot    (NLES_TIMES))
-ALLOCATE(XLES_LWP       (NLES_TIMES))
-ALLOCATE(XLES_LWPVAR    (NLES_TIMES))
-ALLOCATE(XLES_RWP       (NLES_TIMES))
-ALLOCATE(XLES_IWP       (NLES_TIMES))
-ALLOCATE(XLES_SWP       (NLES_TIMES))
-ALLOCATE(XLES_GWP       (NLES_TIMES))
-ALLOCATE(XLES_HWP       (NLES_TIMES))
-ALLOCATE(XLES_INT_TKE   (NLES_TIMES))
-ALLOCATE(XLES_ZMAXCF    (NLES_TIMES))
-ALLOCATE(XLES_ZMAXCF2   (NLES_TIMES))  
-ALLOCATE(XLES_INPRR     (NLES_TIMES))
-ALLOCATE(XLES_INPRC     (NLES_TIMES))
-ALLOCATE(XLES_INDEP     (NLES_TIMES))
-ALLOCATE(XLES_RAIN_INPRR(NLES_TIMES))
-ALLOCATE(XLES_ACPRR     (NLES_TIMES))
-ALLOCATE(XLES_PRECFR    (NLES_TIMES))
-ALLOCATE(XLES_SWU       (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_SWD       (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_LWU       (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_LWD       (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_DTHRADSW  (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_DTHRADLW  (NLES_K,NLES_TIMES))
-ALLOCATE(XLES_RADEFF    (NLES_K,NLES_TIMES))
-!
-XLES_UW0       = XUNDEF
-XLES_VW0       = XUNDEF
-XLES_USTAR     = XUNDEF
-XLES_WSTAR     = XUNDEF
-XLES_Q0        = XUNDEF
-XLES_E0        = XUNDEF
-XLES_SV0       = XUNDEF
-XLES_BL_HEIGHT = XUNDEF
-XLES_MO_LENGTH = XUNDEF
-XLES_ZCB       = XUNDEF
-XLES_CFtot     = XUNDEF
-XLES_CF2tot    = XUNDEF  
-XLES_LWP       = XUNDEF
-XLES_LWPVAR    = XUNDEF
-XLES_RWP       = XUNDEF
-XLES_IWP       = XUNDEF
-XLES_SWP       = XUNDEF
-XLES_GWP       = XUNDEF
-XLES_HWP       = XUNDEF
-XLES_INT_TKE   = XUNDEF
-XLES_ZMAXCF    = XUNDEF
-XLES_ZMAXCF2   = XUNDEF  
-XLES_PRECFR    = XUNDEF
-XLES_ACPRR     = XUNDEF
-XLES_INPRR     = XUNDEF
-XLES_INPRC     = XUNDEF
-XLES_INDEP     = XUNDEF
-XLES_RAIN_INPRR = XUNDEF
-XLES_SWU        = XUNDEF
-XLES_SWD        = XUNDEF
-XLES_LWU        = XUNDEF
-XLES_LWD        = XUNDEF
-XLES_DTHRADSW   = XUNDEF
-XLES_DTHRADLW   = XUNDEF
-XLES_RADEFF     = XUNDEF
-!
-!-------------------------------------------------------------------------------
-!
-!*      9.   Allocations of the normalization variables temporal series
-!            ----------------------------------------------------------
-!
-!       9.1  Two-points correlations in I direction
-!            --------------------------------------
-!
-ALLOCATE(XCORRi_UU    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between u and u
-ALLOCATE(XCORRi_VV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between v and v
-ALLOCATE(XCORRi_UV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between u and v
-ALLOCATE(XCORRi_WU    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and u
-ALLOCATE(XCORRi_WV    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and v
-ALLOCATE(XCORRi_WW    (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and w
-ALLOCATE(XCORRi_WTh   (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and theta
-ALLOCATE(XCORRi_ThTh  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between theta and theta
-IF (LUSERC) THEN
-  ALLOCATE(XCORRi_WThl  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))    ! between w and thetal
-  ALLOCATE(XCORRi_ThlThl(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))   ! between thetal and thetal
-ELSE
-  ALLOCATE(XCORRi_WThl  (0,0,0))
-  ALLOCATE(XCORRi_ThlThl(0,0,0))
-END IF
-
-
-IF (LUSERV ) THEN
-  ALLOCATE(XCORRi_WRv  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Rv
-  ALLOCATE(XCORRi_ThRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rv
-  IF (LUSERC) THEN
-    ALLOCATE(XCORRi_ThlRv(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rv
-  ELSE
-    ALLOCATE(XCORRi_ThlRv(0,0,0))
-  END IF
-  ALLOCATE(XCORRi_RvRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rv and Rv
-ELSE
-  ALLOCATE(XCORRi_WRv  (0,0,0))
-  ALLOCATE(XCORRi_ThRv (0,0,0))
-  ALLOCATE(XCORRi_ThlRv(0,0,0))
-  ALLOCATE(XCORRi_RvRv (0,0,0))
-END IF
-
-IF (LUSERC ) THEN
-  ALLOCATE(XCORRi_WRc  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Rc
-  ALLOCATE(XCORRi_ThRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
-  ALLOCATE(XCORRi_ThlRc(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
-  ALLOCATE(XCORRi_RcRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
-ELSE
-  ALLOCATE(XCORRi_WRc  (0,0,0))
-  ALLOCATE(XCORRi_ThRc (0,0,0))
-  ALLOCATE(XCORRi_ThlRc(0,0,0))
-  ALLOCATE(XCORRi_RcRc (0,0,0))
-END IF
-
-IF (LUSERI ) THEN
-  ALLOCATE(XCORRi_WRi  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between w and Ri
-  ALLOCATE(XCORRi_ThRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
-  ALLOCATE(XCORRi_ThlRi(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
-  ALLOCATE(XCORRi_RiRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
-ELSE
-  ALLOCATE(XCORRi_WRi  (0,0,0))
-  ALLOCATE(XCORRi_ThRi (0,0,0))
-  ALLOCATE(XCORRi_ThlRi(0,0,0))
-  ALLOCATE(XCORRi_RiRi (0,0,0))
-END IF
-
-IF (NSV>0  ) THEN
-  ALLOCATE(XCORRi_WSv  (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv
-  ALLOCATE(XCORRi_SvSv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv
-ELSE
-  ALLOCATE(XCORRi_WSv  (0,0,0,0))
-  ALLOCATE(XCORRi_SvSv (0,0,0,0))
-END IF
-!
-!
-XCORRi_UU  = XUNDEF
-XCORRi_VV  = XUNDEF
-XCORRi_UV  = XUNDEF
-XCORRi_WU  = XUNDEF
-XCORRi_WV  = XUNDEF
-XCORRi_WW  = XUNDEF
-XCORRi_WTh = XUNDEF
-IF (LUSERC ) XCORRi_WThl= XUNDEF
-IF (LUSERV ) XCORRi_WRv = XUNDEF
-IF (LUSERC ) XCORRi_WRc = XUNDEF
-IF (LUSERI ) XCORRi_WRi = XUNDEF
-IF (NSV>0  ) XCORRi_WSv = XUNDEF
-XCORRi_ThTh  = XUNDEF
-IF (LUSERC ) XCORRi_ThlThl= XUNDEF
-IF (LUSERV ) XCORRi_ThRv = XUNDEF
-IF (LUSERC ) XCORRi_ThRc = XUNDEF
-IF (LUSERI ) XCORRi_ThRi = XUNDEF
-IF (LUSERC ) XCORRi_ThlRv= XUNDEF
-IF (LUSERC ) XCORRi_ThlRc= XUNDEF
-IF (LUSERI ) XCORRi_ThlRi= XUNDEF
-IF (LUSERV ) XCORRi_RvRv = XUNDEF
-IF (LUSERC ) XCORRi_RcRc = XUNDEF
-IF (LUSERI ) XCORRi_RiRi = XUNDEF
-IF (NSV>0  ) XCORRi_SvSv = XUNDEF
-!
-!
-!       9.2  Two-points correlations in J direction
-!            --------------------------------------
-!
-ALLOCATE(XCORRj_UU    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between u and u
-ALLOCATE(XCORRj_VV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between v and v
-ALLOCATE(XCORRj_UV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between u and v
-ALLOCATE(XCORRj_WU    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and u
-ALLOCATE(XCORRj_WV    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and v
-ALLOCATE(XCORRj_WW    (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and w
-ALLOCATE(XCORRj_WTh   (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and theta
-ALLOCATE(XCORRj_ThTh  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between theta and theta
-IF (LUSERC) THEN
-  ALLOCATE(XCORRj_WThl  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))    ! between w and thetal
-  ALLOCATE(XCORRj_ThlThl(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))   ! between thetal and thetal
-ELSE
-  ALLOCATE(XCORRj_WThl  (0,0,0))
-  ALLOCATE(XCORRj_ThlThl(0,0,0))
-END IF
-
-IF (LUSERV ) THEN
-  ALLOCATE(XCORRj_WRv  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Rv
-  ALLOCATE(XCORRj_ThRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rv
-  IF (LUSERC) THEN
-    ALLOCATE(XCORRj_ThlRv(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rv
-  ELSE
-    ALLOCATE(XCORRj_ThlRv(0,0,0))
-  END IF
-  ALLOCATE(XCORRj_RvRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rv and Rv
-ELSE
-  ALLOCATE(XCORRj_WRv  (0,0,0))
-  ALLOCATE(XCORRj_ThRv (0,0,0))
-  ALLOCATE(XCORRj_ThlRv(0,0,0))
-  ALLOCATE(XCORRj_RvRv (0,0,0))
-END IF
-
-IF (LUSERC ) THEN
-  ALLOCATE(XCORRj_WRc  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Rc
-  ALLOCATE(XCORRj_ThRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
-  ALLOCATE(XCORRj_ThlRc(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
-  ALLOCATE(XCORRj_RcRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
-ELSE
-  ALLOCATE(XCORRj_WRc  (0,0,0))
-  ALLOCATE(XCORRj_ThRc (0,0,0))
-  ALLOCATE(XCORRj_ThlRc(0,0,0))
-  ALLOCATE(XCORRj_RcRc (0,0,0))
-END IF
-
-IF (LUSERI ) THEN
-  ALLOCATE(XCORRj_WRi  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between w and Ri
-  ALLOCATE(XCORRj_ThRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between theta and Rc
-  ALLOCATE(XCORRj_ThlRi(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between thetal and Rc
-  ALLOCATE(XCORRj_RiRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES))     ! between Rc and Rc
-ELSE
-  ALLOCATE(XCORRj_WRi  (0,0,0))
-  ALLOCATE(XCORRj_ThRi (0,0,0))
-  ALLOCATE(XCORRj_ThlRi(0,0,0))
-  ALLOCATE(XCORRj_RiRi (0,0,0))
-END IF
-
-IF (NSV>0  ) THEN
-  ALLOCATE(XCORRj_WSv  (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv
-  ALLOCATE(XCORRj_SvSv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv
-ELSE
-  ALLOCATE(XCORRj_WSv  (0,0,0,0))
-  ALLOCATE(XCORRj_SvSv (0,0,0,0))
-END IF
-!
-!
-XCORRj_UU  = XUNDEF
-XCORRj_VV  = XUNDEF
-XCORRj_UV  = XUNDEF
-XCORRj_WU  = XUNDEF
-XCORRj_WV  = XUNDEF
-XCORRj_WW  = XUNDEF
-XCORRj_WTh = XUNDEF
-IF (LUSERC ) XCORRj_WThl= XUNDEF
-IF (LUSERV ) XCORRj_WRv = XUNDEF
-IF (LUSERC ) XCORRj_WRc = XUNDEF
-IF (LUSERI ) XCORRj_WRi = XUNDEF
-IF (NSV>0  ) XCORRj_WSv = XUNDEF
-XCORRj_ThTh  = XUNDEF
-IF (LUSERC ) XCORRj_ThlThl= XUNDEF
-IF (LUSERV ) XCORRj_ThRv = XUNDEF
-IF (LUSERC ) XCORRj_ThRc = XUNDEF
-IF (LUSERI ) XCORRj_ThRi = XUNDEF
-IF (LUSERC ) XCORRj_ThlRv= XUNDEF
-IF (LUSERC ) XCORRj_ThlRc= XUNDEF
-IF (LUSERI ) XCORRj_ThlRi= XUNDEF
-IF (LUSERV ) XCORRj_RvRv = XUNDEF
-IF (LUSERC ) XCORRj_RcRc = XUNDEF
-IF (LUSERI ) XCORRj_RiRi = XUNDEF
-IF (NSV>0  ) XCORRj_SvSv = XUNDEF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE INI_LES_n
diff --git a/src/mesonh/ext/ini_radar.f90 b/src/mesonh/ext/ini_radar.f90
deleted file mode 100644
index dbc94a72621630ef82491f6541fd803553260fef..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ini_radar.f90
+++ /dev/null
@@ -1,234 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! masdev4_7 BUG1 2007/06/15 17:47:18
-!-----------------------------------------------------------------
-!      ########################
-       MODULE MODI_INI_RADAR
-!      ########################
-!
-INTERFACE
-      SUBROUTINE INI_RADAR (HPRISTINE_ICE  )
-!
-CHARACTER (LEN=4), INTENT(IN) :: HPRISTINE_ICE ! Indicator of ice crystal characteristics
-!
-!
-END SUBROUTINE INI_RADAR
-!
-END INTERFACE
-!
-END MODULE MODI_INI_RADAR
-!     ###########################################################
-      SUBROUTINE INI_RADAR ( HPRISTINE_ICE )
-!     ###########################################################
-!
-!!****  *INI_RADAR * 
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to initialize the constants used to 
-!!    compute radar reflectivity (radar_rain_ice.f90 or radar_simulator.f90)
-!!    for DIAG after PREP_REAL_CASE with AROME file (CCLOUD=NONE)
-!!
-!!**  METHOD
-!!    ------
-!!      The constants useful to radar are initialized to their 
-!!      numerical values as in ini_rain_ice.f90 for ICE3 
-!!
-!!    EXTERNAL
-!!    --------
-!!      GAMMA    :  gamma function
-!!     
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST
-!!        XPI                  !
-!!        XP00                 ! Reference pressure
-!!        XRD                  ! Gaz constant for dry air
-!!        XRHOLW               ! Liquid water density
-!!      Module MODD_RAIN_ICE_DESCR
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      G. TANGUY * CNRM *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    27/10/2009
-!!      P.Scheffknecht 22/04/2015: test missing on already allocated XRTMIN 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST
-USE MODD_RAIN_ICE_DESCR
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-!
-CHARACTER (LEN=4), INTENT(IN)       :: HPRISTINE_ICE    ! Indicator of ice crystal caracteristics
-!
-!-------------------------------------------------------------------------------
-!
-!
-!
-!*      1.1    Raindrop characteristics
-!
-!
-!
-XAR = (XPI/6.0)*XRHOLW
-XBR = 3.0
-XCR = 842.
-XDR = 0.8
-XCCR = 8.E6   
-!
-!*       1.2    Ice crystal characteristics
-!
-!
-SELECT CASE (HPRISTINE_ICE)
-  CASE('PLAT')
-    XAI = 0.82      ! Plates
-    XBI = 2.5       ! Plates 
-    XC_I = 800.     ! Plates
-    XDI = 1.0       ! Plates
-  CASE('COLU')
-    XAI = 2.14E-3   ! Columns
-    XBI = 1.7       ! Columns
-    XC_I = 2.1E5    ! Columns
-    XDI = 1.585     ! Columns
-  CASE('BURO')
-    XAI = 44.0      ! Bullet rosettes
-    XBI = 3.0       ! Bullet rosettes
-    XC_I = 4.3E5    ! Bullet rosettes
-    XDI = 1.663     ! Bullet rosettes
-END SELECT
-!
-!
-!*       1.3    Snowflakes/aggregates characteristics
-!
-!
-XAS = 0.02
-XBS = 1.9
-XCS = 5.1
-XDS = 0.27
-XCCS = 5.0
-XCXS = 1.0
-!
-!*      1.4    Graupel/Frozen drop characteristics
-!
-!
-XAG = 19.6 
-XBG = 2.8 
-XCG = 124. 
-XDG = 0.66 
-XCCG = 5.E5
-XCXG = -0.5
-!
-!*       1.5    Hailstone characteristics
-!
-!
-XAH = 470.
-XBH = 3.0
-XCH = 207.
-XDH = 0.64
-XCCH = 4.E4 
-XCXH = -1.0 
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.     DIMENSIONAL DISTRIBUTIONS OF THE SPECIES
-!	            ----------------------------------------
-!
-!*       2.1    Raindrops distribution
-!
-XALPHAR = 1.0  ! Exponential law
-XNUR    = 1.0  ! Exponential law
-!
-!*       2.2    Ice crystal distribution
-!
-XALPHAI = 3.0  ! Gamma law for the ice crystal volume
-XNUI    = 3.0  ! Gamma law with little dispersion
-!
-XALPHAS = 1.0  ! Exponential law
-XNUS    = 1.0  ! Exponential law
-!
-XALPHAG = 1.0  ! Exponential law
-XNUG    = 1.0  ! Exponential law
-!
-XALPHAH = 1.0  ! Gamma law
-XNUH    = 8.0  ! Gamma law with little dispersion
-!
-!*       2.3    Constants for shape parameter
-!
-XLBEXR = 1.0/(-1.0-XBR)
-XLBR   = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR)
-!
-XLBEXI = 1.0/(-XBI)
-XLBI   = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI)
-!
-XNS   = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS))
-XLBEXS = 1.0/(XCXS-XBS)
-XLBS   = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS)
-!
-XLBEXG = 1.0/(XCXG-XBG)
-XLBG   = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG) )**(-XLBEXG)
-!
-XLBEXH = 1.0/(XCXH-XBH)
-XLBH   = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH)
-!
-!*       2.4    Minimal values allowed for the mixing ratios
-! ICE3
-IF(.NOT.ASSOCIATED(XRTMIN)) THEN
- CALL RAIN_ICE_DESCR_ALLOCATE(6)
-END IF
-!
-XRTMIN(1) = 1.0E-20
-XRTMIN(2) = 1.0E-20
-XRTMIN(3) = 1.0E-20
-XRTMIN(4) = 1.0E-20
-XRTMIN(5) = 1.0E-15
-XRTMIN(6) = 1.0E-15
-
-!
-CONTAINS
-!
-!------------------------------------------------------------------------------
-!
-  FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
-!
-! auxiliary routine used to compute the Pth moment order of the generalized
-! gamma law
-!
-  USE MODI_GAMMA
-
-  IMPLICIT NONE
-
-  REAL     :: PALPHA ! first shape parameter of the dimensionnal distribution
-  REAL     :: PNU    ! second shape parameter of the dimensionnal distribution
-  REAL     :: PP     ! order of the moment
-  REAL     :: PMOMG  ! result: moment of order ZP
-
-!------------------------------------------------------------------------------
-
-
-  PMOMG = GAMMA(PNU+PP/PALPHA)/GAMMA(PNU)
-
-  END FUNCTION MOMG
-
-!-------------------------------------------------------------------------------
-!
-!
-END SUBROUTINE INI_RADAR
-
-
diff --git a/src/mesonh/ext/ini_segn.f90 b/src/mesonh/ext/ini_segn.f90
deleted file mode 100644
index c581f7c0140586a06e2e0309fff7d0e1ceedd4ca..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/ini_segn.f90
+++ /dev/null
@@ -1,494 +0,0 @@
-!MNH_LIC Copyright 1994-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_INI_SEG_n
-!     ###################
-!
-INTERFACE
-!
-SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
-!
-USE MODD_IO, ONLY : TFILEDATA
-!
-INTEGER,                    INTENT(IN)    :: KMI          !Model index
-TYPE(TFILEDATA),   POINTER, INTENT(OUT)   :: TPINIFILE    !Initial file
-CHARACTER (LEN=28),         INTENT(OUT)   :: HINIFILEPGD
-REAL,DIMENSION(:),          INTENT(INOUT) :: PTSTEP_ALL   ! Time STEP of ALL models
-!
-END SUBROUTINE INI_SEG_n
-!
-END INTERFACE
-!
-END MODULE MODI_INI_SEG_n
-!
-!
-!
-!
-!     #############################################################
-      SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
-!     #############################################################
-!
-!!****  *INI_SEG_n * - routine to read and update the descriptor files for
-!!                   model KMI
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to read the descriptor files in the
-!     following order :
-!         - DESFM file which gives informations about the initial file
-!     (i.e. the description of the segment that produced the initial file
-!     or the description of the preinitialisation that created the initial file)
-!         - EXSEG file which gives informations about the segment to perform.
-!
-!      Informations in EXSEG file are completed by DESFM file informations
-!      and if the informations are not in DESFM file, they are  set
-!      to default values.
-!
-!        The descriptor file EXSEG corresponding to the segment of simulation
-!      to be performed, is then updated with the combined informations.
-!      We also store in the updated EXSEG file, the informations on the status
-!      of the different variables ( skip, init, read) in the namelist NAM_GETn,
-!      which will be read in the INI_MODELn routine to properly initiliaze the
-!      model n. Except this last namelist, the informations written in this
-!      EXSEG file, will be identical to the NAMELIST section of the descriptive
-!      part of the FM files containing the model outputs.
-!
-!        In order not to duplicate the routines called by ini_seg, we use the
-!      modules modd, corresponding to the first model to store the informations
-!      read on the different files ( DESFM and EXSEG ). The final filling of
-!      the modules modd (MODD_CONFn ....) will be realized in the subroutine
-!      INI_MODELn. The goal of the INI_SEG_n part of the initialization is to
-!      built the final EXSEG, which will be associated to the LFI files
-!      generated during the segment ( and therefore not to fill the modd).
-!
-!
-!!**  METHOD
-!!    ------
-!!      For a nested model of index KMI :
-!!         - Logical unit numbers  are associated to output-listing file and
-!!      descriptor EXSEG  file by FMATTR. Then these files are   opened.
-!!      The  name of the initial file is read in EXSEG file.
-!!         - Default values are supplied for variables in descriptor files
-!!      (by DEFAULT_DESFM).
-!!         - The Initial file (LFIFM + DESFM) is opened by IO_File_open.
-!!         - The descriptor DESFM file is read (by READ_DESFM_n).
-!!         - The descriptor file EXSEG is read (by READ_EXSEG_n) and coherence
-!!      between the initial file and the description of segment is also checked
-!!      in this routine.
-!!         - If there is more than one model the EXSEG file is updated
-!!     (by WRITE_DESFM$n).  This routine prints also EXSEG content on
-!!     output-listing.
-!!         - If there is only one model (i.e. no grid-nesting),
-!!      EXSEG  file is also closed (logical unit number associated with this
-!!      file is also released by FMFREE).
-!!
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!      FMATTR        : to associate a logical unit number to a file
-!!      IO_File_open : to open descriptor file or LFI file
-!!      DEFAULT_DESFM1: to set default values
-!!      READ_DESFM_n    : to read a DESFM file
-!!      READ_EXSEG_n    : to read a EXSEG file
-!!      WRITE_DESFM1   : to write the DESFM part of the future outputs
-!!      FMFREE        : to release a logical unit number linked to a file
-!!
-!!      Module MODI_DEFAULT_DESFM    : Interface for routine DEFAULT_DESFM
-!!      Module MODI_READ_DESFM_n    : Interface for routine  READ_DESFM_n
-!!      Module MODI_READ_EXSEG_n    : Interface for routine  READ_EXSEG_n
-!!      Module MODI_WRITE_DESFM1   : Interface for routine  WRITE_DESFM1
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_LUNIT  : contains names and logical unit numbers
-!!
-!!      Module MODD_CONF   : contains configuration variables
-!!         CCONF      : Configuration of models
-!!         NMODEL     : Number of nested models
-!!         NVERB      : Level of informations on output-listing
-!!                          0 for minimum of prints
-!!                          5 for intermediate level of prints
-!!                         10 for maximum of prints
-!!
-!!      Module MODN_LUNIT1 : contains declarations of namelist NAMLUNITMN
-!!                           and module MODD_LUNIT1
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book2 of documentation (routine INI_SEG)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!	V. Ducrocq       * Meteo France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         07/06/94
-!!      Modification     26/10/94  remove the NAM_GETn from the namelist present
-!!                                 in the EXSEG file  (J.Stein)
-!!                       11/01/95  change the read_exseg and desfm CALLS to add
-!!                                 the G1D switch
-!!                       15/02/95  add the HTURBLEN information (J. Cuxart)
-!!                       18/08/95  Time STEP change          (J. P. Lafore)
-!!                       02/10/95  add the radiation control (J. Stein)
-!!                       18/03/96  remove the no write option for WRITE_DESFM
-!!                                  (J. Stein)
-!!                       11/04/96  add the ice conc. control (J.-P. Pinty)
-!!                       11/01/97  add the deep convection control (J.-P. Pinty)
-!!                       17/07/96  correction for WRITE_DESFM1 call (J. P. Lafore)
-!!                       22/07/96  PTSTEP_ALL introduction for nesting (J. P. Lafore)
-!!                        7/08/98    //     (V. Ducrocq)
-!!                       02/08/99  remove unused argument for read_desfm (J. Stein)
-!!                       15/03/99  test on execution program (V. Masson)
-!!                       15/11/00  Add YCLOUD (J.-P. Pinty)
-!!                       01/03/01  Add GUSECHEM (D. Gazen)
-!!                       15/10/01  namelists in different orders (I.Mallet)
-!!                       25/11/02  Add YELEC (P. Jabouille)
-!!                       01/2004   externalization of surface (V. Masson)
-!!                       01/2005   add GDUST, GSALT, and GORILAM (P. Tulet)
-!!                       04/2010   add GUSECHAQ, GCH_PH (M. Leriche)
-!!                       09/2010   add GUSECHIC (M. Leriche)
-!!                       02/2012   add GFOREFIRE (Pialat/Tulet)
-!!                       05/2014   missing reading of IMASDEV before COUPLING
-!!                                 test (Escobar)
-!!                       10/02/15  remove ABORT in parallel case for SPAWNING
-!!   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!!                       01/2015   add GLNOX_EXPLICIT (C. Barthe)
-!!                       04/2016   add ABORT if CINIFILEPGD is not specified (G.Delautier)
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!                       07/2017   add GBLOWSNOW (V. Vionnet)
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
-!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!  P. Wautelet 19/06/2019: add Fieldlist_nmodel_resize subroutine + provide KMODEL to INI_FIELD_LIST when known
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODD_CONF
-USE MODD_CONF_n,           ONLY: CSTORAGE_TYPE
-USE MODN_CONFZ
-USE MODD_DYN_n,            ONLY : LOCEAN
-USE MODD_DYN
-USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA
-USE MODD_LES,              ONLY: LES_ASSOCIATE
-USE MODD_LUNIT
-USE MODD_LUNIT_n,          ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL
-USE MODD_PARAM_n,          ONLY: CSURF
-USE MODD_PARAM_ICE
-USE MODD_PARAMETERS
-USE MODD_REF,              ONLY: LBOUSS
-!
-use mode_field,            only: Fieldlist_nmodel_resize, Ini_field_list, Ini_field_scalars
-USE MODE_IO_FIELD_READ,    only: IO_Field_read
-USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
-USE MODE_IO,               only: IO_Config_set
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
-USE MODE_MSG
-USE MODE_POS
-!
-USE MODI_DEFAULT_DESFM_n
-USE MODI_READ_DESFM_n
-USE MODI_READ_EXSEG_n
-USE MODI_WRITE_DESFM_n
-!
-USE MODN_CONFIO,           ONLY: NAM_CONFIO
-USE MODN_LUNIT_n
-USE MODN_FIRE
-!
-IMPLICIT NONE
-!
-!*       0.1   declarations of arguments
-!
-INTEGER,                    INTENT(IN)    :: KMI          !Model index
-TYPE(TFILEDATA),   POINTER, INTENT(OUT)   :: TPINIFILE    !Initial file
-CHARACTER (LEN=28),         INTENT(OUT)   :: HINIFILEPGD
-REAL,DIMENSION(:),          INTENT(INOUT) :: PTSTEP_ALL   ! Time STEP of ALL models
-!
-!*       0.1   declarations of local variables
-!
-LOGICAL            :: GFOUND              ! Return code when searching namelist
-CHARACTER (LEN=28) :: YINIFILE                    ! name of initial file
-CHARACTER (LEN=2)  :: YMI                         ! string for model index
-INTEGER            :: ILUOUT                      ! Logical unit number
-                                                  ! associated with TLUOUT
-                                                  !
-INTEGER            :: IRESP,ILUSEG                ! File management variables
-CHARACTER (LEN=5)  :: YCONF                       ! Local variables which have
-LOGICAL            :: GFLAT                       ! the same definition as the
-LOGICAL            :: GUSERV,GUSERC,GUSERR,GUSERI ! variables in module MODD_CONF,
-LOGICAL            :: GUSERS,GUSERG,GUSERH,GUSECI ! MODD_CONFn, MODD_PARAMn,
-LOGICAL            :: GUSECHEM                    ! flag for chemistry
-LOGICAL            :: GUSECHAQ                    ! flag for aq. phase chemistry
-LOGICAL            :: GUSECHIC                    ! flag for ice phase chemistry
-LOGICAL            :: GCH_PH                      ! flag for pH
-LOGICAL            :: GCH_CONV_LINOX
-LOGICAL            :: GDUST
-LOGICAL,DIMENSION(JPMODELMAX) :: GDEPOS_DST, GDEPOS_SLT, GDEPOS_AER
-LOGICAL            :: GSALT
-LOGICAL            :: GORILAM
-LOGICAL            :: GLG
-LOGICAL            :: GPASPOL
-LOGICAL            :: GFIRE
-#ifdef MNH_FOREFIRE
-LOGICAL            :: GFOREFIRE
-#endif
-LOGICAL            :: GCONDSAMP
-LOGICAL            :: GBLOWSNOW
-LOGICAL            :: GCHTRANS
-LOGICAL            :: GLNOX_EXPLICIT              ! flag for LNOx
-                                                  ! These variables
-                                                  ! are used to locally store
-INTEGER            :: ISV                         ! the value read in DESFM
-INTEGER            :: IRIMX,IRIMY                 ! number of points for the
-                                                  ! horizontal relaxation
-CHARACTER (LEN=4)  :: YTURB                       ! file in order to check the
-CHARACTER (LEN=4)  :: YRAD                        ! corresponding informations
-CHARACTER (LEN=4)  :: YTOM                        ! read in EXSEG file.
-LOGICAL            :: GRMC01
-CHARACTER (LEN=4)  :: YDCONV
-CHARACTER (LEN=4)  :: YSCONV
-CHARACTER (LEN=4)  :: YCLOUD
-CHARACTER (LEN=4)  :: YELEC
-CHARACTER (LEN=3)  :: YEQNSYS
-TYPE(TFILEDATA),POINTER :: TZFILE_DES
-!
-TPINIFILE  => NULL()
-TZFILE_DES => NULL()
-!-------------------------------------------------------------------------------
-!
-!*       1.    OPEN OUPTUT-LISTING FILE AND EXSEG FILE
-!              ---------------------------------------
-!
-WRITE(YMI,'(I2.0)') KMI
-CALL IO_File_add2list(LUNIT_MODEL(KMI)%TLUOUT,'OUTPUT_LISTING'//ADJUSTL(YMI),'OUTPUTLISTING','WRITE')
-TLUOUT => LUNIT_MODEL(KMI)%TLUOUT !Necessary because TLUOUT was initially pointing to NULL
-CALL IO_File_open(TLUOUT)
-!
-!Set output file for PRINT_MSG
-TFILE_OUTPUTLISTING => TLUOUT
-!
-ILUOUT=TLUOUT%NLU
-!
-WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/,  &
-            & 50("*"))') KMI
-!
-IF (CPROGRAM=='MESONH') THEN
-  CALL IO_File_add2list(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ')
-  CALL IO_File_open(TZFILE_DES)
-!
-!*       1.3   SPAWNING or SPEC or REAL program case
-!              ---------------------
-!
-ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  '.OR. CPROGRAM=='SPEC  ') THEN
-  YINIFILE    = CINIFILE_n
-  HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_File_open(TPINIFILE)
-  TZFILE_DES => TPINIFILE%TDESFILE
-!
-!*       1.3bis   DIAG program case
-!
-ELSE IF (CPROGRAM=='DIAG  ') THEN
-  YINIFILE    = CINIFILE_n
-  HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_File_add2list(TINIFILE_n,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_File_open(TINIFILE_n)
-  TPINIFILE  => TINIFILE_n
-  TZFILE_DES => TPINIFILE%TDESFILE
-!
-!*       1.4   Other program cases
-!              -------------------
-!
-ELSE
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','should not be called for CPROGRAM='//TRIM(CPROGRAM))
-ENDIF
-!
-ILUSEG = TZFILE_DES%NLU
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.    SET DEFAULT VALUES
-!             ------------------
-!
-CALL PARAM_ICE_ASSOCIATE()
-CALL LES_ASSOCIATE()
-CALL DEFAULT_DESFM_n(KMI)
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.    READ INITIAL FILE NAME AND OPEN INITIAL FILE
-!              --------------------------------------------
-!
-CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND)
-IF (GFOUND) THEN
-  CALL INIT_NAM_LUNITn
-  READ(UNIT=ILUSEG,NML=NAM_LUNITn)
-  CALL UPDATE_NAM_LUNITn
-  IF (LEN_TRIM(CINIFILEPGD)==0 .AND. CSURF=='EXTE') THEN
-    !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','error in namelist NAM_LUNITn: you need to specify CINIFILEPGD')
-  ENDIF
-END IF
-
-IF (CPROGRAM=='MESONH') THEN
-   IF (KMI.EQ.1) THEN
-      CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
-      IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
-      CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT)
-      IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO)
-      CALL IO_Config_set()
-      ! read Blaze namelist to get NREFINX and NREFINY before INI_FIELD_LIST
-      CALL POSNAM(ILUSEG,'NAM_FIRE',GFOUND,ILUOUT)
-      IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIRE)
-   END IF
-  HINIFILEPGD=CINIFILEPGD_n
-  YINIFILE=CINIFILE_n
-
-  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  TINIFILE_n => TPINIFILE !Necessary because TINIFILE was initially pointing to NULL
-  CALL IO_File_open(TPINIFILE)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.    READ DESFM FILE
-!             ---------------
-!
-CALL READ_DESFM_n(KMI,TPINIFILE,YCONF,GFLAT,GUSERV,GUSERC,                  &
-                GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
-                GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,      &
-                GDEPOS_DST, GCHTRANS, GORILAM,                              &
-                GDEPOS_AER, GLG, GPASPOL,GFIRE,                             &
-#ifdef MNH_FOREFIRE
-                GFOREFIRE,                                                  &
-#endif
-                GLNOX_EXPLICIT,                                             &
-                GCONDSAMP,GBLOWSNOW, IRIMX,IRIMY,ISV,                       &
-                YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS   )
-!
-!-------------------------------------------------------------------------------
-!
-!*      5.    Initialize fieldlist
-!             --------------------
-!
-IF (KMI==1) THEN !Do this only 1 time
-  IF (CPROGRAM=='SPAWN ') THEN
-    CALL INI_FIELD_LIST(2)
-  ELSE IF (CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ') THEN
-    CALL INI_FIELD_LIST(1)
-  ELSE IF (CPROGRAM/='REAL  ' .AND. CPROGRAM/='IDEAL ' ) THEN
-    CALL INI_FIELD_LIST()
-  END IF
-  IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ' .OR. CPROGRAM=='MESONH') THEN
-    CALL INI_FIELD_SCALARS()
-  END IF
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      6.    READ in the LFI file SOME VARIABLES of MODD_CONF
-!             ------------------------------------------------
-!
-IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
-  IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>9) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-    CALL IO_Field_read(TPINIFILE,'COUPLING',LCOUPLING)
-    IF (LCOUPLING) THEN
-      WRITE(ILUOUT,*) 'Error with the initial file'
-      WRITE(ILUOUT,*) 'The file',YINIFILE,' was created with LCOUPLING=.TRUE.'
-      WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
-      WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
-      !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','')
-    ENDIF
-  ENDIF
-END IF
-!
-! Read the storage type
-  CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
-  IF (IRESP /= 0) THEN
-    WRITE(ILUOUT,FMT=9002) 'STORAGE_TYPE',IRESP
-!callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','')
-  END IF
-IF (KMI == 1) THEN
-! Read the geometry kind
-  CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN)
-! Read the thinshell approximation
-  CALL IO_Field_read(TPINIFILE,'THINSHELL',LTHINSHELL)
-!
-  IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP)
-   IF (IRESP/=0)  L1D=.FALSE.
-!
-   CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP)
-   IF (IRESP/=0)  L2D=.FALSE.
-!
-   CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP)
-   IF (IRESP/=0) LPACK=.TRUE.
-  ELSE
-   L1D=.FALSE.
-   L2D=.FALSE.
-   LPACK=.TRUE.
-  END IF
-  IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=10) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_Field_read(TPINIFILE,'LBOUSS',LBOUSS)
-  END IF
-!
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      7.    READ EXSEG FILE
-!             ---------------
-!   We pass by arguments the informations read in DESFM descriptor to the
-! routine which read related informations in the EXSEG descriptor in order to
-! check coherence between both informations.
-!
-CALL IO_Field_read(TPINIFILE,'LOCEAN',LOCEAN,IRESP)
-IF ( IRESP /= 0 ) LOCEAN = .FALSE.
-!
-CALL READ_EXSEG_n(KMI,TZFILE_DES,YCONF,GFLAT,GUSERV,GUSERC,                 &
-                GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,         &
-                GUSECHAQ,GUSECHIC,GCH_PH,                                   &
-                GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,GCHTRANS,  &
-                GORILAM,GDEPOS_AER,GLG,GPASPOL,GFIRE,                       &
-#ifdef MNH_FOREFIRE
-                GFOREFIRE, &
-#endif
-                GLNOX_EXPLICIT,                                             &
-                GCONDSAMP,GBLOWSNOW, IRIMX,IRIMY,ISV, &
-                YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS,  &
-                PTSTEP_ALL,CSTORAGE_TYPE,CINIFILEPGD_n                      )
-!
-if ( cprogram == 'MESONH' .and. kmi == 1 ) then !Do this only once
-  call Fieldlist_nmodel_resize(NMODEL)
-end if
-!
-IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  '      &
-     .OR. CPROGRAM=='REAL  ') THEN
-  CINIFILE_n    = YINIFILE
-  CCPLFILE(:) = '                            '
-  NMODEL=1
-  LSTEADYLS=.TRUE.
-END IF
-!
-IF (CPROGRAM=='MESONH') THEN
-  HINIFILEPGD=CINIFILEPGD_n
-END IF
-!-------------------------------------------------------------------------------
-!
-!*      7.    CLOSE  FILES
-!             ------------
-!
-IF (CPROGRAM=='MESONH') CALL IO_File_close(TZFILE_DES)
-!
-!-------------------------------------------------------------------------------
-9002  FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3)
-!
-END SUBROUTINE INI_SEG_n
diff --git a/src/mesonh/ext/les_cloud_masksn.f90 b/src/mesonh/ext/les_cloud_masksn.f90
deleted file mode 100644
index 10e9e4093fc35cf7e5d3ba3c0ebcce0047611694..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/les_cloud_masksn.f90
+++ /dev/null
@@ -1,419 +0,0 @@
-!MNH_LIC Copyright 2006-2020 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!     #######################
-      SUBROUTINE  LES_CLOUD_MASKS_n
-!     #######################
-!
-!
-!!****  *LES_MASKS_n* initializes the masks for clouds
-!!                         
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         07/2006
-!!      P. Aumond        10/2009 Add possibility of user maskS
-!!       F.Couvreux      06/2011 : Conditional sampling
-!!       C.Lac           10/2014 : Correction on user masks   
-!!       Q.Rodier        05/2019 : Missing parallelization 
-!!
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_FIELD_n
-USE MODD_CONF_n
-USE MODD_CST    , ONLY : XRD, XRV
-USE MODD_NSV    , ONLY : NSV_CSBEG, NSV_CSEND, NSV_CS
-USE MODD_GRID_n , ONLY : XZHAT
-USE MODD_CONDSAMP
-!
-USE MODE_ll
-!
-USE MODI_LES_VER_INT
-USE MODI_LES_MEAN_ll
-USE MODI_SHUMAN
-!
-IMPLICIT NONE
-!
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JK                                  ! vertical loop counter
-INTEGER :: JI                                  ! loop index on masks  
-INTEGER :: IIU, IJU,IIB,IJB,IIE,IJE            ! hor. indices
-INTEGER :: IKU, KBASE, KTOP                    ! ver. index
-INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG   ! moist variables indices
-INTEGER :: JSV                                  ! ind of scalars
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT  ! total water
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV ! Virtual potential temperature
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZW_LES    ! W     on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRC_LES   ! Rc    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRI_LES   ! Ri    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT_LES   ! Rt    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_LES  ! thv   on LES vertical grid
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_LES  ! thv   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_ANOM ! thv-thv_mean   on LES vertical grid
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_ANOM ! sv-sv_mean
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZSTD_SV
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZSTD_SVTRES ! threshold of sv
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZWORK3D,ZWORK3DB
-REAL, DIMENSION(:),       ALLOCATABLE :: ZWORK1D
-REAL, DIMENSION(:),       ALLOCATABLE :: ZMEANRC
-!
-!
-!-------------------------------------------------------------------------------
-!
-CALL GET_DIM_EXT_ll('B',IIU,IJU)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-!
-IKU = SIZE(XTHT,3)
-!
-!-------------------------------------------------------------------------------
-!
-!*      1.0  Thermodynamical computations
-!            ----------------------------
-!
-ALLOCATE(ZRT      (IIU,IJU,IKU))
-ALLOCATE(ZMEANRC (IKU))
-ZRT = 0.
-!
-IRR=0
-IF (LUSERV) THEN
-  IRR=IRR+1
-  ZRT = ZRT + XRT(:,:,:,1)
-END IF
-IF (LUSERC) THEN
-  IRR=IRR+1
-  IRRC=IRR
-  ZRT = ZRT + XRT(:,:,:,IRRC)
-END IF
-IF (LUSERR) THEN
-  IRR=IRR+1
-  IRRR=IRR
-  ZRT = ZRT + XRT(:,:,:,IRRR)
-END IF
-IF (LUSERI) THEN
-  IRR=IRR+1
-  IRRI=IRR
-  ZRT = ZRT + XRT(:,:,:,IRRI)
-END IF
-IF (LUSERS) THEN
-  IRR=IRR+1
-  IRRS=IRR
-  ZRT = ZRT + XRT(:,:,:,IRRS)
-END IF
-IF (LUSERG) THEN
-  IRR=IRR+1
-  IRRG=IRR
-  ZRT = ZRT + XRT(:,:,:,IRRG)
-END IF
-!
-!
-!* computes fields on the LES grid in order to compute masks
-!
-ALLOCATE(ZTHV     (IIU,IJU,IKU))
-ZTHV = XTHT
-IF (LUSERV) ZTHV=ZTHV*(1.+XRV/XRD*XRT(:,:,:,1))/(1.+ZRT(:,:,:))
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.0  Fields on LES grid
-!            ------------------
-!
-!* allocates fields on the LES grid
-!
-!
-ALLOCATE(ZW_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZRC_LES  (IIU,IJU,NLES_K))
-ALLOCATE(ZRI_LES  (IIU,IJU,NLES_K))
-ALLOCATE(ZRT_LES  (IIU,IJU,NLES_K))
-ALLOCATE(ZTHV_LES (IIU,IJU,NLES_K))
-ALLOCATE(ZTHV_ANOM(IIU,IJU,NLES_K))
-ALLOCATE(ZSV_LES (IIU,IJU,NLES_K,NSV_CS))
-ALLOCATE(ZSV_ANOM(IIU,IJU,NLES_K,NSV_CS))
-ALLOCATE(ZSTD_SV(NLES_K,NSV_CS))
-ALLOCATE(ZSTD_SVTRES(NLES_K,NSV_CS))
-ALLOCATE(ZWORK1D(NLES_K))
-ALLOCATE(ZWORK3D(IIU,IJU,IKU))
-ALLOCATE(ZWORK3DB(IIU,IJU,NLES_K))
-!
-ZWORK1D=0.
-ZWORK3D=0.  
-ZWORK3DB=0.
-!
-CALL LES_VER_INT(MZF(XWT), ZW_LES)
-IF (NSV_CS>0) THEN
-  DO JSV=NSV_CSBEG, NSV_CSEND
-    CALL LES_VER_INT(  XSVT(:,:,:,JSV),  &
-                       ZSV_LES(:,:,:,JSV-NSV_CSBEG+1) )
-  END DO
-END IF
-IF (LUSERC) THEN
-  CALL LES_VER_INT(XRT(:,:,:,IRRC), ZRC_LES)
-ELSE
-  ZRC_LES = 0.
-END IF
-IF (LUSERI) THEN
-  CALL LES_VER_INT(XRT(:,:,:,IRRI), ZRI_LES)
-ELSE
-  ZRI_LES = 0.
-END IF
-CALL LES_VER_INT(ZRT, ZRT_LES)
-CALL LES_VER_INT(ZTHV, ZTHV_LES)
-CALL LES_ANOMALY_FIELD(ZTHV,ZTHV_ANOM)
-!
-IF (NSV_CS>0) THEN
- DO JSV=NSV_CSBEG, NSV_CSEND
-  ZWORK3D(:,:,:)=XSVT(:,:,:,JSV)
-  CALL LES_ANOMALY_FIELD(ZWORK3D,ZWORK3DB)
-  ZSV_ANOM(:,:,:,JSV-NSV_CSBEG+1)=ZWORK3DB(:,:,:)
-  CALL LES_STDEV(ZWORK3DB,ZWORK1D)
-  ZSTD_SV(:,JSV-NSV_CSBEG+1)=ZWORK1D(:)
-  DO JK=1,NLES_K
-       ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)=SUM(ZSTD_SV(1:JK,JSV-NSV_CSBEG+1))/(1.*JK)
-  END DO
- END DO
-END IF
-!
-DEALLOCATE(ZTHV     )
-DEALLOCATE(ZWORK3D)
-DEALLOCATE(ZWORK3DB)
-DEALLOCATE(ZWORK1D)
-!
-!-------------------------------------------------------------------------------
-!
-!*      3.0  Cloud mask
-!            ----------
-!
-IF (LLES_NEB_MASK) THEN
-  CALL LES_ALLOCATE('LLES_CURRENT_NEB_MASK',(/IIU,IJU,NLES_K/))
-  LLES_CURRENT_NEB_MASK (:,:,:) = .FALSE.
-  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0.)
-    LLES_CURRENT_NEB_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
-  END WHERE
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.0  Cloud core mask
-!            ---------------
-!
-IF (LLES_CORE_MASK) THEN
-  CALL LES_ALLOCATE('LLES_CURRENT_CORE_MASK',(/IIU,IJU,NLES_K/))
-  LLES_CURRENT_CORE_MASK (:,:,:) = .FALSE.
-  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) &
-         .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0. .AND. ZTHV_ANOM(IIB:IIE,IJB:IJE,:)>0.)  
-    LLES_CURRENT_CORE_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
-  END WHERE
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.0  Conditional sampling mask
-!            -------------------------
-!
-IF (LLES_CS_MASK) THEN
-!
-  CALL LES_MEAN_ll(ZRC_LES, LLES_CURRENT_CART_MASK, ZMEANRC  )
-  CALL LES_ALLOCATE('LLES_CURRENT_CS1_MASK',(/IIU,IJU,NLES_K/))
-  LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE.
-  IF (NSV_CS >= 2) THEN
-    CALL LES_ALLOCATE('LLES_CURRENT_CS2_MASK',(/IIU,IJU,NLES_K/))
-    LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE.
-    IF (NSV_CS == 3) THEN
-      CALL LES_ALLOCATE('LLES_CURRENT_CS3_MASK',(/IIU,IJU,NLES_K/))
-      LLES_CURRENT_CS3_MASK (:,:,:) = .FALSE.
-    END IF
-  END IF
-
-!
-! Cloud top and base computation                   
-!
-  KBASE=2
-  KTOP=NLES_K
-  DO JK=2,NLES_K
-   IF ((ZMEANRC(JK) > 1.E-7) .AND. (KBASE == 2)) KBASE=JK
-   IF ((ZMEANRC(JK) < 1.E-7) .AND. (KBASE > 2) .AND. (KTOP == NLES_K)) &
-              KTOP=JK-1
-  END DO
-!
- DO JSV=NSV_CSBEG, NSV_CSEND
-  DO JK=2,NLES_K
-    IF (ZSTD_SV(JK,JSV-NSV_CSBEG+1) < 0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)) &
-       ZSTD_SV(JK,JSV-NSV_CSBEG+1)=0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)
-! case no cloud top and base                    
-    IF (JSV == NSV_CSBEG) THEN
-     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
-             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE       
-     END IF
-!
-! case cloud top and base defined                    
-!
-     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE
-     END IF     
-!
-     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1) .AND. &
-          ZRC_LES(IIB:IIE,IJB:IJE,JK)>1.E-6)
-          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE  
-     END IF
-    ELSE IF ( JSV == NSV_CSBEG + 1 ) THEN
-     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE       
-     END IF
-!
-! case cloud top and base defined                    
-!
-     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
-             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE
-     END IF     
-!
-     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
-          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE  
-     END IF
-!
-    ELSE 
-     IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE       
-     END IF
-!
-! case cloud top and base defined                    
-!
-     IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-             XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE
-     END IF     
-!
-     IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
-             XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
-          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
-      END WHERE  
-     END IF
-    END IF
-  END DO
- END DO
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      5.0  User mask
-!            ---------
-!
-IF (LLES_MY_MASK) THEN
-  CALL LES_ALLOCATE('LLES_CURRENT_MY_MASKS',(/IIU,IJU,NLES_K,NLES_MASKS_USER/))
-  DO JI=1,NLES_MASKS_USER
-    LLES_CURRENT_MY_MASKS (IIB:IIE,IJB:IJE,:,JI) = .FALSE.
-  END DO
-! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) 
-!    LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE.
-! END WHERE
-!
-END IF
-!-------------------------------------------------------------------------------
-!
-DEALLOCATE(ZW_LES   )
-DEALLOCATE(ZRC_LES  )
-DEALLOCATE(ZRI_LES  )
-DEALLOCATE(ZRT_LES  )
-DEALLOCATE(ZTHV_LES )
-DEALLOCATE(ZSV_LES  )
-DEALLOCATE(ZTHV_ANOM)
-DEALLOCATE(ZSV_ANOM)
-DEALLOCATE(ZSTD_SV)
-DEALLOCATE(ZSTD_SVTRES)
-!-------------------------------------------------------------------------------
-DEALLOCATE(ZRT )
-DEALLOCATE(ZMEANRC)
-!--------------------------------------------------------------------------------
-!
-CONTAINS
-!
-!--------------------------------------------------------------------------------
-!
-SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM)
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM
-
-REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN
-INTEGER :: JI, JJ
-
-CALL LES_VER_INT(PF, PF_ANOM)
-CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN  )
-DO JJ=1,SIZE(PF_ANOM,2)
-  DO JI=1,SIZE(PF_ANOM,1)
-    PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:)
-  END DO
-END DO
-
-END SUBROUTINE LES_ANOMALY_FIELD
-!--------------------------------------------------------------------------------
-!
-!--------------------------------------------------------------------------------
-!
-SUBROUTINE LES_STDEV(PF_ANOM,PF_STD)
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF_ANOM
-REAL, DIMENSION(:), INTENT(OUT) :: PF_STD
-
-REAL, DIMENSION(SIZE(PF_ANOM,1),SIZE(PF_ANOM,2),SIZE(PF_ANOM,3)) :: Z2
-INTEGER :: JK
-
-Z2(:,:,:)=PF_ANOM(:,:,:)*PF_ANOM(:,:,:)
-CALL LES_MEAN_ll(Z2, LLES_CURRENT_CART_MASK, PF_STD  )
-DO JK=1,SIZE(PF_ANOM,3)
-     PF_STD(JK)=SQRT(PF_STD(JK))
-END DO
-
-END SUBROUTINE LES_STDEV
-!-------------------------------------------------------------------------------  
-!
-END SUBROUTINE LES_CLOUD_MASKS_n   
diff --git a/src/mesonh/ext/les_ini_timestepn.f90 b/src/mesonh/ext/les_ini_timestepn.f90
deleted file mode 100644
index 98c5cd306456bf19b2839c9ee608448392c07078..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/les_ini_timestepn.f90
+++ /dev/null
@@ -1,407 +0,0 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!      #######################
-MODULE MODI_LES_INI_TIMESTEP_n
-!      #######################
-!
-!
-INTERFACE LES_INI_TIMESTEP_n
-!
-      SUBROUTINE LES_INI_TIMESTEP_n(KTCOUNT)
-!
-INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step
-!
-END SUBROUTINE LES_INI_TIMESTEP_n
-!
-END INTERFACE
-!
-END MODULE MODI_LES_INI_TIMESTEP_n
-
-!     ##############################
-      SUBROUTINE  LES_INI_TIMESTEP_n(KTCOUNT)
-!     ##############################
-!
-!
-!!****  *LES_INI_TIMESTEP_n* initializes the LES variables for
-!!                    the current time-step of model _n
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         06/11/02
-!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!  P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain
-! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST
-USE MODD_NSV
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_FIELD_n
-USE MODD_METRICS_n
-USE MODD_REF_n
-USE MODD_CONF_n
-USE MODD_TIME_n
-USE MODD_DYN_n
-USE MODD_TIME
-USE MODD_CONF
-USE MODD_LES_BUDGET
-!
-use mode_datetime,       only: Datetime_distance
-USE MODE_ll
-USE MODE_MODELN_HANDLER
-!
-USE MODI_LES_VER_INT
-USE MODI_THL_RT_FROM_TH_R
-USE MODI_LES_MEAN_ll
-USE MODI_SHUMAN
-!
-USE MODI_SECOND_MNH
-USE MODI_LES_CLOUD_MASKS_N
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-!
-INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step
-!
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: IXOR_ll, IYOR_ll                    ! origine point coordinates
-!                                              ! of current processor domain
-!                                              ! on model domain on all
-!                                              ! processors
-INTEGER :: IIB_ll, IJB_ll                      ! SO point coordinates of
-!                                              ! current processor phys. domain
-!                                              ! on model domain on all
-!                                              ! processors
-INTEGER :: IIE_ll, IJE_ll                      ! NE point coordinates of
-!                                              ! current processor phys. domain
-!                                              ! on model domain on all
-!                                              ! processors
-INTEGER :: IIINF_MASK, IISUP_MASK              ! cart. mask local proc. limits
-INTEGER :: IJINF_MASK, IJSUP_MASK              ! cart. mask local proc. limits
-!
-INTEGER :: JK                                  ! vertical loop counter
-INTEGER :: IIB, IJB, IIE, IJE                  ! hor. indices
-INTEGER :: IIU, IJU                            ! hor. indices
-INTEGER :: IKU                                 ! ver. index
-INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG   ! moist variables indices
-!
-INTEGER :: JSV                                 ! scalar variables counter
-!
-REAL    :: ZTIME1, ZTIME2                      ! CPU time counters
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHL ! theta_l
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT  ! total water
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZL   ! Latent heat of vaporization
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZCP  ! Cp
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEXN ! Exner function
-INTEGER                               :: IMI  ! current model index
-!-------------------------------------------------------------------------------
-!
-!*      1.   Does current time-step is a LES time-step?
-!            -----------------------------------------
-!
-LLES_CALL= .FALSE.
-!
-CALL SECOND_MNH(ZTIME1)
-!
-IF (NLES_TCOUNT==NLES_TIMES) LLES_CALL=.FALSE.
-!
-IF ( KTCOUNT>1 .AND. MOD (KTCOUNT-1,NLES_DTCOUNT)==0) LLES_CALL=.TRUE.
-!
-IF (.NOT. LLES_CALL) RETURN
-!
-CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR,         &
-                  LUSERI, LUSERS, LUSERG, LUSERH  )
-!
-NLES_TCOUNT = NLES_TCOUNT + 1
-!
-NLES_CURRENT_TCOUNT = NLES_TCOUNT
-!
-tles_dates(nles_tcount) = tdtcur
-call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount) )
-!
-!* forward-in-time time-step
-!
-XCURRENT_TSTEP = XTSTEP
-!
-!-------------------------------------------------------------------------------
-!
-CALL GET_OR_ll     ('B',IXOR_ll,IYOR_ll)
-CALL GET_DIM_EXT_ll('B',IIU,IJU)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-!
-IIB_ll=IXOR_ll+IIB-1
-IJB_ll=IYOR_ll+IJB-1
-IIE_ll=IXOR_ll+IIE-1
-IJE_ll=IYOR_ll+IJE-1
-!
-IKU = SIZE(XTHT,3)
-!
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.   Definition of masks
-!            -------------------
-!
-!*      2.1  Cartesian (sub-)domain (on local processor)
-!            ----------------------
-!
-CALL LES_ALLOCATE('LLES_CURRENT_CART_MASK',(/IIU,IJU,NLES_K/))
-!
-IIINF_MASK = MAX(IIB, NLESn_IINF(IMI)+JPHEXT-(IIB_ll-1-JPHEXT))
-IJINF_MASK = MAX(IJB, NLESn_JINF(IMI)+JPHEXT-(IJB_ll-1-JPHEXT))
-IISUP_MASK = MIN(IIE, NLESn_ISUP(IMI)+JPHEXT-(IIB_ll-1-JPHEXT))
-IJSUP_MASK = MIN(IJE, NLESn_JSUP(IMI)+JPHEXT-(IJB_ll-1-JPHEXT))
-!
-!
-LLES_CURRENT_CART_MASK(:,:,:) = .FALSE.
-LLES_CURRENT_CART_MASK(IIINF_MASK:IISUP_MASK,IJINF_MASK:IJSUP_MASK,:) = .TRUE.
-!
-CLES_CURRENT_LBCX(:) = CLES_LBCX(:,IMI)
-CLES_CURRENT_LBCY(:) = CLES_LBCY(:,IMI)
-!
-!-------------------------------------------------------------------------------
-!
-!*      3.   Definition of LES vertical grid for this model
-!            ----------------------------------------------
-!
-IF (CLES_LEVEL_TYPE=='Z') THEN
-  IF (ASSOCIATED(XCOEFLIN_CURRENT_LES)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_LES')
-  IF (ASSOCIATED(NKLIN_CURRENT_LES   )) CALL LES_DEALLOCATE('NKLIN_CURRENT_LES')
-  !
-  CALL LES_ALLOCATE('XCOEFLIN_CURRENT_LES',(/IIU,IJU,NLES_K/))
-  CALL LES_ALLOCATE('NKLIN_CURRENT_LES',(/IIU,IJU,NLES_K/))
-  !
-  XCOEFLIN_CURRENT_LES(:,:,:) = XCOEFLIN_LES(:,:,:)
-  NKLIN_CURRENT_LES   (:,:,:) = NKLIN_LES   (:,:,:)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.   Definition of variables used in budgets for current model
-!            ---------------------------------------------------------
-!
-IF (LUSERC) THEN
-  ALLOCATE(XCURRENT_L_O_EXN_CP (IIU,IJU,IKU))
-ELSE
-  ALLOCATE(XCURRENT_L_O_EXN_CP (0,0,0))
-END IF
-ALLOCATE(XCURRENT_RHODJ      (IIU,IJU,IKU))
-!
-!* coefficients for Th to Thl conversion
-!
-IF (LUSERC) THEN
-  ALLOCATE(ZL  (IIU,IJU,IKU))
-  ALLOCATE(ZEXN(IIU,IJU,IKU))
-  ALLOCATE(ZCP (IIU,IJU,IKU))
-  !
-  !* Exner function
-  !
-  ZEXN(:,:,:) = (XPABST/XP00)**(XRD/XCPD)
-  !
-  !* Latent heat of vaporization
-  !
-  ZL(:,:,:) = XLVTT + (XCPD-XCL) * (XTHT(:,:,:)*ZEXN(:,:,:)-XTT)
-  !
-  !* heat capacity at constant pressure of the humid air
-  !
-  ZCP(:,:,:) = XCPD
-  IRR=2
-  ZCP(:,:,:) = ZCP(:,:,:) + XCPV * XRT(:,:,:,1)
-  ZCP(:,:,:) = ZCP(:,:,:) + XCL  * XRT(:,:,:,2)
-  IF (LUSERR) THEN
-    IRR=IRR+1
-    ZCP(:,:,:) = ZCP(:,:,:) + XCL  * XRT(:,:,:,IRR)
-  END IF
-  IF (LUSERI) THEN
-    IRR=IRR+1
-    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
-  END IF
-  IF (LUSERS) THEN
-    IRR=IRR+1
-    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
-  END IF
-  IF (LUSERG) THEN
-    IRR=IRR+1
-    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
-  END IF
-  IF (LUSERH) THEN
-    IRR=IRR+1
-    ZCP(:,:,:) = ZCP(:,:,:) + XCI  * XRT(:,:,:,IRR)
-  END IF
-  !
-  !* L / (Exn * Cp)
-  !
-  XCURRENT_L_O_EXN_CP(:,:,:) = ZL(:,:,:) / ZEXN(:,:,:) / ZCP(:,:,:)
-  !
-  DEALLOCATE(ZL  )
-  DEALLOCATE(ZEXN)
-  DEALLOCATE(ZCP )
-END IF
-!
-!* other initializations
-!
-XCURRENT_RHODJ=XRHODJ
-!
-LCURRENT_USERV=LUSERV
-LCURRENT_USERC=LUSERC
-LCURRENT_USERR=LUSERR
-LCURRENT_USERI=LUSERI
-LCURRENT_USERS=LUSERS
-LCURRENT_USERG=LUSERG
-LCURRENT_USERH=LUSERH
-!
-NCURRENT_RR = NRR
-!
-ALLOCATE(XCURRENT_RUS  (IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RVS  (IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RWS  (IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RTHS (IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RTKES(IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RRS  (IIU,IJU,IKU,NRR))
-ALLOCATE(XCURRENT_RSVS (IIU,IJU,IKU,NSV))
-ALLOCATE(XCURRENT_RTHLS(IIU,IJU,IKU))
-ALLOCATE(XCURRENT_RRTS (IIU,IJU,IKU))
-!
-XCURRENT_RUS  =XRUS
-XCURRENT_RVS  =XRVS
-XCURRENT_RWS  =XRWS
-XCURRENT_RTHS =XRTHS
-XCURRENT_RTKES=XRTKES
-XCURRENT_RRS  =XRRS
-XCURRENT_RSVS =XRSVS
-CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR,             &
-                      LUSERI, LUSERS, LUSERG, LUSERH,     &
-                      XCURRENT_L_O_EXN_CP,                &
-                      XCURRENT_RTHS, XCURRENT_RRS,        &
-                      XCURRENT_RTHLS, XCURRENT_RRTS       )
-
-ALLOCATE(X_LES_BU_RES_KE   (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_WThl (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_Thl2 (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_SBG_Tke  (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_WRt  (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_Rt2  (NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_ThlRt(NLES_K,NLES_TOT))
-ALLOCATE(X_LES_BU_RES_Sv2  (NLES_K,NLES_TOT,NSV))
-ALLOCATE(X_LES_BU_RES_WSv  (NLES_K,NLES_TOT,NSV))
-
-X_LES_BU_RES_KE   = 0.
-X_LES_BU_RES_WThl = 0.
-X_LES_BU_RES_Thl2 = 0.
-X_LES_BU_SBG_Tke  = 0.
-X_LES_BU_RES_WRt  = 0.
-X_LES_BU_RES_Rt2  = 0.
-X_LES_BU_RES_ThlRt= 0.
-X_LES_BU_RES_Sv2  = 0.
-X_LES_BU_RES_WSv  = 0.
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.   Definition of anomaly fields
-!            ----------------------------
-!
-ALLOCATE (XU_ANOM  (IIU,IJU,NLES_K))
-ALLOCATE (XV_ANOM  (IIU,IJU,NLES_K))
-ALLOCATE (XW_ANOM  (IIU,IJU,NLES_K))
-ALLOCATE (XTHL_ANOM(IIU,IJU,NLES_K))
-IF (LUSERV) THEN
-  ALLOCATE (XRT_ANOM (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE (XRT_ANOM (0,0,0))
-END IF
-ALLOCATE (XSV_ANOM (IIU,IJU,NLES_K,NSV))
-!
-!*      4.1  conservative variables
-!            ----------------------
-!
-ALLOCATE(ZTHL(IIU,IJU,IKU))
-ALLOCATE(ZRT (IIU,IJU,IKU))
-CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR,             &
-                      LUSERI, LUSERS, LUSERG, LUSERH,     &
-                      XCURRENT_L_O_EXN_CP,                &
-                      XTHT, XRT,                          &
-                      ZTHL, ZRT                           )
-!
-!*      4.2  anomaly fields on the LES grid
-!            ------------------------------
-!
-CALL LES_ANOMALY_FIELD(MXF(XUT),XU_ANOM)
-CALL LES_ANOMALY_FIELD(MYF(XVT),XV_ANOM)
-CALL LES_ANOMALY_FIELD(MZF(XWT),XW_ANOM)
-CALL LES_ANOMALY_FIELD(ZTHL,XTHL_ANOM)
-IF (LUSERV) CALL LES_ANOMALY_FIELD(ZRT,XRT_ANOM)
-DO JSV=1,NSV
-  CALL LES_ANOMALY_FIELD(XSVT(:,:,:,JSV),XSV_ANOM(:,:,:,JSV))
-END DO
-!
-!-------------------------------------------------------------------------------
-!
-DEALLOCATE(ZTHL)
-DEALLOCATE(ZRT )
-!-------------------------------------------------------------------------------
-!
-!*      6.0  Nebulosity masks
-!            ----------------
-!
-CALL LES_CLOUD_MASKS_n
-!
-!-------------------------------------------------------------------------------
-CALL SECOND_MNH(ZTIME2)
-XTIME_LES_BU = XTIME_LES_BU + ZTIME2 - ZTIME1
-!--------------------------------------------------------------------------------
-!
-CONTAINS
-!
-!--------------------------------------------------------------------------------
-!
-SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM)
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PF
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM
-
-REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN
-INTEGER :: JI, JJ
-
-CALL LES_VER_INT(PF, PF_ANOM)
-CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN  )
-DO JJ=1,SIZE(PF_ANOM,2)
-  DO JI=1,SIZE(PF_ANOM,1)
-    PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:)
-  END DO
-END DO
-
-END SUBROUTINE LES_ANOMALY_FIELD
-!--------------------------------------------------------------------------------
-!
-END SUBROUTINE LES_INI_TIMESTEP_n   
-
diff --git a/src/mesonh/ext/lesn.f90 b/src/mesonh/ext/lesn.f90
deleted file mode 100644
index f66f89eae81a2f226ff87fd494f3982cc065fc61..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/lesn.f90
+++ /dev/null
@@ -1,3580 +0,0 @@
-!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.
-!-----------------------------------------------------------------
-!     #################
-      SUBROUTINE  LES_n
-!     #################
-!
-!
-!!****  *LES_n* computes the current time-step LES 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) add LES budgets and use of anomalies
-!!                         in LES quantities computations
-!!                01/04/03 (V. Masson and F. Couvreux) bug in BL height loop
-!!                   10/07 (J.Pergaud) Add mass flux diagnostics
-!!                06/08    (O.Thouron) Add radiative diagnostics
-!!                12/10    (R.Honnert) Add EDKF mass flux in BL height
-!!                10/09    (P. Aumond) Add possibility of user maskS
-!!                10/14    (C.Lac) Correction on user masks
-!!                10/16    (C.Lac) Add ground droplet deposition amount
-!!  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
-!!
-!! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST
-USE MODD_CTURB, ONLY : XFTOP_O_FSURF
-!
-USE MODD_LES
-USE MODD_LES_BUDGET
-USE MODD_CONF
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_LES_n
-USE MODD_RADIATIONS_n
-USE MODD_GRID_n
-USE MODD_REF_n
-USE MODD_FIELD_n
-USE MODD_CONF_n
-USE MODD_PARAM_n
-USE MODD_TURB_n
-USE MODD_METRICS_n
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_PARAM_n, ONLY: CCLOUD
-USE MODD_PRECIP_n, ONLY: XINPRR,XACPRR,XINPRR3D,XEVAP3D,XINPRC,XINDEP
-USE MODD_NSV, ONLY : NSV, NSV_CS
-USE MODD_PARAM_ICE, ONLY: LDEPOSC,LSEDIC
-USE MODD_PARAM_C2R2, ONLY: LDEPOC,LSEDC
-USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC
-!
-USE MODI_SHUMAN
-USE MODI_GRADIENT_M
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_LES_VER_INT
-USE MODI_SPEC_VER_INT
-USE MODI_LES_MEAN_ll
-USE MODI_THL_RT_FROM_TH_R
-USE MODI_LES_RES_TR
-USE MODI_BUDGET_FLAGS
-USE MODI_LES_BUDGET_TEND_n
-USE MODE_BL_DEPTH_DIAG
-!
-USE MODE_ll
-USE MODE_MODELN_HANDLER
-USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-!
-!       0.2  declaration of local variables
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEXN      ! Exner function
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHL      ! liquid potential temperature
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV      ! virtual potential temperature
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRHO      ! air density
-!
-REAL, DIMENSION(:,:,:),    ALLOCATABLE :: CHAMPXY1    !tableau intermediaire
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTEMP     ! Temperature
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEW
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD   !indice cloud si rc>0
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD2  !indice cloud rc>1E-5
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZCLDFR_LES! CLDFR    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZICEFR_LES! ICEFR    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRAINFR_LES! RAINFR   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZMASSF    ! massflux=rho*w
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZREHU     ! relative humidity
-
-
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZZ_LES    ! alt.  on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE ::ZZZ_LES
-REAL, DIMENSION(:,:,:),   ALLOCATABLE ::ZINPRR3D_LES   ! precipitation flux 3D
-REAL, DIMENSION(:,:,:),   ALLOCATABLE ::ZEVAP3D_LES !evaporation 3D
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZP_LES    ! pres. on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDP_LES   ! dynamical production TKE   
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTP_LES   ! thermal production TKE    
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTR_LES   ! transport production TKE    
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDISS_LES ! dissipation TKE    
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLM_LES    ! mixing length
-
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDPDZ_LES   ! dp/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDTHLDZ_LES ! dThl/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDTHDZ_LES ! dTh/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDRTDZ_LES  ! dRt/dz  on LES vertical grid
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZDSvDZ_LES  ! dSv/dz  on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDUDZ_LES ! du/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDVDZ_LES ! dv/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDWDZ_LES ! dw/dz on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEXN_LES  ! Exner on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRHO_LES  ! rho   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZU_LES    ! U     on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZV_LES    ! V     on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZW_LES    ! W     on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZMF_LES   ! mass flux on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTH_LES   ! Theta on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_LES  ! thv   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHL_LES  ! thl   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTKE_LES  ! tke   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZKE_LES   ! ke   on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRV_LES   ! Rv    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZREHU_LES ! Rehu  on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRC_LES   ! Rc    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRR_LES   ! Rr    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRI_LES   ! Ri    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRS_LES   ! Rs    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRG_LES   ! Rg    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRH_LES   ! Rh    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRT_LES   ! Rt    on LES vertical grid
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_LES   ! Sv    on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTH_ANOM  ! Theta anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHV_ANOM ! thv   anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRV_ANOM  ! Rv    anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRC_ANOM  ! Rc    anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRI_ANOM  ! Ri    anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRR_ANOM  ! Rr    anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZP_ANOM   ! p     anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRHO_ANOM ! rho   anomaly on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDPDZ_ANOM! dp/dz anomaly on LES vertical grid
-REAL, DIMENSION(:),       ALLOCATABLE :: ZMEAN_DPDZ! dp/dz mean    on LES vertical grid
-REAL, DIMENSION(:),       ALLOCATABLE :: ZLES_MEAN_DRtDZ! drt/dz mean    on LES vertical grid
-REAL, DIMENSION(:),       ALLOCATABLE :: ZLES_MEAN_DTHDZ! dth/dz mean    on LES vertical grid
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZLES_MEAN_DSVDZ! drt/dz mean    on LES vertical grid
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZLWP_LES, ZRWP_LES, ZTKET_LES
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZIWP_LES, ZSWP_LES, ZGWP_LES, ZHWP_LES
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZINDCLD2D  !
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZINDCLD2D2 !
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZLWP_ANOM ! lwp anomaly
-REAL, DIMENSION(:,:),     ALLOCATABLE :: ZMAXWRR2D ! maxwrr2D
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZU_SPEC   ! U     on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZV_SPEC   ! V     on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZW_SPEC   ! W     on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTH_SPEC  ! Theta on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHL_SPEC ! thl   on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRV_SPEC  ! Rv    on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRC_SPEC  ! Rc    on SPEC vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRI_SPEC  ! Ri    on SPEC vertical grid
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_SPEC  ! Sv    on SPEC vertical grid
-!
-REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZRT      ! rv+rc+rr+ri+rs+rg+rh
-REAL, DIMENSION(:),       ALLOCATABLE  :: ZWORK1D,ZWORK1DT
-REAL, DIMENSION(:,:),     ALLOCATABLE  :: ZWORK2D
-REAL :: ZINPRRm,ZCOUNT
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRADEFF_LES   ! Re on LES vertical grid
-!!fl sw, lw, dthrad on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZSWU_LES   ! SWU on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZSWD_LES   ! SWD on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLWU_LES   ! LWU on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLWD_LES   ! LWD on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDTHRADSW_LES   ! DTHRADSW on LES vertical grid
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZDTHRADLW_LES   ! DTHRADLW on LES vertical grid
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZWORK   ! 
-!
-INTEGER :: IRR      ! moist variables counter
-INTEGER :: JSV      ! scalar variables counter
-INTEGER :: IIU, IJU ! array sizes
-INTEGER :: IKE,IKB
-INTEGER :: JI, JJ, JK   ! loop counters
-INTEGER :: IIU_ll, IJU_ll    ! total domain I size (fin)
-INTEGER :: IIA_ll, IJA_ll    ! total domain I size (debut)
-INTEGER :: IINFO_ll      ! return code of parallel routine
-INTEGER :: IIMAX_ll, IJMAX_ll  ! total physical domain I size
-INTEGER :: JLOOP
-!
-INTEGER :: IMASK    ! mask counter
-INTEGER :: IMASKUSER! mask user number 
-!
-INTEGER :: IRESP, ILUOUT
-INTEGER :: IMI      ! Current model index
-TYPE(DIMPHYEX_t) :: YLDIMPHYEX
-!-------------------------------------------------------------------------------
-!
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-IF (.NOT. LLES_CALL) RETURN
-!
-CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
-IIU_ll = IIMAX_ll+JPHEXT
-IJU_ll = IJMAX_ll+JPHEXT
-IIA_ll=JPHEXT+1
-IJA_ll=JPHEXT+1
-IKE=SIZE(XVT,3)-JPVEXT
-IKB=1+JPVEXT
-CALL GET_DIM_EXT_ll('B',IIU,IJU)
-CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.)
-!
-ILUOUT = TLUOUT%NLU
-!
-!-------------------------------------------------------------------------------
-!
-!* interpolation coefficients for Z type grid
-!
-IF (CSPECTRA_LEVEL_TYPE=='Z') THEN
-  IF (ASSOCIATED(XCOEFLIN_CURRENT_SPEC)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_SPEC')
-  IF (ASSOCIATED(NKLIN_CURRENT_SPEC   )) CALL LES_DEALLOCATE('NKLIN_CURRENT_SPEC')
-  !
-  CALL LES_ALLOCATE('XCOEFLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/))
-  CALL LES_ALLOCATE('NKLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/))
-  !
-  XCOEFLIN_CURRENT_SPEC(:,:,:) = XCOEFLIN_SPEC(:,:,:)
-  NKLIN_CURRENT_SPEC   (:,:,:) = NKLIN_SPEC   (:,:,:)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      1.   Allocations
-!            -----------
-!
-ALLOCATE(ZP_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZDP_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZTP_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZTR_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZDISS_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZLM_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZDTHLDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDTHDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDRTDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDUDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDVDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDWDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZDSVDZ_LES(IIU,IJU,NLES_K,NSV))
-
-ALLOCATE(ZDPDZ_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZEXN_LES (IIU,IJU,NLES_K))
-ALLOCATE(ZRHO_LES (IIU,IJU,NLES_K))
-ALLOCATE(ZU_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZV_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZW_LES   (IIU,IJU,NLES_K))
-ALLOCATE(ZMF_LES  (IIU,IJU,NLES_K))
-ALLOCATE(ZTH_LES  (IIU,IJU,NLES_K))
-IF (CRAD /= 'NONE') THEN
-  ALLOCATE(ZRADEFF_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZSWU_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZSWD_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZLWU_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZLWD_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZDTHRADSW_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZDTHRADLW_LES  (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRADEFF_LES  (0,0,0))
-  ALLOCATE(ZSWU_LES  (0,0,0))
-  ALLOCATE(ZSWD_LES  (0,0,0))
-  ALLOCATE(ZLWU_LES  (0,0,0))
-  ALLOCATE(ZLWD_LES  (0,0,0))
-  ALLOCATE(ZDTHRADSW_LES  (0,0,0))
-  ALLOCATE(ZDTHRADLW_LES  (0,0,0))
-END IF
-IF (LUSERV) THEN
-  ALLOCATE(ZTHV_LES (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZTHV_LES (0,0,0))
-END IF
-ALLOCATE(ZTHL_LES (IIU,IJU,NLES_K))
-ALLOCATE(ZTKE_LES (IIU,IJU,NLES_K))
-ALLOCATE(ZKE_LES(IIU,IJU,NLES_K))
-ALLOCATE(ZTKET_LES(IIU,IJU))
-ALLOCATE(ZWORK1D (NLES_K))
-ALLOCATE(ZWORK1DT (NLES_K))
-ALLOCATE(ZZZ_LES(IIU,IJU,NLES_K))
-IF (LUSERV) THEN
-  ALLOCATE(ZRV_LES    (IIU,IJU,NLES_K))
-  ALLOCATE(ZRT_LES    (IIU,IJU,NLES_K))
-  ALLOCATE(ZREHU_LES  (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRV_LES    (0,0,0))
-  ALLOCATE(ZRT_LES    (0,0,0))
-  ALLOCATE(ZREHU_LES  (0,0,0))
-END IF
-IF (LUSERC) THEN
-  ALLOCATE(ZRC_LES    (IIU,IJU,NLES_K))
-  ALLOCATE(ZLWP_LES(IIU,IJU))
-  ALLOCATE(ZINDCLD2D(IIU,IJU))
-  ALLOCATE(ZINDCLD2D2(IIU,IJU))
-  ALLOCATE(ZCLDFR_LES(IIU,IJU,NLES_K))
-  ALLOCATE(ZWORK2D(IIU,IJU))
-  ALLOCATE(ZLWP_ANOM(IIU,IJU))
-ELSE
-  ALLOCATE(ZRC_LES    (0,0,0))
-  ALLOCATE(ZLWP_LES(0,0))
-  ALLOCATE(ZINDCLD2D(0,0))
-  ALLOCATE(ZINDCLD2D2(0,0))
-  ALLOCATE(ZCLDFR_LES(0,0,0))
-  ALLOCATE(ZWORK2D(0,0))
-  ALLOCATE(ZLWP_ANOM(0,0))
-END IF
-IF (LUSERR) THEN
-  ALLOCATE(ZRR_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZMAXWRR2D(IIU,IJU))
-  ALLOCATE(ZRWP_LES(IIU,IJU))
-  ALLOCATE(ZINPRR3D_LES (IIU,IJU,NLES_K))
-  ALLOCATE(ZEVAP3D_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZRAINFR_LES(IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRR_LES  (0,0,0))
-  ALLOCATE(ZMAXWRR2D(0,0))
-  ALLOCATE(ZRWP_LES(0,0))
-  ALLOCATE(ZINPRR3D_LES(0,0,0))
-  ALLOCATE(ZEVAP3D_LES(0,0,0))
-  ALLOCATE(ZRAINFR_LES(0,0,0))
-END IF
-IF (LUSERI) THEN
-  ALLOCATE(ZRI_LES    (IIU,IJU,NLES_K))
-  ALLOCATE(ZIWP_LES(IIU,IJU))
-  ALLOCATE(ZICEFR_LES(IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRI_LES    (0,0,0))
-  ALLOCATE(ZIWP_LES(0,0))
-  ALLOCATE(ZICEFR_LES(0,0,0))
-END IF
-IF (LUSERS) THEN
-  ALLOCATE(ZRS_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZSWP_LES(IIU,IJU))
-ELSE
-  ALLOCATE(ZRS_LES  (0,0,0))
-  ALLOCATE(ZSWP_LES(0,0))
-END IF
-IF (LUSERG) THEN
-  ALLOCATE(ZRG_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZGWP_LES(IIU,IJU))
-ELSE
-  ALLOCATE(ZRG_LES  (0,0,0))
-  ALLOCATE(ZGWP_LES(0,0))
-END IF
-IF (LUSERH) THEN
-  ALLOCATE(ZRH_LES  (IIU,IJU,NLES_K))
-  ALLOCATE(ZHWP_LES(IIU,IJU))
-ELSE
-  ALLOCATE(ZRH_LES  (0,0,0))
-  ALLOCATE(ZHWP_LES(0,0))
-END IF
-IF (NSV>0) THEN
-  ALLOCATE(ZSV_LES  (IIU,IJU,NLES_K,NSV))
-ELSE
-  ALLOCATE(ZSV_LES  (0,0,0,0))
-END IF
-!
-ALLOCATE(ZP_ANOM   (IIU,IJU,NLES_K))
-ALLOCATE(ZRHO_ANOM (IIU,IJU,NLES_K))
-ALLOCATE(ZTH_ANOM  (IIU,IJU,NLES_K))
-ALLOCATE(ZDPDZ_ANOM(IIU,IJU,NLES_K))
-IF (LUSERV) THEN
-  ALLOCATE(ZTHV_ANOM(IIU,IJU,NLES_K))
-  ALLOCATE(ZRV_ANOM (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZTHV_ANOM(0,0,0))
-  ALLOCATE(ZRV_ANOM (0,0,0))
-END IF
-IF (LUSERC) THEN
-  ALLOCATE(ZRC_ANOM (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRC_ANOM (0,0,0))
-END IF
-IF (LUSERI) THEN
-  ALLOCATE(ZRI_ANOM (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRI_ANOM (0,0,0))
-END IF
-IF (LUSERR) THEN
-  ALLOCATE(ZRR_ANOM (IIU,IJU,NLES_K))
-ELSE
-  ALLOCATE(ZRR_ANOM (0,0,0))
-END IF
-ALLOCATE(ZMEAN_DPDZ(NLES_K))
-ALLOCATE(ZLES_MEAN_DTHDZ(NLES_K))
-!
-!
-ALLOCATE(ZU_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ALLOCATE(ZV_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ALLOCATE(ZW_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ALLOCATE(ZTH_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-IF (LUSERC) THEN
-  ALLOCATE(ZTHL_SPEC(NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ELSE
-  ALLOCATE(ZTHL_SPEC(0,0,0))
-END IF
-IF (LUSERV) THEN
-  ALLOCATE(ZRV_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ELSE
-  ALLOCATE(ZRV_SPEC  (0,0,0))
-END IF
-IF (LUSERC) THEN
-  ALLOCATE(ZRC_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ELSE
-  ALLOCATE(ZRC_SPEC  (0,0,0))
-END IF
-IF (LUSERI) THEN
-  ALLOCATE(ZRI_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K))
-ELSE
-  ALLOCATE(ZRI_SPEC  (0,0,0))
-END IF
-IF (NSV>0) THEN
-  ALLOCATE(ZSV_SPEC  (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K,NSV))
-ELSE
-  ALLOCATE(ZSV_SPEC  (0,0,0,0))
-END IF
-!
-!
-ALLOCATE(ZEXN (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZRHO (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZRT  (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZTHV (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZTHL (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZEW  (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZMASSF (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZTEMP (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(ZREHU (IIU,IJU,SIZE(XTHT,3)))
-ALLOCATE(CHAMPXY1 (IIU,IJU,1))
-!
-!-------------------------------------------------------------------------------
-!
-!*      1.2  preliminary calculations
-!            ------------------------
-!
-ZEXN(:,:,:) = (XPABST/XP00)**(XRD/XCPD)
-!
-!
-!* computation of relative humidity
-ZTEMP=XTHT*ZEXN
-ZEW=EXP (XALPW -XBETAW/ZTEMP-XGAMW*ALOG(ZTEMP))
-IF (LUSERV) THEN
-  ZREHU(:,:,:)=100.*XRT(:,:,:,1)*XPABST(:,:,:)/((XRD/XRV+XRT(:,:,:,1))*ZEW(:,:,:))
-ELSE
-  ZREHU(:,:,:)=0.
-END IF
-!
-CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR,             &
-                      LUSERI, LUSERS, LUSERG, LUSERH,     &
-                      XCURRENT_L_O_EXN_CP,                &
-                      XTHT, XRT,                          &
-                      ZTHL, ZRT                           )
-!
-!* computation of density and virtual potential temperature
-!
-ZTHV=XTHT
-IF (LUSERV) ZTHV=ZTHV*(1.+XRV/XRD*XRT(:,:,:,1))/(1.+ZRT(:,:,:))
-!
-IF (CEQNSYS=='DUR') THEN
-  ZRHO=XPABST/(XRD*ZTHV*ZEXN)
-ELSE
-  ZRHO=XRHODREF*( 1. + (XCPD-XRD)/XRD*(ZEXN/XEXNREF - 1.) - (ZTHV/XTHVREF - 1.) )
-END IF
-!
-! computation of mass flux
-ZMASSF=MZM(ZRHO)*XWT
-!
-!-------------------------------------------------------------------------------
-!
-!*      2.   Vertical interpolations to LES vertical grid
-!            --------------------------------------------
-!
-!* note that velocity fields are first localized on the MASS points
-!
-!
-IF (CRAD /= 'NONE') THEN
-  CALL LES_VER_INT(   XRADEFF, ZRADEFF_LES)
-  CALL LES_VER_INT(   XSWU, ZSWU_LES)
-  CALL LES_VER_INT(   XSWD, ZSWD_LES)
-  CALL LES_VER_INT(   XLWU, ZLWU_LES)
-  CALL LES_VER_INT(   XLWD, ZLWD_LES)
-  CALL LES_VER_INT(   XDTHRADSW, ZDTHRADSW_LES)
-  CALL LES_VER_INT(   XDTHRADLW, ZDTHRADLW_LES)
-END IF
-!
-CALL LES_VER_INT( XZZ   , ZZZ_LES)
-CALL LES_VER_INT( XPABST, ZP_LES )
-CALL LES_VER_INT( XDYP, ZDP_LES )
-CALL LES_VER_INT( XTHP, ZTP_LES )
-CALL LES_VER_INT( XTR, ZTR_LES )
-CALL LES_VER_INT( XDISS, ZDISS_LES )
-CALL LES_VER_INT( XLEM, ZLM_LES )
-CALL LES_VER_INT( GZ_M_M(XPABST,XDZZ), ZDPDZ_LES )
-!
-CALL LES_VER_INT( MXF(XUT)  ,ZU_LES  )
-CALL LES_VER_INT( MYF(XVT)  ,ZV_LES  )
-CALL LES_VER_INT( MZF(XWT)  ,ZW_LES  )
-CALL LES_VER_INT( MZF(ZMASSF) ,ZMF_LES)
-CALL LES_VER_INT(     XTHT  ,ZTH_LES )
-CALL LES_VER_INT( MXF(MZF(GZ_U_UW(XUT,XDZZ))), ZDUDZ_LES )
-CALL LES_VER_INT( MYF(MZF(GZ_V_VW(XVT,XDZZ))), ZDVDZ_LES )
-CALL LES_VER_INT( GZ_W_M(XWT,XDZZ), ZDWDZ_LES )
-CALL LES_VER_INT( ZEXN, ZEXN_LES)  
-!
-CALL LES_VER_INT( GZ_M_M(XTHT,XDZZ), ZDTHDZ_LES )
-!
-CALL LES_VER_INT(ZRHO, ZRHO_LES)
-!
-IF (LUSERV) CALL LES_VER_INT(ZTHV, ZTHV_LES)
-CALL LES_VER_INT(ZTHL, ZTHL_LES)
-CALL LES_VER_INT( GZ_M_M(ZTHL,XDZZ), ZDTHLDZ_LES )
-!
-CALL LES_VER_INT(     XTKET ,ZTKE_LES)
-IRR = 0
-IF (LUSERV) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRV_LES )
-  CALL LES_VER_INT(     ZRT(:,:,:)      ,ZRT_LES )
-  CALL LES_VER_INT( GZ_M_M(ZRT,XDZZ), ZDRTDZ_LES )
-  CALL LES_VER_INT(   ZREHU(:,:,:)     ,ZREHU_LES)
-END IF
-IF (LUSERC) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRC_LES )
-  ALLOCATE(ZINDCLD (IIU,IJU,NLES_K))
-  ALLOCATE(ZINDCLD2(IIU,IJU,NLES_K))
-  ZINDCLD = CEILING(ZRC_LES-1.E-6)
-  ZINDCLD2 = CEILING(ZRC_LES-1.E-5)
-  CALL LES_VER_INT( XCLDFR(:,:,:)  ,ZCLDFR_LES )
-ELSE
-  ALLOCATE(ZINDCLD (0,0,0))
-  ALLOCATE(ZINDCLD2(0,0,0))
-END IF
-IF (LUSERR) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRR_LES )
-  CALL LES_VER_INT(     XINPRR3D(:,:,:), ZINPRR3D_LES)
-  CALL LES_VER_INT(    XEVAP3D(:,:,:), ZEVAP3D_LES)
-  CALL LES_VER_INT( XRAINFR(:,:,:)  ,ZRAINFR_LES )
-END IF
-IF (LUSERC) THEN
-    DO JJ=1,IJU
-     DO JI=1,IIU
-      ZINDCLD2D(JI,JJ) = maxval(ZINDCLD(JI,JJ,:))
-      ZINDCLD2D2(JI,JJ)= maxval(ZINDCLD2(JI,JJ,:))
-     END DO
-    END DO
-  !* integration of rho rc
-  !!!ZLWP_LES only for cloud water           
-    ZLWP_LES(:,:)  = 0.
-      DO JK=1,NLES_K-1
-    ZLWP_LES(:,:) = ZLWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                      * (ZRC_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-      END DO
-  CALL LES_MEAN_ll ( ZLWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_LWP(NLES_CURRENT_TCOUNT)     )    
-!
-END IF
-
-  !!!ZRWP_LES only for rain water   
-IF (LUSERR) THEN
-   ZRWP_LES(:,:)=0.
-  DO JK=1,NLES_K-1
-    ZRWP_LES(:,:) = ZRWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                    * (ZRR_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-  END DO
-  CALL LES_MEAN_ll ( ZRWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_RWP(NLES_CURRENT_TCOUNT)     )
-ENDIF
-!                    
-IF (LUSERI) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRI_LES )
-  ZIWP_LES(:,:)=0.
-  DO JK=1,NLES_K-1
-    ZIWP_LES(:,:) = ZIWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                    * (ZRI_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-  END DO
-  CALL LES_MEAN_ll ( ZIWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_IWP(NLES_CURRENT_TCOUNT)     )
-  CALL LES_VER_INT( XICEFR(:,:,:)  ,ZICEFR_LES )
-END IF
-IF (LUSERS) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRS_LES )
-  ZSWP_LES(:,:)=0.
-  DO JK=1,NLES_K-1
-    ZSWP_LES(:,:) = ZSWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                    * (ZRS_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-  END DO
-  CALL LES_MEAN_ll ( ZSWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_SWP(NLES_CURRENT_TCOUNT)     )
-END IF
-IF (LUSERG) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRG_LES )
-  ZGWP_LES(:,:)=0.
-  DO JK=1,NLES_K-1
-    ZGWP_LES(:,:) = ZGWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                    * (ZRG_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-  END DO
-  CALL LES_MEAN_ll ( ZGWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_GWP(NLES_CURRENT_TCOUNT)     )
-END IF
-IF (LUSERH) THEN
-  IRR = IRR + 1
-  CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRH_LES )
-  ZHWP_LES(:,:)=0.
-  DO JK=1,NLES_K-1
-    ZHWP_LES(:,:) = ZHWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                    * (ZRH_LES(:,:,JK)) * ZRHO_LES(:,:,JK)
-  END DO
-  CALL LES_MEAN_ll ( ZHWP_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_HWP(NLES_CURRENT_TCOUNT)     )
-END IF
-IF (NSV>0) THEN
-  DO JSV=1,NSV
-    CALL LES_VER_INT(  XSVT(:,:,:,JSV), ZSV_LES(:,:,:,JSV) )
-    CALL LES_VER_INT( GZ_M_M(XSVT(:,:,:,JSV),XDZZ), ZDSVDZ_LES(:,:,:,JSV) )
-  END DO
-END IF
-!
-!*mean sw and lw fluxes  
-  CALL LES_MEAN_ll ( ZSWU_LES, LLES_CURRENT_CART_MASK,               &
-                    XLES_SWU(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZSWD_LES, LLES_CURRENT_CART_MASK,               &
-                    XLES_SWD(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZLWU_LES, LLES_CURRENT_CART_MASK,               &
-                    XLES_LWU(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZLWD_LES, LLES_CURRENT_CART_MASK,               &
-                    XLES_LWD(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZDTHRADSW_LES, LLES_CURRENT_CART_MASK,          &
-                    XLES_DTHRADSW(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZDTHRADLW_LES, LLES_CURRENT_CART_MASK,          &
-                    XLES_DTHRADLW(:,NLES_CURRENT_TCOUNT)     )
-  CALL LES_MEAN_ll ( ZRADEFF_LES, LLES_CURRENT_CART_MASK,             &
-                    XLES_RADEFF(:,NLES_CURRENT_TCOUNT)     )
-!* mean vertical profiles on the LES grid
-!
-  CALL LES_MEAN_ll ( ZU_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_U(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZV_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_V(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZW_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_W(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZP_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZDP_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_DP(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZTP_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_TP(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZTR_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_TR(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZDISS_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_DISS(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZLM_LES, LLES_CURRENT_CART_MASK,                   &
-                     XLES_MEAN_LM(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  CALL LES_MEAN_ll ( ZRHO_LES, LLES_CURRENT_CART_MASK,                 &
-                     XLES_MEAN_RHO(:,NLES_CURRENT_TCOUNT,1)   )
-!
-  CALL LES_MEAN_ll ( ZMF_LES, LLES_CURRENT_CART_MASK,                  &
-                     XLES_MEAN_Mf(:,NLES_CURRENT_TCOUNT,1)     )                             
-!
-  CALL LES_MEAN_ll ( ZTH_LES*ZEXN_LES, LLES_CURRENT_CART_MASK,         &
-                     ZWORK1DT(:)                                 )                    
-!                     
-!computation of es
-  ZWORK1D(:)=EXP(XALPW -                                          &
-                  XBETAW/ZWORK1DT(:)         &
-                  -XGAMW*ALOG(ZWORK1DT(:)))
-!computation of qs
-
-  IF (LUSERV)                                                          &
-  XLES_MEAN_Qs(:,NLES_CURRENT_TCOUNT,1)=XRD/XRV*ZWORK1D(:)/        &
-  (XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1)-ZWORK1D(:)*(1-XRD/XRV))   
-! qs is determined from the temperature average over the current_mask
-!
-  CALL LES_MEAN_ll ( ZTH_LES, LLES_CURRENT_CART_MASK,                  &
-                     XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERV)                                                          &
-  CALL LES_MEAN_ll ( ZTHV_LES, LLES_CURRENT_CART_MASK,                 &
-                     XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,1)    )
-!
-  IF (LUSERC)                                                       &
-  CALL LES_MEAN_ll ( ZTHL_LES, LLES_CURRENT_CART_MASK,              &
-                     XLES_MEAN_Thl(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERC)                                                       &
-  CALL LES_MEAN_ll ( ZRT_LES, LLES_CURRENT_CART_MASK,               &
-                     XLES_MEAN_Rt(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZRV_LES, LLES_CURRENT_CART_MASK,               &
-                     XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZREHU_LES, LLES_CURRENT_CART_MASK,             &
-                   XLES_MEAN_Rehu(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERC) &
-  CALL LES_MEAN_ll ( ZRC_LES, LLES_CURRENT_CART_MASK,               &
-                    XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERC) THEN 
-     CALL LES_MEAN_ll ( ZINDCLD, LLES_CURRENT_CART_MASK,               &
-                    XLES_MEAN_INDCf(:,NLES_CURRENT_TCOUNT,1)     )
-     CALL LES_MEAN_ll ( ZINDCLD2, LLES_CURRENT_CART_MASK,              &
-                    XLES_MEAN_INDCf2(:,NLES_CURRENT_TCOUNT,1)    )
-     CALL LES_MEAN_ll ( ZCLDFR_LES, LLES_CURRENT_CART_MASK,            &
-                    XLES_MEAN_Cf(:,NLES_CURRENT_TCOUNT,1)        )
-!
-!* cf total
-     CALL LES_MEAN_ll( ZINDCLD2D, LLES_CURRENT_CART_MASK(:,:,1) ,      & 
-                   XLES_CFtot(NLES_CURRENT_TCOUNT)      ) 
-     CALL LES_MEAN_ll( ZINDCLD2D2, LLES_CURRENT_CART_MASK(:,:,1),      &
-                    XLES_CF2tot(NLES_CURRENT_TCOUNT)    )
-  ENDIF
-!
-  IF (LUSERR) THEN
-
-    CALL LES_MEAN_ll ( XINPRR, LLES_CURRENT_CART_MASK(:,:,1),    &
-                     XLES_INPRR(NLES_CURRENT_TCOUNT)    )
-    ZINPRRm=0.
-    ZCOUNT=0.
-    ZINDCLD2D(:,:)=0.
-    DO JJ=1,IJU
-     DO JI=1,IIU
-       IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZINPRRm = ZINPRRm+XINPRR(JI,JJ)
-       IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZINDCLD2D(JI,JJ)=1.
-       IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZCOUNT=ZCOUNT+1.
-     END DO
-    END DO                 
-    IF (ZCOUNT .GE. 1) ZINPRRm=ZINPRRm/ZCOUNT
-    XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)=ZINPRRm
-    CALL  LES_MEAN_ll ( ZINDCLD2D, LLES_CURRENT_CART_MASK(:,:,1),  &
-                     XLES_PRECFR(NLES_CURRENT_TCOUNT)         )   
-    CALL LES_MEAN_ll ( ZINPRR3D_LES, LLES_CURRENT_CART_MASK,  &
-                     XLES_INPRR3D(:,NLES_CURRENT_TCOUNT,1)  )
-    CALL LES_MEAN_ll ( ZEVAP3D_LES, LLES_CURRENT_CART_MASK,  &
-                     XLES_EVAP3D(:,NLES_CURRENT_TCOUNT,1)   )         
-    DO JK=1,NLES_K
-     CHAMPXY1(:,:,1)=ZINPRR3D_LES(:,:,JK)                
-     XLES_MAX_INPRR3D(JK,NLES_CURRENT_TCOUNT,1)=MAX_ll (CHAMPXY1,IINFO_ll, &
-                         IIA_ll,IJA_ll,1,IIU_ll,IJU_ll,1)
-    END DO
-!
-
-!   conversion de m/s en mm/day
- XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)=XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)*3.6E6*24.
-    XLES_INPRR(NLES_CURRENT_TCOUNT)=XLES_INPRR(NLES_CURRENT_TCOUNT)*3.6E6*24.
-
-    CALL LES_MEAN_ll ( XACPRR, LLES_CURRENT_CART_MASK(:,:,1),    &
-                     XLES_ACPRR(NLES_CURRENT_TCOUNT)    )
-!   conversion de m en mm
-    XLES_ACPRR(NLES_CURRENT_TCOUNT)=XLES_ACPRR(NLES_CURRENT_TCOUNT)*1000.
-    CALL LES_MEAN_ll ( ZRAINFR_LES, LLES_CURRENT_CART_MASK,            &
-                    XLES_MEAN_RF(:,NLES_CURRENT_TCOUNT,1)        )
-
-  ENDIF
-!
-  IF (LUSERC ) THEN
-    IF (( CCLOUD(1:3) == 'ICE'                                   .AND.LSEDIC) .OR. &
-    ((CCLOUD=='C2R2' .OR. CCLOUD=='C3R5' .OR. CCLOUD=='KHKO').AND.LSEDC)  .OR. &
-    ( CCLOUD=='LIMA'                                         .AND.MSEDC))  THEN
-      CALL LES_MEAN_ll ( XINPRC, LLES_CURRENT_CART_MASK(:,:,1),    &
-                     XLES_INPRC(NLES_CURRENT_TCOUNT)    )
-!     conversion from m/s to mm/day
-      XLES_INPRC(NLES_CURRENT_TCOUNT)=XLES_INPRC(NLES_CURRENT_TCOUNT)*3.6E6*24.
-    ENDIF
-    IF ( (((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LDEPOC) &
-         .OR. ( (CCLOUD(1:3) == 'ICE') .AND. LDEPOSC) ) THEN
-        CALL LES_MEAN_ll ( XINDEP, LLES_CURRENT_CART_MASK(:,:,1),    &
-                     XLES_INDEP(NLES_CURRENT_TCOUNT)    )
-!       conversion from m/s to mm/day
-        XLES_INDEP(NLES_CURRENT_TCOUNT)=XLES_INDEP(NLES_CURRENT_TCOUNT)*3.6E6*24.
-    ENDIF
-  ENDIF
-!
-  IF (LUSERR) &
-  CALL LES_MEAN_ll ( ZRR_LES, LLES_CURRENT_CART_MASK,               &
-                     XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERI) &
-  CALL LES_MEAN_ll ( ZRI_LES, LLES_CURRENT_CART_MASK,               &
-                     XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,1)     )
-  CALL LES_MEAN_ll ( ZICEFR_LES, LLES_CURRENT_CART_MASK,            &
-                    XLES_MEAN_If(:,NLES_CURRENT_TCOUNT,1)        )
-!
-  IF (LUSERS) &
-  CALL LES_MEAN_ll ( ZRS_LES, LLES_CURRENT_CART_MASK,               &
-                   XLES_MEAN_Rs(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERG) &
-  CALL LES_MEAN_ll ( ZRG_LES, LLES_CURRENT_CART_MASK,               &
-                   XLES_MEAN_Rg(:,NLES_CURRENT_TCOUNT,1)     )
-!
-  IF (LUSERH) &
-  CALL LES_MEAN_ll ( ZRH_LES, LLES_CURRENT_CART_MASK,               &
-                     XLES_MEAN_Rh(:,NLES_CURRENT_TCOUNT,1)   )
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), LLES_CURRENT_CART_MASK,   &
-                       XLES_MEAN_Sv(:,NLES_CURRENT_TCOUNT,1,JSV)     )
-  END DO
-!
-  CALL LES_MEAN_ll ( ZDPDZ_LES, LLES_CURRENT_CART_MASK,      &
-                     ZMEAN_DPDZ(:)                           )
-  CALL LES_MEAN_ll ( ZDTHDZ_LES, LLES_CURRENT_CART_MASK,      &
-                     ZLES_MEAN_DTHDZ(:)                      )
-                     
-!
-!* build the 3D resolved turbulent fields by removing the mean field
-!
-DO JJ=1,IJU
-  DO JI=1,IIU
-    ZP_ANOM(JI,JJ,:) = ZP_LES(JI,JJ,:) - XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1)
-    ZDPDZ_ANOM(JI,JJ,:) = ZDPDZ_LES(JI,JJ,:) - ZMEAN_DPDZ(:)
-    ZTH_ANOM(JI,JJ,:) = ZTH_LES(JI,JJ,:) - XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,1)
-    ZRHO_ANOM(JI,JJ,:) = ZRHO_LES(JI,JJ,:) - XLES_MEAN_Rho(:,NLES_CURRENT_TCOUNT,1)
-    IF (LUSERV) THEN
-      ZTHV_ANOM(JI,JJ,:) = ZTHV_LES(JI,JJ,:) - XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,1)
-      ZRV_ANOM(JI,JJ,:) = ZRV_LES(JI,JJ,:) - XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,1)
-    END IF
-    IF (LUSERC) THEN
-      ZRC_ANOM(JI,JJ,:) = ZRC_LES(JI,JJ,:) - XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,1)
-      ZLWP_ANOM(JI,JJ) =ZLWP_LES(JI,JJ)-XLES_LWP(NLES_CURRENT_TCOUNT)
-    END IF
-    IF (LUSERI) THEN
-      ZRI_ANOM(JI,JJ,:) = ZRI_LES(JI,JJ,:) - XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,1)
-    END IF
-    IF (LUSERR) THEN
-      ZRR_ANOM(JI,JJ,:) = ZRR_LES(JI,JJ,:) - XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,1)
-    END IF
-  END DO
-END DO
-!
-!
-!--------------------------------------------------------------------------------
-!
-!* vertical grid computed at first LES call for this model
-!
-IF (NLES_CURRENT_TCOUNT==1) THEN
-  ALLOCATE(ZZ_LES    (IIU,IJU,NLES_K))
-  CALL LES_VER_INT( MZF(XZZ)  ,ZZ_LES   )
-  CALL LES_MEAN_ll ( ZZ_LES, LLES_CURRENT_CART_MASK, XLES_Z  )
-  DEALLOCATE(ZZ_LES)
-  CALL LES_MEAN_ll ( XZS,    LLES_CURRENT_CART_MASK(:,:,1), XLES_ZS )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      3.   Vertical interpolations to SECTRA computations vertical grid
-!            ------------------------------------------------------------
-!
-!* note that velocity fields are previously localized on the MASS points
-!
-CALL SPEC_VER_INT(IMI, MXF(XUT)  ,ZU_SPEC  )
-CALL SPEC_VER_INT(IMI, MYF(XVT)  ,ZV_SPEC  )
-CALL SPEC_VER_INT(IMI, MZF(XWT)  ,ZW_SPEC  )
-CALL SPEC_VER_INT(IMI,     XTHT  ,ZTH_SPEC )
-IF (LUSERC) CALL SPEC_VER_INT(IMI,     ZTHL  ,ZTHL_SPEC)
-IRR = 0
-IF (LUSERV) THEN
-  IRR = IRR + 1
-  CALL SPEC_VER_INT(IMI,     XRT(:,:,:,IRR)  ,ZRV_SPEC )
-END IF
-IF (LUSERC) THEN
-  IRR = IRR + 1
-  CALL SPEC_VER_INT(IMI,     XRT(:,:,:,IRR)  ,ZRC_SPEC )
-END IF
-IF (LUSERR) THEN
-  IRR = IRR + 1
-END IF
-IF (LUSERI) THEN
-  IRR = IRR + 1
-  CALL SPEC_VER_INT(IMI,     XRT(:,:,:,IRR)  ,ZRI_SPEC )
-END IF
-IF (NSV>0) THEN
-  DO JSV=1,NSV
-    CALL SPEC_VER_INT(IMI,  XSVT(:,:,:,JSV), ZSV_SPEC(:,:,:,JSV) )
-  END DO
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.   Call to LES computations on cartesian (sub-)domain
-!            --------------------------------------------------
-!
-IMASK=1
-!
-CALL LES(LLES_CURRENT_CART_MASK)
-!
-!-------------------------------------------------------------------------------
-!
-!*      5.   Call to LES computations on nebulosity mask
-!            -------------------------------------------
-!
-IF (LLES_NEB_MASK) THEN
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_NEB_MASK .AND. LLES_CURRENT_CART_MASK)
-!
-  IMASK=IMASK+1
-  CALL LES((.NOT. LLES_CURRENT_NEB_MASK) .AND. LLES_CURRENT_CART_MASK)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      6.   Call to LES computations on cloud core mask
-!            -------------------------------------------
-!
-IF (LLES_CORE_MASK) THEN
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_CORE_MASK .AND. LLES_CURRENT_CART_MASK)
-!
-  IMASK=IMASK+1
-  CALL LES((.NOT. LLES_CURRENT_CORE_MASK) .AND. LLES_CURRENT_CART_MASK)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      7.   Call to LES computations on user mask
-!            -------------------------------------
-!
-IF (LLES_MY_MASK) THEN
- DO JI=1,NLES_MASKS_USER
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_MY_MASKS(:,:,:,JI))
- END DO
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      7b.  Call to LES computations on conditional sampling mask
-!            -----------------------------------------------------
-!
-IF (LLES_CS_MASK) THEN
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_CS1_MASK)
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_CS2_MASK)
-  IMASK=IMASK+1
-  CALL LES(LLES_CURRENT_CS3_MASK)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*      8.   budgets
-!            -------
-!
-!*      8.1  tendencies
-!            ----------
-!
-!
-!*      8.2  dynamical production, transport and mean advection
-!            --------------------------------------------------
-!
-ALLOCATE(ZLES_MEAN_DRtDZ(NLES_K))
-ALLOCATE(ZLES_MEAN_DSVDZ(NLES_K,NSV))
-!
-IF (LUSERV) THEN
-  ZLES_MEAN_DRtDZ(:) = XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,1)
-ELSE
-  ZLES_MEAN_DRtDZ(:) = XUNDEF
-END IF
-!
-ZLES_MEAN_DSVDZ = 0.
-DO JSV=1,NSV
-  ZLES_MEAN_DSvDZ(:,JSV) = XLES_MEAN_DSvDZ(:,NLES_CURRENT_TCOUNT,1,JSV)
-END DO
-!
-CALL LES_RES_TR(LUSERV,                                    &
-                XLES_MEAN_DUDZ(:,NLES_CURRENT_TCOUNT,1),   &
-                XLES_MEAN_DVDZ(:,NLES_CURRENT_TCOUNT,1),   &
-                XLES_MEAN_DWDZ(:,NLES_CURRENT_TCOUNT,1),   &
-                XLES_MEAN_DThlDZ(:,NLES_CURRENT_TCOUNT,1), &
-                ZLES_MEAN_DRtDZ(:),                        &
-                ZLES_MEAN_DSvDZ(:,:)                       )
-!
-DEALLOCATE(ZLES_MEAN_DRtDZ)
-DEALLOCATE(ZLES_MEAN_DSVDZ)
-!
-CALL LES_BUDGET_TEND_n
-!*      8.3  end of LES budgets computations
-!            -------------------------------
-!
-DO JLOOP=1,NLES_TOT
-  XLES_BU_RES_KE   (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_KE   (:,JLOOP)
-  XLES_BU_RES_WThl (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_WThl (:,JLOOP)
-  XLES_BU_RES_Thl2 (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_Thl2 (:,JLOOP)
-  XLES_BU_SBG_Tke  (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_SBG_Tke  (:,JLOOP)
-  IF (LUSERV) THEN
-    XLES_BU_RES_WRt  (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_WRt  (:,JLOOP)
-    XLES_BU_RES_Rt2  (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_Rt2  (:,JLOOP)
-    XLES_BU_RES_ThlRt(:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_ThlRt(:,JLOOP)
-  END IF
-  DO JSV=1,NSV
-    XLES_BU_RES_Sv2  (:,NLES_CURRENT_TCOUNT,JLOOP,JSV) = X_LES_BU_RES_Sv2  (:,JLOOP,JSV)
-    XLES_BU_RES_WSv  (:,NLES_CURRENT_TCOUNT,JLOOP,JSV) = X_LES_BU_RES_WSv  (:,JLOOP,JSV)
-  END DO
-END DO
-!
-!-------------------------------------------------------------------------------
-!
-!*      9.   Deallocations
-!            -------------
-!
-!*      9.1  local variables
-!            ---------------
-!
-DEALLOCATE(ZEXN      )
-DEALLOCATE(ZTHL)
-DEALLOCATE(ZRT       )
-DEALLOCATE(ZTHV      )
-DEALLOCATE(ZRHO      )
-DEALLOCATE(ZEW       )
-
-DEALLOCATE(ZINDCLD   )
-DEALLOCATE(ZINDCLD2  )
-DEALLOCATE(ZINDCLD2D )
-DEALLOCATE(ZINDCLD2D2)
-DEALLOCATE(ZCLDFR_LES)
-DEALLOCATE(ZICEFR_LES)
-DEALLOCATE(ZRAINFR_LES)
-DEALLOCATE(ZMASSF    )  
-DEALLOCATE(ZTEMP     )
-DEALLOCATE(ZREHU     )
-DEALLOCATE(CHAMPXY1  )
-!
-DEALLOCATE(ZU_LES)
-DEALLOCATE(ZV_LES)
-DEALLOCATE(ZW_LES)
-DEALLOCATE(ZTHL_LES)
-DEALLOCATE(ZRT_LES)
-DEALLOCATE(ZSV_LES)
-DEALLOCATE(ZP_LES   )
-DEALLOCATE(ZDP_LES   )
-DEALLOCATE(ZTP_LES   )
-DEALLOCATE(ZTR_LES   )
-DEALLOCATE(ZDISS_LES   )
-DEALLOCATE(ZLM_LES   )
-DEALLOCATE(ZDPDZ_LES)
-DEALLOCATE(ZLWP_ANOM)
-DEALLOCATE(ZWORK2D)
-DEALLOCATE(ZWORK1D)
-DEALLOCATE(ZWORK1DT)
-DEALLOCATE(ZMAXWRR2D)
-DEALLOCATE(ZDTHLDZ_LES)
-DEALLOCATE(ZDTHDZ_LES)
-DEALLOCATE(ZDRTDZ_LES)
-DEALLOCATE(ZDSVDZ_LES)
-DEALLOCATE(ZDUDZ_LES)
-DEALLOCATE(ZDVDZ_LES)
-DEALLOCATE(ZDWDZ_LES)
-DEALLOCATE(ZRHO_LES )
-DEALLOCATE(ZEXN_LES )
-DEALLOCATE(ZTH_LES  )
-DEALLOCATE(ZMF_LES  )
-DEALLOCATE(ZTHV_LES )
-DEALLOCATE(ZTKE_LES )
-DEALLOCATE(ZKE_LES )
-DEALLOCATE(ZTKET_LES)
-DEALLOCATE(ZRV_LES  )
-DEALLOCATE(ZREHU_LES  )
-DEALLOCATE(ZRC_LES  )
-DEALLOCATE(ZRR_LES  )
-DEALLOCATE(ZZZ_LES)
-DEALLOCATE(ZLWP_LES )
-DEALLOCATE(ZRWP_LES )
-DEALLOCATE(ZIWP_LES )
-DEALLOCATE(ZSWP_LES )
-DEALLOCATE(ZGWP_LES )
-DEALLOCATE(ZHWP_LES )
-DEALLOCATE(ZINPRR3D_LES)
-DEALLOCATE(ZEVAP3D_LES)
-DEALLOCATE(ZRI_LES  )
-DEALLOCATE(ZRS_LES  )
-DEALLOCATE(ZRG_LES  )
-DEALLOCATE(ZRH_LES  )
-DEALLOCATE(ZP_ANOM  )
-DEALLOCATE(ZRHO_ANOM)
-DEALLOCATE(ZTH_ANOM )
-DEALLOCATE(ZTHV_ANOM)
-DEALLOCATE(ZRV_ANOM )
-DEALLOCATE(ZRC_ANOM )
-DEALLOCATE(ZRI_ANOM )
-DEALLOCATE(ZRR_ANOM )
-DEALLOCATE(ZDPDZ_ANOM)
-DEALLOCATE(ZMEAN_DPDZ)
-DEALLOCATE(ZLES_MEAN_DTHDZ)
-!
-DEALLOCATE(ZU_SPEC   )
-DEALLOCATE(ZV_SPEC   )
-DEALLOCATE(ZW_SPEC   )
-DEALLOCATE(ZTH_SPEC  )
-DEALLOCATE(ZTHL_SPEC )
-DEALLOCATE(ZRV_SPEC  )
-DEALLOCATE(ZRC_SPEC  )
-DEALLOCATE(ZRI_SPEC  )
-DEALLOCATE(ZSV_SPEC  )
-!
-DEALLOCATE(ZRADEFF_LES  )
-DEALLOCATE(ZSWU_LES  )
-DEALLOCATE(ZSWD_LES  )
-DEALLOCATE(ZLWD_LES  )
-DEALLOCATE(ZLWU_LES  )
-DEALLOCATE(ZDTHRADSW_LES  )
-DEALLOCATE(ZDTHRADLW_LES  )
-!
-!*      9.2  current time-step LES masks (in MODD_LES)
-!            ---------------------------
-!
-CALL LES_DEALLOCATE('LLES_CURRENT_CART_MASK')
-IF (LLES_NEB_MASK)     CALL LES_DEALLOCATE('LLES_CURRENT_NEB_MASK')
-IF (LLES_CORE_MASK)    CALL LES_DEALLOCATE('LLES_CURRENT_CORE_MASK')
-IF (LLES_MY_MASK)   THEN
-   CALL LES_DEALLOCATE('LLES_CURRENT_MY_MASKS')
-END IF
-IF (LLES_CS_MASK)   THEN
-    CALL LES_DEALLOCATE('LLES_CURRENT_CS1_MASK')
-    IF (NSV_CS >= 2) CALL LES_DEALLOCATE('LLES_CURRENT_CS2_MASK')
-    IF (NSV_CS == 3) CALL LES_DEALLOCATE('LLES_CURRENT_CS3_MASK')
-END IF
-!
-!
-!*      9.3  variables in MODD_LES_BUDGET
-!            ----------------------------
-!
-
-DEALLOCATE(XU_ANOM  )
-DEALLOCATE(XV_ANOM  )
-DEALLOCATE(XW_ANOM  )
-DEALLOCATE(XTHL_ANOM)
-DEALLOCATE(XRT_ANOM )
-DEALLOCATE(XSV_ANOM )
-!
-DEALLOCATE(XCURRENT_L_O_EXN_CP)
-DEALLOCATE(XCURRENT_RHODJ     )
-!
-DEALLOCATE(XCURRENT_RUS  )
-DEALLOCATE(XCURRENT_RVS  )
-DEALLOCATE(XCURRENT_RWS  )
-DEALLOCATE(XCURRENT_RTHS )
-DEALLOCATE(XCURRENT_RTKES)
-DEALLOCATE(XCURRENT_RRS  )
-DEALLOCATE(XCURRENT_RSVS )
-DEALLOCATE(XCURRENT_RTHLS)
-DEALLOCATE(XCURRENT_RRTS )
-
-DEALLOCATE(X_LES_BU_RES_KE   )
-DEALLOCATE(X_LES_BU_RES_WThl )
-DEALLOCATE(X_LES_BU_RES_Thl2 )
-DEALLOCATE(X_LES_BU_RES_WRt  )
-DEALLOCATE(X_LES_BU_RES_Rt2  )
-DEALLOCATE(X_LES_BU_RES_ThlRt)
-DEALLOCATE(X_LES_BU_RES_Sv2  )
-DEALLOCATE(X_LES_BU_RES_WSv  )
-DEALLOCATE(X_LES_BU_SBG_TKE  )
-!-------------------------------------------------------------------------------
-!
-!*      10.  end of LES computations for this time-step
-!            ------------------------------------------
-!
-LLES_CALL=.FALSE.
-CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR,         &
-                  LUSERI, LUSERS, LUSERG, LUSERH  )
-!
-!-------------------------------------------------------------------------------
-!
-CONTAINS
-!
-!     ##########################################################################
-      SUBROUTINE  LES(OMASK)
-!     ##########################################################################
-!
-!
-!!****  *LES* computes the current time-step LES diagnostics for one mask.
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         07/02/00
-!!
-!! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_PARAMETERS
-!
-USE MODI_LES_FLUX_ll
-USE MODI_LES_3RD_MOMENT_ll
-USE MODI_LES_4TH_MOMENT_ll
-USE MODI_LES_MEAN_1PROC
-USE MODI_LES_MEAN_MPROC
-USE MODI_LES_PDF_ll
-!
-USE MODI_LES_HOR_CORR
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-LOGICAL, DIMENSION(:,:,:),   INTENT(IN) :: OMASK     ! 2D mask for computations
-!
-!
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JSV      ! scalar variables counter
-INTEGER :: JI
-INTEGER :: JK       ! vertical loop counter
-INTEGER :: JPDF     ! pdf counter
-!
-LOGICAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: GUPDRAFT_MASK
-LOGICAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: GDOWNDRAFT_MASK
-REAL,    DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZUPDRAFT
-REAL,    DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZDOWNDRAFT
-REAL,    DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZW_UP
-REAL,    DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZWORK_LES
-!
-INTEGER, DIMENSION(SIZE(ZW_LES,3)) :: IAVG_PTS
-INTEGER, DIMENSION(SIZE(ZW_LES,3)) :: IUND_PTS
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZAVG
-!
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_U3
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_UV2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_UW2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_VU2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_V3
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_VW2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_WU2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_WV2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_U2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_V2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_W2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_U2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_V2
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_W2
-REAL,    DIMENSION(SIZE(ZW_LES,3),NPDF) :: ZPDF
-!
-INTEGER, DIMENSION(1)               :: IKMIN_FLUX ! vertical index of min. W'thl'
-INTEGER, DIMENSION(1)               :: IKMAX_TH !vertical index maxdth
-INTEGER, DIMENSION(1)               :: IKMAX_CF   ! vertical index of max. Cf
-!
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZKE_TOT    ! total turbulent kinetic energy
-REAL                               :: ZINT_KE_TOT! integral of KE_TOT
-REAL                               :: ZINT_RHOKE! integral of RHO*KE
-REAL                               :: ZFRIC_SURF ! surface friction
-REAL,    DIMENSION(SIZE(ZW_LES,3)) :: ZFRIC_LES  ! friction at all LES levels
-!
-!-------------------------------------------------------------------------------
-!
-!       1.   local diagnostics (for any mask type)
-!            -----------------
-!
-!
-!       1.2  Number of points used for averaging on current processor
-!            --------------------------------------------------------
-!
-!* to be sure to be coherent with other computations,
-!  a field on LES vertical grid (and horizontal mass point grid) is used.
-!  This information is necessary for the subgrid fluxes computations, because
-!  half of the work is already done, but the number of averaging points was
-!  not kept.
-!
-CALL LES_MEAN_1PROC ( XW_ANOM, OMASK,                              &
-                      ZAVG(:),                                     &
-                      IAVG_PTS(:),                                 &
-                      IUND_PTS(:)                                  )
-!
-!
-!       1.3  Number of points used for averaging on all processor
-!            ----------------------------------------------------
-!
-CALL LES_MEAN_ll ( XW_ANOM, OMASK,                                  &
-                   ZAVG(:),                                         &
-                   NLES_AVG_PTS_ll(:,NLES_CURRENT_TCOUNT,IMASK),    &
-                   NLES_UND_PTS_ll(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!
-!       1.4  Mean quantities
-!            ---------------
-!
-IF (LLES_MEAN .AND. IMASK > 1) THEN
-!
-!* horizontal wind velocities
-!
-  CALL LES_MEAN_ll ( ZU_LES, OMASK,                               &
-                     XLES_MEAN_U(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-  CALL LES_MEAN_ll ( ZV_LES, OMASK,                               &
-                     XLES_MEAN_V(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* vertical wind velocity
-!
-  CALL LES_MEAN_ll ( ZW_LES, OMASK,                               &
-                     XLES_MEAN_W(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* pressure
-!
-  CALL LES_MEAN_ll ( ZP_LES, OMASK,                               &
-                     XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* dynamical production TKE
-!
-  CALL LES_MEAN_ll ( ZDP_LES, OMASK,                               &
-                     XLES_MEAN_DP(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* thermal production TKE
-!
-  CALL LES_MEAN_ll ( ZTP_LES, OMASK,                               &
-                     XLES_MEAN_TP(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* transport TKE
-!
-  CALL LES_MEAN_ll ( ZTR_LES, OMASK,                               &
-                     XLES_MEAN_TR(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* dissipation TKE
-!
-  CALL LES_MEAN_ll ( ZDISS_LES, OMASK,                               &
-                     XLES_MEAN_DISS(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* mixing length            
-!
-  CALL LES_MEAN_ll ( ZLM_LES, OMASK,                               &
-                     XLES_MEAN_LM(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* density
-!
-  CALL LES_MEAN_ll ( ZRHO_LES, OMASK,                             &
-                     XLES_MEAN_RHO(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!
-!* potential temperature
-!
-  CALL LES_MEAN_ll ( ZTH_LES, OMASK,                               &
-                     XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* mass flux
-  CALL LES_MEAN_ll ( ZMF_LES, OMASK,                               &
-                     XLES_MEAN_Mf(:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!
-!* virtual potential temperature
-!
-  IF (LUSERV)                                                      &
-  CALL LES_MEAN_ll ( ZTHV_LES, OMASK,                              &
-                     XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* liquid potential temperature
-!
-  IF (LUSERC) THEN
-    CALL LES_MEAN_ll ( ZTHL_LES, OMASK,                               &
-                       XLES_MEAN_Thl(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* vapor mixing ratio
-!
-  IF (LUSERV) THEN
-    CALL LES_MEAN_ll ( ZRV_LES, OMASK,                               &
-                       XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!*relative humidity
-!
-  IF (LUSERV) THEN
-    CALL LES_MEAN_ll ( ZREHU_LES, OMASK,                               &
-                       XLES_MEAN_Rehu(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!  
-!* cloud mixing ratio
-!
-  IF (LUSERC) THEN
-    CALL LES_MEAN_ll ( ZRC_LES, OMASK,                              &
-                      XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,IMASK)     )
-    CALL LES_MEAN_ll ( ZRT_LES, OMASK,                               &
-                      XLES_MEAN_Rt(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* rain mixing ratio
-!
-  IF (LUSERR) THEN
-    CALL LES_MEAN_ll ( ZRR_LES, OMASK,                               &
-                       XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* ice mixing ratio
-!
-  IF (LUSERI) THEN
-    CALL LES_MEAN_ll ( ZRI_LES, OMASK,                               &
-                       XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* snow mixing ratio
-!
-  IF (LUSERS) THEN
-    CALL LES_MEAN_ll ( ZRS_LES, OMASK,                             &
-                     XLES_MEAN_Rs(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* graupel mixing ratio
-!
-  IF (LUSERG) THEN
-    CALL LES_MEAN_ll ( ZRG_LES, OMASK,                             &
-                     XLES_MEAN_Rg(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* hail mixing ratio
-!
-  IF (LUSERH) THEN
-    CALL LES_MEAN_ll ( ZRH_LES, OMASK,                             &
-                       XLES_MEAN_Rh(:,NLES_CURRENT_TCOUNT,IMASK)   )
-  END IF
-!
-!* scalar variables mixing ratio
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), OMASK,                        &
-                       XLES_MEAN_Sv(:,NLES_CURRENT_TCOUNT,IMASK,JSV)     )
-  END DO
-END IF
-!
-!* wind modulus
-!
-IF (LLES_MEAN) THEN
-!
-  ZWORK_LES =SQRT( ZU_LES**2 +ZV_LES**2 )
-  CALL LES_MEAN_ll ( ZWORK_LES, OMASK,                           &
-                     XLES_MEAN_WIND(:,NLES_CURRENT_TCOUNT,IMASK) )
-!
-!* vertical speed larger than mean vertical speed (updraft)
-!
-  DO JK=1,NLES_K
-    ZW_UP(:,:,JK) =  MAX(ZW_LES(:,:,JK), XLES_MEAN_W(JK,NLES_CURRENT_TCOUNT,IMASK))
-  END DO
-!
-!* upward mass flux
-!
-  ZWORK_LES = ZW_UP * ZRHO_LES
-  CALL LES_MEAN_ll ( ZWORK_LES, OMASK,                                 &
-                     XLES_RESOLVED_MASSFX(:,NLES_CURRENT_TCOUNT,IMASK) )
-!
-!* pdf calculation
-!
- IF (LLES_PDF) THEN
-  CALL LES_PDF_ll  ( ZTH_LES,OMASK,XTH_PDF_MIN,XTH_PDF_MAX,    &
-                        ZPDF(:,:) )
-  DO JSV=1,NPDF
-       XLES_PDF_TH(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-  END DO
-                        
-  CALL LES_PDF_ll  ( ZW_LES,OMASK,XW_PDF_MIN,XW_PDF_MAX,    &
-                        ZPDF(:,:) )
-  DO JSV=1,NPDF
-       XLES_PDF_W(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-  END DO
-  CALL LES_PDF_ll  ( ZTHV_LES,OMASK,XTHV_PDF_MIN,XTHV_PDF_MAX,    &
-                        ZPDF(:,:) )
-  DO JSV=1,NPDF
-       XLES_PDF_THV(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-  END DO
-  IF (LUSERV) THEN
-   CALL LES_PDF_ll  ( ZRV_LES,OMASK,XRV_PDF_MIN,XRV_PDF_MAX,    &
-                        ZPDF(:,:) )
-   DO JSV=1,NPDF
-       XLES_PDF_RV(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-   END DO
-  END IF
-  IF (LUSERC) THEN
-    CALL LES_PDF_ll  ( ZRC_LES,OMASK,XRC_PDF_MIN,XRC_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RC(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-    CALL LES_PDF_ll  ( ZRT_LES,OMASK,XRT_PDF_MIN,XRT_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RT(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-    CALL LES_PDF_ll  ( ZTHL_LES,OMASK,XTHL_PDF_MIN,XTHL_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_THL(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-  END IF
-  IF (LUSERR) THEN
-    CALL LES_PDF_ll  ( ZRR_LES,OMASK,XRR_PDF_MIN,XRR_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RR(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-  END IF
-  IF (LUSERI) THEN
-    CALL LES_PDF_ll  ( ZRI_LES,OMASK,XRI_PDF_MIN,XRI_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RI(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-  END IF
-  IF (LUSERS) THEN
-    CALL LES_PDF_ll  ( ZRS_LES,OMASK,XRS_PDF_MIN,XRS_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RS(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-  END IF
-  IF (LUSERG) THEN
-    CALL LES_PDF_ll  ( ZRG_LES,OMASK,XRG_PDF_MIN,XRG_PDF_MAX,    &
-                        ZPDF(:,:) )
-    DO JSV=1,NPDF
-       XLES_PDF_RG(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV)
-    END DO
-  END IF
- END IF
-!
-!* mean vertical gradients
-!
-  CALL LES_MEAN_ll ( ZDTHLDZ_LES, OMASK, XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK) )
-  CALL LES_MEAN_ll ( ZDUDZ_LES, OMASK, XLES_MEAN_DUDZ(:,NLES_CURRENT_TCOUNT,IMASK) )
-  CALL LES_MEAN_ll ( ZDVDZ_LES, OMASK, XLES_MEAN_DVDZ(:,NLES_CURRENT_TCOUNT,IMASK) )
-  CALL LES_MEAN_ll ( ZDWDZ_LES, OMASK, XLES_MEAN_DWDZ(:,NLES_CURRENT_TCOUNT,IMASK) )
-  IF (LUSERV) CALL LES_MEAN_ll ( ZDRtDZ_LES, OMASK, XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK) )
-  DO JSV=1,NSV
-    CALL LES_MEAN_ll ( ZDSVDZ_LES(:,:,:,JSV), OMASK, XLES_MEAN_DSVDZ(:,NLES_CURRENT_TCOUNT,IMASK,JSV) )
-  END DO
-
-END IF
-!-------------------------------------------------------------------------------
-!
-!       1.5  Resolved quantities
-!            -------------------
-!
-!* horizontal wind variances
-!
-  CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_V2 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* vertical wind variance
-!
-  CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_W2 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* pressure variance
-!
-  CALL LES_FLUX_ll ( ZP_ANOM, ZP_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_P2 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* potential temperature variance
-!
-  CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM,                               &
-                     OMASK,                                            &
-                     XLES_RESOLVED_TH2(:,NLES_CURRENT_TCOUNT,IMASK)    )
-
-!
-!* resolved turbulent kinetic energy
-!
-  XLES_RESOLVED_Ke(:,NLES_CURRENT_TCOUNT,IMASK) = XUNDEF
-!
-  WHERE(XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK) /= XUNDEF) &
-  XLES_RESOLVED_Ke(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*(           &
-                   XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK) &
-                 + XLES_RESOLVED_V2 (:,NLES_CURRENT_TCOUNT,IMASK) &
-                 + XLES_RESOLVED_W2 (:,NLES_CURRENT_TCOUNT,IMASK))
-!
-!* potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERV) THEN
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM,                              &
-                       OMASK,                                            &
-                       XLES_RESOLVED_THTHV(:,NLES_CURRENT_TCOUNT,IMASK)  )
-
-!
-!* vapor mixing ratio variance
-!
-    CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_Rv2(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!
-!* potential temperature - vapor mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThRv(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* virtual potential temperature - vapor mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM,                              &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThvRv(:,NLES_CURRENT_TCOUNT,IMASK)  )
-  END IF
-!
-!
-!* liquid potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERC) THEN
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM,                             &
-                       OMASK,                                            &
-                       XLES_RESOLVED_THLTHV(:,NLES_CURRENT_TCOUNT,IMASK) )
-!
-!* liquid potential temperature variance
-!
-    CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM,                             &
-                       OMASK,                                            &
-                       XLES_RESOLVED_THL2(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* total water mixing ratio variance
-!
-    CALL LES_FLUX_ll ( XRT_ANOM, XRT_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_Rt2(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* cloud mixing ratio variance
-!
-    CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_Rc2(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* potential temperature - cloud mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThRc(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* liquid potential temperature - vapor mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM,                               &
-                       OMASK,                                             &
-                       XLES_RESOLVED_ThlRv(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* liquid potential temperature - cloud mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM,                               &
-                       OMASK,                                             &
-                       XLES_RESOLVED_ThlRc(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* virtual potential temperature - cloud mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM,                              &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThvRc(:,NLES_CURRENT_TCOUNT,IMASK)  )
-!
-! variance of lwp 
-!
-    IF (IMASK .EQ. 1) THEN
-    CALL LES_FLUX_ll (ZLWP_ANOM, ZLWP_ANOM,                           &
-                      OMASK(:,:,1),                                   &
-                       XLES_LWPVAR(NLES_CURRENT_TCOUNT)  ) 
-    END IF
-  END IF
-!
-!* ice mixing ratio variance
-!
-  IF (LUSERI) THEN
-    CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_Ri2(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* potential temperature - ice mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM,                               &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThRi(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* liquid potential temperature - ice mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM,                               &
-                       OMASK,                                             &
-                       XLES_RESOLVED_ThlRi(:,NLES_CURRENT_TCOUNT,IMASK)   )
-!
-!* virtual potential temperature - ice mixing ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM,                              &
-                       OMASK,                                            &
-                       XLES_RESOLVED_ThvRi(:,NLES_CURRENT_TCOUNT,IMASK)  )
-  END IF
-!
-!* scalar variable mixing ratio variances
-!
-  DO JSV=1,NSV
-    CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV),             &
-                       OMASK,                                                &
-                       XLES_RESOLVED_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV)    )
-!
-!* potential temperature - scalar variables ratio correlation
-!
-    CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV),                      &
-                       OMASK,                                              &
-                       XLES_RESOLVED_ThSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) )
-!
-!* liquid potential temperature - scalar variables ratio correlation
-!
-    IF (LUSERC) THEN
-      CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV),                     &
-                         OMASK,                                              &
-                         XLES_RESOLVED_ThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) )
-    END IF
-!
-!* virtual potential temperature - scalar variables ratio correlation
-!
-    IF (LUSERV) THEN
-      CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV),                      &
-                         OMASK,                                               &
-                         XLES_RESOLVED_ThvSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) )
-    END IF
-  END DO
-!
-!
-!* wind fluxes
-!
-  CALL LES_FLUX_ll ( XU_ANOM, XV_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_UV (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XW_ANOM, XU_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_WU (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XW_ANOM, XV_ANOM,                                 &
-                     OMASK,                                            &
-                     XLES_RESOLVED_WV (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* pressure fluxes
-!
-  CALL LES_FLUX_ll ( XU_ANOM, ZDPDZ_ANOM,                               &
-                     OMASK,                                             &
-                     XLES_RESOLVED_UP  (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XV_ANOM, ZDPDZ_ANOM,                               &
-                     OMASK,                                             &
-                     XLES_RESOLVED_VP  (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XW_ANOM, ZDPDZ_ANOM,                               &
-                     OMASK,                                             &
-                     XLES_RESOLVED_WP  (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* theta fluxes
-!
-  CALL LES_FLUX_ll ( XU_ANOM, ZTH_ANOM,                                 &
-                     OMASK,                                             &
-                     XLES_RESOLVED_UTh (:,NLES_CURRENT_TCOUNT,IMASK)    )
-
-  CALL LES_FLUX_ll ( XV_ANOM, ZTH_ANOM,                                 &
-                     OMASK,                                             &
-                     XLES_RESOLVED_VTh (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM,                                 &
-                     OMASK,                                             &
-                     XLES_RESOLVED_WTh (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* virtual theta fluxes
-!
-  IF (LUSERV) THEN
-    CALL LES_FLUX_ll ( XU_ANOM, ZTHV_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_UThv (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-    CALL LES_FLUX_ll ( XV_ANOM, ZTHV_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_VThv (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WThv (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* vapor mixing ratio fluxes
-!
-    CALL LES_FLUX_ll ( XU_ANOM, ZRV_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_URv (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-    CALL LES_FLUX_ll ( XV_ANOM, ZRV_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_VRv (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WRv (:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* cloud water mixing ratio fluxes
-!
-  IF (LUSERC) THEN
-    CALL LES_FLUX_ll ( XU_ANOM, ZRC_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_URc (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-    CALL LES_FLUX_ll ( XV_ANOM, ZRC_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_VRc (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WRc (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-!* liquid theta fluxes
-!
-    CALL LES_FLUX_ll ( XU_ANOM, XTHL_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_UThl (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-    CALL LES_FLUX_ll ( XV_ANOM, XTHL_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_VThl (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM,                                 &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* total water mixing ratio fluxes
-!
-    CALL LES_FLUX_ll ( XW_ANOM, XRT_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-!* cloud ice mixing ratio fluxes
-!
-  IF (LUSERI) THEN
-    CALL LES_FLUX_ll ( XU_ANOM, ZRI_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_URi (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-  CALL LES_FLUX_ll ( XV_ANOM, ZRI_ANOM,                                  &
-                     OMASK,                                              &
-                     XLES_RESOLVED_VRi (:,NLES_CURRENT_TCOUNT,IMASK)     )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WRi (:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-  IF (LUSERR) THEN
-     CALL LES_FLUX_ll ( XW_ANOM, ZRR_ANOM,                                  &
-                       OMASK,                                              &
-                       XLES_RESOLVED_WRr (:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-!
-
-!
-!* scalar variables fluxes
-!
-  DO JSV=1,NSV
-    CALL LES_FLUX_ll ( XU_ANOM, XSV_ANOM(:,:,:,JSV),                           &
-                       OMASK,                                                  &
-                       XLES_RESOLVED_USv (:,NLES_CURRENT_TCOUNT,IMASK,JSV)     )
-!
-   CALL LES_FLUX_ll ( XV_ANOM, XSV_ANOM(:,:,:,JSV),                            &
-                       OMASK,                                                  &
-                       XLES_RESOLVED_VSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV)     )
-!
-    CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV),                           &
-                       OMASK,                                                  &
-                       XLES_RESOLVED_WSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV)     )
-  END DO
-!
-!* skewness
-!
-  CALL LES_3RD_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM,                       &
-                          OMASK,                                            &
-                          XLES_RESOLVED_U3 (:,NLES_CURRENT_TCOUNT,IMASK)    )
- 
-  CALL LES_3RD_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM,                       &
-                          OMASK,                                            &
-                          XLES_RESOLVED_V3 (:,NLES_CURRENT_TCOUNT,IMASK)    )
- 
-  CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XW_ANOM,                       &
-                          OMASK,                                            &
-                          XLES_RESOLVED_W3 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* kurtosis
-!
-  CALL LES_4TH_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM,  XU_ANOM,              &
-                          OMASK,                                            &
-                          XLES_RESOLVED_U4 (:,NLES_CURRENT_TCOUNT,IMASK)    )
- 
-  CALL LES_4TH_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM,  XV_ANOM,             &
-                          OMASK,                                            &
-                          XLES_RESOLVED_V4 (:,NLES_CURRENT_TCOUNT,IMASK)    )
- 
-  CALL LES_4TH_MOMENT_ll ( XW_ANOM, XW_ANOM, XW_ANOM,   XW_ANOM,            &
-                          OMASK,                                            &
-                          XLES_RESOLVED_W4 (:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-!* third moments of liquid potential temperature
-!
-  IF (LUSERC) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XTHL_ANOM,                    &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThl2(:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XTHL_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-  ELSE
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZTH_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThl2(:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZTH_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK)   )
-  END IF
-!
-!* third moments of water vapor
-!
-  IF (LUSERV) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRV_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRv2 (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRV_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Rv (:,NLES_CURRENT_TCOUNT,IMASK)   )
-  END IF
-
-  IF (LUSERC) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRV_ANOM,                     &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRv(:,NLES_CURRENT_TCOUNT,IMASK)  )
-  ELSE IF (LUSERV) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZRV_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRv(:,NLES_CURRENT_TCOUNT,IMASK)  )
-  END IF
-!
-!* third moments of total water
-! 
-  IF (LUSERC) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XRT_ANOM, XRT_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRt2 (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XRT_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Rt (:,NLES_CURRENT_TCOUNT,IMASK)   )
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XRT_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRt (:,NLES_CURRENT_TCOUNT,IMASK)   )                        
-  ELSE IF (LUSERV) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRV_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRt2 (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRV_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Rt (:,NLES_CURRENT_TCOUNT,IMASK)   )
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZRV_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRt (:,NLES_CURRENT_TCOUNT,IMASK)   )                        
-  END IF                            
-!
-!* third moments of cloud water
-!
-  IF (LUSERC) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRC_ANOM, ZRC_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRc2 (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRC_ANOM,                       &
-                            OMASK,                                             &
-                            XLES_RESOLVED_W2Rc (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRC_ANOM,                     &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRc(:,NLES_CURRENT_TCOUNT,IMASK)  )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRC_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRvRc (:,NLES_CURRENT_TCOUNT,IMASK)  )
-  END IF
-!
-!* third moments of cloud ice
-!
-  IF (LUSERI) THEN
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRI_ANOM, ZRI_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRi2 (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRI_ANOM,                      &
-                           OMASK,                                             &
-                           XLES_RESOLVED_W2Ri (:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRI_ANOM,                     &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WThlRi(:,NLES_CURRENT_TCOUNT,IMASK)  )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRI_ANOM,                      &
-                            OMASK,                                             &
-                            XLES_RESOLVED_WRvRi (:,NLES_CURRENT_TCOUNT,IMASK)  )
-  END IF
-!
-!* third moments of scalar variables
-!
-  DO JSV=1,NSV
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV),    &
-                            OMASK,                                                 &
-                            XLES_RESOLVED_WSv2 (:,NLES_CURRENT_TCOUNT,IMASK,JSV)   )
-
-    CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XSV_ANOM(:,:,:,JSV),                &
-                            OMASK,                                                 &
-                            XLES_RESOLVED_W2Sv (:,NLES_CURRENT_TCOUNT,IMASK,JSV)   )
-    IF (LUSERC) THEN
-      CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XSV_ANOM(:,:,:,JSV),              &
-                              OMASK,                                                 &
-                              XLES_RESOLVED_WThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV)  )
-    ELSE
-      CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, XSV_ANOM(:,:,:,JSV),               &
-                              OMASK,                                                 &
-                              XLES_RESOLVED_WThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV)  )
-    END IF
-
-    IF (LUSERV) THEN
-      CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, XSV_ANOM(:,:,:,JSV),               &
-                              OMASK,                                                 &
-                              XLES_RESOLVED_WRvSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV)  )
-    END IF
-  END DO
-!
-!* presso-correlations
-!
-!
-  CALL LES_FLUX_ll ( XTHL_ANOM, ZDPDZ_ANOM,                              &
-                     OMASK,                                              &
-                     XLES_RESOLVED_ThlPz(:,NLES_CURRENT_TCOUNT,IMASK)    )
-
-  IF (LUSERV) &
-  CALL LES_FLUX_ll ( ZRV_ANOM, ZDPDZ_ANOM,                               &
-                     OMASK,                                              &
-                     XLES_RESOLVED_RvPz(:,NLES_CURRENT_TCOUNT,IMASK)     )
-
-  IF (LUSERC) THEN
-    CALL LES_FLUX_ll ( XRT_ANOM, ZDPDZ_ANOM,                               &
-                       OMASK,                                              &
-                       XLES_RESOLVED_RtPz(:,NLES_CURRENT_TCOUNT,IMASK)     )
-
-    CALL LES_FLUX_ll ( ZRC_ANOM, ZDPDZ_ANOM,                               &
-                       OMASK,                                              &
-                       XLES_RESOLVED_RcPz(:,NLES_CURRENT_TCOUNT,IMASK)     )
-  END IF
-
-  IF (LUSERI) &
-  CALL LES_FLUX_ll ( ZRI_ANOM, ZDPDZ_ANOM,                               &
-                     OMASK,                                              &
-                     XLES_RESOLVED_RiPz(:,NLES_CURRENT_TCOUNT,IMASK)     )
-
-!
-!
-!* resolved turbulent kinetic energy fluxes
-!
-
-  CALL LES_3RD_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_U3  (:)                              )
-
-  CALL LES_3RD_MOMENT_ll ( XU_ANOM, XV_ANOM, XV_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_UV2 (:)                              )
-
-  CALL LES_3RD_MOMENT_ll ( XU_ANOM, XW_ANOM, XW_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_UW2 (:)                              )
-
-  XLES_RESOLVED_UKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*(  ZLES_RESOLVED_U3  &
-                                                        + ZLES_RESOLVED_UV2 &
-                                                        + ZLES_RESOLVED_UW2 )
-
-
-
-  CALL LES_3RD_MOMENT_ll ( XV_ANOM, XU_ANOM, XU_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_VU2 (:)                              )
-
-  CALL LES_3RD_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_V3  (:)                              )
-
-  CALL LES_3RD_MOMENT_ll ( XV_ANOM, XW_ANOM, XW_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_VW2 (:)                              )
-
-  XLES_RESOLVED_VKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*(  ZLES_RESOLVED_VU2 &
-                                                        + ZLES_RESOLVED_V3  &
-                                                        + ZLES_RESOLVED_VW2 )
-
-
-  CALL LES_3RD_MOMENT_ll ( XW_ANOM, XU_ANOM, XU_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_WU2 (:)                              )
-
-  CALL LES_3RD_MOMENT_ll ( XW_ANOM, XV_ANOM, XV_ANOM,                        &
-                          OMASK,                                             &
-                          ZLES_RESOLVED_WV2 (:)                              )
-
-  XLES_RESOLVED_WKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*(  ZLES_RESOLVED_WU2  &
-                                                        + ZLES_RESOLVED_WV2  &
-                           + XLES_RESOLVED_W3(:,NLES_CURRENT_TCOUNT,IMASK)   )
-
-!
-!
-!-------------------------------------------------------------------------------
-!
-!       1.6  Subgrid quantities
-!            ------------------
-!
-IF (LLES_SUBGRID) THEN
-!
-!* wind fluxes and variances
-!
-  CALL LES_MEAN_ll ( ZTKE_LES, OMASK,                                  &
-                     XLES_SUBGRID_Tke(:,NLES_CURRENT_TCOUNT,IMASK)     )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_UV(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WU(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WV(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_U2(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_V2(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-!
-!* liquid potential temperature fluxes
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_UThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_VThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-
-!* liquid potential temperature variance
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )
-!
-!* Mass flux scheme of shallow convection
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_THLUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )  
-                        
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_RTUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_RVUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_RCUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_RIUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )    
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_MASSFLUX(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )  
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_DETR(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )      
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_ENTR(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )      
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_FRACUP(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )     
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_THVUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )  
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTHLMF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )    
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRTMF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )  
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        ) 
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WUMF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WVMF(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                        )   
-
-                        
-!* total water mixing ratio fluxes, correlation and variance
-!
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_URt(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_VRt(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRt(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK),&
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_Rt2(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-  END IF
-!
-!* scalar variances
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), &
-                          IAVG_PTS(:), IUND_PTS(:)                           )
-  END DO
-!
-!* cloud water mixing ratio fluxes
-!
-  IF (LUSERC) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_URc(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_VRc(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRc(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-  END IF
-!
-!* scalar variables fluxes
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_USv(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                          IAVG_PTS(:), IUND_PTS(:)                            )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_VSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                          IAVG_PTS(:), IUND_PTS(:)                            )
-    !
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                          IAVG_PTS(:), IUND_PTS(:)                            )
-  END DO
-!
-!* subgrid turbulent kinetic energy fluxes
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_UTke(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                        IAVG_PTS(:), IUND_PTS(:)                         )
-  !
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_VTke(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                        IAVG_PTS(:), IUND_PTS(:)                         )
-  !
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTke(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                        IAVG_PTS(:), IUND_PTS(:)                         )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_ddz_WTke(:,NLES_CURRENT_TCOUNT,IMASK),&
-                        IAVG_PTS(:), IUND_PTS(:)                           )
-!
-!* fluxes and correlations with virtual potential temperature
-!
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThv(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlThv(:,NLES_CURRENT_TCOUNT,IMASK),&
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_RtThv(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    DO JSV=1,NSV
-      CALL LES_MEAN_MPROC ( XLES_SUBGRID_SvThv(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                            IAVG_PTS(:), IUND_PTS(:)                              )
-   END DO
-  END IF
-!
-!* third order fluxes
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThl2(:,NLES_CURRENT_TCOUNT,IMASK),   &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Rt(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThlRt(:,NLES_CURRENT_TCOUNT,IMASK),&
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRt2(:,NLES_CURRENT_TCOUNT,IMASK),  &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-  END IF
-    DO JSV=1,NSV
-      CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Sv(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                            IAVG_PTS(:), IUND_PTS(:)                             )
-
-      CALL LES_MEAN_MPROC ( XLES_SUBGRID_WSv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV),  &
-                            IAVG_PTS(:), IUND_PTS(:)                             )
-   END DO
-!
-!* dissipative terms
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Tke(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                          )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                           )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Rt2(:,NLES_CURRENT_TCOUNT,IMASK),&
-                          IAVG_PTS(:), IUND_PTS(:)                           )
-
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK),&
-                          IAVG_PTS(:), IUND_PTS(:)                             )
-  END IF
-
-  DO JSV=1,NSV
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), &
-                          IAVG_PTS(:), IUND_PTS(:)                                )
-  END DO
-!
-!* presso-correlation terms
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_WP(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                    )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlPz(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                       )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_RtPz(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                        )
-
-  END IF
-
-  DO JSV=1,NSV
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_SvPz(:,NLES_CURRENT_TCOUNT,IMASK,JSV), &
-                          IAVG_PTS(:), IUND_PTS(:)                            )
-  END DO
-
-!* phi3 and psi3 terms
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_PHI3(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                    )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_SUBGRID_PSI3(:,NLES_CURRENT_TCOUNT,IMASK), &
-                            IAVG_PTS(:), IUND_PTS(:)                    )
-  END IF 
-!
-!* subgrid mixing length
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_LMix(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                      )
-!
-!* subgrid dissipative length
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_LDiss(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                       )
-!
-!* eddy diffusivities
-!
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_Km(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                    )
-
-  CALL LES_MEAN_MPROC ( XLES_SUBGRID_Kh(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                    )
-  
-END IF
-!
-! computation of KHT and KHR depending on LLES
-  IF (LUSERC) THEN 
-   IF (LLES_RESOLVED) THEN 
-    XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0.       
-    WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)              &
-          XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1.                 &
-                      *XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK)/ &
-                       XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-    XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0.                   
-    WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)               &
-          XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.*                &
-                        XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK)/ &
-                       XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-   END IF                    
-   IF (LLES_SUBGRID) THEN 
-    XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0.       
-    WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)              & 
-          XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1.                 &
-                      *XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,IMASK) /  &
-                       XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-    XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0.                   
-    WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)               &
-          XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.*                &
-                     XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,IMASK) / &
-                       XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-   END IF
-   IF (LLES_RESOLVED .AND. LLES_SUBGRID) THEN 
-    XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0.       
-    WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)              &
-          XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1.                 &
-                      *(XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK)+ &
-                        XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,IMASK))/ &
-                       XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-    XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0.                   
-    WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0)               &
-          XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.*                &
-                        (XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK)+ &
-                     XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,IMASK)) / &
-                       XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)
-   END IF
-  END IF
-!-------------------------------------------------------------------------------
-!
-!       1.7  Interaction of subgrid and resolved quantities
-!            ----------------------------------------------
-!
-!* WARNING: these terms also contain the term due to the mean flow.
-!           this mean flow contribution will be removed from them
-!           when treated in write_les_budgetn.f90
-!
-!
-!* subgrid turbulent kinetic energy fluxes
-!
-IF (LLES_RESOLVED) THEN
-  CALL LES_FLUX_ll ( XU_ANOM, ZTKE_LES,                                 &
-                     OMASK,                                             &
-                     XLES_RES_U_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XV_ANOM, ZTKE_LES,                                 &
-                     OMASK,                                             &
-                     XLES_RES_V_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK)    )
-!
-  CALL LES_FLUX_ll ( XW_ANOM, ZTKE_LES,                                 &
-                     OMASK,                                             &
-                     XLES_RES_W_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK)    )
-END IF
-!
-!* WARNING: these terms also contain the term due to the mean flow.
-!           this mean flow contribution will be removed from them
-!           when treated in write_les_budgetn.f90
-!
-!* production terms for subgrid quantities
-!
-IF (LLES_RESOLVED .AND. LLES_SUBGRID) THEN
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_U_SBG_UaU(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                              )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_V_SBG_UaV(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                              )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                              )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                                )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                                )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddz_Thl_SBG_W2  (:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                                )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                                  )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                               )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                               )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_ddz_Rt_SBG_W2  (:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                               )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                                 )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                                 )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                                )
-
-  END IF
-!
-!* WARNING: these terms also contain the term due to the mean flow.
-!           this mean flow contribution will be removed from them
-!           when treated in write_les_budgetn.f90
-!
-!* turbulent transport and advection terms for subgrid quantities
-!
-  CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WThl(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                          )
-
-  CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), &
-                        IAVG_PTS(:), IUND_PTS(:)                          )
-
-  IF (LUSERV) THEN
-    CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WRt(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Rt2(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                         )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK), &
-                          IAVG_PTS(:), IUND_PTS(:)                           )
-
-  END IF
-
-  DO JSV=1,NSV
-    CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), &
-                          IAVG_PTS(:), IUND_PTS(:)                             )
-
-    CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), &
-                          IAVG_PTS(:), IUND_PTS(:)                             )
-  END DO
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!       2.   The following is for cartesian mask only
-!            ----------------------------------------
-!
-IF (IMASK>1) RETURN
-!
-!-------------------------------------------------------------------------------
-!
-!       3.   Updraft diagnostics
-!            -------------------
-!
-IF (LLES_UPDRAFT) THEN
-!
-  DO JK=1,NLES_K
-    GUPDRAFT_MASK(:,:,JK) = (XW_ANOM(:,:,JK) > 0.) .AND. LLES_CURRENT_CART_MASK(:,:,JK)
-  END DO
-!
-!
-!       3.1  Updraft fraction
-!            ----------------
-!
-  ZUPDRAFT(:,:,:) = 0.
-  WHERE (GUPDRAFT_MASK(:,:,:))
-    ZUPDRAFT(:,:,:) = 1.
-  END WHERE
-!
-  CALL LES_MEAN_ll ( ZUPDRAFT, OMASK,                        &
-                     XLES_UPDRAFT(:,NLES_CURRENT_TCOUNT)     )
-!
-!
-!       3.2  Updraft mean quantities
-!            -----------------------
-!
-!* vertical wind velocity
-!
-  CALL LES_MEAN_ll ( ZW_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_W(:,NLES_CURRENT_TCOUNT)     )
-!
-!* potential temperature
-!
-  CALL LES_MEAN_ll ( ZTH_LES, GUPDRAFT_MASK,                   &
-                     XLES_UPDRAFT_Th(:,NLES_CURRENT_TCOUNT)    )
-!
-!* liquid potential temperature
-!
-  IF (LUSERC) &
-  CALL LES_MEAN_ll ( ZTHL_LES, GUPDRAFT_MASK,                   &
-                     XLES_UPDRAFT_Thl(:,NLES_CURRENT_TCOUNT)    )
-!
-!* virtual potential temperature
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZTHV_LES, GUPDRAFT_MASK,                   &
-                     XLES_UPDRAFT_Thv(:,NLES_CURRENT_TCOUNT)    )
-!
-!* vapor mixing ratio
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZRV_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rv(:,NLES_CURRENT_TCOUNT)     )
-!
-!* cloud water mixing ratio
-!
-  IF (LUSERC) &
-  CALL LES_MEAN_ll ( ZRC_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rc(:,NLES_CURRENT_TCOUNT)     )
-!
-!* rain mixing ratio
-!
-  IF (LUSERR) &
-  CALL LES_MEAN_ll ( ZRR_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rr(:,NLES_CURRENT_TCOUNT)     )
-!
-!* cloud ice mixing ratio
-!
-  IF (LUSERI) &
-  CALL LES_MEAN_ll ( ZRI_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Ri(:,NLES_CURRENT_TCOUNT)     )
-!
-!* snow mixing ratio
-!
-  IF (LUSERS) &
-  CALL LES_MEAN_ll ( ZRS_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rs(:,NLES_CURRENT_TCOUNT)     )
-!
-!* graupel mixing ratio
-!
-  IF (LUSERG) &
-  CALL LES_MEAN_ll ( ZRG_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rg(:,NLES_CURRENT_TCOUNT)     )
-!
-!* hail mixing ratio
-!
-  IF (LUSERH) &
-  CALL LES_MEAN_ll ( ZRG_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Rh(:,NLES_CURRENT_TCOUNT)     )
-!
-!* scalar variables
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), GUPDRAFT_MASK,             &
-                       XLES_UPDRAFT_Sv(:,NLES_CURRENT_TCOUNT,JSV)     )
-  END DO
-!
-!* subgrid turbulent kinetic energy
-!
-  CALL LES_MEAN_ll ( ZTKE_LES, GUPDRAFT_MASK,                    &
-                     XLES_UPDRAFT_Tke(:,NLES_CURRENT_TCOUNT)     )
-!
-!
-!       3.3  Updraft resolved quantities
-!            ---------------------------
-!
-!
-!* resolved turbulent kinetic energy
-!
-  CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM,                           &
-                     GUPDRAFT_MASK,                              &
-                     ZLES_UPDRAFT_U2(:)                          )
-
-  CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM,                           &
-                     GUPDRAFT_MASK,                              &
-                     ZLES_UPDRAFT_V2(:)                          )
-
-  CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM,                           &
-                     GUPDRAFT_MASK,                              &
-                     ZLES_UPDRAFT_W2(:)                          )
-
-  XLES_UPDRAFT_Ke(:,NLES_CURRENT_TCOUNT)  = 0.5 * (  ZLES_UPDRAFT_U2(:) &
-                                                   + ZLES_UPDRAFT_V2(:) &
-                                                   + ZLES_UPDRAFT_W2(:) )
-!
-!* vertical potential temperature flux
-!
-  CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM,                          &
-                     GUPDRAFT_MASK,                              &
-                     XLES_UPDRAFT_WTh(:,NLES_CURRENT_TCOUNT)     )
-!
-!* vertical liquid potential temperature flux
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM,                          &
-                     GUPDRAFT_MASK,                               &
-                     XLES_UPDRAFT_WThl(:,NLES_CURRENT_TCOUNT)     )
-!
-!* vertical virtual potential temperature flux
-!
-  IF (LUSERV) &
-  CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM,                          &
-                     GUPDRAFT_MASK,                               &
-                     XLES_UPDRAFT_WThv(:,NLES_CURRENT_TCOUNT)     )
-!
-!* potential temperature variance
-!
-  CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM,                          &
-                     GUPDRAFT_MASK,                               &
-                     XLES_UPDRAFT_Th2(:,NLES_CURRENT_TCOUNT)      )
-!
-!* liquid potential temperature variance
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM,                         &
-                     GUPDRAFT_MASK,                                &
-                     XLES_UPDRAFT_Thl2(:,NLES_CURRENT_TCOUNT)      )
-!
-!* potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERV) &
-  CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM,                          &
-                     GUPDRAFT_MASK,                                &
-                     XLES_UPDRAFT_ThThv (:,NLES_CURRENT_TCOUNT)    )
-!
-!* liquid potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM,                         &
-                     GUPDRAFT_MASK,                                &
-                     XLES_UPDRAFT_ThlThv(:,NLES_CURRENT_TCOUNT)    )
-!
-!* water vapor mixing ratio flux, variance and correlations
-!
-  IF (LUSERV) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM,                           &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_WRv(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_Rv2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThRv (:,NLES_CURRENT_TCOUNT)    )
-    !
-    IF (LUSERC) &
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThlRv(:,NLES_CURRENT_TCOUNT)    )
-
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThvRv(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* cloud water mixing ratio flux
-!
-  IF (LUSERC) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM,                           &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_WRc(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_Rc2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThRc (:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThlRc(:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThvRc(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* cloud ice mixing ratio flux
-!
-  IF (LUSERI) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM,                           &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_WRi(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_Ri2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM,                          &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThRi (:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThlRi(:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM,                         &
-                       GUPDRAFT_MASK,                               &
-                       XLES_UPDRAFT_ThvRi(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* scalar variables flux
-!
-  DO JSV=1,NSV
-    CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV),                    &
-                       GUPDRAFT_MASK,                                   &
-                       XLES_UPDRAFT_WSv(:,NLES_CURRENT_TCOUNT,JSV)      )
-    !
-    CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV),        &
-                       GUPDRAFT_MASK,                                   &
-                       XLES_UPDRAFT_Sv2(:,NLES_CURRENT_TCOUNT,JSV)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV),                   &
-                       GUPDRAFT_MASK,                                   &
-                       XLES_UPDRAFT_ThSv(:,NLES_CURRENT_TCOUNT,JSV)     )
-    !
-    IF (LUSERC) &
-    CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV),                  &
-                       GUPDRAFT_MASK,                                   &
-                       XLES_UPDRAFT_ThlSv(:,NLES_CURRENT_TCOUNT,JSV)    )
-    !
-    IF (LUSERV) &
-    CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV),                  &
-                       GUPDRAFT_MASK,                                   &
-                       XLES_UPDRAFT_ThvSv(:,NLES_CURRENT_TCOUNT,JSV)    )
-  END DO
-!
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!       4.   Downdraft diagnostics
-!            ---------------------
-!
-IF (LLES_DOWNDRAFT) THEN
-!
-  DO JK=1,NLES_K
-    GDOWNDRAFT_MASK(:,:,JK) = (XW_ANOM(:,:,JK) <= 0.) .AND. LLES_CURRENT_CART_MASK(:,:,JK)
-  END DO
-!
-!
-!       4.1  Downdraft fraction
-!            ------------------
-!
-  ZDOWNDRAFT(:,:,:) = 0.
-  WHERE (GDOWNDRAFT_MASK(:,:,:))
-    ZDOWNDRAFT(:,:,:) = 1.
-  END WHERE
-!
-  CALL LES_MEAN_ll ( ZDOWNDRAFT, OMASK,                        &
-                     XLES_DOWNDRAFT(:,NLES_CURRENT_TCOUNT)     )
-!
-!
-!       4.2  Downdraft mean quantities
-!            -------------------------
-!
-!* vertical wind velocity
-!
-  CALL LES_MEAN_ll ( ZW_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_W(:,NLES_CURRENT_TCOUNT)     )
-!
-!* potential temperature
-!
-  CALL LES_MEAN_ll ( ZTH_LES, GDOWNDRAFT_MASK,                   &
-                     XLES_DOWNDRAFT_Th(:,NLES_CURRENT_TCOUNT)    )
-!
-!* liquid potential temperature
-!
-  IF (LUSERC) &
-  CALL LES_MEAN_ll ( ZTHL_LES, GDOWNDRAFT_MASK,                   &
-                     XLES_DOWNDRAFT_Thl(:,NLES_CURRENT_TCOUNT)    )
-!
-!* virtual potential temperature
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZTHV_LES, GDOWNDRAFT_MASK,                   &
-                     XLES_DOWNDRAFT_Thv(:,NLES_CURRENT_TCOUNT)    )
-!
-!* vapor mixing ratio
-!
-  IF (LUSERV) &
-  CALL LES_MEAN_ll ( ZRV_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rv(:,NLES_CURRENT_TCOUNT)     )
-!
-!* cloud water mixing ratio
-!
-  IF (LUSERC) &
-  CALL LES_MEAN_ll ( ZRC_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rc(:,NLES_CURRENT_TCOUNT)     )
-!
-!* rain mixing ratio
-!
-  IF (LUSERR) &
-  CALL LES_MEAN_ll ( ZRR_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rr(:,NLES_CURRENT_TCOUNT)     )
-!
-!* cloud ice mixing ratio
-!
-  IF (LUSERI) &
-  CALL LES_MEAN_ll ( ZRI_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Ri(:,NLES_CURRENT_TCOUNT)     )
-!
-!* snow mixing ratio
-!
-  IF (LUSERS) &
-  CALL LES_MEAN_ll ( ZRS_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rs(:,NLES_CURRENT_TCOUNT)     )
-!
-!* graupel mixing ratio
-!
-  IF (LUSERG) &
-  CALL LES_MEAN_ll ( ZRG_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rg(:,NLES_CURRENT_TCOUNT)     )
-!
-!* hail mixing ratio
-!
-  IF (LUSERH) &
-  CALL LES_MEAN_ll ( ZRG_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Rh(:,NLES_CURRENT_TCOUNT)     )
-!
-!* scalar variables
-!
-  DO JSV=1,NSV
-    CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), GDOWNDRAFT_MASK,            &
-                       XLES_DOWNDRAFT_Sv(:,NLES_CURRENT_TCOUNT,JSV)    )
-  END DO
-!
-!* subgrid turbulent kinetic energy
-!
-  CALL LES_MEAN_ll ( ZTKE_LES, GDOWNDRAFT_MASK,                    &
-                     XLES_DOWNDRAFT_Tke(:,NLES_CURRENT_TCOUNT)     )
-!
-!
-!       4.3  Downdraft resolved quantities
-!            -----------------------------
-!
-!* resolved turbulent kinetic energy
-!
-  CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM,                             &
-                     GDOWNDRAFT_MASK,                              &
-                     ZLES_DOWNDRAFT_U2(:)                          )
-
-  CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM,                             &
-                     GDOWNDRAFT_MASK,                              &
-                     ZLES_DOWNDRAFT_V2(:)                          )
-
-  CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM,                             &
-                     GDOWNDRAFT_MASK,                              &
-                     ZLES_DOWNDRAFT_W2(:)                          )
-
-  XLES_DOWNDRAFT_Ke(:,NLES_CURRENT_TCOUNT)  = 0.5 * (  ZLES_DOWNDRAFT_U2(:) &
-                                                     + ZLES_DOWNDRAFT_V2(:) &
-                                                     + ZLES_DOWNDRAFT_W2(:) )
-!
-!* vertical potential temperature flux
-!
-  CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM,                            &
-                     GDOWNDRAFT_MASK,                              &
-                     XLES_DOWNDRAFT_WTh(:,NLES_CURRENT_TCOUNT)     )
-!
-!* vertical liquid potential temperature flux
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM,                            &
-                     GDOWNDRAFT_MASK,                               &
-                     XLES_DOWNDRAFT_WThl(:,NLES_CURRENT_TCOUNT)     )
-!
-!* vertical virtual potential temperature flux
-!
-  IF (LUSERV) &
-  CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM,                            &
-                     GDOWNDRAFT_MASK,                               &
-                     XLES_DOWNDRAFT_WThv(:,NLES_CURRENT_TCOUNT)     )
-!
-!* potential temperature variance
-!
-  CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM,                            &
-                     GDOWNDRAFT_MASK,                               &
-                     XLES_DOWNDRAFT_Th2(:,NLES_CURRENT_TCOUNT)      )
-!
-!* liquid potential temperature variance
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM,                           &
-                     GDOWNDRAFT_MASK,                                &
-                     XLES_DOWNDRAFT_Thl2(:,NLES_CURRENT_TCOUNT)      )
-!
-!* potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERV) &
-  CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM,                            &
-                     GDOWNDRAFT_MASK,                                &
-                     XLES_DOWNDRAFT_ThThv (:,NLES_CURRENT_TCOUNT)    )
-!
-!* liquid potential temperature - virtual potential temperature covariance
-!
-  IF (LUSERC) &
-  CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM,                           &
-                     GDOWNDRAFT_MASK,                                &
-                     XLES_DOWNDRAFT_ThlThv(:,NLES_CURRENT_TCOUNT)    )
-!
-!
-!* water vapor mixing ratio flux, variance and correlations
-!
-  IF (LUSERV) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM,                             &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_WRv(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_Rv2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThRv (:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThvRv(:,NLES_CURRENT_TCOUNT)    )
-    !
-    IF (LUSERC) &
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThlRv(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* cloud water mixing ratio flux
-!
-  IF (LUSERC) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM,                             &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_WRc(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_Rc2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThRc (:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThvRc(:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThlRc(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* cloud ice mixing ratio flux
-!
-  IF (LUSERI) THEN
-    CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM,                             &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_WRi(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_Ri2(:,NLES_CURRENT_TCOUNT)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM,                            &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThRi (:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThvRi(:,NLES_CURRENT_TCOUNT)    )
-    !
-    CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM,                           &
-                       GDOWNDRAFT_MASK,                               &
-                       XLES_DOWNDRAFT_ThlRi(:,NLES_CURRENT_TCOUNT)    )
-  END IF
-!
-!* scalar variables flux
-!
-  DO JSV=1,NSV
-    CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV),                      &
-                       GDOWNDRAFT_MASK,                                   &
-                       XLES_DOWNDRAFT_WSv(:,NLES_CURRENT_TCOUNT,JSV)      )
-    !
-    CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV),          &
-                       GDOWNDRAFT_MASK,                                   &
-                       XLES_DOWNDRAFT_Sv2(:,NLES_CURRENT_TCOUNT,JSV)      )
-    !
-    CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV),                     &
-                       GDOWNDRAFT_MASK,                                   &
-                       XLES_DOWNDRAFT_ThSv(:,NLES_CURRENT_TCOUNT,JSV)     )
-    !
-    IF (LUSERC) &
-    CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV),                    &
-                       GDOWNDRAFT_MASK,                                   &
-                       XLES_DOWNDRAFT_ThlSv(:,NLES_CURRENT_TCOUNT,JSV)    )
-    !
-    IF (LUSERV) &
-    CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV),                    &
-                       GDOWNDRAFT_MASK,                                   &
-                       XLES_DOWNDRAFT_ThvSv(:,NLES_CURRENT_TCOUNT,JSV)    )
-  END DO
-!
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!       5.   surface or 2D variables (only for the cartesian mask)
-!            -----------------------
-!
-!* surface flux of temperature Qo
-!
-CALL LES_MEAN_MPROC ( XLES_Q0   (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) )
-!
-!* surface flux of water vapor Eo
-!
-CALL LES_MEAN_MPROC ( XLES_E0   (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) )
-!
-!* surface flux for scalar variables
-!
-DO JSV=1,NSV
-  CALL LES_MEAN_MPROC ( XLES_SV0  (NLES_CURRENT_TCOUNT,JSV), IAVG_PTS(1), IUND_PTS(1) )
-END DO
-!
-!* surface flux of U wind component
-!
-CALL LES_MEAN_MPROC ( XLES_UW0  (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) )
-!
-!* surface flux of V wind component
-!
-CALL LES_MEAN_MPROC ( XLES_VW0  (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) )
-!
-!* friction velocity u*
-!
-!* average of local u*
-!!CALL LES_MEAN_MPROC ( XLES_USTAR(NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) )
-!* or true global u*
-XLES_USTAR(NLES_CURRENT_TCOUNT) = SQRT(SQRT(XLES_UW0(NLES_CURRENT_TCOUNT)**2  &
-                                           +XLES_VW0(NLES_CURRENT_TCOUNT)**2 ))
-!
-!* Boundary layer height
-!
-IF (CBL_HEIGHT_DEF=='WTV') THEN
-!
-!* level where temperature flux is minimum
-!
-ALLOCATE(ZWORK(SIZE(XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK),1)))
-ZWORK=XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK)
-WHERE(ZWORK==XUNDEF) ZWORK=0.
-
-  IF (LUSERC) THEN
-    IKMIN_FLUX = MINLOC(  XLES_RESOLVED_WThv(:,NLES_CURRENT_TCOUNT,1)  &
-                        + XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,1)  &
-                        + ZWORK                                        & ! flux if EDKF   
-      + (XRV/XRD - 1.) *( XLES_SUBGRID_WRt  (:,NLES_CURRENT_TCOUNT,1)  &
-                         -XLES_SUBGRID_WRc  (:,NLES_CURRENT_TCOUNT,1)) )
-  ELSE IF (LUSERV) THEN
-    IKMIN_FLUX = MINLOC(  XLES_RESOLVED_WThv(:,NLES_CURRENT_TCOUNT,1) &
-                        + ZWORK                                       & ! flux if EDKF 
-                        + XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,1) &
-      + (XRV/XRD - 1.) *  XLES_SUBGRID_WRt  (:,NLES_CURRENT_TCOUNT,1) )
-  ELSE
-    IKMIN_FLUX = MINLOC(  XLES_RESOLVED_WTh(:,NLES_CURRENT_TCOUNT,1) &
-                        + ZWORK                                      & ! flux if EDKF
-                        + XLES_SUBGRID_WThl(:,NLES_CURRENT_TCOUNT,1) )
-  END IF
-DEALLOCATE(ZWORK)
-!
-!* boundary layer height
-!
-  XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(IKMIN_FLUX(1)) - XLES_ZS
-!
-ELSE IF (CBL_HEIGHT_DEF=='DTH') THEN
-  IKMAX_TH=MAXLOC( ZLES_MEAN_DTHDZ(:)) 
-  XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_TH(1)) - XLES_ZS
-!  
-ELSE IF (CBL_HEIGHT_DEF=='KE ') THEN
-
-  XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(NLES_K) - XLES_ZS
-!
-!* total Turbulent Kinetic Energy
-!
-  ZKE_TOT(:) = 0.
-!
-  ZKE_TOT(:) = ZKE_TOT(:) + XLES_SUBGRID_TKE   (:,NLES_CURRENT_TCOUNT,1)
-!
-  IF (CTURBLEN/='BL89' .AND. CTURBLEN/='RM17' .AND. LLES_RESOLVED) &
-  ZKE_TOT(:) = ZKE_TOT(:) + XLES_RESOLVED_KE(:,NLES_CURRENT_TCOUNT,1)
-!
-  ZINT_KE_TOT = 0.
-!
-!* integration of total kinetic energy on boundary layer depth
-!
-  ZINT_KE_TOT = ZINT_KE_TOT +XLES_Z(1)*ZKE_TOT(1)
-  DO JK=1,NLES_K-1
-    ZINT_KE_TOT = ZINT_KE_TOT + (XLES_Z(JK+1)-XLES_Z(JK))                     &
-                              * 0.5 *( ZKE_TOT(JK+1) + ZKE_TOT(JK) )
-!
-!* test of total kinetic energy smaller than 5% of the averaged value below
-!
-    IF ( ZKE_TOT(JK+1) < 0.05 * ZINT_KE_TOT / (XLES_Z(JK+1)-XLES_Z(1)) ) THEN
-      XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(JK) - XLES_ZS
-      EXIT
-    END IF
-!
-  END DO
-!
-ELSE IF (CBL_HEIGHT_DEF=='TKE') THEN
-
-  XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(NLES_K) - XLES_ZS
-!
-!* subgrid Turbulent Kinetic Energy
-!
-  ZKE_TOT(:) = XLES_SUBGRID_TKE   (:,NLES_CURRENT_TCOUNT,1)
-!
-  ZINT_KE_TOT = 0.
-!
-!* integration of subgrid kinetic energy on boundary layer depth
-!
-  DO JK=1,NLES_K-1
-    ZINT_KE_TOT = ZINT_KE_TOT + (XLES_Z(JK+1)-XLES_Z(JK))                     &
-                              * 0.5 *( ZKE_TOT(JK+1) + ZKE_TOT(JK) )
-!
-!* test of subgrid kinetic energy smaller than 0.1% of the averaged value below
-!
-    IF ( ZKE_TOT(JK+1) < 0.001 * ZINT_KE_TOT / (XLES_Z(JK+1)-XLES_Z(1)) ) THEN
-      XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(JK) - XLES_ZS
-      EXIT
-    END IF
-  END DO
-ELSE IF (CBL_HEIGHT_DEF=='FRI') THEN
-  ZFRIC_LES = SQRT( ( XLES_SUBGRID_WU (:,NLES_CURRENT_TCOUNT,1)      &
-                     +XLES_RESOLVED_WU(:,NLES_CURRENT_TCOUNT,1))**2  &
-                   +( XLES_SUBGRID_WV (:,NLES_CURRENT_TCOUNT,1)      &
-                     +XLES_RESOLVED_WV(:,NLES_CURRENT_TCOUNT,1))**2 )
-  ZFRIC_SURF = XLES_USTAR(NLES_CURRENT_TCOUNT)**2
-  CALL BL_DEPTH_DIAG(YLDIMPHYEX,ZFRIC_SURF, XLES_ZS, &
-                     ZFRIC_LES,  XLES_Z,  &
-                     XFTOP_O_FSURF,XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT))
-END IF
-!
-!
-!* integration of total kinetic energy on boundary layer depth
-!
-XLES_INT_TKE(NLES_CURRENT_TCOUNT)=ZINT_KE_TOT
-    !* integration of tke 
-    ZTKET_LES(:,:)  = 0.
-      DO JK=1,NLES_K-1
-      ZKE_LES(:,:,JK)=0.5*(XU_ANOM(:,:,JK)*XU_ANOM(:,:,JK)+&
-      XV_ANOM(:,:,JK)*XV_ANOM(:,:,JK)+XW_ANOM(:,:,JK)*XW_ANOM(:,:,JK))
-
-    ZTKET_LES(:,:) = ZTKET_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK))      &
-                      * (ZTKE_LES(:,:,JK)+ZKE_LES(:,:,JK)) 
-      END DO
-  CALL LES_MEAN_ll ( ZTKET_LES, LLES_CURRENT_CART_MASK(:,:,1),               &
-                    XLES_INT_TKE(NLES_CURRENT_TCOUNT)     )    
-!
-!* convective velocity
-!
-XLES_WSTAR(NLES_CURRENT_TCOUNT) = 0.
-!
-IF (               XLES_Q0(NLES_CURRENT_TCOUNT)                  &
-    + (XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT) >0.) THEN
-  IF (LUSERV) THEN
-    XLES_WSTAR(NLES_CURRENT_TCOUNT) =                            &
-     ( XG / XLES_MEAN_Thv (1,NLES_CURRENT_TCOUNT,1)              &
-          * (                    XLES_Q0( NLES_CURRENT_TCOUNT )  &
-              + (XRV/XRD - 1.) * XLES_E0( NLES_CURRENT_TCOUNT )) &
-          * XLES_BL_HEIGHT(  NLES_CURRENT_TCOUNT  )              &
-     ) ** (1./3.)
-  ELSE
-    XLES_WSTAR(NLES_CURRENT_TCOUNT) =                            &
-     ( XG / XLES_MEAN_Th  (1,NLES_CURRENT_TCOUNT,1)              &
-          * (                    XLES_Q0( NLES_CURRENT_TCOUNT )  &
-              + (XRV/XRD - 1.) * XLES_E0( NLES_CURRENT_TCOUNT )) &
-          * XLES_BL_HEIGHT( NLES_CURRENT_TCOUNT  )               &
-     ) ** (1./3.)
-  END IF
-END IF
-!
-!* cloud base height
- IF (LUSERC) THEN
-  ZINT_RHOKE =0.
-  JJ=1
-  DO JI=1,NLES_K
-  IF ((ZINT_RHOKE .EQ. 0) .AND.  &
-      (XLES_MEAN_RC(JI,NLES_CURRENT_TCOUNT,1) .GT. 1.E-6)) THEN
-     ZINT_RHOKE=1.
-     JJ=JI 
-   END IF
-  END DO
-  XLES_ZCB(NLES_CURRENT_TCOUNT)= XLES_Z(JJ)-XLES_ZS
- ENDIF
-!
-!* height of max of cf
- IF (LUSERC) THEN
-  IKMAX_CF= MAXLOC(  XLES_MEAN_INDCf(:,NLES_CURRENT_TCOUNT,1))
-  XLES_ZMAXCF(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_CF(1)) - XLES_ZS
-  IKMAX_CF= MAXLOC(  XLES_MEAN_INDCf2(:,NLES_CURRENT_TCOUNT,1))
-  XLES_ZMAXCF2(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_CF(1)) - XLES_ZS
- ENDIF
-!
-!* Monin-Obukhov length
-!
-XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = 0.
-!
-IF (LUSERV) THEN
-  IF ( XLES_Q0(NLES_CURRENT_TCOUNT)+(XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT) /=0. )&
-  XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = (- (XLES_USTAR(NLES_CURRENT_TCOUNT))**3)  &
-                    / (XKARMAN*(  XLES_Q0(NLES_CURRENT_TCOUNT)                    &
-                                +(XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT))       &
-                              *XG/XLES_MEAN_Thv(1,NLES_CURRENT_TCOUNT,1) )
-ELSE
-   IF ( XLES_Q0(NLES_CURRENT_TCOUNT) /=0. )                                       &
-   XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = (- (XLES_USTAR(NLES_CURRENT_TCOUNT))**3) &
-                    / (XKARMAN*XLES_Q0(NLES_CURRENT_TCOUNT)                       &
-                              *XG/XLES_MEAN_Th(1,NLES_CURRENT_TCOUNT,1) )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!       6.   correlations along x and y axes
-!            -------------------------------
-!
-!*  u * u
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZU_SPEC(:,:,JK), ZU_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_UU(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_UU(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  v * v
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZV_SPEC(:,:,JK), ZV_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_VV(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_VV(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  u * v
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZU_SPEC(:,:,JK), ZV_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_UV(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_UV(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  w * u
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZU_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_WU(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_WU(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  w * v
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZV_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_WV(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_WV(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  w * w
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZW_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_WW(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_WW(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  w * th
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZTH_SPEC(:,:,JK),         &
-                     CLES_LBCX , CLES_LBCY,                     &
-                     XCORRi_WTh(:,JK,NLES_CURRENT_TCOUNT),      &
-                     XCORRj_WTh(:,JK,NLES_CURRENT_TCOUNT)       )
-END DO
-!
-!*  w * thl
-!
-DO JK=1,NSPECTRA_K
-  IF (LUSERC) &
-  CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZTHL_SPEC(:,:,JK),         &
-                     CLES_LBCX , CLES_LBCY,                      &
-                     XCORRi_WThl(:,JK,NLES_CURRENT_TCOUNT),      &
-                     XCORRj_WThl(:,JK,NLES_CURRENT_TCOUNT)       )
-END DO
-!
-!*  th * th
-!
-DO JK=1,NSPECTRA_K
-  CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZTH_SPEC(:,:,JK),          &
-                     CLES_LBCX , CLES_LBCY,                       &
-                     XCORRi_ThTh(:,JK,NLES_CURRENT_TCOUNT),       &
-                     XCORRj_ThTh(:,JK,NLES_CURRENT_TCOUNT)        )
-END DO
-!
-!*  thl * thl
-!
-DO JK=1,NSPECTRA_K
-  IF (LUSERC) &
-  CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZTHL_SPEC(:,:,JK),        &
-                     CLES_LBCX , CLES_LBCY,                       &
-                     XCORRi_ThlThl(:,JK,NLES_CURRENT_TCOUNT),     &
-                     XCORRj_ThlThl(:,JK,NLES_CURRENT_TCOUNT)      )
-END DO
-!
-!* correlations with water vapor
-!
-IF (LUSERV) THEN
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRV_SPEC(:,:,JK),        &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_WRv(:,JK,NLES_CURRENT_TCOUNT),     &
-                       XCORRj_WRv(:,JK,NLES_CURRENT_TCOUNT)      )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRV_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThRv(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_ThRv(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    IF (LUSERC) &
-    CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRV_SPEC(:,:,JK),      &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThlRv(:,JK,NLES_CURRENT_TCOUNT),   &
-                       XCORRj_ThlRv(:,JK,NLES_CURRENT_TCOUNT)    )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZRV_SPEC(:,:,JK), ZRV_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_RvRv(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_RvRv(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-END IF
-!
-!
-!* correlations with cloud water
-!
-IF (LUSERC) THEN
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRC_SPEC(:,:,JK),        &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_WRc(:,JK,NLES_CURRENT_TCOUNT),     &
-                       XCORRj_WRc(:,JK,NLES_CURRENT_TCOUNT)      )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRC_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThRc(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_ThRc(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRC_SPEC(:,:,JK),      &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThlRc(:,JK,NLES_CURRENT_TCOUNT),   &
-                       XCORRj_ThlRc(:,JK,NLES_CURRENT_TCOUNT)    )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZRC_SPEC(:,:,JK), ZRC_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_RcRc(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_RcRc(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-END IF
-!
-!* correlations with cloud ice
-!
-IF (LUSERI) THEN
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRI_SPEC(:,:,JK),        &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_WRi(:,JK,NLES_CURRENT_TCOUNT),     &
-                       XCORRj_WRi(:,JK,NLES_CURRENT_TCOUNT)      )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRI_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThRi(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_ThRi(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRI_SPEC(:,:,JK),      &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_ThlRi(:,JK,NLES_CURRENT_TCOUNT),   &
-                       XCORRj_ThlRi(:,JK,NLES_CURRENT_TCOUNT)    )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZRI_SPEC(:,:,JK), ZRI_SPEC(:,:,JK),       &
-                       CLES_LBCX , CLES_LBCY,                    &
-                       XCORRi_RiRi(:,JK,NLES_CURRENT_TCOUNT),    &
-                       XCORRj_RiRi(:,JK,NLES_CURRENT_TCOUNT)     )
-  END DO
-END IF
-!
-!* correlations with scalar variables
-!
-DO JSV=1,NSV
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZSV_SPEC(:,:,JK,JSV),       &
-                       CLES_LBCX , CLES_LBCY,                       &
-                       XCORRi_WSv(:,JK,NLES_CURRENT_TCOUNT,JSV),    &
-                       XCORRj_WSv(:,JK,NLES_CURRENT_TCOUNT,JSV)     )
-  END DO
-  !
-  DO JK=1,NSPECTRA_K
-    CALL LES_HOR_CORR( ZSV_SPEC(:,:,JK,JSV), ZSV_SPEC(:,:,JK,JSV),  &
-                       CLES_LBCX , CLES_LBCY,                       &
-                       XCORRi_SvSv(:,JK,NLES_CURRENT_TCOUNT,JSV),   &
-                       XCORRj_SvSv(:,JK,NLES_CURRENT_TCOUNT,JSV)    )
-  END DO
-END DO
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LES
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LES_n
diff --git a/src/mesonh/ext/modn_turbn.f90 b/src/mesonh/ext/modn_turbn.f90
deleted file mode 100644
index 35b271f9cbf2fd0634245e495fa635e44220815b..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/modn_turbn.f90
+++ /dev/null
@@ -1,167 +0,0 @@
-!MNH_LIC Copyright 1995-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 MODN_TURB_n
-!     ###################
-!
-!!****  *MODN_TURB$n* - declaration of namelist NAM_TURBn
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this module is to specify  the namelist NAM_TURBn
-!     which concern the parameters of the turbulence scheme for one nested
-!     model.   
-!
-!!
-!!**  IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_TURB$n : contains declaration of turbulence scheme
-!!    variables entering by a namelist
-!! 
-!!          XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX
-!!          LTURB_DIAG,LSUBG_COND,LTGT_FLX
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book2 of documentation of Meso-NH (module MODD_TURBn)
-!!          
-!!    AUTHOR
-!!    ------
-!!	    J. Cuxart and J. Stein     * I.N.M. and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    January 9, 1995               
-!!      J.Cuxart    February 15, 1995 add the switches for diagnostic storages
-!!      J. Stein    June 14, 1995   add the subgrid condensation switch
-!!      J. Stein    October, 1999   add the tangential fluxes switch
-!!      M. Tomasini Jul  05, 2001   add the subgrid autoconversion
-!!      P. Bechtold Feb 11, 2002    add switch for Sigma_s computation
-!!      P. Jabouille Apr 4, 2002    add switch for Sigma_s convection
-!!      V. Masson    Nov 13 2002    add switch for SBL lengths
-!!      D. Ricard    May, 2021      add switch for Leonard Terms
-!-------------------------------------------------------------------------------
-!
-!*       0.   DECLARATIONS
-!             ------------
-!
-USE MODD_TURB_n, ONLY: &
-         XIMPL_n => XIMPL, &
-         XKEMIN_n => XKEMIN, &
-         XCEDIS_n => XCEDIS, &
-         XCADAP_n => XCADAP, &
-         CTURBLEN_n => CTURBLEN, &
-         CTURBDIM_n => CTURBDIM, &
-         LTURB_FLX_n => LTURB_FLX, &
-         LTURB_DIAG_n => LTURB_DIAG, &
-         LSUBG_COND_n => LSUBG_COND, &
-         LSIGMAS_n => LSIGMAS, &
-         LSIG_CONV_n => LSIG_CONV, &
-         LRMC01_n => LRMC01, &
-         CTOM_n => CTOM, &
-         CSUBG_AUCV_n => CSUBG_AUCV, &
-         VSIGQSAT_n => VSIGQSAT, &
-         CSUBG_AUCV_RI_n => CSUBG_AUCV_RI, &
-         CCONDENS_n => CCONDENS, &
-         CLAMBDA3_n => CLAMBDA3, &
-         CSUBG_MF_PDF_n => CSUBG_MF_PDF, &
-         LLEONARD_n => LLEONARD, &
-         XCOEFHGRADTHL_n => XCOEFHGRADTHL, &
-         XCOEFHGRADRM_n => XCOEFHGRADRM, &
-         XALTHGRAD_n => XALTHGRAD, &
-         XCLDTHOLD_n => XCLDTHOLD
-!
-IMPLICIT NONE
-!
-REAL,SAVE  :: XIMPL
-REAL,SAVE :: XKEMIN
-REAL,SAVE :: XCEDIS
-REAL,SAVE :: XCADAP
-CHARACTER (LEN=4),SAVE  :: CTURBLEN
-CHARACTER (LEN=4),SAVE  :: CTURBDIM
-LOGICAL,SAVE  :: LTURB_FLX
-LOGICAL,SAVE  :: LTURB_DIAG
-LOGICAL,SAVE  :: LSUBG_COND
-LOGICAL,SAVE  :: LSIGMAS
-LOGICAL,SAVE  :: LSIG_CONV
-LOGICAL,SAVE  :: LRMC01
-CHARACTER (LEN=4),SAVE  :: CTOM
-CHARACTER (LEN=4),SAVE  :: CSUBG_AUCV
-CHARACTER (LEN=80),SAVE  :: CSUBG_AUCV_RI
-CHARACTER (LEN=80),SAVE  :: CCONDENS
-CHARACTER (LEN=4),SAVE  :: CLAMBDA3
-CHARACTER (LEN=80),SAVE  :: CSUBG_MF_PDF
-REAL,SAVE :: VSIGQSAT
-LOGICAL,SAVE  :: LLEONARD
-REAL,SAVE :: XCOEFHGRADTHL
-REAL,SAVE :: XCOEFHGRADRM
-REAL,SAVE :: XALTHGRAD
-REAL,SAVE :: XCLDTHOLD
-!
-NAMELIST/NAM_TURBn/XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX,LTURB_DIAG,  &
-                   LSUBG_COND,LSIGMAS,LSIG_CONV,LRMC01,CTOM,CSUBG_AUCV,&
-                   XKEMIN,VSIGQSAT,XCEDIS,XCADAP,CSUBG_AUCV_RI,CCONDENS,&
-                   CLAMBDA3,CSUBG_MF_PDF,LLEONARD,XCOEFHGRADTHL, XCOEFHGRADRM, &
-                   XALTHGRAD, XCLDTHOLD
-
-!
-CONTAINS
-!
-SUBROUTINE INIT_NAM_TURBn
-  XIMPL = XIMPL_n
-  XKEMIN = XKEMIN_n
-  XCEDIS = XCEDIS_n
-  XCADAP = XCADAP_n
-  CTURBLEN = CTURBLEN_n
-  CTURBDIM = CTURBDIM_n
-  LTURB_FLX = LTURB_FLX_n
-  LTURB_DIAG = LTURB_DIAG_n
-  LSUBG_COND = LSUBG_COND_n
-  LSIGMAS = LSIGMAS_n
-  LSIG_CONV = LSIG_CONV_n
-  LRMC01 = LRMC01_n
-  CTOM = CTOM_n
-  CSUBG_AUCV = CSUBG_AUCV_n
-  VSIGQSAT = VSIGQSAT_n  
-  CSUBG_AUCV_RI = CSUBG_AUCV_RI_n
-  CCONDENS = CCONDENS_n
-  CLAMBDA3 = CLAMBDA3_n
-  CSUBG_MF_PDF = CSUBG_MF_PDF_n
-  LLEONARD = LLEONARD_n
-  XCOEFHGRADTHL = XCOEFHGRADTHL_n
-  XCOEFHGRADRM = XCOEFHGRADRM_n
-  XALTHGRAD = XALTHGRAD_n
-  XCLDTHOLD = XCLDTHOLD_n
-END SUBROUTINE INIT_NAM_TURBn
-
-SUBROUTINE UPDATE_NAM_TURBn
-  XIMPL_n = XIMPL
-  XKEMIN_n = XKEMIN
-  XCEDIS_n = XCEDIS
-  XCADAP_n = XCADAP
-  CTURBLEN_n = CTURBLEN
-  CTURBDIM_n = CTURBDIM
-  LTURB_FLX_n = LTURB_FLX
-  LTURB_DIAG_n = LTURB_DIAG
-  LSUBG_COND_n = LSUBG_COND
-  LSIGMAS_n = LSIGMAS
-  LSIG_CONV_n = LSIG_CONV
-  LRMC01_n = LRMC01
-  CTOM_n = CTOM
-  CSUBG_AUCV_n = CSUBG_AUCV
-  VSIGQSAT_n = VSIGQSAT
-  CSUBG_AUCV_RI_n = CSUBG_AUCV_RI
-  CCONDENS_n = CCONDENS
-  CLAMBDA3_n = CLAMBDA3
-  CSUBG_MF_PDF_n = CSUBG_MF_PDF
-  LLEONARD_n = LLEONARD
-  XCOEFHGRADTHL_n = XCOEFHGRADTHL
-  XCOEFHGRADRM_n = XCOEFHGRADRM
-  XALTHGRAD_n = XALTHGRAD
-  XCLDTHOLD_n = XCLDTHOLD
-END SUBROUTINE UPDATE_NAM_TURBn
-
-END MODULE MODN_TURB_n
diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90
deleted file mode 100644
index 2411666072a4afe4840ebd7fa0738139875ebb78..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/phys_paramn.f90
+++ /dev/null
@@ -1,1694 +0,0 @@
-!MNH_LIC Copyright 1995-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_PHYS_PARAM_n
-!    ########################
-!
-!
-INTERFACE
-!
-      SUBROUTINE PHYS_PARAM_n( KTCOUNT, TPFILE,                                              &
-                               PRAD, PSHADOWS, PKAFR, PGROUND, PMAFL, PDRAG,PEOL, PTURB,     &
-                               PTRACER, PTIME_BU, PWETDEPAER, OMASKkids, OCLOUD_ONLY         )
-!
-USE MODD_IO,        ONLY: TFILEDATA
-use modd_precision, only: MNHTIME
-!
-INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
-TYPE(TFILEDATA),   INTENT(IN)     :: TPFILE    ! Synchronous output file
-! advection schemes
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER,PEOL ! to store CPU
-                                                                                                         ! time for computing time
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU  ! time used in budget&LES budgets statistics
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)  :: PWETDEPAER
-LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
-LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for
-                                !      the only cloudy columns
-                                !
-END SUBROUTINE PHYS_PARAM_n
-!
-END INTERFACE
-!
-END MODULE MODI_PHYS_PARAM_n
-!
-!     ########################################################################################
-      SUBROUTINE PHYS_PARAM_n( KTCOUNT, TPFILE,                                              &
-                               PRAD, PSHADOWS, PKAFR, PGROUND, PMAFL, PEOL, PDRAG, PTURB,    &
-                               PTRACER, PTIME_BU, PWETDEPAER, OMASKkids, OCLOUD_ONLY         )
-!     ########################################################################################
-!
-!!****  *PHYS_PARAM_n * -monitor of the parameterizations used by model _n
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to update the sources by adding the
-!     parameterized terms. This is realized by sequentially calling the
-!     specialized routines.
-!    
-!!**  METHOD
-!!    ------
-!!      The first parametrization is the radiation scheme:
-!!                                       ----------------
-!!     *  CRAD = 'FIXE'
-!!     In this case, a temporal interpolation  is performed for the downward
-!!     surface fluxes XFLALWD and XFLASWD.
-!!     *  CRAD = 'ECMWF'
-!!     Several tests are performed before calling the radiation computations
-!!     interface with the ECMWF radiation scheme code. A control is made to
-!!     ensure that:
-!!         - the full radiation code is called at the first model timestep
-!!         - there is a priority for calling the full radiation instead of the
-!!           cloud-only approximation if both must be called at the current
-!!           timestep
-!!         - the cloud-only option (approximation) is coherent with the
-!!           occurence of one cloudy vertical column at least
-!!      If all the above conditions are fulfilled (GRAD is .TRUE.) then the
-!!     position of the sun is computed in routine SUNPOS_n and the interfacing
-!!     routine RADIATIONS is called to update the radiative tendency XDTHRAD
-!!     and the downward surface fluxes XFLALWD and XFLASWD. Finally, the
-!!     radiative tendency is integrated as a source term in the THETA prognostic
-!!     equation.
-!!
-!!      The second parameterization is the soil scheme:
-!!                                         -----------
-!!
-!!     externalized surface
-!!
-!!       The third parameterization is the turbulence scheme:
-!!                                         -----------------
-!!     * CTURB='NONE'
-!!     no turbulent mixing is taken into account
-!!     * CTURB='TKEL'
-!!     The turbulent fluxes are computed according to a one and half order
-!!     closure of the hydrodynamical equations. This scheme is based on a
-!!     prognostic for the turbulent kinetic energy and a mixing length
-!!     computation ( the mesh size or a physically based length). Other
-!!     turbulent moments are diagnosed according to a stationarization of the
-!!     second order turbulent moments. This turbulent scheme forecasts
-!!     either a purely vertical turbulent mixing or 3-dimensional mixing
-!!     according to its internal degrees of freedom.
-!!
-!!
-!!       The LAST parameterization is the chemistry scheme:
-!!                                        -----------------
-!!     The chemistry part of MesoNH has two namelists, NAM_SOLVER for the
-!!     parameters concerning the stiff solver, and NAM_MNHCn concerning the
-!!     configuration and options of the chemistry module itself.
-!!     The switch LUSECHEM in NAM_CONF acitvates or deactivates the chemistry.
-!!     The only variables of MesoNH that are modified by chemistry are the
-!!     scalar variables. If calculation of chemical surface fluxes is
-!!     requested, those fluxes are calculated before
-!!     entering the turbulence scheme, since those fluxes are taken into
-!!     account by TURB as surface boundary conditions.
-!!     CAUTION: chemistry has allways to be called AFTER ALL OTHER TERMS
-!!     that affect the scalar variables (dynamical terms, forcing,
-!!     parameterizations (like TURB, CONVECTION), since it uses the variables
-!!     XRSVS as input in case of the time-split option.
-!!
-!!    EXTERNAL
-!!    --------
-!!      Subroutine SUNPOS_n     : computes the position of the sun
-!!      Subroutine RADIATIONS   : computes the radiative tendency and fluxes
-!!      Subroutine TSZ0         : computes the surface from temporally
-!!                                interpolated Ts and given z0
-!!      Subroutine ISBA         : computes the surface fluxes from a soil scheme
-!!      Subroutine TURB         : computes the turbulence source terms
-!!      Subroutine CONVECTION   : computes the convection source term
-!!      Subroutine CH_SURFACE_FLUX_n: computes the surface flux for chemical
-!!                                species
-!!      Subroutine CH_MONITOR_n : computes the chemistry source terms
-!!                                that are applied to the scalar variables
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      USE MODD_DYN
-!!      USE MODD_CONF
-!!      USE MODD_CONF_n
-!!      USE MODD_CURVCOR_n
-!!      USE MODD_DYN_n
-!!      USE MODD_FIELD_n
-!!      USE MODD_GR_FIELD_n
-!!      USE MODD_LSFIELD_n
-!!      USE MODD_GRID_n
-!!      USE MODD_LBC_n
-!!      USE MODD_PARAM_RAD_n
-!!      USE MODD_RADIATIONS_n
-!!      USE MODD_REF_n
-!!      USE MODD_LUNIT_n
-!!      USE MODD_TIME_n
-!!      USE MODD_CH_MNHC_n
-!!
-!!    REFERENCE
-!!    ---------
-!!      None
-!!
-!!    AUTHOR
-!!    ------
-!!      J. Stein           * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    05/01/95
-!!      Modifications  Feb 14, 1995 (J.Cuxart)  add the I/O arguments,
-!!             the director cosinus and change the names of the surface fluxes
-!!      Modifications March 21, 1995 (J.M.Carriere) take into account liquid
-!!                                             water
-!!                    June 30,1995  (J.Stein)  initialize at 0 the surf. fluxes
-!!      Modifications Sept. 1, 1995 (S.Belair) ISBA scheme
-!!      Modifications Sept.25, 1995 (J.Stein)  switch on the radiation scheme
-!!      Modifications Sept. 11, 1995 (J.-P. Pinty) radiation scheme
-!!                    Nov.  15, 1995 (J.Stein) cleaning + change the temporal
-!!                                   algorithm for the soil scheme-turbulence
-!!                    Jan.  23, 1996 (J.Stein) add a new option for the surface
-!!                                   fluxes where Ts and z0 are given
-!!                    March 18, 1996 (J.Stein) add the cloud fraction
-!!                    March 28, 1996 (J.Stein) the soil scheme gives energy
-!!                                             fluxes + cleaning
-!!                    June  17, 1996 (Lafore)  statistics of computing time
-!!                    August 4, 1996 (K. Suhre) add chemistry
-!!                    Oct.  12, 1996 (J.Stein) use XSRCM in the turbulence
-!!                                             scheme
-!!                    Nov.  18, 1996 (J.-P. Pinty) add domain translation
-!!                                                 change arg. in radiations
-!!                    Fev.   4, 1997 (J.Viviand) change isba's calling for ice
-!!                    Jun.  22, 1997 (J.Stein) change the equation system and use
-!!                                             the absolute pressure
-!!                    Jul.  09, 1997 (V.Masson) add directional z0
-!!                    Jan.  24, 1998 (P.Bechtold) add convective transport for tracers
-!!                    Jan.  24, 1998 (J.-P. Pinty) split SW and LW part for radiation
-!!                    Mai.  10, 1999 (P.Bechtold) shallow convection
-!!                    Oct.  20, 1999 (P.Jabouille) domain translation for turbulence
-!!                    Jan.  04, 2000 (V.Masson) removes TSZ0 case
-!!                    Jan.  04, 2000 (V.Masson) modifies albedo computation
-!                     Jul   02, 2000 (F.Solmon/V.Masson) adaptation for patch approach
-!!                    Nov.  15, 2000 (V.Masson) LES routines
-!!                    Nov.  15, 2000 (V.Masson) effect of slopes on surface fluxes
-!!                    Feb.  02, 2001 (P.Tulet) add friction velocities and aerodynamical
-!!                                             resistance (patch approach)
-!!                    Jan.  04, 2000 (V.Masson) modify surf_rad_modif computation
-!!                    Mar.  04, 2002 (F.Solmon) new interface for radiation call
-!!                    Nov.  06, 2002 (V.Masson) LES budgets & budget time counters
-!!                    Jan. 2004      (V.Masson) surface externalization
-!!                    Jan.  13, 2004 (J.Escobar) bug correction : compute "GRAD" in parallel
-!!                    Jan.  20, 2005 (P. Tulet)  add dust sedimentation 
-!!                    Jan.  20, 2005 (P. Tulet)  climatologic SSA
-!!                    Jan.  20, 2005 (P. Tulet)  add aerosol / dust scavenging
-!!                    Jul. 2005       (N. Asencio) use the two-way result-fields
-!!                                  before ground_param call
-!!                    May 2006        Remove EPS
-!!                    Oct. 2007      (J.Pergaud) Add shallow_MF
-!!                    Oct. 2009     (C.Lac) Introduction of different PTSTEP according to the
-!!                              advection schemes
-!!                    Oct. 2009     (V. MAsson) optimization of Pergaud et al massflux scheme
-!!                    Aug. 2010     (V.Masson, C.Lac) Exchange of SBL_DEPTH for
-!!                                  reproducibility
-!!                    Oct. 2010   (J.Escobar) init  ZTIME_LES_MF ( pb detected with g95 )
-!!                    Feb. 2011 (V.Masson, C.Lac) SBL_DEPTH values on outer pts
-!!                               for RMC01
-!!                    Sept.2011 (J.Escobar) init YINST_SFU ='M'
-!!
-!!                        Specific for 2D modeling : 
-!! 
-!!                    06/2010    (P.Peyrille)  add Call to aerozon.f90 if LAERO_FT=T
-!!                                to update 
-!!                                aerosols and ozone climatology at each call to
-!!                                phys_param otherwise it is constant to monthly average
-!!                    03/2013  (C.Lac) FIT temporal scheme
-!!                    01/2014 (C.Lac) correction for the nesting of 2D surface
-!!                           fields if the number of the son model does not
-!!                           follow the number of the dad model
-!!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test
-!!                       2014  (M.Faivre)
-!!  06/2016     (G.Delautier) phasage surfex 8
-!!  2016 B.VIE LIMA
-!!      M. Leriche 02/2017 Avoid negative fluxes if sv=0 outside the physics domain
-!!      C.Lac  10/2017 : ch_monitor and aer_monitor extracted from phys_param
-!!                       to be called directly by modeln as the last process 
-!!                   02/2018 Q.Libois ECRAD
-!  P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE
-!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!  P. Wautelet 21/11/2019: ZRG_HOUR and ZRAT_HOUR are now parameter arrays
-!  C. Lac         11/2019: correction in the drag formula and application to building in addition to tree
-!  F. Auguste     02/2021: add IBM
-!  JL Redelsperger 03/2021: add the SW flux penetration for Ocean model case
-!  A. Costes      12/2021: add Blaze fire model
-!!-------------------------------------------------------------------------------
-!
-!*       0.     DECLARATIONS
-!               ------------
-!
-USE MODD_ADV_n,       ONLY : XRTKEMS
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_BLOWSNOW,    ONLY : LBLOWSNOW,XRSNOW
-USE MODD_BUDGET,      ONLY: NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, &
-                            TBUDGETS, xtime_bu_process, TBUCONF
-USE MODD_CH_AEROSOL
-USE MODD_CH_MNHC_n, ONLY : LUSECHEM,         &! indicates if chemistry is used
-                           LCH_CONV_SCAV,    &
-                           LCH_CONV_LINOX
-USE MODD_CLOUD_MF_n
-USE MODD_CONDSAMP
-USE MODD_CONF
-USE MODD_CONF_n
-USE MODD_CST, ONLY : CST
-USE MODD_CTURB, ONLY : CSTURB
-USE MODD_CURVCOR_n
-USE MODD_DEEP_CONVECTION_n
-USE MODD_DEF_EDDY_FLUX_n           ! Ajout PP
-USE MODD_DEF_EDDYUV_FLUX_n         ! Ajout PP
-USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS
-USE MODD_DIM_n, ONLY: NIMAX_ll, NJMAX_ll
-USE MODD_DRAGBLDG_n
-USE MODD_DRAGTREE_n
-USE MODD_DUST
-USE MODD_DYN
-USE MODD_DYN_n
-USE MODD_EOL_MAIN, ONLY: LMAIN_EOL, CMETH_EOL, NMODEL_EOL
-USE MODD_FIELD_n
-USE MODD_FRC
-USE MODD_FRC_n
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_IBM_PARAM_n,      ONLY: LIBM, XIBM_EPSI, XIBM_LS, XIBM_XMUT
-USE MODD_ICE_C1R3_DESCR,  ONLY : XRTMIN_C1R3=>XRTMIN
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LATZ_EDFLX
-USE MODD_LBC_n
-USE MODD_LES
-USE MODD_LES_BUDGET
-USE MODD_LSFIELD_n
-USE MODD_LUNIT_n
-USE MODD_METRICS_n
-USE MODD_MNH_SURFEX_n
-USE MODD_NESTING, ONLY : XWAY,NDAD, NDXRATIO_ALL, NDYRATIO_ALL
-USE MODD_NSV, ONLY : NSV, NSV_LGBEG, NSV_LGEND, &
-                     NSV_SLTBEG,NSV_SLTEND,NSV_SLT,&
-                     NSV_AERBEG,NSV_AEREND, &
-                     NSV_DSTBEG,NSV_DSTEND, NSV_DST,&
-                     NSV_LIMA_NR,NSV_LIMA_NS,NSV_LIMA_NG,NSV_LIMA_NH
-USE MODD_OCEANH
-USE MODD_OUT_n
-USE MODD_PARAM_C2R2,       ONLY : LSEDC
-USE MODD_PARAMETERS
-USE MODD_PARAM_ICE,        ONLY : LSEDIC
-USE MODD_PARAM_KAFR_n
-USE MODD_PARAM_LIMA,       ONLY : MSEDC => LSEDC, XRTMIN_LIMA=>XRTMIN
-USE MODD_PARAM_MFSHALL_n
-USE MODD_PARAM_n
-USE MODD_PARAM_RAD_n
-USE MODD_PASPOL
-USE MODD_PASPOL_n
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-USE MODD_PRECIP_n
-use modd_precision,        only: MNHTIME
-USE MODD_RADIATIONS_n
-USE MODD_RAIN_ICE_DESCR,   ONLY: XRTMIN
-USE MODD_REF,              ONLY: LCOUPLES
-USE MODD_REF_n
-USE MODD_SALT
-USE MODD_SHADOWS_n
-USE MODD_SUB_PHYS_PARAM_n
-USE MODD_TIME_n
-USE MODD_TIME_n
-USE MODD_TIME, ONLY : TDTEXP  ! Ajout PP
-USE MODD_TURB_CLOUD, ONLY : CTURBLEN_CLOUD,NMODEL_CLOUD, &
-                            XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT
-USE MODD_TURB_FLUX_AIRCRAFT_BALLOON, ONLY : XTHW_FLUX, XRCW_FLUX, XSVW_FLUX
-USE MODD_TURB_n
-
-USE MODE_AERO_PSD
-use mode_budget,            only: Budget_store_end, Budget_store_init
-USE MODE_DATETIME
-USE MODE_DUST_PSD
-USE MODE_ll
-USE MODE_GATHER_ll
-USE MODE_MNH_TIMING
-USE MODE_MODELN_HANDLER
-USE MODE_MPPDB
-USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX
-USE MODE_SALT_PSD
-
-USE MODI_AEROZON          ! Ajout PP
-USE MODI_CONDSAMP
-USE MODI_CONVECTION
-USE MODI_DRAG_BLD
-USE MODI_DRAG_VEG
-USE MODI_DUST_FILTER
-USE MODI_EDDY_FLUX_n               ! Ajout PP
-USE MODI_EDDY_FLUX_ONE_WAY_n       ! Ajout PP
-USE MODI_EDDYUV_FLUX_n             ! Ajout PP
-USE MODI_EDDYUV_FLUX_ONE_WAY_n     ! Ajout PP
-USE MODI_EOL_MAIN
-USE MODI_GROUND_PARAM_n
-USE MODI_GRADIENT_M
-USE MODI_GRADIENT_W
-USE MODI_PASPOL
-USE MODI_RADIATIONS
-USE MODI_SALT_FILTER
-USE MODI_SEDIM_DUST
-USE MODI_SEDIM_SALT
-USE MODI_SHALLOW_MF_PACK
-USE MODI_SUNPOS_n
-USE MODI_SURF_RAD_MODIF
-USE MODI_SWITCH_SBG_LES_N
-USE MODI_TURB
-
-IMPLICIT NONE
-!
-!*      0.1    declarations of arguments
-!
-INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
-TYPE(TFILEDATA),   INTENT(IN)     :: TPFILE    ! Synchronous output file
-! advection schemes
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER,PEOL ! to store CPU
-                                                                                                         ! time for computing time
-REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU  ! time used in budget&LES budgets statistics
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)  :: PWETDEPAER
-LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
-LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for
-                                !      the only cloudy columns
-                                !
-!
-!*      0.2    declarations of local variables
-!
-REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFU  ! surface flux of x and
-REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFV  ! y component of wind
-REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFTH ! surface flux of theta
-REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFRV ! surface flux of vapor
-REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZSFSV ! surface flux of scalars
-REAL, DIMENSION(:,:), ALLOCATABLE     :: ZSFCO2! surface flux of CO2
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEMIS    ! emissivity
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTSRAD   ! surface temperature
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGDST,ZSIGDST,ZNDST,ZSVDST
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGSLT,ZSIGSLT,ZNSLT,ZSVSLT
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZRGAER,ZSIGAER,ZNAER,ZSVAER
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSVT
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN   ! Atmospheric density and Exner
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSIGMF   ! MF contribution to XSIGS
-!
-REAL, DIMENSION(0:24), parameter :: ZRG_HOUR =  (/ 0., 0., 0., 0., 0., 32.04, 114.19, &
-                                                   228.01, 351.25, 465.49, 557.24,    &
-                                                   616.82, 638.33, 619.43, 566.56,    &
-                                                   474.71, 359.20, 230.87, 115.72,    &
-                                                   32.48, 0., 0., 0., 0., 0. /)
-!
-REAL, DIMENSION(0:24), parameter :: ZRAT_HOUR = (/ 326.00, 325.93, 325.12, 324.41, &
-                                                   323.16, 321.95, 322.51, 325.16, &
-                                                   328.01, 331.46, 335.58, 340.00, &
-                                                   345.20, 350.32, 354.20, 356.58, &
-                                                   356.56, 355.33, 352.79, 351.34, &
-                                                   347.00, 342.00, 337.00, 332.00, &
-                                                   326.00     /)
-!
-!
-character(len=6) :: ynum
-INTEGER  :: IHOUR               ! parameters necessary for the temporal
-REAL     :: ZTIME, ZDT          ! interpolation
-REAL     :: ZTEMP_DIST          ! time between 2 instants (in seconds)
-!
-LOGICAL :: GRAD                 ! conditionnal call for the full radiation
-                                !         computations
-REAL    :: ZRAD_GLOB_ll         ! 'real' global parallel mask of 'GRAD'
-INTEGER :: INFO_ll              ! error report of parallel routines
-                                !      the only cloudy columns
-!
-REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZTIME3, ZTIME4 ! for computing time analysis
-REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_LES_MF                   ! time spent in LES computation in shallow conv.
-LOGICAL :: GDCONV               ! conditionnal call for the deep convection
-                                !         computations
-REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRC, ZRI, ZWT ! additional dummies
-REAL, DIMENSION(:,:),   ALLOCATABLE  :: ZDXDY         ! grid area
-                    ! for rc, ri, w required if main variables not allocated
-!
-INTEGER :: IIU, IJU, IKU                              ! dimensional indexes
-!
-INTEGER     :: JSV              ! Loop index for Scalar Variables
-INTEGER     :: JSWB             ! loop on SW spectral bands
-INTEGER     :: IIB,IIE,IJB,IJE, IKB, IKE, JI,JJ
-INTEGER     :: IMODEIDX
-              ! index values for the Beginning or the End of the physical
-              ! domain in x and y directions
-TYPE(LIST_ll), POINTER :: TZFIELDS_ll   ! list of fields to exchange
-INTEGER                :: IINFO_ll       ! return code of parallel routine
-!
-!* variables for writing in a fm file
-!
-INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
-                                    !in LFI subroutines at the open of the file
-INTEGER           :: ILUOUT         ! logical unit numbers of output-listing
-INTEGER           :: IMI            ! model index
-INTEGER           :: JKID           ! loop index to look for the KID models
-REAL              :: ZINIRADIUSI, ZINIRADIUSJ ! ORILAM initial radius
-REAL, DIMENSION(NMODE_DST)    :: ZINIRADIUS  ! DUST initial radius
-REAL, DIMENSION(NMODE_SLT)    :: ZINIRADIUS_SLT  ! Sea Salt initial radius
-REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), SIZE(XRSVS,4))  :: ZRSVS
-LOGICAL :: GCLD                     ! conditionnal call for dust wet deposition
-! * arrays to store the surface fields before radiation and convection scheme
-!  calls
-INTEGER           :: IMODSON        ! Number of son models of IMI with XWAY=2
-INTEGER           :: IKIDM          ! index loop                                 
-INTEGER           :: IGRADIENTS     ! Number of horizontal gradients in turb
-REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH
-REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSAVE_DIRFLASWD, ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD
-! for ocean model
-INTEGER           :: JKM , JSW         ! vertical index loop                                 
-REAL :: ZSWA,TINTSW     ! index for SW interpolation and int time betwenn forcings (ocean model)
-REAL, DIMENSION(:), ALLOCATABLE :: ZIZOCE(:) ! Solar flux penetrating in ocean
-REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetrating solar flux
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !OHARAT turb option from AROME (not allocated in MNH)
-                                                                    ! to be moved as optional args for turb
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTDIFF, ZTDISS
-REAL, DIMENSION(:),ALLOCATABLE  :: ZXHAT_ll,ZYHAT_ll  !  Position x/y in the conformal
-                                                 ! plane (array on the complete domain)
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIST ! distance from the center of the cooling 
-!
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZHGRAD ! horizontal gradient used in turb
-TYPE(DIMPHYEX_t) :: YLDIMPHYEX
-LOGICAL :: GCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables 
-!-----------------------------------------------------------------------------
-
-NULLIFY(TZFIELDS_ll)
-IMI=GET_CURRENT_MODEL_INDEX()
-!
-ILUOUT = TLUOUT%NLU
-CALL GET_DIM_EXT_ll ('B',IIU,IJU)
-IKU=SIZE(XTHT,3)
-IKB = 1 + JPVEXT
-IKE = IKU - JPVEXT
-!
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.)
-!
-ZTIME1 = 0.0_MNHTIME
-ZTIME2 = 0.0_MNHTIME
-ZTIME3 = 0.0_MNHTIME
-ZTIME4 = 0.0_MNHTIME
-PTIME_BU = 0._MNHTIME
-ZTIME_LES_MF = 0.0_MNHTIME
-PWETDEPAER(:,:,:,:) = 0.
-!
-!* allocation of variables used in more than one parameterization
-!
-ALLOCATE(ZSFU  (IIU,IJU))         ! surface schemes + turbulence
-ALLOCATE(ZSFV  (IIU,IJU))
-ALLOCATE(ZSFTH (IIU,IJU))
-ALLOCATE(ZSFRV (IIU,IJU))
-ALLOCATE(ZSFSV (IIU,IJU,NSV))
-ALLOCATE(ZSFCO2(IIU,IJU))
-!
-!* if XWAY(son)=2 save surface fields before radiation or convective scheme
-!  calls
-!
-IMODSON = 0
-DO JKID = IMI+1,NMODEL  ! min value of the possible kids
- IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' &
-  .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
-  IMODSON = IMODSON + 1
- END IF
-END DO
-!
- IF (IMODSON /= 0 ) THEN
-   IF (LUSERC .AND. (                                               &
-       (LSEDIC .AND. CCLOUD(1:3) == 'ICE')                     .OR. &
-       (LSEDC  .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. &
-       (MSEDC  .AND. CCLOUD=='LIMA')                                &
-      )) THEN
-     ALLOCATE( ZSAVE_INPRC(SIZE(XINPRC,1),SIZE(XINPRC,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_INPRC(0,0,0))
-   END IF
-   IF (LUSERR) THEN
-     ALLOCATE( ZSAVE_INPRR(SIZE(XINPRR,1),SIZE(XINPRR,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_INPRR(0,0,0))
-   END IF
-   IF (LUSERS) THEN
-     ALLOCATE( ZSAVE_INPRS(SIZE(XINPRS,1),SIZE(XINPRS,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_INPRS(0,0,0))                              
-   END IF
-   IF (LUSERG) THEN
-     ALLOCATE( ZSAVE_INPRG(SIZE(XINPRG,1),SIZE(XINPRG,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_INPRG(0,0,0))                                
-   END IF
-   IF (LUSERH) THEN
-     ALLOCATE( ZSAVE_INPRH(SIZE(XINPRH,1),SIZE(XINPRH,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_INPRH(0,0,0))                               
-   END IF
-   IF (CDCONV /= 'NONE') THEN
-     ALLOCATE( ZSAVE_PRCONV(SIZE(XPRCONV,1),SIZE(XPRCONV,2),IMODSON))
-     ALLOCATE( ZSAVE_PRSCONV(SIZE(XPRSCONV,1),SIZE(XPRSCONV,2),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_PRCONV(0,0,0))                                
-     ALLOCATE( ZSAVE_PRSCONV(0,0,0))                                    
-   END IF
-   IF (CRAD /= 'NONE') THEN
-     ALLOCATE( ZSAVE_DIRFLASWD(SIZE(XDIRFLASWD,1),SIZE(XDIRFLASWD,2),SIZE(XDIRFLASWD,3),IMODSON))
-     ALLOCATE( ZSAVE_SCAFLASWD(SIZE(XSCAFLASWD,1),SIZE(XSCAFLASWD,2),SIZE(XSCAFLASWD,3),IMODSON))
-     ALLOCATE( ZSAVE_DIRSRFSWD(SIZE(XDIRSRFSWD,1),SIZE(XDIRSRFSWD,2),SIZE(XDIRSRFSWD,3),IMODSON))
-   ELSE
-     ALLOCATE( ZSAVE_DIRFLASWD(0,0,0,0))
-     ALLOCATE( ZSAVE_SCAFLASWD(0,0,0,0))
-     ALLOCATE( ZSAVE_DIRSRFSWD(0,0,0,0)) 
-   END IF
- ENDIF
-!
-IKIDM=0
-DO JKID = IMI+1,NMODEL  ! min value of the possible kids
- IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' &
-  .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
-! BUG if number of the son does not follow the number of the dad
-! IKIDM = JKID-IMI
-  IKIDM = IKIDM + 1
-   IF (LUSERC .AND. (                                               &
-       (LSEDIC .AND. CCLOUD(1:3) == 'ICE')                     .OR. &
-       (LSEDC  .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. &
-       (MSEDC  .AND. CCLOUD=='LIMA')                                &
-      )) THEN
-     ZSAVE_INPRC(:,:,IKIDM) = XINPRC(:,:)
-   END IF
-   IF (LUSERR) THEN
-     ZSAVE_INPRR(:,:,IKIDM) = XINPRR(:,:)
-   END IF
-   IF (LUSERS) THEN
-     ZSAVE_INPRS(:,:,IKIDM) = XINPRS(:,:)
-   END IF
-   IF (LUSERG) THEN
-     ZSAVE_INPRG(:,:,IKIDM) = XINPRG(:,:)
-   END IF
-   IF (LUSERH) THEN
-     ZSAVE_INPRH(:,:,IKIDM) = XINPRH(:,:)
-   END IF
-   IF (CDCONV /= 'NONE') THEN
-     ZSAVE_PRCONV(:,:,IKIDM) = XPRCONV(:,:)
-     ZSAVE_PRSCONV(:,:,IKIDM) = XPRSCONV(:,:)
-   END IF
-   IF (CRAD /= 'NONE') THEN
-     ZSAVE_DIRFLASWD(:,:,:,IKIDM) = XDIRFLASWD(:,:,:)
-     ZSAVE_SCAFLASWD(:,:,:,IKIDM) = XSCAFLASWD(:,:,:)
-     ZSAVE_DIRSRFSWD(:,:,:,IKIDM) = XDIRSRFSWD(:,:,:)
-   END IF
- ENDIF
-END DO
-!
-!-----------------------------------------------------------------------------
-!
-!*        1.    RADIATION SCHEME
-!               ----------------
-!
-!
-XTIME_BU_PROCESS = 0.
-XTIME_LES_BU_PROCESS = 0.
-!
-CALL SECOND_MNH2(ZTIME1)
-!
-!
-!*        1.1   Tests to control how the radiation package should be called (at the current timestep)
-!               -----------------------------------------------------------
-!
-!
-GRAD = .FALSE.
-OCLOUD_ONLY = .FALSE.
-!
-IF (CRAD /='NONE') THEN
-!
-!  test to see if the partial radiations for cloudy must be called
-!
-  IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN
-    CALL DATETIME_DISTANCE(TDTRAD_CLONLY,TDTCUR,ZTEMP_DIST)
-    IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN
-      TDTRAD_CLONLY = TDTCUR
-      GRAD = .TRUE.
-      OCLOUD_ONLY = .TRUE.
-    END IF
-  END IF
-!   
-! test to see if the full radiations must be called
-!   
-  CALL DATETIME_DISTANCE(TDTCUR,TDTRAD_FULL,ZTEMP_DIST)
-  IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN
-    TDTRAD_FULL = TDTCUR
-    GRAD = .TRUE.
-    OCLOUD_ONLY = .FALSE.
-  END IF
-!
-! tests to see if any cloud exists
-!   
-  IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN
-    IF (GRAD .AND. NRR.LE.3 ) THEN 
-      IF( MAX(MAXVAL(XCLDFR(:,:,:)),MAXVAL(XICEFR(:,:,:))).LE. 1.E-10 .AND. OCLOUD_ONLY ) THEN
-          GRAD = .FALSE.                ! only the cloudy verticals would be 
-                                        ! refreshed but there is no clouds 
-      END IF
-    END IF
-!
-    IF (GRAD .AND. NRR.GE.4 ) THEN 
-      IF( CCLOUD(1:3)=='ICE' )THEN
-        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND.             &
-            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. OCLOUD_ONLY ) THEN
-            GRAD = .FALSE.            ! only the cloudy verticals would be 
-                                      ! refreshed but there is no cloudwater and ice
-        END IF
-      END IF
-      IF( CCLOUD=='C3R5' )THEN
-        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND.             &
-            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. OCLOUD_ONLY ) THEN
-            GRAD = .FALSE.            ! only the cloudy verticals would be 
-                                      ! refreshed but there is no cloudwater and ice
-        END IF
-      END IF
-      IF( CCLOUD=='LIMA' )THEN
-        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_LIMA(2) .AND.             &
-            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_LIMA(4) .AND. OCLOUD_ONLY ) THEN
-            GRAD = .FALSE.            ! only the cloudy verticals would be 
-                                      ! refreshed but there is no cloudwater and ice
-        END IF
-      END IF      
-    END IF
-  END IF
-!
-END IF
-!
-! global parallel mask for 'GRAD'
-ZRAD_GLOB_ll = 0.0
-IF (GRAD) ZRAD_GLOB_ll = 1.0
-CALL REDUCESUM_ll(ZRAD_GLOB_ll,INFO_ll)
-if (ZRAD_GLOB_ll .NE. 0.0 ) GRAD = .TRUE.
-!
-!
-IF( GRAD ) THEN                                 
-  ALLOCATE(ZCOSZEN(IIU,IJU))
-  ALLOCATE(ZSINZEN(IIU,IJU))
-  ALLOCATE(ZAZIMSOL(IIU,IJU))
-!
-!
-!*        1.2.  Astronomical computations
-!               -------------------------
-!
-! Ajout PP
-IF (.NOT. OCLOUD_ONLY .AND. KTCOUNT /= 1)  THEN 
- IF (LAERO_FT) THEN 
-  CALL AEROZON (XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,   &
-         NDLON,NFLEV,CAER,NAER,NSTATM,                             &
-         XSINDEL,XCOSDEL,XTSIDER,XCORSOL,                          &
-         XSTATM,XOZON, XAER)
-  XAER_CLIM = XAER
- END IF
-END IF
-!
-CALL SUNPOS_n   ( XZENITH, ZCOSZEN, ZSINZEN, ZAZIMSOL )
-!
-!*        1.3   Call to radiation scheme
-!               ------------------------
-!
-  SELECT CASE ( CRAD )
-!
-!*        1.3.1 TOP of Atmposphere radiation
-!               ----------------------------
-    CASE('TOPA')
-!
-      XFLALWD   (:,:)   = 300.
-      DO JSWB=1,NSWB_MNH
-        XDIRFLASWD(:,:,JSWB) = CST%XI0 * MAX(COS(XZENITH(:,:)),0.)/REAL(NSWB_MNH)
-        XSCAFLASWD(:,:,JSWB) = 0.
-      END DO
-      XDTHRAD(:,:,:) = 0.
-     
-!
-!*        1.3.1 FIXEd radiative surface fluxes
-!               ------------------------------
-!
-    CASE('FIXE')
-      ZTIME = MOD(TDTCUR%xtime +XLON0*240., CST%XDAY)
-      IHOUR = INT( ZTIME/3600. )
-      IF (IHOUR < 0) IHOUR=IHOUR + 24
-      ZDT = ZTIME/3600. - REAL(IHOUR)
-      XDIRFLASWD(:,:,:) =(( ZRG_HOUR(IHOUR+1)-ZRG_HOUR(IHOUR) )*ZDT + ZRG_HOUR(IHOUR)) / REAL(NSWB_MNH)
-      XFLALWD   (:,:)   = (ZRAT_HOUR(IHOUR+1)-ZRAT_HOUR(IHOUR))*ZDT + ZRAT_HOUR(IHOUR)
-      DO JSWB=1,NSWB_MNH
-        WHERE(ZCOSZEN(:,:)<0.) XDIRFLASWD(:,:,JSWB) = 0.
-      END DO
-
-      XSCAFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.2
-      XDIRFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.8
-      XDTHRAD(:,:,:) = 0.
-      !
-!
-!*        1.3.2 ECMWF or ECRAD radiative surface and atmospheric fluxes
-!               ----------------------------------------------
-!
-    CASE('ECMW' , 'ECRA')
-      IF (LLES_MEAN) OCLOUD_ONLY=.FALSE.
-      XRADEFF(:,:,:)=0.0
-      XSWU(:,:,:)=0.0
-      XSWD(:,:,:)=0.0
-      XLWU(:,:,:)=0.0
-      XLWD(:,:,:)=0.0
-      XDTHRADSW(:,:,:)=0.0
-      XDTHRADLW(:,:,:)=0.0
-      CALL RADIATIONS( TPFILE,                                                                   &
-                       LCLEAR_SKY, OCLOUD_ONLY, NCLEARCOL_TM1, CEFRADL, CEFRADI, COPWSW, COPISW, &
-                       COPWLW, COPILW, XFUDG,                                                    &
-                       NDLON, NFLEV, NRAD_DIAG, NFLUX, NRAD, NAER, NSWB_OLD, NSWB_MNH, NLWB_MNH, &
-                       NSTATM, NRAD_COLNBR, ZCOSZEN, XSEA, XCORSOL,                              &
-                       XDIR_ALB, XSCA_ALB, XEMIS, MAX(XCLDFR,XICEFR), XCCO2, XTSRAD, XSTATM, XTHT, XRT,      &
-                       XPABST, XOZON, XAER,XDST_WL, XAER_CLIM, XSVT,                             &
-                       XDTHRAD, XFLALWD, XDIRFLASWD, XSCAFLASWD, XRHODREF, XZZ ,                 &
-                       XRADEFF, XSWU, XSWD, XLWU, XLWD, XDTHRADSW, XDTHRADLW                     )
-!
-
-      WRITE(UNIT=ILUOUT,FMT='("  RADIATIONS called for KTCOUNT=",I6,       &
-         &  "with the CLOUD_ONLY option set ",L2)')   KTCOUNT,OCLOUD_ONLY
-!
-      !
-      WHERE (XDIRFLASWD.LT.0.0)
-         XDIRFLASWD=0.0
-      ENDWHERE
-      !
-      WHERE (XDIRFLASWD.GT.1500.0)
-         XDIRFLASWD=1500.0
-      ENDWHERE
-      !
-      WHERE (XSCAFLASWD.LT.0.0) 
-         XSCAFLASWD=0.0
-      ENDWHERE
-      !
-      WHERE (XSCAFLASWD.GT.1500.0) 
-         XSCAFLASWD=1500.0
-      ENDWHERE
-      !
-      WHERE( XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) >0. )
-        XALBUV(:,:) = (  XDIR_ALB(:,:,1) * XDIRFLASWD(:,:,1)   &
-                       + XSCA_ALB(:,:,1) * XSCAFLASWD(:,:,1) ) &
-                    / (XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) )
-      ELSEWHERE
-        XALBUV(:,:) = XDIR_ALB(:,:,1)
-      END WHERE
-!
-  END SELECT
-!
-  CALL SECOND_MNH2(ZTIME2)
-!
-  PRAD = PRAD + ZTIME2 - ZTIME1
-!
-  ZTIME1 = ZTIME2
-!
-  CALL SURF_RAD_MODIF (XMAP, XXHAT, XYHAT,                 &
-                  ZCOSZEN, ZSINZEN, ZAZIMSOL, XZS, XZS_XY, &
-                  XDIRFLASWD, XDIRSRFSWD                   )
-!
-!* Azimuthal angle to be sent later to surface processes
-!  Defined in radian, clockwise, from North
-!
-  XAZIM = ZAZIMSOL
-!
-  CALL SECOND_MNH2(ZTIME2)
-!
-  PSHADOWS = PSHADOWS + ZTIME2 - ZTIME1
-!
-  ZTIME1 = ZTIME2
-!
-  DEALLOCATE(ZCOSZEN)
-  DEALLOCATE(ZSINZEN)
-  DEALLOCATE(ZAZIMSOL)
-!
-END IF
-!
-!
-!*        1.4   control prints
-!               --------------
-!
-!*        1.5   Radiative tendency integration
-!               ------------------------------
-!
-IF (CRAD /='NONE') THEN
-  if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'RAD', xrths(:, :, :) )
-  XRTHS(:,:,:) = XRTHS(:,:,:) + XRHODJ(:,:,:)*XDTHRAD(:,:,:)
-  if ( TBUCONF%LBUDGET_th ) call Budget_store_end ( TBUDGETS(NBUDGET_TH), 'RAD', xrths(:, :, :) )
-END IF
-!
-!
-!*        1.6   Ocean case:
-! Sfc turbulent fluxes & Radiative tendency due to SW penetrating ocean
-! 
-IF (LCOUPLES) THEN
-ZSFU(:,:)= XSSUFL_C(:,:,1)
-ZSFV(:,:)= XSSVFL_C(:,:,1)
-ZSFTH(:,:)= XSSTFL_C(:,:,1)
-ZSFRV(:,:)=XSSRFL_C(:,:,1)
-ELSE 
-IF (LOCEAN) THEN
-!
-  ALLOCATE( ZIZOCE(IKU)); ZIZOCE(:)=0. 
-  ALLOCATE( ZPROSOL1(IKU))
-  ALLOCATE( ZPROSOL2(IKU))
-  ALLOCATE(XSSOLA(IIU,IJU))
-  ! Time interpolation
-  JSW     = INT(TDTCUR%xtime/REAL(NINFRT))
-  ZSWA    = TDTCUR%xtime/REAL(NINFRT)-REAL(JSW)
-  ZSFRV = 0.
-  ZSFTH  = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) 
-  ZSFU = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA)
-  ZSFV = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA)
-!
-  ZIZOCE(IKU)   = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA
-  ZPROSOL1(IKU) = CST%XROC*ZIZOCE(IKU)
-  ZPROSOL2(IKU) = (1.-CST%XROC)*ZIZOCE(IKU)
-  IF(NVERB >= 5 ) THEN   
-!    WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,&
-!       TDTCUR%xtime, XTSTEP, ZSFTH(2,2), ZSFU(2,2),ZSFV(2,2),ZIZOCE(IKU)
-   WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', &
-      XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2)
-  END IF
-  if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) 
-  DO JKM=IKU-1,2,-1
-    ZPROSOL1(JKM) = ZPROSOL1(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD1)
-    ZPROSOL2(JKM) = ZPROSOL2(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD2)
-    ZIZOCE(JKM)   = (ZPROSOL1(JKM+1)-ZPROSOL1(JKM) + ZPROSOL2(JKM+1)-ZPROSOL2(JKM))/XDZZ(2,2,JKM)
-    ! Adding to temperature tendency, the solar radiation penetrating in ocean
-    XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM)
-  END DO
-  if ( TBUCONF%LBUDGET_th ) call Budget_store_end ( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) )
-  DEALLOCATE (XSSOLA)
-  DEALLOCATE( ZIZOCE) 
-  DEALLOCATE (ZPROSOL1)
-  DEALLOCATE (ZPROSOL2)
-END IF! LOCEAN NO LCOUPLES
-END IF!NO LCOUPLES
-!
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PRAD = PRAD + ZTIME2 - ZTIME1 &
-     - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
-!
-PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
-!
-!
-!-----------------------------------------------------------------------------
-!
-!*        2.    DEEP CONVECTION SCHEME
-!               ----------------------
-!
-ZTIME1 = ZTIME2
-XTIME_BU_PROCESS = 0.
-XTIME_LES_BU_PROCESS = 0.
-!
-CALL SECOND_MNH2(ZTIME1)
-!
-IF( CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
-
-  if (  TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'DCONV', xrths(:, :, :)    )
-  if (  TBUCONF%LBUDGET_rv ) call Budget_store_init( TBUDGETS(NBUDGET_RV), 'DCONV', xrrs (:, :, :, 1) )
-  if (  TBUCONF%LBUDGET_rc ) call Budget_store_init( TBUDGETS(NBUDGET_RC), 'DCONV', xrrs (:, :, :, 2) )
-  if (  TBUCONF%LBUDGET_ri ) call Budget_store_init( TBUDGETS(NBUDGET_RI), 'DCONV', xrrs (:, :, :, 4) )
-  if (  TBUCONF%LBUDGET_sv .and. lchtrans ) then
-    do jsv = 1, size( xrsvs, 4 )
-      call Budget_store_init( TBUDGETS(NBUDGET_SV1 - 1 + jsv), 'DCONV', xrsvs (:, :, :, jsv) )
-    end do
-  end if
-!
-! test to see if the deep convection scheme should be called
-!
-  GDCONV = .FALSE.
-!
-  CALL DATETIME_DISTANCE(TDTDCONV,TDTCUR,ZTEMP_DIST)
-  IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN
-    TDTDCONV = TDTCUR
-    GDCONV   = .TRUE.
-  END IF
-!
-  IF( GDCONV ) THEN
-    IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
-        ALLOCATE( ZRC(IIU,IJU,IKU) )
-        ALLOCATE( ZRI(IIU,IJU,IKU) )
-        ALLOCATE( ZWT(IIU,IJU,IKU) )
-        ALLOCATE( ZDXDY(IIU,IJU) )
-        ! Compute grid area
-        ZDXDY(:,:) = SPREAD(XDXHAT(1:IIU),2,IJU) * SPREAD(XDYHAT(1:IJU),1,IIU)
-        !
-        IF( LUSERC .AND. LUSERI ) THEN
-          ZRC(:,:,:) = XRT(:,:,:,2)
-          ZRI(:,:,:) = XRT(:,:,:,4)
-        ELSE IF( LUSERC .AND. (.NOT. LUSERI) ) THEN
-          ZRC(:,:,:) = XRT(:,:,:,2)
-          ZRI(:,:,:) = 0.0
-        ELSE
-          ZRC(:,:,:) = 0.0
-          ZRI(:,:,:) = 0.0
-        END IF
-        WRITE(UNIT=ILUOUT,FMT='("  CONVECTION called for KTCOUNT=",I6)')  &
-                                              KTCOUNT
-        IF ( LFORCING .AND. L1D ) THEN
-          ZWT(:,:,:) = XWTFRC(:,:,:)
-        ELSE
-          ZWT(:,:,:) = XWT(:,:,:)
-        ENDIF
-        IF (LDUST) CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF(:,:,:))
-        IF (LSALT) CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF(:,:,:))
-        IF (LCH_CONV_LINOX) THEN
-          CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, &
-                         LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM,           &
-                         XPABST, XZZ, ZDXDY,                                   &
-                         XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT,               &
-                         ZWT,XTKET(:,:,IKB),                                   &
-                         NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV,   &
-                         XPRCONV, XPRSCONV,                                    &
-                         XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,    &
-                         XCAPE, NCLTOPCONV, NCLBASCONV,                        &
-                         LCHTRANS, XSVT, XDSVCONV,                             &
-                         LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX,              &
-                         LDUST, LSALT,                                         &
-                         XRHODREF, XIC_RATE, XCG_RATE                          )
-        ELSE
-          CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, &
-                         LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM,           &
-                         XPABST, XZZ, ZDXDY,                                   &
-                         XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT,               &
-                         ZWT,XTKET(:,:,IKB),                                   &
-                         NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV,   &
-                         XPRCONV, XPRSCONV,                                    &
-                         XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,    &
-                         XCAPE, NCLTOPCONV, NCLBASCONV,                        &
-                         LCHTRANS, XSVT, XDSVCONV,                             &
-                         LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX,              &
-                         LDUST, LSALT,                                         &
-                         XRHODREF )
-        END IF
-!
-        DEALLOCATE( ZRC )
-        DEALLOCATE( ZRI )
-        DEALLOCATE( ZWT )
-        DEALLOCATE( ZDXDY )
-    END IF    
-  END IF
-!
-!  Deep convection tendency integration
-!
-  XRTHS(:,:,:)  = XRTHS(:,:,:)  + XRHODJ(:,:,:) * XDTHCONV(:,:,:)
-  XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * XDRVCONV(:,:,:)
-!
-!
-! Aerosols size distribution
-! Compute Rg and sigma before tracers convection tendency (for orilam, dust and sea
-! salt)
-!
-
-  IF ( LCHTRANS ) THEN  ! update tracers for chemical transport
-    IF (LORILAM) ZRSVS(:,:,:,:) = XRSVS(:,:,:,:)    !
-    IF ((LDUST)) THEN ! dust convective balance
-      ALLOCATE(ZSIGDST(IIU,IJU,IKU,NMODE_DST))
-      ALLOCATE(ZRGDST(IIU,IJU,IKU,NMODE_DST))
-      ALLOCATE(ZNDST(IIU,IJU,IKU,NMODE_DST))
-      ALLOCATE(ZSVDST(IIU,IJU,IKU,NSV_DST))
-      !
-      DO JSV=1,NMODE_DST
-        IMODEIDX = JPDUSTORDER(JSV)
-        IF (CRGUNITD=="MASS") THEN
-          ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX) * EXP(-3.*(LOG(XINISIG(IMODEIDX)))**2)
-        ELSE
-          ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX)
-        END IF
-        ZSIGDST(:,:,:,JSV) = XINISIG(IMODEIDX)
-        ZRGDST(:,:,:,JSV)  = ZINIRADIUS(JSV)
-        ZNDST(:,:,:,JSV)   = XN0MIN(IMODEIDX)
-      ENDDO
-      !
-      DO JSV=NSV_DSTBEG,NSV_DSTEND
-        ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
-      ENDDO
-      CALL PPP2DUST(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),&
-              PSIG3D=ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
-              PN3D=ZNDST(IIB:IIE,IJB:IJE,IKB:IKE,:))
-    END IF
-    !
-    IF ((LSALT)) THEN ! sea salt convective balance
-      ALLOCATE(ZSIGSLT(IIU,IJU,IKU,NMODE_SLT))
-      ALLOCATE(ZRGSLT(IIU,IJU,IKU,NMODE_SLT))
-      ALLOCATE(ZNSLT(IIU,IJU,IKU,NMODE_SLT))
-      ALLOCATE(ZSVSLT(IIU,IJU,IKU,NSV_SLT))
-      !
-      DO JSV=1,NMODE_SLT
-        IMODEIDX = JPSALTORDER(JSV)
-        IF (CRGUNITS=="MASS") THEN
-          ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX) * &
-                            EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
-        ELSE
-          ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX)
-        END IF
-        ZSIGSLT(:,:,:,JSV) = XINISIG_SLT(IMODEIDX)
-        ZRGSLT(:,:,:,JSV)  = ZINIRADIUS_SLT(JSV)
-        ZNSLT(:,:,:,JSV)   = XN0MIN_SLT(IMODEIDX)
-      ENDDO
-      !
-      DO JSV=NSV_SLTBEG,NSV_SLTEND
-        ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
-      ENDDO
-      CALL PPP2SALT(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),&
-              PSIG3D=ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
-              PN3D=ZNSLT(IIB:IIE,IJB:IJE,IKB:IKE,:))
-    END IF
-    !
-!
-! Compute convective tendency for all tracers
-!
-  IF (LCHTRANS) THEN
-    DO JSV = 1, SIZE(XRSVS,4)
-      XRSVS(:,:,:,JSV) = XRSVS(:,:,:,JSV) + XRHODJ(:,:,:) * XDSVCONV(:,:,:,JSV)
-    END DO
-    IF (LORILAM) THEN
-      DO JSV = NSV_AERBEG,NSV_AEREND
-        PWETDEPAER(:,:,:,JSV-NSV_AERBEG+1) = XDSVCONV(:,:,:,JSV) * XRHODJ(:,:,:)
-        XRSVS(:,:,:,JSV) = ZRSVS(:,:,:,JSV) 
-      END DO
-    END IF  
-  END IF
-!
-  IF ((LDUST).AND.(LCHTRANS)) THEN ! dust convective balance
-    IF (CPROGRAM == "MESONH") THEN
-      DO JSV=NSV_DSTBEG,NSV_DSTEND
-          ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
-      ENDDO
-    ELSE
-      DO JSV=NSV_DSTBEG,NSV_DSTEND
-        ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XSVT(:,:,:,JSV)
-      ENDDO
-    ENDIF
-    CALL DUST2PPP(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), &
-                    XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),&
-                    ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:))
-    DO JSV=NSV_DSTBEG,NSV_DSTEND
-      XRSVS(:,:,:,JSV) =  ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) * XRHODJ(:,:,:) / XTSTEP
-    ENDDO
-    !
-    DEALLOCATE(ZSVDST)
-    DEALLOCATE(ZNDST)
-    DEALLOCATE(ZRGDST)
-    DEALLOCATE(ZSIGDST)
-  END IF
-    !
-  IF ((LSALT).AND.(LCHTRANS)) THEN ! sea salt convective balance
-    IF (CPROGRAM == "MESONH") THEN
-      DO JSV=NSV_SLTBEG,NSV_SLTEND
-        ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) 
-      ENDDO
-    ELSE
-      DO JSV=NSV_SLTBEG,NSV_SLTEND
-        ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XSVT(:,:,:,JSV)
-      ENDDO
-    END IF
-    CALL SALT2PPP(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), &
-                  XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),&
-                  ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:))
-    DO JSV=NSV_SLTBEG,NSV_SLTEND
-      XRSVS(:,:,:,JSV) =  ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) * XRHODJ(:,:,:) / XTSTEP
-    ENDDO
-    !
-    DEALLOCATE(ZSVSLT)
-    DEALLOCATE(ZNSLT)
-    DEALLOCATE(ZRGSLT)
-    DEALLOCATE(ZSIGSLT)
-  END IF
-  !
-END IF
-!
-  IF( LUSERC .AND. LUSERI ) THEN
-    XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * XDRCCONV(:,:,:)
-    XRRS(:,:,:,4) = XRRS(:,:,:,4) + XRHODJ(:,:,:) * XDRICONV(:,:,:)
-!
-  ELSE IF ( LUSERC .AND. (.NOT. LUSERI) ) THEN
-!
-!  If only cloud water but no cloud ice is used, the convective tendency
-!     for cloud ice is added to the tendency for cloud water
-!
-      XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
-                                                       XDRICONV(:,:,:)   )
-!     and cloud ice is melted
-!
-      XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) *                      &
-         ( XP00/XPABST(:,:,:) )**(XRD/XCPD) * CST%XLMTT / XCPD * XDRICONV(:,:,:)
-!
-  ELSE IF ( (.NOT. LUSERC) .AND. (.NOT. LUSERI) ) THEN
-!
-!  If no cloud water and no cloud ice are used the convective tendencies for these
-!     variables are added to the water vapor tendency
-!
-      XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
-                                                       XDRICONV(:,:,:)   )
-!     and all cloud condensate is evaporated
-!
-      XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) / XCPD * (              &
-                     CST%XLVTT * XDRCCONV(:,:,:) + CST%XLSTT * XDRICONV(:,:,:) ) *&
-                    ( XP00 / XPABST(:,:,:) ) ** ( XRD / XCPD )
-  END IF
-
-  if (  TBUCONF%LBUDGET_th ) call Budget_store_end( TBUDGETS(NBUDGET_TH), 'DCONV', xrths(:, :, :)    )
-  if (  TBUCONF%LBUDGET_rv ) call Budget_store_end( TBUDGETS(NBUDGET_RV), 'DCONV', xrrs (:, :, :, 1) )
-  if (  TBUCONF%LBUDGET_rc ) call Budget_store_end( TBUDGETS(NBUDGET_RC), 'DCONV', xrrs (:, :, :, 2) )
-  if (  TBUCONF%LBUDGET_ri ) call Budget_store_end( TBUDGETS(NBUDGET_RI), 'DCONV', xrrs (:, :, :, 4) )
-  if (  TBUCONF%LBUDGET_sv .and. lchtrans ) then
-    do jsv = 1, size( xrsvs, 4 )
-      call Budget_store_end( TBUDGETS(NBUDGET_SV1 - 1 + jsv), 'DCONV', xrsvs (:, :, :, jsv) )
-    end do
-  end if
-END IF
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PKAFR = PKAFR + ZTIME2 - ZTIME1 &
-       - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
-!
-PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
-!
-!-----------------------------------------------------------------------------
-!
-!*        3.    TURBULENT SURFACE FLUXES
-!               ------------------------
-!
-ZTIME1 = ZTIME2
-!
-IF (CSURF=='EXTE') THEN
-  CALL GOTO_SURFEX(IMI)
-!
-  IF( LTRANS ) THEN
-    XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS
-    XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) + XVTRANS
-  END IF
-  !
-  ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH))
-  ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
-  ALLOCATE(ZEMIS  (IIU,IJU,NLWB_MNH))
-  ALLOCATE(ZTSRAD (IIU,IJU))
-  !  
-  IKIDM=0
-  DO JKID = IMI+1,NMODEL  ! min value of the possible kids
-    IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. &
-     CPROGRAM=='MESONH' .AND. &
-     (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
-    !  where kids exist, use the two-way output fields (i.e. OMASKkids true)
-    !  rather than the farther calculations in radiation and convection schemes
-! BUG if number of the son does not follow the number of the dad
-!    IKIDM = JKID-IMI
-      IKIDM = IKIDM + 1
-     IF (LUSERC .AND. (                                               &
-         (LSEDIC .AND. CCLOUD(1:3) == 'ICE')                     .OR. &
-         (LSEDC  .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. &
-         (MSEDC  .AND. CCLOUD=='LIMA')                                &
-        )) THEN
-         WHERE (OMASKkids(:,:) )
-            XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM)
-          ENDWHERE
-      END IF
-      IF (LUSERR) THEN
-        WHERE (OMASKkids(:,:) )
-          XINPRR(:,:) = ZSAVE_INPRR(:,:,IKIDM)
-        ENDWHERE
-      END IF
-      IF (LUSERS) THEN
-        WHERE (OMASKkids(:,:) )
-          XINPRS(:,:) = ZSAVE_INPRS(:,:,IKIDM)
-       ENDWHERE
-      END IF
-      IF (LUSERG) THEN
-        WHERE (OMASKkids(:,:) )
-          XINPRG(:,:) = ZSAVE_INPRG(:,:,IKIDM)
-        ENDWHERE
-      END IF
-      IF (LUSERH) THEN
-        WHERE (OMASKkids(:,:) )
-          XINPRH(:,:) = ZSAVE_INPRH(:,:,IKIDM)
-        ENDWHERE
-      END IF
-      IF (CDCONV /= 'NONE') THEN
-        WHERE (OMASKkids(:,:) )
-          XPRCONV(:,:) = ZSAVE_PRCONV(:,:,IKIDM)
-          XPRSCONV(:,:) = ZSAVE_PRSCONV(:,:,IKIDM)
-        ENDWHERE
-      END IF
-      IF (CRAD /= 'NONE') THEN
-        DO JSWB=1,NSWB_MNH
-          WHERE (OMASKkids(:,:) ) 
-            XDIRFLASWD(:,:,JSWB) = ZSAVE_DIRFLASWD(:,:,JSWB,IKIDM)
-            XSCAFLASWD(:,:,JSWB) = ZSAVE_SCAFLASWD(:,:,JSWB,IKIDM)
-            XDIRSRFSWD(:,:,JSWB) = ZSAVE_DIRSRFSWD(:,:,JSWB,IKIDM)
-          ENDWHERE
-        ENDDO
-      END IF
-    ENDIF
-  END DO
-  !
- IF (IMODSON /= 0 ) THEN
-    DEALLOCATE( ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH)
-    DEALLOCATE( ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV)
-    DEALLOCATE( ZSAVE_DIRFLASWD,ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD)
- END IF
-  CALL GROUND_PARAM_n(YLDIMPHYEX,ZSFTH, ZSFRV, ZSFSV, ZSFCO2, ZSFU, ZSFV, &
-                      ZDIR_ALB, ZSCA_ALB, ZEMIS, ZTSRAD, KTCOUNT, TPFILE )
-  !
-  IF (LIBM) THEN
-    WHERE(XIBM_LS(:,:,IKB,1).GT.-XIBM_EPSI)
-      ZSFTH(:,:)=0.
-      ZSFRV(:,:)=0. 
-      ZSFU (:,:)=0. 
-      ZSFV (:,:)=0.
-    ENDWHERE
-    IF (NSV>0) THEN
-      DO JSV = 1 , NSV
-         WHERE(XIBM_LS(:,:,IKB,1).GT.-XIBM_EPSI) ZSFSV(:,:,JSV)=0.
-      ENDDO
-    ENDIF 
-  ENDIF
-  !
-  IF (SIZE(XEMIS)>0) THEN
-    XDIR_ALB = ZDIR_ALB
-    XSCA_ALB = ZSCA_ALB
-    XEMIS    = ZEMIS
-    XTSRAD   = ZTSRAD
-  END IF
-  !
-  DEALLOCATE(ZDIR_ALB)
-  DEALLOCATE(ZSCA_ALB)
-  DEALLOCATE(ZEMIS   )
-  DEALLOCATE(ZTSRAD  )
-  !
-  !
-  IF( LTRANS ) THEN
-    XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) - XUTRANS
-    XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS
-  END IF
-!
-ELSE ! case no SURFEX (CSURF logical)
-  ZSFSV    = 0.
-  ZSFCO2   = 0.
-  IF (.NOT.LOCEAN) THEN
-    ZSFTH    = 0.
-    ZSFRV    = 0.
-    ZSFSV    = 0.
-    ZSFCO2   = 0.
-    ZSFU     = 0.
-    ZSFV     = 0.
-  END IF
-END IF !CSURF
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PGROUND = PGROUND + ZTIME2 - ZTIME1
-!
-!-----------------------------------------------------------------------------
-!
-!*        3.1    EDDY FLUXES PARAMETRIZATION
-!               ------------------
-!
-IF (IMI==1) THEN  ! On calcule les flus turb. comme preconise par PP
-
-   ! Heat eddy fluxes
-   IF ( LTH_FLX ) CALL EDDY_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRTHS,XVTH_FLUX_M,XWTH_FLUX_M)
-   !
-   ! Momentum eddy fluxes
-   IF ( LUV_FLX ) CALL EDDYUV_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRHODREF,XPABSM,XRVS,XVU_FLUX_M)
-
-ELSE
-   ! TEST pour maille infèrieure à 20km ? 
-   !      car pb d'instabilités ?
-   !      Pour le modèle fils, on spawne les flux du modèle père
-   ! Heat eddy fluxes
-   IF ( LTH_FLX ) CALL EDDY_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
-   !
-   ! Momentum eddy fluxes
-   IF ( LUV_FLX ) CALL EDDYUV_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
-   !
-END IF
-!-----------------------------------------------------------------------------
-!
-!*        4.    PASSIVE POLLUTANTS
-!               ------------------
-!
-ZTIME1 = ZTIME2
-!
-IF (LPASPOL) CALL PASPOL(XTSTEP, ZSFSV, ILUOUT, NVERB, TPFILE)
-!
-!
-!*        4b.  PASSIVE POLLUTANTS FOR MASS-FLUX SCHEME DIAGNOSTICS
-!              ---------------------------------------------------
-!
-IF (LCONDSAMP) CALL CONDSAMP(XTSTEP, ZSFSV, ILUOUT, NVERB)
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PTRACER = PTRACER + ZTIME2 - ZTIME1
-!-----------------------------------------------------------------------------
-!
-!*        5a.    Drag force 
-!               ----------
-!
-ZTIME1 = ZTIME2
-XTIME_BU_PROCESS = 0.
-XTIME_LES_BU_PROCESS = 0.
-!
-IF (LDRAGTREE) CALL DRAG_VEG( XTSTEP, XUT, XVT, XTKET, LDEPOTREE, XVDEPOTREE, &
-                              CCLOUD, XPABST, XTHT, XRT, XSVT, XRHODJ, XZZ,   &
-                              XRUS, XRVS, XRTKES, XRRS, XRSVS )
-!
-IF (LDRAGBLDG) CALL DRAG_BLD( XTSTEP, XUT, XVT, XTKET, XRHODJ, XZZ, XRUS, XRVS, XRTKES )
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PDRAG = PDRAG + ZTIME2 - ZTIME1 &
-             - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
-!
-PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
-!
-!*        5b.   Drag force from wind turbines 
-!               -----------------------
-!
-ZTIME1 = ZTIME2
-XTIME_BU_PROCESS = 0.
-XTIME_LES_BU_PROCESS = 0.
-!
-IF (LMAIN_EOL .AND. IMI == NMODEL_EOL) THEN
- CALL EOL_MAIN(KTCOUNT,XTSTEP,     &
-               XDXX,XDYY,XDZZ,     &
-               XRHODJ,             &
-               XUT,XVT,XWT,        &
-               XRUS, XRVS, XRWS    )
-END IF
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PEOL = PEOL + ZTIME2 - ZTIME1 &
-             - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
-!
-PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
-!
-!*        
-!-----------------------------------------------------------------------------
-!
-!*        6.    TURBULENCE SCHEME
-!               -----------------
-!
-ZTIME1 = ZTIME2
-XTIME_BU_PROCESS = 0.
-XTIME_LES_BU_PROCESS = 0.
-!
-ZSFTH(:,:)  = ZSFTH(:,:) * XDIRCOSZW(:,:)
-ZSFRV(:,:)  = ZSFRV(:,:) * XDIRCOSZW(:,:)
-DO JSV=1,NSV
-  ZSFSV(:,:,JSV)  = ZSFSV(:,:,JSV) * XDIRCOSZW(:,:)
-END DO
-!
-IF (LLES_CALL) CALL SWITCH_SBG_LES_n
-!
-!
-IF ( CTURB == 'TKEL' ) THEN
-!
-
-!*        6.1 complete surface flux fields on the border
-!
-!!$  IF(NHALO == 1) THEN
-    CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFTH, 'PHYS_PARAM_n::ZSFTH' )
-    CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFRV, 'PHYS_PARAM_n::ZSFRV' )
-    CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFU,  'PHYS_PARAM_n::ZSFU' )
-    CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFV,  'PHYS_PARAM_n::ZSFV' )
-    IF(NSV >0)THEN
-      DO JSV=1,NSV
-        write ( ynum, '( I6 ) ' ) jsv
-        CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFSV(:,:,JSV), 'PHYS_PARAM_n::ZSFSV:'//trim( adjustl( ynum ) ) )
-      END DO
-    END IF
-    CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFCO2, 'PHYS_PARAM_n::ZSFCO2' )
-    CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-    CALL CLEANLIST_ll(TZFIELDS_ll)
-!!$  END IF
-!
-  CALL MPPDB_CHECK2D(ZSFU,"phys_param::ZSFU",PRECISION)
-  !
-  IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
-    ZSFTH(IIB-1,:)=ZSFTH(IIB,:)
-    ZSFRV(IIB-1,:)=ZSFRV(IIB,:)
-    ZSFU(IIB-1,:)=ZSFU(IIB,:)
-    ZSFV(IIB-1,:)=ZSFV(IIB,:)
-    IF (NSV>0)  THEN
-      ZSFSV(IIB-1,:,:)=ZSFSV(IIB,:,:)
-      WHERE ((ZSFSV(IIB-1,:,:).LT.0.).AND.(XSVT(IIB-1,:,IKB,:).EQ.0.))
-          ZSFSV(IIB-1,:,:) = 0.
-      END WHERE
-    ENDIF
-    ZSFCO2(IIB-1,:)=ZSFCO2(IIB,:)
-  END IF
-  !
-  IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
-    ZSFTH(IIE+1,:)=ZSFTH(IIE,:)
-    ZSFRV(IIE+1,:)=ZSFRV(IIE,:)
-    ZSFU(IIE+1,:)=ZSFU(IIE,:)
-    ZSFV(IIE+1,:)=ZSFV(IIE,:)
-    IF (NSV>0) THEN
-      ZSFSV(IIE+1,:,:)=ZSFSV(IIE,:,:)
-      WHERE ((ZSFSV(IIE+1,:,:).LT.0.).AND.(XSVT(IIE+1,:,IKB,:).EQ.0.))
-          ZSFSV(IIE+1,:,:) = 0.
-      END WHERE
-    ENDIF
-    ZSFCO2(IIE+1,:)=ZSFCO2(IIE,:)
-  END IF
-  !
-  IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
-    ZSFTH(:,IJB-1)=ZSFTH(:,IJB)
-    ZSFRV(:,IJB-1)=ZSFRV(:,IJB)
-    ZSFU(:,IJB-1)=ZSFU(:,IJB)
-    ZSFV(:,IJB-1)=ZSFV(:,IJB)
-    IF (NSV>0) THEN
-      ZSFSV(:,IJB-1,:)=ZSFSV(:,IJB,:)
-      WHERE ((ZSFSV(:,IJB-1,:).LT.0.).AND.(XSVT(:,IJB-1,IKB,:).EQ.0.))
-          ZSFSV(:,IJB-1,:) = 0.
-      END WHERE
-    ENDIF
-    ZSFCO2(:,IJB-1)=ZSFCO2(:,IJB)
-  END IF
-  !
-  IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
-    ZSFTH(:,IJE+1)=ZSFTH(:,IJE)
-    ZSFRV(:,IJE+1)=ZSFRV(:,IJE)
-    ZSFU(:,IJE+1)=ZSFU(:,IJE)
-    ZSFV(:,IJE+1)=ZSFV(:,IJE)
-    IF (NSV>0) THEN
-      ZSFSV(:,IJE+1,:)=ZSFSV(:,IJE,:)
-      WHERE ((ZSFSV(:,IJE+1,:).LT.0.).AND.(XSVT(:,IJE+1,IKB,:).EQ.0.))
-          ZSFSV(:,IJE+1,:) = 0.
-      END WHERE
-    ENDIF
-    ZSFCO2(:,IJE+1)=ZSFCO2(:,IJE)
-  END IF
-!
-  IF( LTRANS ) THEN
-    XUT(:,:,:) = XUT(:,:,:) + XUTRANS
-    XVT(:,:,:) = XVT(:,:,:) + XVTRANS
-  END IF
-!
-!
-IF(ALLOCATED(XTHW_FLUX))  THEN
- DEALLOCATE(XTHW_FLUX)
- ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
-ELSE
- ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
-END IF
-
-IF(ALLOCATED(XRCW_FLUX))  THEN
- DEALLOCATE(XRCW_FLUX)
- ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
-ELSE
- ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
-END IF
-!
-IF(ALLOCATED(XSVW_FLUX))  THEN
- DEALLOCATE(XSVW_FLUX)
- ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
-ELSE
- ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
-END IF
-!
-GCOMPUTE_SRC=SIZE(XSIGS, 3)/=0
-!
-ALLOCATE(ZTDIFF(IIU,IJU,IKU))
-ALLOCATE(ZTDISS(IIU,IJU,IKU))
-!
-!! Compute Shape of sfc flux for Oceanic Deep Conv Case
-!
-IF (LOCEAN .AND. LDEEPOC) THEN
-  ALLOCATE(ZDIST(IIU,IJU))
-  !*       COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS
-  ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT))
-  !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 )
-  !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc
-  !                                     L0_subproc as referenced in the full domain 1
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP)
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP)
-  CALL GET_DIM_EXT_ll('B',IIU,IJU)
-  DO JJ = IJB,IJE
-    DO JI = IIB,IIE
-      ZDIST(JI,JJ) = SQRT(                         &
-      (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + &
-      (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2   &
-                                )
-    END DO
-  END DO
-  DO JJ=IJB,IJE
-    DO JI=IIB,IIE
-      IF ( ZDIST(JI,JJ) > 1.) ZSFTH(JI,JJ)=0.
-    END DO
-  END DO
-END IF !END DEEP OCEAN CONV CASE
-!
-LSTATNW = .FALSE.
-LHARAT = .FALSE.
-!
-IF(LLEONARD) THEN
-  IGRADIENTS=6
-  ALLOCATE(ZHGRAD(IIU,IJU,IKU,IGRADIENTS))
-  ZHGRAD(:,:,:,1) = GX_W_UW(XWT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1)
-  ZHGRAD(:,:,:,2) = GY_W_VW(XWT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1)
-  ZHGRAD(:,:,:,3) = GX_M_M(XTHT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1)
-  ZHGRAD(:,:,:,4) = GY_M_M(XTHT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1)
-  ZHGRAD(:,:,:,5) = GX_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1)
-  ZHGRAD(:,:,:,6) = GY_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1)
-END IF
-   CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,TLES, &
-              IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, IGRADIENTS, NHALO,                 &
-              1, NMODEL_CLOUD,                                                       &
-              NSV, NSV_LGBEG, NSV_LGEND,CPROGRAM,                                    &
-              NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH,                    &
-              L2D, LNOMIXLG,LFLAT,                                                   &
-              LCOUPLES, LBLOWSNOW, LIBM,                                             &
-              GCOMPUTE_SRC, XRSNOW,                                                  &
-              LOCEAN, LDEEPOC, LDIAG_IN_RUN,                                         &
-              CTURBLEN_CLOUD, CCLOUD,                                                &
-              XTSTEP, TPFILE,                                                        &
-              XDXX, XDYY, XDZZ, XDZX, XDZY, XZZ,                                     &
-              XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, XCOSSLOPE, XSINSLOPE,                 &
-              XRHODJ, XTHVREF, ZHGRAD, XZS,                                          &
-              ZSFTH, ZSFRV, ZSFSV, ZSFU, ZSFV,                                       &
-              XPABST, XUT, XVT, XWT, XTKET, XSVT, XSRCT,                             &
-              ZLENGTHM, ZLENGTHH, ZMFMOIST,                                          &
-              XBL_DEPTH, XSBL_DEPTH,                                                 &
-              XCEI, XCEI_MIN, XCEI_MAX, XCOEF_AMPL_SAT,                              &
-              XTHT, XRT,                                                             &
-              XRUS, XRVS, XRWS, XRTHS, XRRS, XRSVS, XRTKES, XSIGS, XWTHVMF,          &
-              XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, ZTDIFF, ZTDISS,            &
-              TBUDGETS, KBUDGETS=SIZE(TBUDGETS),PLEM=XLEM,PRTKEMS=XRTKEMS,           &
-              PTR=XTR, PDISS=XDISS, PCURRENT_TKE_DISS=XCURRENT_TKE_DISS,             &
-              PIBM_LS=XIBM_LS(:,:,:,1), PIBM_XMUT=XIBM_XMUT,                         & 
-              PSSTFL=XSSTFL, PSSTFL_C=XSSTFL_C, PSSRFL_C=XSSRFL_C,                   &
-              PSSUFL_C=XSSUFL_C, PSSVFL_C=XSSVFL_C, PSSUFL=XSSUFL, PSSVFL=XSSVFL     )
-!
-DEALLOCATE(ZTDIFF)
-DEALLOCATE(ZTDISS)
-IF(LLEONARD) DEALLOCATE(ZHGRAD)
-!
-IF (LRMC01) THEN
-  CALL ADD2DFIELD_ll( TZFIELDS_ll, XSBL_DEPTH, 'PHYS_PARAM_n::XSBL_DEPTH' )
-  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-  CALL CLEANLIST_ll(TZFIELDS_ll)
-  IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
-    XSBL_DEPTH(IIB-1,:)=XSBL_DEPTH(IIB,:)
-  END IF
-  IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
-    XSBL_DEPTH(IIE+1,:)=XSBL_DEPTH(IIE,:)
-  END IF
-  IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
-    XSBL_DEPTH(:,IJB-1)=XSBL_DEPTH(:,IJB)
-  END IF
-  IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
-    XSBL_DEPTH(:,IJE+1)=XSBL_DEPTH(:,IJE)
-  END IF
-END IF
-!
-CALL SECOND_MNH2(ZTIME3)
-!
-!-----------------------------------------------------------------------------
-!
-!*        7.    EDMF SCHEME
-!               -----------
-!
-IF (CSCONV == 'EDKF') THEN
-     ALLOCATE(ZEXN (IIU,IJU,IKU))
-     ALLOCATE(ZSIGMF (IIU,IJU,IKU))
-     ZSIGMF(:,:,:)=0.    
-     ZEXN(:,:,:)=(XPABST(:,:,:)/XP00)**(XRD/XCPD)  
-     !$20131113 check3d on ZEXN
-     CALL MPPDB_CHECK3D(ZEXN,"physparan.7::ZEXN",PRECISION)
-     CALL ADD3DFIELD_ll( TZFIELDS_ll, ZEXN, 'PHYS_PARAM_n::ZEXN' )
-     !$20131113 add update_halo_ll
-     CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-     CALL CLEANLIST_ll(TZFIELDS_ll)
-     CALL MPPDB_CHECK3D(ZEXN,"physparam.7::ZEXN",PRECISION)
- !    
-     CALL SHALLOW_MF_PACK(NRR,NRRL,NRRI,                                  &
-                   LMF_FLX,TPFILE,ZTIME_LES_MF,                           &
-                   XIMPL_MF, XTSTEP,                                      &
-                   XDZZ, XZZ,XDXHAT(1),XDYHAT(1),                         &
-                   XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV,          &
-                   XTHT,XRT,XUT,XVT,XTKET,XSVT,                           &
-                   XRTHS,XRRS,XRUS,XRVS,XRSVS,                            &
-                   ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF)
-!
-ELSE
-    XWTHVMF(:,:,:)=0.
-    XRC_MF(:,:,:)=0.
-    XRI_MF(:,:,:)=0.
-    XCF_MF(:,:,:)=0.
-ENDIF   
-!
-CALL SECOND_MNH2(ZTIME4)
-
-  IF( LTRANS ) THEN
-    XUT(:,:,:) = XUT(:,:,:) - XUTRANS
-    XVT(:,:,:) = XVT(:,:,:) - XVTRANS
-  END IF
-  IF (CMF_CLOUD == 'STAT') THEN
-    XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 )
-  ENDIF
-  IF (CSCONV == 'EDKF') THEN
-    DEALLOCATE(ZSIGMF)
-    DEALLOCATE(ZEXN)
-  ENDIF
-END IF
-!
-IF (LLES_CALL) CALL SWITCH_SBG_LES_n
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-PTURB = PTURB + ZTIME2 - ZTIME1 - (XTIME_LES-ZTIME_LES_MF) - XTIME_LES_BU_PROCESS &
-      - XTIME_BU_PROCESS - (ZTIME4 - ZTIME3)
-!
-PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF
-!
-PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
-!
-!
-!-------------------------------------------------------------------------------
-!
-!* deallocation of variables used in more than one parameterization
-!
-DEALLOCATE(ZSFU  )         ! surface schemes + turbulence
-DEALLOCATE(ZSFV  )
-DEALLOCATE(ZSFTH )
-DEALLOCATE(ZSFRV )
-DEALLOCATE(ZSFSV )
-DEALLOCATE(ZSFCO2)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE PHYS_PARAM_n
-
diff --git a/src/mesonh/ext/prep_ideal_case.f90 b/src/mesonh/ext/prep_ideal_case.f90
deleted file mode 100644
index 3a340fe6f0ce0330b6727c223f8c1b89204fad26..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/prep_ideal_case.f90
+++ /dev/null
@@ -1,1950 +0,0 @@
-!MNH_LIC Copyright 1994-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.
-!-----------------------------------------------------------------
-!     #######################
-      PROGRAM PREP_IDEAL_CASE
-!     #######################
-!
-!!****  *PREP_IDEAL_CASE* - program to write an initial FM-file 
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this program is to prepare an initial meso-NH file
-!     (LFIFM and DESFM files) filled with some idealized fields.    
-!
-!      ---- The present version can provide two types of fields:
-!
-!      1) CIDEAL = 'CSTN' : 3D fields derived  from a vertical profile with
-!         ---------------   n levels of constant moist Brunt Vaisala frequency
-!             The vertical profile is read in EXPRE file.                 
-!             These fields can be used for model runs 
-!
-!      2) CIDEAL = 'RSOU' : 3D fields derived from a radiosounding.
-!          --------------- 
-!             The radiosounding is read in EXPRE file. 
-!             The following kind of data  is permitted :
-!                  YKIND = 'STANDARD'  :   Zsol, Psol, Tsol, TDsol
-!                                         (Pressure, dd, ff) , 
-!                                         (Pressure, T, Td)
-!                  YKIND = 'PUVTHVMR'  : zsol, Psol, Thvsol, Rsol
-!                                        (Pressure, U, V) , 
-!                                        (Pressure, THv, R)
-!                  YKIND = 'PUVTHVHU'  :  zsol, Psol, Thvsol, Husol
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THv, Hu)
-!                  YKIND = 'ZUVTHVHU'  :  zsol, Psol, Thvsol, Husol
-!                                         (height, U, V) , 
-!                                         (height, THv, Hu)
-!                  YKIND = 'ZUVTHVMR'  :  zsol, Psol, Thvsol, Rsol
-!                                         (height, U, V) , 
-!                                         (height, THv, R)
-!                  YKIND = 'PUVTHDMR'  : zsol, Psol, Thdsol, Rsol
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THd, R)
-!                  YKIND = 'PUVTHDHU'  : zsol, Psol, Thdsol, Husol
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THd, Hu)
-!                  YKIND = 'ZUVTHDMR'  :  zsol, Psol, Thdsol, Rsol
-!                                         (height, U, V) , 
-!                                         (height, THd, R)
-!                  YKIND = 'ZUVTHLMR'  :  zsol, Psol, Thdsol, Rsol
-!                                         (height, U, V) , 
-!                                         (height, THl, Rt)
-!
-!             These fields can be used for model runs 
-!
-!      Cases (1) and (2) can be balanced
-!      (geostrophic, hydrostatic  and anelastic balances) if desired.
-!
-!      ---- The orography can be flat (YZS='FLAT'), but also 
-!      sine-shaped (YZS='SINE') or  bell-shaped (YZS='BELL')
-!
-!      ---- The U(z)  profile given in the RSOU and CSTN cases can
-!      be multiplied (CUFUN="Y*Z") by a function of y (function FUNUY)  
-!      The V(z) profile  given in the RSOU and CSTN cases can
-!      be multiplied (CVFUN="X*Z") by a function of x (function FUNVX). 
-!      If it is not the case, i.e. U(y,z)=U(z) then CUFUN="ZZZ" and 
-!      CVFUN="ZZZ" for V(y,z)=V(z). Instead of these separable forms,
-!      non-separables functions FUNUYZ (CUFUN="Y,Z")  and FUNVXZ (CVFUN="X,Z") 
-!      can be used to specify the wind components.
-!
-!!**  METHOD
-!!    ------
-!!      The directives and data to perform the preparation of the initial FM
-!!    file are stored in EXPRE file. This file is composed  of two parts : 
-!!          - a namelists-format  part which is present in all cases
-!!          - a free-format  part which contains data in cases 
-!!       of discretised orography (CZS='DATA')
-!!       of radiosounding (CIDEAL='RSOU') or Nv=cste  profile (CIDEAL='CSTN')
-!!       of forced version (LFORCING=.TRUE.)
-!!    
-!!
-!!      The following  PREP_IDEAL_CASE program  :
-!!
-!!             - initializes physical constants by calling INI_CST 
-!!
-!!             - sets default values for global variables which will be 
-!!     written  in DESFM file and for variables in EXPRE file (namelists part)
-!!     which will be written in LFIFM file.    
-!!
-!!             - reads the namelists part of EXPRE file which gives 
-!!     informations about the preinitialization to perform,
-!!
-!!             - allocates memory for arrays, 
-!!
-!!             - initializes fields depending on the 
-!!              directives  (CIDEAL in namelist NAM_CONF_PRE) :
-!!  
-!!                * grid variables : 
-!!                  The gridpoints are regularly spaced by XDELTAX, XDELTAY.
-!!               The grid is stretched along the z direction, the mesh varies 
-!!               from XDZGRD near the ground to XDZTOP near the top and the 
-!!               weigthing function is a TANH function characterized by its 
-!!               center and width above and under this center
-!!                  The orography is initialized following the kind of orography
-!!               (YZS in namelist NAM_CONF_PRE) and the degrees of freedom :
-!!                     sine-shape ---> ZHMAX, IEXPX,IEXPY
-!!                     bell-shape ---> ZHMAX, ZAX,ZAY,IIZS,IJZS
-!!                  The horizontal grid variables are initialized following
-!!                the kind of geometry (LCARTESIAN in namelist NAM_CONF_PRE) 
-!!                and the grid parameters XLAT0,XLON0,XBETA in both geometries
-!!                and XRPK,XLONORI,XLATORI  in conformal projection.
-!!                  In the  case of initialization from a radiosounding, the
-!!                date and time is read in free-part of the EXPRE file. In other
-!!                cases year, month and day are set to NUNDEF and time to 0.
-!!
-!!               * prognostic fields : 
-!!
-!!                     U,V,W, Theta and r. are first determined. They are
-!!                multiplied by rhoj after the anelastic reference state 
-!!                computation.
-!!                     For the CSTN and RSOU cases, the determination of 
-!!                Theta and rv is performed  respectively by SET_RSOU
-!!                and by SET_CSTN which call the common routine SET_MASS. 
-!!                These three routines have  the following actions :
-!!          ---   The input vertical profile   is converted in 
-!!                variables (U,V,thetav,r) and  interpolated
-!!                on a mixed grid (with VERT_COORD) as in PREP_REAL_CASE 
-!!          ---   A variation of the u-wind component( x-model axis component) 
-!!                 is possible in y direction, a variation of the v-wind component 
-!!                (y-model axis component) is possible in x direction.
-!!          ---   Thetav could be computed with thermal wind balance
-!!                (LGEOSBAL=.TRUE. with call of SET_GEOSBAL)                 
-!!          ---   The mass fields (theta and r ) and the wind components are 
-!!                then interpolated on the model grid with orography  as in
-!!                PREP_REAL_CASE with the option LSHIFT                
-!!          ---   An  anelastic correction is  applied in PRESSURE_IN_PREP in
-!!                the case of non-vanishing orography.    
-!!            
-!!               * anelastic reference state variables :
-!!
-!!                   1D reference state : 
-!!                     RSOU and CSTN cases : rhorefz and thvrefz are computed 
-!!                         by   SET_REFZ (called by SET_MASS).
-!!                         They are deduced from thetav and r on the model grid
-!!                         without orography.
-!!                   The 3D reference state is  computed by SET_REF   
-!!            
-!!               * The total mass of dry air is computed by TOTAL_DMASS              
-!!
-!!             - writes the DESFM file, 
-!!
-!!             - writes the LFIFM file . 
-!!
-!!    EXTERNAL
-!!    --------
-!!      DEFAULT_DESFM : to set default values for variables which can be 
-!!                      contained in DESFM file
-!!      DEFAULT_EXPRE : to  set default values for other global variables 
-!!                      which can be contained in namelist-part of EXPRE file
-!!      Module MODE_GRIDPROJ : contains conformal projection routines
-!!           SM_GRIDPROJ   : to compute some grid variables, in
-!!                           case of conformal projection.
-!!      Module MODE_GRIDCART : contains cartesian geometry routines
-!!           SM_GRIDCART   : to compute some grid variables, in
-!!                           case of cartesian geometry.
-!!      SET_RSOU      : to initialize mass fields from a radiosounding
-!!      SET_CSTN      : to initialize mass fields from a vertical profile of 
-!!                      n layers of Nv=cste 
-!!      SET_REF       : to compute  rhoJ 
-!!      RESSURE_IN_PREP : to apply an anelastic correction in the case of
-!!                        non-vanishing orography 
-!!      IO_File_open : to open a FM-file (DESFM + LFIFM)
-!!      WRITE_DESFM   : to write the  DESFM file
-!!      WRI_LFIFM     : to write the   LFIFM file  
-!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
-!!
-!!      MXM,MYM,MZM   : Shuman operators
-!!      WGUESS        : to compute W with the continuity equation from 
-!!                      the U,V values 
-!!
-!!
-!!      
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_PARAMETERS : contains parameters
-!!      Module MODD_DIM1      : contains dimensions 
-!!      Module MODD_CONF       : contains  configuration variables for 
-!!                                all models
-!!      Module MODD_CST        : contains physical constants
-!!      Module MODD_GRID       : contains grid variables  for all models
-!!      Module MODD_GRID1     : contains grid variables
-!!      Module MODD_TIME      : contains time variables for all models  
-!!      Module MODD_TIME1     : contains time variables  
-!!      Module MODD_REF        : contains reference state variables for
-!!                               all models
-!!      Module MODD_REF1      : contains reference state variables 
-!!      Module MODD_LUNIT      : contains variables which concern names
-!!                            and logical unit numbers of files  for all models
-!!      Module MODD_FIELD1    : contains prognostics  variables
-!!      Module MODD_GR_FIELD1 : contains the surface prognostic variables 
-!!      Module MODD_LSFIELD1    : contains Larger Scale fields
-!!      Module MODD_DYN1        : contains dynamic control variables for model 1
-!!      Module MODD_LBC1        : contains lbc control variables for model 1
-!!
-!!
-!!      Module MODN_CONF1    : contains  configuration variables for model 1
-!!                               and the NAMELIST list
-!!      Module MODN_LUNIT1    : contains variables which concern names
-!!                               and logical unit numbers of files and 
-!!                               the NAMELIST list
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book2 of MESO-NH documentation (program PREP_IDEAL_CASE)
-!!    
-!!    AUTHOR
-!!    ------
-!!	V. Ducrocq   *Meteo France*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original                            05/05/94
-!!      updated                V. Ducrocq   27/06/94   
-!!      updated                P.M.         27/07/94
-!!      updated                V. Ducrocq   23/08/94 
-!!      updated                V. Ducrocq   01/09/94 
-!!      namelist changes       J. Stein     26/10/94 
-!!      namelist changes       J. Stein     04/11/94 
-!!      remove the second step of the geostrophic balance 14/11/94 (J.Stein)
-!!      add grid stretching in the z direction + Larger scale fields +
-!!      cleaning                                           6/12/94 (J.Stein) 
-!!      periodize the orography and the grid sizes in the periodic case
-!!                                                        19/12/94 (J.Stein) 
-!!      correct a bug in the Larger Scale Fields initialization
-!!                                                        19/12/94 (J.Stein) 
-!!      add the vertical grid stretching                  02/01/95 (J. Stein)
-!!      Total mass of dry air computation                 02/01/95 (J.P.Lafore) 
-!!      add the 1D switch                                 13/01/95 (J. Stein)
-!!      enforce a regular vertical grid if desired        18/01/95 (J. Stein)
-!!      add the tdtcur initialization                     26/01/95 (J. Stein)
-!!      bug in the test of the type of RS localization    25/02/95 (J. Stein)
-!!      remove R from the historical variables            16/03/95 (J. Stein)
-!!      error on the grid stretching                      30/06/95 (J. Stein)
-!!      add the soil fields                               01/09/95 (S.Belair)
-!!      change the streching function  and the wind guess
-!!        (J. Stein and V.Masson)                         21/09/95 
-!!      reset to FALSE LUSERC,..,LUSERH                   12/12/95 (J. Stein)
-!!      enforce the RS localization in 1D and 2D config.
-!!      + add the 'TSZ0' option for the soil variables    28/01/96 (J. Stein)
-!!      initialization of domain from center point        31/01/96 (V. Masson)
-!!      add the constant file reading                     05/02/96 (J. Stein)
-!!      enter vertical model levels values                20/10/95 (T.Montmerle)
-!!      add LFORCING option                               19/02/96 (K. Suhre)
-!!      modify structure of NAM_CONF_PRE                  20/02/96 (J.-P. Pinty)
-!!      default of the domain center when use of pgd file 12/03/96 (V. Masson)
-!!      change the surface initialization                 20/03/96 ( Stein,
-!!                                                    Bougeault, Kastendeutsch )
-!!      change the DEFAULT_DESFMN CALL                    17/04/96 ( Lafore )
-!!      set the STORAGE_TYPE to 'TT' (a single instant)   30/04/96 (Stein, 
-!!                                                    Jabouille)
-!!      new wguess to spread  the divergence              15/05/96 (Stein)
-!!      set LTHINSHELL to TRUE + return to the old wguess 29/08/96 (Stein)
-!!      MY_NAME and DAD_NAME writing for nesting          30/07/96 (Lafore)
-!!      MY_NAME and DAD_NAME reading in pgd file          26/09/96 (Masson)
-!!       and reading of pgd grid in a new routine
-!!      XXHAT and XYHAT are set to 0. at origine point    02/10/96 (Masson)
-!!      add LTHINSHELL in namelist NAM_CONF_PRE           08/10/96 (Masson)
-!!      restores use of TS and T2                         26/11/96 (Masson)
-!!      value  XUNDEF for soil and vegetation fields on sea 27/11/96 (Masson)
-!!      use of HUG and HU2 in both ISBA and TSZ0 cases    04/12/96 (Masson)
-!!      add initialization of chemical variables          06/08/96 (K. Suhre)
-!!      add MANUAL option for the terrain elevation       12/12/96 (J.-P. Pinty)
-!!      set DATA instead of MANUAL for the terrain
-!!      elevation option
-!!      add new anelastic equations' systems              29/06/97 (Stein)
-!!      split mode_lfifm_pgd                              29/07/97 (Masson)
-!!      add directional z0 and subgrid scale orography    31/07/97 (Masson)
-!!      separates surface treatment in PREP_IDEAL_SURF    15/03/99 (Masson)
-!!      new PGD fields allocations                        15/03/99 (Masson)
-!!      iterative call to pressure solver                 15/03/99 (Masson)
-!!      removes TSZ0 case                                 04/01/00 (Masson)
-!!      parallelization                                   18/06/00 (Pinty)
-!!      adaptation for patch approach                     02/07/00 (Solmon/Masson)
-!!      bug in W LB field on Y direction                  05/03/01 (Stein)
-!!      add module MODD_NSV for NSV variable              01/02/01 (D. Gazen) 
-!!      allow namelists in different orders               15/10/01 (I. Mallet)
-!!      allow LUSERC and LUSERI in 1D configuration       05/06/02 (P. Jabouille)
-!!      add  ZUVTHLMR case (move in set_rsou latter)      05/12/02 Jabouille/Masson
-!!      move LHORELAX_SV (after INI_NSV)                  30/04/04 (Pinty)
-!!      Correction Parallel bug IBEG & IDEND  evalution   13/11/08 J.Escobar
-!!      add the option LSHIFT for interpolation of        26/10/10 (G.Tanguy)
-!!      correction for XHAT & parallelizarion of ZSDATA   23/09/11 J.Escobar
-!!      the vertical profile (as in PREP_REAL_CASE)
-!!      add use MODI of SURFEX routines                   10/10/111 J.Escobar
-!!
-!!      For 2D modeling: 
-!!      Initialization of ADVFRC profiles (SET_ADVFRC)    06/2010 (P.Peyrille)
-!!      when LDUMMY(2)=T in PRE_IDEA1.nam 
-!!      USE MODDB_ADVFRC_n for grid-nesting               02*2012 (M. Tomasini)
-!!      LBOUSS in MODD_REF                                07/2013 (C.Lac)
-!!      Correction for ZS in PGD file                     04/2014 (G. TANGUY)
-!!      Bug : remove NC WRITE_HGRID                       05/2014 (S. Bielli via J.Escobar )
-!!      BUG if ZFRC and ZFRC_ADV or ZFRC_REL are used together  11/2014 (G. Delautier)
-!!      Bug : detected with cray compiler ,
-!!                  missing '&' in continuation string  3/12/2014 J.Escobar
-!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
-!!  06/2016     (G.Delautier) phasage surfex 8
-!!      P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
-!!  01/2018      (G.Delautier) SURFEX 8.1
-!  P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
-!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
-!  P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing
-!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!  F. Auguste     02/2021: add IBM
-!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
-!  Jean-Luc Redelsperger 03/2021: ocean LES case
-!  P. Wautelet 06/07/2021: use FINALIZE_MNH
-!-------------------------------------------------------------------------------
-!
-!*       0.   DECLARATIONS
-!             ------------
-!
-USE MODD_PARAMETERS       ! Declarative modules
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_DIM_n
-USE MODD_CONF
-USE MODD_CST
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_IBM_LSF,     ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH
-USE MODD_IBM_PARAM_n, ONLY: XIBM_LS
-USE MODD_METRICS_n
-USE MODD_PGDDIM
-USE MODD_PGDGRID
-USE MODD_TIME
-USE MODD_TIME_n
-USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE
-USE MODD_REF
-USE MODD_REF_n
-USE MODD_LUNIT
-USE MODD_FIELD_n
-USE MODD_DYN_n
-USE MODD_LBC_n
-USE MODD_LSFIELD_n
-USE MODD_PARAM_n
-USE MODD_CH_MNHC_n,        ONLY:  LUSECHEM, LUSECHAQ, LUSECHIC, LCH_PH, LCH_INIT_FIELD
-USE MODD_CH_AEROSOL,ONLY:  LORILAM, CORGANIC, LVARSIGI, LVARSIGJ, LINITPM, XINIRADIUSI, &
-                           XINIRADIUSJ, XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT
-USE MODD_DUST,      ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN 
-USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT
-USE MODD_VAR_ll,    ONLY:  NPROC
-USE MODD_LUNIT,     ONLY:  TLUOUT0, TOUTDATAFILE
-USE MODD_LUNIT_n
-USE MODD_IO,        ONLY: TFILE_DUMMY, TFILE_OUTPUTLISTING
-USE MODD_CONF_n
-USE MODD_NSV,       ONLY: NSV
-use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME
-!
-USE MODN_BLANK_n
-!
-USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
-USE MODE_THERMO
-USE MODE_POS
-USE MODE_GRIDCART         ! Executive modules
-USE MODE_GRIDPROJ
-USE MODE_GATHER_ll
-USE MODE_IO,               only: IO_Config_set, IO_Init, IO_Pack_set
-USE MODE_IO_FIELD_READ,    only: IO_Field_read
-USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
-USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
-USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
-USE MODE_ll
-USE MODE_MODELN_HANDLER
-use mode_field,            only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars
-USE MODE_MSG
-!
-USE MODI_DEFAULT_DESFM_n    ! Interface modules
-USE MODI_DEFAULT_EXPRE
-USE MODI_IBM_INIT_LS
-USE MODI_READ_HGRID
-USE MODI_SHUMAN
-USE MODI_SET_RSOU
-USE MODI_SET_CSTN
-USE MODI_SET_FRC
-USE MODI_PRESSURE_IN_PREP
-USE MODI_WRITE_DESFM_n
-USE MODI_WRITE_LFIFM_n
-USE MODI_METRICS
-USE MODI_UPDATE_METRICS
-USE MODI_SET_REF
-USE MODI_SET_PERTURB
-USE MODI_TOTAL_DMASS
-USE MODI_CH_INIT_FIELD_n
-USE MODI_INI_NSV
-USE MODI_READ_PRE_IDEA_NAM_n
-USE MODI_ZSMT_PIC
-USE MODI_ZSMT_PGD
-USE MODI_READ_VER_GRID
-USE MODI_READ_ALL_NAMELISTS
-USE MODI_PGD_GRID_SURF_ATM
-USE MODI_SPLIT_GRID
-USE MODI_PGD_SURF_ATM
-USE MODI_ICE_ADJUST_BIS
-USE MODI_WRITE_PGD_SURF_ATM_n
-USE MODI_PREP_SURF_MNH
-USE MODI_INIT_SALT
-USE MODI_AER2LIMA
-USE MODD_PARAM_LIMA
-!
-!JUAN
-USE MODE_SPLITTINGZ_ll
-USE MODD_SUB_MODEL_n
-USE MODE_MNH_TIMING
-USE MODN_CONFZ
-!JUAN
-!
-USE MODI_VERSION
-USE MODI_INIT_PGD_SURF_ATM
-USE MODI_WRITE_SURF_ATM_N
-USE MODD_MNH_SURFEX_n
-! Modif ADVFRC
-USE MODD_2D_FRC
-USE MODD_ADVFRC_n     ! Modif for grid-nesting
-USE MODI_SETADVFRC
-USE MODD_RELFRC_n     ! Modif for grid-nesting
-USE MODI_SET_RELFRC
-!
-USE MODI_INI_CST
-USE MODI_INI_NEB
-USE MODD_NEB, ONLY: NEB
-USE MODI_WRITE_HGRID
-USE MODD_MPIF
-USE MODD_VAR_ll
-USE MODD_IO, ONLY: TFILEDATA,TFILE_SURFEX
-!
-USE MODE_MPPDB
-!
-USE MODD_GET_n
-!
-USE MODN_CONFIO, ONLY : NAM_CONFIO
-!
-IMPLICIT NONE
-!
-!*       0.1  Declarations of global variables not declared in the modules
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: XJ ! Jacobian
-REAL :: XLATCEN=XUNDEF, XLONCEN=XUNDEF ! latitude and longitude of the center of
-                                     ! the domain for initialization. This 
-                                     ! point is vertical vorticity point
-                                     !          ------------------------
-REAL :: XDELTAX=0.5E4, XDELTAY=0.5E4 ! horizontal mesh lengths  
-                                     !  used to determine  XXHAT,XYHAT
-!
-INTEGER :: NLUPRE,NLUOUT           ! Logical unit numbers for EXPRE file
-                                   ! and for output_listing file
-INTEGER :: NRESP                   ! return code in FM routines
-INTEGER :: NTYPE                   ! type of file (cpio or not)
-INTEGER(KIND=LFIINT) :: NNPRAR     ! number of articles predicted in the LFIFM file
-LOGICAL :: GFOUND                  ! Return code when searching namelist
-!
-INTEGER :: JLOOP,JILOOP,JJLOOP     ! Loop indexes
-!
-INTEGER :: NIB,NJB,NKB             ! Begining useful area  in x,y,z directions
-INTEGER :: NIE,NJE                 ! Ending useful area  in x,y directions
-INTEGER :: NIU,NJU,NKU             ! Upper bounds in x,y,z directions
-CHARACTER(LEN=4)   :: CIDEAL ='CSTN'     ! kind of idealized fields
-                                         ! 'CSTN' : Nv=cste case 
-                                         ! 'RSOU' : radiosounding case
-CHARACTER(LEN=4)   :: CZS    ='FLAT'     ! orography selector
-                                         ! 'FLAT' : zero orography
-                                         ! 'SINE' : sine-shaped orography 
-                                         ! 'BELL' : bell-shaped orography 
-REAL    :: XHMAX=XUNDEF            ! Maximum height for orography
-REAL    :: NEXPX=3,NEXPY=1         ! Exponents for  orography in case of CZS='SINE'
-REAL    :: XAX= 1.E4, XAY=1.E4     ! Widths for orography in case CZS='BELL'
-                                   ! along x and y 
-INTEGER :: NIZS = 5, NJZS = 5      ! Localization of the center in 
-                                   ! case CZS ='BELL' 
-!
-!*       0.1.1 Declarations of local variables for N=cste and 
-!              radiosounding cases :
-!
-INTEGER            :: NYEAR,NMONTH,NDAY ! year, month and day in EXPRE file
-REAL               :: XTIME             ! time in EXPRE file
-LOGICAL            :: LPERTURB =.FALSE. ! Logical to add a perturbation to 
-                                        ! a basic state 
-LOGICAL            :: LGEOSBAL =.FALSE. ! Logical to satisfy the geostrophic
-                                        ! balance
-                                        ! .TRUE. for geostrophic balance
-                                        ! .FALSE. to ignore this balance
-LOGICAL            :: LSHIFT   =.FALSE.  ! flag to perform vertical shift or not.        
-CHARACTER(LEN=3)   :: CFUNU ='ZZZ'      ! CHARACTER STRING for variation of
-                                        ! U in y direction
-                                        ! 'ZZZ'  : U = U(Z)
-                                        ! 'Y*Z'  : U = F(Y) * U(Z)
-                                        ! 'Y,Z'  : U = G(Y,Z)
-CHARACTER(LEN=3)   :: CFUNV ='ZZZ'      ! CHARACTER STRING for variation of
-                                        ! V in x direction
-                                        ! 'ZZZ'  : V = V(Z)
-                                        ! 'Y*Z'  : V = F(X) * V(Z)
-                                        ! 'Y,Z'  : V = G(X,Z)
-CHARACTER(LEN=6)   :: CTYPELOC='IJGRID' ! Type of informations  used to give the
-                                        ! localization of vertical profile
-                                        ! 'IJGRID'  for (i,j) point  on index space
-                                        ! 'XYHATM' for (x,y) coordinates on
-                                        !  conformal or cartesian plane
-                                        ! 'LATLON' for (latitude,longitude) on
-                                        !   spherical earth  
-REAL               :: XLATLOC= 45., XLONLOC=0.
-                                        ! Latitude and longitude of the vertical
-                                        ! profile localization  (used in case 
-                                        ! CTYPELOC='LATLON') 
-REAL               :: XXHATLOC=2.E4, XYHATLOC=2.E4 
-                                        ! (x,y) of the vertical profile
-                                        ! localization  (used in cases 
-                                        ! CTYPELOC='LATLON' and 'XYHATM') 
-INTEGER, DIMENSION(1) :: NILOC=4, NJLOC=4 
-                                        ! (i,j) of the vertical profile
-                                        ! localization 
-!
-!
-REAL,DIMENSION(:,:,:),ALLOCATABLE   :: XCORIOZ ! Coriolis parameter (this
-                                                 ! is exceptionnaly a 3D array
-                                                 ! for computing needs)
-!
-!
-!*       0.1.2 Declarations of local variables used when a PhysioGraphic Data
-!              file is used :
-!
-INTEGER             :: JSV                      ! loop index on scalar var.
-CHARACTER(LEN=28)   :: CPGD_FILE=' '            ! Physio-Graphic Data file name
-LOGICAL  :: LREAD_ZS = .TRUE.,                & ! switch to use orography 
-                                                ! coming from the PGD file
-            LREAD_GROUND_PARAM = .TRUE.         ! switch to use soil parameters
-                                                ! useful for the soil scheme
-                                                ! coming from the PGD file
-
-INTEGER           :: NSLEVE   =12         ! number of iteration for smooth orography
-REAL              :: XSMOOTH_ZS = XUNDEF  ! optional uniform smooth orography for SLEVE coordinate
-CHARACTER(LEN=28) :: YPGD_NAME, YPGD_DAD_NAME   ! general information
-CHARACTER(LEN=2)  :: YPGD_TYPE
-!
-INTEGER           :: IINFO_ll                   ! return code of // routines
-TYPE(LIST_ll), POINTER :: TZ_FIELDS_ll           ! list of metric coefficient fields
-!
-INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU     ! dimensions of the
-INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2       ! West-east LB arrays
-INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV     ! dimensions of the
-INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2       ! North-south LB arrays
-INTEGER :: IBEG,IEND,IXOR,IXDIM,IYOR,IYDIM,ILBX,ILBY
-REAL, DIMENSION(:),   ALLOCATABLE :: ZXHAT_ll, ZYHAT_ll
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,&
-                                      ZEXN,ZLVOCPEXN,ZLSOCPEXN,ZCPH, &
-                                      ZRSATW, ZRSATI
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZBUF
-                                 ! variables for adjustement
-REAL                :: ZDIST
-!
-!JUAN TIMING
-REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZEND, ZTOT
-CHARACTER                 :: YMI
-INTEGER                   :: IMI
-!JUAN TIMING
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZZS_ll
-INTEGER                           :: IJ
-!
-REAL              :: ZZS_MAX, ZZS_MAX_ll
-INTEGER           :: IJPHEXT
-!
-TYPE(TFILEDATA),POINTER :: TZEXPREFILE  => NULL()
-!
-!
-!*       0.2  Namelist declarations
-!
-NAMELIST/NAM_CONF_PRE/ LTHINSHELL,LCARTESIAN,    &! Declarations in MODD_CONF
-                       LPACK,                    &!
-                       NVERB,CIDEAL,CZS,         &!+global variables initialized
-                       LBOUSS,LOCEAN,LPERTURB,   &! at their declarations
-                       LFORCING,CEQNSYS,         &! at their declarations
-                       LSHIFT,L2D_ADV_FRC,L2D_REL_FRC, &
-                       NHALO , JPHEXT
-NAMELIST/NAM_GRID_PRE/ XLON0,XLAT0,            & ! Declarations in MODD_GRID
-                       XBETA,XRPK,             & 
-                       XLONORI,XLATORI
-NAMELIST/NAM_GRIDH_PRE/ XLATCEN,XLONCEN,       & ! local variables  initialized
-                 XDELTAX,XDELTAY,              & ! at their declarations
-                 XHMAX,NEXPX,NEXPY,            &
-                 XAX,XAY,NIZS,NJZS
-NAMELIST/NAM_VPROF_PRE/LGEOSBAL, CFUNU,CFUNV,   &! global variables initialized
-                     CTYPELOC,XLATLOC,XLONLOC,  &!  at their declarations
-                     XXHATLOC,XYHATLOC,NILOC,NJLOC
-NAMELIST/NAM_REAL_PGD/CPGD_FILE,                 & ! Physio-Graphic Data file
-                                                   !  name
-                      LREAD_ZS,                  & ! switch to use orography 
-                                                   ! coming from the PGD file
-                      LREAD_GROUND_PARAM
-NAMELIST/NAM_SLEVE/NSLEVE, XSMOOTH_ZS
-!
-!*       0.3  Auxillary Namelist declarations
-!
-NAMELIST/NAM_AERO_PRE/ LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, &
-                       XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, &
-                       LDUST, LSALT, CRGUNITD, CRGUNITS,&
-                       NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,&
-                       XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, &
-                       NMODE_SLT
-!
-NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH
-!
-!-------------------------------------------------------------------------------
-!
-!*       0.    PROLOGUE
-!              --------
-CALL MPPDB_INIT()
-!
-CALL GOTO_MODEL(1)
-!
-CALL IO_Init()
-NULLIFY(TZ_FIELDS_ll)
-CALL VERSION
-CPROGRAM='IDEAL '
-!
-!JUAN TIMING
-  XT_START     = 0.0_MNHTIME
-  XT_STORE     = 0.0_MNHTIME
-!
-  CALL SECOND_MNH2(ZEND)
-!
-!JUAN TIMING
-!
-!*       1.    INITIALIZE PHYSICAL CONSTANTS :         
-!              ------------------------------
-!
-NVERB = 5
-CALL INI_CST
-CALL INI_NEB
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*  	 2.    SET DEFAULT VALUES  :  
-!              --------------------
-!
-!
-!*       2.1  For variables in DESFM file
-!
-CALL ALLOC_FIELD_SCALARS()
-CALL PARAM_ICE_ASSOCIATE()
-CALL DEFAULT_DESFM_n(1)
-!
-CSURF = "NONE"
-!
-!
-!*       2.2  For other global variables in EXPRE file
-!
-CALL DEFAULT_EXPRE
-!-------------------------------------------------------------------------------
-!
-!*  	 3.    READ THE EXPRE FILE :  
-!              --------------------
-!
-!*       3.1   initialize logical unit numbers (EXPRE and output-listing files)
-!              and open these files :
-! 
-! 
-CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING1','OUTPUTLISTING','WRITE')
-CALL IO_File_open(TLUOUT0)
-NLUOUT = TLUOUT0%NLU
-!Set output files for PRINT_MSG
-TLUOUT              => TLUOUT0
-TFILE_OUTPUTLISTING => TLUOUT0
-!
-CALL IO_File_add2list(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ')
-CALL IO_File_open(TZEXPREFILE)
-NLUPRE=TZEXPREFILE%NLU
-!
-!*       3.2   read in NLUPRE the namelist informations
-!
-WRITE(NLUOUT,FMT=*) 'attempt to read ',TRIM(TZEXPREFILE%CNAME),' file'
-CALL POSNAM(NLUPRE,'NAM_REAL_PGD',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_REAL_PGD)
-!
-!
-CALL POSNAM(NLUPRE,'NAM_CONF_PRE',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONF_PRE)
-!JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFZ',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ)
-!JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO)
-CALL IO_Config_set()
-CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE)
-CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRIDH_PRE)
-CALL POSNAM(NLUPRE,'NAM_VPROF_PRE',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_VPROF_PRE)
-CALL POSNAM(NLUPRE,'NAM_BLANKN',GFOUND,NLUOUT)
-CALL INIT_NAM_BLANKn
-IF (GFOUND) THEN
-  READ(UNIT=NLUPRE,NML=NAM_BLANKn)
-  CALL UPDATE_NAM_BLANKn
-END IF
-CALL READ_PRE_IDEA_NAM_n(NLUPRE,NLUOUT)
-CALL POSNAM(NLUPRE,'NAM_AERO_PRE',GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_AERO_PRE)
-CALL POSNAM(NLUPRE,'NAM_IBM_LSF' ,GFOUND,NLUOUT)
-IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_IBM_LSF )
-!
-CALL INI_FIELD_LIST(1)
-!
-CALL INI_FIELD_SCALARS()
-! Sea salt
-CALL INIT_SALT
-!
-IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN 
-  ! open the PGD_FILE
-  CALL IO_File_add2list(TPGDFILE,TRIM(CPGD_FILE),'PGD','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_File_open(TPGDFILE)
-
-  ! read the grid in the PGD file
-  CALL IO_Field_read(TPGDFILE,'IMAX',  NIMAX)
-  CALL IO_Field_read(TPGDFILE,'JMAX',  NJMAX)
-  CALL IO_Field_read(TPGDFILE,'JPHEXT',IJPHEXT)
-
-  IF ( CPGD_FILE /= CINIFILEPGD) THEN
-     WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you&
-          & have CINIFILEPGD= ',CINIFILEPGD
-     WRITE(NLUOUT,FMT=*) ' whereas in NAM_REAL_PGD you have CPGD_FILE = '&
-          ,CPGD_FILE
-     WRITE(NLUOUT,FMT=*) ' '
-     WRITE(NLUOUT,FMT=*) ' CINIFILEPGD HAS BEEN SET TO  ',CPGD_FILE        
-     CINIFILEPGD=CPGD_FILE
-  END IF
-  IF ( IJPHEXT .NE. JPHEXT ) THEN
-     WRITE(NLUOUT,FMT=*) ' PREP_IDEAL_CASE : JPHEXT in PRE_IDEA1.nam/NAM_CONF_PRE ( or default value )&
-        & JPHEXT=',JPHEXT
-     WRITE(NLUOUT,FMT=*) ' different from PGD files=', CINIFILEPGD,' value JPHEXT=',IJPHEXT
-     WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
-     CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','')
-     !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT
-     !IJPHEXT = JPHEXT
-  END IF
-END IF
-!
-NIMAX_ll=NIMAX   !! _ll variables are global variables
-NJMAX_ll=NJMAX   !! but the old names are kept in PRE_IDEA1.nam file
-!
-!*       3.3   check some parameters:
-!
-L1D=.FALSE. ; L2D=.FALSE.
-!
-IF ((NIMAX == 1).OR.(NJMAX == 1)) THEN 
-  L2D=.TRUE.
-  NJMAX_ll=1
-  NIMAX_ll=MAX(NIMAX,NJMAX)
-  WRITE(NLUOUT,FMT=*) ' NJMAX HAS BEEN SET TO 1 SINCE 2D INITIAL FILE IS REQUIRED &
-                   & (L2D=TRUE) )' 
-END IF
-!
-IF ((NIMAX == 1).AND.(NJMAX == 1)) THEN 
-  L1D=.TRUE.
-  NIMAX_ll = 1
-  NJMAX_ll = 1
-  WRITE(NLUOUT,FMT=*) ' 1D INITIAL FILE IS REQUIRED (L1D=TRUE) ' 
-END IF
-!
-IF(.NOT. L1D) THEN
-  LHORELAX_UVWTH=.TRUE.
-  LHORELAX_RV=.TRUE.
-ENDIF
-!
-NRIMX= MIN(JPRIMMAX,NIMAX_ll/2)
-!
-IF (L2D) THEN
-  NRIMY=0
-ELSE
-  NRIMY= MIN(JPRIMMAX,NJMAX_ll/2)
-END IF
-!
-IF (L1D) THEN
-  NRIMX=0
-  NRIMY=0
-END IF
-!
-IF (L1D .AND. ( LPERTURB .OR. LGEOSBAL .OR.                &
-               (.NOT. LCARTESIAN ) .OR. (.NOT. LTHINSHELL) ))THEN 
-  LGEOSBAL   = .FALSE.
-  LPERTURB   = .FALSE.
-  LCARTESIAN = .TRUE. 
-  LTHINSHELL = .TRUE. 
-  WRITE(NLUOUT,FMT=*) ' LGEOSBAL AND LPERTURB HAVE BEEN SET TO FALSE &
-                      & AND LCARTESIAN AND LTHINSHELL TO TRUE        &
-                      & SINCE 1D INITIAL FILE IS REQUIRED (L1D=TRUE)' 
-END IF
-!
-IF (LGEOSBAL .AND. LSHIFT ) THEN
-  LSHIFT=.FALSE.
-  WRITE(NLUOUT,FMT=*) ' LSHIFT HAS BEEN SET TO FALSE SINCE &
-                        & LGEOSBAL=.TRUE. IS REQUIRED '
-END IF
-!                      
-!*       3.4   compute the number of moist variables :
-!
-IF (.NOT.LUSERV) THEN
-  LUSERV = .TRUE.
-  WRITE(NLUOUT,FMT=*) ' LUSERV HAS BEEN RESET TO TRUE, SINCE A MOIST VARIABLE &
-                   & IS PRESENT IN EXPRE FILE (CIDEAL = RSOU OR CSTN)' 
-END IF
-!
-IF((LUSERI .OR. LUSERC).AND. (CIDEAL /= 'RSOU')) THEN
-  !callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','use of hydrometeors is only allowed in RSOU case')
-ENDIF
-IF (LUSERI) THEN
-  LUSERC =.TRUE.
-  LUSERR =.TRUE.
-  LUSERI =.TRUE.
-  LUSERS =.TRUE.
-  LUSERG =.TRUE.
-  LUSERH =.FALSE.
-  CCLOUD='ICE3'
-ELSEIF(LUSERC) THEN
-  LUSERR =.FALSE.
-  LUSERI =.FALSE.
-  LUSERS =.FALSE.
-  LUSERG =.FALSE.
-  LUSERH =.FALSE.
-  CCLOUD='REVE'
-ELSE
-  LUSERC =.FALSE.
-  LUSERR =.FALSE.
-  LUSERI =.FALSE.
-  LUSERS =.FALSE.
-  LUSERG =.FALSE.
-  LUSERH =.FALSE.
-  LHORELAX_RC=.FALSE.
-  LHORELAX_RR=.FALSE.
-  LHORELAX_RI=.FALSE.
-  LHORELAX_RS=.FALSE.
-  LHORELAX_RG=.FALSE.
-  LHORELAX_RH=.FALSE.
-  CCLOUD='NONE'
-!
-END IF
-!
-NRR=0
-IF (LUSERV) THEN
-  NRR=NRR+1
-  IDX_RVT = NRR
-END IF
-IF (LUSERC) THEN
-  NRR=NRR+1
-  IDX_RCT = NRR
-END IF
-IF (LUSERR) THEN
-  NRR=NRR+1
-  IDX_RRT = NRR
-END IF
-IF (LUSERI) THEN
-  NRR=NRR+1
-  IDX_RIT = NRR
-END IF
-IF (LUSERS) THEN
-  NRR=NRR+1
-  IDX_RST = NRR
-END IF
-IF (LUSERG) THEN
-  NRR=NRR+1
-  IDX_RGT = NRR
-END IF
-IF (LUSERH) THEN
-  NRR=NRR+1
-  IDX_RHT = NRR
-END IF
-!
-! NRR=4 for RSOU case because RI and Rc always computed
-IF (CIDEAL == 'RSOU' .AND. NRR < 4 ) NRR=4
-!                   
-!
-!*       3.5   Chemistry
-!
-IF (LORILAM .OR. LCH_INIT_FIELD) THEN
-  LUSECHEM = .TRUE.
-  IF (LORILAM) THEN
-    CORGANIC = "MPMPO"
-    LVARSIGI = .TRUE.
-    LVARSIGJ = .TRUE.
-  END IF
-END IF
-! initialise NSV_* variables
-CALL INI_NSV(1)
-LHORELAX_SV(:)=.FALSE.
-IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE.
-!
-!-------------------------------------------------------------------------------
-!
-!*       4.    ALLOCATE MEMORY FOR ARRAYS :  
-!   	       ----------------------------
-!
-!*       4.1  Vertical Spatial grid 
-!
-CALL READ_VER_GRID(TZEXPREFILE)
-!
-!*       4.2  Initialize parallel variables and compute array's dimensions
-!
-!
-IF(LGEOSBAL) THEN
-  CALL SET_SPLITTING_ll('XSPLITTING')  ! required for integration of thermal wind balance
-ELSE
-  CALL SET_SPLITTING_ll('BSPLITTING')
-ENDIF
-CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT)
-CALL SET_DAD0_ll()
-CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL IO_Pack_set(L1D,L2D,LPACK)
-CALL SET_LBX_ll(CLBCX(1), 1)
-CALL SET_LBY_ll(CLBCY(1), 1)
-CALL SET_XRATIO_ll(1, 1)
-CALL SET_YRATIO_ll(1, 1)
-CALL SET_XOR_ll(1, 1)
-CALL SET_XEND_ll(NIMAX_ll+2*JPHEXT, 1)
-CALL SET_YOR_ll(1, 1)
-CALL SET_YEND_ll(NJMAX_ll+2*JPHEXT, 1)
-CALL SET_DAD_ll(0, 1)
-CALL INI_PARAZ_ll(IINFO_ll)
-!
-! sizes of arrays of the extended sub-domain
-!
-CALL GET_DIM_EXT_ll('B',NIU,NJU)
-CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX)
-CALL GET_INDICE_ll(NIB,NJB,NIE,NJE)
-CALL GET_OR_ll('B',IXOR,IYOR)
-NKB=1+JPVEXT
-NKU=NKMAX+2*JPVEXT
-!
-!*       4.3  Global variables absent from the modules :
-!
-ALLOCATE(XJ(NIU,NJU,NKU))
-SELECT CASE(CIDEAL)
-  CASE('RSOU','CSTN')
-    IF (LGEOSBAL) ALLOCATE(XCORIOZ(NIU,NJU,NKU))  ! exceptionally a 3D array  
-  CASE DEFAULT                      ! undefined preinitialization
-   !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CIDEAL is not correctly defined')
-END SELECT 
-!
-!*       4.4   Prognostic variables at M instant (module MODD_FIELD1):
-!
-ALLOCATE(XUT(NIU,NJU,NKU))
-ALLOCATE(XVT(NIU,NJU,NKU))
-ALLOCATE(XWT(NIU,NJU,NKU))
-ALLOCATE(XTHT(NIU,NJU,NKU))
-ALLOCATE(XPABST(NIU,NJU,NKU))
-ALLOCATE(XRT(NIU,NJU,NKU,NRR))
-ALLOCATE(XSVT(NIU,NJU,NKU,NSV))
-!
-!*       4.5   Grid variables (module MODD_GRID1 and MODD_METRICS1):
-!
-ALLOCATE(XMAP(NIU,NJU))
-ALLOCATE(XLAT(NIU,NJU))
-ALLOCATE(XLON(NIU,NJU))
-ALLOCATE(XDXHAT(NIU),XDYHAT(NJU))
-IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(XZS(NIU,NJU))
-IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(ZZS_ll(NIMAX_ll))
-IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(XZSMT(NIU,NJU))
-ALLOCATE(XZZ(NIU,NJU,NKU))
-!
-ALLOCATE(XDXX(NIU,NJU,NKU))
-ALLOCATE(XDYY(NIU,NJU,NKU))
-ALLOCATE(XDZX(NIU,NJU,NKU))
-ALLOCATE(XDZY(NIU,NJU,NKU))
-ALLOCATE(XDZZ(NIU,NJU,NKU))
-!
-!*       4.6   Reference state variables (modules MODD_REF and MODD_REF1):
-!
-ALLOCATE(XRHODREFZ(NKU),XTHVREFZ(NKU))
-XTHVREFZ(:)=0.0
-IF (LCOUPLES) THEN
-  ! Arrays for reference state different in ocean and atmosphere
-  ALLOCATE(XRHODREFZO(NKU),XTHVREFZO(NKU))
-  XTHVREFZO(:)=0.0
-END IF
-IF(CEQNSYS == 'DUR') THEN
-  ALLOCATE(XRVREF(NIU,NJU,NKU))
-ELSE
-  ALLOCATE(XRVREF(0,0,0))
-END IF
-ALLOCATE(XRHODREF(NIU,NJU,NKU),XTHVREF(NIU,NJU,NKU),XEXNREF(NIU,NJU,NKU))
-ALLOCATE(XRHODJ(NIU,NJU,NKU))
-!
-!*       4.7   Larger Scale fields (modules MODD_LSFIELD1):
-!
-ALLOCATE(XLSUM(NIU,NJU,NKU))
-ALLOCATE(XLSVM(NIU,NJU,NKU))
-ALLOCATE(XLSWM(NIU,NJU,NKU))
-ALLOCATE(XLSTHM(NIU,NJU,NKU))
-IF ( NRR >= 1) THEN
-  ALLOCATE(XLSRVM(NIU,NJU,NKU))
-ELSE
-  ALLOCATE(XLSRVM(0,0,0))
-ENDIF
-!
-!  allocate lateral boundary field used for coupling
-!
-IF ( L1D) THEN                         ! 1D case
-!
-  NSIZELBX_ll=0
-  NSIZELBXU_ll=0
-  NSIZELBY_ll=0
-  NSIZELBYV_ll=0
-  NSIZELBXTKE_ll=0
-  NSIZELBXR_ll=0
-  NSIZELBXSV_ll=0
-  NSIZELBYTKE_ll=0
-  NSIZELBYR_ll=0
-  NSIZELBYSV_ll=0
-  ALLOCATE(XLBXUM(0,0,0))
-  ALLOCATE(XLBYUM(0,0,0))
-  ALLOCATE(XLBXVM(0,0,0))
-  ALLOCATE(XLBYVM(0,0,0))
-  ALLOCATE(XLBXWM(0,0,0))
-  ALLOCATE(XLBYWM(0,0,0))
-  ALLOCATE(XLBXTHM(0,0,0))
-  ALLOCATE(XLBYTHM(0,0,0))
-  ALLOCATE(XLBXTKEM(0,0,0))
-  ALLOCATE(XLBYTKEM(0,0,0))
-  ALLOCATE(XLBXRM(0,0,0,0))
-  ALLOCATE(XLBYRM(0,0,0,0))
-  ALLOCATE(XLBXSVM(0,0,0,0))
-  ALLOCATE(XLBYSVM(0,0,0,0))
-!
-ELSEIF( L2D ) THEN             ! 2D case (not yet parallelized)
-!                                          
-  CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX,               &
-                    IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, &
-                    IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2)
-  NSIZELBY_ll=0
-  NSIZELBYV_ll=0
-  NSIZELBYTKE_ll=0
-  NSIZELBYR_ll=0
-  NSIZELBYSV_ll=0
-  ALLOCATE(XLBYUM(0,0,0))
-  ALLOCATE(XLBYVM(0,0,0))
-  ALLOCATE(XLBYWM(0,0,0))
-  ALLOCATE(XLBYTHM(0,0,0))
-  ALLOCATE(XLBYTKEM(0,0,0))
-  ALLOCATE(XLBYRM(0,0,0,0))
-  ALLOCATE(XLBYSVM(0,0,0,0))
-  !
-  IF ( LHORELAX_UVWTH ) THEN
-!JUAN A REVOIR TODO_JPHEXT
-! <<<<<<< prep_ideal_case.f90
-    ! NSIZELBX_ll=2*NRIMX+2
-    ! NSIZELBXU_ll=2*NRIMX+2
-    ALLOCATE(XLBXUM(IISIZEXFU,NJU,NKU))
-    ALLOCATE(XLBXVM(IISIZEXF,NJU,NKU))
-    ALLOCATE(XLBXWM(IISIZEXF,NJU,NKU))
-    ALLOCATE(XLBXTHM(IISIZEXF,NJU,NKU))
-! =======
-    NSIZELBX_ll=2*NRIMX+2*JPHEXT
-    NSIZELBXU_ll=2*NRIMX+2*JPHEXT
-    ! ALLOCATE(XLBXUM(2*NRIMX+2*JPHEXT,NJU,NKU))
-    ! ALLOCATE(XLBXVM(2*NRIMX+2*JPHEXT,NJU,NKU))
-    ! ALLOCATE(XLBXWM(2*NRIMX+2*JPHEXT,NJU,NKU))
-    ! ALLOCATE(XLBXTHM(2*NRIMX+2*JPHEXT,NJU,NKU))
-! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2
-  ELSE
-    NSIZELBX_ll= 2*JPHEXT     ! 2
-    NSIZELBXU_ll=2*(JPHEXT+1) ! 4 
-    ALLOCATE(XLBXUM(NSIZELBXU_ll,NJU,NKU))
-    ALLOCATE(XLBXVM(NSIZELBX_ll,NJU,NKU))
-    ALLOCATE(XLBXWM(NSIZELBX_ll,NJU,NKU))
-    ALLOCATE(XLBXTHM(NSIZELBX_ll,NJU,NKU))
-  END IF  
-  !
-  IF ( NRR > 0 ) THEN
-    IF (       LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI    &
-          .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH                     &
-       ) THEN 
-!JUAN A REVOIR TODO_JPHEXT
-! <<<<<<< prep_ideal_case.f90
-      ! NSIZELBXR_ll=2* NRIMX+2
-      ALLOCATE(XLBXRM(IISIZEXF,NJU,NKU,NRR))
-! =======
-      NSIZELBXR_ll=2*NRIMX+2*JPHEXT
-      ! ALLOCATE(XLBXRM(2*NRIMX+2*JPHEXT,NJU,NKU,NRR))
-! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2
-    ELSE
-      NSIZELBXR_ll=2*JPHEXT ! 2
-      ALLOCATE(XLBXRM(NSIZELBXR_ll,NJU,NKU,NRR))
-    ENDIF
-  ELSE
-    NSIZELBXR_ll=0
-    ALLOCATE(XLBXRM(0,0,0,0))
-  END IF
-  !
-  IF ( NSV > 0 ) THEN 
-    IF ( ANY( LHORELAX_SV(:)) ) THEN
-!JUAN A REVOIR TODO_JPHEXT
-! <<<<<<< prep_ideal_case.f90
-      ! NSIZELBXSV_ll=2* NRIMX+2
-      ALLOCATE(XLBXSVM(IISIZEXF,NJU,NKU,NSV))
-! =======
-      NSIZELBXSV_ll=2*NRIMX+2*JPHEXT
-      ! ALLOCATE(XLBXSVM(2*NRIMX+2*JPHEXT,NJU,NKU,NSV))
-! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2
-    ELSE
-      NSIZELBXSV_ll=2*JPHEXT ! 2
-      ALLOCATE(XLBXSVM(NSIZELBXSV_ll,NJU,NKU,NSV))
-    END IF
-  ELSE
-    NSIZELBXSV_ll=0
-    ALLOCATE(XLBXSVM(0,0,0,0))
-  END IF
-!
-ELSE                                   ! 3D case
-!
-  CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX,               &
-                    IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, &
-                    IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2)
-  CALL GET_SIZEY_LB(NIMAX_ll,NJMAX_ll,NRIMY,               &
-                    IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV, &
-                    IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2)
-!
-  IF ( LHORELAX_UVWTH ) THEN
-    NSIZELBX_ll=2*NRIMX+2*JPHEXT
-    NSIZELBXU_ll=2*NRIMX+2*JPHEXT
-    NSIZELBY_ll=2*NRIMY+2*JPHEXT
-    NSIZELBYV_ll=2*NRIMY+2*JPHEXT
-    ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,NKU))
-    ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,NKU))
-    ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,NKU))
-    ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,NKU))
-    ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,NKU))
-    ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,NKU))
-    ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,NKU))
-    ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,NKU))
-  ELSE
-    NSIZELBX_ll=2*JPHEXT      ! 2
-    NSIZELBXU_ll=2*(JPHEXT+1) ! 4
-    NSIZELBY_ll=2*JPHEXT      ! 2
-    NSIZELBYV_ll=2*(JPHEXT+1) ! 4
-    ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,NKU))
-    ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,NKU))
-    ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,NKU))
-    ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,NKU))
-    ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,NKU))
-    ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,NKU))
-    ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,NKU))
-    ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,NKU))
-  END IF  
-  !
-  IF ( NRR > 0 ) THEN
-    IF (       LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI    &
-          .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH                     &
-       ) THEN 
-      NSIZELBXR_ll=2*NRIMX+2*JPHEXT
-      NSIZELBYR_ll=2*NRIMY+2*JPHEXT
-      ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,NKU,NRR))
-      ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,NKU,NRR))
-    ELSE
-      NSIZELBXR_ll=2*JPHEXT    ! 2
-      NSIZELBYR_ll=2*JPHEXT    ! 2
-      ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,NKU,NRR))
-      ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,NKU,NRR))
-    ENDIF
-  ELSE
-    NSIZELBXR_ll=0
-    NSIZELBYR_ll=0
-    ALLOCATE(XLBXRM(0,0,0,0))
-    ALLOCATE(XLBYRM(0,0,0,0))
-  END IF
-  !
-  IF ( NSV > 0 ) THEN 
-    IF ( ANY( LHORELAX_SV(:)) ) THEN
-      NSIZELBXSV_ll=2*NRIMX+2*JPHEXT
-      NSIZELBYSV_ll=2*NRIMY+2*JPHEXT
-      ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,NKU,NSV))
-      ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,NKU,NSV))
-    ELSE
-      NSIZELBXSV_ll=2*JPHEXT    ! 2
-      NSIZELBYSV_ll=2*JPHEXT    ! 2
-      ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,NKU,NSV))
-      ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,NKU,NSV))
-    END IF
-  ELSE
-    NSIZELBXSV_ll=0
-    NSIZELBYSV_ll=0
-    ALLOCATE(XLBXSVM(0,0,0,0))
-    ALLOCATE(XLBYSVM(0,0,0,0))
-  END IF
-END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*       5.     INITIALIZE ALL THE MODEL VARIABLES
-!   	        ----------------------------------
-!
-!
-!*       5.1    Grid variables and RS localization:
-!
-!*       5.1.1  Horizontal Spatial grid :
-!
-IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN 
-!--------------------------------------------------------
-! the MESONH horizontal grid will be read in the PGD_FILE 
-!--------------------------------------------------------
-  CALL READ_HGRID(1,TPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE)
-! control the cartesian option
-  IF( LCARTESIAN ) THEN
-     WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : IN GENERAL, THE USE OF A PGD_FILE &
-                & IMPLIES THAT YOU MUST TAKE INTO ACCOUNT THE EARTH SPHERICITY'
-     WRITE(NLUOUT,FMT=*) 'NEVERTHELESS, LCARTESIAN HAS BEEN KEPT TO TRUE'
-  END IF   
-!
-!* use of the externalized surface
-!
-  CSURF = "EXTE"
-!
-! determine whether the model is flat or no
-!
-  ZZS_MAX = ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT)))
-  CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX,  &
-                     NMNH_COMM_WORLD,IINFO_ll)
-  IF( ABS(ZZS_MAX_ll)  < 1.E-10 ) THEN
-    LFLAT=.TRUE.
-  ELSE
-    LFLAT=.FALSE.
-  END IF
-!
-
-ELSE
-!------------------------------------------------------------------------
-! the MESONH horizontal grid is built from the PRE_IDEA1.nam informations
-!------------------------------------------------------------------------
-!
-  ALLOCATE(XXHAT(NIU),XYHAT(NJU))
-!
-! define the grid localization at the earth surface by the central point
-! coordinates
-!
-  IF (XLONCEN/=XUNDEF .OR. XLATCEN/=XUNDEF) THEN
-    IF (XLONCEN/=XUNDEF .AND. XLATCEN/=XUNDEF) THEN 
-!
-! it should be noted that XLATCEN and XLONCEN refer to a vertical
-! vorticity point and (XLATORI, XLONORI) refer to the mass point of
-! conformal coordinates (0,0). This is to allow the centering of the model in
-! a non-cyclic  configuration regarding to XLATCEN or XLONCEN.
-!
-      ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT))
-      ZXHAT_ll=0.
-      ZYHAT_ll=0.
-      CALL SM_LATLON(XLATCEN,XLONCEN,                     &
-                       -XDELTAX*(NIMAX_ll/2-0.5+JPHEXT),  &
-                       -XDELTAY*(NJMAX_ll/2-0.5+JPHEXT),  &
-                       XLATORI,XLONORI)
-        DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
-!
-      WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : XLATORI=' , XLATORI, &
-                          ' XLONORI= ', XLONORI
-    ELSE
-   !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE',&
-                     'latitude and longitude of the center point must be initialized alltogether or not')
-    END IF
-  END IF
-!
-  IF (NPROC > 1) THEN
-    CALL GET_DIM_EXT_ll('B',IXDIM,IYDIM)
-    IBEG = IXOR-JPHEXT-1
-    IEND = IBEG+IXDIM-1
-    XXHAT(:) = (/ (REAL(JLOOP)*XDELTAX, JLOOP=IBEG,IEND) /)
-    IBEG = IYOR-JPHEXT-1
-    IEND = IBEG+IYDIM-1
-    XYHAT(:) = (/ (REAL(JLOOP)*XDELTAY, JLOOP=IBEG,IEND) /)
-!
-  ELSE
-    XXHAT(:) = (/ (REAL(JLOOP-NIB)*XDELTAX, JLOOP=1,NIU) /)
-    XYHAT(:) = (/ (REAL(JLOOP-NJB)*XDELTAY, JLOOP=1,NJU) /)
-  END IF
-END IF
-!
-!*       5.1.2  Orography and Gal-Chen Sommerville transformation :
-!
-IF (    LEN_TRIM(CPGD_FILE) == 0  .OR. .NOT. LREAD_ZS) THEN
-  SELECT CASE(CZS)     ! 'FLAT' or 'SINE' or 'BELL'
-  CASE('FLAT')
-    LFLAT = .TRUE.
-    IF (XHMAX==XUNDEF) THEN
-      XZS(:,:) = 0.
-    ELSE
-      XZS(:,:) = XHMAX
-    END IF
-  CASE('SINE')       ! sinus-shaped orography 
-    IF (XHMAX==XUNDEF) XHMAX=300.
-    LFLAT    =.FALSE.
-    XZS(:,:) = XHMAX          &      ! three-dimensional case   
-    *SPREAD((/((SIN((XPI/(NIMAX_ll+2*JPHEXT-1))*JLOOP)**2)**NEXPX,JLOOP=IXOR-1,IXOR+NIU-2)/),2,NJU) &
-    *SPREAD((/((SIN((XPI/(NJMAX_ll+2*JPHEXT-1))*JLOOP)**2)**NEXPY,JLOOP=IYOR-1,IYOR+NJU-2)/),1,NIU)
-    IF(L1D) THEN                     ! one-dimensional case
-      XZS(:,:) = XHMAX 
-    END IF        
-  CASE('BELL')       ! bell-shaped orography 
-    IF (XHMAX==XUNDEF) XHMAX=300.
-    LFLAT = .FALSE.
-    IF(.NOT.L2D) THEN                ! three-dimensional case
-      XZS(:,:) = XHMAX  / ( 1.                                           &
-        + ( (SPREAD(XXHAT(1:NIU),2,NJU) - REAL(NIZS) * XDELTAX) /XAX ) **2  &
-        + ( (SPREAD(XYHAT(1:NJU),1,NIU) - REAL(NJZS) * XDELTAY) /XAY ) **2  ) **1.5
-    ELSE                             ! two-dimensional case
-      XZS(:,:) = XHMAX  / ( 1.                                          &
-        + ( (SPREAD(XXHAT(1:NIU),2,NJU) - REAL(NIZS) * XDELTAX) /XAX ) **2 )
-    ENDIF
-    IF(L1D) THEN                     ! one-dimensional case
-      XZS(:,:) = XHMAX 
-    END IF        
-  CASE('COSI')       ! (1+cosine)**4 shape
-    IF (XHMAX==XUNDEF) XHMAX=800.
-    LFLAT = .FALSE.
-    IF(L2D) THEN                     ! two-dimensional case
-      DO JILOOP = 1, NIU
-        ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX
-        IF( ABS(ZDIST)<(4.0*XAX) ) THEN
-          XZS(JILOOP,:) = (XHMAX/16.0)*( 1.0 + COS((XPI*ZDIST)/(4.0*XAX)) )**4
-        ELSE
-          XZS(JILOOP,:) = 0.0
-        ENDIF
-      END DO
-    ENDIF
-  CASE('SCHA')       ! exp(-(x/a)**2)*cosine(pi*x/lambda)**2 shape
-    IF (XHMAX==XUNDEF) XHMAX=800.
-    LFLAT = .FALSE.
-    IF(L2D) THEN                     ! two-dimensional case
-      DO JILOOP = 1, NIU
-        ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX
-        IF( ABS(ZDIST)<(4.0*XAX) ) THEN
-          XZS(JILOOP,:) = XHMAX*EXP(-(ZDIST/XAY)**2)*COS((XPI*ZDIST)/XAX)**2
-        ELSE
-          XZS(JILOOP,:) = 0.0
-        ENDIF
-      END DO
-    ENDIF
-  CASE('AGNE')       ! h*a**2/(x**2+a**2) shape
-    LFLAT = .FALSE.
-    IF(L2D) THEN                     ! two-dimensional case
-      DO JILOOP = 1, NIU
-        ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX
-          XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2)
-      END DO
-		ELSE		! three dimensionnal case - infinite profile in y direction
-			DO JILOOP = 1, NIU
-        ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX
-          XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2)
-      END DO
-    ENDIF
-
-  CASE('DATA')       ! discretized orography
-    LFLAT    =.FALSE.
-    WRITE(NLUOUT,FMT=*) 'CZS="DATA",   ATTEMPT TO READ ARRAY     &
-                    &XZS(NIB:NIU-JPHEXT:1,NJU-JPHEXT:NJB:-1) &
-                    &starting from the first index'
-    CALL POSKEY(NLUPRE,NLUOUT,'ZSDATA')
-    DO JJLOOP = NJMAX_ll+2*JPHEXT-1,JPHEXT+1,-1    ! input like a map prior the sounding
-      READ(NLUPRE,FMT=*) ZZS_ll
-      IF ( ( JJLOOP <= ( NJU-JPHEXT + IYOR-1 ) ) .AND. ( JJLOOP >= ( NJB + IYOR-1 ) ) ) THEN
-         IJ    = JJLOOP - ( IYOR-1 )
-         XZS(NIB:NIU-JPHEXT,IJ) = ZZS_ll(IXOR:IXOR + NIU-JPHEXT - NIB )
-      END IF
-    END DO
-!
-  CASE DEFAULT   ! undefined  shape of orography
-   !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','erroneous ground type')
-  END SELECT
-!
-  CALL ADD2DFIELD_ll( TZ_FIELDS_ll, XZS, 'PREP_IDEAL_CASE::XZS' )
-  CALL UPDATE_HALO_ll(TZ_FIELDS_ll,IINFO_ll)
-  CALL CLEANLIST_ll(TZ_FIELDS_ll)
-!
-END IF
-!
-!IF( ( LEN_TRIM(CPGD_FILE) /= 0 ) .AND. .NOT.LFLAT .AND. &
-! ((CLBCX(1) /= "OPEN" ) .OR. &
-! (CLBCX(2) /= "OPEN" ) .OR. (CLBCY(1) /= "OPEN" ) .OR. &
-! (CLBCY(2) /= "OPEN" )) )  THEN 
-!   !callabortstop
-!  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','with a PGD file, you cannot be in a cyclic LBC')
-!END IF
-!
-IF (LWEST_ll())  THEN
-  DO JILOOP = 1,JPHEXT
-    XZS(JILOOP,:) = XZS(NIB,:)
-  END DO
-END IF
-IF (LEAST_ll()) THEN
-  DO JILOOP = NIU-JPHEXT+1,NIU
-    XZS(JILOOP,:)=XZS(NIU-JPHEXT,:)
-  END DO
-END IF
-IF (LSOUTH_ll()) THEN
-  DO JJLOOP = 1,JPHEXT
-    XZS(:,JJLOOP)=XZS(:,NJB)
-  END DO
-END IF
-IF (LNORTH_ll()) THEN
-  DO JJLOOP =NJU-JPHEXT+1,NJU
-    XZS(:,JJLOOP)=XZS(:,NJU-JPHEXT)
-  END DO
-END IF
-!
-IF ( LEN_TRIM(CPGD_FILE) == 0  .OR. .NOT. LREAD_ZS) THEN
-  IF (LSLEVE) THEN
-    CALL ZSMT_PIC(NSLEVE,XSMOOTH_ZS)
-  ELSE
-    XZSMT(:,:) = 0.
-  END IF
-END IF
-!
-IF (LCARTESIAN) THEN
-  CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,XJ)
-  XMAP=1.
-ELSE
-  CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, &
-                   XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,XJ)
-END IF
-!*       5.4.1  metrics coefficients and update halos:
-!
-CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ)                         
-!
-!*       5.1.3  Compute the localization in index space of the vertical profile
-!               in CSTN and RSOU cases  :
-!
-IF (CTYPELOC =='LATLON' ) THEN  
-  IF (.NOT.LCARTESIAN) THEN                            ! compute (x,y) if 
-    CALL SM_XYHAT(XLATORI,XLONORI,                 &   ! the localization 
-                  XLATLOC,XLONLOC,XXHATLOC,XYHATLOC)   ! is given in latitude 
-  ELSE                                                 ! and longitude
-    WRITE(NLUOUT,FMT=*) 'CTYPELOC CANNOT BE LATLON IN CARTESIAN GEOMETRY'
-    WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
-   !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CTYPELOC cannot be LATLON in cartesian geometry')
-  END IF 
-END IF  
-!
-ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
-CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,NRESP) !//
-CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,NRESP) !//
-IF (CTYPELOC /= 'IJGRID') THEN                                               
-  NILOC = MINLOC(ABS(XXHATLOC-ZXHAT_ll(:)))
-  NJLOC = MINLOC(ABS(XYHATLOC-ZYHAT_ll(:)))
-END IF
-!
-IF ( L1D .AND. ( NILOC(1) /= 1 .OR. NJLOC(1) /= 1 ) ) THEN
-  NILOC = 1
-  NJLOC = 1
-  WRITE(NLUOUT,FMT=*) 'FOR 1D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT &
-                      & I=1 AND J=1 (CENTRAL VERTICAL WITHOUT HALO)'
-END IF
-!
-IF ( L2D .AND. ( NJLOC(1) /= 1 ) ) THEN
-  NJLOC = 1
-  WRITE(NLUOUT,FMT=*) 'FOR 2D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT &
-                      & J=1 (CENTRAL PLANE WITHOUT HALO)'
-END IF
-!
-!*       5.2    Prognostic variables (not multiplied by  rhoJ) : u,v,w,theta,r
-!               and 1D anelastic reference state
-!
-!
-!*       5.2.1  Use a Radiosounding : CIDEAL='RSOU''
-!
-IF (CIDEAL == 'RSOU') THEN
-  WRITE(NLUOUT,FMT=*) 'CIDEAL="RSOU", attempt to read DATE'
-  CALL POSKEY(NLUPRE,NLUOUT,'RSOU')
-  READ(NLUPRE,FMT=*)  NYEAR,NMONTH,NDAY,XTIME
-  TDTCUR = DATE_TIME(DATE(NYEAR,NMONTH,NDAY),XTIME)
-  TDTEXP = TDTCUR
-  TDTSEG = TDTCUR
-  TDTMOD = TDTCUR
-  WRITE(NLUOUT,FMT=*) 'CIDEAL="RSOU", ATTEMPT TO PROCESS THE SOUNDING DATA'
-  IF (LGEOSBAL) THEN
-    CALL SET_RSOU(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, &
-                  XJ,LSHIFT,XCORIOZ)
-  ELSE
-    CALL SET_RSOU(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, &
-                  XJ,LSHIFT)
-  END IF
-!
-!*       5.2.2  N=cste  and U(z) : CIDEAL='CSTN'
-!
-ELSE IF (CIDEAL == 'CSTN') THEN
-  WRITE(NLUOUT,FMT=*) 'CIDEAL="CSTN", attempt to read DATE'
-  CALL POSKEY(NLUPRE,NLUOUT,'CSTN')
-  READ(NLUPRE,FMT=*)  NYEAR,NMONTH,NDAY,XTIME
-  TDTCUR = DATE_TIME(DATE(NYEAR,NMONTH,NDAY),XTIME)
-  TDTEXP = TDTCUR
-  TDTSEG = TDTCUR
-  TDTMOD = TDTCUR
-  WRITE(NLUOUT,FMT=*) 'CIDEAL="CSTN", ATTEMPT TO PROCESS THE SOUNDING DATA'
-  IF (LGEOSBAL) THEN
-    CALL SET_CSTN(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, &
-                  XJ,LSHIFT,XCORIOZ)
-  ELSE
-    CALL SET_CSTN(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, &
-                  XJ,LSHIFT)
-  END IF
-!
-END IF 
-!
-!*       5.3    Forcing variables
-!
-IF (LFORCING) THEN
-  WRITE(NLUOUT,FMT=*) 'FORCING IS ENABLED, ATTEMPT TO SET FORCING FIELDS'
-  CALL POSKEY(NLUPRE,NLUOUT,'ZFRC ','PFRC')
-  CALL SET_FRC(TZEXPREFILE)
-END IF
-!
-!! ---------------------------------------------------------------------
-! Modif PP ADV FRC
-! 5.4.2 initialize profiles for adv forcings
-IF (L2D_ADV_FRC) THEN
-    WRITE(NLUOUT,FMT=*) 'L2D_ADV_FRC IS SET TO  TRUE'
-    WRITE(NLUOUT,FMT=*) 'ADVECTING FORCING USED IS USER MADE, NOT STANDARD ONE ' 
-    WRITE(NLUOUT,FMT=*) 'IT IS FOR 2D IDEALIZED WAM STUDY ONLY ' 
-   CALL POSKEY(NLUPRE,NLUOUT,'ZFRC_ADV')
-   CALL SET_ADVFRC(TZEXPREFILE)
-ENDIF
-IF (L2D_REL_FRC) THEN
-    WRITE(NLUOUT,FMT=*) 'L2D_REL_FRC IS SET TO  TRUE'
-    WRITE(NLUOUT,FMT=*) 'RELAXATION FORCING USED IS USER MADE, NOT STANDARD ONE ' 
-    WRITE(NLUOUT,FMT=*) 'IT IS FOR 2D IDEALIZED WAM STUDY ONLY ' 
-   CALL POSKEY(NLUPRE,NLUOUT,'ZFRC_REL')
-   CALL SET_RELFRC(TZEXPREFILE)
-ENDIF
-!*       5.4    3D Reference state variables :
-!
-!
-!*       5.4.1  metrics coefficients and update halos:
-!
-CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-!*       5.4.2  3D reference state :
-!
-CALL SET_REF(0,TFILE_DUMMY,                        &
-             XZZ,XZHAT,XJ,XDXX,XDYY,CLBCX,CLBCY,   &
-             XREFMASS,XMASS_O_PHI0,XLINMASS,       &
-             XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ)
-!
-!
-!*       5.5.1  Absolute pressure :
-!
-!
-!*       5.5.2  Total mass of dry air Md computation :
-!
-CALL TOTAL_DMASS(XJ,XRHODREF,XDRYMASST)
-!
-!
-!*       5.6    Complete prognostic variables (multipliy by  rhoJ) at time t :
-!
-! U grid   : gridpoint 2
-IF (LWEST_ll())  XUT(1,:,:)    = 2.*XUT(2,:,:) - XUT(3,:,:)
-! V grid   : gridpoint 3
-IF (LSOUTH_ll())  XVT(:,1,:)    = 2.*XVT(:,2,:) - XVT(:,3,:)
-! SV : gridpoint 1
-XSVT(:,:,:,:) = 0.
-!
-!
-!*       5.7   Larger scale fields initialization :
-!
-XLSUM(:,:,:) = XUT(:,:,:)        ! these fields do not satisfy the 
-XLSVM(:,:,:) = XVT(:,:,:)        ! lower boundary condition but are 
-XLSWM(:,:,:) = XWT(:,:,:)        ! in equilibrium
-XLSTHM(:,:,:)= XTHT(:,:,:)
-XLSRVM(:,:,:)= XRT(:,:,:,1)
-!
-! enforce the vertical homogeneity under the ground and above the top of
-! the model for the LS fields
-!
-XLSUM(:,:,NKB-1)=XLSUM(:,:,NKB)
-XLSUM(:,:,NKU)=XLSUM(:,:,NKU-1)
-XLSVM(:,:,NKB-1)=XLSVM(:,:,NKB)
-XLSVM(:,:,NKU)=XLSVM(:,:,NKU-1)
-XLSWM(:,:,NKB-1)=XLSWM(:,:,NKB)
-XLSWM(:,:,NKU)=XLSWM(:,:,NKU-1)
-XLSTHM(:,:,NKB-1)=XLSTHM(:,:,NKB)
-XLSTHM(:,:,NKU)=XLSTHM(:,:,NKU-1)
-IF ( NRR > 0 ) THEN
-  XLSRVM(:,:,NKB-1)=XLSRVM(:,:,NKB)
-  XLSRVM(:,:,NKU)=XLSRVM(:,:,NKU-1)
-END IF
-!
-ILBX=SIZE(XLBXUM,1)
-ILBY=SIZE(XLBYUM,2)
-IF(LWEST_ll() .AND. .NOT. L1D) THEN
-  XLBXUM(1:NRIMX+JPHEXT,        :,:)     = XUT(2:NRIMX+JPHEXT+1,        :,:)
-  XLBXVM(1:NRIMX+JPHEXT,        :,:)     = XVT(1:NRIMX+JPHEXT,        :,:)
-  XLBXWM(1:NRIMX+JPHEXT,        :,:)     = XWT(1:NRIMX+JPHEXT,        :,:)
-  XLBXTHM(1:NRIMX+JPHEXT,        :,:)   = XTHT(1:NRIMX+JPHEXT,        :,:)
-  XLBXRM(1:NRIMX+JPHEXT,        :,:,:)   = XRT(1:NRIMX+JPHEXT,        :,:,:)
-ENDIF
-IF(LEAST_ll() .AND. .NOT. L1D) THEN
-  XLBXUM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:)     = XUT(NIU-NRIMX-JPHEXT+1:NIU,    :,:)
-  XLBXVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:)     = XVT(NIU-NRIMX-JPHEXT+1:NIU,    :,:)
-  XLBXWM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:)     = XWT(NIU-NRIMX-JPHEXT+1:NIU,    :,:)
-  XLBXTHM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:)   = XTHT(NIU-NRIMX-JPHEXT+1:NIU,    :,:)
-  XLBXRM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,:)   = XRT(NIU-NRIMX-JPHEXT+1:NIU,    :,:,:)
-ENDIF
-IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) THEN
-  XLBYUM(:,1:NRIMY+JPHEXT,        :)     = XUT(:,1:NRIMY+JPHEXT,      :)
-  XLBYVM(:,1:NRIMY+JPHEXT,        :)     = XVT(:,2:NRIMY+JPHEXT+1,      :)
-  XLBYWM(:,1:NRIMY+JPHEXT,        :)     = XWT(:,1:NRIMY+JPHEXT,  :)
-  XLBYTHM(:,1:NRIMY+JPHEXT,        :)    = XTHT(:,1:NRIMY+JPHEXT,      :)
-  XLBYRM(:,1:NRIMY+JPHEXT,        :,:)   = XRT(:,1:NRIMY+JPHEXT,      :,:)
-ENDIF
-IF(LNORTH_ll().AND. .NOT. L1D .AND. .NOT. L2D) THEN
-  XLBYUM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:)     = XUT(:,NJU-NRIMY-JPHEXT+1:NJU,  :)
-  XLBYVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:)     = XVT(:,NJU-NRIMY-JPHEXT+1:NJU,  :)
-  XLBYWM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:)     = XWT(:,NJU-NRIMY-JPHEXT+1:NJU,  :)
-  XLBYTHM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:)    = XTHT(:,NJU-NRIMY-JPHEXT+1:NJU,  :)
-  XLBYRM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,:)   = XRT(:,NJU-NRIMY-JPHEXT+1:NJU,  :,:)
-ENDIF
-DO JSV = 1, NSV
-  IF(LWEST_ll() .AND. .NOT. L1D) &
-  XLBXSVM(1:NRIMX+JPHEXT,        :,:,JSV)   = XSVT(1:NRIMX+JPHEXT,        :,:,JSV)
-  IF(LEAST_ll() .AND. .NOT. L1D) &
-  XLBXSVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,JSV)   = XSVT(NIU-NRIMX-JPHEXT+1:NIU,    :,:,JSV)
-  IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) &
-  XLBYSVM(:,1:NRIMY+JPHEXT,        :,JSV)   = XSVT(:,1:NRIMY+JPHEXT,      :,JSV)
-  IF(LNORTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) &
-  XLBYSVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,JSV)   = XSVT(:,NJU-NRIMY-JPHEXT+1:NJU,  :,JSV)
-END DO
-!
-!
-!*       5.8   Add a perturbation to a basic state :
-!
-IF(LPERTURB) CALL SET_PERTURB(TZEXPREFILE)
-!
-!
-!*       5.9   Anelastic correction and pressure:
-!
-IF (.NOT.LOCEAN) THEN
-  CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
-  IF ( .NOT. L1D ) CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ)
-  CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
-END IF
-!
-!
-!*       5.10  Compute THETA, vapor and cloud mixing ratio
-!
-IF (CIDEAL == 'RSOU') THEN
-    ALLOCATE(ZEXN(NIU,NJU,NKU))         
-  ALLOCATE(ZT(NIU,NJU,NKU))  
-  ALLOCATE(ZTHL(NIU,NJU,NKU))              
-  ALLOCATE(ZRT(NIU,NJU,NKU))              
-  ALLOCATE(ZCPH(NIU,NJU,NKU))        
-  ALLOCATE(ZLVOCPEXN(NIU,NJU,NKU))        
-  ALLOCATE(ZLSOCPEXN(NIU,NJU,NKU))  
-  ALLOCATE(ZFRAC_ICE(NIU,NJU,NKU))
-  ALLOCATE(ZRSATW(NIU,NJU,NKU))
-  ALLOCATE(ZRSATI(NIU,NJU,NKU))             
-  ALLOCATE(ZBUF(NIU,NJU,NKU,16))
-  ZRT=XRT(:,:,:,1)+XRT(:,:,:,2)+XRT(:,:,:,4)
-IF (LOCEAN) THEN
-  ZEXN(:,:,:)= 1.
-  ZT=XTHT
-  ZTHL=XTHT
-  ZCPH=XCPD+ XCPV * XRT(:,:,:,1)
-  ZLVOCPEXN = XLVTT
-  ZLSOCPEXN = XLSTT
-ELSE
-  ZEXN=(XPABST/XP00) ** (XRD/XCPD)
-  ZT=XTHT*(XPABST/XP00)**(XRD/XCPD)
-  ZCPH=XCPD+ XCPV * XRT(:,:,:,1)+ XCL *XRT(:,:,:,2)  + XCI * XRT(:,:,:,4)
-  ZLVOCPEXN = (XLVTT + (XCPV-XCL) * (ZT-XTT))/(ZCPH*ZEXN)
-  ZLSOCPEXN = (XLSTT + (XCPV-XCI) * (ZT-XTT))/(ZCPH*ZEXN)
-  ZTHL=XTHT-ZLVOCPEXN*XRT(:,:,:,2)-ZLSOCPEXN*XRT(:,:,:,4)
-  CALL TH_R_FROM_THL_RT(CST, NEB, SIZE(ZFRAC_ICE), 'T',ZFRAC_ICE,XPABST,ZTHL,ZRT,XTHT,XRT(:,:,:,1), &
-                        XRT(:,:,:,2),XRT(:,:,:,4),ZRSATW, ZRSATI,OOCEAN=.FALSE.,&
-                        PBUF=ZBUF)
-END IF
-  DEALLOCATE(ZEXN)         
-  DEALLOCATE(ZT)       
-  DEALLOCATE(ZCPH)        
-  DEALLOCATE(ZLVOCPEXN)        
-  DEALLOCATE(ZLSOCPEXN)
-  DEALLOCATE(ZTHL) 
-  DEALLOCATE(ZRT)
-  DEALLOCATE(ZBUF)
-! Coherence test
-  IF ((.NOT. LUSERI) ) THEN
-    IF (MAXVAL(XRT(:,:,:,4))/= 0) THEN
-       WRITE(NLUOUT,FMT=*) "*********************************"             
-       WRITE(NLUOUT,FMT=*) 'WARNING'      
-       WRITE(NLUOUT,FMT=*) 'YOU HAVE LUSERI=FALSE '
-       WRITE(NLUOUT,FMT=*) ' BUT WITH YOUR RADIOSOUNDING Ri/=0'
-       WRITE(NLUOUT,FMT=*) MINVAL(XRT(:,:,:,4)),MAXVAL(XRT(:,:,:,4))
-       WRITE(NLUOUT,FMT=*) "*********************************"       
-    ENDIF  
-  ENDIF
-  IF ((.NOT. LUSERC)) THEN
-    IF (MAXVAL(XRT(:,:,:,2))/= 0) THEN          
-      WRITE(NLUOUT,FMT=*) "*********************************"
-      WRITE(NLUOUT,FMT=*) 'WARNING'    
-      WRITE(NLUOUT,FMT=*) 'YOU HAVE LUSERC=FALSE '
-      WRITE(NLUOUT,FMT=*) 'BUT WITH YOUR RADIOSOUNDING RC/=0'
-      WRITE(NLUOUT,FMT=*) MINVAL(XRT(:,:,:,2)),MAXVAL(XRT(:,:,:,2))      
-      WRITE(NLUOUT,FMT=*) "*********************************"
-    ENDIF  
-  ENDIF
-      ! on remet les bonnes valeurs pour NRR
-  IF(CCLOUD=='NONE') NRR=1
-  IF(CCLOUD=='REVE') NRR=2
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*  	 6.    INITIALIZE SCALAR VARIABLES FOR CHEMISTRY
-!   	       -----------------------------------------
-!
-!  before calling chemistry
-CCONF = 'START'
-CSTORAGE_TYPE='TT'                  
-CALL IO_File_close(TZEXPREFILE)  ! Close the EXPRE file
-!
-IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB)
-!
-! Initialization LIMA variables by ORILAM 
-IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) &
-    CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT, XZZ)
-!-------------------------------------------------------------------------------
-!
-!*  	 7.    INITIALIZE LEVELSET FOR IBM
-!   	       ---------------------------
-!
-IF (LIBM_LSF) THEN
-  !
-  ! In their current state, the IBM can only be used in
-  ! combination with cartesian coordinates and flat orography.
-  !
-  IF ((CZS.NE."FLAT").OR.(.NOT.LCARTESIAN)) THEN
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','IBM can only be used with flat ground')
-  ENDIF
-  !
-  ALLOCATE(XIBM_LS(NIU,NJU,NKU,4))
-  !
-  CALL IBM_INIT_LS(XIBM_LS)
-  !
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*   	 8.    WRITE THE FMFILE 
-!   	       ----------------
-!
-CALL SECOND_MNH2(ZTIME1)
-!
-NNPRAR = 22 + 2*(NRR+NSV)   &    ! 22 = number of grid variables + reference 
-       + 8 + 17                  ! state variables + dimension variables
-                                 ! 2*(8+NRR+NSV) + 1 = number of prognostic
-                                 ! variables at time t and t-dt
-NTYPE=1
-!
-CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'MNH','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
-!
-CALL IO_File_open(TINIFILE)
-!
-CALL IO_Header_write(TINIFILE)
-!
-CALL WRITE_DESFM_n(1,TINIFILE)
-!
-CALL WRITE_LFIFM_n(TINIFILE,'')  ! There is no DAD model for PREP_IDEAL_CASE
-!
-CALL SECOND_MNH2(ZTIME2)
-!
-XT_STORE = XT_STORE + ZTIME2 - ZTIME1
-!
-!-------------------------------------------------------------------------------
-!
-!*     9.     EXTERNALIZED SURFACE
-!             --------------------
-!
-!
-IF (CSURF =='EXTE') THEN
-  IF (LEN_TRIM(CINIFILEPGD)==0) THEN
-    IF (LEN_TRIM(CPGD_FILE)/=0) THEN
-      CINIFILEPGD=CPGD_FILE
-    ELSE
-      !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CINIFILEPGD needed in NAM_LUNITn')
-    ENDIF      
-  ENDIF
-  CALL SURFEX_ALLOC_LIST(1)
-  YSURF_CUR => YSURF_LIST(1)
-  CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)              
-  ! Switch to model 1 surface variables
-  CALL GOTO_SURFEX(1)
-  !* definition of physiographic fields
-  ! computed ...
-  IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN
-    TPGDFILE => TINIFILE
-    CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.,HDIR='-')
-    CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
-    CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
-    CALL IO_File_open (TINIFILEPGD)
-    TPGDFILE => TINIFILEPGD
-  ELSE
-  ! ... or read from file.
-    CALL INIT_PGD_SURF_ATM( YSURF_CUR, 'MESONH', 'PGD',               &
-                            '                            ', '      ', &
-                            TDTCUR%nyear, TDTCUR%nmonth,              &
-                            TDTCUR%nday, TDTCUR%xtime                 )
-!
-  END IF
-  !
-  !* forces orography from atmospheric file
-  IF (.NOT. LREAD_ZS) CALL MNHPUT_ZS_n
-  !
-  ! on ecrit un nouveau fichier PGD que s'il n'existe pas
-  IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN
-    !* writing of physiographic fields in the file
-    CSTORAGE_TYPE='PG'
-    !
-    CALL IO_Header_write(TINIFILEPGD)
-    CALL IO_Field_write(TINIFILEPGD,'JPHEXT', JPHEXT)    
-    CALL IO_Field_write(TINIFILEPGD,'SURF','EXTE')
-    CALL IO_Field_write(TINIFILEPGD,'L1D', L1D)
-    CALL IO_Field_write(TINIFILEPGD,'L2D', L2D)
-    CALL IO_Field_write(TINIFILEPGD,'PACK',LPACK)
-    CALL WRITE_HGRID(1,TINIFILEPGD)
-    !
-    TOUTDATAFILE => TINIFILEPGD
-    !
-    TFILE_SURFEX => TINIFILEPGD
-    ALLOCATE(YSURF_CUR%DUO%CSELECT(0))    
-    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
-    NULLIFY(TFILE_SURFEX)
-    CSTORAGE_TYPE='TT'
-  ENDIF
-  !
-  !
-  !* rereading of physiographic fields and definition of prognostic fields
-  !* writing of all surface fields
-  TOUTDATAFILE => TINIFILE
-  TFILE_SURFEX => TINIFILE
-  CALL PREP_SURF_MNH('                            ','      ')
-  NULLIFY(TFILE_SURFEX)
-ELSE
-  CSURF = "NONE"
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*     10.     CLOSES THE FILE
-!             ---------------
-!
-IF (CSURF =='EXTE' .AND. (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM)) THEN
-  CALL IO_File_close(TINIFILEPGD)
-ENDIF
-CALL IO_File_close(TINIFILE)
-IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN
-  CALL IO_File_close(TPGDFILE)
-ENDIF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*      11.    PRINTS ON OUTPUT-LISTING
-!              ------------------------
-!
-IF (NVERB >= 5) THEN
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: LCARTESIAN,CIDEAL,CZS=', &
-                                    LCARTESIAN,CIDEAL,CZS 
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: LUSERV=',LUSERV
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: XLON0,XLAT0,XBETA,XRPK,XLONORI,XLATORI=', &
-                                    XLON0,XLAT0,XBETA,XRPK,XLONORI,XLATORI
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: XDELTAX,XDELTAY=',XDELTAX,XDELTAY
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: NVERB=',NVERB
-  IF(LCARTESIAN) THEN
-    WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: No map projection used.'
-  ELSE
-    IF (XRPK == 1.) THEN
-      WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Polar stereo used.'
-    ELSE IF (XRPK == 0.) THEN
-      WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Mercator used.'
-    ELSE
-      WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Lambert used, cone factor=',XRPK 
-    END IF
-  END IF
-END IF
-!
-IF (NVERB >= 5) THEN
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: IIB, IJB, IKB=',NIB,NJB,NKB
-  WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: IIU, IJU, IKU=',NIU,NJU,NKU
-END IF
-!
-!
-!*       28.1   print statistics!
-!
-  !
-  CALL SECOND_MNH2(ZTIME2)
-  XT_START=XT_START+ZTIME2-ZEND
-  !
-  ! Set File Timing OUTPUT
-  !
-  CALL SET_ILUOUT_TIMING(TLUOUT0)
-  !
-  ! Compute global time
-  !
-  CALL TIME_STAT_ll(XT_START,ZTOT)
-  !
-  !
-  IMI = 1
-  CALL TIME_HEADER_ll(IMI)
-  !
-  CALL TIME_STAT_ll(XT_STORE,ZTOT,      ' STORE-FIELDS','=')
-  CALL  TIMING_SEPARATOR('+')
-  CALL  TIMING_SEPARATOR('+')  
-  WRITE(YMI,FMT="(I0)") IMI
-  CALL TIME_STAT_ll(XT_START,ZTOT,      ' MODEL'//YMI,'+')
-  CALL  TIMING_SEPARATOR('+')
-  CALL  TIMING_SEPARATOR('+')
-  CALL  TIMING_SEPARATOR('+')
-WRITE(NLUOUT,FMT=*) ' '
-WRITE(NLUOUT,FMT=*) '****************************************************'
-WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *'
-WRITE(NLUOUT,FMT=*) '****************************************************'
-!
-CALL FINALIZE_MNH()
-!
-!
-CONTAINS
-INCLUDE "th_r_from_thl_rt.func.h"
-INCLUDE "compute_frac_ice.func.h"
-END PROGRAM PREP_IDEAL_CASE
diff --git a/src/mesonh/ext/prep_real_case.f90 b/src/mesonh/ext/prep_real_case.f90
deleted file mode 100644
index 01b3b16db84189f7722de5771b398d9bcd50f45d..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/prep_real_case.f90
+++ /dev/null
@@ -1,1421 +0,0 @@
-!MNH_LIC Copyright 1995-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.
-!-----------------------------------------------------------------
-!     ######################
-      PROGRAM PREP_REAL_CASE
-!     ######################
-!
-!!****  *PREP_REAL_CASE* - program to write an initial FM file from real case
-!!                         situation.
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!       The purpose of this program is to prepare an initial meso-NH file
-!!    (LFIFM and DESFM files) filled by some fields of a real situation. 
-!!    General data are given by the MESO-NH user in the namelist file 
-!!    'PRE_REAL1.nam'. The fields are obtained from three sources:
-!!        - an atmospheric input file, which can be:
-!!          * an Aladin file, itself obtained from an Arpege file with
-!!            the Aladin routine "FULLPOS".
-!!          * a grib file (ECMWF, Grib Arpege or Grib Aladin)
-!!          * a MESONH file
-!!        - an physiographic data file.
-!!
-!!       1) Fields obtained from the Atmospheric file:
-!!          -----------------------------------------
-!!
-!!      - the projection parameters (checked with PGD file): 
-!!                 reference latitude and longitude
-!!                 parameter of projection
-!!                 angle of rotation of the domain
-!!
-!!      - the horizontal grid definition (checked with PGD file):
-!!                 grid mesh
-!!                 latitude and longitude of the reference point 
-!!                                   (with data from PRE_REAL1.nam)
-!!
-!!      - thermodynamical 3D and 2D fields:
-!!                 potential temperature
-!!                 vapor mixing ratio
-!!
-!!      - dynamical fields:
-!!                 three components of the wind
-!!
-!!      - reference anelastic state variables:
-!!                 profile of virtual potential temperature
-!!                 profile of dry density
-!!                 Exner function at model top
-!!
-!!      - total dry air mass
-!!
-!!
-!!       2) Fields obtained from the physiographic data file:
-!!          ------------------------------------------------
-!!
-!!      - the projection parameters: 
-!!                 reference latitude and longitude
-!!                 parameter of projection
-!!                 angle of rotation of the domain
-!!
-!!      - the horizontal grid definition:
-!!                 grid mesh
-!!                 latitude and longitude of the reference point 
-!!                                   (with data from PRE_REAL1.nam)
-!!      - physiografic fields: (orographic, vegetation, soil and radiation fields)
-!!
-!!
-!!       3) Data obtained from the namelist file PRE_REAL1.nam:
-!!          --------------------------------------------------
-!! 
-!!      - type of equations system
-!!      - vertical grid definition
-!!      - number of points in x and y directions
-!!      - level of verbosity
-!!      - name of the different files
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      In this program, once the MESO-NH domain is calculated, all the
-!!      2D or 3D fields are computed on the MESO-NH horizontal domain WITH 
-!!      the external points. This is particularly important for the large
-!!      scale fields during the MESO-NH run.
-!!
-!!   1) The following PREP_REAL_CASE program:
-!!
-!!      - set default values for global variables which will be written in 
-!!        DESFM file (by calling DEFAULT_DESFM1); lateral boundary conditions
-!!        are open.
-!!
-!!      - opens the different files (by calling OPEN_PRC_FILES).
-!!
-!!      - initializes physical constants (by calling INI_CST).
-!!
-!!      - initializes the horizontal domain from the data read in the 
-!!        descriptive part of the Aladin file and the directives read in the
-!!        namelist file (routines READ_GENERAL and SET_SUBDOMAIN in 
-!!        READ_ALL_DATA). This MESO-NH domain is a part of the Aladin domain.
-!!
-!!      - initializes global variables from namelists and the MESO-NH
-!!        vertical grid definition variables in the namelist file
-!!        (routine READ_VER_GRID).
-!!
-!!      - initializes the physiographic 2D fields from the physiographic data
-!!        file, in particular the MESO-NH orography.
-!!
-!!      - reads the 3D and 2D variable fields in the Grib file
-!!        (routine READ_ALL_DATA_GRIB_CASE),
-!!        if  HATMFILETYPE='GRIBEX':
-!!           absolute temperature
-!!           specific humidity
-!!           horizontal contravariant wind
-!!           surface pressure
-!!           large scale orography
-!!
-!!      - reads the 3D and 2D variable fields in the input MESONH file
-!!        (routine READ_ALL_DATA_MESONH_CASE), if HATMFILETYPE='MESONH':
-!!           potential temperature
-!!           vapor mixing ratio
-!!           horizontal wind
-!!           other mixing ratios
-!!           turbulence prognostic and semi-prognostic variables
-!!           large scale orography
-!!
-!!      - computes some geometric variables (routines SM_GRIDPROJ and METRICS),
-!!        in particular:
-!!          * altitude 3D array
-!!          * metric coefficients
-!!          * jacobian
-!!
-!!      - initializes MESO-NH thermodynamical fields:
-!!          * changes of variables (routine VER_PREP_mmmmmm_CASE):
-!!              absolute temperature --> virtual potential temperature
-!!              specific humidity    --> vapor mixing ratio
-!!          * interpolates/extrapolates the fields from the large scale 
-!!            orography to the MESO-NH one (routine VER_INT_THERMO in
-!!            VER_THERMO, by using a shifting function method).
-!!            in water vapor case, the interpolations are always performed
-!!            on relative humidity.
-!!          * the pressure is computed on each grid by integration of the
-!!            hydrostatic equation from bottom or top. When input atmospheric
-!!            file is a MESO-NH one, information about the difference between
-!!            hydrostatic pressure and total pressure is kept and interpolated
-!!            during the entire PREP_REAL_CASE process.
-!!          * interpolates the fields to the MESO-NH vertical grid
-!!            (also by routine VER_INT_THERMO in VER_THERMO).
-!!          * computes the potential temperature (routine VER_THERMO).
-!!          * sets to zero the mixing ratios, except the vapor mixing ratio
-!!            (VER_THERMO).
-!!
-!!      - initializes the reference anelastic state variables (routine SET_REFZ
-!!        in VER_THERMO).
-!!
-!!      - computes the total dry air mass (routine DRY_MASS in VER_THERMO).
-!!
-!!      - initializes MESO-NH dynamical variables:
-!!          * changes Aladin contravariant wind into true horizontal wind
-!!            (in subroutine VER_PREP).
-!!          * interpolates/extrapolates the momentum from the large scale 
-!!            orography to the MESO-NH one (routine VER_INT_DYN in
-!!            VER_DYN, by using a shifting function method).
-!!          * interpolates the fields to the MESO-NH vertical grid
-!!            (also by routine VER_INT_DYN in VER_DYN). The fields
-!!            are located on a horizontal Arakawa A-grid, as the Aladin fields.
-!!          * The momentum is interpolated to the Arakawa C-grid 
-!!            (routine VER_DYN).
-!!          * A first guess of the vertical momentum, verifying the 
-!!            uncompressible continuity equation and the material lower boundary
-!!            condition against the ground, is computed (routine WGUESS).
-!!          * computes the final non-divergent wind field (routine 
-!!            ANEL_BALANCE).
-!!
-!!      - copies the interpolated fields also at t-dt and in the large scale
-!!        fields (routine INI_PROG_VAR).
-!!  
-!!      - writes the DESFM and LFIFM files (routines WRITE_DESFM1 and
-!!        WRITE_LFIFM1).
-!!
-!!
-!!   2) Some conventions are used in this program and its subroutines because
-!!      of the number of different grids and fields:
-!!
-!!      - subscripts:
-!!          * the subscripts I and J are used for all the horizontal grid.
-!!          * the subcript K is used for the MESO-NH vertical grid (increasing
-!!            from bottom to top).
-!!          * the subscript L is used for the Aladin or input Mesonh grids
-!!            (increasing from bottom to top).
-!!
-!!      - suffixes:
-!!          * _LS: 
-!!              If used for a geographic or horizontal grid definition variable,
-!!               this variable is connected to the large horizontal domain.
-!!              If used for a surface variable, this variable corresponds to
-!!               the large scale orography, and therefore will be modified.
-!!              If used for another variable, this variable is discretized
-!!               on the Aladin or input MESONH file vertical grid 
-!!               (large-scale orography with input vertical discretization,
-!!                either coming from eta levels or input Gal-Chen grid).
-!!          * _MX:
-!!              Such a variable is discretized on the mixed grid.
-!!              (large-scale orography with output Gal-Chen vertical grid
-!!               discretization)
-!!          * _SH:
-!!              Such a variable is discretized on the shifted grid.
-!!              (fine orography with a shifted vertical grid, NOT Gal-Chen)
-!!          * no suffix:
-!!              The variable is discretized on the MESO-NH grid.
-!!              (fine orography with output Gal-Chen vertical grid discretization)
-!!
-!!      - additional pre-suffixes: (for pressure, Exner and altitude fields)
-!!          * MASS:
-!!              The variable is discretized on a mass point
-!!          * FLUX:
-!!              The variable is discretized on a flux point
-!!
-!!
-!!      - names of variables: for a physical variable VAR:
-!!          * pVARs        is the variable itself.
-!!          * pRHODVARs    is the variable multiplied by the dry density rhod.
-!!          * pRHODJVARs   is the variable multiplied by the dry density rhod
-!!                         and the Jacobian.            
-!!          * pRVARs       is the variable multiplied by rhod_ref, the anelastic
-!!                         reference state dry density and the Jacobian.
-!!        where p and s are the appropriate prefix and suffix.
-!!
-!!      - allocation of arrays: the arrays are allocated
-!!          * just before their initialization for the general arrays stored in 
-!!            modules.
-!!          * in the subroutine in which they are declared for the local arrays 
-!!            in a subroutine.
-!!          * in the routine in which they are initialized for the arrays 
-!!            defined in the monitor PREP_REAL_CASE. In this case they are in 
-!!            fact passed as pointer to the subroutines to allow their 
-!!            dynamical allocation (exception which confirms the rule: ZJ).
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!      Routine DEFAULT_DESFM1 : to set default values for variables which can be
-!!                              contained in DESFM file.
-!!      Routine OPEN_PRC_FILES: to open all files.
-!!      Routine INI_CST       : to initialize physical constants.
-!!      Routine READ_ALL_DATA_GRIB_CASE : to read all input data.
-!!      Routine READ_ALL_DATA_MESONH_CASE : to read all input data.
-!!      Routine SM_GRIDPROJ   : to compute some grid variables, in case of 
-!!                              conformal projection.
-!!      Routine METRICS       : to compute metric coefficients.
-!!      Routine VER_PREP_GRIBEX_CASE      : to prepare the interpolations.
-!!      Routine VER_PREP_MESONH_CASE      : to prepare the interpolations.
-!!      Routine VER_THERMO    : to perform the interpolation of thermodynamical
-!!                              variables.
-!!      Routine VER_DYN       : to perform the interpolation of dynamical
-!!                              variables.
-!!      Routine INI_PROG_VAR  : to initialize the prognostic varaibles not yet
-!!                              initialized
-!!      Routine WRITE_DESFM1  : to write a DESFM file.
-!!      Routine WRITE_LFIFM1  : to write a LFIFM file.
-!!      Routine IO_File_close : to close a FM-file (DESFM + LFIFM).
-!!
-!!      Module MODE_GRIDPROJ  : contains conformal projection routines
-!!    
-!!      Module MODI_DEFAULT_DESFM1  : interface module for routine DEFAULT_DESFM1
-!!      Module MODI_OPEN_PRC_FILES : interface module for routine OPEN_PRC_FILES
-!!      Module MODI_READ_ALL_DATA_MESONH_CASE : interface module for routine
-!!                                              READ_ALL_DATA_MESONH_CASE
-!!      Module MODI_METRICS        : interface module for routine METRICS
-!!      Module MODI_VER_PREP_GRIBEX_CASE      : interface module for routine
-!!                                              VER_PREP_GRIBEX_CASE
-!!      Module MODI_VER_PREP_MESONH_CASE      : interface module for routine
-!!                                              VER_PREP_MESONH_CASE
-!!      Module MODI_VER_THERMO     : interface module for routine VER_THERMO
-!!      Module MODI_VER_DYN        : interface module for routine VER_DYN
-!!      Module MODI_INI_PROG_VAR   : interface module for routine INI_PROG_VAR
-!!      Module MODI_WRITE_DESFM1   : interface module for routine WRITE_DESFM1
-!!      Module MODI_WRITE_LFIFM1   : interface module for routine WRITE_LFIFM1
-!!      
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!      Module MODD_CONF  : contains configuration variables for all models.
-!!         NVERB   : verbosity level for output-listing
-!!      Module MODD_CONF1 : contains configuration variables for model 1.
-!!         NRR     : number of moist variables
-!!      Module MODD_LUNIT : contains logical unit and names of files.
-!!      Module MODD_LUNIT : contains logical unit and names of files (model1).
-!!         CINIFILE: name of the FM file which will be used for the MESO-NH run.
-!!      Module MODD_GRID1 : contains grid variables.
-!!         XLAT    : latitude of the grid points
-!!         XLON    : longitudeof the grid points
-!!         XXHAT   : position xhat in the conformal plane
-!!         XYHAT   : position yhat in the conformal plane
-!!         XDXHAT  : horizontal local meshlength on the conformal plane
-!!         XDYHAT  : horizontal local meshlength on the conformal plane
-!!         XZS     : MESO-NH orography
-!!         XZZ     : altitude
-!!         XZHAT   : height zhat
-!!         XMAP    : map factor
-!!      Module MODD_LBC1 : contains declaration of lateral boundary conditions
-!!        CLBCX   : X-direction LBC type at left(1) and right(2) boundaries 
-!!        CLBCY   : Y-direction LBC type at left(1) and right(2) boundaries   
-!!      Module MODD_PARAM1 : contains declaration of the parameterizations' names
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Book 2
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!!      V.Masson  Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    01/01/95
-!!                  Sept. 21, 1995  (J.Stein and V.Masson) surface pressure
-!!                  Jan.  09, 1996  (V. Masson) pressure function deduced from
-!!                                  hydrostatic pressure
-!!                  Jan.  31, 1996  (V. Masson) possibility to initialize
-!!                                  atmospheric fields from MESONH file
-!!                  Mar.  18, 1996  (V. Masson) new vertical extrapolation of Ts
-!!                                  in case of initialization with MESONH file
-!!                  Apr   17, 1996  (J. Stein ) change the DEFAULT_DESFM CALL
-!!                  May   25, 1996  (V. Masson) Variable CSTORAGE_TYPE
-!!                  Aug   26, 1996  (V. Masson) Only thinshell approximation is
-!!                                  currently available.
-!!                  Sept  24, 1996  (V. Masson) add writing of varaibles for
-!!                                  nesting ('DAD_NAME', 'DXRATIO', 'DYRATIO')
-!!                  Oct   11, 1996  (V. Masson) L1D and L2D configurations
-!!                  Oct   28, 1996  (V. Masson) add deallocations and NVERB
-!!                                  default set to 1
-!!                  Dec   02, 1996  (V. Masson) vertical interpolation of
-!!                                  surface fields in aladin case
-!!                  Dec   12, 1996  (V. Masson) add LS vertical velocity
-!!                  Jan   16, 1997  (J. Stein)  Durran's anelastic system
-!!                  May   07, 1997  (V. Masson) add LS tke
-!!                  Jun   27, 1997  (V. Masson) add absolute pressure
-!!                  Jul   09, 1997  (V. Masson) add namelist NAM_REAL_CONF
-!!                  Jul   10, 1997  (V. Masson) add LS epsilon
-!!                  Aug   25, 1997  (V. Masson) add computing time analysis
-!!                  Jan   20, 1998  (J. Stein)  add LB and LS fields
-!!                  Apr,  30, 1998  (V. Masson) Large scale VEG and LAI
-!!                  Jun,  04, 1998  (V. Masson) Large scale D2 and Aladin ISBA
-!!                                              files
-!!                  Jun,  04, 1998  (V. Masson) Add new soil interface var.
-!!                  Jan   20, 1999  (J. Stein)  add a Boundaries call
-!!                  March 15  1999  (J. Pettre, V. Bousquet and V. Masson)
-!!                                              initialization from GRIB files
-!!                  Jul       2000 (F.solmon/V.Masson) Adaptation for patch 
-!!                                            according to GRIB or MESONH case
-!!                  Nov   22, 2000  (P.Tulet, I. Mallet) initialization
-!!                                              from GRIB MOCAGE file
-!!                  Fev   01, 2001 (D.Gazen) add module MODD_NSV for NSV variable
-!!                  Jul   02, 2001 (J.Stein) add LCARTESIAN case
-!!                  Oct   15, 2001 (I.Mallet) allow namelists in different orders
-!!                  Dec       2003 (V.Masson) removes surface calls
-!!                  Jun   01, 2002 (O.Nuissier) filtering of tropical cyclone
-!!                  Aou   09, 2005 (D.Barbary) add CDADATMFILE CDADBOGFILE
-!!                   May   2006    Remove KEPS
-!!                  Feb   02, 2012 (C. Mari) interpolation from MOZART
-!!                                  add call to READ_CHEM_NETCDF_CASE &
-!!                                  VER_PREP_NETCDF_CASE 
-!!                  Mar   2012    Add NAM_NCOUT for netcdf output
-!!                  July  2013     (Bosseur & Filippi) Adds Forefire
-!!                  Mars  2014     (J.Escobar) Missing 'full' UPDATE_METRICS for arp2lfi // run
-!!                   April 2014     (G.TANGUY) Add LCOUPLING
-!!                        2014     (M.Faivre)
-!!                  Fevr  2015     (M.Moge) Cleaning up
-!!                  Aug   2015     (M.Moge) removing EXTRAPOL on XDXX and XDYY in part 8
-!!    J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!!    M.Leriche        2015 : add LUSECHEM  dans NAM_CH_CONF 
-!!                  Feb   02, 2012 (C. Mari & BV) interpolation from CAMS
-!!                                  add call to READ_CAMS_NETCDF_CASE &
-!!                                  VER_PREP_NETCDF_CASE 
-!!      Modification    01/2016  (JP Pinty) Add LIMA
-!!      Modification    02/2016  (JP Pinty) Convert CAMS mix ratio to nbr conc
-!
-!!  06/2016     (G.Delautier) phasage surfex 8
-!!    P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
-!!     B.VIE 2016 : LIMA
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
-!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!  S. Bielli      02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes
-!  P. Wautelet 20/03/2019: missing use MODI_INIT_SALT
-!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!  T.Nagel        02/2021: add IBM
-!  P. Wautelet 06/07/2021: use FINALIZE_MNH
-!!  M. Leriche 26/01/2022: add reading of CAMS reanalysis for chemistry
-!!                         and/or for LIMA
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CH_M9_n
-USE MODD_CH_MNHC_n,        ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM
-USE MODD_CONF
-USE MODD_CONF_n
-USE MODD_CST
-USE MODD_DIM_n
-!UPG*PT
-USE MODD_CH_AEROSOL
-USE MODD_DUST,             ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN,&
-                                  LDSTCAMS
-!UPG*PT
-
-USE MODD_DYN_n,            CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR
-USE MODD_FIELD_n
-USE MODD_GR_FIELD_n
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_HURR_CONF
-USE MODD_IBM_LSF,          ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH
-USE MODD_IBM_PARAM_n,      ONLY: XIBM_LS
-USE MODD_IO,               ONLY: TFILEDATA, TFILE_SURFEX
-USE MODD_LBC_n
-USE MODD_LSFIELD_n
-USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
-USE MODD_LUNIT_n,          ONLY: CINIFILE,TINIFILE,TLUOUT
-USE MODD_METRICS_n
-USE MODD_MNH_SURFEX_n
-USE MODD_NESTING
-USE MODD_NSV
-USE MODD_PARAMETERS
-USE MODD_PARAM_n
-USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE
-USE MODD_PREP_REAL
-USE MODD_REF_n
-!UPG*PT
-USE MODD_SALT,             ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT,&
-                                  LSLTCAMS
-USE MODD_CH_AERO_n,        ONLY:  XM3D, XRHOP3D, XSIG3D, XRG3D, XN3D, XCTOTA3D
-!UPG*PT
-USE MODD_TURB_n
-!
-USE MODE_EXTRAPOL
-use mode_field,            only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars
-USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
-USE MODE_GRIDCART
-USE MODE_GRIDPROJ
-USE MODE_IO,               only: IO_Init
-USE MODE_IO_FIELD_READ,    only: IO_Field_read
-USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
-USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
-USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname
-USE MODE_ll
-USE MODE_MODELN_HANDLER
-USE MODE_MPPDB
-USE MODE_MSG
-USE MODE_POS
-USE MODE_SPLITTINGZ_ll
-!
-USE MODI_BOUNDARIES
-USE MODI_COMPARE_DAD
-USE MODI_DEALLOCATE_MODEL1
-USE MODI_DEALLOC_PARA_LL
-USE MODI_DEFAULT_DESFM_n
-USE MODI_ERROR_ON_TEMPERATURE
-USE MODI_IBM_INIT_LS
-USE MODI_INI_PROG_VAR
-USE MODI_INIT_SALT
-USE MODI_LIMA_MIXRAT_TO_NCONC
-USE MODI_METRICS
-USE MODI_MNHREAD_ZS_DUMMY_n
-USE MODI_MNHWRITE_ZS_DUMMY_n
-USE MODI_OPEN_PRC_FILES
-USE MODI_PREP_SURF_MNH
-USE MODI_PRESSURE_IN_PREP
-USE MODI_READ_ALL_DATA_GRIB_CASE
-USE MODI_READ_ALL_DATA_MESONH_CASE
-USE MODI_READ_ALL_NAMELISTS
-!UPG*PT
-!USE MODI_READ_CAMS_DATA_NETCDF_CASE
-!USE MODI_READ_CHEM_DATA_NETCDF_CASE
-USE MODI_READ_CHEM_DATA_MOZART_CASE
-USE MODI_READ_CHEM_DATA_CAMS_CASE
-USE MODI_READ_LIMA_DATA_NETCDF_CASE
-USE MODI_AER2LIMA
-USE MODI_CH_AER_EQM_INIT_n
-!UPG*PT
-USE MODI_READ_VER_GRID
-USE MODI_SECOND_MNH
-USE MODI_SET_REF
-USE MODI_UPDATE_METRICS
-USE MODI_VER_DYN
-USE MODI_VER_PREP_GRIBEX_CASE
-USE MODI_VER_PREP_MESONH_CASE
-USE MODI_VER_PREP_NETCDF_CASE
-USE MODI_VERSION
-USE MODI_VER_THERMO
-USE MODI_WRITE_DESFM_n
-USE MODI_WRITE_LFIFM_n
-!
-USE MODN_CONF,             ONLY: JPHEXT , NHALO
-USE MODN_CONFZ
-USE MODN_PARAM_LIMA
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of local variables
-!              ------------------------------
-!
-CHARACTER(LEN=28)              :: YATMFILE    ! name of the Atmospheric file
-CHARACTER(LEN=6)               :: YATMFILETYPE! type of the Atmospheric file
-CHARACTER(LEN=28)              :: YCHEMFILE    ! name of the Chemical file
-CHARACTER(LEN=6)               :: YCHEMFILETYPE! type of the Chemical file
-!UP*PT
-!CHARACTER(LEN=28)              :: YCAMSFILE    ! name of the input CAMS file
-!CHARACTER(LEN=6)               :: YCAMSFILETYPE! type of the input CAMS file
-CHARACTER(LEN=28)              :: YLIMAFILE    ! name of the input MACC file
-CHARACTER(LEN=6)               :: YLIMAFILETYPE! type of the input MACC file
-!UP*PT
-CHARACTER(LEN=28)              :: YSURFFILE    ! name of the Surface file
-CHARACTER(LEN=6)               :: YSURFFILETYPE! type of the Surface file
-CHARACTER(LEN=28)              :: YPGDFILE    ! name of the physiographic data
-!                                             ! file
-!
-CHARACTER(LEN=28)              :: YDAD_NAME   ! true name of the atmospheric file
-!
-!* other variables
-!
-REAL,DIMENSION(:,:,:), ALLOCATABLE:: ZJ       ! Jacobian
-!
-!* file management variables and counters
-!
-INTEGER                           :: ILUOUT0  ! logical unit for listing file
-INTEGER                           :: IPRE_REAL1 ! logical unit for namelist file
-INTEGER                           :: IRESP    ! return code in FM routines
-LOGICAL                           :: GFOUND   ! Return code when searching namelist
-INTEGER                           :: NIU,NJU,NKU   ! Upper bounds in x,y,z directions
-!
-REAL :: ZSTART, ZEND, ZTIME1, ZTIME2, ZTOT, ZALL ! for computing time analysis
-REAL :: ZMISC, ZREAD, ZHORI, ZPREP, ZSURF, ZTHERMO, ZDYN, ZDIAG, ZWRITE
-REAL :: ZDG                                      ! diagnostics time in routines
-INTEGER                           :: IINFO_ll    ! return code of // routines
-! Namelist model variables
-CHARACTER(LEN=5)                  :: CPRESOPT
-INTEGER                           :: NITR
-LOGICAL                           :: LRES
-REAL                              :: XRES
-LOGICAL                           :: LSHIFT      ! flag to perform vertical shift or not.
-LOGICAL                           :: LDUMMY_REAL ! flag to read and interpolate
-                                                 !dummy fields from GRIBex file
-INTEGER                           :: JRR      ! loop counter for moist var.
-LOGICAL  :: LUSECHAQ
-LOGICAL  :: LUSECHIC
-LOGICAL  :: LUSECHEM
-INTEGER :: JN
-!
-TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
-TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL()
-!
-!
-!*       0.3   Declaration of namelists
-!              ------------------------
-!
-NAMELIST/NAM_REAL_CONF/ NVERB, CEQNSYS, CPRESOPT, LSHIFT, LDUMMY_REAL, &
-                        LRES, XRES, NITR,LCOUPLING, NHALO , JPHEXT
-! Filtering and balancing of the large-scale and radar tropical cyclone
-NAMELIST/NAM_HURR_CONF/ LFILTERING, CFILTERING,   &
-XLAMBDA, NK, XLATGUESS, XLONGUESS, XBOXWIND, XRADGUESS, NPHIL, NDIAG_FILT,   &
-NLEVELR0,LBOGUSSING,               & 
-XLATBOG, XLONBOG, XVTMAXSURF, XRADWINDSURF,       &
-XMAX, XC, XRHO_Z, XRHO_ZZ, XB_0, XBETA_Z, XBETA_ZZ,&
-XANGCONV0, XANGCONV1000, XANGCONV2000,            &
-                        CDADATMFILE, CDADBOGFILE
- NAMELIST/NAM_AERO_CONF/ LORILAM, LINITPM, LDUST, XINIRADIUSI, XINIRADIUSJ,&
-                         XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, CRGUNITD,&
-                         LSALT, CRGUNITS, NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,&
-!UPG*PT
-                         XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT, &
-                         LDSTCAMS, LSLTCAMS,CACTCCN,CCLOUD, NMOD_IFN, NMOD_CCN
-!UPG*PT
-
-NAMELIST/NAM_CH_CONF/ LUSECHAQ,LUSECHIC,LUSECHEM
-!
-NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH
-!
-! name of dad of input FM file
-INTEGER                :: II, IJ, IGRID, ILENGTH
-CHARACTER (LEN=100)    :: HCOMMENT
-TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL()   ! list of fields to exchange
-!UPG*PT
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXRHO, ZLBYRHO
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXZZ, ZLBYZZ
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXPABST, ZLBYPABST
-INTEGER :: ILBX,ILBY,IIB,IJB,IIE,IJE
-!UPG*PT
-
-!-------------------------------------------------------------------------------
-!
-CALL MPPDB_INIT()
-!
-CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.)
-!
-ZDIAG = 0.
-CALL SECOND_MNH (ZSTART)
-!
-ZHORI  = 0.
-ZSURF  = 0.
-ZTIME1 = ZSTART
-!
-!*       1.    SET DEFAULT VALUES
-!              ------------------
-!
-CALL VERSION
-CPROGRAM='REAL  '
-!
-CALL ALLOC_FIELD_SCALARS()
-CALL PARAM_ICE_ASSOCIATE()
-CALL DEFAULT_DESFM_n(1)
-NRR=1
-IDX_RVT = 1
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.    OPENNING OF THE FILES
-!              ---------------------
-CALL IO_Init()
-!
-CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
-                                   ,YCHEMFILE,YCHEMFILETYPE &
-                                   ,YSURFFILE,YSURFFILETYPE &
-                                   ,YPGDFILE,TPGDFILE       &
-!UPG*PT
-!                                   ,YCAMSFILE,YCAMSFILETYPE)
-                                   ,YLIMAFILE,YLIMAFILETYPE)
-!UPG*PT
-ILUOUT0 = TLUOUT0%NLU
-TLUOUT => TLUOUT0
-!
-IF (YATMFILETYPE=='MESONH') THEN
-  LSHIFT = .FALSE.
-ELSE IF (YATMFILETYPE=='GRIBEX') THEN
-  LSHIFT = .TRUE.
-ELSE
-  LSHIFT = .TRUE.
-  WRITE(ILUOUT0,FMT=*) 'HATMFILETYPE WAS SET TO: '//TRIM(YATMFILETYPE)
-  WRITE(ILUOUT0,FMT=*) 'ONLY TWO VALUES POSSIBLE FOR HATMFILETYPE:'
-  WRITE(ILUOUT0,FMT=*) 'EITHER MESONH OR GRIBEX'
-  WRITE(ILUOUT0,FMT=*) '-> JOB ABORTED'
- !callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','')
-END IF
-!                             
-LCPL_AROME=.FALSE.
-LCOUPLING=.FALSE.
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.    INITIALIZATION OF PHYSICAL CONSTANTS
-!              ------------------------------------
-!
-CALL INI_CST
-!
-!-------------------------------------------------------------------------------
-!
-!*       4.    READING OF NAMELIST
-!              -------------------
-!
-!*       4.1   reading of configuration variables
-!
-IPRE_REAL1 = TZPRE_REAL1FILE%NLU
-!
-CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
-IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_PARAM_LIMA',GFOUND,ILUOUT0)
-IF (GFOUND) READ(IPRE_REAL1,NAM_PARAM_LIMA)
-!
-CALL INI_FIELD_LIST(1)
-!
-CALL INI_FIELD_SCALARS()
-!
-!*       4.2   reading of values of some configuration variables in namelist
-!
-!
-!JUAN REALZ from prep_surfex
-!
-IF (YATMFILETYPE == 'GRIBEX') THEN
-!
-!*       4.1  Vertical Spatial grid 
-!
-CALL INIT_NMLVAR()
-CALL READ_VER_GRID(TZPRE_REAL1FILE)
-!
-CALL IO_Field_read(TPGDFILE,'IMAX',NIMAX)
-CALL IO_Field_read(TPGDFILE,'JMAX',NJMAX)
-!
-NIMAX_ll=NIMAX   !! _ll variables are global variables
-NJMAX_ll=NJMAX   !! but the old names are kept in PRE_IDEA1.nam file
-!
-CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
-CALL SET_DAD0_ll()
-!JUAN 4/04/2014 correction for PREP_REAL_CASE on Gribex files 
-!CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, 128)
-CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL SET_LBX_ll('OPEN',1)
-CALL SET_LBY_ll('OPEN', 1)
-CALL SET_XRATIO_ll(1, 1)
-CALL SET_YRATIO_ll(1, 1)
-CALL SET_XOR_ll(1, 1)
-CALL SET_XEND_ll(NIMAX_ll+2*JPHEXT, 1)
-CALL SET_YOR_ll(1, 1)
-CALL SET_YEND_ll(NJMAX_ll+2*JPHEXT, 1)
-CALL SET_DAD_ll(0, 1)
-!JUANZ
-!CALL INI_PARA_ll(IINFO_ll)
-CALL INI_PARAZ_ll(IINFO_ll)
-!JUANZ
-
-!
-! sizes of arrays of the extended sub-domain
-!
-CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX)
-!!$CALL GET_DIM_EXT_ll('B',NIU,NJU)
-!!$CALL GET_INDICE_ll(NIB,NJB,NIE,NJE)
-!!$CALL GET_OR_ll('B',IXOR,IYOR)
-ENDIF
-!JUAN REALZ
-!
-LDUMMY_REAL= .FALSE.
-LFILTERING= .FALSE.
-CFILTERING= 'UVT  '
-XLATGUESS= XUNDEF ; XLONGUESS= XUNDEF ; XBOXWIND=XUNDEF; XRADGUESS= XUNDEF
-NK=50 ; XLAMBDA=0.2 ; NPHIL=24
-NLEVELR0=15
-NDIAG_FILT=-1
-LBOGUSSING= .FALSE.
-XLATBOG= XUNDEF ; XLONBOG= XUNDEF
-XVTMAXSURF= XUNDEF ; XRADWINDSURF= XUNDEF
-XMAX=16000. ; XC=0.7 ; XRHO_Z=-0.3 ; XRHO_ZZ=0.9
-XB_0=1.65 ; XBETA_Z=-0.5 ; XBETA_ZZ=0.35
-XANGCONV0=0. ; XANGCONV1000=0. ; XANGCONV2000=0.
-CDADATMFILE=' ' ; CDADBOGFILE=' '
-!
-CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
-IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_HURR_CONF',GFOUND,ILUOUT0)
-IF (GFOUND) READ(IPRE_REAL1,NAM_HURR_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CH_CONF',GFOUND,ILUOUT0)
-IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CH_CONF)
-CALL UPDATE_MODD_FROM_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
-IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
-IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
-CALL POSNAM(IPRE_REAL1,'NAM_IBM_LSF' ,GFOUND,ILUOUT0)
-IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_IBM_LSF)
-!
-! Sea salt
-CALL INIT_SALT
-!
-!*       4.3   set soil scheme to ISBA for initialization from GRIB
-!
-IF (YATMFILETYPE=='GRIBEX') THEN
-  CLBCX(:) ='OPEN'
-  CLBCY(:) ='OPEN'
-END IF
-!
-CALL SECOND_MNH(ZTIME2)
-ZMISC = ZTIME2 - ZTIME1
-!-------------------------------------------------------------------------------
-!
-!*       5.    READING OF THE INPUT DATA
-!              -------------------------
-!
-ZTIME1 = ZTIME2
-!
-IF (YATMFILETYPE=='MESONH') THEN
-  CALL READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1FILE,YATMFILE,TPGDFILE,YDAD_NAME)
-ELSE IF (YATMFILETYPE=='GRIBEX') THEN
-  IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX')THEN
-    CALL READ_ALL_DATA_GRIB_CASE('ATM1',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-  ELSE
-    CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-  END IF
-!
-  YDAD_NAME=' '
-END IF
-!
-IF (NIMAX==1 .AND. NJMAX==1) THEN
-  L1D=.TRUE.
-  L2D=.FALSE.
-ELSE IF (NJMAX==1) THEN
-  L1D=.FALSE.
-  L2D=.TRUE.
-ELSE
-  L1D=.FALSE.
-  L2D=.FALSE.
-END IF
-!
-! UPG*PT
-!*       5.1   reading of the input chemical data
-!
-!IF(LEN_TRIM(YCHEMFILE)>0)THEN
-!  ! read again Nam_aero_conf
-!  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
-!  IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
-!  IF(YCHEMFILETYPE=='GRIBEX') &
-!  CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-!  IF (YCHEMFILETYPE=='NETCDF') &
-!  CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-!END IF
-!
-!*       5.2   reading the input CAMS data
-!
-!IF(LEN_TRIM(YCAMSFILE)>0)THEN
-!   IF(YCAMSFILETYPE=='NETCDF') THEN
-!      CALL READ_CAMS_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCAMSFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-!   ELSE
-!      CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','CANNOT READ CAMS GRIB FILES YET')
-!   END IF
-!END IF
-!*       5.1   reading CAMS or MACC files for init LIMA
-!
-IF(LEN_TRIM(YLIMAFILE)>0)THEN
-  IF(YLIMAFILETYPE=='NETCDF') THEN
-    CALL READ_LIMA_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YLIMAFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-  ELSE
-    WRITE(ILUOUT0,FMT=*)
-    !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','Pb in MACC/CAMS file')
-    STOP
-  END IF
-END IF
-!
-!*       5.2   reading of the input chemical data + dusts + salts if needed
-!
-IF(LEN_TRIM(YCHEMFILE)>0)THEN
-  ! read again Nam_aero_conf
-  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
-  IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
-  IF(YCHEMFILETYPE=='GRIBEX') &
-  CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-  IF (YCHEMFILETYPE=='MOZART') &
-  CALL READ_CHEM_DATA_MOZART_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
-  IF (YCHEMFILETYPE=='CAMSEU') &
-  CALL READ_CHEM_DATA_CAMS_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB, &
-                                LDUMMY_REAL,LUSECHEM)
-END IF
-
-!UPG*PT
-!
-CALL IO_File_close(TZPRE_REAL1FILE)
-!
-CALL SECOND_MNH(ZTIME2)
-ZREAD = ZTIME2 - ZTIME1 - ZHORI
-!-------------------------------------------------------------------------------
-!
-CALL IO_File_add2list(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
-CALL IO_File_open(TINIFILE)
-!
-ZTIME1=ZTIME2
-!
-!*       6.    CONFIGURATION VARIABLES
-!              -----------------------
-!
-!*       6.1   imposed values of some other configuration variables
-!
-CDCONV='NONE'
-CSCONV='NONE'
-CRAD='NONE'
-CCONF='START'
-NRIMX=6
-NRIMY=6
-LHORELAX_UVWTH=.TRUE.
-LHORELAX_RV=LUSERV
-LHORELAX_RC=LUSERC
-LHORELAX_RR=LUSERR
-LHORELAX_RI=LUSERI
-LHORELAX_RS=LUSERS
-LHORELAX_RG=LUSERG
-LHORELAX_RH=LUSERH
-LHORELAX_SV(:)=.FALSE.
-LHORELAX_SVC2R2 = (NSV_C2R2 > 0)
-LHORELAX_SVC1R3 = (NSV_C1R3 > 0)
-LHORELAX_SVLIMA = (NSV_LIMA > 0)
-LHORELAX_SVELEC = (NSV_ELEC > 0)
-LHORELAX_SVCHEM = (NSV_CHEM > 0)
-LHORELAX_SVCHIC = (NSV_CHIC > 0)
-LHORELAX_SVDST  = (NSV_DST > 0)
-LHORELAX_SVSLT  = (NSV_SLT > 0)
-LHORELAX_SVAER  = (NSV_AER > 0)
-LHORELAX_SVPP   = (NSV_PP > 0)
-#ifdef MNH_FOREFIRE
-LHORELAX_SVFF   = (NSV_FF > 0)
-#endif
-LHORELAX_SVCS   = (NSV_CS > 0)
-
-LHORELAX_SVLG   = .FALSE.
-LHORELAX_SV(1:NSV)=.TRUE.
-IF ( CTURB /= 'NONE') THEN
-  LHORELAX_TKE = .TRUE.
-ELSE
-  LHORELAX_TKE = .FALSE.
-END IF
-!
-!
-CSTORAGE_TYPE='TT'
-!-------------------------------------------------------------------------------
-!
-!*       8.    COMPUTATION OF GEOMETRIC VARIABLES
-!              ----------------------------------
-!
-ZTIME1 = ZTIME2
-!
-ALLOCATE(XMAP(SIZE(XXHAT),SIZE(XYHAT)))
-ALLOCATE(XLAT(SIZE(XXHAT),SIZE(XYHAT)))
-ALLOCATE(XLON(SIZE(XXHAT),SIZE(XYHAT)))
-ALLOCATE(XDXHAT(SIZE(XXHAT)))
-ALLOCATE(XDYHAT(SIZE(XYHAT)))
-ALLOCATE(XZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-ALLOCATE(ZJ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-!
-IF (LCARTESIAN) THEN
-  CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,ZJ)
-  XMAP=1.
-ELSE
-  CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS,                    &
-                   LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, &
-                   XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,ZJ       )
-END IF
-!
-CALL MPPDB_CHECK2D(XZS,"prep_real_case8:XZS",PRECISION)
-CALL MPPDB_CHECK2D(XMAP,"prep_real_case8:XMAP",PRECISION)
-CALL MPPDB_CHECK2D(XLAT,"prep_real_case8:XLAT",PRECISION)
-CALL MPPDB_CHECK2D(XLON,"prep_real_case8:XLON",PRECISION)
-CALL MPPDB_CHECK3D(XZZ,"prep_real_case8:XZZ",PRECISION)
-CALL MPPDB_CHECK3D(ZJ,"prep_real_case8:ZJ",PRECISION)
-!
-ALLOCATE(XDXX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-ALLOCATE(XDYY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-ALLOCATE(XDZX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-ALLOCATE(XDZY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-ALLOCATE(XDZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)))
-!
-!20131024 add update halo
-!=> corrects on PDXX calculation in metrics and XDXX !!
-CALL ADD3DFIELD_ll( TZFIELDS_ll, XZZ, 'PREP_REAL_CASE::XZZ' )
-CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-CALL CLEANLIST_ll(TZFIELDS_ll)
-!
-CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-CALL MPPDB_CHECK3D(XDXX,"prc8-beforeupdate_metrics:PDXX",PRECISION)
-CALL MPPDB_CHECK3D(XDYY,"prc8-beforeupdate_metrics:PDYY",PRECISION)
-CALL MPPDB_CHECK3D(XDZX,"prc8-beforeupdate_metrics:PDZX",PRECISION)
-CALL MPPDB_CHECK3D(XDZY,"prc8-beforeupdate_metrics:PDZY",PRECISION)
-!
-CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-!20131112 add update_halo for XDYY and XDZY!!
-CALL ADD3DFIELD_ll( TZFIELDS_ll, XDXX, 'PREP_REAL_CASE::XDXX' )
-CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZX, 'PREP_REAL_CASE::XDZX' )
-CALL ADD3DFIELD_ll( TZFIELDS_ll, XDYY, 'PREP_REAL_CASE::XDYY' )
-CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZY, 'PREP_REAL_CASE::XDZY' )
-CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-CALL CLEANLIST_ll(TZFIELDS_ll)
-
-!CALL EXTRAPOL('W',XDXX,XDZX)
-!CALL EXTRAPOL('S',XDYY,XDZY)
-
-CALL SECOND_MNH(ZTIME2)
-
-ZMISC = ZMISC + ZTIME2 - ZTIME1
-!-------------------------------------------------------------------------------
-!
-!*       9.    PREPARATION OF THE VERTICAL SHIFT AND INTERPOLATION
-!              ---------------------------------------------------
-!
-ZTIME1 = ZTIME2
-!
-IF (YATMFILETYPE=='GRIBEX') THEN
-  CALL VER_PREP_GRIBEX_CASE('ATM ',ZDG)
-ELSE IF (YATMFILETYPE=='MESONH') THEN
-  CALL VER_PREP_MESONH_CASE(ZDG)
-END IF
-!
-IF (LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX') THEN
-  CALL VER_PREP_GRIBEX_CASE('CHEM',ZDG)
-END IF
-!UPG*PT
-!IF ((LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='NETCDF') .OR. &
-!   (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF')) THEN
-!  CALL VER_PREP_NETCDF_CASE(ZDG)
-!END IF
-IF (LEN_TRIM(YCHEMFILE)>0 .AND. ((YCHEMFILETYPE=='MOZART').OR. &
-                                 (YCHEMFILETYPE=='CAMSEU'))) THEN
-  CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS)
-
-  DEALLOCATE(XSV_LS)
-END IF
-!
-IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN
-  CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS_LIMA)
-  DEALLOCATE(XSV_LS_LIMA)
-END IF
-!UPG*PT
-!
-CALL SECOND_MNH(ZTIME2)
-ZPREP = ZTIME2 - ZTIME1 - ZDG
-ZDIAG = ZDIAG + ZDG
-!-------------------------------------------------------------------------------
-!
-!*      10.    VERTICAL INTERPOLATION OF ALL THERMODYNAMICAL VARIABLES
-!              -------------------------------------------------------
-!
-ZTIME1 = ZTIME2
-!
-ALLOCATE(XPSURF(SIZE(XXHAT),SIZE(XYHAT)))
-!
-CALL EXTRAPOL('E',XEXNTOP2D)
-IF (YATMFILETYPE=='GRIBEX') THEN
-  CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, &
-                  XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG                               )
-ELSE IF (YATMFILETYPE=='MESONH') THEN
-  CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, &
-                  XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG,                              &
-                  XLSTH_MX,XLSRV_MX                                            )
-END IF
-!
-CALL SECOND_MNH(ZTIME2)
-ZTHERMO = ZTIME2 - ZTIME1 - ZDG
-ZDIAG = ZDIAG + ZDG
-!-------------------------------------------------------------------------------
-!
-!*      12.    VERTICAL INTERPOLATION OF DYNAMICAL VARIABLES
-!              ---------------------------------------------
-!
-ZTIME1 = ZTIME2
-IF (YATMFILETYPE=='GRIBEX') THEN
-  CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS,     &
-               XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE                          )
-ELSE IF (YATMFILETYPE=='MESONH') THEN
-  CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS,     &
-               XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE,                         &
-               XLSU_MX,XLSV_MX,XLSW_MX                                           )
-END IF
-!
-!
-IF (ALLOCATED(XTHV_MX)) DEALLOCATE(XTHV_MX)
-IF (ALLOCATED(XR_MX)) DEALLOCATE(XR_MX)
-IF (ALLOCATED(XPMHP_MX)) DEALLOCATE(XPMHP_MX)
-IF (ALLOCATED(XU_MX)) DEALLOCATE(XU_MX)
-IF (ALLOCATED(XV_MX)) DEALLOCATE(XV_MX)
-IF (ALLOCATED(XW_MX)) DEALLOCATE(XW_MX)
-IF (ALLOCATED(XLSTH_MX)) DEALLOCATE(XLSTH_MX)
-IF (ALLOCATED(XLSRV_MX)) DEALLOCATE(XLSRV_MX)
-IF (ALLOCATED(XLSU_MX)) DEALLOCATE(XLSU_MX)
-IF (ALLOCATED(XLSV_MX)) DEALLOCATE(XLSV_MX)
-IF (ALLOCATED(XLSW_MX)) DEALLOCATE(XLSW_MX)
-IF (ALLOCATED(XZFLUX_MX)) DEALLOCATE(XZFLUX_MX)
-IF (ALLOCATED(XZMASS_MX)) DEALLOCATE(XZMASS_MX)
-IF (ALLOCATED(XRHOD_MX)) DEALLOCATE(XRHOD_MX)
-IF (ALLOCATED(XEXNTOP2D)) DEALLOCATE(XEXNTOP2D)
-IF (ALLOCATED(XZS_LS)) DEALLOCATE(XZS_LS)
-IF (ALLOCATED(XZSMT_LS)) DEALLOCATE(XZSMT_LS)
-!
-!-------------------------------------------------------------------------------
-!
-!*      13.    ANELASTIC CORRECTION
-!              --------------------
-!
-CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ)
-!
-CALL SECOND_MNH(ZTIME2)
-ZDYN = ZTIME2 - ZTIME1
-!
-!-------------------------------------------------------------------------------
-!
-!*      14.    INITIALIZATION OF THE REMAINING PROGNOSTIC VARIABLES (COPIES)
-!              -------------------------------------------------------------
-!
-ZTIME1 = ZTIME2
-!
-IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='MESONH')THEN
-  CALL INI_PROG_VAR(XTKE_MX,XSV_MX,YCHEMFILE)
-  LHORELAX_SVCHEM = (NSV_CHEM > 0)
-  LHORELAX_SVCHIC = (NSV_CHIC > 0)
-  LHORELAX_SVDST  = (NSV_DST > 0)
-  LHORELAX_SVSLT  = (NSV_SLT > 0)
-  LHORELAX_SVAER  = (NSV_AER > 0)
-ELSE
-!
-!UPG*PT
-!IF (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF') THEN
-IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN
-!UPG*PT
-  CALL LIMA_MIXRAT_TO_NCONC(XPABST, XTHT, XRT(:,:,:,1), XSV_MX)
-END IF
-!
-  CALL INI_PROG_VAR(XTKE_MX,XSV_MX)
-END IF
-!
-
-! Initialization of ORILAM variables
-IF (LORILAM) THEN
-  IF (.NOT.(ASSOCIATED(XN3D)))      ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XRG3D)))     ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XSIG3D)))    ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XRHOP3D)))   ALLOCATE(XRHOP3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XM3D)))      ALLOCATE(XM3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE*3))
-  IF (.NOT.(ASSOCIATED(XCTOTA3D))) &
-    ALLOCATE(XCTOTA3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE))
-
-  CALL CH_AER_EQM_INIT_n(XSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND),&
-                         XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),&
-                         XM3D,XRHOP3D,XSIG3D,&
-                         XRG3D,XN3D, XRHODREF, XCTOTA3D)
-END IF
-!
-! Initialization LIMA variables by ORILAM
-IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN
-
-    ! Init LIMA by ORILAM
-    CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT,XZZ)
-
-    ! Init LB LIMA by ORILAM
-    ALLOCATE(ZLBXRHO(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
-    ALLOCATE(ZLBYRHO(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
-    ALLOCATE(ZLBXPABST(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
-    ALLOCATE(ZLBYPABST(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
-    ALLOCATE(ZLBXZZ(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
-    ALLOCATE(ZLBYZZ(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
-
-    ILBX=SIZE(XLBXSVM,1)/2-JPHEXT
-    ILBY=SIZE(XLBYSVM,2)/2-JPHEXT
-
-    CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-
-    ZLBXRHO(1:ILBX+1,:,:)        = XRHODREF(IIB-1:IIB-1+ILBX,:,:)
-    ZLBXRHO(ILBX+2:2*ILBX+2,:,:) = XRHODREF(IIE+1-ILBX:IIE+1,:,:)
-    ZLBYRHO(:,1:ILBY+1,:)        = XRHODREF(:,IJB-1:IJB-1+ILBY,:)
-    ZLBYRHO(:,ILBY+2:2*ILBY+2,:) = XRHODREF(:,IJE+1-ILBY:IJE+1,:)
-    ZLBXPABST(1:ILBX+1,:,:)        = XPABST(IIB-1:IIB-1+ILBX,:,:)
-    ZLBXPABST(ILBX+2:2*ILBX+2,:,:) = XPABST(IIE+1-ILBX:IIE+1,:,:)
-    ZLBYPABST(:,1:ILBY+1,:)        = XPABST(:,IJB-1:IJB-1+ILBY,:)
-    ZLBYPABST(:,ILBY+2:2*ILBY+2,:) = XPABST(:,IJE+1-ILBY:IJE+1,:)
-    ZLBXZZ(1:ILBX+1,:,:)        = XZZ(IIB-1:IIB-1+ILBX,:,:)
-    ZLBXZZ(ILBX+2:2*ILBX+2,:,:) = XZZ(IIE+1-ILBX:IIE+1,:,:)
-    ZLBYZZ(:,1:ILBY+1,:)        = XZZ(:,IJB-1:IJB-1+ILBY,:)
-    ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:)
-
-    CALL AER2LIMA(XLBXSVM, ZLBXRHO, XLBXRM(:,:,:,1), ZLBXPABST, XLBXTHM, ZLBXZZ)
-    CALL AER2LIMA(XLBYSVM, ZLBYRHO, XLBYRM(:,:,:,1), ZLBYPABST, XLBYTHM, ZLBYZZ)
-
-    DEALLOCATE(ZLBXRHO)
-    DEALLOCATE(ZLBYRHO)
-    DEALLOCATE(ZLBXPABST)
-    DEALLOCATE(ZLBYPABST)
-    DEALLOCATE(ZLBXZZ)
-    DEALLOCATE(ZLBYZZ)
-
-END IF
-!
-IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX)
-IF (ALLOCATED(XTKE_MX)) DEALLOCATE(XTKE_MX)
-!
-CALL BOUNDARIES (                                                 &
-          0.,CLBCX,CLBCY,NRR,NSV,1,                               &
-          XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
-          XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,   &
-          XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
-          XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,   &
-          XRHODJ,XRHODREF,                                        &
-          XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT            )
-!
-CALL SECOND_MNH(ZTIME2)
-ZMISC = ZMISC + ZTIME2 - ZTIME1
-!
-!-------------------------------------------------------------------------------
-!
-!*      15.    Error on temperature during interpolations
-!              ------------------------------------------
-!
-ZTIME1 = ZTIME2
-!
-IF (YATMFILETYPE=='GRIBEX' .AND. NVERB>1) THEN
-  CALL ERROR_ON_TEMPERATURE(XT_LS,XPMASS_LS,XPABST,XPS_LS,XPSURF)
-END IF
-!
-IF (YATMFILETYPE=='GRIBEX') THEN
-  DEALLOCATE(XT_LS)
-  DEALLOCATE(XPMASS_LS)
-  DEALLOCATE(XPS_LS)
-END IF
-!
-IF (ALLOCATED(XPSURF)) DEALLOCATE(XPSURF)
-!
-CALL SECOND_MNH(ZTIME2)
-ZDIAG =  ZDIAG + ZTIME2 - ZTIME1
-!-------------------------------------------------------------------------------
-!
-!*       16.    INITIALIZE LEVELSET FOR IBM
-!              ---------------------------
-!
-IF (LIBM_LSF) THEN
-  !
-  IF (.NOT.LCARTESIAN) THEN
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','IBM can only be used with cartesian coordinates')
-  ENDIF
-  !
-  CALL GET_DIM_EXT_ll('B',NIU,NJU)
-  NKU=NKMAX+2*JPVEXT
-  !
-  ALLOCATE(XIBM_LS(NIU,NJU,NKU,4))
-  !
-  CALL IBM_INIT_LS(XIBM_LS)
-  !
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*      17.    WRITING OF THE MESO-NH FM-FILE
-!              ------------------------------
-!
-ZTIME1 = ZTIME2
-!
-CSTORAGE_TYPE='TT'
-IF (YATMFILETYPE=='GRIBEX') THEN
-  CSURF = "EXTE"
-  DO JRR=1,NRR
-    IF (JRR==1) THEN
-      LUSERV=.TRUE.
-      IDX_RVT = JRR
-    END IF
-    IF (JRR==2) THEN
-      LUSERC=.TRUE.
-      IDX_RCT = JRR
-    END IF
-    IF (JRR==3) THEN
-      LUSERR=.TRUE.
-      IDX_RRT = JRR
-    END IF
-    IF (JRR==4) THEN
-      LUSERI=.TRUE.
-      IDX_RIT = JRR
-    END IF
-    IF (JRR==5) THEN
-      LUSERS=.TRUE.
-      IDX_RST = JRR
-    END IF
-    IF (JRR==6) THEN
-      LUSERG=.TRUE.
-      IDX_RGT = JRR
-    END IF
-    IF (JRR==7) THEN
-      LUSERH=.TRUE.
-      IDX_RHT = JRR
-    END IF
-  END DO
-END IF
-!
-CALL WRITE_DESFM_n(1,TINIFILE)
-CALL IO_Header_write(TINIFILE,HDAD_NAME=YDAD_NAME)
-CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME)
-! 
-CALL SECOND_MNH(ZTIME2)
-ZWRITE = ZTIME2 - ZTIME1
-!
-!-------------------------------------------------------------------------------
-!
-!*      18.    OROGRAPHIC and DUMMY PHYSIOGRAPHIC FIELDS
-!              -----------------------------------------
-!
-!* reading in the PGD file
-!
-CALL MNHREAD_ZS_DUMMY_n(TPGDFILE)
-!
-!* writing in the output file
-!
-TOUTDATAFILE => TINIFILE
-CALL MNHWRITE_ZS_DUMMY_n(TINIFILE)
-!
-CALL DEALLOCATE_MODEL1(3)
-!
-IF (YATMFILETYPE=='MESONH'.AND. YATMFILE/=YPGDFILE) THEN
-  CALL IO_File_find_byname(TRIM(YATMFILE),TZATMFILE,IRESP)
-  CALL IO_File_close(TZATMFILE)
-END IF
-!-------------------------------------------------------------------------------
-!
-!*      19.    INTERPOLATION OF SURFACE VARIABLES
-!              ----------------------------------
-!
-IF (.NOT. LCOUPLING ) THEN
-  ZTIME1 = ZTIME2
-!
-  IF (CSURF=="EXTE") THEN
-    IF (YATMFILETYPE/='MESONH') THEN
-      CALL SURFEX_ALLOC_LIST(1)
-      YSURF_CUR => YSURF_LIST(1)
-      CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
-    ENDIF
-    CALL GOTO_SURFEX(1)
-    TFILE_SURFEX => TINIFILE
-    CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE)
-    NULLIFY(TFILE_SURFEX)
-  ENDIF
-!
-  CALL SECOND_MNH(ZTIME2)
-  ZSURF = ZSURF + ZTIME2 - ZTIME1
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*      20.    EPILOGUE
-!              --------
-!
-WRITE(ILUOUT0,*)
-WRITE(ILUOUT0,*)
-WRITE(ILUOUT0,*)
-WRITE(ILUOUT0,*) '**************************************************'
-WRITE(ILUOUT0,*) '* PREP_REAL_CASE: PREP_REAL_CASE ends correctly. *'
-WRITE(ILUOUT0,*) '**************************************************'
-WRITE(ILUOUT0,*)
-!
-!-------------------------------------------------------------------------------
-!
-CALL SECOND_MNH (ZEND)
-!
-ZTOT        = ZEND - ZSTART          ! for computing time analysis
-!
-ZALL = ZMISC + ZREAD + ZHORI + ZPREP + ZTHERMO + ZSURF + ZDYN + ZDIAG + ZWRITE 
-!
-WRITE(ILUOUT0,*)
-WRITE(ILUOUT0,*) ' ------------------------------------------------------------ '
-WRITE(ILUOUT0,*) '|                                                            |'
-WRITE(ILUOUT0,*) '|          COMPUTING TIME ANALYSIS in PREP_REAL_CASE         |'
-WRITE(ILUOUT0,*) '|                                                            |'
-WRITE(ILUOUT0,*) '|------------------------------------------------------------|'
-WRITE(ILUOUT0,*) '|                     |                   |                  |'
-WRITE(ILUOUT0,*) '|    ROUTINE NAME     |     CPU-TIME      |   PERCENTAGE %   |'
-WRITE(ILUOUT0,*) '|                     |                   |                  |'
-WRITE(ILUOUT0,*) '|---------------------|-------------------|------------------|'
-WRITE(ILUOUT0,*) '|                     |                   |                  |'
-WRITE(UNIT=ILUOUT0,FMT=2) ZREAD, 100.*ZREAD/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=9) ZHORI, 100.*ZHORI/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=3) ZPREP, 100.*ZPREP/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=4) ZTHERMO, 100.*ZTHERMO/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=6) ZDYN, 100.*ZDYN/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=7) ZDIAG, 100.*ZDIAG/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=8) ZWRITE, 100.*ZWRITE/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=1) ZMISC, 100.*ZMISC/ZTOT
-WRITE(UNIT=ILUOUT0,FMT=5) ZSURF, 100.*ZSURF/ZTOT
-!
-WRITE(UNIT=ILUOUT0,FMT=10) ZTOT   , 100.*ZALL/ZTOT
-WRITE(ILUOUT0,*) ' ------------------------------------------------------------ '
-!
-!                  FORMATS
-!                  -------
-!
-2  FORMAT(' |   READING OF DATA   |     ',F8.3,'      |     ',F8.3,'     |')
-9  FORMAT(' | HOR. INTERPOLATIONS |     ',F8.3,'      |     ',F8.3,'     |')
-3  FORMAT(' |      VER_PREP       |     ',F8.3,'      |     ',F8.3,'     |')
-4  FORMAT(' |     VER_THERMO      |     ',F8.3,'      |     ',F8.3,'     |')
-6  FORMAT(' |      VER_DYN        |     ',F8.3,'      |     ',F8.3,'     |')
-7  FORMAT(' |    DIAGNOSTICS      |     ',F8.3,'      |     ',F8.3,'     |')
-8  FORMAT(' |       WRITE         |     ',F8.3,'      |     ',F8.3,'     |')
-1  FORMAT(' |   MISCELLANEOUS     |     ',F8.3,'      |     ',F8.3,'     |')
-5  FORMAT(' |      SURFACE        |     ',F8.3,'      |     ',F8.3,'     |')
-10 FORMAT(' |   PREP_REAL_CASE    |     ',F8.3,'      |     ',F8.3,'     |')
-!
-!-------------------------------------------------------------------------------
-!
-IF (LEN_TRIM(YDAD_NAME)>0) THEN
-  WRITE(ILUOUT0,*) ' '
-  WRITE(ILUOUT0,*) ' ------------------------------------------------------------'
-  WRITE(ILUOUT0,*) '|  Nesting allowed                                           |'
-  WRITE(ILUOUT0,*) '|  DAD_NAME="',YDAD_NAME,'"                   |'
-  WRITE(ILUOUT0,*) ' ------------------------------------------------------------'
-  WRITE(ILUOUT0,*) ' '
-ELSE
-  WRITE(ILUOUT0,*) ' '
-  WRITE(ILUOUT0,*) ' ------------------------------------------------------------'
-  WRITE(ILUOUT0,*) '|  Nesting not allowed with a larger-scale model.            |'
-  WRITE(ILUOUT0,*) '|  The new file can only be used as model number 1           |'
-  WRITE(ILUOUT0,*) ' ------------------------------------------------------------'
-  WRITE(ILUOUT0,*) ' '
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-CALL IO_File_close(TINIFILE)
-CALL IO_File_close(TPGDFILE)
-!
-CALL FINALIZE_MNH()
-!
-!-------------------------------------------------------------------------------
-!
-CONTAINS 
-
-SUBROUTINE INIT_NMLVAR
-CPRESOPT=CPRESOPT_n
-LRES=LRES_n
-XRES=XRES_n
-NITR=NITR_n
-LUSECHAQ=LUSECHAQ_n
-LUSECHIC=LUSECHIC_n
-LUSECHEM=LUSECHEM_n
-END SUBROUTINE INIT_NMLVAR
-
-SUBROUTINE UPDATE_MODD_FROM_NMLVAR
-CPRESOPT_n=CPRESOPT
-LRES_n=LRES
-XRES_n=XRES
-NITR_n=NITR
-LUSECHAQ_n=LUSECHAQ
-LUSECHIC_n=LUSECHIC
-LUSECHEM_n=LUSECHEM
-END SUBROUTINE UPDATE_MODD_FROM_NMLVAR
-
-END PROGRAM PREP_REAL_CASE
diff --git a/src/mesonh/ext/set_rsou.f90 b/src/mesonh/ext/set_rsou.f90
deleted file mode 100644
index 352af8a53b1efdaca9aa28ef28c9658ef2d27ef5..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/set_rsou.f90
+++ /dev/null
@@ -1,1640 +0,0 @@
-!MNH_LIC Copyright 1994-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_SET_RSOU
-!     ####################
-!
-INTERFACE
-!
-      SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,&
-                          PJ,OSHIFT,PCORIOZ)
-!
-USE MODD_IO, ONLY : TFILEDATA
-!
-TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
-TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
-CHARACTER(LEN=*),       INTENT(IN)  :: HFUNU  ! type of variation of U
-                                              ! in y direction
-CHARACTER(LEN=*),       INTENT(IN)  :: HFUNV  ! type of variation of V
-                                              ! in x direction
-INTEGER,                INTENT(IN)  :: KILOC  ! I Localisation of vertical profile
-INTEGER,                INTENT(IN)  :: KJLOC  ! J Localisation of vertical profile
-LOGICAL,                INTENT(IN)  :: OBOUSS ! logical switch for Boussinesq version
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ! jacobien 
-LOGICAL,                INTENT(IN)  :: OSHIFT ! logical switch for vertical shift
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PCORIOZ ! Coriolis parameter
-                                               ! (exceptionnaly 3D array)
-!
-END SUBROUTINE SET_RSOU
-!
-END INTERFACE
-!
-END MODULE MODI_SET_RSOU
-!
-!     ########################################################################
-      SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS, &
-                          PJ,OSHIFT,PCORIOZ)
-!     ########################################################################
-!
-!!****  *SET_RSOU * -  to initialize mass fiels from a radiosounding 
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is  to initialize the mass field (theta,r,
-!     thetavrefz,rhorefz) on model grid from a radiosounding located at point 
-!     (KILOC,KJLOC).
-!
-!        The free-formatted part of EXPRE file contains the radiosounding data.The data 
-!     are stored in following order :
-!        
-!         - year,month,day, time (these variables are read in PREINIT program)
-!         - kind of data in EXPRE file (see below for more explanations about
-!                                       YKIND)
-!         - ZGROUND
-!         - PGROUND
-!         - temperature variable at ground ( depending on the data Kind )
-!         - moist variable  at ground ( depending on the data Kind )
-!         - number of wind data levels  ( variable ILEVELU)
-!         - height  ,  dd  , ff   |
-!            or           or      |  ILEVELU times
-!           pressure,  U   , V    |
-!         - number of mass levels  ( variable ILEVELM), including the ground
-!           level
-!         - height  ,  T  ,          Td              |
-!            or        or            or              |  (ILEVELM-1) times
-!           pressure,  THeta_Dry  , Mixing Ratio     |
-!                      or            or              |
-!                      THeta_V    , relative HUmidity|  
-!
-!       NB : the first mass level is at ground
-! 
-!       The following kind of data  is permitted :
-!                  YKIND = 'STANDARD'  :   ZGROUND, PGROUND, TGROUND, TDGROUND
-!                                         (Pressure, dd, ff) , 
-!                                         (Pressure, T, Td)
-!                  YKIND = 'PUVTHVMR'  : zGROUND, PGROUND, ThvGROUND, RGROUND
-!                                        (Pressure, U, V) , 
-!                                        (Pressure, THv, R)
-!                  YKIND = 'PUVTHVHU'  :  zGROUND, PGROUND, ThvGROUND, HuGROUND
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THv, Hu)
-!                  YKIND = 'ZUVTHVHU'  :  zGROUND, PGROUND, ThvGROUND, HuGROUND
-!                                         (height, U, V) , 
-!                                         (height, THv, Hu)
-!                  YKIND = 'ZUVTHVMR'  :  zGROUND, PGROUND, ThvGROUND, RGROUND
-!                                         (height, U, V) , 
-!                                         (height, THv, R)
-!                  YKIND = 'PUVTHDMR'  : zGROUND, PGROUND, ThdGROUND, RGROUND
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THd, R)
-!                  YKIND = 'PUVTHDHU'  : zGROUND, PGROUND, ThdGROUND, HuGROUND
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, THd, Hu)
-!                  YKIND = 'ZUVTHDMR'  :  zGROUND, PGROUND, ThdGROUND,
-!                  RGROUND
-!                                         (height, U, V) , 
-!                                         (height, THd, R)
-!                  YKIND = 'PUVTHU'  :   ZGROUND, PGROUND, TGROUND, HuGROUND
-!                                         (Pressure, U, V) , 
-!                                         (Pressure, T, Hu)
-!
-!  For ocean-LES case  the following kind of data is permitted
-!         
-!                  YKIND = 'IDEALOCE' : ZGROUND (Water depth),PGROUND(Sfc Atmos Press),
-!                                        TGROUND (SST), RGROUND (SSS)
-!                                         (Depth , U, V) starting from sfc   
-!                                         (Depth,  T, S)
-!                                     (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y)
-!
-!                  YKIND = 'STANDOCE' :  (Depth , Temp, Salinity, U, V) starting from sfc   
-!                                        (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y)     
-!        
-!!**  METHOD
-!!    ------
-!!      The radiosounding is first read, then data are converted in order to
-!!    always obtain  the following variables  (case YKIND = 'ZUVTHVMR') :
-!!       (height,U,V) and (height,Thetav,r) which are the model variables.
-!!      That is to say : 
-!!         - YKIND = 'STANDARD' : 
-!!           dd,ff converted in U,V
-!!           Td + pressure ----> r
-!!           T,r ---> Tv  + pressure ----> thetav
-!!           Pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels)
-!!         - YKIND = 'PUVTHVMR' : 
-!!           Pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels)
-!!         - YKIND = 'PUVTHVHU' : 
-!!           thetav + pressure ----> Tv +pressure +Hu ----> r 
-!!           Pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels)
-!!         - YKIND = 'ZUVTHVHU' : 
-!!           height +thetav + PGROUND -----> pressure (for mass levels)
-!!           thetav + pressure ----> Tv +pressure +Hu ----> r 
-!!         - YKIND = 'PUVTHDVMR' : 
-!!           thetad + r ----> thetav
-!!           pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels)
-!!         - YKIND = 'PUVTHDHU' :  
-!!           thetad + pressure -----> T
-!!           T + pressure + Hu -----> r 
-!!           thetad + r -----> thetav
-!!           pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels)
-!!         - YKIND = 'ZUVTHDHU' :  
-!!           thetad + r -----> thetav
-!!         - YKIND = 'PUVTHU' :  
-!!           T + pressure -----> thetad
-!!           T + pressure + Hu  -----> r
-!!           thetad + r -----> thetav
-!!           pressure + thetav + ZGROUND ----> height (for mass levels)
-!!           Thetav at mass levels ----> thetav at wind levels
-!!           
-!!      The following basic formula are used :
-!!                Rd  es(Td)
-!!            r = --  ----------
-!!                Rv  P - es(Td)
-!!
-!!                 1 + (Rv/Rd) r
-!!            Tv = --------------  T  
-!!                    1 + r
-!!
-!!                          P00    Rd/Cpd             1 + (Rv/Rd) r
-!!            Thetav = Tv ( ---- )         = Thetad ( --------------)
-!!                           P                           1 + r
-!!       The integration of hydrostatic relation is used to compute height from
-!!   pressure  and vice-versa. This is done by HEIGHT_PRESS and PRESS_HEIGHT 
-!!   routines.  
-!!   
-!!      Then, these data are interpolated on a vertical grid which is  
-!!    a mixed grid calaculated with VERT_COORD from the vertical levels of MNH
-!!    grid and with a constant ororgraphy equal to the altitude of the vertical
-!!    profile (ZZGROUND) (It permits to keep low levels information with a
-!!    shifting function (as in PREP_REAL_CASE))
-!!
-!!      Then, the 3D mass and wind fields are deduced in SET_MASS
-!!     
-!!
-!!    EXTERNAL
-!!    --------
-!!      SET_MASS : to compute mass field on 3D-model grid
-!!      Module MODE_THERMO : contains thermodynamic routines
-!!         SM_FOES : To compute saturation vapor pressure from 
-!!                   temperature
-!!         SM_PMR_HU : to compute vapor mixing ratio from pressure, virtual
-!!                    temperature and relative humidity
-!!      HEIGHT_PRESS : to compute height from pressure and thetav 
-!!                    by integration of hydrostatic relation
-!!      PRESS_HEIGHT : to compute pressure from height and thetav
-!!                    by integration of hydrostatic relation
-!!      THETAVPU_THETAVPM : to interpolate thetav on wind levels
-!!                          from thetav on mass levels
-!!
-!!      Module MODI_HEIGHT_PRESS      : interface for function HEIGHT_PRESS
-!!      Module MODI_PRESS_HEIGHT      : interface for function PRESS_HEIGHT
-!!      Module MODI_THETAVPU_THETAVPM : interface for function
-!!                                      THETAVPU_THETVPM
-!!      Module MODI_SET_MASS          : interface for subroutine SET_MASS
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST     : contains physical constants
-!!        XPI  : Pi
-!!        XRV  : Gas constant for vapor 
-!!        XRD  : Gas constant for dry air
-!!        XCPD : Specific heat for dry air at constant pressure
-!!
-!!      Module MODD_LUNIT1  : contains logical unit names 
-!!        TLUOUT : name of output-listing
-!!
-!!      Module MODD_CONF    : contains configuration variables for all models. 
-!!        NVERB : verbosity level for output-listing
-!!
-!!      Module MODD_GRID1  : contains grid variables
-!!        XZHAT : height of w-levels of vertical model grid without orography
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book2 of MESO-NH documentation (routine SET_RSOU)
-!!    
-!!
-!!    AUTHOR
-!!    ------
-!!	V. Ducrocq       * Meteo France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    25/08/94
-!!      J.Stein     06/12/94  change the way to prescribe the horizontal wind
-!!                            variations + cleaning
-!!      J.Stein     18/01/95  bug corrections in the ILEVELM readings
-!!      J.Stein     16/04/95  put the same names of the declarative modules
-!!                            in the descriptive part
-!!      J.Stein     30/01/96  use the RS ground pressure to initialize the
-!!                            hydrostatic pressure computation
-!!      V.Masson    02/09/96  add allocation of ZTHVU in two cases
-!!      P.Jabouille 14/02/96  bug in extrapolation of ZMRM below the first level
-!! Jabouille/Masson 05/12/02  add  ZUVTHLMR case and hydrometeor initialization
-!!      P.Jabouille 29/10/03  add  hydrometeor initialization for ZUVTHDMR case
-!!      G. Tanguy   26/10/10  change the interpolation of the RS : we use now a
-!!                            mixed grid (PREP_REAL_CASE method)
-!!                            add PUVTHU case
-!!      V.Masson    12/08/13  Parallelization of the initilization profile
-!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
-!  JL Redelsperger 01/2021: Ocean LES cases added
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CONF
-USE MODD_CONF_n
-USE MODD_CST
-USE MODD_NEB, ONLY: NEB
-USE MODD_DYN_n,      ONLY: LOCEAN
-USE MODD_FIELD_n
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_LUNIT_n,    ONLY: TLUOUT
-USE MODD_IO,         ONLY: TFILEDATA
-USE MODD_NETCDF
-USE MODD_OCEANH
-USE MODD_PARAMETERS, ONLY: JPHEXT
-USE MODD_TYPE_DATE
-!
-USE MODE_ll
-USE MODE_MSG
-USE MODE_THERMO
-!
-USE MODI_COMPUTE_EXNER_FROM_GROUND
-USE MODI_HEIGHT_PRESS
-USE MODI_PRESS_HEIGHT
-USE MODI_SET_MASS
-USE MODI_SHUMAN
-USE MODI_THETAVPU_THETAVPM
-USE MODI_VERT_COORD
-!
-USE NETCDF          ! for reading the NR files 
-!
-IMPLICIT NONE
-!  
-!  
-!*       0.1   Declarations of arguments :
-!
-TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
-TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
-CHARACTER(LEN=*),       INTENT(IN)  :: HFUNU  ! type of variation of U
-                                              ! in y direction
-CHARACTER(LEN=*),       INTENT(IN)  :: HFUNV  ! type of variation of V
-                                              ! in x direction
-INTEGER,                INTENT(IN)  :: KILOC  ! I Localisation of vertical profile
-INTEGER,                INTENT(IN)  :: KJLOC  ! J Localisation of vertical profile
-LOGICAL,                INTENT(IN)  :: OBOUSS ! logical switch for Boussinesq version
-LOGICAL,                INTENT(IN)  :: OSHIFT ! logical switch for vertical shift
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PCORIOZ ! Coriolis parameter
-                                               ! (exceptionnaly 3D array)
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ! jacobien 
-!
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER                         :: ILUPRE ! logical unit number of the EXPRE return code
-INTEGER                         :: ILUOUT    ! Logical unit number for output-listing
-! local variables for reading sea sfc flux forcing for ocean model
-INTEGER                   :: IFRCLT 
-REAL, DIMENSION(:), ALLOCATABLE :: ZSSUFL_T,ZSSVFL_T,ZSSTFL_T,ZSSOLA_T !
-TYPE (DATE_TIME), DIMENSION(:), ALLOCATABLE :: ZFRCLT ! date/time of sea surface forcings
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!  variables read in EXPRE file at the RS/CTD levels
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-CHARACTER(LEN=8)                :: YKIND     ! Kind of  variables in 
-                                             ! EXPRE FILE
-INTEGER                         :: ILEVELU   ! number of wind levels 
-REAL, DIMENSION(:), ALLOCATABLE :: ZHEIGHTU  ! Height at wind levels 
-REAL, DIMENSION(:), ALLOCATABLE :: ZPRESSU   ! Pressure at wind levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHVU     ! Thetav at wind levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZU,ZV     ! wind components
-REAL, DIMENSION(:), ALLOCATABLE :: ZDD,ZFF   ! dd (direction) and ff(force)
-                                             !     for wind
-REAL                            :: ZZGROUND,ZPGROUND ! height and Pressure at ground  
-REAL                            :: ZTGROUND,ZTHVGROUND,ZTHDGROUND,ZTHLGROUND,    & 
-                                   ZTDGROUND,ZMRGROUND,ZHUGROUND        
-                                                  ! temperature and moisture
-                                                  ! variables at ground
-INTEGER                         :: ILEVELM   ! number of mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZHEIGHTM  ! Height at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZPRESSM   ! Pressure at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHV      ! Thetav at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHD      ! Theta (dry) at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHL      ! Thetal at mass levels  
-REAL, DIMENSION(:), ALLOCATABLE :: ZTH       ! Theta at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZT        ! Temperature at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZMR       ! Vapor mixing ratio at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZMRC      ! cloud mixing ratio at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZMRI      ! ice mixing ratio or cloud concentration
-REAL, DIMENSION(:), ALLOCATABLE :: ZRT       ! total mixing ratio  
-REAL, DIMENSION(:), ALLOCATABLE :: ZPRESS    ! pressure at mass level 
-REAL, DIMENSION(:), ALLOCATABLE :: ZHU       ! relative humidity at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTD       ! Td at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZTV       ! Tv at mass levels
-REAL, DIMENSION(:), ALLOCATABLE :: ZEXN      
-REAL, DIMENSION(:), ALLOCATABLE :: ZCPH     
-REAL, DIMENSION(:), ALLOCATABLE :: ZLVOCPEXN     
-REAL, DIMENSION(:), ALLOCATABLE :: ZLSOCPEXN    
-REAL, DIMENSION(SIZE(XZHAT))    :: ZZFLUX_PROFILE ! altitude of flux points on the initialization columns
-REAL, DIMENSION(SIZE(XZHAT))    :: ZZMASS_PROFILE ! altitude of mass points on the initialization columns
-!
-!  fields on the grid of the model without orography
-!
-REAL, DIMENSION(SIZE(XZHAT))    :: ZUW,ZVW ! Wind at w model grid levels
-REAL, DIMENSION(SIZE(XZHAT))    :: ZMRM   ! vapor mixing ratio at mass model
-                                          !grid levels 
-REAL, DIMENSION(SIZE(XZHAT))    :: ZMRCM,ZMRIM
-REAL, DIMENSION(SIZE(XZHAT))    :: ZTHVM  ! Temperature at mass model grid levels
-REAL, DIMENSION(SIZE(XZHAT))    :: ZTHLM  ! Thetal at mass model grid levels
-REAL, DIMENSION(SIZE(XZHAT))    :: ZTHM  ! Thetal at mass model grid levels
-REAL, DIMENSION(SIZE(XZHAT))    :: ZRHODM   ! density at mass model grid level
-REAL, DIMENSION(:), ALLOCATABLE :: ZMRT    ! Total Vapor mixing ratio at mass levels on mixed grid
-REAL, DIMENSION(:), ALLOCATABLE :: ZEXNMASS  ! exner fonction at mass level
-REAL, DIMENSION(:), ALLOCATABLE :: ZEXNFLUX  ! exner fonction at flux level
-REAL                            :: ZEXNSURF  ! exner fonction at surface
-REAL, DIMENSION(:), ALLOCATABLE :: ZPREFLUX   ! pressure at flux model grid level
-REAL, DIMENSION(:), ALLOCATABLE :: ZFRAC_ICE ! ice fraction
-REAL, DIMENSION(:), ALLOCATABLE :: ZRSATW, ZRSATI             
-REAL                            :: ZDZSDH,ZDZ1SDH,ZDZ2SDH ! interpolation
-                                                          ! working arrays
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZBUF
-!
-INTEGER         :: JK,JKLEV,JKU,JKM,JKT,JJ,JI,JO,JLOOP  ! Loop indexes
-INTEGER         :: IKU                ! Upper bound in z direction
-REAL            :: ZRDSCPD,ZRADSDG, & ! Rd/Cpd, Pi/180.,
-                   ZRVSRD,ZRDSRV,   & ! Rv/Rd, Rd/Rv
-                   ZPTOP              ! Pressure at domain top 
-LOGICAL         :: GUSERC             ! use of input data cloud
-INTEGER         :: IIB, IIE, IJB, IJE
-INTEGER         :: IXOR_ll, IYOR_ll
-INTEGER         :: IINFO_ll
-LOGICAL         :: GPROFILE_IN_PROC   ! T : initialization profile is in current processor
-!
-REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))   ::ZZS_LS
-REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) ::ZZFLUX_MX,ZZMASS_MX ! mixed grid
-!-------------------------------------------------------------------------------
-! For standard ocean version, reading external files
-CHARACTER(LEN=256) :: yinfile, yinfisf ! files to be read
-INTEGER :: IDX
-INTEGER(KIND=CDFINT) :: INZ, INLATI, INLONGI
-INTEGER(KIND=CDFINT) :: incid, ivarid, idimid, idimlen
-REAL, DIMENSION(:,:,:),     ALLOCATABLE :: ZOC_TEMPERATURE,ZOC_SALINITY,ZOC_U,ZOC_V
-REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_DEPTH  
-REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_LE,ZOC_H
-REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_SW_DOWN,ZOC_SW_UP,ZOC_LW_DOWN,ZOC_LW_UP
-REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_TAUX,ZOC_TAUY
-
-!--------------------------------------------------------------------------------
-!
-!*	 1.     PROLOGUE : INITIALIZE SOME CONSTANTS, RETRIEVE LOGICAL
-!               UNIT NUMBERS AND READ KIND OF DATA IN EXPRE FILE
-!	        -------------------------------------------------------
-!
-CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
-CALL GET_OR_ll('B',IXOR_ll,IYOR_ll)
-!
-!*       1.1  initialize some constants 
-!
-ZRDSCPD = XRD / XCPD
-ZRADSDG = XPI/180.
-ZRVSRD  = XRV/XRD
-ZRDSRV = XRD/XRV
-!
-!*       1.2  Retrieve logical unit numbers 
-!                         
-ILUPRE = TPEXPREFILE%NLU
-ILUOUT = TLUOUT%NLU
-!
-!*       1.3  Read data kind in EXPRE file 
-!
-READ(ILUPRE,*) YKIND
-WRITE(ILUOUT,*) 'YKIND read in set_rsou: ', YKIND
-!
-IF(LUSERC .AND. YKIND/='PUVTHDMR' .AND. YKIND/='ZUVTHDMR' .AND.  YKIND/='ZUVTHLMR') THEN 
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','hydrometeors are not allowed for YKIND = '//trim(YKIND))
-ENDIF
-!
-IF(YKIND=='ZUVTHLMR' .AND. .NOT. LUSERC) THEN
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','LUSERC=T is required for YKIND=ZUVTHLMR')
-ENDIF
-!
-GUSERC=.FALSE.
-IF(LUSERC .AND. (YKIND == 'PUVTHDMR' .OR. YKIND == 'ZUVTHDMR')) GUSERC=.TRUE.
-!-------------------------------------------------------------------------------
-!
-!*	 2.     READ DATA AND CONVERT IN (height,U,V), (height,Thetav,r)
-!	        --------------------------------------------------------
-!
-SELECT CASE(YKIND)
-!   
-!     2.0.1 Ocean case 1
-!   
-  CASE ('IDEALOCE')
-!
-    XP00=XP00OCEAN
-    ! Read data in PRE_IDEA1.nam
-    ! Surface      
-    WRITE(ILUOUT,FMT=*) 'Reading data for ideal ocean :IDEALOCE'   
-    READ(ILUPRE,*) ZPTOP           ! P_atmosphere at sfc =P top domain
-    READ(ILUPRE,*) ZTGROUND        ! SST 
-    READ(ILUPRE,*) ZMRGROUND       ! SSS
-    WRITE(ILUOUT,FMT=*) 'Patm SST SSS', ZPTOP,ZTGROUND,ZMRGROUND
-    READ(ILUPRE,*) ILEVELU         ! Read number of Current levels
-    ! Allocate required memory 
-    ALLOCATE(ZHEIGHTU(ILEVELU),ZU(ILEVELU),ZV(ILEVELU))
-    ALLOCATE(ZOC_U(ILEVELU,1,1),ZOC_V(ILEVELU,1,1))
-    WRITE(ILUOUT,FMT=*) 'Level number for Current in data', ILEVELU
-    ! Read U and V at each wind level
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZHEIGHTU(JKU),ZOC_U(JKU,1,1),ZOC_V(JKU,1,1)
-      ! WRITE(ILUOUT,FMT=*) 'Leveldata D(m) under sfc: U_cur, V_cur', JKU, ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-    DO JKU=1,ILEVELU
-      ! Z axis reoriented as in the model
-      IDX     = ILEVELU-JKU+1
-      ZU(JKU) = ZOC_U(IDX,1,1)
-      ZV(JKU) = ZOC_V(IDX,1,1)
-      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
-      ! Z oriented in same time to have a model domain axis going
-      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
-    END DO
-    ! Read number of mass levels  
-    READ(ILUPRE,*) ILEVELM
-    ! Allocate required memory 
-    ALLOCATE(ZOC_DEPTH(ILEVELM))
-    ALLOCATE(ZHEIGHTM(ILEVELM))           
-    ALLOCATE(ZTHL(ILEVELM),ZTH(ILEVELM),ZTHV(ILEVELM)) 
-    ALLOCATE(ZMR(ILEVELM),ZRT(ILEVELM))
-    ALLOCATE(ZOC_TEMPERATURE(ILEVELM,1,1),ZOC_SALINITY(ILEVELM,1,1))
-    ! Read T and S at each mass level 
-    DO JKM= 2,ILEVELM
-      READ(ILUPRE,*) ZOC_DEPTH(JKM),ZOC_TEMPERATURE(JKM,1,1),ZOC_SALINITY(JKM,1,1)
-    END DO
-    ! Complete the mass arrays with the ground informations read in EXPRE file
-    ZOC_DEPTH(1)    = 0.                    
-    ZOC_TEMPERATURE(1,1,1)= ZTGROUND
-    ZOC_SALINITY(1,1,1)= ZMRGROUND
-    !!!!!!!!!!!!!!!!!!!!!!!!Inversing Axis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ! Going from the data (axis downward i.e inverse model) grid to the model grid (axis upward)
-    ! Uniform bathymetry; depth goes from ocean sfc downwards  (data grid)
-    ! ZHEIGHT goes from the model domain bottom up to the sfc ocean (top of model domain)
-    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ZZGROUND   = 0.
-    ZTGROUND   = ZOC_TEMPERATURE(ILEVELM,1,1) 
-    ZMRGROUND  = ZOC_SALINITY(ILEVELM,1,1)
-    DO JKM= 1,ILEVELM
-      ! Z upward axis (oriented as in the model), i.e.
-      ! going from 0m (ocean bottom/model bottom) upward to H (ocean sfc/model top)
-      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
-      IDX          = ILEVELM-JKM+1
-      ZTH(JKM)      = ZOC_TEMPERATURE(IDX,1,1)
-      ZMR(JKM)     = ZOC_SALINITY(IDX,1,1)
-      ZHEIGHTM(JKM)= ZOC_DEPTH(ILEVELM)- ZOC_DEPTH(IDX)
-      WRITE(ILUOUT,FMT=*) 'Model oriented initial data: JKM IDX depth T S ZHEIGHTM', &
-                      JKM,IDX,ZOC_DEPTH(IDX),ZTH(JKM),ZMR(JKM),ZHEIGHTM(JKM)
-    END DO
-    ! mass levels of the RS
-    ZTHV = ZTH ! TV==THETA=TL
-    ZTHL = ZTH
-    ZRT  = ZMR  
-    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ! READ Sea Surface Forcing !
-    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ! Reading the forcings from prep_idea1.nam
-    READ(ILUPRE,*) IFRCLT  ! Number of time-dependent forcing 
-    IF (IFRCLT > 99*8) THEN
-      ! CAUTION: number of forcing times is limited by the WRITE format 99(8E10.3)
-      !          and also by the name of forcing variables (format I3.3)
-      !          You have to modify those if you need more forcing times
-     CALL PRINT_MSG(NVERB_FATAL,'IO','SET_RSOU','maximum forcing times NFRCLT is 99*8')
-    END IF
-!
-    WRITE(UNIT=ILUOUT,FMT='(" THERE ARE ",I2," SFC FLUX FORCINGs AT:")') IFRCLT
-    ALLOCATE(ZFRCLT(IFRCLT))
-    ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0
-    ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0
-    ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0
-    ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0
-    DO JKT = 1,IFRCLT
-      WRITE(ILUOUT,FMT='(A, I4)') "SET_RSOU/Reading Sea Surface forcing: Number=", JKT
-      READ(ILUPRE,*) ZFRCLT(JKT)%nyear, ZFRCLT(JKT)%nmonth, &
-                     ZFRCLT(JKT)%nday,  ZFRCLT(JKT)%xtime
-      READ(ILUPRE,*) ZSSUFL_T(JKT)
-      READ(ILUPRE,*) ZSSVFL_T(JKT)
-      READ(ILUPRE,*) ZSSTFL_T(JKT)
-      READ(ILUPRE,*) ZSSOLA_T(JKT)
-    END DO
-!
-    DO JKT = 1 , IFRCLT
-      WRITE(UNIT=ILUOUT,FMT='(F9.0, "s, date:", I3, "/", I3, "/", I5)') &
-                 ZFRCLT(JKT)%xtime,         ZFRCLT(JKT)%nday,   &
-                 ZFRCLT(JKT)%nmonth, ZFRCLT(JKT)%nyear
-    END DO
-    NINFRT= INT(ZFRCLT(2)%xtime)
-    WRITE(ILUOUT,FMT='(A)') &
-         "Number U-Stress, V-Stress, Heat turb Flux, Solar Flux Interval(s)",NINFRT
-    DO JKT = 1, IFRCLT
-      WRITE(ILUOUT,FMT='(I10,99(3F10.2))') JKT, ZSSUFL_T(JKT),ZSSVFL_T(JKT),ZSSTFL_T(JKT) 
-    END DO
-    NFRCLT = IFRCLT
-    ALLOCATE(TFRCLT(NFRCLT))
-    ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0.
-    ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0.
-    ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0.
-    ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0.
-!
-    DO JKT=1,NFRCLT
-      TFRCLT(JKT)= ZFRCLT(JKT)
-      XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN
-      XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN
-      ! working in SI
-      XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN)
-      XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN)
-    END DO   
-    DEALLOCATE(ZFRCLT)
-    DEALLOCATE(ZSSUFL_T)
-    DEALLOCATE(ZSSVFL_T)
-    DEALLOCATE(ZSSTFL_T)
-    DEALLOCATE(ZSSOLA_T)
-!
-!--------------------------------------------------------------------------------   
-! 2.0.2  Ocean standard initialize from netcdf files
-!        U,V,T,S at Z levels + Forcings at model TOP (sea surface) 
-!--------------------------------------------------------------------------------   
-!
-  CASE ('STANDOCE')
-!   
-    XP00=XP00OCEAN
-    READ(ILUPRE,*) ZPTOP           ! P_atmosphere at sfc =P top domain
-    READ(ILUPRE,*) YINFILE, YINFISF
-    WRITE(ILUOUT,FMT=*) 'Netcdf files to read:', YINFILE, YINFISF
-    ! Open file containing initial profiles
-    CALL check(nf90_open(yinfile,NF90_NOWRITE,incid), "opening NC file")
-    ! Reading dimensions and lengths
-    CALL check( nf90_inq_dimid(incid, "depth",idimid), "getting depth  dimension id" )
-    CALL check( nf90_inquire_dimension(incid, idimid,             len=INZ),     "getting INZ"   )
-    CALL check( nf90_inquire_dimension(incid, INT(2,KIND=CDFINT), len=INLONGI), "getting NLONG" )
-    CALL check( nf90_inquire_dimension(incid, INT(1,KIND=CDFINT), len=INLATI),  "getting NLAT"  )
-!   
-    WRITE(ILUOUT,FMT=*) 'NB LEVLS READ INZ, NLONG NLAT ', INZ, INLONGI,INLATI
-    ALLOCATE(ZOC_TEMPERATURE(INLATI,INLONGI,INZ),ZOC_SALINITY(INLATI,INLONGI,INZ))
-    ALLOCATE(ZOC_U(INLATI,INLONGI,INZ),ZOC_V(INLATI,INLONGI,INZ))
-    ALLOCATE(ZOC_DEPTH(INZ))
-    WRITE(ILUOUT,FMT=*) 'NETCDF READING ==> Temp'
-    CALL check(nf90_inq_varid(incid,"temperature",ivarid), "getting temp ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_TEMPERATURE), "reading temp")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> salinity'
-    CALL check(nf90_inq_varid(incid,"salinity",ivarid), "getting salinity ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_SALINITY), "reading salinity")
-    WRITE(ILUOUT,FMT=*) 'Netcdf ==> Reading depth'
-    CALL check(nf90_inq_varid(incid,"depth",ivarid), "getting depth ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_DEPTH), "reading depth")
-    WRITE(ILUOUT,FMT=*) 'depth: max min ', MAXVAL(ZOC_DEPTH),MINVAL(ZOC_DEPTH)
-    WRITE(ILUOUT,FMT=*) 'depth 1 nz: ', ZOC_DEPTH(1),ZOC_DEPTH(INZ)
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> Currents'
-    CALL check(nf90_inq_varid(incid,"u",ivarid), "getting u ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_U), "reading u")
-    CALL check(nf90_inq_varid(incid,"v",ivarid), "getting v ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_V), "reading v")
-    CALL check(nf90_close(incid), "closing yinfile")
-    WRITE(ILUOUT,FMT=*) 'End of initial file reading'
-!
-    DO JKM=1,INZ
-     ZOC_TEMPERATURE(1,1,JKM)=ZOC_TEMPERATURE(1,1,JKM)+273.15
-     WRITE(ILUOUT,FMT=*) 'Z T(Kelvin) S(Sverdup) U V K',&
-     JKM,ZOC_DEPTH(JKM),ZOC_TEMPERATURE(1,1,JKM),ZOC_SALINITY(1,1,JKM),ZOC_U(1,1,JKM),ZOC_V(1,1,JKM), JKM
-    ENDDO
-    !  number of data levels
-    ILEVELM=INZ
-    ! Model bottom
-    ZTGROUND  = ZOC_TEMPERATURE(1,1,ILEVELM)
-    ZMRGROUND = ZOC_SALINITY(1,1,ILEVELM)
-    ZZGROUND=0.
-    ! Allocate required memory
-    ALLOCATE(ZHEIGHTM(ILEVELM))           
-    ALLOCATE(ZT(ILEVELM))
-    ALLOCATE(ZTV(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTHV(ILEVELM)) 
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))
-    !  Going from the inverse model grid (data) to the normal one
-    DO JKM= 1,ILEVELM
-      ! Z axis reoriented as in the model
-      IDX     = ILEVELM-JKM+1
-      ZT(JKM) = ZOC_TEMPERATURE(1,1,IDX)
-      ZMR(JKM)  =  ZOC_SALINITY(1,1,IDX)
-      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
-      ! Z oriented in same time to have a model domain axis going
-      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
-      ! translation/inversion
-      ZHEIGHTM(JKM) = -ZOC_DEPTH(IDX) + ZOC_DEPTH(ILEVELM)
-      WRITE(ILUOUT,FMT=*) 'End gridmodel comput: JKM IDX depth T S ZHEIGHTM', &
-      JKM,IDX,ZOC_DEPTH(IDX),ZT(JKM),ZMR(JKM),ZHEIGHTM(JKM)
-    END DO
-    ! complete ther variables
-    ZTV  = ZT
-    ZTHV = ZT
-    ZRT  = ZMR
-    ZTHL = ZT
-    ZTH  = ZT
-    ! INIT --- U V -----
-    ILEVELU = INZ               ! Same nb of levels for u,v,T,S
-    !Assume that current and temp are given at same level
-    ALLOCATE(ZHEIGHTU(ILEVELU))           
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-    ZHEIGHTU=ZHEIGHTM
-    DO JKM= 1,ILEVELU
-      ! Z axis reoriented as in the model
-      IDX     = ILEVELU-JKM+1
-      ZU(JKM) = ZOC_U(1,1,IDX)
-      ZV(JKM) = ZOC_V(1,1,IDX)
-      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
-      ! Z oriented in same time to have a model domain axis going
-      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
-    END DO
-!
-    DEALLOCATE(ZOC_TEMPERATURE)
-    DEALLOCATE(ZOC_SALINITY)
-    DEALLOCATE(ZOC_U)
-    DEALLOCATE(ZOC_V)
-    DEALLOCATE(ZOC_DEPTH)
-!
-    ! Reading/initializing  surface forcings
-!
-    WRITE(ILUOUT,FMT=*) 'netcdf sfc forcings file to be read:',yinfisf
-    ! Open of sfc forcing file
-    CALL check(nf90_open(yinfisf,NF90_NOWRITE,incid), "opening NC file")
-    ! Reading dimension and length
-    CALL check( nf90_inq_dimid(incid,"t",idimid), "getting  time dimension id" )
-    CALL check( nf90_inquire_dimension(incid, idimid, len=idimlen), "getting idimlen "  )
-!
-    WRITE(ILUOUT,FMT=*) 'nb sfc-forcing time idimlen=',idimlen
-    ALLOCATE(ZOC_LE(idimlen))
-    ALLOCATE(ZOC_H(idimlen))
-    ALLOCATE(ZOC_SW_DOWN(idimlen))
-    ALLOCATE(ZOC_SW_UP(idimlen))
-    ALLOCATE(ZOC_LW_DOWN(idimlen))
-    ALLOCATE(ZOC_LW_UP(idimlen))
-    ALLOCATE(ZOC_TAUX(idimlen))
-    ALLOCATE(ZOC_TAUY(idimlen))
-!
-    WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> LE'  
-    CALL check(nf90_inq_varid(incid,"LE",ivarid), "getting LE ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_LE), "reading LE flux")
-    WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> H'  
-    CALL check(nf90_inq_varid(incid,"H",ivarid), "getting H ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_H), "reading H flux")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_DOWN'  
-    CALL check(nf90_inq_varid(incid,"SW_DOWN",ivarid), "getting SW_DOWN ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_SW_DOWN), "reading SW_DOWN")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_UP'  
-    CALL check(nf90_inq_varid(incid,"SW_UP",ivarid), "getting SW_UP ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_SW_UP), "reading SW_UP")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_DOWN'  
-    CALL check(nf90_inq_varid(incid,"LW_DOWN",ivarid), "getting LW_DOWN ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_LW_DOWN), "reading LW_DOWN")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_UP'  
-    CALL check(nf90_inq_varid(incid,"LW_UP",ivarid), "getting LW_UP ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_LW_UP), "reading LW_UP")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUX'  
-    CALL check(nf90_inq_varid(incid,"TAUX",ivarid), "getting TAUX ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_TAUX), "reading TAUX")
-    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUY'  
-    CALL check(nf90_inq_varid(incid,"TAUY",ivarid), "getting TAUY ivarid")
-    CALL check(nf90_get_var(incid,ivarid,ZOC_TAUY), "reading TAUY")
-    CALL check(nf90_close(incid), "closing yinfifs")
-!
-    WRITE(ILUOUT,FMT=*) '  Forcing-Number    LE     H     SW_down     SW_up    LW_down   LW_up TauX TauY' 
-    DO JKM = 1, idimlen
-      WRITE(ILUOUT,FMT=*) JKM, ZOC_LE(JKM), ZOC_H(JKM),ZOC_SW_DOWN(JKM),ZOC_SW_UP(JKM),&
-                          ZOC_LW_DOWN(JKM),ZOC_LW_UP(JKM),ZOC_TAUX(JKM),ZOC_TAUY(JKM)   
-    ENDDO
-    ! IFRCLT FORCINGS at sea surface
-    IFRCLT=idimlen
-    ALLOCATE(ZFRCLT(IFRCLT)) 
-    ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0
-    ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0
-    ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0
-    ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0
-    DO JKT=1,IFRCLT
-      ! Initial file for CINDY-DYNAMO: all fluxes correspond to the absolute value (>0)
-      ! modele ocean: axe z dirigé du bas vers la sfc de l'océan
-      ! => flux dirigé vers le haut (positif ocean vers l'atmopshere i.e. bas vers le haut)
-      ZSSOLA_T(JKT)=ZOC_SW_DOWN(JKT)-ZOC_SW_UP(JKT)
-      ZSSTFL_T(JKT)=(ZOC_LW_DOWN(JKT)-ZOC_LW_UP(JKT)-ZOC_LE(JKT)-ZOC_H(JKT))
-      ! assume that Tau given on file is along Ox
-      ! rho_air UW_air = rho_ocean UW_ocean= N/m2
-      ! uw_ocean
-      ZSSUFL_T(JKT)=ZOC_TAUX(JKT)
-      ZSSVFL_T(JKT)=ZOC_TAUY(JKT)
-      WRITE(ILUOUT,FMT=*) 'Forcing Nb Sol NSol UW_oc VW',&
-                          JKT,ZSSOLA_T(JKT),ZSSTFL_T(JKT),ZSSUFL_T(JKT),ZSSVFL_T(JKT) 
-    ENDDO
-    ! Allocate and Writing the corresponding variables in module MODD_OCEAN_FRC
-    NFRCLT=IFRCLT
-    ! value to read later on file ? 
-    NINFRT=600
-    ALLOCATE(TFRCLT(NFRCLT))
-    ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0.
-    ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0.
-    ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0.
-    ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0.
-    ! on passe en unités SI, signe, etc pour le modele ocean
-    !  W/m2 => SI :  /(CP_mer * rho_mer)
-    ! a revoir dans tt le code pour mettre de svaleurs plus exactes
-    DO JKT=1,NFRCLT
-      TFRCLT(JKT)= ZFRCLT(JKT)
-      XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN
-      XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN
-      XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN)
-      XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN)
-    END DO   
-    DEALLOCATE(ZFRCLT)
-    DEALLOCATE(ZSSUFL_T)
-    DEALLOCATE(ZSSVFL_T)
-    DEALLOCATE(ZSSTFL_T)
-    DEALLOCATE(ZSSOLA_T)
-    DEALLOCATE(ZOC_LE)    
-    DEALLOCATE(ZOC_H)    
-    DEALLOCATE(ZOC_SW_DOWN)    
-    DEALLOCATE(ZOC_SW_UP)    
-    DEALLOCATE(ZOC_LW_DOWN)    
-    DEALLOCATE(ZOC_LW_UP)    
-    DEALLOCATE(ZOC_TAUX)
-    DEALLOCATE(ZOC_TAUY)
-    ! END OCEAN STANDARD
-!
-!
-!*       2.1  ATMOSPHERIC STANDARD case : ZGROUND, PGROUND, TGROUND, TDGROUND
-!                               (Pressure, dd, ff) , 
-!                               (Pressure, T, Td)
-!
-  CASE ('STANDARD')
-    
-    READ(ILUPRE,*) ZZGROUND                 ! Read data at ground level
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTGROUND
-    READ(ILUPRE,*) ZTDGROUND
-!
-    READ(ILUPRE,*) ILEVELU               ! Read number of wind levels
-    ALLOCATE(ZPRESSU(ILEVELU))           ! Allocate memory for arrays to be read
-    ALLOCATE(ZDD(ILEVELU),ZFF(ILEVELU))  
-    ALLOCATE(ZHEIGHTU(ILEVELU))          ! Allocate memory for needed 
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))    !  arrays
-    ALLOCATE(ZTHVU(ILEVELU))             ! Allocate memory for intermediate
-                                         !  arrays 
-!
-    DO JKU = 1,ILEVELU                   ! Read data at wind levels
-      READ(ILUPRE,*) ZPRESSU(JKU),ZDD(JKU),ZFF(JKU)  
-    END DO  
-!
-    READ(ILUPRE,*) ILEVELM           ! Read number of mass levels
-                                     ! including the ground level
-    ALLOCATE(ZPRESSM(ILEVELM))     ! Allocate memory for arrays to be read
-    ALLOCATE(ZT(ILEVELM))                                   
-    ALLOCATE(ZTD(ILEVELM))                                  
-    ALLOCATE(ZHEIGHTM(ILEVELM))    ! Allocate memory for needed 
-    ALLOCATE(ZTHV(ILEVELM))        !  arrays
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTV(ILEVELM))         ! Allocate memory for intermediate arrays
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))                                              
-!
-!   
-    DO JKM= 2,ILEVELM                ! Read data at mass levels
-      READ(ILUPRE,*) ZPRESSM(JKM),ZT(JKM),ZTD(JKM)
-    END DO
-    ZPRESSM(1)=ZPGROUND                 ! Mass level 1 is at the ground
-    ZT(1)=ZTGROUND
-    ZTD(1)=ZTDGROUND 
-!   
-!     recover the North-South and West-East wind components
-    ZU(:) = ZFF(:)*COS(ZRADSDG*(270.-ZDD(:)) )              
-    ZV(:) = ZFF(:)*SIN(ZRADSDG*(270.-ZDD(:)) )
-!
-!     compute vapor mixing ratio 
-    ZMR(:)  = SM_FOES(ZTD(:))                            &      
-            / ( (ZPRESSM(:) - SM_FOES(ZTD(:))) * ZRVSRD )       
-! 
-!     compute Tv
-    ZTV(:) = ZT(:) * (1. + ZRVSRD * ZMR(:))/(1.+ZMR(:))         
-!
-!     compute thetav
-    ZTHV(:) = ZTV(:) * (XP00/ ZPRESSM(:)) **(ZRDSCPD)         
-!
-!     compute height at the mass levels of the RS
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) 
-!
-!     compute thetav and height at the wind levels of the RS
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV)        
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)
-!
-!   Compute Thetal and Rt
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-!
-!*       2.2  PUVTHVMR case : zGROUND, PGROUND, ThvGROUND, RGROUND
-!                               (Pressure, U, V) , 
-!                               (Pressure, THv, R)
-!
-  CASE ('PUVTHVMR') 
-!  
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND                       
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHVGROUND
-    READ(ILUPRE,*) ZMRGROUND
-!
-!     Read number of wind levels
-    READ(ILUPRE,*) ILEVELU  
-! 
-!     Allocate the required memory               
-    ALLOCATE(ZPRESSU(ILEVELU))              
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))    
-    ALLOCATE(ZHEIGHTU(ILEVELU))             
-    ALLOCATE(ZTHVU(ILEVELU))                
-!
-!     Read the data at each wind level of the RS   
-    DO JKU =1,ILEVELU
-      READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU)   
-    END DO
-! 
-!     Read number of mass levels
-    READ(ILUPRE,*) ILEVELM
-!
-!     Allocate the required memory     
-    ALLOCATE(ZPRESSM(ILEVELM))          
-    ALLOCATE(ZHEIGHTM(ILEVELM))
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))
-!   
-!     Read the data at each mass level of the RS   
-    DO JKM = 2,ILEVELM
-      READ(ILUPRE,*) ZPRESSM(JKM),ZTHV(JKM),ZMR(JKM)
-    END DO
-!
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZPRESSM(1) = ZPGROUND
-    ZTHV(1)    = ZTHVGROUND
-    ZMR(1)     = ZMRGROUND 
-!
-!     Compute height of the mass levels of the RS
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) 
-!                                                                 
-!     Compute thetav and heigth at the wind levels of the RS 
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV)         
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)
-!
-! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-!
-!*       2.3  PUVTHVHU case :  zGROUND, PGROUND, ThvGROUND, HuGROUND
-!                               (Pressure, U, V) , 
-!                               (Pressure, THv, Hu)
-!
-  CASE ('PUVTHVHU')
-! 
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND                
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHVGROUND
-    READ(ILUPRE,*) ZHUGROUND
-!
-!     Read number of wind levels
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory     
-    ALLOCATE(ZPRESSU(ILEVELU))             
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-    ALLOCATE(ZHEIGHTU(ILEVELU))            
-    ALLOCATE(ZTHVU(ILEVELU))               
-!                                           
-!     Read the data at each wind level of the RS   
-    DO JKU =1,ILEVELU
-      READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU)   
-    END DO
-! 
-!     Read number of mass levels
-    READ(ILUPRE,*) ILEVELM
-!
-!     Allocate the required memory  
-    ALLOCATE(ZPRESSM(ILEVELM))           
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZHU(ILEVELM))
-    ALLOCATE(ZHEIGHTM(ILEVELM))          
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTV(ILEVELM))     
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))
-!   
-!     Read the data at each mass level of the RS   
-    DO JKM = 2,ILEVELM
-      READ(ILUPRE,*) ZPRESSM(JKM),ZTHV(JKM),ZHU(JKM)
-    END DO
-!
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZPRESSM(1) = ZPGROUND                    ! Mass level 1 is at the ground
-    ZTHV(1)    = ZTHVGROUND
-    ZHU(1)     = ZHUGROUND
-! 
-!     Compute Tv
-    ZTV(:)=ZTHV(:) * (ZPRESSM(:) / XP00) ** ZRDSCPD  
-!
-!     Compte mixing ratio      
-    ZMR(:)=SM_PMR_HU(ZPRESSM(:),ZTV(:),ZHU(:),SPREAD(ZMR(:),2,1))     
-!                                                          
-!     Compute height of the mass levels of the RS
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND)
-!                                                                 
-!     Compute thetav and height of the wind levels of the RS                                                                
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV)   
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)
-! 
-! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-!
-!*       2.4  ZUVTHVHU case :  zGROUND, PGROUND, ThvGROUND, HuGROUND
-!                               (height, U, V) , 
-!                               (height, THv, Hu)
-!
-  CASE ('ZUVTHVHU')
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND                
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHVGROUND
-    READ(ILUPRE,*) ZHUGROUND
-!
-!     Read number of wind levels
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory 
-    ALLOCATE(ZPRESSU(ILEVELU))
-    ALLOCATE(ZHEIGHTU(ILEVELU))           
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-!
-!
-!     Read the data at each wind level of the RS   
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)  
-    END DO
-! 
-!     Read number of mass levels
-    READ(ILUPRE,*) ILEVELM
-!
-!     Allocate the required memory 
-    ALLOCATE(ZHEIGHTM(ILEVELM))          
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZHU(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))               
-    ALLOCATE(ZPRESSM(ILEVELM))           
-    ALLOCATE(ZTV(ILEVELM))
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))    
-!   
-!     Read the data at each mass level of the RS
-    DO JKM = 2,ILEVELM
-      READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHV(JKM),ZHU(JKM)
-    END DO 
-!
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZHEIGHTM(1) = ZZGROUND                   ! Mass level 1 is at the ground 
-    ZTHV(1)    = ZTHVGROUND
-    ZHU(1)     = ZHUGROUND
-!
-!     Compute Pressure at the mass levels of the RS
-    ZPRESSM= PRESS_HEIGHT(ZHEIGHTM,ZTHV,ZPGROUND,ZTHV(1),ZHEIGHTM(1)) 
-!                                                       
-!     Compute Tv and the mixing ratio at the mass levels of the RS
-    ZTV(:)=ZTHV(:) * (ZPRESSM(:) / XP00) ** ZRDSCPD   
-    ZMR(:)=SM_PMR_HU(ZPRESSM(:),ZTV(:),ZHU(:),SPREAD(ZMR(:),2,1)) 
-!
-! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-!
-!
-!*       2.5  ZUVTHVMR case :  zGROUND, PGROUND, ThvGROUND, RGROUND
-!                               (height, U, V) , 
-!                               (height, THv, R)
-!
-!
-  CASE ('ZUVTHVMR')
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHVGROUND
-    READ(ILUPRE,*) ZMRGROUND
-!
-!     Read number of wind levels
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory 
-    ALLOCATE(ZHEIGHTU(ILEVELU))         
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-!
-!     Read the data at each wind level of the RS
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)  
-    END DO
-! 
-!     Read number of mass levels
-    READ(ILUPRE,*) ILEVELM
-!
-!     Allocate the required memory 
-    ALLOCATE(ZHEIGHTM(ILEVELM))           
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))    
-!
-!     Read the data at each mass level of the RS
-    DO JKM=2,ILEVELM    
-      READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHV(JKM),ZMR(JKM) 
-    END DO
-!
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZHEIGHTM(1)= ZZGROUND                      ! Mass level 1 is at the ground
-    ZTHV(1)    = ZTHVGROUND
-    ZMR(1)     = ZMRGROUND
-! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))    
-!
-!
-!*       2.6  PUVTHDMR case : zGROUND, PGROUND, ThdGROUND, RGROUND
-!                               (Pressure, U, V) , 
-!                               (Pressure, THd, R)
-!
-  CASE ('PUVTHDMR')
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND               
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHDGROUND
-    READ(ILUPRE,*) ZMRGROUND
-!
-!     Read number of wind levels
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory 
-    ALLOCATE(ZPRESSU(ILEVELU))          
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-    ALLOCATE(ZTHVU(ILEVELU))
-    ALLOCATE(ZHEIGHTU(ILEVELU))         
-!
-!     Read the data at each wind level of the RS
-    DO JKU =1,ILEVELU    
-      READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-!
-!     Read number of mass levels 
-    READ(ILUPRE,*) ILEVELM
-!
-!     Allocate the required memory 
-    ALLOCATE(ZPRESSM(ILEVELM))         
-    ALLOCATE(ZTHD(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZMRC(ILEVELM))
-    ZMRC=0
-    ALLOCATE(ZMRI(ILEVELM))
-    ZMRI=0
-    ALLOCATE(ZHEIGHTM(ILEVELM))        
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))     
-!
-!     Read the data at each mass level of the RS
-    DO JKM=2,ILEVELM
-      IF(LUSERI) THEN
-        READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM)
-      ELSEIF (GUSERC) THEN
-        READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM)
-      ELSE
-        READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM)
-      ENDIF
-    END DO
-!
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZPRESSM(1) = ZPGROUND                     ! Mass level 1 is at  the ground
-    ZTHD(1)    = ZTHDGROUND
-    ZMR(1)     = ZMRGROUND 
-    IF(GUSERC) ZMRC(1) = ZMRC(2)
-    IF(LUSERI) ZMRI(1) = ZMRI(2)
-!
-!     Compute thetav at the mass levels of the RS
-      ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:)+ZMRI(:))
-!
-!     Compute the heights at the mass levels of the RS
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND)
-!
-!     Compute thetav and heights of the wind levels
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV)   
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)
-!
-!    Compute Theta l and Rt  
-    IF (.NOT. GUSERC  .AND. .NOT. LUSERI) THEN
-      ZRT(:)=ZMR(:)
-      ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))   
-    ELSE
-       ALLOCATE(ZEXN(ILEVELM))         
-       ALLOCATE(ZT(ILEVELM))       
-       ALLOCATE(ZCPH(ILEVELM))        
-       ALLOCATE(ZLVOCPEXN(ILEVELM))        
-       ALLOCATE(ZLSOCPEXN(ILEVELM))               
-       ZRT(:)=ZMR(:)+ZMRI(:)+ZMRC(:)
-       ZEXN(:)=(ZPRESSM/XP00) ** (XRD/XCPD)
-       ZT(:)=ZTHV*(ZPRESSM(:)/XP00)**(ZRDSCPD)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-       ZCPH(:)=XCPD+ XCPV * ZMR(:)+ XCL *ZMRC(:)  + XCI * ZMRI(:)
-       ZLVOCPEXN(:) = (XLVTT + (XCPV-XCL) * (ZT(:)-XTT))/(ZCPH*ZEXN(:))
-       ZLSOCPEXN(:) = (XLSTT + (XCPV-XCI) * (ZT(:)-XTT))/(ZCPH*ZEXN(:))
-       ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))-ZLVOCPEXN(:)*ZMRC(:)-ZLSOCPEXN(:)*ZMRI(:)
-       DEALLOCATE(ZEXN)         
-       DEALLOCATE(ZT)       
-       DEALLOCATE(ZCPH)        
-       DEALLOCATE(ZLVOCPEXN)        
-       DEALLOCATE(ZLSOCPEXN)
-    ENDIF   
-!
-!
-!*       2.7  PUVTHDHU case :  zGROUND, PGROUND, ThdGROUND, HuGROUND
-!                               (Pressure, U, V) , 
-!                               (Pressure, THd, Hu)
-!
-  CASE ('PUVTHDHU')
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND              
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHDGROUND
-    READ(ILUPRE,*) ZHUGROUND
-!
-!     Read number of wind levels  
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory
-    ALLOCATE(ZPRESSU(ILEVELU))         
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-    ALLOCATE(ZTHVU(ILEVELU))
-    ALLOCATE(ZHEIGHTU(ILEVELU))        
-!
-!     Read the data at each wind level of the RS
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-!
-!     Read number of mass levels 
-    READ(ILUPRE,*) ILEVELM
-!
-! Allocate the required memory
-    ALLOCATE(ZPRESSM(ILEVELM))          
-    ALLOCATE(ZTHD(ILEVELM))
-    ALLOCATE(ZHU(ILEVELM))
-    ALLOCATE(ZHEIGHTM(ILEVELM))          
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZT(ILEVELM)) 
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))                                          
-!   
-!     Read the data at each mass level of the RS
-    DO JKM =2,ILEVELM
-      READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM), ZHU(JKM)
-    END DO
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZPRESSM(1) = ZPGROUND                     ! Mass level 1 is at the  ground
-    ZTHD(1)    = ZTHDGROUND
-    ZHU(1)     = ZHUGROUND
-! 
-    ZT(:) = ZTHD(:) * (ZPRESSM(:)/XP00)**ZRDSCPD  ! compute T and mixing ratio
-    ZMR(:) = ZRDSRV*SM_FOES(ZT(:))/((ZPRESSM(:)*100./ZHU(:)) -SM_FOES(ZT(:)))
-                         
-!     Compute thetav at the mass levels of the RS
-    ZTHV(:) = ZTHD(:)  * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)) 
-!
-!     Compute height at mass levels
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) 
-!
-!     Compute thetav and heights of the wind levels 
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) 
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)   
-!
-!   Compute thetal and Rt
-    ZRT(:)=ZMR(:)
-    ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))      
-!
-!*       2.8  ZUVTHDMR case :  zGROUND, PGROUND, ThdGROUND, RGROUND
-!                               (height, U, V) , 
-!                               (height, THd, R)
-!
-  CASE ('ZUVTHDMR')
-! Read data at ground level
-    READ(ILUPRE,*) ZZGROUND                  
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHDGROUND
-    READ(ILUPRE,*) ZMRGROUND
-!
-!     Read number of wind levels  
-    READ(ILUPRE,*) ILEVELU
-!
-!   Allocate required memory 
-    ALLOCATE(ZHEIGHTU(ILEVELU))           
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-!
-!     Read the data at each wind level of the RS
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-! 
-!     Read number of mass levels  
-     READ(ILUPRE,*) ILEVELM
-!
-!   Allocate required memory 
-    ALLOCATE(ZHEIGHTM(ILEVELM))           
-    ALLOCATE(ZTHD(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTHV(ILEVELM)) 
-    ALLOCATE(ZMRC(ILEVELM))
-    ZMRC=0
-    ALLOCATE(ZMRI(ILEVELM))
-    ZMRI=0
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))
-!
-!     Read the data at each mass level of the RS
-    DO JKM= 2,ILEVELM
-      IF(LUSERI) THEN
-        READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM)
-      ELSEIF (GUSERC) THEN
-        READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM)
-      ELSE
-        READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM)
-      ENDIF
-    END DO
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZHEIGHTM(1) = ZZGROUND                     ! Mass level 1 is at ground
-    ZTHD(1)     = ZTHDGROUND
-    ZMR(1)      = ZMRGROUND
-    IF(GUSERC) ZMRC(1) = ZMRC(2)
-    IF(LUSERI) ZMRI(1) = ZMRI(2)
-!     Compute thetav at the mass levels of the RS
-    IF(LUSERI) THEN
-      ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:)+ZMRI(:))
-    ELSEIF (GUSERC) THEN
-      ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:))
-    ELSE
-      ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:))
-    ENDIF    
-!    
-!    Compute Theta l and Rt  
-    IF (.NOT. GUSERC  .AND. .NOT. LUSERI) THEN
-      ZRT(:)=ZMR(:)
-      ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))   
-    ELSE
-       ALLOCATE(ZEXN(ILEVELM))  
-       ALLOCATE(ZEXNFLUX(ILEVELM))        
-       ALLOCATE(ZT(ILEVELM))       
-       ALLOCATE(ZCPH(ILEVELM))        
-       ALLOCATE(ZLVOCPEXN(ILEVELM))        
-       ALLOCATE(ZLSOCPEXN(ILEVELM))  
-       ZRT(:)=ZMR(:)+ZMRI(:)+ZMRC(:)
-       ZEXNSURF=(ZPGROUND/XP00) ** (XRD/XCPD)
-       CALL COMPUTE_EXNER_FROM_GROUND(ZTHV,ZHEIGHTM,ZEXNSURF,ZEXNFLUX,ZEXN)
-       ZT(:)=ZTHV*ZEXN(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-       ZCPH(:)=XCPD+ XCPV * ZMR(:)+ XCL *ZMRC(:)  + XCI * ZMRI(:)
-       ZLVOCPEXN(:) = (XLVTT + (XCPV-XCL) * (ZT(:)-XTT))/(ZCPH*ZEXN(:))
-       ZLSOCPEXN(:) = (XLSTT + (XCPV-XCI) * (ZT(:)-XTT))/(ZCPH*ZEXN(:))
-       ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))-ZLVOCPEXN(:)*ZMRC(:)-ZLSOCPEXN(:)*ZMRI(:)
-       DEALLOCATE(ZEXN)         
-       DEALLOCATE(ZEXNFLUX)         
-       DEALLOCATE(ZT)       
-       DEALLOCATE(ZCPH)        
-       DEALLOCATE(ZLVOCPEXN)        
-       DEALLOCATE(ZLSOCPEXN)
-    ENDIF  
-!
-! 2.9 ZUVTHLMR case : zGROUND, PGROUND, ThdGROUND, RGROUND
-!                               (height, U, V)
-!                               (height, THL, Rt)
-
-!
-  CASE ('ZUVTHLMR')
-! Read data at ground level
-    READ(ILUPRE,*) ZZGROUND                  
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTHLGROUND
-    READ(ILUPRE,*) ZMRGROUND
-!
-!   Read number of wind levels  
-    READ(ILUPRE,*) ILEVELU
-!
-!   Allocate required memory 
-    ALLOCATE(ZHEIGHTU(ILEVELU))           
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-!
-!   Read the data at each wind level of the RS
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-! 
-!   Read number of mass levels  
-    READ(ILUPRE,*) ILEVELM
-!
-!   Allocate required memory 
-    ALLOCATE(ZHEIGHTM(ILEVELM))           
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZTH(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTHV(ILEVELM)) 
-    ALLOCATE(ZMRC(ILEVELM))
-    ZMRC=0
-    ALLOCATE(ZMRI(ILEVELM))
-    ZMRI=0    
-    ALLOCATE(ZRT(ILEVELM))
-!
-!   Read the data at each mass level of the RS
-    DO JKM= 2,ILEVELM
-!     IF(LUSERI) THEN
-!       READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM)
-!     ELSEIF (GUSERC) THEN
-      IF (GUSERC) THEN
-        READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM),ZMRC(JKM)
-      ELSE
-        READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM)
-      ENDIF
-    END DO
-!   Complete the mass arrays with the ground informations read in EXPRE file
-    ZHEIGHTM(1) = ZZGROUND                     ! Mass level 1 is at ground
-    ZTHL(1)     = ZTHLGROUND
-    ZMR(1)      = ZMRGROUND
-    IF(GUSERC) ZMRC(1) = ZMRC(2)
-!   IF(LUSERI) ZMRI(1) = ZMRI(2)
-!
-!   Compute Rt
-    ZRT(:)=ZMR+ZMRC+ZMRI
-!
-!*       2.10  PUVTHU case :  zGROUND, PGROUND, TempGROUND, HuGROUND
-!                               (Pressure, U, V) , 
-!                               (Pressure, Temp, Hu)
-!
-  CASE ('PUVTHU')
-!     Read data at ground level      
-    READ(ILUPRE,*) ZZGROUND              
-    READ(ILUPRE,*) ZPGROUND
-    READ(ILUPRE,*) ZTGROUND
-    READ(ILUPRE,*) ZHUGROUND
-!
-!     Read number of wind levels  
-    READ(ILUPRE,*) ILEVELU
-!
-!     Allocate the required memory
-    ALLOCATE(ZPRESSU(ILEVELU))         
-    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
-    ALLOCATE(ZTHVU(ILEVELU))
-    ALLOCATE(ZHEIGHTU(ILEVELU))        
-!
-!     Read the data at each wind level of the RS
-    DO JKU = 1,ILEVELU
-      READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU)
-    END DO
-!
-!     Read number of mass levels 
-    READ(ILUPRE,*) ILEVELM
-!
-! Allocate the required memory
-    ALLOCATE(ZPRESSM(ILEVELM))          
-    ALLOCATE(ZTHD(ILEVELM))
-    ALLOCATE(ZHU(ILEVELM))
-    ALLOCATE(ZHEIGHTM(ILEVELM))          
-    ALLOCATE(ZTHV(ILEVELM))
-    ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZT(ILEVELM))  
-    ALLOCATE(ZTHL(ILEVELM))
-    ALLOCATE(ZRT(ILEVELM))
-
-!   
-!     Read the data at each mass level of the RS
-    DO JKM =2,ILEVELM
-      READ(ILUPRE,*) ZPRESSM(JKM),ZT(JKM), ZHU(JKM)
-    END DO
-!     Complete the mass arrays with the ground informations read in EXPRE file
-    ZPRESSM(1) = ZPGROUND                     ! Mass level 1 is at the  ground
-    ZT(1)    = ZTGROUND
-    ZHU(1)     = ZHUGROUND
-! 
-    ZTHD(:) = ZT(:) / (ZPRESSM(:)/XP00)**ZRDSCPD  ! compute THD and mixing ratio
-    ZMR(:) = ZRDSRV*SM_FOES(ZT(:))/((ZPRESSM(:)*100./ZHU(:)) -SM_FOES(ZT(:)))
-!     Compute thetav at the mass levels of the RS
-    ZTHV(:) = ZTHD(:)  * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)) 
-!
-!     Compute height at mass levels
-    ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) 
-!
-!     Compute thetav and heights of the wind levels 
-    ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) 
-    ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND)   
-!
-! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total
-     ZRT(:)=ZMR(:)
-     ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
-  CASE DEFAULT
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','data type YKIND='//TRIM(YKIND)//' in PREFILE unknown')
-END SELECT
-!
-!-------------------------------------------------------------------------------
-!
-!*	 3.     INTERPOLATE ON THE  VERTICAL MIXED MODEL GRID 
-!	        ---------------------------------------------------------
-!
-!
-! 
-IKU=SIZE(XZHAT)
-!
-!*       3.1    Compute mixed grid
-! 
-IF (PRESENT(PCORIOZ)) THEN 
-! LGEOSBAL=T (no shift allowed, MNH grid without ororgraphy)
-  ZZS_LS(:,:)=0
-ELSE
-  IF (OSHIFT) THEN
-    ZZS_LS(:,:)=ZZGROUND
-  ELSE
-    ZZS_LS(:,:)=0
-  ENDIF
-ENDIF
-CALL VERT_COORD(LSLEVE,ZZS_LS,ZZS_LS,XLEN1,XLEN2,XZHAT,ZZFLUX_MX)
-ZZMASS_MX(:,:,:)=MZF(ZZFLUX_MX)
-ZZMASS_MX(:,:,IKU)=1.5*ZZFLUX_MX(:,:,IKU)-0.5*ZZFLUX_MX(:,:,IKU-1)
-!
-!*        3.2  Interpolate and extrapolate U and V on w- mixed grid levels
-!
-!* vertical grid at initialization profile location
-GPROFILE_IN_PROC=(KILOC+JPHEXT-IXOR_ll+1>=IIB .AND. KILOC+JPHEXT-IXOR_ll+1<=IIE) &
-         & .AND. (KJLOC+JPHEXT-IYOR_ll+1>=IJB .AND. KJLOC+JPHEXT-IYOR_ll+1<=IJE)
-!
-IF (GPROFILE_IN_PROC) THEN
-  ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:)
-  ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:)
-ELSE
-  ZZMASS_PROFILE(:) = 0.
-  ZZFLUX_PROFILE(:) = 0.
-END IF
-DO JK = 1,IKU
-  CALL REDUCESUM_ll(ZZMASS_PROFILE(JK), IINFO_ll)
-  CALL REDUCESUM_ll(ZZFLUX_PROFILE(JK), IINFO_ll)
-END DO
-
-! interpolation of U and V
-DO JK = 1,IKU
-  IF (ZZFLUX_PROFILE(JK) <= ZHEIGHTU(1)) THEN      ! extrapolation below the first level
-          ZDZSDH  = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(1)) / (ZHEIGHTU(2) - ZHEIGHTU(1))
-          ZUW(JK) = ZU(1) + (ZU(2) - ZU(1)) * ZDZSDH
-          ZVW(JK) = ZV(1) + (ZV(2) - ZV(1)) * ZDZSDH 
-  ELSE IF (ZZFLUX_PROFILE(JK) > ZHEIGHTU(ILEVELU) ) THEN  ! extrapolation above the last
-    ZDZSDH  = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(ILEVELU))                   &   ! level
-            / (ZHEIGHTU(ILEVELU) - ZHEIGHTU(ILEVELU-1))
-    ZUW(JK) = ZU(ILEVELU) + (ZU(ILEVELU) -ZU(ILEVELU -1)) * ZDZSDH
-    ZVW(JK) = ZV(ILEVELU) + (ZV(ILEVELU) -ZV(ILEVELU -1)) * ZDZSDH
-  ELSE                       ! interpolation between the first and last levels
-    DO JKLEV = 1,ILEVELU-1
-      IF ( (ZZFLUX_PROFILE(JK) > ZHEIGHTU(JKLEV)).AND.                  &
-           (ZZFLUX_PROFILE(JK) <= ZHEIGHTU(JKLEV+1)) )THEN 
-        ZDZ1SDH = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(JKLEV))                &
-              / (ZHEIGHTU(JKLEV+1)-ZHEIGHTU(JKLEV)) 
-        ZDZ2SDH = (ZHEIGHTU(JKLEV+1) - ZZFLUX_PROFILE(JK) )             &
-              / (ZHEIGHTU(JKLEV+1)-ZHEIGHTU(JKLEV)) 
-        ZUW(JK) = (ZU(JKLEV) * ZDZ2SDH) + (ZU(JKLEV+1) *ZDZ1SDH)
-        ZVW(JK) = (ZV(JKLEV) * ZDZ2SDH) + (ZV(JKLEV+1) *ZDZ1SDH)
-      END IF        
-    END DO
-  END IF
-END DO
-!
-!*       3.3    Interpolate and extrapolate Thetav and r on  mass mixed grid levels
-!
-ZMRCM=0
-ZMRIM=0
-DO JK = 1,IKU
-  IF (ZZMASS_PROFILE(JK) <= ZHEIGHTM(1)) THEN    ! extrapolation below the first level
-    ZDZSDH  = (ZZMASS_PROFILE(JK) - ZHEIGHTM(1)) / (ZHEIGHTM(2) - ZHEIGHTM(1))
-    ZTHLM(JK) = ZTHL(1) + (ZTHL(2) - ZTHL(1)) * ZDZSDH
-    ZMRM(JK)  = ZRT(1) + (ZRT(2) - ZRT(1)) * ZDZSDH 
-    IF (GUSERC) ZMRCM(JK)  = ZMRC(1) + (ZMRC(2) - ZMRC(1)) * ZDZSDH 
-    IF (LUSERI) ZMRIM(JK)  = ZMRI(1) + (ZMRI(2) - ZMRI(1)) * ZDZSDH 
-  ELSE IF (ZZMASS_PROFILE(JK) > ZHEIGHTM(ILEVELM) ) THEN  ! extrapolation above the last
-    ZDZSDH  = (ZZMASS_PROFILE(JK) - ZHEIGHTM(ILEVELM))                   &  ! level
-            / (ZHEIGHTM(ILEVELM) - ZHEIGHTM(ILEVELM-1))
-    ZTHLM(JK) = ZTHL(ILEVELM) + (ZTHL(ILEVELM) -ZTHL(ILEVELM -1)) * ZDZSDH
-    ZMRM(JK) = ZRT(ILEVELM) + (ZRT(ILEVELM) -ZRT(ILEVELM -1)) * ZDZSDH
-    IF (GUSERC) ZMRCM(JK) = ZMRC(ILEVELM) + (ZMRC(ILEVELM) -ZMRC(ILEVELM -1)) * ZDZSDH
-    IF (LUSERI) ZMRIM(JK) = ZMRI(ILEVELM) + (ZMRI(ILEVELM) -ZMRI(ILEVELM -1)) * ZDZSDH
-  ELSE  ! interpolation between the first and last levels
-    DO JKLEV = 1,ILEVELM-1
-      IF ( (ZZMASS_PROFILE(JK) > ZHEIGHTM(JKLEV)).AND.                  &
-           (ZZMASS_PROFILE(JK) <= ZHEIGHTM(JKLEV+1)) )THEN 
-        ZDZ1SDH = (ZZMASS_PROFILE(JK) - ZHEIGHTM(JKLEV))                 &
-              / (ZHEIGHTM(JKLEV+1)-ZHEIGHTM(JKLEV)) 
-        ZDZ2SDH = (ZHEIGHTM(JKLEV+1) - ZZMASS_PROFILE(JK) )              &
-              / (ZHEIGHTM(JKLEV+1)-ZHEIGHTM(JKLEV)) 
-        ZTHLM(JK) = (ZTHL(JKLEV) * ZDZ2SDH) + (ZTHL(JKLEV+1) *ZDZ1SDH)
-        ZMRM(JK)  = (ZRT(JKLEV) * ZDZ2SDH) + (ZRT(JKLEV+1) *ZDZ1SDH)
-        IF (GUSERC) ZMRCM(JK)  = (ZMRC(JKLEV) * ZDZ2SDH) + (ZMRC(JKLEV+1) *ZDZ1SDH)
-        IF (LUSERI) ZMRIM(JK)  = (ZMRI(JKLEV) * ZDZ2SDH) + (ZMRI(JKLEV+1) *ZDZ1SDH)
-      END IF 
-    END DO
-  END IF
-END DO
-!
-! Compute thetaV rv ri and Rc with adjustement
-ALLOCATE(ZEXNFLUX(IKU))
-ALLOCATE(ZEXNMASS(IKU))
-ALLOCATE(ZPRESS(IKU))
-ALLOCATE(ZPREFLUX(IKU))
-ALLOCATE(ZFRAC_ICE(IKU))
-ALLOCATE(ZRSATW(IKU))
-ALLOCATE(ZRSATI(IKU))
-ALLOCATE(ZMRT(IKU))
-ALLOCATE(ZBUF(IKU,16))
-ZMRT=ZMRM+ZMRCM+ZMRIM
-ZTHVM=ZTHLM
-!
-IF (LOCEAN) THEN
-  ZRHODM(:)=XRH00OCEAN*(1.-XALPHAOC*(ZTHLM(:) - XTH00OCEAN)&
-          +XBETAOC* (ZMRM(:)  - XSA00OCEAN))
-  ZPREFLUX(IKU)=ZPTOP
-  DO JK=IKU-1,2,-1
-    ZPREFLUX(JK) = ZPREFLUX(JK+1) + XG*ZRHODM(JK)*(ZZFLUX_PROFILE(JK+1)-ZZFLUX_PROFILE(JK))
-  END DO
-  ZPGROUND=ZPREFLUX(2)
-  WRITE(ILUOUT,FMT=*)'ZPGROUND i.e. Pressure at ocean domain bottom',ZPGROUND
-  ZTHM=ZTHVM
-ELSE
-! Atmospheric case   
-  ZEXNSURF=(ZPGROUND/XP00)**(XRD/XCPD)
-  DO JLOOP=1,20 ! loop for pression 
-    CALL COMPUTE_EXNER_FROM_GROUND(ZTHVM,ZZMASS_PROFILE(:),ZEXNSURF,ZEXNFLUX,ZEXNMASS)
-    ZPRESS(:)=XP00*(ZEXNMASS(:))**(XCPD/XRD)
-    CALL TH_R_FROM_THL_RT(CST,NEB,SIZE(ZPRESS,1),'T',ZFRAC_ICE,ZPRESS,ZTHLM,ZMRT,ZTHM,ZMRM,ZMRCM,ZMRIM, &
-                          ZRSATW, ZRSATI,OOCEAN=.FALSE.,&
-                          PBUF=ZBUF)
-     ZTHVM(:)=ZTHM(:)*(1.+XRV/XRD*ZMRM(:))/(1.+(ZMRM(:)+ZMRIM(:)+ZMRCM(:)))
-  ENDDO
-ENDIF
-!
-DEALLOCATE(ZEXNFLUX)
-DEALLOCATE(ZEXNMASS)
-DEALLOCATE(ZPRESS)
-DEALLOCATE(ZFRAC_ICE)
-DEALLOCATE(ZRSATW)
-DEALLOCATE(ZRSATI)       
-DEALLOCATE(ZMRT)
-DEALLOCATE(ZBUF)
-!-------------------------------------------------------------------------------
-!
-!* 4.     COMPUTE FIELDS ON THE MODEL GRID (WITH OROGRAPHY)
-!         -------------------------------------------------
-CALL SET_MASS(TPFILE,GPROFILE_IN_PROC, ZZFLUX_PROFILE,                      &
-              KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,&
-              ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,              &
-              PMRCM=ZMRCM,PMRIM=ZMRIM,PCORIOZ=PCORIOZ)
-!
-DEALLOCATE(ZPREFLUX)
-DEALLOCATE(ZHEIGHTM)          
-DEALLOCATE(ZTHV)
-DEALLOCATE(ZMR)
-DEALLOCATE(ZTHL)
-!-------------------------------------------------------------------------------
-CONTAINS
-  SUBROUTINE CHECK( ISTATUS, YLOC )
-    INTEGER(KIND=CDFINT), INTENT(IN) :: ISTATUS
-    CHARACTER(LEN=*),     INTENT(IN) :: YLOC
-
-    IF( ISTATUS /= NF90_NOERR ) THEN
-      CALL PRINT_MSG( NVERB_ERROR, 'IO', 'SET_RSOU', 'error at ' // Trim( yloc) // ': ' // NF90_STRERROR( ISTATUS ) )
-    END IF
-  END SUBROUTINE check
-  !
-  INCLUDE "th_r_from_thl_rt.func.h"
-  INCLUDE "compute_frac_ice.func.h"
-  !
-END SUBROUTINE SET_RSOU
diff --git a/src/mesonh/ext/shallow_mf_pack.f90 b/src/mesonh/ext/shallow_mf_pack.f90
deleted file mode 100644
index ee2f7e2fb5d794175d12979085583f31a02a53fd..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/shallow_mf_pack.f90
+++ /dev/null
@@ -1,383 +0,0 @@
-!MNH_LIC Copyright 2010-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_SHALLOW_MF_PACK
-!    ######################
-!
-INTERFACE
-!     #################################################################
-      SUBROUTINE SHALLOW_MF_PACK(KRR,KRRL,KRRI,                       &
-                OMF_FLX,TPFILE,PTIME_LES,                             &
-                PIMPL_MF, PTSTEP,                                     &
-                PDZZ, PZZ, PDX,PDY,                                   &
-                PRHODJ, PRHODREF,                                     &
-                PPABSM, PEXN,                                         &
-                PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
-                PRTHS,PRRS,PRUS,PRVS,PRSVS,                           &
-                PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
-!     #################################################################
-!!
-use MODD_IO,        only: TFILEDATA
-use modd_precision, only: MNHTIME
-!
-!*               1.1  Declaration of Arguments
-!
-!
-INTEGER,                INTENT(IN)   :: KRR        ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL       ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI       ! number of ice water var.
-LOGICAL,                INTENT(IN)   :: OMF_FLX    ! switch to write the
-                                                   ! MF fluxes in the synchronous FM-file
-TYPE(TFILEDATA),        INTENT(IN)   :: TPFILE     ! Output file
-REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
-REAL,                   INTENT(IN)   :: PIMPL_MF   ! degre of implicitness
-REAL,                   INTENT(IN)   :: PTSTEP     ! Dynamical timestep 
-
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PZZ         ! Height of flux point
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PDZZ        ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRHODJ      ! dry density * Grid size
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRHODREF    ! dry density of the
-                                                     ! reference state
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PPABSM      ! Pressure at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PEXN        ! Exner function at t-dt
-
-REAL, DIMENSION(:,:),   INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTHM        ! Theta at t-dt
-REAL, DIMENSION(:,:,:,:),INTENT(IN)::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTKEM       ! tke at t-dt
-
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM      ! scalar variable a t-dt
-
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRTHS ! Meso-NH sources
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS            ! Scalar sources 
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PFLXZTHVMF           ! Thermal production for TKE scheme
-!
-REAL, INTENT(IN) :: PDX,PDY ! Size of mesh in X/Y directions
-END SUBROUTINE SHALLOW_MF_PACK
-
-END INTERFACE
-!
-END MODULE MODI_SHALLOW_MF_PACK
-
-!     #################################################################
-      SUBROUTINE SHALLOW_MF_PACK(KRR,KRRL,KRRI,                       &
-                OMF_FLX,TPFILE,PTIME_LES,                             &
-                PIMPL_MF, PTSTEP,                                     &
-                PDZZ, PZZ, PDX,PDY,                                   &
-                PRHODJ, PRHODREF,                                     &
-                PPABSM, PEXN,                                         &
-                PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
-                PRTHS,PRRS,PRUS,PRVS,PRSVS,                           &
-                PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
-!     #################################################################
-!!
-!!****  *SHALLOW_MF_PACK* - 
-!!       
-!!
-!!    PURPOSE
-!!    -------
-!!****  The purpose of this routine is
-!!
-!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!      
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!     REFERENCE
-!!     ---------
-!!
-!!
-!!     AUTHOR
-!!     ------
-!!      V.Masson 09/2010
-! --------------------------------------------------------------------------
-! Modifications:
-!  R. Honnert     07/2012: introduction of vertical wind for the height of the thermal
-!  M. Leriche     02/2017: avoid negative values for sv tendencies
-!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
-!  S. Riette      11/2016: support for CFRAC_ICE_SHALLOW_MF
-!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
-!  P. Wautelet    02/2020: use the new data structures and subroutines for budgets
-! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST, ONLY: CST
-USE MODD_NEB, ONLY: NEB
-USE MODD_TURB_n, ONLY: TURBN
-USE MODD_CTURB,  ONLY: CSTURB
-USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALLN
-USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
-!
-USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX
-!
-USE MODD_BUDGET,          ONLY: TBUDGETS,TBUCONF,lbudget_th,nbudget_th
-USE MODD_CONF
-USE MODD_IO,              ONLY: TFILEDATA
-USE modd_field,           ONLY: tfielddata, TYPEREAL
-USE MODD_NSV,             ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND
-USE MODD_PARAMETERS
-USE MODD_PARAM_ICE,       ONLY: CFRAC_ICE_SHALLOW_MF
-USE MODD_PARAM_MFSHALL_n
-USE modd_precision,       ONLY: MNHTIME
-
-USE mode_budget,          ONLY: Budget_store_init, Budget_store_end, Budget_store_add
-USE MODE_IO_FIELD_WRITE,  ONLY: IO_Field_write
-
-USE MODI_DIAGNOS_LES_MF
-USE MODI_SHALLOW_MF
-USE MODI_SHUMAN
-!
-IMPLICIT NONE
-
-!*                    0.1  Declaration of Arguments
-!
-!
-!
-INTEGER,                INTENT(IN)   :: KRR        ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL       ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI       ! number of ice water var.
-LOGICAL,                INTENT(IN)   :: OMF_FLX    ! switch to write the
-                                                   ! MF fluxes in the synchronous FM-file
-TYPE(TFILEDATA),        INTENT(IN)   :: TPFILE     ! Output file
-REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
-REAL,                   INTENT(IN)   :: PIMPL_MF   ! degre of implicitness
-REAL,                   INTENT(IN)   :: PTSTEP     ! Dynamical timestep 
-
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PZZ         ! Height of flux point
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PDZZ        ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRHODJ      ! dry density * Grid size
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRHODREF    ! dry density of the
-                                                     ! reference state
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PPABSM      ! Pressure at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PEXN        ! Exner function at t-dt
-
-REAL, DIMENSION(:,:),   INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTHM        ! Theta at t-dt
-REAL, DIMENSION(:,:,:,:),INTENT(IN)::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTKEM       ! tke at t-dt
-
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
-
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRTHS ! Meso-NH sources
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS            ! Scalar sources 
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PFLXZTHVMF           ! Thermal production for TKE scheme
-!
-REAL, INTENT(IN) :: PDX,PDY ! Size of mesh in X/Y directions
-!                     0.2  Declaration of local variables
-!
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDUDT_TURB   ! tendency of U   by turbulence only
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDVDT_TURB   ! tendency of V   by turbulence only
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDTHLDT_TURB ! tendency of thl by turbulence only
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDRTDT_TURB  ! tendency of rt  by turbulence only
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) ::  ZDSVDT_TURB  ! tendency of Sv  by turbulence only
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDUDT_MF   ! tendency of U   by massflux scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDVDT_MF   ! tendency of V   by massflux scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDTHLDT_MF ! tendency of thl by massflux scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDRTDT_MF  ! tendency of Rt by massflux scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) ::  ZDSVDT_MF  ! tendency of Sv by massflux scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF ! cloud info for the cloud scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFLXZTHVMF           ! Thermal production for TKE scheme
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFLXZTHMF
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFLXZRMF
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFLXZUMF
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFLXZVMF
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHL_UP   ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRT_UP    ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRV_UP    ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZU_UP     ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZV_UP     ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRC_UP    ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRI_UP    ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHV_UP   ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZW_UP     ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFRAC_UP  ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZEMF      ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDETR     ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZENTR     ! updraft characteristics
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZUMM     ! wind on mass point
-REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZVMM     ! wind on mass point
-!
-INTEGER,DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2))     :: IKLCL,IKETL,IKCTL ! level of LCL,ETL and CTL
-INTEGER :: IIU, IJU, IKU, IKB, IKE, IRR, ISV  
-INTEGER :: JK,JRR,JSV                          ! Loop counters
-
-
-LOGICAL :: LSTATNW  !  switch for HARMONIE-AROME turb physics option
-                    ! TODO: linked with modd_turbn + init at default_desfmn 
-
-TYPE(TFIELDDATA) :: TZFIELD
-TYPE(DIMPHYEX_t) :: YLDIMPHYEXPACK
-!------------------------------------------------------------------------
-!
-!!! 1. Initialisation
-CALL FILL_DIMPHYEX(YLDIMPHYEXPACK, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3))
-!
-! Internal Domain
-IIU=SIZE(PTHM,1)
-IJU=SIZE(PTHM,2)
-IKU=SIZE(PTHM,3)
-IKB=1+JPVEXT
-IKE=IKU-JPVEXT
-!
-! number of moist  var
-IRR=SIZE(PRM,4)
-! number of scalar var
-ISV=SIZE(PSVM,4)
-!
-! wind on mass points
-ZUMM=MXF(PUM)
-ZVMM=MYF(PVM)
-!
-!!! 2. Call of the physical parameterization of massflux vertical transport
-!
-LSTATNW = .FALSE.
-!
-CALL SHALLOW_MF(YLDIMPHYEXPACK, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB,&
-                KRR,KRRL,KRRI,ISV,                                    &
-                CFRAC_ICE_SHALLOW_MF,LNOMIXLG,NSV_LGBEG,NSV_LGEND,    &
-                PIMPL_MF, PTSTEP,                                     &
-                PDZZ, PZZ,                                            &
-                PRHODJ,PRHODREF,                                      &
-                PPABSM, PEXN,                                         &
-                PSFTH,PSFRV,                                          &
-                PTHM,PRM,ZUMM,ZVMM,PTKEM,PSVM,                        &
-                ZDUDT_MF,ZDVDT_MF,                                    &
-                ZDTHLDT_MF,ZDRTDT_MF,ZDSVDT_MF,                       &
-                ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF,ZFLXZTHVMF,               &
-                ZFLXZTHMF,ZFLXZRMF,ZFLXZUMF,ZFLXZVMF,                 &
-                ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP,                  &
-                ZU_UP, ZV_UP, ZTHV_UP, ZW_UP,                         &
-                ZFRAC_UP,ZEMF,ZDETR,ZENTR,                            &
-                IKLCL,IKETL,IKCTL,PDX,PDY,PRSVS,XSVMIN,               &
-                TBUCONF, TBUDGETS,SIZE(TBUDGETS)                      )
-!
-! Fill non-declared-explicit-dimensions output variables
-PSIGMF(:,:,:) = ZSIGMF(:,:,:)
-PRC_MF(:,:,:) = ZRC_MF(:,:,:)
-PRI_MF(:,:,:) = ZRI_MF(:,:,:)
-PCF_MF(:,:,:) = ZCF_MF(:,:,:)
-PFLXZTHVMF(:,:,:) = ZFLXZTHVMF(:,:,:)
-!
-!!! 3. Compute source terms for Meso-NH pronostic variables
-!!!    ----------------------------------------------------
-!
-! As the pronostic variable of Meso-Nh are not (yet) the conservative variables
-! the thl tendency is put in th and the rt tendency in rv
-! the adjustment will do later the repartition between vapor and cloud
-PRTHS(:,:,:)  = PRTHS(:,:,:)  +   &
-                  PRHODJ(:,:,:)*ZDTHLDT_MF(:,:,:)
-PRRS(:,:,:,1) = PRRS(:,:,:,1) +   &
-                  PRHODJ(:,:,:)*ZDRTDT_MF(:,:,:)
-PRUS(:,:,:)   = PRUS(:,:,:)  +MXM(  &
-                  PRHODJ(:,:,:)*ZDUDT_MF(:,:,:))
-PRVS(:,:,:)   = PRVS(:,:,:)  +MYM(  &
-                  PRHODJ(:,:,:)*ZDVDT_MF(:,:,:))
-!
-DO JSV=1,ISV 
-  IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE
-  PRSVS(:,:,:,JSV)   = MAX((PRSVS(:,:,:,JSV)  +    &
-                  PRHODJ(:,:,:)*ZDSVDT_MF(:,:,:,JSV)),XSVMIN(JSV))
-END DO     
-!
-!!! 4. Prints the fluxes in output file
-!
-IF ( OMF_FLX .AND. tpfile%lopened ) THEN
-  ! stores the conservative potential temperature vertical flux
-  TZFIELD%CMNHNAME   = 'MF_THW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'MF_THW_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_MF_THW_FLX'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZTHMF)
-  !
-  ! stores the conservative mixing ratio vertical flux
-  TZFIELD%CMNHNAME   = 'MF_RCONSW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'MF_RCONSW_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_MF_RCONSW_FLX'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZRMF)
-  !
-  ! stores the theta_v vertical flux
-  TZFIELD%CMNHNAME   = 'MF_THVW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'MF_THVW_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_MF_THVW_FLX'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PFLXZTHVMF)
-  !
- IF (PARAM_MFSHALLN%LMIXUV) THEN
-  ! stores the U momentum vertical flux
-  TZFIELD%CMNHNAME   = 'MF_UW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'MF_UW_FLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_MF_UW_FLX'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZUMF)
-  !
-  ! stores the V momentum vertical flux
-  TZFIELD%CMNHNAME   = 'MF_VW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'MF_VW_FLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_MF_VW_FLX'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZVMF)
-  !
- END IF
-END IF
-!
-!!! 5. Externalised LES Diagnostic for Mass Flux Scheme
-!!!    ------------------------------------------------
-!
-      CALL DIAGNOS_LES_MF(IIU,IJU,IKU,PTIME_LES,               &
-                          ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP, &
-                          ZU_UP,ZV_UP,ZTHV_UP,ZW_UP,           &
-                          ZFRAC_UP,ZEMF,ZDETR,ZENTR,           &
-                          ZFLXZTHMF,ZFLXZTHVMF,ZFLXZRMF,       &
-                          ZFLXZUMF,ZFLXZVMF,                   &
-                          IKLCL,IKETL,IKCTL )
-!               
-END SUBROUTINE SHALLOW_MF_PACK
diff --git a/src/mesonh/ext/switch_sbg_lesn.f90 b/src/mesonh/ext/switch_sbg_lesn.f90
deleted file mode 100644
index 2920680faff50dbca286eaea17c310b045650675..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/switch_sbg_lesn.f90
+++ /dev/null
@@ -1,589 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
-!     ########################## 
-      SUBROUTINE SWITCH_SBG_LES_n
-!     ##########################
-!
-!!****  *SWITCH_SBG_LESn* - moves LES subgrid quantities from modd_les
-!!                          to modd_lesn or the contrary.
-!!
-!!    PURPOSE
-!!    -------
-!
-!!
-!!**  IMPLICIT ARGUMENTS
-!!    ------------------ 
-!!
-!!    REFERENCE
-!!    ---------
-!!      
-!!
-!!    AUTHOR
-!!    ------
-!!	   V. Masson   *Meteo France*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    June 14, 2002                
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.   DECLARATIONS
-!             ------------
-!
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_CONF_n
-USE MODD_NSV
-!
-USE MODI_SECOND_MNH
-!
-IMPLICIT NONE
-!
-REAL :: ZTIME1, ZTIME2
-!-------------------------------------------------------------------------------
-!
-!*      7.4  interactions of resolved and subgrid quantities
-!            -----------------------------------------------
-!
-CALL SECOND_MNH(ZTIME1)
-!
-IF (.NOT.   ASSOCIATED (X_LES_RES_W_SBG_WThl) ) THEN
-!                                                                           ______
-  CALL LES_ALLOCATE('X_LES_RES_W_SBG_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'w'Thl'>
-!                                                                        _____
-  CALL LES_ALLOCATE('X_LES_RES_W_SBG_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Thl'2>
-!                                                                              _____
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_U_SBG_UaU',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <du'/dxa ua'u'>
-!                                                                              _____
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_V_SBG_UaV',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dv'/dxa ua'v'>
-!                                                                             _____
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'w'>
-!                                                                              _______
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'Thl'>
-!                                                                                _____
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'w'>
-!                                                                                  ___
-  CALL LES_ALLOCATE('X_LES_RES_ddz_Thl_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dz w'2>
-!                                                                                _______
-  CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'Thl'>
-!
-  IF (LUSERV) THEN
-!                                                                          _____
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'w'Rt'>
-!                                                                           ____
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Rt'2>
-!                                                                          _______
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <w'Thl'Rt'>
-!                                                                                ______
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dw'/dxa ua'Rt'>
-!                                                                                 _____
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dxa ua'w'>
-!                                                                                   ___
-    CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dz w'2>
-!                                                                                  ______
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dThl'/dxa ua'Rt'>
-!                                                                                 _______
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))!  <dRt'/dxa ua'Thl'>
-!                                                                                  ______
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) !  <dRt'/dxa ua'Rt'>
-  ELSE
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/0,0,0/))
-  END IF
-!                                                                                   ______
-CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dw'/dxa ua'Sv'>
-!                                                                                    _____
-CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dSv'/dxa ua'w'>
-!                                                                                    ___
-CALL LES_ALLOCATE('X_LES_RES_ddz_Sv_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/) ) !  <dSv'/dz w'2>
-!                                                                                   ______
-CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <dSv'/dxa ua'Sv'>
-!                                                                             _____
-CALL LES_ALLOCATE('X_LES_RES_W_SBG_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <w'w'Sv'>
-!                                                                             ____
-CALL LES_ALLOCATE('X_LES_RES_W_SBG_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  !  <w'Sv'2>
-!
-!
-  X_LES_RES_W_SBG_WThl         = XLES_RES_W_SBG_WThl
-  X_LES_RES_W_SBG_Thl2         = XLES_RES_W_SBG_Thl2
-  X_LES_RES_ddxa_U_SBG_UaU     = XLES_RES_ddxa_U_SBG_UaU
-  X_LES_RES_ddxa_V_SBG_UaV     = XLES_RES_ddxa_V_SBG_UaV
-  X_LES_RES_ddxa_W_SBG_UaW     = XLES_RES_ddxa_W_SBG_UaW
-  X_LES_RES_ddxa_W_SBG_UaThl   = XLES_RES_ddxa_W_SBG_UaThl
-  X_LES_RES_ddxa_Thl_SBG_UaW   = XLES_RES_ddxa_Thl_SBG_UaW
-  X_LES_RES_ddz_Thl_SBG_W2     = XLES_RES_ddz_Thl_SBG_W2
-  X_LES_RES_ddxa_Thl_SBG_UaThl = XLES_RES_ddxa_Thl_SBG_UaThl
-  IF (LUSERV) THEN
-    X_LES_RES_W_SBG_WRt        = XLES_RES_W_SBG_WRt
-    X_LES_RES_W_SBG_Rt2        = XLES_RES_W_SBG_Rt2
-    X_LES_RES_W_SBG_ThlRt      = XLES_RES_W_SBG_ThlRt
-    X_LES_RES_ddxa_W_SBG_UaRt  = XLES_RES_ddxa_W_SBG_UaRt
-    X_LES_RES_ddxa_Rt_SBG_UaW  = XLES_RES_ddxa_Rt_SBG_UaW
-    X_LES_RES_ddz_Rt_SBG_W2    = XLES_RES_ddz_Rt_SBG_W2
-    X_LES_RES_ddxa_Thl_SBG_UaRt= XLES_RES_ddxa_Thl_SBG_UaRt
-    X_LES_RES_ddxa_Rt_SBG_UaThl= XLES_RES_ddxa_Rt_SBG_UaThl
-    X_LES_RES_ddxa_Rt_SBG_UaRt = XLES_RES_ddxa_Rt_SBG_UaRt
-  END IF
-  IF (NSV>0) THEN
-    X_LES_RES_ddxa_W_SBG_UaSv  = XLES_RES_ddxa_W_SBG_UaSv
-    X_LES_RES_ddxa_Sv_SBG_UaW  = XLES_RES_ddxa_Sv_SBG_UaW
-    X_LES_RES_ddz_Sv_SBG_W2    = XLES_RES_ddz_Sv_SBG_W2
-    X_LES_RES_ddxa_Sv_SBG_UaSv = XLES_RES_ddxa_Sv_SBG_UaSv
-    X_LES_RES_W_SBG_WSv        = XLES_RES_W_SBG_WSv
-    X_LES_RES_W_SBG_Sv2        = XLES_RES_W_SBG_Sv2
-  END IF
-!
-!
-  CALL LES_ALLOCATE('X_LES_SUBGRID_U2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_V2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Thl'2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_UV',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'v'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WU',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'u'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WV',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'v'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_UThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Thl'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_VThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Thl'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Thl'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'Thv'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_ThlThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <Thl'Thv'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_W2Thl',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'2Thl>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WThl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'Thl'2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Tke',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon_Thl2>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WP',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <w'p'>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_PHI3',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  phi3
-  CALL LES_ALLOCATE('X_LES_SUBGRID_LMix',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Lmix
-  CALL LES_ALLOCATE('X_LES_SUBGRID_LDiss',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Ldiss
-  CALL LES_ALLOCATE('X_LES_SUBGRID_Km',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Km
-  CALL LES_ALLOCATE('X_LES_SUBGRID_Kh',(/NLES_K,NLES_TIMES,NLES_MASKS/))  !  Kh
-  CALL LES_ALLOCATE('X_LES_SUBGRID_ThlPz',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <Thl'dp'/dz>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_UTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Tke>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_VTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Tke>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Tke>
-  CALL LES_ALLOCATE('X_LES_SUBGRID_ddz_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <dw'Tke/dz>
-
-  CALL LES_ALLOCATE('X_LES_SUBGRID_THLUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thl of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_RTUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rt of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_RVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rv of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_RCUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Rc of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_RIUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Ri of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thl of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_MASSFLUX',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Mass Flux
-  CALL LES_ALLOCATE('X_LES_SUBGRID_DETR',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Detrainment
-  CALL LES_ALLOCATE('X_LES_SUBGRID_ENTR',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Entrainment
-  CALL LES_ALLOCATE('X_LES_SUBGRID_FRACUP',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Updraft Fraction 
-  CALL LES_ALLOCATE('X_LES_SUBGRID_THVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! Thv of the Updraft
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WTHLMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of thl   
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WRTMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of rt
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WTHVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of thv 
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WUMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of u
-  CALL LES_ALLOCATE('X_LES_SUBGRID_WVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of v
-  
-  IF (LUSERV ) THEN
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Thl'Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'Thv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'2Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Thl'Rt'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rt'2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))  ! <epsilon_Rt2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon_ThlRt>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rt'dp'/dz>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/NLES_K,NLES_TIMES,NLES_MASKS/))     !  psi3  
-  ELSE
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/0,0,0/))    
-  END IF
-  IF (LUSERC ) THEN
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Rc'2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <u'Rc'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <v'Rc'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <w'Rc'>
-  ELSE
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/0,0,0/))
-  END IF
-  IF (LUSERI ) THEN
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/NLES_K,NLES_TIMES,NLES_MASKS/))     ! <Ri'2>
-  ELSE
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/0,0,0/))
-  END IF
-  IF (NSV>0  ) THEN
-    CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <u'Sv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <v'Sv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'Sv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'Thv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <w'2Sv'>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <w'Sv'2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <epsilon_Sv2>
-    CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/))  ! <Sv'dp'/dz>
-  ELSE
-    CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/0,0,0,0/))
-    CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/0,0,0,0/))
-  END IF
-!
-  X_LES_SUBGRID_U2  = XLES_SUBGRID_U2 
-  X_LES_SUBGRID_V2  = XLES_SUBGRID_V2 
-  X_LES_SUBGRID_W2  = XLES_SUBGRID_W2 
-  X_LES_SUBGRID_Thl2= XLES_SUBGRID_Thl2
-  X_LES_SUBGRID_UV  = XLES_SUBGRID_UV 
-  X_LES_SUBGRID_WU  = XLES_SUBGRID_WU
-  X_LES_SUBGRID_WV  = XLES_SUBGRID_WV
-  X_LES_SUBGRID_UThl= XLES_SUBGRID_UThl
-  X_LES_SUBGRID_VThl= XLES_SUBGRID_VThl
-  X_LES_SUBGRID_WThl= XLES_SUBGRID_WThl
-  X_LES_SUBGRID_WThv     = XLES_SUBGRID_WThv
-  X_LES_SUBGRID_ThlThv   = XLES_SUBGRID_ThlThv
-  X_LES_SUBGRID_W2Thl    = XLES_SUBGRID_W2Thl
-  X_LES_SUBGRID_WThl2    = XLES_SUBGRID_WThl2
-  X_LES_SUBGRID_DISS_Tke = XLES_SUBGRID_DISS_Tke
-  X_LES_SUBGRID_DISS_Thl2= XLES_SUBGRID_DISS_Thl2
-  X_LES_SUBGRID_WP       = XLES_SUBGRID_WP
-  X_LES_SUBGRID_PHI3     = XLES_SUBGRID_PHI3
-  X_LES_SUBGRID_LMix     = XLES_SUBGRID_LMix
-  X_LES_SUBGRID_LDiss    = XLES_SUBGRID_LDiss
-  X_LES_SUBGRID_Km       = XLES_SUBGRID_Km
-  X_LES_SUBGRID_Kh       = XLES_SUBGRID_Kh
-  X_LES_SUBGRID_ThlPz    = XLES_SUBGRID_ThlPz
-  X_LES_SUBGRID_UTke= XLES_SUBGRID_UTke
-  X_LES_SUBGRID_VTke= XLES_SUBGRID_VTke
-  X_LES_SUBGRID_WTke= XLES_SUBGRID_WTke
-  X_LES_SUBGRID_ddz_WTke  =XLES_SUBGRID_ddz_WTke
-  
-  X_LES_SUBGRID_THLUP_MF = XLES_SUBGRID_THLUP_MF
-  X_LES_SUBGRID_RTUP_MF = XLES_SUBGRID_RTUP_MF 
-  X_LES_SUBGRID_RVUP_MF = XLES_SUBGRID_RVUP_MF 
-  X_LES_SUBGRID_RCUP_MF = XLES_SUBGRID_RCUP_MF 
-  X_LES_SUBGRID_RIUP_MF = XLES_SUBGRID_RIUP_MF 
-  X_LES_SUBGRID_WUP_MF = XLES_SUBGRID_WUP_MF  
-  X_LES_SUBGRID_MASSFLUX = XLES_SUBGRID_MASSFLUX
-  X_LES_SUBGRID_DETR = XLES_SUBGRID_DETR    
-  X_LES_SUBGRID_ENTR = XLES_SUBGRID_ENTR    
-  X_LES_SUBGRID_FRACUP = XLES_SUBGRID_FRACUP   
-  X_LES_SUBGRID_THVUP_MF = XLES_SUBGRID_THVUP_MF
-  X_LES_SUBGRID_WTHLMF = XLES_SUBGRID_WTHLMF     
-  X_LES_SUBGRID_WRTMF = XLES_SUBGRID_WRTMF   
-  X_LES_SUBGRID_WTHVMF = XLES_SUBGRID_WTHVMF   
-  X_LES_SUBGRID_WUMF = XLES_SUBGRID_WUMF    
-  X_LES_SUBGRID_WVMF = XLES_SUBGRID_WVMF    
-
-  IF (LUSERV ) THEN
-    X_LES_SUBGRID_Rt2  = XLES_SUBGRID_Rt2
-    X_LES_SUBGRID_ThlRt= XLES_SUBGRID_ThlRt
-    X_LES_SUBGRID_URt  = XLES_SUBGRID_URt
-    X_LES_SUBGRID_VRt  = XLES_SUBGRID_VRt
-    X_LES_SUBGRID_WRt  = XLES_SUBGRID_WRt
-    X_LES_SUBGRID_RtThv   = XLES_SUBGRID_RtThv
-    X_LES_SUBGRID_W2Rt    = XLES_SUBGRID_W2Rt
-    X_LES_SUBGRID_WThlRt  = XLES_SUBGRID_WThlRt
-    X_LES_SUBGRID_WRt2    = XLES_SUBGRID_WRt2
-    X_LES_SUBGRID_DISS_Rt2= XLES_SUBGRID_DISS_Rt2
-    X_LES_SUBGRID_DISS_ThlRt= XLES_SUBGRID_DISS_ThlRt
-    X_LES_SUBGRID_RtPz    = XLES_SUBGRID_RtPz
-    X_LES_SUBGRID_PSI3    = XLES_SUBGRID_PSI3  
-  END IF
-  IF (LUSERC ) THEN
-    X_LES_SUBGRID_Rc2 = XLES_SUBGRID_Rc2
-    X_LES_SUBGRID_URc = XLES_SUBGRID_URc
-    X_LES_SUBGRID_VRc = XLES_SUBGRID_VRc
-    X_LES_SUBGRID_WRc = XLES_SUBGRID_WRc
-  END IF
-  IF (LUSERI ) THEN
-    X_LES_SUBGRID_Ri2 = XLES_SUBGRID_Ri2
-  END IF
-  IF (NSV>0  ) THEN
-    X_LES_SUBGRID_USv = XLES_SUBGRID_USv
-    X_LES_SUBGRID_VSv = XLES_SUBGRID_VSv
-    X_LES_SUBGRID_WSv = XLES_SUBGRID_WSv
-    X_LES_SUBGRID_Sv2      = XLES_SUBGRID_Sv2 
-    X_LES_SUBGRID_SvThv    = XLES_SUBGRID_SvThv
-    X_LES_SUBGRID_W2Sv     = XLES_SUBGRID_W2Sv 
-    X_LES_SUBGRID_WSv2     = XLES_SUBGRID_WSv2    
-    X_LES_SUBGRID_DISS_Sv2 = XLES_SUBGRID_DISS_Sv2 
-    X_LES_SUBGRID_SvPz     = XLES_SUBGRID_SvPz  
-  END IF
-!
-!
-  CALL LES_ALLOCATE('X_LES_UW0',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('X_LES_VW0',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('X_LES_USTAR',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('X_LES_Q0',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('X_LES_E0',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('X_LES_SV0',(/NLES_TIMES,NSV/))
-!
-  X_LES_UW0       = XLES_UW0
-  X_LES_VW0       = XLES_VW0
-  X_LES_USTAR     = XLES_USTAR
-  X_LES_Q0        = XLES_Q0
-  X_LES_E0        = XLES_E0
-  IF (NSV>0) X_LES_SV0       = XLES_SV0
-
-ELSE
-!
-  XLES_RES_W_SBG_WThl         = X_LES_RES_W_SBG_WThl
-  XLES_RES_W_SBG_Thl2         = X_LES_RES_W_SBG_Thl2
-  XLES_RES_ddxa_U_SBG_UaU     = X_LES_RES_ddxa_U_SBG_UaU
-  XLES_RES_ddxa_V_SBG_UaV     = X_LES_RES_ddxa_V_SBG_UaV
-  XLES_RES_ddxa_W_SBG_UaW     = X_LES_RES_ddxa_W_SBG_UaW
-  XLES_RES_ddxa_W_SBG_UaThl   = X_LES_RES_ddxa_W_SBG_UaThl
-  XLES_RES_ddxa_Thl_SBG_UaW   = X_LES_RES_ddxa_Thl_SBG_UaW
-  XLES_RES_ddz_Thl_SBG_W2     = X_LES_RES_ddz_Thl_SBG_W2
-  XLES_RES_ddxa_Thl_SBG_UaThl = X_LES_RES_ddxa_Thl_SBG_UaThl
-  IF (LUSERV) THEN
-    XLES_RES_W_SBG_WRt        = X_LES_RES_W_SBG_WRt
-    XLES_RES_W_SBG_Rt2        = X_LES_RES_W_SBG_Rt2
-    XLES_RES_W_SBG_ThlRt      = X_LES_RES_W_SBG_ThlRt
-    XLES_RES_ddxa_W_SBG_UaRt  = X_LES_RES_ddxa_W_SBG_UaRt
-    XLES_RES_ddxa_Rt_SBG_UaW  = X_LES_RES_ddxa_Rt_SBG_UaW
-    XLES_RES_ddz_Rt_SBG_W2    = X_LES_RES_ddz_Rt_SBG_W2
-    XLES_RES_ddxa_Thl_SBG_UaRt= X_LES_RES_ddxa_Thl_SBG_UaRt
-    XLES_RES_ddxa_Rt_SBG_UaThl= X_LES_RES_ddxa_Rt_SBG_UaThl
-    XLES_RES_ddxa_Rt_SBG_UaRt = X_LES_RES_ddxa_Rt_SBG_UaRt
-  END IF
-  IF (NSV>0) THEN
-    XLES_RES_ddxa_W_SBG_UaSv  = X_LES_RES_ddxa_W_SBG_UaSv
-    XLES_RES_ddxa_Sv_SBG_UaW  = X_LES_RES_ddxa_Sv_SBG_UaW
-    XLES_RES_ddz_Sv_SBG_W2    = X_LES_RES_ddz_Sv_SBG_W2
-    XLES_RES_ddxa_Sv_SBG_UaSv = X_LES_RES_ddxa_Sv_SBG_UaSv
-    XLES_RES_W_SBG_WSv        = X_LES_RES_W_SBG_WSv
-    XLES_RES_W_SBG_Sv2        = X_LES_RES_W_SBG_Sv2
-  END IF
-  XLES_SUBGRID_U2  = X_LES_SUBGRID_U2 
-  XLES_SUBGRID_V2  = X_LES_SUBGRID_V2 
-  XLES_SUBGRID_W2  = X_LES_SUBGRID_W2 
-  XLES_SUBGRID_Thl2= X_LES_SUBGRID_Thl2
-  XLES_SUBGRID_UV  = X_LES_SUBGRID_UV 
-  XLES_SUBGRID_WU  = X_LES_SUBGRID_WU
-  XLES_SUBGRID_WV  = X_LES_SUBGRID_WV
-  XLES_SUBGRID_UThl= X_LES_SUBGRID_UThl
-  XLES_SUBGRID_VThl= X_LES_SUBGRID_VThl
-  XLES_SUBGRID_WThl= X_LES_SUBGRID_WThl
-  XLES_SUBGRID_WThv     = X_LES_SUBGRID_WThv
-  XLES_SUBGRID_ThlThv   = X_LES_SUBGRID_ThlThv
-  XLES_SUBGRID_W2Thl    = X_LES_SUBGRID_W2Thl
-  XLES_SUBGRID_WThl2    = X_LES_SUBGRID_WThl2
-  XLES_SUBGRID_DISS_Tke = X_LES_SUBGRID_DISS_Tke
-  XLES_SUBGRID_DISS_Thl2= X_LES_SUBGRID_DISS_Thl2
-  XLES_SUBGRID_WP       = X_LES_SUBGRID_WP
-  XLES_SUBGRID_PHI3     = X_LES_SUBGRID_PHI3
-  XLES_SUBGRID_LMix     = X_LES_SUBGRID_LMix
-  XLES_SUBGRID_LDiss    = X_LES_SUBGRID_LDiss
-  XLES_SUBGRID_Km       = X_LES_SUBGRID_Km
-  XLES_SUBGRID_Kh       = X_LES_SUBGRID_Kh
-  XLES_SUBGRID_ThlPz    = X_LES_SUBGRID_ThlPz
-  XLES_SUBGRID_UTke= X_LES_SUBGRID_UTke
-  XLES_SUBGRID_VTke= X_LES_SUBGRID_VTke
-  XLES_SUBGRID_WTke= X_LES_SUBGRID_WTke
-  XLES_SUBGRID_ddz_WTke  =X_LES_SUBGRID_ddz_WTke
-
-  XLES_SUBGRID_THLUP_MF = X_LES_SUBGRID_THLUP_MF
-  XLES_SUBGRID_RTUP_MF = X_LES_SUBGRID_RTUP_MF 
-  XLES_SUBGRID_RVUP_MF = X_LES_SUBGRID_RVUP_MF 
-  XLES_SUBGRID_RCUP_MF = X_LES_SUBGRID_RCUP_MF 
-  XLES_SUBGRID_RIUP_MF = X_LES_SUBGRID_RIUP_MF 
-  XLES_SUBGRID_WUP_MF = X_LES_SUBGRID_WUP_MF  
-  XLES_SUBGRID_MASSFLUX = X_LES_SUBGRID_MASSFLUX
-  XLES_SUBGRID_DETR = X_LES_SUBGRID_DETR    
-  XLES_SUBGRID_ENTR = X_LES_SUBGRID_ENTR    
-  XLES_SUBGRID_FRACUP = X_LES_SUBGRID_FRACUP   
-  XLES_SUBGRID_THVUP_MF = X_LES_SUBGRID_THVUP_MF
-  XLES_SUBGRID_WTHLMF = X_LES_SUBGRID_WTHLMF     
-  XLES_SUBGRID_WRTMF = X_LES_SUBGRID_WRTMF   
-  XLES_SUBGRID_WTHVMF = X_LES_SUBGRID_WTHVMF   
-  XLES_SUBGRID_WUMF = X_LES_SUBGRID_WUMF    
-  XLES_SUBGRID_WVMF = X_LES_SUBGRID_WVMF    
-  
-  IF (LUSERV ) THEN
-    XLES_SUBGRID_Rt2  = X_LES_SUBGRID_Rt2
-    XLES_SUBGRID_ThlRt= X_LES_SUBGRID_ThlRt
-    XLES_SUBGRID_URt  = X_LES_SUBGRID_URt
-    XLES_SUBGRID_VRt  = X_LES_SUBGRID_VRt
-    XLES_SUBGRID_WRt  = X_LES_SUBGRID_WRt
-    XLES_SUBGRID_RtThv   = X_LES_SUBGRID_RtThv
-    XLES_SUBGRID_W2Rt    = X_LES_SUBGRID_W2Rt
-    XLES_SUBGRID_WThlRt  = X_LES_SUBGRID_WThlRt
-    XLES_SUBGRID_WRt2    = X_LES_SUBGRID_WRt2
-    XLES_SUBGRID_DISS_Rt2= X_LES_SUBGRID_DISS_Rt2
-    XLES_SUBGRID_DISS_ThlRt= X_LES_SUBGRID_DISS_ThlRt
-    XLES_SUBGRID_RtPz    = X_LES_SUBGRID_RtPz
-    XLES_SUBGRID_PSI3    = X_LES_SUBGRID_PSI3
-  END IF
-  IF (LUSERC ) THEN
-    XLES_SUBGRID_Rc2 = X_LES_SUBGRID_Rc2
-    XLES_SUBGRID_URc = X_LES_SUBGRID_URc
-    XLES_SUBGRID_VRc = X_LES_SUBGRID_VRc
-    XLES_SUBGRID_WRc = X_LES_SUBGRID_WRc
-  END IF
-  IF (LUSERI ) THEN
-    XLES_SUBGRID_Ri2 = X_LES_SUBGRID_Ri2
-  END IF
-  IF (NSV>0  ) THEN
-    XLES_SUBGRID_USv = X_LES_SUBGRID_USv
-    XLES_SUBGRID_VSv = X_LES_SUBGRID_VSv
-    XLES_SUBGRID_WSv = X_LES_SUBGRID_WSv
-    XLES_SUBGRID_Sv2      = X_LES_SUBGRID_Sv2 
-    XLES_SUBGRID_SvThv    = X_LES_SUBGRID_SvThv
-    XLES_SUBGRID_W2Sv     = X_LES_SUBGRID_W2Sv 
-    XLES_SUBGRID_WSv2     = X_LES_SUBGRID_WSv2    
-    XLES_SUBGRID_DISS_Sv2 = X_LES_SUBGRID_DISS_Sv2 
-    XLES_SUBGRID_SvPz     = X_LES_SUBGRID_SvPz  
-  END IF
-  XLES_UW0       = X_LES_UW0
-  XLES_VW0       = X_LES_VW0
-  XLES_USTAR     = X_LES_USTAR
-  XLES_Q0        = X_LES_Q0
-  XLES_E0        = X_LES_E0
-  IF (NSV>0) XLES_SV0       = X_LES_SV0
-!
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WThl')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Thl2')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_U_SBG_UaU')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_V_SBG_UaV')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaW')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW')
-  CALL LES_DEALLOCATE('X_LES_RES_ddz_Thl_SBG_W2')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WRt')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Rt2')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_ThlRt')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW')
-  CALL LES_DEALLOCATE('X_LES_RES_ddz_Rt_SBG_W2')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW')
-  CALL LES_DEALLOCATE('X_LES_RES_ddz_Sv_SBG_W2')
-  CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WSv')
-  CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Sv2')
-!
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_U2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_V2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Thl2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_UV')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WU')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WV')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_UThl')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_VThl')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlThv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Thl')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Tke')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Thl2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WP')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_PHI3')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_LMix')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_LDiss')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Km')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Kh')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlPz')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_UTke')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_VTke')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTke')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_ddz_WTke')
-
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_THLUP_MF')  
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RTUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RVUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RCUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RIUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_MASSFLUX')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DETR')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_ENTR')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_FRACUP')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_THVUP_MF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHLMF')  
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRTMF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHVMF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WUMF')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WVMF')
-  
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Rt2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlRt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_URt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_VRt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RtThv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Rt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WThlRt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Rt2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_ThlRt')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_RtPz')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_PSI3')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Rc2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_URc')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_VRc')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WRc')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Ri2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_USv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_VSv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_Sv2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_SvThv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Sv')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Sv2')
-  CALL LES_DEALLOCATE('X_LES_SUBGRID_SvPz')
-  !
-  CALL LES_DEALLOCATE('X_LES_UW0')
-  CALL LES_DEALLOCATE('X_LES_VW0')
-  CALL LES_DEALLOCATE('X_LES_USTAR')
-  CALL LES_DEALLOCATE('X_LES_Q0')
-  CALL LES_DEALLOCATE('X_LES_E0')
-  CALL LES_DEALLOCATE('X_LES_SV0')
-!
-END IF
-!
-CALL SECOND_MNH(ZTIME2)
-!
-XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-!
-END SUBROUTINE SWITCH_SBG_LES_n
diff --git a/src/mesonh/ext/write_lesn.f90 b/src/mesonh/ext/write_lesn.f90
deleted file mode 100644
index 9b6b326bc92ca2ebae7d62a7019a319903edebc4..0000000000000000000000000000000000000000
--- a/src/mesonh/ext/write_lesn.f90
+++ /dev/null
@@ -1,1319 +0,0 @@
-!MNH_LIC Copyright 2000-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!######################
-module mode_write_les_n
-!######################
-
-use modd_field, only: tfield_metadata_base
-
-implicit none
-
-private
-
-public :: Write_les_n
-
-
-character(len=:), allocatable :: cgroup
-character(len=:), allocatable :: cgroupcomment
-
-logical :: ldoavg    ! Compute and store time average
-logical :: ldonorm   ! Compute and store normalized field
-
-type(tfield_metadata_base) :: tfield
-type(tfield_metadata_base) :: tfieldx
-type(tfield_metadata_base) :: tfieldy
-
-interface Les_diachro_write
-  module procedure Les_diachro_write_1D, Les_diachro_write_2D, Les_diachro_write_3D, Les_diachro_write_4D
-end interface
-
-contains
-
-!###################################
-subroutine  Write_les_n( tpdiafile )
-!###################################
-!
-!
-!!****  *WRITE_LES_n* writes the LES final diagnostics for model _n
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         07/02/00
-!!                       01/02/01 (D. Gazen) add module MODD_NSV for NSV variable
-!!                       06/11/02 (V. Masson) some minor bugs
-!!                       01/04/03 (V. Masson) idem
-!!                       10/10/09 (P. Aumond) Add user multimaskS
-!!                          11/15 (C.Lac) Add production terms of TKE
-!!                    10/2016 (C.Lac) Add droplet deposition
-!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
-!  C. Lac         02/2019: add rain fraction as a LES diagnostic
-!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!  P. Wautelet 12/10/2020: remove HLES_AVG dummy argument and group all 4 calls
-!  P. Wautelet 13/10/2020: bugfix: correct some names for LES_DIACHRO_2PT diagnostics (Ri)
-!  P. Wautelet 26/10/2020: bugfix: correct some comments and conditions + add missing RES_RTPZ
-!  P. Wautelet 26/10/2020: restructure subroutines to use tfield_metadata_base type
-! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-use modd_conf_n,     only: luserv, luserc, luserr, luseri, lusers, luserg, luserh
-use modd_io,         only: tfiledata
-use modd_field,      only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_MASK, &
-                           NMNHDIM_BUDGET_LES_PDF,                                                                            &
-                           NMNHDIM_SPECTRA_2PTS_NI, NMNHDIM_SPECTRA_2PTS_NJ,  NMNHDIM_SPECTRA_LEVEL, NMNHDIM_UNUSED,          &
-                           TYPEREAL
-use modd_grid_n,     only: xdxhat, xdyhat
-use modd_nsv,        only: nsv
-use modd_les
-use modd_les_n
-use modd_param_n,    only: ccloud
-use modd_param_c2r2, only: ldepoc
-use modd_param_ice,  only: ldeposc
-use modd_parameters, only: XUNDEF
-
-use mode_les_spec_n,            only: Les_spec_n
-use mode_modeln_handler,        only: Get_current_model_index
-use mode_write_les_budget_n,    only: Write_les_budget_n
-use mode_write_les_rt_budget_n, only: Write_les_rt_budget_n
-use mode_write_les_sv_budget_n, only: Write_les_sv_budget_n
-
-IMPLICIT NONE
-!
-!*      0.1  declarations of arguments
-!
-TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
-!
-!
-!*      0.2  declaration of local variables
-!
-INTEGER :: IMASK
-!
-INTEGER :: JSV       ! scalar loop counter
-INTEGER :: JI        ! loop counter
-!
-character(len=3)                        :: ynum
-CHARACTER(len=5)                        :: YGROUP
-character(len=7), dimension(nles_masks) :: ymasks
-!
-logical :: gdoavg    ! Compute and store time average
-logical :: gdonorm   ! Compute and store normalized field
-REAL, DIMENSION(:,:,:), ALLOCATABLE     :: ZAVG_PTS_ll
-REAL, DIMENSION(:,:,:), ALLOCATABLE     :: ZUND_PTS_ll
-REAL                                    :: ZCART_PTS_ll
-INTEGER                                 :: IMI ! Current model inde
-!
-!-------------------------------------------------------------------------------
-!
-IF (.NOT. LLES) RETURN
-!
-!
-!*      1.   Initializations
-!            ---------------
-!
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-!
-!*      1.1  Normalization variables
-!            -----------------------
-!
-IF (CLES_NORM_TYPE/='NONE' ) THEN
-  CALL LES_ALLOCATE('XLES_NORM_M',  (/NLES_TIMES/))
-  CALL LES_ALLOCATE('XLES_NORM_S',  (/NLES_TIMES/))
-  CALL LES_ALLOCATE('XLES_NORM_K',  (/NLES_TIMES/))
-  CALL LES_ALLOCATE('XLES_NORM_RHO',(/NLES_TIMES/))
-  CALL LES_ALLOCATE('XLES_NORM_RV', (/NLES_TIMES/))
-  CALL LES_ALLOCATE('XLES_NORM_SV', (/NLES_TIMES,NSV/))
-  CALL LES_ALLOCATE('XLES_NORM_P',  (/NLES_TIMES/))
-  !
-  IF (CLES_NORM_TYPE=='CONV') THEN
-    WHERE (XLES_WSTAR(:)>0.)
-      XLES_NORM_M(:)   = XLES_BL_HEIGHT(:)
-      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_WSTAR(:)
-      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_WSTAR(:)
-      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
-      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_WSTAR(:)
-      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_WSTAR(:)**2
-    ELSEWHERE
-      XLES_NORM_M(:)   = 0.
-      XLES_NORM_S(:)   = 0.
-      XLES_NORM_K(:)   = 0.
-      XLES_NORM_RHO(:) = 0.
-      XLES_NORM_RV(:)  = 0.
-      XLES_NORM_P(:)   = 0.
-    END WHERE
-    DO JSV=1,NSV
-      WHERE (XLES_WSTAR(:)>0.)
-        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_WSTAR(:)
-      ELSEWHERE
-        XLES_NORM_SV(:,JSV)= 0.
-      END WHERE
-    END DO
-  ELSE IF (CLES_NORM_TYPE=='EKMA') THEN
-    WHERE (XLES_USTAR(:)>0.)
-      XLES_NORM_M(:)   = XLES_BL_HEIGHT(:)
-      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_USTAR(:)
-      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_USTAR(:)
-      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
-      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_USTAR(:)
-      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2
-    ELSEWHERE
-      XLES_NORM_M(:)   = 0.
-      XLES_NORM_S(:)   = 0.
-      XLES_NORM_K(:)   = 0.
-      XLES_NORM_RHO(:) = 0.
-      XLES_NORM_RV(:)  = 0.
-      XLES_NORM_P(:)   = 0.
-    END WHERE
-    DO JSV=1,NSV
-      WHERE (XLES_USTAR(:)>0.)
-        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:)
-      ELSEWHERE
-        XLES_NORM_SV(:,JSV)= 0.
-      END WHERE
-    END DO
-  ELSE IF (CLES_NORM_TYPE=='MOBU') THEN
-    XLES_NORM_M(:) = XLES_MO_LENGTH(:)
-    WHERE (XLES_USTAR(:)>0.)
-      XLES_NORM_S(:)   = XLES_NORM_M(:) / XLES_USTAR(:)
-      XLES_NORM_K(:)   = XLES_Q0(:) / XLES_USTAR(:)
-      XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1)
-      XLES_NORM_RV(:)  = XLES_E0(:) / XLES_USTAR(:)
-      XLES_NORM_P(:)   = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2
-    ELSEWHERE
-      XLES_NORM_S(:)   = 0.
-      XLES_NORM_K(:)   = 0.
-      XLES_NORM_RHO(:) = 0.
-      XLES_NORM_RV(:)  = 0.
-      XLES_NORM_P(:)   = 0.
-    END WHERE
-    DO JSV=1,NSV
-      WHERE (XLES_USTAR(:)>0.)
-        XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:)
-      ELSEWHERE
-        XLES_NORM_SV(:,JSV)= 0.
-      END WHERE
-    END DO
-  END IF
-END IF
-!
-!*      1.2  Initializations for WRITE_DIACHRO
-!            ---------------------------------
-!
-NLES_CURRENT_TIMES=NLES_TIMES
-!
-CALL LES_ALLOCATE('XLES_CURRENT_Z',(/NLES_K/))
-
-XLES_CURRENT_Z(:) = XLES_Z(:)
-!
-XLES_CURRENT_ZS = XLES_ZS
-!
-NLES_CURRENT_IINF=NLESn_IINF(IMI)
-NLES_CURRENT_ISUP=NLESn_ISUP(IMI)
-NLES_CURRENT_JINF=NLESn_JINF(IMI)
-NLES_CURRENT_JSUP=NLESn_JSUP(IMI)
-!
-XLES_CURRENT_DOMEGAX=XDXHAT(1)
-XLES_CURRENT_DOMEGAY=XDYHAT(1)
-
-tfield%ngrid = 0 !Not on the Arakawa grid
-tfield%ntype = TYPEREAL
-!
-!*      2.   (z,t) profiles (all masks)
-!            --------------
-IMASK = 1
-ymasks(imask) = 'cart'
-IF (LLES_NEB_MASK) THEN
-  IMASK=IMASK+1
-  ymasks(imask) = 'neb'
-  IMASK=IMASK+1
-  ymasks(imask) = 'clear'
-END IF
-IF (LLES_CORE_MASK) THEN
-  IMASK=IMASK+1
-  ymasks(imask) = 'core'
-  IMASK=IMASK+1
-  ymasks(imask) = 'env'
-END IF
-IF (LLES_MY_MASK) THEN
-   DO JI=1,NLES_MASKS_USER
-        IMASK=IMASK+1
-        Write( ynum, '( i3.3 )' ) ji
-        ymasks(imask) = 'user' // ynum
-   END DO
-END IF
-IF (LLES_CS_MASK) THEN
-  IMASK=IMASK+1
-  ymasks(imask) = 'cs1'
-  IMASK=IMASK+1
-  ymasks(imask) = 'cs2'
-  IMASK=IMASK+1
-  ymasks(imask) = 'cs3'
-END IF
-!
-!*      2.0  averaging diagnostics
-!            ---------------------
-!
-ALLOCATE(ZAVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
-ALLOCATE(ZUND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS))
-
-ZAVG_PTS_ll(:,:,:) = NLES_AVG_PTS_ll(:,:,:)
-ZUND_PTS_ll(:,:,:) = NLES_UND_PTS_ll(:,:,:)
-ZCART_PTS_ll       = (NLESn_ISUP(IMI)-NLESn_IINF(IMI)+1) * (NLESn_JSUP(IMI)-NLESn_JINF(IMI)+1)
-
-tfield%ndims = 3
-tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-ldonorm = .false.
-
-cgroup        = 'Miscellaneous'
-cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
-
-call Les_diachro_write( tpdiafile, zavg_pts_ll,                'AVG_PTS',  'number of points used for averaging',   '1', ymasks )
-call Les_diachro_write( tpdiafile, zavg_pts_ll / zcart_pts_ll, 'AVG_PTSF', 'fraction of points used for averaging', '1', ymasks )
-call Les_diachro_write( tpdiafile, zund_pts_ll,                'UND_PTS',  'number of points below orography',      '1', ymasks )
-call Les_diachro_write( tpdiafile, zund_pts_ll / zcart_pts_ll, 'UND_PTSF', 'fraction of points below orography',    '1', ymasks )
-
-DEALLOCATE(ZAVG_PTS_ll)
-DEALLOCATE(ZUND_PTS_ll)
-!
-!*      2.1  mean quantities
-!            ---------------
-!
-cgroup = 'Mean'
-cgroupcomment = 'Mean vertical profiles of the model variables'
-
-tfield%ndims = 3
-tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-ldonorm = trim(cles_norm_type) /= 'NONE'
-
-call Les_diachro_write( tpdiafile, XLES_MEAN_U,      'MEAN_U',      'Mean U Profile',                        'm s-1',  ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_V,      'MEAN_V',      'Mean V Profile',                        'm s-1',  ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_W,      'MEAN_W',      'Mean W Profile',                        'm s-1',  ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_P,      'MEAN_PRE',    'Mean pressure Profile',                 'Pa',     ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_DP,     'MEAN_DP',     'Mean Dyn production TKE Profile',       'm2 s-3', ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_TP,     'MEAN_TP',     'Mean Thermal production TKE Profile',   'm2 s-3', ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_TR,     'MEAN_TR',     'Mean transport production TKE Profile', 'm2 s-3', ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_DISS,   'MEAN_DISS',   'Mean Dissipation TKE Profile',          'm2 s-3', ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_LM,     'MEAN_LM',     'Mean mixing length Profile',            'm',      ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_RHO,    'MEAN_RHO',    'Mean density Profile',                  'kg m-3', ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_Th,     'MEAN_TH',     'Mean potential temperature Profile',    'K',      ymasks )
-call Les_diachro_write( tpdiafile, XLES_MEAN_Mf,     'MEAN_MF',     'Mass-flux Profile',                     'm s-1',  ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Thl,    'MEAN_THL',    'Mean liquid potential temperature Profile',  'K', ymasks )
-if ( luserv ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Thv,    'MEAN_THV',    'Mean virtual potential temperature Profile', 'K', ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rt,     'MEAN_RT',     'Mean Rt Profile', 'kg kg-1', ymasks )
-if ( luserv ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rv,     'MEAN_RV',     'Mean Rv Profile', 'kg kg-1', ymasks )
-if ( luserv ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rehu,   'MEAN_REHU',   'Mean Rh Profile', 'percent', ymasks )
-if ( luserv ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Qs,     'MEAN_QS',     'Mean Qs Profile', 'kg kg-1', ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_KHt,    'MEAN_KHT',    'Eddy-diffusivity (temperature) Profile', 'm2 s-1', ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_KHr,    'MEAN_KHR',    'Eddy-diffusivity (vapor) Profile',      'm2 s-1', ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rc,     'MEAN_RC',     'Mean Rc Profile',              'kg kg-1', ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Cf,     'MEAN_CF',     'Mean Cf Profile',              '1',       ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf,  'MEAN_INDCF',  'Mean Cf>1-6 Profile (0 or 1)', '1',       ymasks )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf2, 'MEAN_INDCF2', 'Mean Cf>1-5 Profile (0 or 1)', '1',       ymasks )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rr,     'MEAN_RR',     'Mean Rr Profile',              'kg kg-1', ymasks )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_RF,     'MEAN_RF',     'Mean RF Profile',              '1',       ymasks )
-if ( luseri ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Ri,     'MEAN_RI',     'Mean Ri Profile',              'kg kg-1', ymasks )
-if ( luseri ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_If,     'MEAN_IF',     'Mean If Profile',              '1',       ymasks )
-if ( lusers ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rs,     'MEAN_RS',     'Mean Rs Profile',              'kg kg-1', ymasks )
-if ( luserg ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rg,     'MEAN_RG',     'Mean Rg Profile',              'kg kg-1', ymasks )
-if ( luserh ) &
-call Les_diachro_write( tpdiafile, XLES_MEAN_Rh,     'MEAN_RH',     'Mean Rh Profile',              'kg kg-1', ymasks )
-
-if ( nsv > 0 ) then
-  tfield%ndims = 4
-  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-  tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
-  tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-  call Les_diachro_write( tpdiafile, XLES_MEAN_Sv, 'MEAN_SV', 'Mean Sv Profiles', 'kg kg-1', ymasks )
-
-  tfield%ndims = 3
-  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-  !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-  !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-  tfield%ndimlist(4)  = NMNHDIM_UNUSED
-  !tfield%ndimlist(5:) = NMNHDIM_UNUSED
-end if
-
-call Les_diachro_write( tpdiafile, XLES_MEAN_WIND, 'MEANWIND',       'Profile of Mean Modulus of Wind', 'm s-1',      ymasks )
-call Les_diachro_write( tpdiafile, XLES_RESOLVED_MASSFX, 'MEANMSFX', 'Total updraft mass flux',         'kg m-2 s-1', ymasks )
-
-if ( lles_pdf ) then
-  cgroup = 'PDF'
-  cgroupcomment = ''
-
-  tfield%ndims = 4
-  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-  !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-  !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-  tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_PDF
-  tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-  call Les_diachro_write( tpdiafile,   XLES_PDF_TH,  'PDF_TH',  'Pdf potential temperature Profiles', '1', ymasks )
-  call Les_diachro_write( tpdiafile,   XLES_PDF_W,   'PDF_W',   'Pdf vertical velocity Profiles',     '1', ymasks )
-  call Les_diachro_write( tpdiafile,   XLES_PDF_THV, 'PDF_THV', 'Pdf virtual pot. temp. Profiles',    '1', ymasks )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile,   XLES_PDF_RV,  'PDF_RV',  'Pdf Rv Profiles',                    '1', ymasks )
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_PDF_RC,  'PDF_RC',  'Pdf Rc Profiles',                    '1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_PDF_RT,  'PDF_RT',  'Pdf Rt Profiles',                    '1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_PDF_THL, 'PDF_THL', 'Pdf Thl Profiles',                   '1', ymasks )
-  end if
-  if ( luserr ) &
-  call Les_diachro_write( tpdiafile,   XLES_PDF_RR,  'PDF_RR',  'Pdf Rr Profiles',                    '1', ymasks )
-  if ( luseri ) &
-  call Les_diachro_write( tpdiafile,   XLES_PDF_RI,  'PDF_RI',  'Pdf Ri Profiles',                    '1', ymasks )
-  if ( lusers ) &
-  call Les_diachro_write( tpdiafile,   XLES_PDF_RS,  'PDF_RS',  'Pdf Rs Profiles',                    '1', ymasks )
-  if ( luserg ) &
-  call Les_diachro_write( tpdiafile,   XLES_PDF_RG,  'PDF_RG',  'Pdf Rg Profiles',                    '1', ymasks )
-end if
-!
-!*      2.2  resolved quantities
-!            -------------------
-!
-if ( lles_resolved ) then
-  !Prepare metadata (used in Les_diachro_write calls)
-  ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-  ldonorm = trim(cles_norm_type) /= 'NONE'
-
-  cgroup = 'Resolved'
-  cgroupcomment = 'Mean vertical profiles of the resolved fluxes, variances and covariances'
-
-  tfield%ndims = 3
-  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-  tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U2, 'RES_U2',  'Resolved <u2> variance',        'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V2, 'RES_V2',  'Resolved <v2> variance',        'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2, 'RES_W2',  'Resolved <w2> variance',        'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UV, 'RES_UV',  'Resolved <uv> Flux',            'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WU, 'RES_WU',  'Resolved <wu> Flux',            'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WV, 'RES_WV',  'Resolved <wv> Flux',            'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ke, 'RES_KE',  'Resolved TKE Profile',          'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_P2, 'RES_P2',  'Resolved pressure variance',    'Pa2',    ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UP, 'RES_UPZ', 'Resolved <up> horizontal Flux', 'Pa s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VP, 'RES_VPZ', 'Resolved <vp> horizontal Flux', 'Pa s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WP, 'RES_WPZ', 'Resolved <wp> vertical Flux',   'Pa s-1', ymasks )
-
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThThv, 'RES_THTV', &
-                          'Resolved potential temperature - virtual potential temperature covariance',        'K2', ymasks )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlThv, 'RES_TLTV', &
-                          'Resolved liquid potential temperature - virtual potential temperature covariance', 'K2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Th2, 'RES_TH2', 'Resolved potential temperature variance', 'K2', ymasks )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_Thl2, 'RES_THL2', 'Resolved liquid potential temperature variance', 'K2',&
-                          ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UTh, 'RES_UTH', 'Resolved <uth> horizontal Flux', 'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VTh, 'RES_VTH', 'Resolved <vth> horizontal Flux', 'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WTh, 'RES_WTH', 'Resolved <wth> vertical Flux',   'm K s-1', ymasks )
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThl, 'RES_UTHL', 'Resolved <uthl> horizontal Flux', 'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThl, 'RES_VTHL', 'Resolved <vthl> horizontal Flux', 'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl, 'RES_WTHL', 'Resolved <wthl> vertical Flux',   'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rt2,  'RES_RT2',  'Resolved total water variance',   'kg2 kg-2',      ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt,  'RES_WRT',  'Resolved <wrt> vertical Flux',    'm kg kg-1 s-1', ymasks )
-  end if
-
-  if ( luserv ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThv,  'RES_UTHV', 'Resolved <uthv> horizontal Flux', 'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThv,  'RES_VTHV', 'Resolved <vthv> horizontal Flux', 'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThv,  'RES_WTHV', 'Resolved <wthv> vertical Flux',   'm K s-1',       ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rv2,   'RES_RV2',  'Resolved water vapor variance',   'kg2 kg-2',      ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRv,  'RES_THRV', 'Resolved <thrv> covariance',      'K kg kg-1',     ymasks )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRv, 'RES_TLRV', 'Resolved <thlrv> covariance',     'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRv, 'RES_TVRV', 'Resolved <thvrv> covariance',     'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URv,   'RES_URV',  'Resolved <urv> horizontal flux',  'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRv,   'RES_VRV',  'Resolved <vrv> horizontal flux',  'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv,   'RES_WRV',  'Resolved <wrv> vertical flux',    'm kg kg-1 s-1', ymasks )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rc2,   'RES_RC2',  'Resolved cloud water variance',  'kg2 kg-2',      ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRc,  'RES_THRC', 'Resolved <thrc> covariance',     'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRc, 'RES_TLRC', 'Resolved <thlrc> covariance',    'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRc, 'RES_TVRC', 'Resolved <thvrc> covariance',    'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URc,   'RES_URC',  'Resolved <urc> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRc,   'RES_VRC',  'Resolved <vrc> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc,   'RES_WRC',  'Resolved <wrc> vertical flux',   'm kg kg-1 s-1', ymasks )
-  end if
-
-  if ( luseri ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ri2,   'RES_RI2',  'Resolved cloud ice variance',    'kg2 kg-2',      ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRi,  'RES_THRI', 'Resolved <thri> covariance',     'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRi, 'RES_TLRI', 'Resolved <thlri> covariance',    'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRi, 'RES_TVRI', 'Resolved <thvri> covariance',    'K kg kg-1',     ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_URi,   'RES_URI',  'Resolved <uri> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRi,   'RES_VRI',  'Resolved <vri> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi,   'RES_WRI',  'Resolved <wri> vertical flux',   'm kg kg-1 s-1', ymasks )
-  end if
-
-  if ( luserr ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRr,   'RES_WRR',   'Resolved <wrr> vertical flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_INPRR3D,        'INPRR3D',   'Precipitation flux',           'm s-1',         ymasks )
-    call Les_diachro_write( tpdiafile, XLES_MAX_INPRR3D,    'MAXINPR3D', 'Max Precip flux',              'm s-1',         ymasks )
-    call Les_diachro_write( tpdiafile, XLES_EVAP3D,         'EVAP3D',    'Evaporation profile',          'kg kg-1 s-1',   ymasks )
-  end if
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 4
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_Sv2,   'RES_SV2',  'Resolved scalar variables variances', 'kg2 kg-2', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThSv,  'RES_THSV', 'Resolved <ThSv> variance',  'K kg kg-1',          ymasks )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlSv, 'RES_TLSV', 'Resolved <ThlSv> variance', 'K kg kg-1',          ymasks )
-    if ( luserv ) &
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvSv, 'RES_TVSV', 'Resolved <ThvSv> variance', 'K kg kg-1',          ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_USv,   'RES_USV',  'Resolved <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_VSv,   'RES_VSV',  'Resolved <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv,   'RES_WSV',  'Resolved <wSv> vertical flux', 'm kg kg-1 s-1',   ymasks )
-
-    tfield%ndims = 3
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_UNUSED
-    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U3, 'RES_U3', 'Resolved <u3>', 'm3 s-3', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V3, 'RES_V3', 'Resolved <v3>', 'm3 s-3', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W3, 'RES_W3', 'Resolved <w3>', 'm3 s-3', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_U4, 'RES_U4', 'Resolved <u4>', 'm4 s-4', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_V4, 'RES_V4', 'Resolved <v4>', 'm4 s-4', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W4, 'RES_W4', 'Resolved <w4>', 'm4 s-4', ymasks )
-
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl2, 'RES_WTL2', 'Resolved <wThl2>', 'm K2 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Thl, 'RES_W2TL', 'Resolved <w2Thl>', 'm2 K s-2', ymasks )
-
-  if ( luserv ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv2,   'RES_WRV2', 'Resolved <wRv2>',   'm kg2 kg-2 s-1',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rv,   'RES_W2RV', 'Resolved <w2Rv>',   'm2 kg kg-1 s-2',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt2,   'RES_WRT2', 'Resolved <wRt2>',   'm kg2 kg-2 s-1',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rt,   'RES_W2RT', 'Resolved <w2Rt>',   'm2 kg kg-1 s-2',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRv, 'RE_WTLRV', 'Resolved <wThlRv>', 'm K kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRt, 'RE_WTLRT', 'Resolved <wThlRt>', 'm K kg kg-1 s-1', ymasks )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc2,   'RES_WRC2', 'Resolved <wRc2>',   'm kg2 kg-2 s-1',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rc,   'RES_W2RC', 'Resolved <w2Rc>',   'm2 kg kg-1 s-2',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRc, 'RE_WTLRC', 'Resolved <wThlRc>', 'm K kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRc,  'RE_WRVRC', 'Resolved <wRvRc>',  'm kg2 kg-2 s-1',  ymasks )
-  end if
-
-  if ( luseri ) then
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi2,   'RES_WRI2', 'Resolved <wRi2>',   'm kg2 kg-2 s-1',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Ri,   'RES_W2RI', 'Resolved <w2Ri>',   'm2 kg kg-1 s-2',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRi, 'RE_WTLRI', 'Resolved <wThlRi>', 'm K kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRi,  'RE_WRVRI', 'Resolved <wRvRi>',  'm kg2 kg-2 s-1',  ymasks )
-  end if
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 4
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv2,   'RES_WSV2', 'Resolved <wSv2>',   'm kg2 kg-2 s-1',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Sv,   'RES_W2SV', 'Resolved <w2Sv>',   'm2 kg kg-1 s-2',  ymasks )
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlSv, 'RE_WTLSV', 'Resolved <wThlSv>', 'm K kg kg-1 s-1', ymasks )
-    if ( luserv ) &
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvSv,  'RE_WRVSV', 'Resolved <wRvSv>',  'm kg2 kg-2 s-1',  ymasks )
-
-    tfield%ndims = 3
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_UNUSED
-    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlPz, 'RES_TLPZ', 'Resolved <Thldp/dz>', 'K Pa m-1',        ymasks )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RtPz,  'RES_RTPZ', 'Resolved <Rtdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RvPz,  'RES_RVPZ', 'Resolved <Rvdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RcPz,  'RES_RCPZ', 'Resolved <Rcdp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
-  if ( luseri ) &
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_RiPz,  'RES_RIPZ', 'Resolved <Ridp/dz>',  'kg2 kg-2 Pa m-1', ymasks )
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 4
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_RESOLVED_SvPz, 'RES_SVPZ', 'Resolved <Svdp/dz>', 'kg2 kg-2 Pa m-1', ymasks )
-
-    tfield%ndims = 3
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_UNUSED
-    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_UKe, 'RES_UKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_VKe, 'RES_VKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_RESOLVED_WKe, 'RES_WKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks )
-end if
-!
-!
-!*      2.3  subgrid quantities
-!            ------------------
-!
-if ( lles_subgrid ) then
-  !Prepare metadata (used in Les_diachro_write calls)
-  ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-  ldonorm = trim(cles_norm_type) /= 'NONE'
-
-  cgroup = 'Subgrid'
-  cgroupcomment = 'Mean vertical profiles of the subgrid fluxes, variances and covariances'
-
-  tfield%ndims = 3
-  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-  tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-  tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Tke,  'SBG_TKE',  'Subgrid TKE',           'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_U2,   'SBG_U2',   'Subgrid <u2> variance', 'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_V2,   'SBG_V2',   'Subgrid <v2> variance', 'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2,   'SBG_W2',   'Subgrid <w2> variance', 'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UV,   'SBG_UV',   'Subgrid <uv> flux',     'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WU,   'SBG_WU',   'Subgrid <wu> flux',     'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WV,   'SBG_WV',   'Subgrid <wv> flux',     'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Thl2, 'SBG_THL2', 'Subgrid liquid potential temperature variance', &
-                          'K2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UThl, 'SBG_UTHL', 'Subgrid horizontal flux of liquid potential temperature',  &
-                          'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_VThl, 'SBG_VTHL', 'Subgrid horizontal flux of liquid potential temperature',  &
-                          'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl, 'SBG_WTHL', 'Subgrid vertical flux of liquid potential temperature', &
-                          'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WP,   'SBG_WP',   'Subgrid <wp> vertical Flux', 'm Pa s-1', ymasks )
-
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_THLUP_MF, 'THLUP_MF', 'Subgrid <thl> of updraft',    'K',          ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RTUP_MF,  'RTUP_MF',  'Subgrid <rt> of updraft',     'kg kg-1',    ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RVUP_MF,  'RVUP_MF',  'Subgrid <rv> of updraft',     'kg kg-1',    ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RCUP_MF,  'RCUP_MF',  'Subgrid <rc> of updraft',     'kg kg-1',    ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_RIUP_MF,  'RIUP_MF',  'Subgrid <ri> of updraft',     'kg kg-1',    ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUP_MF,   'WUP_MF',   'Subgrid <w> of updraft',      'm s-1',      ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_MASSFLUX, 'MAFLX_MF', 'Subgrid <MF> of updraft',     'kg m-2 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_DETR,     'DETR_MF',  'Subgrid <detr> of updraft',   'kg m-3 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_ENTR,     'ENTR_MF',  'Subgrid <entr> of updraft',   'kg m-3 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_FRACUP,   'FRCUP_MF', 'Subgrid <FracUp> of updraft', '1',          ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_THVUP_MF, 'THVUP_MF', 'Subgrid <thv> of updraft',    'K',          ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHLMF,   'WTHL_MF',  'Subgrid <wthl> of mass flux convection scheme', &
-                          'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRTMF,    'WRT_MF',   'Subgrid <wrt> of mass flux convection scheme',  &
-                          'm kg kg-1 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHVMF,   'WTHV_MF',  'Subgrid <wthv> of mass flux convection scheme', &
-                          'm K s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUMF,     'WU_MF',    'Subgrid <wu> of mass flux convection scheme',   &
-                          'm2 s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WVMF,     'WV_MF',    'Subgrid <wv> of mass flux convection scheme',   &
-                          'm2 s-2', ymasks )
-
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_PHI3,  'SBG_PHI3', 'Subgrid Phi3 function',         '1',      ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_LMix,  'SBG_LMIX', 'Subgrid Mixing Length',         '1',      ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_LDiss, 'SBG_LDIS', 'Subgrid Dissipation Length',    '1',      ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Km,    'SBG_KM',   'Eddy diffusivity for momentum', 'm2 s-1', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_Kh,    'SBG_KH',   'Eddy diffusivity for heat',     'm2 s-1', ymasks )
-
-  if ( luserv ) then
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThv,  'SBG_WTHV', 'Subgrid vertical flux of liquid potential temperature', &
-                            'm K s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rt2,   'SBG_RT2',  'Subgrid total water variance', 'kg2 kg-2', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_ThlRt, 'SBG_TLRT', 'Subgrid <thlrt> covariance',  'K kg kg-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_URt,   'SBG_URT',  'Subgrid total water horizontal flux', &
-                            'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRt,   'SBG_VRT',  'Subgrid total water horizontal flux', &
-                            'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRt,   'SBG_WRT',  'Subgrid total water vertical flux',   &
-                            'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_PSI3,  'SBG_PSI3', 'Subgrid Psi3 function', '1', ymasks )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rc2, 'SBG_RC2', 'Subgrid cloud water variance',        'kg2 kg-2', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_URc, 'SBG_URC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', &
-                            ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRc, 'SBG_VRC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', &
-                            ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRc, 'SBG_WRC', 'Subgrid cloud water vertical flux',   'm kg kg-1 s-1', &
-                            ymasks )
-  end if
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 4
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_USv, 'SBG_USV', 'Subgrid <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_VSv, 'SBG_VSV', 'Subgrid <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks )
-    call Les_diachro_write( tpdiafile, XLES_SUBGRID_WSv, 'SBG_WSV', 'Subgrid <wSv> vertical flux',   'm kg kg-1 s-1', ymasks )
-
-    tfield%ndims = 3
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
-    tfield%ndimlist(4)  = NMNHDIM_UNUSED
-    !tfield%ndimlist(5:) = NMNHDIM_UNUSED
-
-
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_UTke,  'SBG_UTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_VTke,  'SBG_VTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTke,  'SBG_WTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3',   ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2Thl, 'SBG_W2TL', 'Subgrid flux of subgrid kinetic energy', 'm2 K s-2', ymasks )
-  call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl2, 'SBG_WTL2', 'Subgrid flux of subgrid kinetic energy', 'm K2 s-1', ymasks )
-end if
-
-
-!Prepare metadata (used in Les_diachro_write calls)
-tfield%ndims = 2
-tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-tfield%ndimlist(3:) = NMNHDIM_UNUSED
-
-ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-ldonorm = trim(cles_norm_type) /= 'NONE'
-!
-!*      2.4  Updraft quantities
-!            ------------------
-!
-if ( lles_updraft ) then
-  cgroup = 'Updraft'
-  cgroupcomment = 'Updraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
-
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT,     'UP_FRAC', 'Updraft fraction',                                 '1' )
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_W,   'UP_W',    'Updraft W mean value',                             'm s-1' )
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th,  'UP_TH',   'Updraft potential temperature mean value',         'K' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl, 'UP_THL',  'Updraft liquid potential temperature mean value',  'K' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thv, 'UP_THV',  'Updraft virtual potential temperature mean value', 'K' )
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ke,  'UP_KE',   'Updraft resolved TKE mean value',                   'm2 s-2' )
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Tke, 'UP_TKE',  'Updraft subgrid TKE mean value',                    'm2 s-2' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv,  'UP_RV',   'Updraft water vapor mean value',                    'kg kg-1' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc,  'UP_RC',   'Updraft cloud water mean value',                    'kg kg-1' )
-  if ( luserr ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rr,  'UP_RR',   'Updraft rain mean value',                           'kg kg-1' )
-  if ( luseri ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri,  'UP_RI',   'Updraft ice mean value',                            'kg kg-1' )
-  if ( lusers ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rs,  'UP_RS',   'Updraft snow mean value',                           'kg kg-1' )
-  if ( luserg ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rg,  'UP_RG',   'Updraft graupel mean value',                        'kg kg-1' )
-  if ( luserh ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rh,  'UP_RH',   'Updraft hail mean value',                           'kg kg-1' )
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 3
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv, 'UP_SV', 'Updraft scalar variables mean values', 'kg kg-1' )
-
-    tfield%ndims = 2
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3) = NMNHDIM_UNUSED
-    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th2,    'UP_TH2',  'Updraft resolved Theta variance',             'K2' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl2,   'UP_THL2', 'Updraft resolved Theta_l variance',           'K2' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThThv,  'UP_THTV', 'Updraft resolved Theta Theta_v covariance',   'K2' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlThv, 'UP_TLTV', 'Updraft resolved Theta_l Theta_v covariance', 'K2' )
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WTh,    'UP_WTH',  'Updraft resolved WTh flux',                    'm K s-1' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThl,   'UP_WTHL', 'Updraft resolved WThl flux',                   'm K s-1' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThv,   'UP_WTHV', 'Updraft resolved WThv flux',                   'm K s-1' )
-
-  if ( luserv ) then
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv2,   'UP_RV2',   'Updraft resolved water vapor variance', 'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRv,  'UP_THRV',  'Updraft resolved <thrv> covariance',    'K kg kg-1' )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRv, 'UP_THLRV', 'Updraft resolved <thlrv> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRv, 'UP_THVRV', 'Updraft resolved <thvrv> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRv,   'UP_WRV',   'Updraft resolved <wrv> vertical flux',  'm kg kg-1 s-1' )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc2,   'UP_RC2',   'Updraft resolved cloud water variance', 'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRc,  'UP_THRC',  'Updraft resolved <thrc> covariance',    'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRc, 'UP_THLRC', 'Updraft resolved <thlrc> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRc, 'UP_THVRC', 'Updraft resolved <thvrc> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRc,   'UP_WRC',   'Updraft resolved <wrc> vertical flux',  'm kg kg-1 s-1' )
-  end if
-
-  if ( luseri ) then
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri2,   'UP_RI2',   'Updraft resolved cloud ice variance',   'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRi,  'UP_THRI',  'Updraft resolved <thri> covariance',    'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRi, 'UP_THLRI', 'Updraft resolved <thlri> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRi, 'UP_THVRI', 'Updraft resolved <thvri> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRi,   'UP_WRI',   'Updraft resolved <wri> vertical flux',  'm kg kg-1 s-1' )
-  end if
-
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 3
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv2,   'UP_SV2',   'Updraft resolved scalar variables variances', 'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThSv,  'UP_THSV',  'Updraft resolved <ThSv> variance',            'K kg kg-1' )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlSv, 'UP_THLSV', 'Updraft resolved <ThlSv> variance',           'K kg kg-1' )
-    if ( luserv ) &
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvSv, 'UP_THVSV', 'Updraft resolved <ThvSv> variance',           'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WSv,   'UP_WSV',   'Updraft resolved <wSv> vertical flux', 'm kg kg-1 s-1' )
-
-    tfield%ndims = 2
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3) = NMNHDIM_UNUSED
-    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
-  end if
-end if
-!
-!
-!*      2.5  Downdraft quantities
-!            --------------------
-!
-if ( lles_downdraft ) then
-  cgroup = 'Downdraft'
-  cgroupcomment = 'Downdraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
-
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT,     'DW_FRAC', 'Downdraft fraction',                                 '1' )
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_W,   'DW_W',    'Downdraft W mean value',                             'm s-1' )
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th,  'DW_TH',   'Downdraft potential temperature mean value',         'K' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl, 'DW_THL',  'Downdraft liquid potential temperature mean value',  'K' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thv, 'DW_THV',  'Downdraft virtual potential temperature mean value', 'K' )
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ke,  'DW_KE',   'Downdraft resolved TKE mean value',                 'm2 s-2' )
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Tke, 'DW_TKE',  'Downdraft subgrid TKE mean value',                  'm2 s-2' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv,  'DW_RV',   'Downdraft water vapor mean value',                 'kg kg-1' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc,  'DW_RC',   'Downdraft cloud water mean value',                 'kg kg-1' )
-  if ( luserr ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rr,  'DW_RR',   'Downdraft rain mean value',                        'kg kg-1' )
-  if ( luseri ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri,  'DW_RI',   'Downdraft ice mean value',                         'kg kg-1' )
-  if ( lusers ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rs,  'DW_RS',   'Downdraft snow mean value',                        'kg kg-1' )
-  if ( luserg ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rg,  'DW_RG',   'Downdraft graupel mean value',                     'kg kg-1' )
-  if ( luserh ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rh,  'DW_RH',   'Downdraft hail mean value',                        'kg kg-1' )
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 3
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv, 'DW_SV', 'Downdraft scalar variables mean values', 'kg kg-1' )
-
-    tfield%ndims = 2
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3) = NMNHDIM_UNUSED
-    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
-  end if
-
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th2,    'DW_TH2',  'Downdraft resolved Theta variance',             'K2' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl2,   'DW_THL2', 'Downdraft resolved Theta_l variance',           'K2' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThThv,  'DW_THTV', 'Downdraft resolved Theta Theta_v covariance',   'K2' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlThv, 'DW_TLTV', 'Downdraft resolved Theta_l Theta_v covariance', 'K2' )
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WTh,    'DW_WTH',  'Downdraft resolved WTh flux',                   'm K s-1' )
-  if ( luserc ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThl,   'DW_WTHL', 'Downdraft resolved WThl flux',                  'm K s-1' )
-  if ( luserv ) &
-  call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThv,   'DW_WTHV', 'Downdraft resolved WThv flux',                  'm K s-1' )
-
-  if ( luserv ) then
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv2,   'DW_RV2',   'Downdraft resolved water vapor variance', 'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRv,  'DW_THRV',  'Downdraft resolved <thrv> covariance',    'K kg kg-1' )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRv, 'DW_THLRV', 'Downdraft resolved <thlrv> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRv, 'DW_THVRV', 'Downdraft resolved <thvrv> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRv,   'DW_WRV',   'Downdraft resolved <wrv> vertical flux',  &
-                            'm kg kg-1 s-1' )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc2,   'DW_RC2',   'Downdraft resolved cloud water variance', 'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRc,  'DW_THRC',  'Downdraft resolved <thrc> covariance',    'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRc, 'DW_THLRC', 'Downdraft resolved <thlrc> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRc, 'DW_THVRC', 'Downdraft resolved <thvrc> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRc,   'DW_WRC',   'Downdraft resolved <wrc> vertical flux',  &
-                            'm kg kg-1 s-1' )
-  end if
-
-  if ( luseri ) then
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri2,   'DW_RI2',   'Downdraft resolved cloud ice variance',   'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRi,  'DW_THRI',  'Downdraft resolved <thri> covariance',    'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRi, 'DW_THLRI', 'Downdraft resolved <thlri> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRi, 'DW_THVRI', 'Downdraft resolved <thvri> covariance',   'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRi,   'DW_WRI',   'Downdraft resolved <wri> vertical flux',  &
-                            'm kg kg-1 s-1' )
-  end if
-
-
-  if ( nsv > 0 ) then
-    tfield%ndims = 3
-    tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_SV
-    tfield%ndimlist(4:) = NMNHDIM_UNUSED
-
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv2,   'DW_SV2',   'Downdraft resolved scalar variables variances', &
-                            'kg2 kg-2' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThSv,  'DW_THSV',  'Downdraft resolved <ThSv> variance',            &
-                            'K kg kg-1' )
-    if ( luserc ) &
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlSv, 'DW_THLSV', 'Downdraft resolved <ThlSv> variance',           &
-                            'K kg kg-1' )
-    if ( luserv ) &
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvSv, 'DW_THVSV', 'Downdraft resolved <ThvSv> variance',           &
-                            'K kg kg-1' )
-    call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WSv,   'DW_WSV',   'Downdraft resolved <wSv> vertical flux',        &
-                            'm kg kg-1 s-1' )
-
-    tfield%ndims = 2
-    !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-    !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-    tfield%ndimlist(3) = NMNHDIM_UNUSED
-    !tfield%ndimlist(4:) = NMNHDIM_UNUSED
-  end if
-end if
-!
-!-------------------------------------------------------------------------------
-!
-!*      3.   surface normalization parameters
-!            --------------------------------
-!
-cgroup = 'Radiation'
-cgroupcomment = 'Radiative terms'
-
-!Prepare metadata (used in Les_diachro_write calls)
-tfield%ndims = 2
-tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
-tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
-tfield%ndimlist(3:) = NMNHDIM_UNUSED
-
-ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
-ldonorm = .false.
-
-call Les_diachro_write( tpdiafile, XLES_SWU,      'SWU',      'SW upward radiative flux',          'W m-2' )
-call Les_diachro_write( tpdiafile, XLES_SWD,      'SWD',      'SW downward radiative flux',        'W m-2' )
-call Les_diachro_write( tpdiafile, XLES_LWU,      'LWU',      'LW upward radiative flux',          'W m-2' )
-call Les_diachro_write( tpdiafile, XLES_LWD,      'LWD',      'LW downward radiative flux',        'W m-2' )
-call Les_diachro_write( tpdiafile, XLES_DTHRADSW, 'DTHRADSW', 'SW radiative temperature tendency', 'K s-1' )
-call Les_diachro_write( tpdiafile, XLES_DTHRADLW, 'DTHRADLW', 'LW radiative temperature tendency', 'K s-1' )
-!writes mean_effective radius at all levels
-call Les_diachro_write( tpdiafile, XLES_RADEFF,   'RADEFF',   'Mean effective radius',             'micron' )
-
-
-cgroup = 'Surface'
-cgroupcomment = 'Averaged surface fields'
-
-! !Prepare metadate (used in Les_diachro_write calls)
-tfield%ndims = 1
-tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
-tfield%ndimlist(2:) = NMNHDIM_UNUSED
-
-call Les_diachro_write( tpdiafile, XLES_Q0, 'Q0', 'Sensible heat flux at the surface', 'm K s-1' )
-if ( luserv ) &
-call Les_diachro_write( tpdiafile, XLES_E0, 'E0', 'Latent heat flux at the surface',   'kg kg-1 m s-1' )
-
-if ( nsv > 0 ) then
-  tfield%ndims = 2
-  tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
-  tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_SV
-  tfield%ndimlist(3:) = NMNHDIM_UNUSED
-
-  call Les_diachro_write( tpdiafile, XLES_SV0, 'SV0', 'Scalar variable fluxes at the surface', 'kg kg-1 m s-1' )
-
-  tfield%ndims = 1
-  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
-  tfield%ndimlist(2)  = NMNHDIM_UNUSED
-  !tfield%ndimlist(3:) = NMNHDIM_UNUSED
-end if
-
-call Les_diachro_write( tpdiafile, XLES_USTAR,      'Ustar',      'Friction velocity',                   'm s-1' )
-call Les_diachro_write( tpdiafile, XLES_WSTAR,      'Wstar',      'Convective velocity',                 'm s-1' )
-call Les_diachro_write( tpdiafile, XLES_MO_LENGTH,  'L_MO',       'Monin-Obukhov length',                'm' )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_PRECFR,     'PREC_FRAC',  'Fraction of columns where rain at surface',  '1' )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_INPRR,      'INST_PREC',  'Instantaneous precipitation rate',       'mm day-1' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_INPRC,      'INST_SEDIM', 'Instantaneous cloud precipitation rate', 'mm day-1' )
-if ( luserc .and. ( ldeposc .or. ldepoc ) ) &
-call Les_diachro_write( tpdiafile, XLES_INDEP,      'INST_DEPOS', 'Instantaneous cloud deposition rate',    'mm day-1' )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_RAIN_INPRR, 'RAIN_PREC',  'Instantaneous precipitation rate over rainy grid cells', &
-                        'mm day-1' )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_ACPRR,      'ACCU_PREC',  'Accumulated precipitation rate',             'mm' )
-
-
-cgroup        = 'Miscellaneous'
-cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
-
-call Les_diachro_write( tpdiafile, XLES_BL_HEIGHT,  'BL_H',       'Boundary Layer Height',               'm' )
-call Les_diachro_write( tpdiafile, XLES_INT_TKE,    'INT_TKE',    'Vertical integrated TKE',             'm2 s-2' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_ZCB,        'ZCB',        'Cloud base Height',                   'm' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_CFtot,      'ZCFTOT',     'Total cloud cover (rc>1e-6)',         '1' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_CF2tot,     'ZCF2TOT',    'Total cloud cover (rc>1e-5)',         '1' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_LWP,        'LWP',        'Liquid Water path',                   'kg m-2' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_LWPVAR,     'LWPVAR',     'Liquid Water path variance',          'kg m-4' )
-if ( luserr ) &
-call Les_diachro_write( tpdiafile, XLES_RWP,        'RWP',        'Rain Water path',                     'kg m-2' )
-if ( luseri ) &
-call Les_diachro_write( tpdiafile, XLES_IWP,        'IWP',        'Ice Water path',                      'kg m-2' )
-if ( lusers ) &
-call Les_diachro_write( tpdiafile, XLES_SWP,        'SWP',        'Snow Water path',                     'kg m-2' )
-if ( luserg ) &
-call Les_diachro_write( tpdiafile, XLES_GWP,        'GWP',        'Graupel Water path',                  'kg m-2' )
-if ( luserh ) &
-call Les_diachro_write( tpdiafile, XLES_HWP,        'HWP',        'Hail Water path',                     'kg m-2' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_ZMAXCF,     'ZMAXCF',     'Height of Cloud fraction maximum (rc>1e-6)', 'm' )
-if ( luserc ) &
-call Les_diachro_write( tpdiafile, XLES_ZMAXCF2,    'ZMAXCF2',    'Height of Cloud fraction maximum (rc>1e-5)', 'm' )
-
-!-------------------------------------------------------------------------------
-!
-!*      4.   LES budgets
-!            -----------
-!
-call Write_les_budget_n( tpdiafile )
-
-if ( luserv )  call Write_les_rt_budget_n( tpdiafile )
-
-if ( nsv > 0 ) call Write_les_sv_budget_n( tpdiafile )
-!
-!-------------------------------------------------------------------------------
-!
-!*      5.   (ni,z,t) and (nj,z,t) 2points correlations
-!            ------------------------------------------
-!
-if ( nspectra_k > 0 ) then
-  tfieldx%cstdname = ''
-  tfieldx%ngrid    = 0 !Not on the Arakawa grid
-  tfieldx%ntype    = TYPEREAL
-  tfieldx%ndims    = 3
-  tfieldx%ndimlist(1)  = NMNHDIM_SPECTRA_2PTS_NI
-  tfieldx%ndimlist(2)  = NMNHDIM_SPECTRA_LEVEL
-  tfieldx%ndimlist(3)  = NMNHDIM_BUDGET_LES_TIME
-  tfieldx%ndimlist(4:) = NMNHDIM_UNUSED
-
-  tfieldy%cstdname = ''
-  tfieldy%ngrid    = 0 !Not on the Arakawa grid
-  tfieldy%ntype    = TYPEREAL
-  tfieldy%ndims    = 3
-  tfieldy%ndimlist(1)  = NMNHDIM_SPECTRA_2PTS_NJ
-  tfieldy%ndimlist(2)  = NMNHDIM_SPECTRA_LEVEL
-  tfieldy%ndimlist(3)  = NMNHDIM_BUDGET_LES_TIME
-  tfieldy%ndimlist(4:) = NMNHDIM_UNUSED
-
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_UU, XCORRj_UU, 'UU', 'U*U     2 points correlations', 'm2 s-2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_VV, XCORRj_VV, 'VV', 'V*V     2 points correlations', 'm2 s-2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_WW, XCORRj_WW, 'WW', 'W*W     2 points correlations', 'm2 s-2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_UV, XCORRj_UV, 'UV', 'U*V     2 points correlations', 'm2 s-2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_WU, XCORRj_WU, 'WU', 'W*U     2 points correlations', 'm2 s-2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_WV, XCORRj_WV, 'WV', 'W*V     2 points correlations', 'm2 s-2' )
-
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_ThTh, XCORRj_ThTh, 'THTH', 'Th*Th   2 points correlations', 'K2' )
-  if ( luserc ) &
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlThl, XCORRj_ThlThl, 'TLTL', 'Thl*Thl 2 points correlations', 'K2' )
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_WTh,    XCORRj_WTh,    'WTH',  'W*Th    2 points correlations', 'm K s-1' )
-  if ( luserc ) &
-  call Les_diachro_2pt_write( tpdiafile, XCORRi_WThl,   XCORRj_WThl,   'WTHL', 'W*Thl   2 points correlations', 'm K s-1' )
-
-  if ( luserv ) then
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_RvRv,  XCORRj_RvRv,  'RVRV', 'rv*rv   2 points correlations', 'kg2 kg-2' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRv,  XCORRj_ThRv,  'THRV', 'TH*RV   2 points correlations', 'K kg kg-1' )
-    if ( luserc ) &
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRv, XCORRj_ThlRv, 'TLRV', 'thl*rv  2 points correlations', 'K kg kg-1' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRv,   XCORRj_WRv,   'WRV',  'W*rv    2 points correlations', 'm kg s-1 kg-1' )
-  end if
-
-  if ( luserc ) then
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_RcRc,  XCORRj_RcRc,  'RCRC', 'rc*rc   2 points correlations', 'kg2 kg-2' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRc,  XCORRj_ThRc,  'THRC', 'th*rc   2 points correlations', 'K kg kg-1' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRc, XCORRj_ThlRc, 'TLRC', 'thl*rc  2 points correlations', 'K kg kg-1' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRc,   XCORRj_WRc,   'WRC',  'W*rc    2 points correlations', 'm kg s-1 kg-1' )
-  end if
-
-  if ( luseri ) then
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_RiRi,  XCORRj_RiRi,  'RIRI', 'ri*ri   2 points correlations', 'kg2 kg-2' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRi,  XCORRj_ThRi,  'THRI', 'th*ri   2 points correlations', 'K kg kg-1' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRi, XCORRj_ThlRi, 'TLRI', 'thl*ri  2 points correlations', 'K kg kg-1' )
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_WRi,   XCORRj_WRi,   'WRI',  'W*ri    2 points correlations', 'm kg s-1 kg-1' )
-  end if
-
-!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!)
-  do jsv = 1, nsv
-    Write( ygroup, fmt = "( a2, i3.3 )" ) "SS", jsv
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_SvSv(:,:,:,JSV), XCORRj_SvSv(:,:,:,JSV), ygroup, &
-                                'Sv*Sv   2 points correlations','kg2 kg-2' )
-  end do
-
-!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!)
-  do jsv = 1, nsv
-    Write( ygroup, fmt = "( a2, i3.3 )" ) "WS", jsv
-    call Les_diachro_2pt_write( tpdiafile, XCORRi_WSv(:,:,:,JSV), XCORRj_WSv(:,:,:,JSV), ygroup, &
-                                'W*Sv    2 points correlations','m kg s-1 kg-1' )
-  end do
-end if
-!
-!-------------------------------------------------------------------------------
-!
-!*      6.   spectra and time-averaged profiles (if first call to WRITE_LES_n)
-!            ----------------------------------
-!
-call Les_spec_n( tpdiafile )
-!
-!-------------------------------------------------------------------------------
-!
-!*      7.   deallocations
-!            -------------
-!
-CALL LES_DEALLOCATE('XLES_CURRENT_Z')
-
-IF (CLES_NORM_TYPE/='NONE' ) THEN
-  CALL LES_DEALLOCATE('XLES_NORM_M')
-  CALL LES_DEALLOCATE('XLES_NORM_S')
-  CALL LES_DEALLOCATE('XLES_NORM_K')
-  CALL LES_DEALLOCATE('XLES_NORM_RHO')
-  CALL LES_DEALLOCATE('XLES_NORM_RV')
-  CALL LES_DEALLOCATE('XLES_NORM_SV')
-  CALL LES_DEALLOCATE('XLES_NORM_P')
-END IF
-
-end subroutine Write_les_n
-
-!------------------------------------------------------------------------------
-
-subroutine Les_diachro_write_1D( tpdiafile, pdata, hmnhname, hcomment, hunits )
-
-use modd_io,          only: tfiledata
-
-use mode_les_diachro, only: Les_diachro
-
-type(tfiledata),    intent(in) :: tpdiafile ! file to write
-real, dimension(:), intent(in) :: pdata
-character(len=*),   intent(in) :: hmnhname
-character(len=*),   intent(in) :: hcomment
-character(len=*),   intent(in) :: hunits
-
-tfield%cmnhname  = hmnhname
-tfield%clongname = hmnhname
-tfield%ccomment  = hcomment
-tfield%cunits    = hunits
-
-call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
-
-end subroutine Les_diachro_write_1D
-
-!------------------------------------------------------------------------------
-
-subroutine Les_diachro_write_2D( tpdiafile, pdata, hmnhname, hcomment, hunits )
-
-use modd_io,          only: tfiledata
-
-use mode_les_diachro, only: Les_diachro
-
-type(tfiledata),      intent(in) :: tpdiafile ! file to write
-real, dimension(:,:), intent(in) :: pdata
-character(len=*),     intent(in) :: hmnhname
-character(len=*),     intent(in) :: hcomment
-character(len=*),     intent(in) :: hunits
-
-tfield%cmnhname  = hmnhname
-tfield%clongname = hmnhname
-tfield%ccomment  = hcomment
-tfield%cunits    = hunits
-
-call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
-
-end subroutine Les_diachro_write_2D
-
-!------------------------------------------------------------------------------
-
-subroutine Les_diachro_write_3D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks )
-
-use modd_io,          only: tfiledata
-
-use mode_les_diachro, only: Les_diachro
-
-type(tfiledata),                          intent(in) :: tpdiafile ! file to write
-real,             dimension(:,:,:),       intent(in) :: pdata
-character(len=*),                         intent(in) :: hmnhname
-character(len=*),                         intent(in) :: hcomment
-character(len=*),                         intent(in) :: hunits
-character(len=*), dimension(:), optional, intent(in) :: hmasks
-
-tfield%cmnhname  = hmnhname
-tfield%clongname = hmnhname
-tfield%ccomment  = hcomment
-tfield%cunits    = hunits
-
-call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
-
-end subroutine Les_diachro_write_3D
-
-!------------------------------------------------------------------------------
-
-subroutine Les_diachro_write_4D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks )
-
-use modd_io,          only: tfiledata
-
-use mode_les_diachro, only: Les_diachro
-
-type(tfiledata),                            intent(in) :: tpdiafile ! file to write
-real,             dimension(:,:,:,:),       intent(in) :: pdata
-character(len=*),                           intent(in) :: hmnhname
-character(len=*),                           intent(in) :: hcomment
-character(len=*),                           intent(in) :: hunits
-character(len=*), dimension(:),   optional, intent(in) :: hmasks
-
-tfield%cmnhname  = hmnhname
-tfield%clongname = hmnhname
-tfield%ccomment  = hcomment
-tfield%cunits    = hunits
-
-call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
-
-end subroutine Les_diachro_write_4D
-
-!------------------------------------------------------------------------------
-
-subroutine Les_diachro_2pt_write( tpdiafile, zcorri, zcorrj, hmnhname, hcomment, hunits )
-
-use modd_io,          only: tfiledata
-
-use mode_les_diachro, only: Les_diachro_2pt
-
-type(tfiledata),          intent(in) :: tpdiafile ! file to write
-real, dimension(:,:,:),   intent(in) :: zcorri    ! 2 pts correlation data
-real, dimension(:,:,:),   intent(in) :: zcorrj    ! 2 pts correlation data
-character(len=*),         intent(in) :: hmnhname
-character(len=*),         intent(in) :: hcomment
-character(len=*),         intent(in) :: hunits
-
-tfieldx%cmnhname  = hmnhname
-tfieldx%clongname = hmnhname
-tfieldx%ccomment  = hcomment
-tfieldx%cunits    = hunits
-
-tfieldy%cmnhname  = hmnhname
-tfieldy%clongname = hmnhname
-tfieldy%ccomment  = hcomment
-tfieldy%cunits    = hunits
-
-call Les_diachro_2pt( tpdiafile, tfieldx, tfieldy, zcorri, zcorrj )
-
-end subroutine Les_diachro_2pt_write
-
-!------------------------------------------------------------------------------
-
-end module mode_write_les_n
diff --git a/src/mesonh/micro/c2r2_adjust.f90 b/src/mesonh/micro/c2r2_adjust.f90
index b97914d1af619016ef85478e6aa2c275eb31421c..c5e9d27bcd264a39895284056bb1fdaa9c22b715 100644
--- a/src/mesonh/micro/c2r2_adjust.f90
+++ b/src/mesonh/micro/c2r2_adjust.f90
@@ -146,7 +146,7 @@ use modd_budget,         only: lbudget_th, lbudget_rv, lbudget_rc, lbudget_sv,
                                tbudgets
 USE MODD_CONF
 USE MODD_CST
-USE MODD_FIELD,          only: tfielddata, TYPEREAL
+USE MODD_FIELD,          only: tfieldmetadata, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_NSV,            ONLY: NSV_C2R2BEG
@@ -195,10 +195,10 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZW1,ZW2,ZW3  ! Work arrays for intermediate
                                          ! fields
 !
-INTEGER             :: IRESP      ! Return code of FM routines
-INTEGER             :: JITER,ITERMAX  ! iterative loop for first order adjustment
-INTEGER             :: ILUOUT     ! Logical unit of output listing 
-TYPE(TFIELDDATA)    :: TZFIELD
+INTEGER              :: IRESP      ! Return code of FM routines
+INTEGER              :: JITER,ITERMAX  ! iterative loop for first order adjustment
+INTEGER              :: ILUOUT     ! Logical unit of output listing
+TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 !*       1.     PRELIMINARIES
@@ -405,16 +405,17 @@ IF ( HRAD /= 'NONE' ) THEN
 END IF
 !
 IF ( tpfile%lopened ) THEN
-  TZFIELD%CMNHNAME   = 'NEB'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'NEB'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_NEB'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(   &
+    CMNHNAME   = 'NEB',       &
+    CSTDNAME   = '',          &
+    CLONGNAME  = 'NEB',       &
+    CUNITS     = '1',         &
+    CDIR       = 'XY',        &
+    CCOMMENT   = 'X_Y_Z_NEB', &
+    NGRID      = 1,           &
+    NTYPE      = TYPEREAL,    &
+    NDIMS      = 3,           &
+    LTIMEDEP   = .TRUE.       )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW1)
 END IF
 !
diff --git a/src/mesonh/micro/ini_lima_cold_mixed.f90 b/src/mesonh/micro/ini_lima_cold_mixed.f90
index c06c292124caf83cf1a3854f60f0b4eb44d5f95a..2e3d956a46102eb75e5707369aed815f7f9bb798 100644
--- a/src/mesonh/micro/ini_lima_cold_mixed.f90
+++ b/src/mesonh/micro/ini_lima_cold_mixed.f90
@@ -57,7 +57,8 @@ USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_WARM
 USE MODD_PARAM_LIMA_COLD
 USE MODD_PARAM_LIMA_MIXED
-use MODD_RAIN_ICE_PARAM,  only: XALPHA1, XALPHA2, XBETA1, XBETA2, IMNU0=>XMNU0, XNU10, XNU20
+USE MODD_RAIN_ICE_PARAM,  ONLY: XALPHA1, XALPHA2, XBETA1, XBETA2, IMNU0=>XMNU0, XNU10, XNU20, &
+                                RAIN_ICE_PARAM_ASSOCIATE
 USE MODD_REF
 !
 use mode_msg
@@ -155,6 +156,7 @@ ILUOUT0 = TLUOUT0%NLU
 !*       1.     CHARACTERISTICS OF THE SPECIES
 !   	        ------------------------------
 !
+CALL RAIN_ICE_PARAM_ASSOCIATE()
 !
 !*       1.2    Ice crystal characteristics
 !
@@ -341,8 +343,8 @@ IF (GFLAG) THEN
   WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH
 END IF
 !
-XLBDAS_MAX = 500000. ! used only before transforming lambda for non MP PSD
-XLBDAS_MIN = 1000. *1.E-10
+XLBDAS_MAX = 1.E7 ! (eq to r~1E-7kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS)
+XLBDAS_MIN = 1.   ! (eq to r~0.18kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS)
 XLBDAG_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90
index 38f8fed026c66cf7102942d0cb5d9ed0d25fc317..2f3b2b1c4aee01a9703c23f5351d0c27835246ec 100644
--- a/src/mesonh/micro/ini_rain_ice.f90
+++ b/src/mesonh/micro/ini_rain_ice.f90
@@ -442,11 +442,11 @@ XLBH   = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH)
 XLBDAS_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-#if defined(REPRO48) || defined(REPRO55)
 IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+#if defined(REPRO48) || defined(REPRO55)
 #else
-XLBDAS_MAX = 1.E6
-XLBDAS_MIN = 1000.
+IF (LSNOW_T) XLBDAS_MAX = 1.E6
+XLBDAS_MIN = 1.E-10
 #endif
 !
 XCONC_SEA=1E8 ! 100/cm3
diff --git a/src/mesonh/micro/lima.f90 b/src/mesonh/micro/lima.f90
index 9859c4bd02f194d19caae1e7e1cbd7c522344a7c..0ed11fe4885abca003bda12c21d85a861f293d43 100644
--- a/src/mesonh/micro/lima.f90
+++ b/src/mesonh/micro/lima.f90
@@ -419,6 +419,8 @@ ZHOMFT(:,:,:)   = 0.
 ZHOMFS(:,:,:)   = 0.
 
 if ( lbu_enable ) then
+  Z_RR_CVRC(:,:,:) = 0.
+  Z_CR_CVRC(:,:,:) = 0.
   allocate( ZTOT_CR_BRKU (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_BRKU(:,:,:) = 0.
   allocate( ZTOT_TH_HONR (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_HONR(:,:,:) = 0.
   allocate( ZTOT_RR_HONR (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_HONR(:,:,:) = 0.
@@ -679,6 +681,13 @@ ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !               -------------
 !
 !
+PINPRC=0.
+PINDEP=0.
+PINPRR=0.
+PINPRI=0.
+PINPRS=0.
+PINPRG=0.
+PINPRH=0.
 if ( lbu_enable ) then
   if ( lbudget_th )                         call Budget_store_init( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rc .and. lwarm .and. lsedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) )
@@ -767,8 +776,6 @@ IF (LWARM .AND. LDEPOC) THEN
 END IF
 !
 !
-!!$Z_RR_CVRC(:,:,:) = 0.
-!!$Z_CR_CVRC(:,:,:) = 0.
 !!$IF (LWARM .AND. LRAIN) THEN
 !!$   if( lbu_enable ) then
 !!$    if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC),                    'R2C1', zrcs(:, :, :) * prhodj(:, :, :) )
diff --git a/src/mesonh/micro/lima_adjust.f90 b/src/mesonh/micro/lima_adjust.f90
index 189fe45146155c66740f559f4db5c9e2bd006a29..54b749e8be0e1166ef23eda588f09ffb95cc164b 100644
--- a/src/mesonh/micro/lima_adjust.f90
+++ b/src/mesonh/micro/lima_adjust.f90
@@ -151,7 +151,7 @@ use modd_budget,           only: lbu_enable, nbumod,
                                  tbudgets
 USE MODD_CONF
 USE MODD_CST
-use modd_field,            only: TFIELDDATA, TYPEREAL
+use modd_field,            only: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
@@ -288,7 +288,7 @@ INTEGER                           :: JL       ! and PACK intrinsics
 INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
 INTEGER , DIMENSION(3) :: BV
-TYPE(TFIELDDATA)  :: TZFIELD
+TYPE(TFIELDMETADATA)  :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
@@ -1201,16 +1201,17 @@ IF ( SIZE(PSRCS,3) /= 0 ) THEN
 END IF
 !
 IF ( tpfile%lopened ) THEN
-  TZFIELD%CMNHNAME   = 'NEB'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'NEB'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_NEB'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(   &
+    CMNHNAME   = 'NEB',       &
+    CSTDNAME   = '',          &
+    CLONGNAME  = 'NEB',       &
+    CUNITS     = '1',         &
+    CDIR       = 'XY',        &
+    CCOMMENT   = 'X_Y_Z_NEB', &
+    NGRID      = 1,           &
+    NTYPE      = TYPEREAL,    &
+    NDIMS      = 3,           &
+    LTIMEDEP   = .TRUE.       )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
@@ -1256,16 +1257,17 @@ IF ( tpfile%lopened ) THEN
   ZW1(:,:,:)= PPABSTT(:,:,:)
   ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
 
-  TZFIELD%CMNHNAME   = 'SSI'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'SSI'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SSI'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(   &
+    CMNHNAME   = 'SSI',       &
+    CSTDNAME   = '',          &
+    CLONGNAME  = 'SSI',       &
+    CUNITS     = '',          &
+    CDIR       = 'XY',        &
+    CCOMMENT   = 'X_Y_Z_SSI', &
+    NGRID      = 1,           &
+    NTYPE      = TYPEREAL,    &
+    NDIMS      = 3,           &
+    LTIMEDEP   = .TRUE.       )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
diff --git a/src/mesonh/micro/lima_adjust_split.f90 b/src/mesonh/micro/lima_adjust_split.f90
index 2b07f24bd486b334074c1c651e7b6475bd2e4bff..d0b3425d8f83bec8cf9010ace6fe2dfab4e71acd 100644
--- a/src/mesonh/micro/lima_adjust_split.f90
+++ b/src/mesonh/micro/lima_adjust_split.f90
@@ -158,7 +158,7 @@ use modd_budget,           only: lbu_enable, nbumod,
                                  tbudgets
 USE MODD_CONF
 USE MODD_CST
-use modd_field,            only: TFIELDDATA, TYPEREAL
+use modd_field,            only: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
@@ -287,8 +287,8 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZRI, ZRI_IN,  &
                             Z_SIGS, Z_SRCS, &
                             ZW_MF, &
-                            ZCND, ZS, ZVEC1
-REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D, ZDUM
+                            ZCND, ZS, ZVEC1,ZDUM
+REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D
 !
 INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1
 !
@@ -302,6 +302,7 @@ INTEGER                  :: JITER,ITERMAX  ! iterative loop for first order adju
 INTEGER                  :: ILUOUT     ! Logical unit of output listing 
 !
 INTEGER                           :: ISIZE
+LOGICAL                           :: G_SIGMAS, GUSERI
 REAL, DIMENSION(:), ALLOCATABLE   :: ZRTMIN
 REAL, DIMENSION(:), ALLOCATABLE   :: ZCTMIN
 !
@@ -309,8 +310,7 @@ integer :: idx
 integer :: JI, JJ, JK, jl
 INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
-TYPE(TFIELDDATA)  :: TZFIELD
-LOGICAL :: G_SIGMAS, GUSERI
+TYPE(TFIELDMETADATA)     :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
@@ -504,12 +504,11 @@ DO JITER =1,ITERMAX
    ZRC2=PRCT
    ZRV_IN=ZRV
    ZRC_IN=ZRC
-   ZRI_IN=0.
    IF (NMOM_I.EQ.1) THEN
-      ZRI=PRIS*PTSTEP
+      ZRI_IN=PRIS*PTSTEP
       GUSERI=.TRUE.
    ELSE
-      ZRI=0.
+      ZRI_IN=0.
       GUSERI=.FALSE.
    END IF
    IF (OSUBG_COND) THEN
@@ -683,16 +682,17 @@ ELSE
 END IF
 !
 IF ( tpfile%lopened ) THEN
-   TZFIELD%CMNHNAME   = 'NEB'
-   TZFIELD%CSTDNAME   = ''
-   TZFIELD%CLONGNAME  = 'NEB'
-   TZFIELD%CUNITS     = '1'
-   TZFIELD%CDIR       = 'XY'
-   TZFIELD%CCOMMENT   = 'X_Y_Z_NEB'
-   TZFIELD%NGRID      = 1
-   TZFIELD%NTYPE      = TYPEREAL
-   TZFIELD%NDIMS      = 3
-   TZFIELD%LTIMEDEP   = .TRUE.
+   TZFIELD = TFIELDMETADATA(   &
+     CMNHNAME   = 'NEB',       &
+     CSTDNAME   = '',          &
+     CLONGNAME  = 'NEB',       &
+     CUNITS     = '1',         &
+     CDIR       = 'XY',        &
+     CCOMMENT   = 'X_Y_Z_NEB', &
+     NGRID      = 1,           &
+     NTYPE      = TYPEREAL,    &
+     NDIMS      = 3,           &
+     LTIMEDEP   = .TRUE.       )
    CALL IO_Field_write(TPFILE,TZFIELD,PCLDFR)
 END IF
 !
@@ -737,16 +737,17 @@ IF ( tpfile%lopened ) THEN
    ZW1(:,:,:)= PPABSTT(:,:,:)
    ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
    
-   TZFIELD%CMNHNAME   = 'SSI'
-   TZFIELD%CSTDNAME   = ''
-   TZFIELD%CLONGNAME  = 'SSI'
-   TZFIELD%CUNITS     = ''
-   TZFIELD%CDIR       = 'XY'
-   TZFIELD%CCOMMENT   = 'X_Y_Z_SSI'
-   TZFIELD%NGRID      = 1
-   TZFIELD%NTYPE      = TYPEREAL
-   TZFIELD%NDIMS      = 3
-   TZFIELD%LTIMEDEP   = .TRUE.
+   TZFIELD = TFIELDMETADATA(   &
+     CMNHNAME   = 'SSI',       &
+     CSTDNAME   = '',          &
+     CLONGNAME  = 'SSI',       &
+     CUNITS     = '',          &
+     CDIR       = 'XY',        &
+     CCOMMENT   = 'X_Y_Z_SSI', &
+     NGRID      = 1,           &
+     NTYPE      = TYPEREAL,    &
+     NDIMS      = 3,           &
+     LTIMEDEP   = .TRUE.       )
    CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
diff --git a/src/mesonh/micro/lima_ccn_activation.f90 b/src/mesonh/micro/lima_ccn_activation.f90
index fa0a276ebcc591f7dc6dbdbdaf505f044d97c6ba..bac576fa00f953074ced8034ceeb6e1271f3aadb 100644
--- a/src/mesonh/micro/lima_ccn_activation.f90
+++ b/src/mesonh/micro/lima_ccn_activation.f90
@@ -98,7 +98,7 @@ END MODULE MODI_LIMA_CCN_ACTIVATION
 !              ------------
 !
 USE MODD_CST,             ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMNH_EPSILON, XMV, XRV, XTT
-use modd_field,           only: TFIELDDATA, TYPEREAL
+use modd_field,           only: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
@@ -181,7 +181,7 @@ INTEGER :: JMOD
 INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
 !
 INTEGER                  :: ILUOUT     ! Logical unit of output listing 
-TYPE(TFIELDDATA) :: TZFIELD   
+TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 ILUOUT = TLUOUT%NLU
@@ -502,29 +502,30 @@ IF ( tpfile%lopened ) THEN
     ZW (:,:,:) = 0.
     ZW2(:,:,:) = 0.
   END IF
-
-  TZFIELD%CMNHNAME   ='SMAX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SMAX'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'SMAX',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'SMAX',       &
+    CUNITS     = '',           &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_SMAX', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
-  TZFIELD%CMNHNAME   ='NACT'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = 'kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'NACT',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'NACT',       &
+    CUNITS     = 'kg-1',       &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_NACT', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
diff --git a/src/mesonh/micro/lima_cold_sedimentation.f90 b/src/mesonh/micro/lima_cold_sedimentation.f90
index 13e80b57c456b0e61d9a3146a8f3c9fe1b75609e..ce1e7141cb834219582687c600d947c1714ecb4d 100644
--- a/src/mesonh/micro/lima_cold_sedimentation.f90
+++ b/src/mesonh/micro/lima_cold_sedimentation.f90
@@ -233,7 +233,7 @@ END IF
    END IF
 !
    ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
-   IF( ISEDIM >= 1 ) THEN
+   IF( ISEDIM >= 0 ) THEN
 !
       IF( JN==1 ) THEN
          IF( OSEDI ) THEN
@@ -477,7 +477,7 @@ END IF
          IF(NMOM_G.GE.2) PCGS(:,:,:) = PCGS(:,:,:) / PTSTEP
          IF(NMOM_H.GE.2) PCHS(:,:,:) = PCHS(:,:,:) / PTSTEP 
       END IF
-   END IF
+   END IF ! ISEDIM
 END DO
 !++cb++
 DEALLOCATE(ZRTMIN)
diff --git a/src/mesonh/micro/lima_collisional_ice_breakup.f90 b/src/mesonh/micro/lima_collisional_ice_breakup.f90
index 3c22bf960b56fca62f3387524493a3a62438cdf8..a6848d14345bcdf23a70338347f5b8ab66940e7b 100644
--- a/src/mesonh/micro/lima_collisional_ice_breakup.f90
+++ b/src/mesonh/micro/lima_collisional_ice_breakup.f90
@@ -128,7 +128,8 @@ REAL                               :: ZFACT1_XNDEBRIS, ZFACT2_XNDEBRIS
 !
 !-------------------------------------------------------------------------------
 
-GCIBU(:) = LCIBU .AND. (PRST(:)>XRTMIN(5)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:)
+GCIBU(:) = LCIBU        .AND. PRST(:)>XRTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. &
+           LDCOMPUTE(:) .AND. PCST(:)>XCTMIN(5) .AND. PCGT(:)>XCTMIN(6)
 ICIBU    = COUNT( GCIBU(:) )
 !
 P_RI_CIBU(:)=0.
diff --git a/src/mesonh/micro/lima_conversion_melting_snow.f90 b/src/mesonh/micro/lima_conversion_melting_snow.f90
index 454df3eba33b2ef1b975c33c3de003a0c6ac9c64..ef46c794f37aee347aa52ea5bf8c338502b53801 100644
--- a/src/mesonh/micro/lima_conversion_melting_snow.f90
+++ b/src/mesonh/micro/lima_conversion_melting_snow.f90
@@ -64,7 +64,7 @@ END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT, XMV, XMD, XLVTT, XCPV, XCL, XESTT, XRV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XNUS, XALPHAS
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XNUS, XALPHAS
 USE MODD_PARAM_LIMA_MIXED, ONLY : XFSCVMG
 USE MODD_PARAM_LIMA_COLD,  ONLY : X0DEPS, XEX0DEPS, X1DEPS, XEX1DEPS, XBS, XFVELOS
 !
@@ -104,7 +104,7 @@ P_RS_CMEL(:)=0.
 P_CS_CMEL(:)=0.
 !
 ZW(:) = 0.0
-WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
+WHERE( PRST(:)>XRTMIN(5) .AND. PCST(:)>XCTMIN(5) .AND. PT(:)>XTT .AND. LDCOMPUTE(:) )
    ZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
    ZW(:) = PKA(:)*(XTT-PT(:)) +                                 &
               ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) &
diff --git a/src/mesonh/micro/lima_droplets_accretion.f90 b/src/mesonh/micro/lima_droplets_accretion.f90
index c7a4232fdaf6fc57a7051f15d3c2c6e58afea091..d183953cd21da3563c87d7fc851af9bd76d10539 100644
--- a/src/mesonh/micro/lima_droplets_accretion.f90
+++ b/src/mesonh/micro/lima_droplets_accretion.f90
@@ -116,6 +116,7 @@ ZW4(:) = 0.0
 IF ( LKHKO ) THEN
 !
    GACCR(:) = PRRT(:)>XRTMIN(3) .AND. &
+              PCRT(:)>XCTMIN(3) .AND. &
               PRCT(:)>XRTMIN(2) .AND. &
               PCCT(:)>XCTMIN(2)
 !
@@ -130,8 +131,8 @@ IF ( LKHKO ) THEN
    END WHERE
 !
 ELSE IF (NMOM_C.EQ.1 .AND. NMOM_R.EQ.1) THEN
-   GACCR(:) = PRRT(:)>XRTMIN(3) .AND. &
-              PRCT(:)>XRTMIN(2)
+   GACCR(:) = PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. &
+              PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2)
    WHERE ( GACCR(:) )
       P_RC_ACCR(:) = - XFCACCR * PRCT(:)    &
                    * PLBDR(:)**XEXCACCR     &
diff --git a/src/mesonh/micro/lima_droplets_hom_freezing.f90 b/src/mesonh/micro/lima_droplets_hom_freezing.f90
index 58e12b5f14f1739266ea459c622a3b40a75b81a9..b33d7a3501fdf56c3925db691f50a11af30b2e5f 100644
--- a/src/mesonh/micro/lima_droplets_hom_freezing.f90
+++ b/src/mesonh/micro/lima_droplets_hom_freezing.f90
@@ -98,7 +98,7 @@ P_TH_HONC(:) = 0.
 P_RC_HONC(:) = 0.
 P_CC_HONC(:) = 0.
 !
-WHERE ( (PT(:)<XTT-35.0) .AND. (PCCT(:)>XCTMIN(2)) .AND. (PRCT(:)>XRTMIN(2)) )
+WHERE ( PT(:)<XTT-35.0 .AND. PCCT(:)>XCTMIN(2) .AND. PRCT(:)>XRTMIN(2) )
    ZTCELSIUS(:) = PT(:)-XTT                                    ! T [°C]
    !
    ZZW(:) = 0.0
diff --git a/src/mesonh/micro/lima_droplets_riming_snow.f90 b/src/mesonh/micro/lima_droplets_riming_snow.f90
index b9d76536589f3b8752802dc34b3efcc8eb41433e..cd46682388de1ab48cd16f98169998029eb2dca6 100644
--- a/src/mesonh/micro/lima_droplets_riming_snow.f90
+++ b/src/mesonh/micro/lima_droplets_riming_snow.f90
@@ -76,7 +76,7 @@ END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT, XNUS, XALPHAS, LMURAKAMI
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT, XNUS, XALPHAS, LMURAKAMI
 USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XRIMINTP1, XRIMINTP2, XGAMINC_RIM1, XGAMINC_RIM2, XGAMINC_RIM4, &
                                   XCRIMSS, XEXCRIMSS, XSRIMCG, XEXSRIMCG, XSRIMCG2, XSRIMCG3, XEXSRIMCG2, &
                                   XHMLINTP1, XHMLINTP2, XGAMINC_HMC, XHM_FACTS, XHMTMIN, XHMTMAX
@@ -129,7 +129,8 @@ DO JI = 1, SIZE(PRCT)
 !*       Cloud droplet riming of the aggregates  
 !        --------------------------------------
 !
-   IF ( PRCT(JI)>XRTMIN(2) .AND. PRST(JI)>XRTMIN(5) .AND. PT(JI)<XTT .AND. LDCOMPUTE(JI) ) THEN
+   IF ( PRCT(JI)>XRTMIN(2) .AND. PRST(JI)>XRTMIN(5) .AND. PT(JI)<XTT .AND. &
+        PCCT(JI)>XCTMIN(2) .AND. PCST(JI)>XCTMIN(5) .AND. LDCOMPUTE(JI) ) THEN
 !
       ZVEC1(JI) = PLBDS(JI)
       ZVEC1W(JI)= ( XFVELOS**XALPHAS + PLBDS(JI)**XALPHAS ) ** (1./XALPHAS) ! modified equivalent lambda
@@ -200,8 +201,8 @@ DO JI = 1, SIZE(PRCT)
 !*       Hallett-Mossop ice production (HMS)  
 !        -----------------------------------
 !
-   IF ( PT(JI)<XHMTMAX .AND. PT(JI)>XHMTMIN .AND.                      &
-        PRST(JI)>XRTMIN(5) .AND. PRCT(JI)>XRTMIN(2) .AND. LDCOMPUTE(JI) ) THEN
+   IF ( PRST(JI)>XRTMIN(5) .AND. PRCT(JI)>XRTMIN(2) .AND. PT(JI)<XHMTMAX .AND. PT(JI)>XHMTMIN .AND. &
+        PCST(JI)>XCTMIN(5) .AND. PCCT(JI)>XCTMIN(2) .AND. LDCOMPUTE(JI) ) THEN
 !
       ZVEC1(JI) = PLBDC(JI)
       ZVEC2(JI) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001,           &
diff --git a/src/mesonh/micro/lima_drops_self_collection.f90 b/src/mesonh/micro/lima_drops_self_collection.f90
index 042cde0842bf74116c47e156ce7d85ed03d5522a..3f064dfcdc0f19a5124562e4d8a5658f2a31a7c5 100644
--- a/src/mesonh/micro/lima_drops_self_collection.f90
+++ b/src/mesonh/micro/lima_drops_self_collection.f90
@@ -105,12 +105,12 @@ ZW1(:) = 0.0
 ZW2(:) = 0.0
 ZW3(:) = 0.0
 !
-WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)>1.E-4) .AND. LDCOMPUTE(:))  ! analytical integration
+WHERE ( PCRT(:)>XCTMIN(3) .AND. ZW4(:)>1.E-4 .AND. LDCOMPUTE(:))  ! analytical integration
    ZW1(:) = XSCBU2 * PCRT(:)**2 / PLBDR3(:)                        ! D>100 10-6 m
    ZW3(:) = ZW1(:)*ZSCBU(:)
 END WHERE
 !
-WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)<=1.E-4) .AND. LDCOMPUTE(:))
+WHERE ( PCRT(:)>XCTMIN(3) .AND. ZW4(:)<=1.E-4 .AND. LDCOMPUTE(:))
    ZW2(:) = XSCBU3 *(PCRT(:) / PLBDR3(:))**2                       ! D<100 10-6 m
    ZW3(:) = ZW2(:)
 END WHERE
diff --git a/src/mesonh/micro/lima_graupel.f90 b/src/mesonh/micro/lima_graupel.f90
index 00ad1646afd9a083366e53b0bcab3406a243666e..8c96d2e0957a34003e2c4ff6ff5bf10b7bebcda1 100644
--- a/src/mesonh/micro/lima_graupel.f90
+++ b/src/mesonh/micro/lima_graupel.f90
@@ -146,7 +146,7 @@ END MODULE MODI_LIMA_GRAUPEL
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT, LHAIL
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT, LHAIL
 USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC,                             &
                                   XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG,           &
                                   XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG,           &
@@ -323,7 +323,7 @@ END WHERE
 !*           1.b Collection of rs in the dry mode
 !            ------------------------------------
 !
-GDRY(:) = PRST(:)>XRTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:)
+GDRY(:) = PRST(:)>XRTMIN(5) .AND. PCST(:)>XCTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. LDCOMPUTE(:)
 !
 WHERE( GDRY )
 !
@@ -389,7 +389,7 @@ END WHERE
 !*           1.c  Collection of rr in the dry mode
 !            -------------------------------------
 !
-GDRY(:) = PRRT(:)>XRTMIN(3) .AND. PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:)
+GDRY(:) = PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. LDCOMPUTE(:)
 !
 WHERE( GDRY )
 !
@@ -462,7 +462,7 @@ ZRDRYG(:) = ZZW1(:) + ZZW2(:) + ZZW3(:) + ZZW4(:)
 !            ------------------------------
 !
 ZZW(:) = 0.0
-WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) )
+WHERE( PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. LDCOMPUTE(:) )
    ZZW5(:) = ZZW2(:) / (XCOLIG*EXP(XCOLEXIG*(PT(:)-XTT)) ) ! RIWETG
    ZZW6(:) = ZZW3(:) / (XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) ) ! RSWETG
    ZZW6N(:)= ZZW3N(:)/ (XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) ) ! NSWETG
@@ -488,7 +488,7 @@ END WHERE
 ZZW(:) = 0.0
 NHAIL = 0.
 IF (LHAIL) NHAIL = 1. 
-WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND. &
+WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. PT(:)<XTT .AND. &
        (ZRDRYG(:)-ZZW2(:)-ZZW3(:))>=(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRWETG(:)-ZZW5(:)-ZZW6(:)>0.0 ) 
 !
 ! Mass of rain and cloud droplets frozen by graupel in wet mode : RCWETG + RRWETG = RWETG - RIWETG - RSWETG
@@ -517,7 +517,7 @@ END WHERE
 !            1.g Dry mode
 !            ------------
 !
-WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND.                  &
+WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. PT(:)<XTT .AND.                  &
        (ZRDRYG(:)-ZZW2(:)-ZZW3(:))<(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRDRYG(:)>0.0 )
    !
    P_RC_DRYG(:) = - ZZW1(:)
@@ -540,7 +540,7 @@ END WHERE
 ! BVIE test ZRDRYG<ZZW ?????????????????????????
 !GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN)    .AND. (ZRDRYG(:)<ZZW(:))&
 GDRY(:) = PT(:)<XHMTMAX .AND. PT(:)>XHMTMIN .AND. PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. LDCOMPUTE(:) .AND. &
-          (ZRDRYG(:)-ZZW2(:)-ZZW3(:))<(ZRWETG(:)-ZZW5(:)-ZZW6(:))
+          PCGT(:)>XCTMIN(6) .AND. PCCT(:)>XCTMIN(2) .AND. (ZRDRYG(:)-ZZW2(:)-ZZW3(:))<(ZRWETG(:)-ZZW5(:)-ZZW6(:))
 
 ZZX(:)=9999.
 ZVEC1(:)=0.
@@ -571,7 +571,7 @@ END WHERE
 !        -------------------
 !
 ZZX(:) = 0.0
-WHERE( (PRGT(:)>XRTMIN(6)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
+WHERE( PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. PT(:)>XTT .AND. LDCOMPUTE(:) )
    ZZX(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
    ZZX(:) = PKA(:)*(XTT-PT(:)) +                                 &
               ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) &
diff --git a/src/mesonh/micro/lima_ice_snow_deposition.f90 b/src/mesonh/micro/lima_ice_snow_deposition.f90
deleted file mode 100644
index 4d92b528ac9aabb0224e61ae9de0c23a5b50f0fb..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_ice_snow_deposition.f90
+++ /dev/null
@@ -1,230 +0,0 @@
-!MNH_LIC Copyright 2013-2018 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_LIMA_ICE_SNOW_DEPOSITION
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, LDCOMPUTE,                 &
-                                           PRHODREF, PSSI, PAI, PCJ, PLSFACT, &
-                                           PRIT, PRST, PCIT, PLBDI, PLBDS,    &
-                                           P_RI_CNVI, P_CI_CNVI,              &
-                                           P_TH_DEPS, P_RS_DEPS,              &
-                                           P_RI_CNVS, P_CI_CNVS,              &
-                                           PA_TH, PA_RV, PA_RI, PA_CI, PA_RS  )
-!
-REAL,                 INTENT(IN)    :: PTSTEP
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI    ! Graupel m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_ICE_SNOW_DEPOSITION
-!
-!     ##########################################################################
-SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, LDCOMPUTE,                        &
-                                     PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
-                                     PRIT, PRST, PCIT, PLBDI, PLBDS,           &
-                                     P_RI_CNVI, P_CI_CNVI,                     &
-                                     P_TH_DEPS, P_RS_DEPS,                     &
-                                     P_RI_CNVS, P_CI_CNVS,                     &
-                                     PA_TH, PA_RV, PA_RI, PA_CI, PA_RS         )
-!     ##########################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the microphysical sources
-!!    for slow cold processes :
-!!      - conversion of snow to ice
-!!      - deposition of vapor on snow
-!!      - conversion of ice to snow (Harrington 1995)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * CNRM *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             15/03/2018
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS 
-USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, &
-                                 XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
-                                 XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
-                                 XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS,  &
-                                 XDICNVS_LIM, XLBDAICNVS_LIM,                 &
-                                 XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS,      &
-                                 XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2,      &
-                                 XAGGS_RLARGE1, XAGGS_RLARGE2  
-
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI    ! Graupel m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary
-REAL,    DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array
-!
-!
-!-------------------------------------------------------------------------------
-!
-P_RI_CNVI(:) = 0.
-P_CI_CNVI(:) = 0.
-P_TH_DEPS(:) = 0.
-P_RS_DEPS(:) = 0.
-P_RI_CNVS(:) = 0.
-P_CI_CNVS(:) = 0.
-!
-! Physical limitations
-!
-!
-! Looking for regions where computations are necessary
-!
-GMICRO(:) = .FALSE.
-GMICRO(:) = LDCOMPUTE(:) .AND. &
-     (PRIT(:)>XRTMIN(4)      .OR.  &
-      PRST(:)>XRTMIN(5))
-!
-!
-WHERE( GMICRO )
-!
-!*       2.1    Conversion of snow to r_i: RSCNVI
-!        ----------------------------------------
-!
-!
-   ZZW2(:) = 0.0
-   ZZW(:) = 0.0
-   WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) &
-                                   .AND. (PSSI(:)<0.0)       )
-      ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS)
-      ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS)/PRHODREF(:) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
-!
-      ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
-!
-      ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) )
-   END WHERE
-!
-   P_RI_CNVI(:) = ZZW(:)
-   P_CI_CNVI(:) = ZZW2(:)
-!
-   PA_RI(:) = PA_RI(:) + P_RI_CNVI(:)
-   PA_CI(:) = PA_CI(:) + P_CI_CNVI(:)
-   PA_RS(:) = PA_RS(:) - P_RI_CNVI(:)
-!
-!
-!*       2.2    Deposition of water vapor on r_s: RVDEPS
-!        -----------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   WHERE ( (PRST(:)>XRTMIN(5)) )
-      ZZW(:) = ( PSSI(:)/(PAI(:))/PRHODREF(:) ) * &
-           ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS )
-      ZZW(:) =    ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:)))
-   END WHERE
-!
-   P_RS_DEPS(:) = ZZW(:)
-   P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:)
-!
-   PA_TH(:) = PA_TH(:) + P_TH_DEPS(:)
-   PA_RV(:) = PA_RV(:) - P_RS_DEPS(:) 
-   PA_RS(:) = PA_RS(:) + P_RS_DEPS(:) 
-!
-!
-!*       2.3    Conversion of pristine ice to r_s: RICNVS
-!        ------------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   ZZW2(:) = 0.0
-   WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) &
-                                     .AND. (PSSI(:)>0.0)       )
-      ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI)
-      ZZX(:) = ( PSSI(:)/PAI(:) )*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:))
-!
-      ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:)                             
-!
-      ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:))
-   END WHERE
-!
-P_RI_CNVS(:) = - ZZW(:)
-P_CI_CNVS(:) = - ZZW2(:)
-!
-PA_RI(:) = PA_RI(:) + P_RI_CNVS(:)
-PA_CI(:) = PA_CI(:) + P_CI_CNVS(:)
-PA_RS(:) = PA_RS(:) - P_RI_CNVS(:)
-!
-!
-END WHERE
-!
-!
-END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION
diff --git a/src/mesonh/micro/lima_notadjust.f90 b/src/mesonh/micro/lima_notadjust.f90
index 42a0b33d59f64b1be5a978b25edc8970fd9b4331..ddd221297382b329637fea4589002845dcf4a696 100644
--- a/src/mesonh/micro/lima_notadjust.f90
+++ b/src/mesonh/micro/lima_notadjust.f90
@@ -83,7 +83,7 @@ use modd_budget,           only: lbu_enable, nbumod,
                                  tbudgets
 USE MODD_CONF
 USE MODD_CST
-USE MODD_FIELD,            ONLY: TFIELDDATA,TYPEREAL
+USE MODD_FIELD,            ONLY: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
@@ -168,7 +168,7 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) ::&
                        ZSAT,ZCCS
 INTEGER           :: JK            ! For loop
 integer :: idx
-TYPE(TFIELDDATA)  :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZNFS     ! CCN C. available source
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZNAS     ! Cloud  C. nuclei C. source
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZZNFS     ! CCN C. available source
@@ -588,16 +588,17 @@ ENDWHERE
 !
 IF ( tpfile%lopened ) THEN
   ZW(:,:,:)=SUM(ZNAS,4)-ZW(:,:,:)
-  TZFIELD%CMNHNAME   = 'NACT'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'NACT'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'NACT',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'NACT',       &
+    CUNITS     = 'kg-1',       &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_NACT', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
diff --git a/src/mesonh/micro/lima_rain_accr_snow.f90 b/src/mesonh/micro/lima_rain_accr_snow.f90
index 7be5e1b4c13a52e8649a1bacf8f686c0f959700a..a63ac24a4b9c776d316c18074682e61dddff53ed 100644
--- a/src/mesonh/micro/lima_rain_accr_snow.f90
+++ b/src/mesonh/micro/lima_rain_accr_snow.f90
@@ -70,7 +70,7 @@ END MODULE MODI_LIMA_RAIN_ACCR_SNOW
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT
 USE MODD_PARAM_LIMA_WARM,  ONLY : XBR
 USE MODD_PARAM_LIMA_COLD,  ONLY : XBS, XTRANS_MP_GAMMAS
 USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S,             &
@@ -134,6 +134,12 @@ ZZW3(:) = 0.
 ZZW4(:) = 0.
 ZZW5(:) = 0.
 !
+ZZWC1(:) = 0.
+ZZWC2(:) = 0.
+ZZWC3(:) = 0.
+ZZWC4(:) = 0.
+ZZWC5(:) = 0.
+!
 IVEC1(:) = 0
 IVEC2(:) = 0
 ZVEC1(:) = 0.
@@ -145,7 +151,8 @@ ZVEC3(:) = 0.
 !
 !
 GACC(:) = .False.
-GACC(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:)
+GACC(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:) .AND. &
+          (PCRT(:)>XCTMIN(3)) .AND. (PCST(:)>XCTMIN(5))
 !
 WHERE( GACC )
 !
@@ -288,7 +295,7 @@ WHERE( GACC )
               XLBSACCR2/( PLBDR(:)    * PLBDS(:)    ) + &
               XLBSACCR3/(               PLBDS(:)**2 ) )
 !
-   ZZWC5(:)= XFNSACCRG * ZZW3(:) * PCRT(:) *             & ! RSACCRG
+   ZZWC5(:)= XFNSACCRG * ZZWC3(:) * PCRT(:) *            & ! RSACCRG
              PCST(:) * PRHODREF(:)**(1-XCEXVT) * &
             ( XLBNSACCR1/( PLBDR(:)**2               ) + &
               XLBNSACCR2/( PLBDR(:)    * PLBDS(:)    ) + &
@@ -303,7 +310,6 @@ WHERE( GACC )
 !
 END WHERE
 !
-!
 !-------------------------------------------------------------------------------
 !
 CONTAINS
diff --git a/src/mesonh/micro/lima_rain_freezing.f90 b/src/mesonh/micro/lima_rain_freezing.f90
index a5a9225bc78a8382920f419595afa8b0c4b87b65..a6c9504a1cef696a5003a099c293a41060ed4fa7 100644
--- a/src/mesonh/micro/lima_rain_freezing.f90
+++ b/src/mesonh/micro/lima_rain_freezing.f90
@@ -65,7 +65,7 @@ END MODULE MODI_LIMA_RAIN_FREEZING
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT
 USE MODD_PARAM_LIMA_MIXED, ONLY : XICFRR, XEXICFRR, XRCFRI, XEXRCFRI
 !
 IMPLICIT NONE
@@ -111,7 +111,8 @@ P_CI_CFRZ(:)=0.
 ZW1(:)=0.
 ZW2(:)=0.
 !
-WHERE( (PRIT(:)>XRTMIN(4)) .AND. (PRRT(:)>XRTMIN(3)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:) )
+WHERE( PRIT(:)>XRTMIN(4) .AND. PRRT(:)>XRTMIN(3) .AND. PT(:)<XTT .AND. &
+       PCIT(:)>XCTMIN(4) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) )
 !
    ZW1(:) = XICFRR * PRIT(:) * PCRT(:)                    & ! RICFRRG
                                      * PLBDR(:)**XEXICFRR         &
diff --git a/src/mesonh/micro/lima_warm_coal.f90 b/src/mesonh/micro/lima_warm_coal.f90
index 66c83de670a5fe35ad95e050c64363f9d6dff4c1..1c264a8fd844abd9c9e484ab25f60fdd5cbc938f 100644
--- a/src/mesonh/micro/lima_warm_coal.f90
+++ b/src/mesonh/micro/lima_warm_coal.f90
@@ -201,7 +201,7 @@ GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                  &
 !
 IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
 !
-IF( IMICRO >= 1 ) THEN
+IF( IMICRO >= 0 ) THEN
    ALLOCATE(ZRCT(IMICRO))
    ALLOCATE(ZRRT(IMICRO))
    ALLOCATE(ZCCT(IMICRO))
@@ -254,7 +254,7 @@ IF (LRAIN) THEN
 
    GSELF(:) = ZCCT(:)>XCTMIN(2)
    ISELF = COUNT(GSELF(:))
-   IF( ISELF>0 .AND. .NOT.LKHKO) THEN
+   IF( ISELF>=0 .AND. .NOT.LKHKO) THEN
       ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration
       WHERE( GSELF(:) )
          ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) )
@@ -336,7 +336,7 @@ IF (LRAIN) THEN
 !
    GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3)
    IACCR = COUNT(GACCR(:))
-   IF( IACCR>0 ) THEN
+   IF( IACCR >= 0 ) THEN
       ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:)
       ALLOCATE(GENABLE_ACCR_SCBU(IMICRO))
       GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR.           &
@@ -345,7 +345,7 @@ IF (LRAIN) THEN
    END IF
 !
    IACCR = COUNT(GACCR(:))
-   IF( IACCR>0 ) THEN
+   IF( IACCR >= 0 ) THEN
     if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'ACCR', &
                                               Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) )
     if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'ACCR', &
@@ -406,7 +406,7 @@ IF (LRAIN) THEN
 !   	 -----------------------------------------
 !
 !
-   IF( IACCR>0 ) THEN
+   IF( IACCR >= 0 ) THEN
       GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:)
       ISCBU = COUNT(GSCBU(:))
    ELSE
diff --git a/src/mesonh/micro/lima_warm_evap.f90 b/src/mesonh/micro/lima_warm_evap.f90
index e62660ecdb41c18ec7da4ac2c8d9110384f7bbbb..ac7ff4da9c14532290969bb9d6006e0fc39b3840 100644
--- a/src/mesonh/micro/lima_warm_evap.f90
+++ b/src/mesonh/micro/lima_warm_evap.f90
@@ -193,7 +193,7 @@ GEVAP(IIB:IIE,IJB:IJE,IKB:IKE) =                              &
 !
 IEVAP = COUNTJV( GEVAP(:,:,:),I1(:),I2(:),I3(:))
 !
-IF( IEVAP >= 1 ) THEN
+IF( IEVAP >= 0 ) THEN
    ALLOCATE(ZRVT(IEVAP))
    ALLOCATE(ZRCT(IEVAP))
    ALLOCATE(ZRRT(IEVAP))
diff --git a/src/mesonh/micro/lima_warm_nucl.f90 b/src/mesonh/micro/lima_warm_nucl.f90
index cf5382b50799966e699e28adabb1054c237fddb6..8591b848e0ade496014c0816624fb589b36b7804 100644
--- a/src/mesonh/micro/lima_warm_nucl.f90
+++ b/src/mesonh/micro/lima_warm_nucl.f90
@@ -108,7 +108,7 @@ END MODULE MODI_LIMA_WARM_NUCL
 !              ------------
 !
 USE MODD_CST
-use modd_field,           only: TFIELDDATA, TYPEREAL
+use modd_field,           only: TFIELDMETADATA, TYPEREAL
 USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
@@ -198,7 +198,7 @@ INTEGER :: JMOD
 INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
 !
 INTEGER                  :: ILUOUT     ! Logical unit of output listing 
-TYPE(TFIELDDATA) :: TZFIELD   
+TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 ILUOUT = TLUOUT%NLU
@@ -509,28 +509,30 @@ IF ( tpfile%lopened ) THEN
     ZW2(:,:,:) = 0.
   END IF
 
-  TZFIELD%CMNHNAME   ='SMAX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SMAX'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'SMAX',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'SMAX',       &
+    CUNITS     = '',           &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_SMAX', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
-  TZFIELD%CMNHNAME   ='NACT'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = 'kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'NACT',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'NACT',       &
+    CUNITS     = 'kg-1',       &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_NACT', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
diff --git a/src/mesonh/micro/radar_rain_ice.f90 b/src/mesonh/micro/radar_rain_ice.f90
index c8ff0e2d5852f8aa36322e6ea2ae6718cf2ee9be..cf97a981ade422f5d257a46c93a48cf234056ce1 100644
--- a/src/mesonh/micro/radar_rain_ice.f90
+++ b/src/mesonh/micro/radar_rain_ice.f90
@@ -112,13 +112,14 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,
                                XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,XCS_I=>XCS,XDS_I=>XDS,&
                                XRTMIN_I=>XRTMIN,XCONC_LAND,XCONC_SEA,XCR_I=>XCR,XDR_I=>XDR,&
                                XAH_I=>XAH,XLBH_I=>XLBH,XLBEXH_I=>XLBEXH,XCCH_I=>XCCH,&
-                               XALPHAH_I=>XALPHAH,XNUH_I=>XNUH,XCXH_I=>XCXH,XDH_I=>XDH,XCH_I=>XCH,XBH_I=>XBH
+                               XALPHAH_I=>XALPHAH,XNUH_I=>XNUH,XCXH_I=>XCXH,XDH_I=>XDH,XCH_I=>XCH,XBH_I=>XBH,        &
+                               XLBDAS_MAX_I=>XLBDAS_MAX,XLBDAS_MIN_I=>XLBDAS_MIN,XTRANS_MP_GAMMAS_I=>XTRANS_MP_GAMMAS
 USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,&
                                 XBC_L=>XBC,XAC_L=>XAC,XCR_L=>XCR,XDR_L=>XDR
 USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,&
                                 XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XNS_L=>XNS,&
                                 XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS,XDS_L=>XDS,&
-                                XLBDAS_MIN,XLBDAS_MAX
+                                XLBDAS_MAX_L=>XLBDAS_MAX,XLBDAS_MIN_L=>XLBDAS_MIN,XTRANS_MP_GAMMAS_L=>XTRANS_MP_GAMMAS
 
 USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,&
                                 XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG,&
@@ -335,41 +336,43 @@ END IF
 !
 IF (SIZE(PRT,4) >= 5) THEN
    IF ( (CCLOUD=='LIMA' .AND. LSNOW_T_L) ) THEN
-    ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0)
-    ZEXP = 2.0*XBS_L
-    WHERE(PTEMP(:,:,:)>-10. .AND. PRT(:,:,:,5).GT.XRTMIN_L(5))
-       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN)
-    END WHERE
-    WHERE(PTEMP(:,:,:)<=-10 .AND. PRT(:,:,:,5).GT.XRTMIN_L(5))
-       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN)
-    END WHERE
-    IF (NMOM_S.GE.2) THEN
-      ZN(:,:,:)=PCST(:,:,:)
-    ELSE
-      ZN(:,:,:)=XNS_L*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_L
-    END IF
-    WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
-      ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
-                  *1.E18*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP)
-      PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) &
-                     *1.E18*ZN(:,:,:)*XCS_L*(ZLBDA(:,:,:)**(-ZEXP-XDS_L))
-      PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
-    END WHERE
+      ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0)
+      ZEXP = 2.0*XBS_L
+      WHERE(PTEMP(:,:,:)>263.15 .AND. PRT(:,:,:,5).GT.XRTMIN_L(5))
+         ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX_L, 10**(14.554-0.0423*PTEMP(:,:,:))),XLBDAS_MIN_L)*XTRANS_MP_GAMMAS_L
+      END WHERE
+      WHERE(PTEMP(:,:,:)<=263.15 .AND. PRT(:,:,:,5).GT.XRTMIN_L(5))
+         ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX_L, 10**(6.226 -0.0106*PTEMP(:,:,:))),XLBDAS_MIN_L)*XTRANS_MP_GAMMAS_L
+      END WHERE
+      IF (NMOM_S.GE.2) THEN
+         ZN(:,:,:)=PCST(:,:,:)
+      ELSE
+         WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
+            ZN(:,:,:)=XNS_L*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_L
+         END WHERE
+      END IF
+      WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
+         ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
+              *1.E18*PRHODREF(:,:,:)*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP)
+         PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) &
+              *1.E18*PRHODREF(:,:,:)*ZN(:,:,:)*XCS_L*(ZLBDA(:,:,:)**(-ZEXP-XDS_L))
+         PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE
    ELSEIF ( (CCLOUD=='ICE3' .AND. LSNOW_T_I) ) THEN
     ZDMELT_FACT = ( (6.0*XAS_I)/(XPI*XRHOLW) )**(2.0)
     ZEXP = 2.0*XBS_I
-    WHERE(PTEMP(:,:,:)>-10. .AND. PRT(:,:,:,5).GT.XRTMIN_I(5))
-       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN)
+    WHERE(PTEMP(:,:,:)>263.15 .AND. PRT(:,:,:,5).GT.XRTMIN_I(5))
+       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX_I, 10**(14.554-0.0423*PTEMP(:,:,:))),XLBDAS_MIN_I)*XTRANS_MP_GAMMAS_I
     END WHERE
-    WHERE(PTEMP(:,:,:)<=-10 .AND. PRT(:,:,:,5).GT.XRTMIN_I(5))
-       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN)
+    WHERE(PTEMP(:,:,:)<=263.15 .AND. PRT(:,:,:,5).GT.XRTMIN_I(5))
+       ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX_I, 10**(6.226- 0.0106*PTEMP(:,:,:))),XLBDAS_MIN_I)*XTRANS_MP_GAMMAS_I
     END WHERE
     ZN(:,:,:)=XNS_I*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_I
     WHERE( PRT(:,:,:,5).GT.XRTMIN_I(5) )
       ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
-                  *1.E18*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_I,XNUS_I,ZEXP)
+                  *1.E18*PRHODREF(:,:,:)*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_I,XNUS_I,ZEXP)
       PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_I,XNUS_I,ZEXP+XDS_I) &
-                     *1.E18*ZN(:,:,:)*XCS_I*(ZLBDA(:,:,:)**(-ZEXP-XDS_I))
+                     *1.E18*PRHODREF(:,:,:)*ZN(:,:,:)*XCS_I*(ZLBDA(:,:,:)**(-ZEXP-XDS_I))
       PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
     END WHERE
   ELSEIF (CCLOUD=='LIMA') THEN
diff --git a/src/mesonh/micro/rain_c2r2_khko.f90 b/src/mesonh/micro/rain_c2r2_khko.f90
index 5708c0d4c4742afee013137bff42bc0fc1d51c48..cc19dbbf0cc7dc6aa5a287f8dec73f6ba3b46952 100644
--- a/src/mesonh/micro/rain_c2r2_khko.f90
+++ b/src/mesonh/micro/rain_c2r2_khko.f90
@@ -225,7 +225,7 @@ USE MODD_CH_AEROSOL
 USE MODD_CONF
 USE MODD_CST
 USE MODD_DUST
-use modd_field,                only: tfielddata, TYPEREAL
+use modd_field,                only: tfieldmetadata, TYPEREAL
 USE MODD_IO,                   ONLY: TFILEDATA
 USE MODD_NSV,                  ONLY : NSV_C2R2BEG
 USE MODD_PARAM_C2R2
@@ -415,7 +415,7 @@ REAL  :: ZFACT, JSV, ZMU, ZALPHA
 REAL, DIMENSION(:), ALLOCATABLE    :: ZRTMIN
 REAL, DIMENSION(:), ALLOCATABLE    :: ZCTMIN
 REAL :: ZTMP
-TYPE(TFIELDDATA)    :: TZFIELD
+TYPE(TFIELDMETADATA) :: TZFIELD
 !
 !
 !
@@ -595,16 +595,17 @@ end if
 !!
 !!
 ! IF ( tpfile%lopened ) THEN
-!   TZFIELD%CMNHNAME   = 'ZCHEN'
-!   TZFIELD%CSTDNAME   = ''
-!   TZFIELD%CLONGNAME  = 'ZCHEN'
-!   TZFIELD%CUNITS     = ''
-!   TZFIELD%CDIR       = 'XY'
-!   TZFIELD%CCOMMENT   = 'X_Y_Z_ZCHEN'
-!   TZFIELD%NGRID      = 1
-!   TZFIELD%NTYPE      = TYPEREAL
-!   TZFIELD%NDIMS      = 3
-!   TZFIELD%LTIMEDEP   = .TRUE.
+!   TZFIELD = TFIELDMETADATA(     &
+!     CMNHNAME   = 'ZCHEN',       &
+!     CSTDNAME   = '',            &
+!     CLONGNAME  = 'ZCHEN',       &
+!     CUNITS     = '',            &
+!     CDIR       = 'XY',          &
+!     CCOMMENT   = 'X_Y_Z_ZCHEN', &
+!     NGRID      = 1,             &
+!     NTYPE      = TYPEREAL,      &
+!     NDIMS      = 3,             &
+!     LTIMEDEP   = .TRUE.         )
 !   CALL IO_Field_write(TPFILE,TZFIELD,ZCHEN)
 ! END IF
 !
@@ -878,16 +879,17 @@ INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:))
 ! END IF
 !                      
 IF ( tpfile%lopened ) THEN
-  TZFIELD%CMNHNAME   = 'SMAX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'SMAX'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SMAX'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(    &
+    CMNHNAME   = 'SMAX',       &
+    CSTDNAME   = '',           &
+    CLONGNAME  = 'SMAX',       &
+    CUNITS     = '1',          &
+    CDIR       = 'XY',         &
+    CCOMMENT   = 'X_Y_Z_SMAX', &
+    NGRID      = 1,            &
+    NTYPE      = TYPEREAL,     &
+    NDIMS      = 3,            &
+    LTIMEDEP   = .TRUE.        )
   CALL IO_Field_write(TPFILE,TZFIELD,ZZW1LOG)
 END IF
 !
@@ -1896,28 +1898,30 @@ DO JN = 1 , KSPLITR
   END IF
 !   
  IF ( OSEDC .AND. tpfile%lopened ) THEN
-  TZFIELD%CMNHNAME   = 'SEDFLUXC'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'SEDFLUXC'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SEDFLUXC'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'SEDFLUXC',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'SEDFLUXC',       &
+    CUNITS     = '',               &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_SEDFLUXC', &
+    NGRID      = 1,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDC)
   !
-  TZFIELD%CMNHNAME   = 'SEDFLUXR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'SEDFLUXR'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_SEDFLUXR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'SEDFLUXR',       &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'SEDFLUXR',       &
+    CUNITS     = '',               &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'X_Y_Z_SEDFLUXR', &
+    NGRID      = 1,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
   CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDR)
  END IF
 END DO
diff --git a/src/mesonh/turb/mode_ibm_mixinglength.F90 b/src/mesonh/turb/mode_ibm_mixinglength.F90
index 7f74c571a60118414f48f509d1f3b7f95e3d5e26..bc584c94082a6a3b64adb527556d6373f11e944b 100644
--- a/src/mesonh/turb/mode_ibm_mixinglength.F90
+++ b/src/mesonh/turb/mode_ibm_mixinglength.F90
@@ -55,7 +55,7 @@ SUBROUTINE IBM_MIXINGLENGTH(D,PLM,PLEPS,PMU,PHI,PTKE)
   USE MODD_REF_n, ONLY: XRHODJ,XRHODREF
   USE MODD_CTURB
   USE MODD_CST
-  USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZZ
+  USE MODD_GRID_n, ONLY: XZZ
   !
   ! interface
   !