diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90
index db3aea28115b43d27036f277ee2e28e69faf106c..9d34088e4d3d008aa256842b6e051db2acedcedc 100644
--- a/src/arome/ext/aro_turb_mnh.F90
+++ b/src/arome/ext/aro_turb_mnh.F90
@@ -431,11 +431,10 @@ CALL TURB (KLEV+2,1,KKL,IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, ISPLIT,IMI, &
    & PTHM,ZRM, &
    & PRUS,PRVS,PRWS,PRTHS,ZRRS,ZRSVS,PRTKES_OUT,         &
    & PSIGS,                                         &
-   & PDRUS_TURB,PDRVS_TURB,                                &
-   & PDRTHLS_TURB,PDRRTS_TURB,ZDRSVS_TURB,                 &
-   & PFLXZTHVMF,ZWTH,ZWRC,ZWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
-   & YLBUDGET, KBUDGETS=SIZE(YLBUDGET),                    &
-   & PEDR=PEDR)
+   & PFLXZTHVMF,ZWTH,ZWRC,ZWSV,PDP,PTP,PTDIFF,PTDISS,&
+   & YLBUDGET, KBUDGETS=SIZE(YLBUDGET),PEDR=PEDR,PTPMF=PTPMF,&
+   & PDRUS_TURB=PDRUS_TURB,PDRVS_TURB=PDRVS_TURB,          &
+   & PDRTHLS_TURB=PDRTHLS_TURB,PDRRTS_TURB=PDRRTS_TURB,PDRSVS_TURB=ZDRSVS_TURB)
 !
 !
 !------------------------------------------------------------------------------
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index a55c661ce21929b9f0705255e9b821303f6a8a65..cdfa0d2e45d8b701262f5b4c734a84d86c18dade 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -10,9 +10,9 @@ CONTAINS
                     & PTSTEP,PIMPL,PEXPL,                              &
                     & HTURBLEN,HTURBDIM,                               &
                     & TPFILE,OTURB_DIAG,                               &
-                    & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,&
+                    & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,&
                     & TBUDGETS, KBUDGETS, &
-                    & PEDR, PTR,PDISS,PRTKESM                          )
+                    & PEDR, PTR,PDISS                                  )
 !     ##################################################################
 !
 !
@@ -189,12 +189,12 @@ REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
 REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
+REAL, DIMENSION(:,:,:),  INTENT(IN)  ::  PRTKEMS      ! Advection source
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
 INTEGER, INTENT(IN) :: KBUDGETS
 REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
 REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PDISS        ! Dissipation of TKE
 REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PEDR         ! EDR 
-REAL, DIMENSION(:,:,:),  INTENT(IN),  OPTIONAL  ::  PRTKESM      ! Advection source 
 !
 !
 !
@@ -210,7 +210,7 @@ REAL, DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3))::         &
        ZFLX,     & ! horizontal or vertical flux of the treated variable
        ZSOURCE,  & ! source of evolution for the treated variable
        ZKEFF,    & ! effectif diffusion coeff = LT * SQRT( TKE )
-       ZTR,ZRTKESM ! Transport term and Advective TKE source 
+       ZTR         ! Transport term
 LOGICAL,DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3)) :: GTKENEG
                    ! 3D mask .T. if TKE < XTKEMIN
 INTEGER             :: IIB,IIE,IJB,IJE,IKB,IKE
@@ -261,13 +261,6 @@ END IF
 !
 !*       2.2  Explicit TKE sources except horizontal turbulent transport 
 !
-! Advection source (=0 in AROME)
-IF(PRESENT(PRTKESM)) THEN
-  ZRTKESM=PRTKESM
-ELSE
-  ZRTKESM=0.
-END IF
-!
 ! extrapolate the dynamic production with a 1/Z law from its value at the 
 ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB)
 PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB))
@@ -275,7 +268,7 @@ PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB))
 ! Compute the source terms for TKE: ( ADVECtion + NUMerical DIFFusion + ..)
 ! + (Dynamical Production) + (Thermal Production) - (dissipation) 
 ZFLX(:,:,:) = XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:)
-ZSOURCE(:,:,:) = ( PRTKES(:,:,:) +  ZRTKESM(:,:,:) ) / PRHODJ(:,:,:) &
+ZSOURCE(:,:,:) = ( PRTKES(:,:,:) +  PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) &
    - PTKEM(:,:,:) / PTSTEP &
    + PDP(:,:,:) + PTP(:,:,:) + ZTR(:,:,:) - PEXPL * ZFLX(:,:,:) * PTKEM(:,:,:)
 !
@@ -365,7 +358,7 @@ PTDIFF(:,:,:) =  ZRES(:,:,:) / PTSTEP - PRTKES(:,:,:)/PRHODJ(:,:,:) &
 
 IF (LBUDGET_TKE) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
 !
-PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  ZRTKESM(:,:,:)
+PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  PRTKEMS(:,:,:)
 !
 ! stores the whole turbulent transport
 !
diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90
index ae2a67c527b0e7ff218c6dae44ad35ce58e05323..4cfe208af8f41d37afafe49248e6049b9b9283f9 100644
--- a/src/common/turb/modi_turb.F90
+++ b/src/common/turb/modi_turb.F90
@@ -5,26 +5,26 @@
 INTERFACE
 !
       SUBROUTINE TURB(KKA, KKU, KKL, KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,   &
-              & KSPLIT,KMODEL_CL, &
-              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,    &
-              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,   &
-              & PIMPL,PTSTEP,TPFILE,                      &
-              & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,          &
+              & KSPLIT,KMODEL_CL,                                     &
+              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,               &
+              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD,            &
+              & PIMPL,PTSTEP,TPFILE,                                  &
+              & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                         &
               & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE,    &
-              & PRHODJ,PTHVREF,                              &
+              & PRHODJ,PTHVREF,                                       &
               & PSFTH,PSFRV,PSFSV,PSFU,PSFV,                          &
               & PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT,                  &
               & PLENGTHM,PLENGTHH,MFMOIST,                            &
               & PBL_DEPTH, PSBL_DEPTH,                                &
-              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,    &
+              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,                &
               & PTHLT,PRT,                                            &
               & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,              &
-              & PSIGS,                                         &
-              & PDRUS_TURB,PDRVS_TURB,                                &
-              & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,                 &
-              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
+              & PSIGS,                                                &
+              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTDIFF,PTDISS,      &
               & TBUDGETS, KBUDGETS,                                   &
-              & PTR,PDISS,PEDR,PLEM                                   ) 
+              & PEDR,PLEM,PRTKEMS,PTPMF,                              &
+              & PDRUS_TURB,PDRVS_TURB,                                &
+              & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB                  ) 
 !
 USE MODD_BUDGET, ONLY : TBUDGETDATA
 USE MODD_IO, ONLY : TFILEDATA
@@ -52,7 +52,7 @@ CHARACTER(LEN=4)      , INTENT(IN)   ::  HTURBLEN     ! kind of mixing length
 CHARACTER(LEN=4)      , INTENT(IN)   ::  HTOM         ! kind of Third Order Moment
 CHARACTER(LEN=4)      , INTENT(IN)   ::  HTURBLEN_CL  ! kind of cloud mixing length
 REAL,                   INTENT(IN)   ::  PIMPL        ! degree of implicitness
-!CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
+CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Timestep
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file for MesoNH
 !
@@ -106,17 +106,18 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRT         ! water var.  where
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRWS,PRTHLS,PRTKES
 ! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative
 ! mixing ratio
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS
+REAL, DIMENSION(:,:,:),   INTENT(IN),OPTIONAL    ::  PRTKEMS
 ! Source terms for all passive scalar variables
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
 ! Sigma_s at time t+1 : square root of the variance of the deviation to the 
 ! saturation 
 REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGS
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRUS_TURB   ! evolution of rhoJ*U   by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRVS_TURB   ! evolution of rhoJ*V   by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRRTS_TURB  ! evolution of rhoJ*rt  by turbulence only
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)   ::  PDRSVS_TURB  ! evolution of rhoJ*Sv  by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRUS_TURB   ! evolution of rhoJ*U   by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRVS_TURB   ! evolution of rhoJ*V   by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRRTS_TURB  ! evolution of rhoJ*rt  by turbulence only
+REAL, DIMENSION(:,:,:,:), INTENT(OUT),OPTIONAL   ::  PDRSVS_TURB  ! evolution of rhoJ*Sv  by turbulence only
 REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PFLXZTHVMF 
 !                                           MF contribution for vert. turb. transport
 !                                           used in the buoy. prod. of TKE
@@ -125,7 +126,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWRC       ! cloud water flux
 REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV       ! scalar flux
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDP        ! Dynamic TKE production
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTP        ! Thermal TKE production
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTPMF      ! Thermal TKE production
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL  :: PTPMF      ! Thermal TKE production
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF     ! Diffusion TKE term
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS     ! Dissipation TKE term
 !
@@ -135,8 +136,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PLENGTHH
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
 INTEGER, INTENT(IN) :: KBUDGETS
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR  ! EDR
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PLEM  ! Mixing length
 !
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index f86eaf87ae70fc648f756f90c641b8f8e717c400..05c5350552d7be1eb9dc45fe2f6b6fe55071d441 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -5,24 +5,24 @@
 !-----------------------------------------------------------------
       SUBROUTINE TURB(KKA,KKU,KKL,KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,      &
               & KSPLIT,KMODEL_CL,                                     &
-              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,    &
-              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,PIMPL,      &
+              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,               &
+              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD,PIMPL,      &
               & PTSTEP,TPFILE,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,           &
               & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE,    &
-              & PRHODJ,PTHVREF,                              &
+              & PRHODJ,PTHVREF,                                       &
               & PSFTH,PSFRV,PSFSV,PSFU,PSFV,                          &
               & PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT,                  &
               & PLENGTHM,PLENGTHH,MFMOIST,                            &
               & PBL_DEPTH,PSBL_DEPTH,                                 &
-              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,    &
+              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,                &
               & PTHLT,PRT,                                            &
               & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,              &
-              & PSIGS,                                        &
-              & PDRUS_TURB,PDRVS_TURB,                                &
-              & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,                 &
-              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
+              & PSIGS,                                                &
+              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTDIFF,PTDISS,      &
               & TBUDGETS, KBUDGETS,                                   &
-              & PTR,PDISS,PEDR,PLEM                            )
+              & PEDR,PLEM,PRTKEMS,PTPMF,                              &
+              & PDRUS_TURB,PDRVS_TURB,                                &
+              & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB                  )              
 !     #################################################################
 !
 !
@@ -305,7 +305,7 @@ CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN     ! kind of mixing length
 CHARACTER(LEN=4),       INTENT(IN)   ::  HTOM         ! kind of Third Order Moment
 CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN_CL  ! kind of cloud mixing length
 REAL,                   INTENT(IN)   ::  PIMPL        ! degree of implicitness
-!CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
+CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
 REAL,                   INTENT(IN)   ::  PTSTEP       ! timestep 
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 !
@@ -321,7 +321,6 @@ REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSINSLOPE       ! sinus of the angle
                                  ! between i and the slope vector
 REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PRHODJ    ! dry density * Grid size
 REAL, DIMENSION(:,:,:), INTENT(IN)      ::  MFMOIST ! moist mass flux dual scheme
-
 REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PTHVREF   ! Virtual Potential
                                         ! Temperature of the reference state
 !
@@ -360,17 +359,18 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRT         ! water var.  where
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRWS,PRTHLS,PRTKES
 ! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative
 ! mixing ratio
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
+REAL, DIMENSION(:,:,:),   INTENT(IN),OPTIONAL    ::  PRTKEMS
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS
 ! Source terms for all passive scalar variables
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
 ! Sigma_s at time t+1 : square root of the variance of the deviation to the 
 ! saturation
 REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGS
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRUS_TURB   ! evolution of rhoJ*U   by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRVS_TURB   ! evolution of rhoJ*V   by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PDRRTS_TURB  ! evolution of rhoJ*rt  by turbulence only
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)   ::  PDRSVS_TURB  ! evolution of rhoJ*Sv  by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRUS_TURB   ! evolution of rhoJ*U   by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRVS_TURB   ! evolution of rhoJ*V   by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL     ::  PDRRTS_TURB  ! evolution of rhoJ*rt  by turbulence only
+REAL, DIMENSION(:,:,:,:), INTENT(OUT),OPTIONAL   ::  PDRSVS_TURB  ! evolution of rhoJ*Sv  by turbulence only
 REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PFLXZTHVMF 
 !                                           MF contribution for vert. turb. transport
 !                                           used in the buoy. prod. of TKE
@@ -379,7 +379,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWRC       ! cloud water flux
 REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV       ! scalar flux
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTP        ! Thermal TKE production
                                                    ! MassFlux + turb
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTPMF      ! Thermal TKE production
+REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL  :: PTPMF      ! Thermal TKE production
                                                    ! MassFlux Only
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDP        ! Dynamic TKE production
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF     ! Diffusion TKE term
@@ -391,8 +391,6 @@ INTEGER, INTENT(IN) :: KBUDGETS
 ! length scale from vdfexcu
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR  ! EDR
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PLEM  ! Mixing length
 !
@@ -414,7 +412,7 @@ REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) ::     &
           ZFRAC_ICE,                  &  ! ri fraction of rc+ri
           ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR,&  ! 3rd order moments
           ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,&  ! opposite of verticale derivate of 3rd order moments
-          ZTHLM                          ! initial potential temp.
+          ZTHLM,ZRTKEMS                  ! initial potential temp; TKE advective source
 REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),SIZE(PRT,4)) ::     &
           ZRM                            ! initial mixing ratio 
 REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2)) ::  ZTAU11M,ZTAU12M,  &
@@ -613,12 +611,14 @@ IF ( KRRL >= 1 ) THEN
   END IF
 END IF
 !
-!* stores value of conservative variables & wind before turbulence tendency
-PDRUS_TURB = PRUS
-PDRVS_TURB = PRVS
-PDRTHLS_TURB = PRTHLS
-PDRRTS_TURB  = PRRS(:,:,:,1)
-PDRSVS_TURB  = PRSVS
+!* stores value of conservative variables & wind before turbulence tendency (AROME diag)
+IF(PRESENT(PDRUS_TURB)) THEN
+  PDRUS_TURB = PRUS
+  PDRVS_TURB = PRVS
+  PDRTHLS_TURB = PRTHLS
+  PDRRTS_TURB  = PRRS(:,:,:,1)
+  PDRSVS_TURB  = PRSVS
+END IF
 !----------------------------------------------------------------------------
 !
 !*      3. MIXING LENGTH : SELECTION AND COMPUTATION
@@ -666,7 +666,7 @@ SELECT CASE (HTURBLEN)
 !           -------------------
 !
   CASE ('DELT')
-    CALL DELT(PLEM,ODZ=.TRUE.)
+    CALL DELT(ZLM,ODZ=.TRUE.)
 !
 !*      3.5 Deardorff mixing length
 !           -----------------------
@@ -741,7 +741,7 @@ END IF
 !           ------------------------------------------
 !
 IF (LIBM) THEN
-   CALL IBM_MIXINGLENGTH(PLEM,ZLEPS,XIBM_XMUT,XIBM_LS(:,:,:,1),PTKET)
+   CALL IBM_MIXINGLENGTH(ZLM,ZLEPS,XIBM_XMUT,XIBM_LS(:,:,:,1),PTKET)
 ENDIF
 !----------------------------------------------------------------------------
 !
@@ -969,9 +969,9 @@ IF( HTURBDIM == '3DIM' ) THEN
           PSFTH,PSFRV,PSFSV,                                   &
           ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M,             &
           PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT,          &
-          PTKET,PLEM,ZLEPS,                                    &
+          PTKET,ZLM,ZLEPS,                                    &
           ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,           &
-          PDYP,PTHP,PSIGS,                                     &
+          PDP,PTP,PSIGS,                                       &
           ZTRH,                                                &
           PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS                     )
 #endif
@@ -1020,8 +1020,8 @@ END IF
 !  6.1 Contribution of mass-flux in the TKE buoyancy production if 
 !      cloud computation is not statistical 
 
-       PTP = PTP + XG / PTHVREF * MZF(PFLXZTHVMF,KKA, KKU, KKL)
-       PTPMF=XG / PTHVREF * MZF(PFLXZTHVMF, KKA, KKU, KKL)
+PTP = PTP + XG / PTHVREF * MZF(PFLXZTHVMF,KKA, KKU, KKL)
+IF(PRESENT(PTPMF))  PTPMF=XG / PTHVREF * MZF(PFLXZTHVMF, KKA, KKU, KKL)
 
 !  6.2 TKE evolution equation
 
@@ -1037,15 +1037,20 @@ IF (LBUDGET_TH)  THEN
     CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
   END IF
 END IF
-
+!
+IF(PRESENT(PRTKEMS)) THEN
+  ZRTKEMS=PRTKEMS
+ELSE
+  ZRTKEMS=0.
+END IF
+!
 CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,       &
                    & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,            &
                    & PTSTEP,PIMPL,ZEXPL,                         &
                    & HTURBLEN,HTURBDIM,                              &
                    & TPFILE,OTURB_DIAG,           &
-                   & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,&
-                   & TBUDGETS,KBUDGETS,&
-                   & PEDR=PEDR)
+                   & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,ZRTKEMS,&
+                   & TBUDGETS,KBUDGETS, PEDR=PEDR)
 IF (LBUDGET_TH)  THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
     CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) &
@@ -1112,12 +1117,14 @@ IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN
    END IF
 END IF
 !
-!* stores value of conservative variables & wind before turbulence tendency
-PDRUS_TURB = PRUS - PDRUS_TURB
-PDRVS_TURB = PRVS - PDRVS_TURB
-PDRTHLS_TURB = PRTHLS - PDRTHLS_TURB
-PDRRTS_TURB  = PRRS(:,:,:,1) - PDRRTS_TURB 
-PDRSVS_TURB  = PRSVS - PDRSVS_TURB
+!* stores value of conservative variables & wind before turbulence tendency (AROME only)
+IF(PRESENT(PDRUS_TURB)) THEN
+  PDRUS_TURB = PRUS - PDRUS_TURB
+  PDRVS_TURB = PRVS - PDRVS_TURB
+  PDRTHLS_TURB = PRTHLS - PDRTHLS_TURB
+  PDRRTS_TURB  = PRRS(:,:,:,1) - PDRRTS_TURB 
+  PDRSVS_TURB  = PRSVS - PDRSVS_TURB
+END IF
 !----------------------------------------------------------------------------
 !
 !*      8. RETRIEVE NON-CONSERVATIVE VARIABLES
@@ -1143,7 +1150,7 @@ IF ( KRRL >= 1 ) THEN
 END IF
 
 ! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets
-!CALL SOURCES_NEG_CORRECT(HCLOUD, 'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,PRTHLS,PRRS,PRSVS)
+CALL SOURCES_NEG_CORRECT(HCLOUD, 'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,PRTHLS,PRRS,PRSVS)
 !----------------------------------------------------------------------------
 !
 !*      9. LES averaged surface fluxes
@@ -1259,7 +1266,9 @@ IF (LHOOK) CALL DR_HOOK('TURB:UPDATE_ROTATE_WIND',0,ZHOOK_HANDLE)
 !
 NULLIFY(TZFIELDS_ll)
 !
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+IIU=SIZE(PUSLOPE,1)
+IJU=SIZE(PUSLOPE,2)
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU)
 !
 !         2 Update halo if necessary
 !
diff --git a/src/mesonh/turb/modi_turb.f90 b/src/mesonh/turb/modi_turb.f90
deleted file mode 100644
index a87b97854a7cf790abcf810fb5f56d9c3bc2b354..0000000000000000000000000000000000000000
--- a/src/mesonh/turb/modi_turb.f90
+++ /dev/null
@@ -1,143 +0,0 @@
-!     ######spl
-     MODULE MODI_TURB  
-!    ################ 
-!
-INTERFACE
-!
-!
-      SUBROUTINE TURB(KKA,KKU,KKL,KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,      &
-              & KSPLIT,KMODEL_CL,                                     &
-              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,               &
-              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD,PIMPL,      &
-              & PTSTEP,TPFILE,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,           &
-              & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE,    &
-              & PRHODJ,PTHVREF,                                       &
-              & PSFTH,PSFRV,PSFSV,PSFU,PSFV,                          &
-              & PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT,                  &
-              & PLENGTHM,PLENGTHH,MFMOIST,                            &
-              & PBL_DEPTH, PSBL_DEPTH,                                &
-              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,                &
-              & PTHLT,PRT,                                            &
-              & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,PRTKEMS,PSIGS,&
-              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTDIFF,PTDISS,    &
-              & TBUDGETS, KBUDGETS                                   ,&
-              & PTR,PDISS,PEDR,PLEM                            )
-
-USE MODD_BUDGET, ONLY : TBUDGETDATA
-USE MODD_IO, ONLY : TFILEDATA
-!
-!
-!
-INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
-INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
-INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
-INTEGER,                INTENT(IN)   :: KMI           ! model index number  
-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.
-CHARACTER(LEN=*),DIMENSION(:),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time-splitting
-INTEGER,                INTENT(IN)   :: KMODEL_CL     ! model number for cloud mixing length
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-LOGICAL,                INTENT(IN)   ::  OSUBG_COND   ! switch for SUBGrid 
-                                 ! CONDensation
-LOGICAL,                INTENT(IN)   ::  ORMC01       ! switch for RMC01 lengths in SBL
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN     ! kind of mixing length
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTOM         ! kind of Third Order Moment
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN_CL  ! kind of cloud mixing length
-REAL,                   INTENT(IN)   ::  PIMPL        ! degree of implicitness
-CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
-REAL,                   INTENT(IN)   ::  PTSTEP       ! timestep 
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PDXX,PDYY,PDZZ,PDZX,PDZY
-                                        ! metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PZZ       !  physical distance 
-! between 2 succesive grid points along the K direction
-REAL, DIMENSION(:,:),   INTENT(IN)      ::  PDIRCOSXW, PDIRCOSYW, PDIRCOSZW
-! Director Cosinus along x, y and z directions at surface w-point
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE       ! cosinus of the angle
-                                 ! between i and the slope vector
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSINSLOPE       ! sinus of the angle
-                                 ! between i and the slope vector
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PRHODJ    ! dry density * Grid size
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  MFMOIST ! moist mass flux dual scheme
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PTHVREF   ! Virtual Potential
-                                        ! Temperature of the reference state
-!
-REAL, DIMENSION(:,:),   INTENT(IN)      ::  PSFTH,PSFRV,   &
-! normal surface fluxes of theta and Rv 
-                                            PSFU,PSFV
-! normal surface fluxes of (u,v) parallel to the orography
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PSFSV
-! normal surface fluxes of Scalar var. 
-!
-!    prognostic variables at t- deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PPABST      ! Pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PUT,PVT,PWT ! wind components
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PTKET       ! TKE
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVT        ! passive scal. var.
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PSRCT       ! Second-order flux
-                      ! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PBL_DEPTH  ! BL height for TOMS
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01
-!
-!    variables for cloud mixing length
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PCEI ! Cloud Entrainment instability
-                                                 ! index to emphasize localy 
-                                                 ! turbulent fluxes
-REAL, INTENT(IN)      ::  PCEI_MIN ! minimum threshold for the instability index CEI
-REAL, INTENT(IN)      ::  PCEI_MAX ! maximum threshold for the instability index CEI
-REAL, INTENT(IN)      ::  PCOEF_AMPL_SAT ! saturation of the amplification coefficient
-!
-!   thermodynamical variables which are transformed in conservative var.
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PTHLT       ! conservative pot. temp.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRT         ! water var.  where 
-                             ! PRT(:,:,:,1) is the conservative mixing ratio        
-!
-! sources of momentum, conservative potential temperature, Turb. Kin. Energy, 
-! TKE dissipation
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRWS,PRTHLS,PRTKES
-! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative
-! mixing ratio
-REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PRTKEMS
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
-! Source terms for all passive scalar variables
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
-! Sigma_s at time t+1 : square root of the variance of the deviation to the 
-! saturation
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGS
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PFLXZTHVMF 
-!                                           MF contribution for vert. turb. transport
-!                                           used in the buoy. prod. of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTH       ! heat flux
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWRC       ! cloud water flux
-REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV       ! scalar flux
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDYP  ! Dynamical production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTHP  ! Thermal production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS ! Dissipation of TKE
-!
-TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
-INTEGER, INTENT(IN) :: KBUDGETS
-!
-! length scale from vdfexcu
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR  ! EDR
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PLEM  ! Mixing length
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE TURB
-!
-END INTERFACE
-!
-END MODULE MODI_TURB
diff --git a/src/mesonh/turb/turb.f90 b/src/mesonh/turb/turb.f90
deleted file mode 100644
index 3c705ba5b3288c0794eb50353e564a38267396ad..0000000000000000000000000000000000000000
--- a/src/mesonh/turb/turb.f90
+++ /dev/null
@@ -1,1785 +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.
-!-----------------------------------------------------------------
-!    ################ 
-      SUBROUTINE TURB(KKA,KKU,KKL,KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,      &
-              & KSPLIT,KMODEL_CL,                                     &
-              & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,               &
-              & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD,PIMPL,      &
-              & PTSTEP,TPFILE,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,           &
-              & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE,    &
-              & PRHODJ,PTHVREF,                                       &
-              & PSFTH,PSFRV,PSFSV,PSFU,PSFV,                          &
-              & PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT,                  &
-              & PLENGTHM,PLENGTHH,MFMOIST,                            &
-              & PBL_DEPTH, PSBL_DEPTH,                                &
-              & PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT,                &
-              & PTHLT,PRT,                                            &
-              & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,PRTKEMS,PSIGS,&
-              & PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTDIFF,PTDISS,&
-              & TBUDGETS, KBUDGETS                                   ,&
-              & PTR,PDISS,PEDR,PLEM                            )
-!     #################################################################
-!
-!
-!!****  *TURB* - computes the turbulent source terms for the prognostic
-!!               variables. 
-!!
-!!    PURPOSE
-!!    -------
-!!****  The purpose of this routine is to compute the source terms in 
-!!    the evolution equations due to the turbulent mixing. 
-!!      The source term is computed as the divergence of the turbulent fluxes.
-!!    The cartesian fluxes are obtained by a one and a half order closure, based
-!!    on a prognostic equation for the Turbulence Kinetic Energy( TKE ). The 
-!!    system is closed by prescribing a turbulent mixing length. Different 
-!!    choices are available for this length. 
-!
-!!**  METHOD
-!!    ------
-!!    
-!!      The dimensionality of the turbulence parameterization can be chosen by
-!!    means of the parameter HTURBDIM:
-!!           * HTURBDIM='1DIM' the parameterization is 1D but can be used in
-!!    3D , 2D or 1D simulations. Only the sources associated to the vertical
-!!    turbulent fluxes are taken into account.
-!!           *  HTURBDIM='3DIM' the parameterization is fully 2D or 3D depending
-!!    on the model  dimensionality. Of course, it does not make any sense to
-!!    activate this option with a 1D model. 
-!!
-!!      The following steps are made:
-!!      1- Preliminary computations.
-!!      2- The metric coefficients are recovered from the grid knowledge.
-!!      3- The mixing length is computed according to its choice:
-!!           * HTURBLEN='BL89' the Bougeault and Lacarrere algorithm is used.
-!!             The mixing length is given by the vertical displacement from its
-!!             original level of an air particule having an initial internal
-!!             energy equal to its TKE and stopped by the buoyancy forces.
-!!             The discrete formulation is second order accurate.
-!!           * HTURBLEN='DELT' the mixing length is given by the mesh size 
-!!             depending on the model dimensionality, this length is limited 
-!!             with the ground distance.
-!!           * HTURBLEN='DEAR' the mixing length is given by the mesh size 
-!!             depending on the model dimensionality, this length is limited 
-!!             with the ground distance and also by the Deardorff mixing length
-!!             pertinent in the stable cases.
-!!           * HTURBLEN='KEPS' the mixing length is deduced from the TKE 
-!!             dissipation, which becomes a prognostic variable of the model (
-!!             Duynkerke formulation).   
-!!      3'- The cloud mixing length is computed according to HTURBLEN_CLOUD
-!!             and emphasized following the CEI index
-!!      4- The conservative variables are computed along with Lv/Cp.
-!!      5- The turbulent Prandtl numbers are computed from the resolved fields
-!!         and TKE 
-!!      6- The sources associated to the vertical turbulent fluxes are computed
-!!      with a temporal scheme allowing a degree of implicitness given by 
-!!      PIMPL, varying from PIMPL=0. ( purely explicit scheme) to PIMPL=1.
-!!      ( purely implicit scheme)
-!!      The sources associated to the horizontal fluxes are computed with a
-!!      purely explicit temporal scheme. These sources are only computed when
-!!      the turbulence parameterization is 2D or 3D( HTURBDIM='3DIM' ).
-!!      7- The sources for TKE are computed, along with the dissipation of TKE 
-!!      if HTURBLEN='KEPS'.
-!!      8- Some turbulence-related quantities are stored in the synchronous 
-!!      FM-file.
-!!      9- The non-conservative variables are retrieved.  
-!!    
-!!      
-!!      The saving of the fields in the synchronous FM-file is controlled by:
-!!        * OTURB_FLX => saves all the turbulent fluxes and correlations
-!!        * OTURB_DIAG=> saves the turbulent Prandtl and Schmidt numbers, the
-!!                       source terms of TKE and dissipation of TKE 
-!!
-!!    EXTERNAL
-!!    --------
-!!      SUBROUTINE PRANDTL   : computes the turbulent Prandtl number
-!!      SUBROUTINE TURB_VER  : computes the sources from the vertical fluxes
-!!      SUBROUTINE TURB_HOR  : computes the sources from the horizontal fluxes
-!!      SUBROUTINE TKE_EPS_SOURCES : computes the sources for  TKE and its
-!!                                   dissipation
-!!      SUBROUTINE BUDGET    : computes and stores the budgets
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!       MODD_PARAMETERS : JPVEXT_TURB  number of marginal vertical points
-!!
-!!       MODD_CONF      : CCONF model configuration (start/restart)
-!!                        L1D   switch for 1D model version
-!!                        L2D   switch for 2D model version
-!!
-!!       MODD_CST  : contains physical constants
-!!                    XG   gravity constant
-!!                    XRD  Gas constant for dry air
-!!                    XRV  Gas constant for vapor
-!!
-!!       MODD_CTURB : contains turbulence scheme constants
-!!                    XCMFS,XCED       to compute the dissipation mixing length
-!!                    XTKEMIN  minimum values for the TKE 
-!!                    XLINI,XLINF      to compute Bougeault-Lacarrere mixing 
-!!                                     length
-!!      Module MODD_BUDGET:
-!!         NBUMOD  
-!!         CBUTYPE 
-!!         LBU_RU     
-!!         LBU_RV     
-!!         LBU_RW     
-!!         LBU_RTH    
-!!         LBU_RSV1   
-!!         LBU_RRV    
-!!         LBU_RRC    
-!!         LBU_RRR    
-!!         LBU_RRI    
-!!         LBU_RRS    
-!!         LBU_RRG    
-!!         LBU_RRH    
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 2 of documentation (routine TURB)
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         05/10/94
-!!      Modifications: Feb 14, 1995 (J.Cuxart and J.Stein) 
-!!                                  Doctorization and Optimization
-!!      Modifications: March 21, 1995 (J.M. Carriere) 
-!!                                  Introduction of cloud water
-!!      Modifications: June   1, 1995 (J.Cuxart     ) 
-!!                                  take min(Kz,delta)
-!!      Modifications: June   1, 1995 (J.Stein J.Cuxart)
-!!                                  remove unnecessary arrays and change Prandtl
-!!                                  and Schmidt numbers localizations
-!!      Modifications: July  20, 1995 (J.Stein) remove MODI_ground_ocean +
-!!                                TZDTCUR + MODD_TIME because they are not used
-!!                                change RW in RNP for the outputs
-!!      Modifications: August 21, 1995 (Ph. Bougeault)   
-!!                                  take min(K(z-zsol),delta)
-!!      Modifications: Sept 14, 1995 (Ph Bougeault, J. Cuxart)
-!!         second order BL89 mixing length computations + add Deardorff length 
-!!         in the Delta case for stable cases
-!!      Modifications: Sept 19, 1995 (J. Stein, J. Cuxart)
-!!         define a DEAR case for the mixing length, add MODI_BUDGET and change
-!!         some BUDGET calls, add LES tools
-!!      Modifications: Oct  16, 1995 (J. Stein) change the budget calls
-!!      Modifications: Feb  28, 1996 (J. Stein) optimization + 
-!!                                              remove min(K(z-zsol),delta)+
-!!                                              bug in the tangential fluxes 
-!!      Modifications: Oct  16, 1996 (J. Stein) change the subgrid condensation
-!!                                              scheme + temporal discretization
-!!      Modifications: Dec  19, 1996 (J.-P. Pinty) update the budget calls
-!!                     Jun  22, 1997 (J. Stein) use the absolute pressure and
-!!                                  change the Deardorf length at the surface
-!!      Modifications: Apr  27, 1997 (V. Masson) BL89 mix. length computed in
-!!                                               a separate routine
-!!                     Oct  13, 1999 (J. Stein)  switch for the tgt fluxes
-!!                     Jun  24, 1999 (P Jabouille)  Add routine UPDATE_ROTATE_WIND
-!!                     Feb  15, 2001 (J. Stein)  remove tgt fluxes
-!!                     Mar 8,  2001 (V. Masson) forces the same behaviour near the surface
-!!                                              for all mixing lengths
-!!                     Nov 06, 2002 (V. Masson) LES budgets
-!!                     Nov,    2002 (V. Masson) implement modifications of
-!!                                              mixing and dissipative lengths
-!!                                              near the surface (according
-!!                                              Redelsperger et al 2001)
-!!                     Apr,    2003 (V. Masson) bug in Blackadar length
-!!                                              bug in LES in 1DIM case
-!!                     Feb 20, 2003 (J.-P. Pinty) Add reversible ice processes
-!!                     May,26  2004 (P Jabouille) coef for computing dissipative heating
-!!                     Sept 2004 (M.Tomasini) Cloud Mixing length modification
-!!                                            following the instability 
-!!                                            criterium CEI calculated in modeln
-!!                     May   2006    Remove KEPS
-!!                     Sept.2006 (I.Sandu): Modification of the stability criterion for
-!!                                 DEAR (theta_v -> theta_l)
-!!                     Oct 2007 (J.Pergaud) Add MF contribution for vert. turb. transport
-!!                     Oct.2009  (C.Lac) Introduction of different PTSTEP according to the
-!!                              advection schemes
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!                     06/2011 (J.escobar ) Bypass Bug with ifort11/12 on  HLBCX,HLBC
-!!                     2012-02 Y. Seity,  add possibility to run with reversed
-!!                                          vertical levels
-!!                     10/2012 (J. Colin) Correct bug in DearDoff for dry simulations
-!!                     10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic
-!!                     2014-11 Y. Seity,  add output terms for TKE DDHs budgets
-!!                     July 2015 (Wim de Rooy)  modifications to run with RACMO
-!!                                              turbulence (LHARAT=TRUE)
-!!                     04/2016  (C.Lac) correction of negativity for KHKO
-!  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
-!  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
-!  P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
-!  P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct
-!  R. Honnert/V. Masson 02/2021: new mixing length in the grey zone
-!  J.L. Redelsperger 03/2021: add Ocean LES case
-! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_BUDGET, ONLY: LBUDGET_U,  LBUDGET_V,  LBUDGET_W,  LBUDGET_TH, LBUDGET_RV, LBUDGET_RC,  &
-                            LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV,  &
-                            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
-USE MODD_CONF
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_DYN_n, ONLY : LOCEAN
-USE MODD_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
-USE MODD_NSV
-USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
-USE MODD_PARAM_LIMA
-USE MODD_TURB_n, ONLY: XCADAP
-!
-USE MODE_BL89, ONLY: BL89
-USE MODI_GRADIENT_M
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODE_TURB_VER, ONLY : TURB_VER
-USE MODI_ROTATE_WIND
-USE MODE_TURB_HOR_SPLT, ONLY: TURB_HOR_SPLT
-USE MODE_TKE_EPS_SOURCES, ONLY: TKE_EPS_SOURCES
-USE MODI_SHUMAN
-USE MODI_LES_MEAN_SUBGRID
-USE MODE_RMC01, ONLY: RMC01
-USE MODI_GRADIENT_W
-USE MODE_TM06, ONLY: TM06
-USE MODI_UPDATE_LM
-USE MODI_GET_HALO
-!
-USE MODE_BUDGET,         ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
-USE MODE_SBL
-USE MODE_SOURCES_NEG_CORRECT, ONLY: SOURCES_NEG_CORRECT
-!
-USE MODE_EMOIST, ONLY: EMOIST
-USE MODE_ETHETA, ONLY: ETHETA
-!
-USE MODI_SECOND_MNH
-!
-USE MODD_IBM_PARAM_n,    ONLY: LIBM, XIBM_LS, XIBM_XMUT
-USE MODI_IBM_MIXINGLENGTH
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-!
-!
-INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
-INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
-INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
-INTEGER,                INTENT(IN)   :: KMI           ! model index number  
-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.
-CHARACTER(LEN=*),DIMENSION(:),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time-splitting
-INTEGER,                INTENT(IN)   :: KMODEL_CL     ! model number for cloud mixing length
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-LOGICAL,                INTENT(IN)   ::  OSUBG_COND   ! switch for SUBGrid 
-                                 ! CONDensation
-LOGICAL,                INTENT(IN)   ::  ORMC01       ! switch for RMC01 lengths in SBL
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN     ! kind of mixing length
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTOM         ! kind of Third Order Moment
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBLEN_CL  ! kind of cloud mixing length
-REAL,                   INTENT(IN)   ::  PIMPL        ! degree of implicitness
-CHARACTER (LEN=4),      INTENT(IN)   ::  HCLOUD       ! Kind of microphysical scheme
-REAL,                   INTENT(IN)   ::  PTSTEP       ! timestep 
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PDXX,PDYY,PDZZ,PDZX,PDZY
-                                        ! metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PZZ       !  physical distance 
-! between 2 succesive grid points along the K direction
-REAL, DIMENSION(:,:),   INTENT(IN)      ::  PDIRCOSXW, PDIRCOSYW, PDIRCOSZW
-! Director Cosinus along x, y and z directions at surface w-point
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE       ! cosinus of the angle
-                                 ! between i and the slope vector
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSINSLOPE       ! sinus of the angle
-                                 ! between i and the slope vector
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PRHODJ    ! dry density * Grid size
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  MFMOIST ! moist mass flux dual scheme
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PTHVREF   ! Virtual Potential
-                                        ! Temperature of the reference state
-!
-REAL, DIMENSION(:,:),   INTENT(IN)      ::  PSFTH,PSFRV,   &
-! normal surface fluxes of theta and Rv 
-                                            PSFU,PSFV
-! normal surface fluxes of (u,v) parallel to the orography
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PSFSV
-! normal surface fluxes of Scalar var. 
-!
-!    prognostic variables at t- deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PPABST      ! Pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PUT,PVT,PWT ! wind components
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PTKET       ! TKE
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVT        ! passive scal. var.
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PSRCT       ! Second-order flux
-                      ! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PBL_DEPTH  ! BL height for TOMS
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01
-!
-!    variables for cloud mixing length
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PCEI ! Cloud Entrainment instability
-                                                 ! index to emphasize localy 
-                                                 ! turbulent fluxes
-REAL, INTENT(IN)      ::  PCEI_MIN ! minimum threshold for the instability index CEI
-REAL, INTENT(IN)      ::  PCEI_MAX ! maximum threshold for the instability index CEI
-REAL, INTENT(IN)      ::  PCOEF_AMPL_SAT ! saturation of the amplification coefficient
-!
-!   thermodynamical variables which are transformed in conservative var.
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PTHLT       ! conservative pot. temp.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRT         ! water var.  where 
-                             ! PRT(:,:,:,1) is the conservative mixing ratio        
-!
-! sources of momentum, conservative potential temperature, Turb. Kin. Energy, 
-! TKE dissipation
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PRUS,PRVS,PRWS,PRTHLS,PRTKES
-! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative
-! mixing ratio
-REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PRTKEMS
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRRS 
-! Source terms for all passive scalar variables
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
-! Sigma_s at time t+1 : square root of the variance of the deviation to the 
-! saturation
-REAL, DIMENSION(:,:,:), INTENT(OUT)     ::  PSIGS
-REAL, DIMENSION(:,:,:), INTENT(IN)      ::  PFLXZTHVMF 
-!                                           MF contribution for vert. turb. transport
-!                                           used in the buoy. prod. of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTH       ! heat flux
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWRC       ! cloud water flux
-REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV       ! scalar flux
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDYP  ! Dynamical production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTHP  ! Thermal production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS ! Dissipation of TKE
-!
-TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
-INTEGER, INTENT(IN) :: KBUDGETS
-!
-! length scale from vdfexcu
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR  ! EDR
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PLEM  ! Mixing length
-!
-!
-!-------------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) ::     &
-          ZCP,                        &  ! Cp at t-1
-          ZEXN,                       &  ! EXN at t-1
-          ZT,                         &  ! T at t-1
-          ZLOCPEXNM,                  &  ! Lv/Cp/EXNREF at t-1
-          ZLM,ZLMW,                   &  ! Turbulent mixing length (+ work array)
-          ZLEPS,                      &  ! Dissipative length
-          ZTRH,                       &  ! Dynamic and Thermal Production of TKE
-          ZATHETA,ZAMOIST,            &  ! coefficients for s = f (Thetal,Rnp)
-          ZCOEF_DISS,                 &  ! 1/(Cph*Exner) for dissipative heating
-          ZFRAC_ICE,                  &  ! ri fraction of rc+ri
-          ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR,&  ! 3rd order moments
-          ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,&  ! opposite of verticale derivate of 3rd order moments
-          ZTHLM, ZTR, ZDISS              ! initial potential temp.
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),SIZE(PRT,4)) ::     &
-          ZRM                            ! initial mixing ratio 
-REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2)) ::  ZTAU11M,ZTAU12M,  &
-                                                 ZTAU22M,ZTAU33M,  &
-            ! tangential surface fluxes in the axes following the orography
-                                                 ZUSLOPE,ZVSLOPE,  &
-            ! wind components at the first mass level parallel 
-            ! to the orography 
-                                                 ZCDUEFF,          &
-            ! - Cd*||u|| where ||u|| is the module of the wind tangential to 
-            ! orography (ZUSLOPE,ZVSLOPE) at the surface.
-                                                 ZUSTAR, ZLMO,     &
-                                                 ZRVM, ZSFRV
-            ! friction velocity, Monin Obuhkov length, work arrays for vapor
-!
-            ! Virtual Potential Temp. used
-            ! in the Deardorff mixing length computation
-REAL, DIMENSION(:,:,:), ALLOCATABLE  :: &  
-          ZLVOCPEXNM,ZLSOCPEXNM,      &  ! Lv/Cp/EXNREF and Ls/Cp/EXNREF at t-1
-          ZATHETA_ICE,ZAMOIST_ICE        ! coefficients for s = f (Thetal,Rnp)
-!
-REAL                :: ZEXPL        ! 1-PIMPL deg of expl.
-REAL                :: ZRVORD       ! RV/RD
-!
-INTEGER             :: IKB,IKE      ! index value for the
-! Beginning and the End of the physical domain for the mass points
-INTEGER             :: IKT          ! array size in k direction
-INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
-INTEGER             :: JRR,JK,JSV   ! loop counters
-INTEGER             :: JI,JJ        ! loop counters
-REAL                :: ZL0          ! Max. Mixing Length in Blakadar formula
-REAL                :: ZALPHA       ! work coefficient : 
-                                    ! - proportionnality constant between Dz/2 and 
-!                                   !   BL89 mixing length near the surface
-!
-REAL :: ZTIME1, ZTIME2
-REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3))::  ZSHEAR, ZDUDZ, ZDVDZ
-TYPE(TFIELDDATA) :: TZFIELD
-!
-!*      1.PRELIMINARIES
-!         -------------
-!
-!*      1.1 Set the internal domains, ZEXPL 
-!
-!
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB',0,ZHOOK_HANDLE)
-!
-IF (LHARAT .AND. HTURBDIM /= '1DIM') THEN
-  CALL ABOR1('LHARATU only implemented for option HTURBDIM=1DIM!')
-ENDIF
-IF (LHARAT .AND. LLES_CALL) THEN
-  CALL ABOR1('LHARATU not implemented for option LLES_CALL')
-ENDIF
-
-IKT=SIZE(PTHLT,3)          
-IKTB=1+JPVEXT_TURB              
-IKTE=IKT-JPVEXT_TURB
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-!
-ZEXPL = 1.- PIMPL
-ZRVORD= XRV / XRD
-!
-!
-!Copy data into ZTHLM and ZRM only if needed
-IF (HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. ORMC01) THEN
-  ZTHLM(:,:,:) = PTHLT(:,:,:)
-  ZRM(:,:,:,:) = PRT(:,:,:,:)
-END IF
-!
-!
-!
-!----------------------------------------------------------------------------
-!
-!*      2. COMPUTE CONSERVATIVE VARIABLES AND RELATED QUANTITIES
-!          -----------------------------------------------------
-!
-!*      2.1 Cph at t
-!
-ZCP(:,:,:)=XCPD
-!
-IF (KRR > 0) ZCP(:,:,:) = ZCP(:,:,:) + XCPV * PRT(:,:,:,1)
-DO JRR = 2,1+KRRL                          ! loop on the liquid components  
-  ZCP(:,:,:)  = ZCP(:,:,:) + XCL * PRT(:,:,:,JRR)
-END DO
-!
-DO JRR = 2+KRRL,1+KRRL+KRRI                ! loop on the solid components   
-  ZCP(:,:,:)  = ZCP(:,:,:)  + XCI * PRT(:,:,:,JRR)
-END DO
-!
-!*      2.2 Exner function at t
-!
-IF (LOCEAN) THEN
-  ZEXN(:,:,:) = 1.
-ELSE
-  ZEXN(:,:,:) = (PPABST(:,:,:)/XP00) ** (XRD/XCPD)
-END IF
-!
-!*      2.3 dissipative heating coeff a t
-!
-ZCOEF_DISS(:,:,:) = 1/(ZCP(:,:,:) * ZEXN(:,:,:)) 
-!
-!
-ZFRAC_ICE(:,:,:) = 0.0
-ZATHETA(:,:,:) = 0.0
-ZAMOIST(:,:,:) = 0.0
-!
-IF (KRRL >=1) THEN
-!
-!*      2.4 Temperature at t
-!
-  ZT(:,:,:) =  PTHLT(:,:,:) * ZEXN(:,:,:)
-!
-!*       2.5 Lv/Cph/Exn
-!
-  IF ( KRRI >= 1 ) THEN 
-    ALLOCATE(ZLVOCPEXNM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)))
-    ALLOCATE(ZLSOCPEXNM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)))
-    ALLOCATE(ZAMOIST_ICE(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)))
-    ALLOCATE(ZATHETA_ICE(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)))
-!
-    CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, &
-                                 ZLVOCPEXNM,ZAMOIST,ZATHETA)
-    CALL COMPUTE_FUNCTION_THERMO(XALPI,XBETAI,XGAMI,XLSTT,XCI,ZT,ZEXN,ZCP, &
-                                 ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE)
-!
-    WHERE(PRT(:,:,:,2)+PRT(:,:,:,4)>0.0)
-      ZFRAC_ICE(:,:,:) = PRT(:,:,:,4) / ( PRT(:,:,:,2)+PRT(:,:,:,4) )
-    END WHERE
-!
-    ZLOCPEXNM(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZLVOCPEXNM(:,:,:) &
-                           +ZFRAC_ICE(:,:,:) *ZLSOCPEXNM(:,:,:)
-    ZAMOIST(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZAMOIST(:,:,:) &
-                         +ZFRAC_ICE(:,:,:) *ZAMOIST_ICE(:,:,:)
-    ZATHETA(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZATHETA(:,:,:) &
-                         +ZFRAC_ICE(:,:,:) *ZATHETA_ICE(:,:,:)
-
-    DEALLOCATE(ZAMOIST_ICE)
-    DEALLOCATE(ZATHETA_ICE)
-  ELSE
-    CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, &
-                                 ZLOCPEXNM,ZAMOIST,ZATHETA)
-  END IF
-!
-!
-  IF ( TPFILE%LOPENED .AND. OTURB_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.
-    CALL IO_FIELD_WRITE(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.
-    CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZAMOIST)
-  END IF
-!
-ELSE
-  ZLOCPEXNM=0.
-END IF              ! loop end on KRRL >= 1
-!
-! computes conservative variables
-!
-IF ( KRRL >= 1 ) THEN
-  IF ( KRRI >= 1 ) THEN
-    ! Rnp at t
-    PRT(:,:,:,1)  = PRT(:,:,:,1)  + PRT(:,:,:,2)  + PRT(:,:,:,4)
-    PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) + PRRS(:,:,:,4)
-    ! Theta_l at t
-    PTHLT(:,:,:)  = PTHLT(:,:,:)  - ZLVOCPEXNM(:,:,:) * PRT(:,:,:,2) &
-                                  - ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4)
-    PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) &
-                                  - ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4)
-  ELSE
-    ! Rnp at t
-    PRT(:,:,:,1)  = PRT(:,:,:,1)  + PRT(:,:,:,2) 
-    PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
-    ! Theta_l at t
-    PTHLT(:,:,:)  = PTHLT(:,:,:)  - ZLOCPEXNM(:,:,:) * PRT(:,:,:,2)
-    PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2)
-  END IF
-END IF
-!
-!----------------------------------------------------------------------------
-!
-!*      3. MIXING LENGTH : SELECTION AND COMPUTATION
-!          -----------------------------------------
-!
-!
-IF (.NOT. LHARAT) THEN
-
-SELECT CASE (HTURBLEN)
-!
-!*      3.1 BL89 mixing length
-!           ------------------
-
-  CASE ('BL89')
-    ZSHEAR=0.
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM)
-!
-!*      3.2 RM17 mixing length
-!           ------------------
-
-  CASE ('RM17')
-    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ)))
-    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ)))
-    ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM)
-!
-!*      3.3 Grey-zone combined RM17 & Deardorff mixing lengths 
-!           --------------------------------------------------
-
-  CASE ('ADAP')
-    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ)))
-    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ)))
-    ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM)
-
-    CALL DELT(ZLMW,ODZ=.FALSE.)
-    ! The minimum mixing length is chosen between Horizontal grid mesh (not taking into account the vertical grid mesh) and RM17.
-    ! For large horizontal grid meshes, this is equal to RM17
-    ! For LES grid meshes, this is equivalent to Deardorff : the base mixing lentgh is the horizontal grid mesh, 
-    !                      and it is limited by a stability-based length (RM17), as was done in Deardorff length (but taking into account shear as well)
-    ! For grid meshes in the grey zone, then this is the smaller of the two.
-    ZLM = MIN(ZLM,XCADAP*ZLMW)
-!
-!*      3.4 Delta mixing length
-!           -------------------
-!
-  CASE ('DELT')
-    CALL DELT(ZLM,ODZ=.TRUE.)
-!
-!*      3.5 Deardorff mixing length
-!           -----------------------
-!
-  CASE ('DEAR')
-    CALL DEAR(ZLM)
-!
-!*      3.6 Blackadar mixing length
-!           -----------------------
-!
-  CASE ('BLKR')
-   ZL0 = 100.
-   ZLM(:,:,:) = ZL0
-
-   ZALPHA=0.5**(-1.5)
-   !
-   DO JK=IKTB,IKTE
-     ZLM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - &
-     & PZZ(:,:,KKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:)
-     ZLM(:,:,JK) = ZALPHA  * ZLM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,:,JK) )
-   END DO
-!
-   ZLM(:,:,IKTB-1) = ZLM(:,:,IKTB)
-   ZLM(:,:,IKTE+1) = ZLM(:,:,IKTE)
-!
-!
-!
-END SELECT
-!
-!*      3.5 Mixing length modification for cloud
-!           -----------------------
-IF (KMODEL_CL==KMI .AND. HTURBLEN_CL/='NONE') CALL CLOUD_MODIF_LM
-ENDIF  ! end LHARRAT
-
-!
-!*      3.6 Dissipative length
-!           ------------------
-
-IF (LHARAT) THEN
-  ZLEPS=PLENGTHM*(3.75**2.)
-ELSE
-  ZLEPS=ZLM
-ENDIF
-!
-!*      3.7 Correction in the Surface Boundary Layer (Redelsperger 2001)
-!           ----------------------------------------
-!
-ZLMO=XUNDEF
-IF (ORMC01) THEN
-  ZUSTAR=(PSFU**2+PSFV**2)**(0.25)
-  IF (KRR>0) THEN
-    ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRM(:,:,IKB,1),PSFTH,PSFRV)
-  ELSE
-    ZRVM=0.
-    ZSFRV=0.
-    ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV)
-  END IF
-  CALL RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
-END IF
-!
-!RMC01 is only applied on RM17 in ADAP
-IF (HTURBLEN=='ADAP') ZLEPS = MIN(ZLEPS,ZLMW*XCADAP)
-!
-!*      3.8 Mixing length in external points (used if HTURBDIM="3DIM")
-!           ----------------------------------------------------------
-!
-IF (HTURBDIM=="3DIM") THEN
-  CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS)
-END IF
-!
-!*      3.9 Mixing length correction if immersed walls 
-!           ------------------------------------------
-!
-IF (LIBM) THEN
-   CALL IBM_MIXINGLENGTH(ZLM,ZLEPS,XIBM_XMUT,XIBM_LS(:,:,:,1),PTKET)
-ENDIF
-!----------------------------------------------------------------------------
-!
-!*      4. GO INTO THE AXES FOLLOWING THE SURFACE
-!          --------------------------------------
-!
-!
-!*      4.1 rotate the wind at time t
-!
-!
-!
-  IF (CPROGRAM/='AROME ') THEN
-    CALL ROTATE_WIND(PUT,PVT,PWT,                       &
-                     PDIRCOSXW, PDIRCOSYW, PDIRCOSZW,   &
-                     PCOSSLOPE,PSINSLOPE,               &
-                     PDXX,PDYY,PDZZ,                    &
-                     ZUSLOPE,ZVSLOPE                    )
-!
-    CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
-  ELSE
-    ZUSLOPE=PUT(:,:,KKA)
-    ZVSLOPE=PVT(:,:,KKA)
-  END IF
-!
-!
-!*      4.2 compute the proportionality coefficient between wind and stress
-!
-  ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) /                  &
-                        (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
-!
-!*       4.6 compute the surface tangential fluxes
-!
-ZTAU11M(:,:) =2./3.*(  (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB))  &
-                           /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB))  &
-                       )   *PTKET(:,:,IKB)                   &
-                     -0.5  *PTKET(:,:,IKB+KKL)                 &
-                    )
-ZTAU12M(:,:) =0.0
-ZTAU22M(:,:) =ZTAU11M(:,:)
-ZTAU33M(:,:) =ZTAU11M(:,:)
-!
-!*       4.7 third order terms in temperature and water fluxes and correlations
-!            ------------------------------------------------------------------
-!
-!
-ZMWTH = 0.     ! w'2th'
-ZMWR  = 0.     ! w'2r'
-ZMTH2 = 0.     ! w'th'2
-ZMR2  = 0.     ! w'r'2
-ZMTHR = 0.     ! w'th'r'
-
-IF (HTOM=='TM06') THEN
-  CALL TM06(KKA,KKU,KKL,PTHVREF,PBL_DEPTH,PZZ,PSFTH,ZMWTH,ZMTH2)
-!
-  ZFWTH = -GZ_M_W(KKA,KKU,KKL,ZMWTH,PDZZ)    ! -d(w'2th' )/dz
-  !ZFWR  = -GZ_M_W(KKA,KKU,KKL,ZMWR, PDZZ)    ! -d(w'2r'  )/dz
-  ZFTH2 = -GZ_W_M(ZMTH2,PDZZ)    ! -d(w'th'2 )/dz
-  !ZFR2  = -GZ_W_M(ZMR2, PDZZ)    ! -d(w'r'2  )/dz
-  !ZFTHR = -GZ_W_M(ZMTHR,PDZZ)    ! -d(w'th'r')/dz
-!
-  ZFWTH(:,:,IKTE:) = 0.
-  ZFWTH(:,:,:IKTB) = 0.
-  !ZFWR (:,:,IKTE:) = 0.
-  !ZFWR (:,:,:IKTB) = 0.
-  ZFWR  = 0.
-  ZFTH2(:,:,IKTE:) = 0.
-  ZFTH2(:,:,:IKTB) = 0.
-  !ZFR2 (:,:,IKTE:) = 0.
-  !ZFR2 (:,:,:IKTB) = 0.
-  ZFR2  = 0.
-  !ZFTHR(:,:,IKTE:) = 0.
-  !ZFTHR(:,:,:IKTB) = 0.
-  ZFTHR = 0.
-ELSE
-  ZFWTH = 0.
-  ZFWR  = 0.
-  ZFTH2 = 0.
-  ZFR2  = 0.
-  ZFTHR = 0.
-ENDIF
-!
-!----------------------------------------------------------------------------
-!
-!*      5. TURBULENT SOURCES
-!          -----------------
-!
-IF( LBUDGET_U )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'VTURB', PRUS(:, :, :)    )
-IF( LBUDGET_V )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_V ), 'VTURB', PRVS(:, :, :)    )
-IF( LBUDGET_W )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_W ), 'VTURB', PRWS(:, :, :)    )
-
-IF( LBUDGET_TH ) THEN
-  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
-                                                                          + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
-  ELSE IF( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
-  ELSE
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) )
-  END IF
-END IF
-
-IF( LBUDGET_RV ) THEN
-  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
-  ELSE IF( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
-  ELSE
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) )
-  END IF
-END IF
-
-IF( LBUDGET_RC ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RC), 'VTURB', PRRS  (:, :, :, 2) )
-IF( LBUDGET_RI ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RI), 'VTURB', PRRS  (:, :, :, 4) )
-
-IF( LBUDGET_SV ) THEN
-  DO JSV = 1, NSV
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:, :, :, JSV) )
-  END DO
-END IF
-
-CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI,               &
-          OTURB_FLX,                                     &
-          HTURBDIM,HTOM,PIMPL,ZEXPL,                     &
-          PTSTEP,TPFILE,                                 &
-          PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,        &
-          PCOSSLOPE,PSINSLOPE,                           &
-          PRHODJ,PTHVREF,                                &
-          PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV,           &
-          ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M,               &
-          PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT,    &
-          PTKET,ZLM,PLENGTHM,PLENGTHH,ZLEPS,MFMOIST,     &
-          ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,     &
-          ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,PBL_DEPTH,         &
-          PSBL_DEPTH,ZLMO,                               &
-          PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,              &
-          PDYP,PTHP,PSIGS,PWTH,PWRC,PWSV                 )
-
-IF( LBUDGET_U ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_U), 'VTURB', PRUS(:, :, :) )
-IF( LBUDGET_V ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_V), 'VTURB', PRVS(:, :, :) )
-IF( LBUDGET_W ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_W), 'VTURB', PRWS(:, :, :) )
-
-IF( LBUDGET_TH ) THEN
-  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
-                                                                          + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
-  ELSE IF( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
-  ELSE
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) )
-  END IF
-END IF
-
-IF( LBUDGET_RV ) THEN
-  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
-  ELSE IF( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
-  ELSE
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) )
-  END IF
-END IF
-
-IF( LBUDGET_RC ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RC), 'VTURB', PRRS(:, :, :, 2) )
-IF( LBUDGET_RI ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RI), 'VTURB', PRRS(:, :, :, 4) )
-
-IF( LBUDGET_SV )  THEN
-  DO JSV = 1, NSV
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:, :, :, JSV) )
-  END DO
-END IF
-!
-#ifdef REPRO48
-#else
-IF( HTURBDIM == '3DIM' ) THEN
-#endif
-  IF( LBUDGET_U  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'HTURB', PRUS  (:, :, :) )
-  IF( LBUDGET_V  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_V ), 'HTURB', PRVS  (:, :, :) )
-  IF( LBUDGET_W  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_W ), 'HTURB', PRWS  (:, :, :) )
-
-  IF(LBUDGET_TH)  THEN
-    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
-                                                                             + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
-    ELSE IF( KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
-    ELSE
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) )
-    END IF
-  END IF
-
-  IF( LBUDGET_RV ) THEN
-    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
-    ELSE IF( KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
-    ELSE
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) )
-    END IF
-  END IF
-
-  IF( LBUDGET_RC ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:, :, :, 2) )
-  IF( LBUDGET_RI ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:, :, :, 4) )
-
-  IF( LBUDGET_SV )  THEN
-    DO JSV = 1, NSV
-      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) )
-    END DO
-  END IF
-
-    CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP,        &
-          HLBCX,HLBCY,OTURB_FLX,OSUBG_COND,                    &
-          TPFILE,                                              &
-          PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                        &
-          PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                       &
-          PCOSSLOPE,PSINSLOPE,                                 &
-          PRHODJ,PTHVREF,                                      &
-          PSFTH,PSFRV,PSFSV,                                   &
-          ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M,             &
-          PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT,          &
-          PTKET,ZLM,ZLEPS,                                    &
-          ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,           &
-          PDYP,PTHP,PSIGS,                                     &
-          ZTRH,                                                &
-          PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS                     )
-
-  IF( LBUDGET_U ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_U), 'HTURB', PRUS(:, :, :) )
-  IF( LBUDGET_V ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_V), 'HTURB', PRVS(:, :, :) )
-  IF( LBUDGET_W ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_W), 'HTURB', PRWS(:, :, :) )
-
-  IF( LBUDGET_TH ) THEN
-    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
-                                                                            + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
-    ELSE IF( KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
-    ELSE
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) )
-    END IF
-  END IF
-
-  IF( LBUDGET_RV ) THEN
-    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
-    ELSE IF( KRRL >= 1 ) THEN
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
-    ELSE
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) )
-    END IF
-  END IF
-
-  IF( LBUDGET_RC ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:, :, :, 2) )
-  IF( LBUDGET_RI ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:, :, :, 4) )
-
-  IF( LBUDGET_SV )  THEN
-    DO JSV = 1, NSV
-      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) )
-    END DO
-  END IF
-#ifdef REPRO48
-#else
-END IF
-#endif
-!----------------------------------------------------------------------------
-!
-!*      6. EVOLUTION OF THE TKE AND ITS DISSIPATION 
-!          ----------------------------------------
-!
-!  6.1 Contribution of mass-flux in the TKE buoyancy production if 
-!      cloud computation is not statistical 
-
-       PTHP = PTHP + XG / PTHVREF * MZF( PFLXZTHVMF )
-
-!  6.2 TKE evolution equation
-
-IF (.NOT. LHARAT) THEN
-!
-IF (LBUDGET_TH)  THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) &
-                                                          & + ZLSOCPEXNM * PRRS(:,:,:,4) )
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2) )
-  ELSE
-    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
-  END IF
-END IF
-CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDYP,ZTRH,     &
-                     PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,            &
-                     PTSTEP,PIMPL,ZEXPL,                             &
-                     HTURBLEN,HTURBDIM,                              &
-                     TPFILE,OTURB_DIAG,                              &
-                     PTHP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,&
-                     TBUDGETS,KBUDGETS,PRTKESM=PRTKEMS)
-
-IF (LBUDGET_TH)  THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) &
-                                                          & + ZLSOCPEXNM * PRRS(:,:,:,4) )
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2) )
-  ELSE
-    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
-  END IF
-END IF
-!
-ENDIF
-!
-!----------------------------------------------------------------------------
-!
-!*      7. STORES SOME INFORMATIONS RELATED TO THE TURBULENCE SCHEME
-!          ---------------------------------------------------------
-!
-IF ( OTURB_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.
-  CALL IO_FIELD_WRITE(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.
-    CALL IO_FIELD_WRITE(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.
-    CALL IO_FIELD_WRITE(TPFILE,TZFIELD,PRT(:,:,:,1))
-   END IF
-END IF
-!
-!----------------------------------------------------------------------------
-!
-!*      8. RETRIEVE NON-CONSERVATIVE VARIABLES
-!          -----------------------------------
-!
-IF ( KRRL >= 1 ) THEN
-  IF ( KRRI >= 1 ) THEN
-    PRT(:,:,:,1)  = PRT(:,:,:,1)  - PRT(:,:,:,2)  - PRT(:,:,:,4)
-    PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2) - PRRS(:,:,:,4)
-    PTHLT(:,:,:)  = PTHLT(:,:,:)  + ZLVOCPEXNM(:,:,:) * PRT(:,:,:,2) &
-                                  + ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4)
-    PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) &
-                                  + ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4)
-!
-    DEALLOCATE(ZLVOCPEXNM)
-    DEALLOCATE(ZLSOCPEXNM)
-  ELSE
-    PRT(:,:,:,1)  = PRT(:,:,:,1)  - PRT(:,:,:,2) 
-    PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2)
-    PTHLT(:,:,:)  = PTHLT(:,:,:)  + ZLOCPEXNM(:,:,:) * PRT(:,:,:,2)
-    PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2)
-  END IF
-END IF
-
-! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets
-call Sources_neg_correct( hcloud, 'NETUR', krr, ptstep, ppabst, pthlt, prt, prthls, prrs, prsvs )
-
-!----------------------------------------------------------------------------
-!
-!*      9. LES averaged surface fluxes
-!          ---------------------------
-!
-IF (LLES_CALL) THEN
-  CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID(PSFTH,X_LES_Q0)
-  CALL LES_MEAN_SUBGRID(PSFRV,X_LES_E0)
-  DO JSV=1,NSV
-    CALL LES_MEAN_SUBGRID(PSFSV(:,:,JSV),X_LES_SV0(:,JSV))
-  END DO
-  CALL LES_MEAN_SUBGRID(PSFU,X_LES_UW0)
-  CALL LES_MEAN_SUBGRID(PSFV,X_LES_VW0)
-  CALL LES_MEAN_SUBGRID((PSFU*PSFU+PSFV*PSFV)**0.25,X_LES_USTAR)
-!----------------------------------------------------------------------------
-!
-!*     10. LES for 3rd order moments
-!          -------------------------
-!
-  CALL LES_MEAN_SUBGRID(ZMWTH,X_LES_SUBGRID_W2Thl)
-  CALL LES_MEAN_SUBGRID(ZMTH2,X_LES_SUBGRID_WThl2)
-  IF (KRR>0) THEN
-    CALL LES_MEAN_SUBGRID(ZMWR,X_LES_SUBGRID_W2Rt)
-    CALL LES_MEAN_SUBGRID(ZMTHR,X_LES_SUBGRID_WThlRt)
-    CALL LES_MEAN_SUBGRID(ZMR2,X_LES_SUBGRID_WRt2)
-  END IF
-!
-!----------------------------------------------------------------------------
-!
-!*     11. LES quantities depending on <w'2> in "1DIM" mode
-!          ------------------------------------------------
-!
-  IF (HTURBDIM=="1DIM") THEN
-    CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_U2)
-    X_LES_SUBGRID_V2 = X_LES_SUBGRID_U2
-    X_LES_SUBGRID_W2 = X_LES_SUBGRID_U2
-    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(&
-               & GZ_M_W(KKA,KKU,KKL,PTHLT,PDZZ)),X_LES_RES_ddz_Thl_SBG_W2)
-    IF (KRR>=1) &
-    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(&
-               & GZ_M_W(KKA,KKU,KKL,PRT(:,:,:,1),PDZZ)),X_LES_RES_ddz_Rt_SBG_W2)
-    DO JSV=1,NSV
-      CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(&
- & GZ_M_W(KKA,KKU,KKL,PSVT(:,:,:,JSV),PDZZ)),X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
-    END DO
-  END IF
-
-!----------------------------------------------------------------------------
-!
-!*     12. LES mixing end dissipative lengths, presso-correlations
-!          -------------------------------------------------------
-!
-  CALL LES_MEAN_SUBGRID(ZLM,X_LES_SUBGRID_LMix)
-  CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_LDiss)
-!
-!* presso-correlations for subgrid Tke are equal to zero.
-!
-  ZLEPS = 0. !ZLEPS is used as a work array (not used anymore)
-  CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_WP)
-!
-  CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-END IF
-!
-IF(PRESENT(PLEM)) PLEM = ZLM
-!----------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE)
-CONTAINS
-!
-!
-!     ##############################################
-      SUBROUTINE UPDATE_ROTATE_WIND(PUSLOPE,PVSLOPE)
-!     ##############################################
-!!
-!!****  *UPDATE_ROTATE_WIND* routine to set rotate wind values at the border
-!
-!!    AUTHOR
-!!    ------
-!!
-!!     P Jabouille   *CNRM METEO-FRANCE
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original   24/06/99
-!!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_CONF
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PUSLOPE,PVSLOPE
-! tangential surface fluxes in the axes following the orography
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER             :: IIB,IIE,IJB,IJE,IIU,IJU ! index values for the physical subdomain
-TYPE(LIST_ll), POINTER :: TZFIELDS_ll  ! list of fields to exchange
-INTEGER                :: IINFO_ll     ! return code of parallel routine
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB:UPDATE_ROTATE_WIND',0,ZHOOK_HANDLE)
-!
-!*        1  PROLOGUE
-!
-NULLIFY(TZFIELDS_ll)
-!
-IIU=SIZE(PUSLOPE,1)
-IJU=SIZE(PUSLOPE,2)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU)
-!
-!         2 Update halo if necessary
-!
-!!$IF (NHALO == 1) THEN
-  CALL ADD2DFIELD_ll( TZFIELDS_ll, PUSLOPE, 'UPDATE_ROTATE_WIND::PUSLOPE' )
-  CALL ADD2DFIELD_ll( TZFIELDS_ll, PVSLOPE, 'UPDATE_ROTATE_WIND::PVSLOPE' )
-  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-  CALL CLEANLIST_ll(TZFIELDS_ll)
-!!$ENDIF
-!
-!        3 Boundary conditions for non cyclic case
-!
-IF ( HLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
-  PUSLOPE(IIB-1,:)=PUSLOPE(IIB,:)
-  PVSLOPE(IIB-1,:)=PVSLOPE(IIB,:)
-END IF
-IF ( HLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
-  PUSLOPE(IIE+1,:)=PUSLOPE(IIE,:)
-  PVSLOPE(IIE+1,:)=PVSLOPE(IIE,:)
-END IF
-IF ( HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
-  PUSLOPE(:,IJB-1)=PUSLOPE(:,IJB)
-  PVSLOPE(:,IJB-1)=PVSLOPE(:,IJB)
-END IF
-IF(  HLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
-  PUSLOPE(:,IJE+1)=PUSLOPE(:,IJE)
-  PVSLOPE(:,IJE+1)=PVSLOPE(:,IJE)
-END IF
-!
-IF (LHOOK) CALL DR_HOOK('TURB:UPDATE_ROTATE_WIND',1,ZHOOK_HANDLE)
-!
-END SUBROUTINE UPDATE_ROTATE_WIND
-!
-!     ########################################################################
-      SUBROUTINE COMPUTE_FUNCTION_THERMO(PALP,PBETA,PGAM,PLTT,PC,PT,PEXN,PCP,&
-                                         PLOCPEXN,PAMOIST,PATHETA            )
-!     ########################################################################
-!!
-!!****  *COMPUTE_FUNCTION_THERMO* routine to compute several thermo functions
-!
-!!    AUTHOR
-!!    ------
-!!
-!!     JP Pinty      *LA*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original   24/02/03
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODD_CST
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments 
-!
-REAL,                   INTENT(IN)    :: PALP,PBETA,PGAM,PLTT,PC
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PT,PEXN,PCP
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLOCPEXN
-REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PAMOIST,PATHETA
-! 
-!*       0.2   Declarations of local variables
-!
-REAL                :: ZEPS         ! XMV / XMD
-REAL, DIMENSION(SIZE(PEXN,1),SIZE(PEXN,2),SIZE(PEXN,3)) :: ZRVSAT
-REAL, DIMENSION(SIZE(PEXN,1),SIZE(PEXN,2),SIZE(PEXN,3)) :: ZDRVSATDT
-!
-!-------------------------------------------------------------------------------
-!
-  REAL(KIND=JPRB) :: ZHOOK_HANDLE
-  IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',0,ZHOOK_HANDLE)
-  ZEPS = XMV / XMD
-!
-!*       1.1 Lv/Cph at  t
-!
-  PLOCPEXN(:,:,:) = ( PLTT + (XCPV-PC) *  (PT(:,:,:)-XTT) ) / PCP(:,:,:)
-!
-!*      1.2 Saturation vapor pressure at t
-!
-  ZRVSAT(:,:,:) =  EXP( PALP - PBETA/PT(:,:,:) - PGAM*ALOG( PT(:,:,:) ) )
-!
-!*      1.3 saturation  mixing ratio at t
-!
-  ZRVSAT(:,:,:) =  ZRVSAT(:,:,:) * ZEPS / ( PPABST(:,:,:) - ZRVSAT(:,:,:) )
-!
-!*      1.4 compute the saturation mixing ratio derivative (rvs')
-!
-  ZDRVSATDT(:,:,:) = ( PBETA / PT(:,:,:)  - PGAM ) / PT(:,:,:)   &
-                 * ZRVSAT(:,:,:) * ( 1. + ZRVSAT(:,:,:) / ZEPS )
-!
-!*      1.5 compute Amoist
-!
-  PAMOIST(:,:,:)=  0.5 / ( 1.0 + ZDRVSATDT(:,:,:) * PLOCPEXN(:,:,:) )
-!
-!*      1.6 compute Atheta
-!
-  PATHETA(:,:,:)= PAMOIST(:,:,:) * PEXN(:,:,:) *                             &
-        ( ( ZRVSAT(:,:,:) - PRT(:,:,:,1) ) * PLOCPEXN(:,:,:) /               &
-          ( 1. + ZDRVSATDT(:,:,:) * PLOCPEXN(:,:,:) )        *               &
-          (                                                                  &
-           ZRVSAT(:,:,:) * (1. + ZRVSAT(:,:,:)/ZEPS)                         &
-                        * ( -2.*PBETA/PT(:,:,:) + PGAM ) / PT(:,:,:)**2      &
-          +ZDRVSATDT(:,:,:) * (1. + 2. * ZRVSAT(:,:,:)/ZEPS)                 &
-                        * ( PBETA/PT(:,:,:) - PGAM ) / PT(:,:,:)             &
-          )                                                                  &
-         - ZDRVSATDT(:,:,:)                                                  &
-        )
-!
-!*      1.7 Lv/Cph/Exner at t-1
-!
-  PLOCPEXN(:,:,:) = PLOCPEXN(:,:,:) / PEXN(:,:,:)
-!
-IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',1,ZHOOK_HANDLE)
-END SUBROUTINE COMPUTE_FUNCTION_THERMO
-!
-!     ####################
-      SUBROUTINE DELT(PLM,ODZ)
-!     ####################
-!!
-!!****  *DELT* routine to compute mixing length for DELT case
-!
-!!    AUTHOR
-!!    ------
-!!
-!!     M Tomasini      *Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original   01/05
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-!*       0.1   Declarations of dummy arguments 
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLM
-LOGICAL,                INTENT(IN)    :: ODZ
-!
-!*       0.2   Declarations of local variables
-!
-REAL                :: ZD           ! distance to the surface
-!
-!-------------------------------------------------------------------------------
-!
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB:DELT',0,ZHOOK_HANDLE)
-IF (ODZ) THEN
-  ! Dz is take into account in the computation
-  DO JK = IKTB,IKTE ! 1D turbulence scheme
-    PLM(:,:,JK) = PZZ(:,:,JK+KKL) - PZZ(:,:,JK)
-  END DO
-  PLM(:,:,KKU) = PLM(:,:,IKE)
-  PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA)
-  IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
-    IF ( L2D) THEN
-      PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) ) 
-    ELSE
-      PLM(:,:,:) = (PLM(:,:,:)*MXF(PDXX(:,:,:))*MYF(PDYY(:,:,:)) ) ** (1./3.)
-    END IF
-  END IF
-ELSE
-  ! Dz not taken into account in computation to assure invariability with vertical grid mesh
-  PLM=1.E10
-  IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
-    IF ( L2D) THEN
-      PLM(:,:,:) = MXF(PDXX(:,:,:))
-    ELSE
-      PLM(:,:,:) = (MXF(PDXX(:,:,:))*MYF(PDYY(:,:,:)) ) ** (1./2.)
-    END IF
-  END IF
-END IF
-!
-!  mixing length limited by the distance normal to the surface 
-!  (with the same factor as for BL89)
-!
-IF (.NOT. ORMC01) THEN
-  ZALPHA=0.5**(-1.5)
-  !
-  DO JJ=1,SIZE(PUT,2)
-    DO JI=1,SIZE(PUT,1)
-      IF (LOCEAN) THEN
-        DO JK=IKTE,IKTB,-1
-          ZD=ZALPHA*(PZZ(JI,JJ,IKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
-            PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
-          ENDIF
-       END DO
-      ELSE
-        DO JK=IKTB,IKTE
-          ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))&
-          -PZZ(JI,JJ,IKB)) *PDIRCOSZW(JI,JJ)
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
-            PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
-          ENDIF
-        END DO
-      ENDIF   
-    END DO
-  END DO
-END IF
-!
-PLM(:,:,KKA) = PLM(:,:,IKB  )
-PLM(:,:,KKU  ) = PLM(:,:,IKE)
-!
-IF (LHOOK) CALL DR_HOOK('TURB:DELT',1,ZHOOK_HANDLE)
-END SUBROUTINE DELT
-!
-!     ####################
-      SUBROUTINE DEAR(PLM)
-!     ####################
-!!
-!!****  *DEAR* routine to compute mixing length for DEARdorff case
-!
-!!    AUTHOR
-!!    ------
-!!
-!!     M Tomasini      *Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original   01/05
-!!      I.Sandu (Sept.2006) : Modification of the stability criterion
-!!                            (theta_v -> theta_l)
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-!*       0.1   Declarations of dummy arguments 
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLM
-!
-!*       0.2   Declarations of local variables
-!
-REAL                :: ZD           ! distance to the surface
-REAL                :: ZVAR         ! Intermediary variable
-REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) ::   ZWORK2D
-!
-REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) ::     &
-            ZDTHLDZ,ZDRTDZ,     &!dtheta_l/dz, drt_dz used for computing the stablity
-!                                ! criterion 
-            ZETHETA,ZEMOIST             !coef ETHETA and EMOIST
-!----------------------------------------------------------------------------
-!
-!-------------------------------------------------------------------------------
-!
-!   initialize the mixing length with the mesh grid
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB:DEAR',0,ZHOOK_HANDLE)
-! 1D turbulence scheme
-PLM(:,:,IKTB:IKTE) = PZZ(:,:,IKTB+KKL:IKTE+KKL) - PZZ(:,:,IKTB:IKTE)
-PLM(:,:,KKU) = PLM(:,:,IKE)
-PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA)
-IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
-  IF ( L2D) THEN
-    PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) )
-  ELSE
-    PLM(:,:,:) = (PLM(:,:,:)*MXF(PDXX(:,:,:))*MYF(PDYY(:,:,:)) ) ** (1./3.)
-  END IF
-END IF
-!   compute a mixing length limited by the stability
-!
-ZETHETA(:,:,:) = ETHETA(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT)
-ZEMOIST(:,:,:) = EMOIST(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT)
-!
-IF (KRR>0) THEN
-  DO JK = IKTB+1,IKTE-1
-    DO JJ=1,SIZE(PUT,2)
-      DO JI=1,SIZE(PUT,1)
-        ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
-                                (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
-        ZDRTDZ(JI,JJ,JK) = 0.5*((PRT(JI,JJ,JK+KKL,1)-PRT(JI,JJ,JK    ,1))/PDZZ(JI,JJ,JK+KKL)+ &
-                                (PRT(JI,JJ,JK    ,1)-PRT(JI,JJ,JK-KKL,1))/PDZZ(JI,JJ,JK    ))
-        IF (LOCEAN) THEN
-          ZVAR=XG*(XALPHAOC*ZDTHLDZ(JI,JJ,JK)-XBETAOC*ZDRTDZ(JI,JJ,JK))
-        ELSE
-          ZVAR=XG/PTHVREF(JI,JJ,JK)*                                                  &
-             (ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)+ZEMOIST(JI,JJ,JK)*ZDRTDZ(JI,JJ,JK))
-        END IF
-        !
-        IF (ZVAR>0.) THEN
-          PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
-                        0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR)))
-        END IF
-      END DO
-    END DO
-  END DO
-ELSE! For dry atmos or unsalted ocean runs
-  DO JK = IKTB+1,IKTE-1
-    DO JJ=1,SIZE(PUT,2)
-      DO JI=1,SIZE(PUT,1)
-        ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
-                                (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
-        IF (LOCEAN) THEN
-          ZVAR= XG*XALPHAOC*ZDTHLDZ(JI,JJ,JK)
-        ELSE
-          ZVAR= XG/PTHVREF(JI,JJ,JK)*ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)
-        END IF
-!
-        IF (ZVAR>0.) THEN
-          PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
-                        0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR)))
-        END IF
-      END DO
-    END DO
-  END DO
-END IF
-!  special case near the surface 
-ZDTHLDZ(:,:,IKB)=(PTHLT(:,:,IKB+KKL)-PTHLT(:,:,IKB))/PDZZ(:,:,IKB+KKL)
-! For dry simulations
-IF (KRR>0) THEN
-  ZDRTDZ(:,:,IKB)=(PRT(:,:,IKB+KKL,1)-PRT(:,:,IKB,1))/PDZZ(:,:,IKB+KKL)
-ELSE
-  ZDRTDZ(:,:,IKB)=0
-ENDIF
-!
-IF (LOCEAN) THEN
-  ZWORK2D(:,:)=XG*(XALPHAOC*ZDTHLDZ(:,:,IKB)-XBETAOC*ZDRTDZ(:,:,IKB))
-ELSE
-  ZWORK2D(:,:)=XG/PTHVREF(:,:,IKB)*                                           &
-              (ZETHETA(:,:,IKB)*ZDTHLDZ(:,:,IKB)+ZEMOIST(:,:,IKB)*ZDRTDZ(:,:,IKB))
-END IF
-WHERE(ZWORK2D(:,:)>0.)
-  PLM(:,:,IKB)=MAX(XMNH_EPSILON,MIN( PLM(:,:,IKB),                 &
-                    0.76* SQRT(PTKET(:,:,IKB)/ZWORK2D(:,:))))
-END WHERE
-!
-!  mixing length limited by the distance normal to the surface (with the same factor as for BL89)
-!
-IF (.NOT. ORMC01) THEN
-  ZALPHA=0.5**(-1.5)
-  !
-  DO JJ=1,SIZE(PUT,2)
-    DO JI=1,SIZE(PUT,1)
-      IF (LOCEAN) THEN
-        DO JK=IKTE,IKTB,-1
-          ZD=ZALPHA*(PZZ(JI,JJ,IKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
-            PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
-          ENDIF
-        END DO
-      ELSE
-        DO JK=IKTB,IKTE
-          ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,IKB)) &
-            *PDIRCOSZW(JI,JJ)
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
-            PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
-          ENDIF
-        END DO
-      ENDIF 
-    END DO
-  END DO
-END IF
-!
-PLM(:,:,KKA) = PLM(:,:,IKB  )
-PLM(:,:,IKE  ) = PLM(:,:,IKE-KKL)
-PLM(:,:,KKU  ) = PLM(:,:,KKU-KKL)
-!
-IF (LHOOK) CALL DR_HOOK('TURB:DEAR',1,ZHOOK_HANDLE)
-END SUBROUTINE DEAR
-!
-!     #########################
-      SUBROUTINE CLOUD_MODIF_LM
-!     #########################
-!!
-!!*****CLOUD_MODIF_LM routine to:
-!!       1/ change the mixing length in the clouds
-!!       2/ emphasize the mixing length in the cloud
-!!           by the coefficient ZCOEF_AMPL calculated here
-!!             when the CEI index is above ZCEI_MIN.
-!!
-!!
-!!      ZCOEF_AMPL ^
-!!                 |
-!!                 |
-!!  ZCOEF_AMPL_SAT -                       ---------- Saturation
-!!    (XDUMMY1)    |                      -
-!!                 |                     -
-!!                 |                    -
-!!                 |                   -
-!!                 |                  - Amplification
-!!                 |                 - straight
-!!                 |                - line
-!!                 |               -
-!!                 |              -
-!!                 |             -
-!!                 |            -
-!!                 |           -
-!!               1 ------------
-!!                 |
-!!                 |
-!!               0 -----------|------------|----------> PCEI
-!!                 0      ZCEI_MIN     ZCEI_MAX
-!!                        (XDUMMY2)    (XDUMMY3)
-!!
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!     M. Tomasini   *CNRM METEO-FRANCE
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!     Original   09/07/04
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-IMPLICIT NONE
-!
-REAL :: ZPENTE            ! Slope of the amplification straight line
-REAL :: ZCOEF_AMPL_CEI_NUL! Ordonnate at the origin of the
-                          ! amplification straight line
-REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZCOEF_AMPL
-                          ! Amplification coefficient of the mixing length
-                          ! when the instability criterium is verified 
-REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZLM_CLOUD
-                          ! Turbulent mixing length in the clouds
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.    INITIALISATION
-!              --------------
-!
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB:CLOUD_MODIF_LM',0,ZHOOK_HANDLE)
-ZPENTE = ( PCOEF_AMPL_SAT - 1. ) / ( PCEI_MAX - PCEI_MIN ) 
-ZCOEF_AMPL_CEI_NUL = 1. - ZPENTE * PCEI_MIN
-!
-ZCOEF_AMPL(:,:,:) = 1.
-!
-!*       2.    CALCULATION OF THE AMPLIFICATION COEFFICIENT
-!              --------------------------------------------
-!
-! Saturation
-!
-WHERE ( PCEI(:,:,:)>=PCEI_MAX ) ZCOEF_AMPL(:,:,:)=PCOEF_AMPL_SAT
-!
-! Between the min and max limits of CEI index, linear variation of the
-! amplification coefficient ZCOEF_AMPL as a function of CEI
-!
-WHERE ( PCEI(:,:,:) <  PCEI_MAX .AND.                                        &
-        PCEI(:,:,:) >  PCEI_MIN      )                                       &
-        ZCOEF_AMPL(:,:,:) = ZPENTE * PCEI(:,:,:) + ZCOEF_AMPL_CEI_NUL  
-!
-!
-!*       3.    CALCULATION OF THE MIXING LENGTH IN CLOUDS
-!              ------------------------------------------
-!
-IF (HTURBLEN_CL == HTURBLEN) THEN
-  ZLM_CLOUD(:,:,:) = ZLM(:,:,:)
-ELSE
-  SELECT CASE (HTURBLEN_CL)
-!
-!*         3.1 BL89 mixing length
-!           ------------------
-  CASE ('BL89','RM17','ADAP')
-    ZSHEAR=0.
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD)
-!
-!*         3.2 Delta mixing length
-!           -------------------
-  CASE ('DELT')
-    CALL DELT(ZLM_CLOUD,ODZ=.TRUE.)
-!
-!*         3.3 Deardorff mixing length
-!           -----------------------
-  CASE ('DEAR')
-    CALL DEAR(ZLM_CLOUD)
-!
-  END SELECT
-ENDIF
-!
-!*       4.    MODIFICATION OF THE MIXING LENGTH IN THE CLOUDS
-!              -----------------------------------------------
-!
-! Impression before modification of the mixing length
-IF ( OTURB_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.
-  CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZLM)
-ENDIF
-!
-! Amplification of the mixing length when the criteria are verified
-!
-WHERE (ZCOEF_AMPL(:,:,:) /= 1.) ZLM(:,:,:) = ZCOEF_AMPL(:,:,:)*ZLM_CLOUD(:,:,:)
-!
-! Cloud mixing length in the clouds at the points which do not verified the CEI
-!
-WHERE (PCEI(:,:,:) == -1.) ZLM(:,:,:) = ZLM_CLOUD(:,:,:)
-!
-!
-!*       5.    IMPRESSION
-!              ----------
-!
-IF ( OTURB_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.
-  CALL IO_FIELD_WRITE(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
-  CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZLM_CLOUD)
-  !
-ENDIF
-!
-IF (LHOOK) CALL DR_HOOK('TURB:CLOUD_MODIF_LM',1,ZHOOK_HANDLE)
-END SUBROUTINE CLOUD_MODIF_LM
-!
-END SUBROUTINE TURB