From 058136252f1bf58116a43fefaea8a73117434366 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 22 Feb 2022 12:02:54 +0100
Subject: [PATCH] Quentin 22/02/2022: Merge from main commit 1a99e96 +
 corrections : - phys_paramn : adapt call to turb (new args LENGTHs and MOIST)
 - modd_cturb : add LHARAT key (to move in namelist reading) - mode_prandtl :
 merge prandtl and mode_prandtl. Correct the use of SMOOTH functions -
 turb.f90 : add new args (incremental merge) - shuman and gradients : add
 adaptation of optional args as for AROME - remove old turb_ver routines -
 mode_turb_ver, mode_turb_ver_dyn_flux, _sv_flux, sv_corr : correction of
 shuman/gradient to the final solution - mode_turb_ver_thermo_corr : add
 REPRO48 to final computation of PSIGS (without : not bit_repro) -
 mode_turb_ver_thermo_flux : add REPRO55 to new upper condition of ZF flux
 with LOCEAN contribution + to computation of vertical divergence of the
 fluxes (desactivated in AROME) + final version of mode_prandtl (no REDR1 and
 REDT1 args in some functions) - resolved_cloud : add BUDGETS, OCND2 and 2D
 SIGQSAT

---
 src/mesonh/aux/gradient_m.f90                 |   22 +-
 src/mesonh/aux/gradient_u.f90                 |   25 +-
 src/mesonh/aux/gradient_v.f90                 |   24 +-
 src/mesonh/aux/gradient_w.f90                 |   24 +-
 src/mesonh/aux/shuman.f90                     |   27 +-
 src/mesonh/ext/phys_paramn.f90                |    9 +-
 src/mesonh/ext/resolved_cloud.f90             |   26 +-
 src/mesonh/turb/modd_cturb.f90                |    1 +
 src/mesonh/turb/mode_prandtl.f90              | 1095 ++++++++++++++--
 src/mesonh/turb/mode_turb_ver_dyn_flux.f90    |    4 +-
 src/mesonh/turb/mode_turb_ver_sv_corr.f90     |   10 +-
 src/mesonh/turb/mode_turb_ver_sv_flux.f90     |    2 +-
 src/mesonh/turb/mode_turb_ver_thermo_corr.f90 |    6 +-
 src/mesonh/turb/mode_turb_ver_thermo_flux.f90 |   74 +-
 src/mesonh/turb/prandtl.f90                   |  611 ---------
 src/mesonh/turb/turb.f90                      |   67 +-
 src/mesonh/turb/turb_ver_dyn_flux.f90         |  932 --------------
 src/mesonh/turb/turb_ver_sv_corr.f90          |  229 ----
 src/mesonh/turb/turb_ver_sv_flux.f90          |  500 --------
 src/mesonh/turb/turb_ver_thermo_corr.f90      |  756 -----------
 src/mesonh/turb/turb_ver_thermo_flux.f90      | 1117 -----------------
 21 files changed, 1193 insertions(+), 4368 deletions(-)
 delete mode 100644 src/mesonh/turb/prandtl.f90
 delete mode 100644 src/mesonh/turb/turb_ver_dyn_flux.f90
 delete mode 100644 src/mesonh/turb/turb_ver_sv_corr.f90
 delete mode 100644 src/mesonh/turb/turb_ver_sv_flux.f90
 delete mode 100644 src/mesonh/turb/turb_ver_thermo_corr.f90
 delete mode 100644 src/mesonh/turb/turb_ver_thermo_flux.f90

diff --git a/src/mesonh/aux/gradient_m.f90 b/src/mesonh/aux/gradient_m.f90
index b5ec025aa..60e7ffa57 100644
--- a/src/mesonh/aux/gradient_m.f90
+++ b/src/mesonh/aux/gradient_m.f90
@@ -10,35 +10,41 @@
 INTERFACE
 !
 !
-FUNCTION GX_M_M(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_M_M)
+FUNCTION GX_M_M(PA,PDXX,PDZZ,PDZX,KKA,KKU,KL)      RESULT(PGX_M_M)
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the mass point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZX    ! metric coefficient dzx
+INTEGER, INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 !
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGX_M_M ! result mass point
 !
 END FUNCTION GX_M_M
 !
 !
-FUNCTION GY_M_M(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_M_M)
+FUNCTION GY_M_M(PA,PDYY,PDZZ,PDZY,KKA,KKU,KL)      RESULT(PGY_M_M)
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the mass point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZY    ! metric coefficient dzy
 !
+INTEGER, INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGY_M_M ! result mass point
 !
 END FUNCTION GY_M_M
 !
 !
-FUNCTION GZ_M_M(PA,PDZZ)      RESULT(PGZ_M_M)
+FUNCTION GZ_M_M(PA,PDZZ,KKA,KKU,KL)      RESULT(PGZ_M_M)
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the mass point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
+INTEGER, INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGZ_M_M ! result mass point
 !
 END FUNCTION GZ_M_M
@@ -76,7 +82,7 @@ REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: PGY_M_V  ! result at flux
                                                               ! side
 END FUNCTION GY_M_V
 !
-      FUNCTION GZ_M_W(KKA,KKU,KL,PY,PDZZ) RESULT(PGZ_M_W)
+      FUNCTION GZ_M_W(KKA, KKU, KL,PY,PDZZ) RESULT(PGZ_M_W)
 !  
 IMPLICIT NONE
 !
@@ -99,7 +105,7 @@ END MODULE MODI_GRADIENT_M
 !
 !
 !     #######################################################
-      FUNCTION GX_M_M(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_M_M)
+      FUNCTION GX_M_M(PA,PDXX,PDZZ,PDZX,KKA,KKU,KL)      RESULT(PGX_M_M)
 !     #######################################################
 !
 !!****  *GX_M_M* - Cartesian Gradient operator: 
@@ -170,6 +176,8 @@ REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZX    ! metric coefficient dzx
 !
+INTEGER, INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGX_M_M ! result mass point
 !
 !
@@ -196,7 +204,7 @@ END FUNCTION GX_M_M
 !
 !
 !     #######################################################
-      FUNCTION GY_M_M(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_M_M)
+      FUNCTION GY_M_M(PA,PDYY,PDZZ,PDZY,KKA,KKU,KL)      RESULT(PGY_M_M)
 !     #######################################################
 !
 !!****  *GY_M_M* - Cartesian Gradient operator: 
@@ -265,6 +273,8 @@ REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZY    ! metric coefficient dzy
 !
+INTEGER, INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGY_M_M ! result mass point
 !
 !
diff --git a/src/mesonh/aux/gradient_u.f90 b/src/mesonh/aux/gradient_u.f90
index 3d32ffa80..1b82a616a 100644
--- a/src/mesonh/aux/gradient_u.f90
+++ b/src/mesonh/aux/gradient_u.f90
@@ -10,8 +10,9 @@
 INTERFACE
 !
 !     
-FUNCTION GX_U_M(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_U_M)
-!
+FUNCTION GX_U_M(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_U_M)
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -22,8 +23,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGX_U_M ! result mass point
 END FUNCTION GX_U_M
 !
 !     
-FUNCTION GY_U_UV(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_U_UV)
+FUNCTION GY_U_UV(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_U_UV)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -34,8 +37,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGY_U_UV ! result UV point
 END FUNCTION GY_U_UV
 !
 !     
-FUNCTION GZ_U_UW(PA,PDZZ)      RESULT(PGZ_U_UW)
+FUNCTION GZ_U_UW(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_U_UW)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
@@ -51,7 +56,7 @@ END MODULE MODI_GRADIENT_U
 !
 !
 !     #######################################################
-      FUNCTION GX_U_M(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_U_M)
+      FUNCTION GX_U_M(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_U_M)
 !     #######################################################
 !
 !!****  *GX_U_M* - Cartesian Gradient operator: 
@@ -116,6 +121,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL   :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL   :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -147,7 +154,7 @@ END FUNCTION GX_U_M
 !
 ! 
 !     #########################################################
-      FUNCTION GY_U_UV(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_U_UV)
+      FUNCTION GY_U_UV(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_U_UV)
 !     #########################################################
 !
 !!****  *GY_U_UV* - Cartesian Gradient operator: 
@@ -213,6 +220,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL   :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL   :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -243,7 +252,7 @@ END FUNCTION GY_U_UV
 !
 !
 !     #######################################################
-      FUNCTION GZ_U_UW(PA,PDZZ)      RESULT(PGZ_U_UW)
+      FUNCTION GZ_U_UW(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_U_UW)
 !     #######################################################
 !
 !!****  *GZ_U_UW - Cartesian Gradient operator: 
@@ -301,6 +310,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,              INTENT(IN),OPTIONAL      :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL      :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the U point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
diff --git a/src/mesonh/aux/gradient_v.f90 b/src/mesonh/aux/gradient_v.f90
index 12c1be749..2e9762584 100644
--- a/src/mesonh/aux/gradient_v.f90
+++ b/src/mesonh/aux/gradient_v.f90
@@ -10,8 +10,10 @@
 INTERFACE
 !
 !           
-FUNCTION GY_V_M(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_V_M)
+FUNCTION GY_V_M(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_V_M)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -21,8 +23,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGY_V_M ! result mass point
 !
 END FUNCTION GY_V_M
 !           
-FUNCTION GX_V_UV(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_V_UV)
+FUNCTION GX_V_UV(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_V_UV)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -33,8 +37,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGX_V_UV ! result UV point
 END FUNCTION GX_V_UV
 !
 !           
-FUNCTION GZ_V_VW(PA,PDZZ)      RESULT(PGZ_V_VW)
+FUNCTION GZ_V_VW(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_V_VW)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
@@ -50,7 +56,7 @@ END MODULE MODI_GRADIENT_V
 !
 !
 !     #######################################################
-      FUNCTION GY_V_M(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_V_M)
+      FUNCTION GY_V_M(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_V_M)
 !     #######################################################
 !
 !!****  *GY_V_M* - Cartesian Gradient operator: 
@@ -114,6 +120,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL  :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL  :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -145,7 +153,7 @@ END FUNCTION GY_V_M
 !
 ! 
 !     #########################################################
-      FUNCTION GX_V_UV(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_V_UV)
+      FUNCTION GX_V_UV(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_V_UV)
 !     #########################################################
 !
 !!****  *GX_V_UV* - Cartesian Gradient operator: 
@@ -210,6 +218,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL  :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL  :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -240,7 +250,7 @@ END FUNCTION GX_V_UV
 !
 !
 !     #######################################################
-      FUNCTION GZ_V_VW(PA,PDZZ)      RESULT(PGZ_V_VW)
+      FUNCTION GZ_V_VW(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_V_VW)
 !     #######################################################
 !
 !!****  *GZ_V_VW - Cartesian Gradient operator: 
@@ -299,6 +309,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the V point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
diff --git a/src/mesonh/aux/gradient_w.f90 b/src/mesonh/aux/gradient_w.f90
index 1ef8f6916..097016ea9 100644
--- a/src/mesonh/aux/gradient_w.f90
+++ b/src/mesonh/aux/gradient_w.f90
@@ -10,8 +10,10 @@
 INTERFACE
 !
 !            
-FUNCTION GZ_W_M(PA,PDZZ)      RESULT(PGZ_W_M)
+FUNCTION GZ_W_M(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_W_M)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
@@ -19,8 +21,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGZ_W_M ! result mass point
 !
 END FUNCTION GZ_W_M
 !            
-FUNCTION GX_W_UW(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_W_UW)
+FUNCTION GX_W_UW(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_W_UW)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -31,8 +35,10 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PGX_W_UW ! result UW point
 END FUNCTION GX_W_UW
 !
 !            
-FUNCTION GY_W_VW(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_W_VW)
+FUNCTION GY_W_VW(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_W_VW)
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dyy
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -50,7 +56,7 @@ END MODULE MODI_GRADIENT_W
 !
 !
 !     #######################################################
-      FUNCTION GZ_W_M(PA,PDZZ)      RESULT(PGZ_W_M)
+      FUNCTION GZ_W_M(PA,PDZZ, KKA, KKU, KL)      RESULT(PGZ_W_M)
 !     #######################################################
 !
 !!****  *GZ_W_M* - Cartesian Gradient operator: 
@@ -103,6 +109,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL  :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL  :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
 !
@@ -126,7 +134,7 @@ END FUNCTION GZ_W_M
 !
 !
 !     #########################################################
-      FUNCTION GX_W_UW(PA,PDXX,PDZZ,PDZX)      RESULT(PGX_W_UW)
+      FUNCTION GX_W_UW(PA,PDXX,PDZZ,PDZX, KKA, KKU, KL)      RESULT(PGX_W_UW)
 !     #########################################################
 !
 !!****  *GX_W_UW* - Cartesian Gradient operator: 
@@ -181,6 +189,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,                 INTENT(IN),OPTIONAL  :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                 INTENT(IN),OPTIONAL  :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDXX    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
@@ -212,7 +222,7 @@ END FUNCTION GX_W_UW
 !
 !
 !     #########################################################
-      FUNCTION GY_W_VW(PA,PDYY,PDZZ,PDZY)      RESULT(PGY_W_VW)
+      FUNCTION GY_W_VW(PA,PDYY,PDZZ,PDZY, KKA, KKU, KL)      RESULT(PGY_W_VW)
 !     #########################################################
 !
 !!****  *GY_W_VW* - Cartesian Gradient operator: 
@@ -267,6 +277,8 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments and result
 !
+INTEGER,              INTENT(IN),OPTIONAL     :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,              INTENT(IN),OPTIONAL     :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PA      ! variable at the W point
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDYY    ! metric coefficient dxx
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PDZZ    ! metric coefficient dzz
diff --git a/src/mesonh/aux/shuman.f90 b/src/mesonh/aux/shuman.f90
index 0a0b3711c..f0a1e3f12 100644
--- a/src/mesonh/aux/shuman.f90
+++ b/src/mesonh/aux/shuman.f90
@@ -41,18 +41,22 @@ REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PDYM   ! result at flux
                                                             ! side
 END FUNCTION DYM
 !
-FUNCTION DZF(PA)  RESULT(PDZF)
+FUNCTION DZF(PA, KKA, KKU, KL)  RESULT(PDZF)
 REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at flux
                                                             !  side
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PDZF   ! result at mass
-                                                            ! localization 
+                                                            ! localization
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)                                                            
 END FUNCTION DZF
 !
-FUNCTION DZM(PA)  RESULT(PDZM)
+FUNCTION DZM(PA, KKA, KKU, KL)  RESULT(PDZM)
 REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at mass
                                                             ! localization
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PDZM   ! result at flux
                                                             ! side
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)                                                            
 END FUNCTION DZM
 !
 FUNCTION MXF(PA)  RESULT(PMXF)
@@ -84,16 +88,15 @@ REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at flux
                                                             !  side
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PMZF   ! result at mass
                                                             ! localization
-INTEGER,              INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (for AROME only)
-INTEGER,              INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (for AROME only)
-                                                            
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)                                                            
 END FUNCTION MZF
 !
 FUNCTION MZM(PA,KKA,KKU,KL)  RESULT(PMZM)
 REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at mass localization
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PMZM   ! result at flux localization 
-INTEGER,              INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (for AROME only)
-INTEGER,              INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (for AROME only)
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 END FUNCTION MZM
 !
 END INTERFACE
@@ -1095,7 +1098,7 @@ END DO
 !
 END FUNCTION DYM
 !     ###############################
-      FUNCTION DZF(PA)  RESULT(PDZF)
+      FUNCTION DZF(PA, KKA, KKU, KL)  RESULT(PDZF)
 !     ###############################
 !
 !!****  *DZF* -  Shuman operator : finite difference operator in z direction
@@ -1149,6 +1152,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at flux
                                                             !  side
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PDZF   ! result at mass
                                                             ! localization 
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
@@ -1189,7 +1194,7 @@ END DO
 !
 END FUNCTION DZF
 !     ###############################
-      FUNCTION DZM(PA)  RESULT(PDZM)
+      FUNCTION DZM(PA, KKA, KKU, KL)  RESULT(PDZM)
 !     ###############################
 !
 !!****  *DZM* -  Shuman operator : finite difference operator in z direction
@@ -1243,6 +1248,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN)                :: PA     ! variable at mass
                                                             ! localization
 REAL, DIMENSION(SIZE(PA,1),SIZE(PA,2),SIZE(PA,3)) :: PDZM   ! result at flux
                                                             ! side
+INTEGER, INTENT(IN),OPTIONAL         :: KKA, KKU ! near ground and uppest atmosphere array indexes (AROME)
+INTEGER, INTENT(IN),OPTIONAL         :: KL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise (AROME)
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90
index 327f252f0..c335a4652 100644
--- a/src/mesonh/ext/phys_paramn.f90
+++ b/src/mesonh/ext/phys_paramn.f90
@@ -453,6 +453,8 @@ REAL :: ZSWA,TINTSW     ! index for SW interpolation and int time betwenn forcin
 REAL, DIMENSION(:), ALLOCATABLE :: ZIZOCE(:) ! Solar flux penetrating in ocean
 REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetrating solar flux
 !
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !LHARAT turb option from AROME
+!
 !-----------------------------------------------------------------------------
 
 NULLIFY(TZFIELDS_ll)
@@ -1488,11 +1490,14 @@ END IF
               XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, XCOSSLOPE, XSINSLOPE,                 &
               XRHODJ, XTHVREF,                                                       &
               ZSFTH, ZSFRV, ZSFSV, ZSFU, ZSFV,                                       &
-              XPABST, XUT, XVT, XWT, XTKET, XSVT, XSRCT, XBL_DEPTH, XSBL_DEPTH,      &
+              XPABST, XUT, XVT, XWT, XTKET, XSVT, XSRCT,                             &
+              ZLENGTHM, ZLENGTHH, ZMFMOIST,                                          &
+              XBL_DEPTH, XSBL_DEPTH,                                                 &
               XCEI, XCEI_MIN, XCEI_MAX, XCOEF_AMPL_SAT,                              &
               XTHT, XRT,                                                             &
               XRUS, XRVS, XRWS, XRTHS, XRRS, XRSVS, XRTKES, XRTKEMS, XSIGS, XWTHVMF, &
-              XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, XTR, XDISS, XLEM           )
+              XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, XTR, XDISS, XLEM,          &
+              TBUDGETS, KBUDGETS=SIZE(TBUDGETS)      )
 !
 IF (LRMC01) THEN
   CALL ADD2DFIELD_ll( TZFIELDS_ll, XSBL_DEPTH, 'PHYS_PARAM_n::XSBL_DEPTH' )
diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90
index 61d4a38a8..fe77e35d3 100644
--- a/src/mesonh/ext/resolved_cloud.f90
+++ b/src/mesonh/ext/resolved_cloud.f90
@@ -477,6 +477,8 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZICEFR
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZPRCFR
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZTM
+REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZSIGQSAT2D
+ZSIGQSAT2D(:,:) = PSIGQSAT
 !
 !------------------------------------------------------------------------------
 !
@@ -741,8 +743,8 @@ SELECT CASE ( HCLOUD )
     ZZZ = MZF( PZZ )
     IF(LRED .AND. LADJ_BEFORE) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                      'ADJU', OSUBG_COND, OSIGMAS, CSUBG_MF_PDF,               &
-                      PTSTEP, PSIGQSAT,                                        &
+                      'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,      &
+                      PTSTEP, ZSIGQSAT2D,                                      &
                       PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ,  &
                       ZEXN, PCF_MF, PRC_MF, PRI_MF,                            &
                       PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,        &
@@ -752,6 +754,7 @@ SELECT CASE ( HCLOUD )
                       PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4),              &
                       PRS=PRS(:,:,:,5)*PTSTEP,                                 &
                       PRG=PRS(:,:,:,6)*PTSTEP,                                 &
+                      TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS),               &
                       PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF,                    &
                       PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF                     )
     ENDIF
@@ -781,7 +784,7 @@ SELECT CASE ( HCLOUD )
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),            &
                     PINPRC,PINPRR, PEVAP3D,                    &
                     PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS,              &
-                    TBUDGETS,SIZE(TBUDGETS),                    &
+                    TBUDGETS,SIZE(TBUDGETS),           &
                     PSEA,PTOWN, PFPR=ZFPR                                )
     ELSE 
           CALL RAIN_ICE_RED (COUNT(LLMICRO), SIZE(PTHT, 1), SIZE(PTHT, 2), &
@@ -798,7 +801,7 @@ SELECT CASE ( HCLOUD )
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),            &
                     PINPRC,PINPRR,  PEVAP3D,                    &
                     PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS,              &
-                    TBUDGETS,SIZE(TBUDGETS),                    &
+                    TBUDGETS,SIZE(TBUDGETS),           &
                     PSEA,PTOWN, PFPR=ZFPR                                )
     END IF
 !
@@ -807,8 +810,8 @@ SELECT CASE ( HCLOUD )
 !
     IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                       'DEPI', OSUBG_COND, OSIGMAS, CSUBG_MF_PDF,              &
-                       PTSTEP, PSIGQSAT,                                       &
+                       'DEPI', OSUBG_COND, OSIGMAS, .FALSE.,CSUBG_MF_PDF,      &
+                       PTSTEP, ZSIGQSAT2D,                                     &
                        PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                        ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
                        PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
@@ -818,6 +821,7 @@ SELECT CASE ( HCLOUD )
                        PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4),             &
                        PRS=PRS(:,:,:,5)*PTSTEP,                                &
                        PRG=PRS(:,:,:,6)*PTSTEP,                                &
+                       TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS),              &
                        PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF,                   &
                        PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF                    )
     END IF
@@ -841,8 +845,8 @@ SELECT CASE ( HCLOUD )
     ZZZ = MZF( PZZ )
     IF(LRED .AND. LADJ_BEFORE) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                       'ADJU', OSUBG_COND, OSIGMAS, CSUBG_MF_PDF,              &
-                       PTSTEP, PSIGQSAT,                                       &
+                       'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,     &
+                       PTSTEP, ZSIGQSAT2D,                                     &
                        PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                        ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
                        PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
@@ -852,6 +856,7 @@ SELECT CASE ( HCLOUD )
                        PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4),             &
                        PRS=PRS(:,:,:,5)*PTSTEP,                                &
                        PRG=PRS(:,:,:,6)*PTSTEP,                                &
+                       TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS),              &
                        PRH=PRS(:,:,:,7)*PTSTEP,                                &
                        PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF,                   &
                        PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF                    )
@@ -912,8 +917,8 @@ SELECT CASE ( HCLOUD )
 !
     IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN
      CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,  &
-                     'DEPI', OSUBG_COND, OSIGMAS, CSUBG_MF_PDF,              &
-                     PTSTEP, PSIGQSAT,                                       &
+                     'DEPI', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,     &
+                     PTSTEP, ZSIGQSAT2D,                                     &
                      PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                      ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
                      PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
@@ -923,6 +928,7 @@ SELECT CASE ( HCLOUD )
                      PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4),             &
                      PRS=PRS(:,:,:,5)*PTSTEP,                                &
                      PRG=PRS(:,:,:,6)*PTSTEP,                                &
+                     TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS),              &
                      PRH=PRS(:,:,:,7)*PTSTEP,                                &
                      PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF,                   &
                      PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF                    )
diff --git a/src/mesonh/turb/modd_cturb.f90 b/src/mesonh/turb/modd_cturb.f90
index db23e955b..67ca557fa 100644
--- a/src/mesonh/turb/modd_cturb.f90
+++ b/src/mesonh/turb/modd_cturb.f90
@@ -87,5 +87,6 @@ REAL,SAVE :: XCTP         ! Constant for temperature and vapor pressure-correlat
 REAL,SAVE :: XPHI_LIM     ! Threshold value for Phi3 and Psi3
 REAL,SAVE :: XSBL_O_BL    ! SBL height / BL height ratio
 REAL,SAVE :: XFTOP_O_FSURF! Fraction of surface (heat or momentum) flux used to define top of BL
+LOGICAL,SAVE :: LHARAT    ! SWITCH HARATU
 !
 END MODULE MODD_CTURB
diff --git a/src/mesonh/turb/mode_prandtl.f90 b/src/mesonh/turb/mode_prandtl.f90
index 04dfe6155..964d66938 100644
--- a/src/mesonh/turb/mode_prandtl.f90
+++ b/src/mesonh/turb/mode_prandtl.f90
@@ -5,6 +5,8 @@
 !-----------------------------------------------------------------
 !    #################### 
      MODULE MODE_PRANDTL
+     USE PARKIND1, ONLY : JPRB
+     USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !    #################### 
 !
 !* modification 08/2010  V. Masson  smoothing of the discontinuity in functions 
@@ -14,11 +16,543 @@
 USE MODD_CTURB,      ONLY : XCTV, XCSHF, XCTD, XPHI_LIM, XCPR3, XCPR4, XCPR5
 USE MODD_PARAMETERS, ONLY : JPVEXT_TURB
 !
-USE MODI_SHUMAN
+USE MODI_SHUMAN, ONLY: MZM, MZF
 IMPLICIT NONE
 !----------------------------------------------------------------------------
 CONTAINS
 !----------------------------------------------------------------------------
+      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_DIAG,       &
+                         HTURBDIM,                             &
+                         TPFILE,                               &
+                         PDXX,PDYY,PDZZ,PDZX,PDZY,             &
+                         PTHVREF,PLOCPEXNM,PATHETA,PAMOIST,    &
+                         PLM,PLEPS,PTKEM,PTHLM,PRM,PSVM,PSRCM, &
+                         PREDTH1,PREDR1,                       &
+                         PRED2TH3, PRED2R3, PRED2THR3,         &
+                         PREDS1,PRED2THS3, PRED2RS3,           &
+                         PBLL_O_E,                             &
+                         PETHETA, PEMOIST                      )
+!     ###########################################################
+!
+!
+!!****  *PRANDTL* - routine to compute the Prandtl turbulent numbers
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this routine is to compute the Redelsperger 
+!     numbers and then get the turbulent Prandtl and Schmidt numbers:
+!       * for the heat fluxes     - PHI3 = 1/ Prandtl
+!       * for the moisture fluxes - PSI3 = 1/ Schmidt
+!
+!!**  METHOD
+!!    ------
+!!    The following steps are performed:
+!!
+!!     1 - default values of 1 are taken for phi3 and psi3 and different masks
+!!       are defined depending on the presence of turbulence, stratification and
+!!       humidity. The 1D Redelsperger numbers are computed  
+!!         * ZREDTH1 : (g / THVREF ) (LT**2 / TKE ) ETHETA (D Theta / Dz)   
+!!         * ZREDR1  : (g / THVREF ) (LT**2 / TKE ) EMOIST (D TW    / Dz)  
+!!     2 - 3D Redelsperger numbers are computed only for turbulent 
+!!       grid points where  ZREDTH1 or ZREDR1 are > 0.
+!!     3 - PHI3 is  computed only for turbulent grid points where ZREDTH1 > 0
+!!      (turbulent thermally stratified points)
+!!     4 - PSI3 is computed only for turbulent grid points where ZREDR1 > 0
+!!      (turbulent moist points)
+!!    
+!!
+!!    EXTERNAL
+!!    --------
+!!      FUNCTIONs ETHETA and EMOIST  :  
+!!            allows to compute the coefficients 
+!!            for the turbulent correlation between any variable
+!!            and the virtual potential temperature, of its correlations 
+!!            with the conservative potential temperature and the humidity 
+!!            conservative variable:
+!!            -------              -------              -------
+!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
+!!
+!!      GX_M_M, GY_M_M, GZ_M_M :  Cartesian gradient operators
+!!      MZM : Shuman function (mean operator in the z direction)
+!!      Module MODI_ETHETA    : interface module for ETHETA
+!!      Module MODI_EMOIST    : interface module for EMOIST
+!!      Module MODI_SHUMAN    : interface module for Shuman operators
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_CST : contains physical constants
+!!           XG         : gravity constant
+!!
+!!      Module MODD_CTURB: contains the set of constants for
+!!                        the turbulence scheme
+!!       XCTV,XCPR2    : constants for the turbulent prandtl numbers
+!!       XTKEMIN        : minimum value allowed for the TKE
+!!
+!!      Module MODD_PARAMETERS 
+!!       JPVEXT_TURB         : number of vertical marginal points
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book 2 of documentation (routine PRANDTL)
+!!      Book 1 of documentation (Chapter: Turbulence)
+!!
+!!    AUTHOR
+!!    ------
+!!      Joan Cuxart             * INM and Meteo-France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         18/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: March 21, 1995 (J. Cuxart and J.Stein)
+!!                                  Phi3 and Psi3 at w point + cleaning
+!!      Modifications: July 2, 1995 (J.Cuxart and Ph.Bougeault)
+!!                         change the value of Phi3 and Psi3 if negative
+!!      Modifications: Sept 20, 1995 (J. Stein, J. Cuxart, J.L. Redelsperger)
+!!                         remove the Where + use REDTH1+REDR1 for the tests
+!!      Modifications: October 10, 1995 (J. Cuxart and J.Stein)
+!!                         Psi3 for tPREDS1he scalar variables
+!!      Modifications: February 27, 1996 (J.Stein) optimization
+!!      Modifications: June 15, 1996 (P.Jabouille) return to the previous
+!!                          computation of Phi3 and Psi3
+!!      Modifications: October 10, 1996 (J. Stein) change the temporal
+!!                          discretization
+!!      Modifications: May 23, 1997 (J. Stein) bug in 3D Redels number at ground
+!!                                             with orography
+!!      Modifications: Feb 20, 1998 (J. Stein) bug in all the 3D cases due to
+!!                                             the use of ZW1 instead of ZW2
+!!                     Feb 20, 2003 (JP Pinty) Add PFRAC_ICE
+!!                     July    2005 (Tomas, Masson) implicitation of PHI3 and PSI3
+!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
+!!                                              change of YCOMMENT
+!!                     2012-02 Y. Seity,  add possibility to run with reversed 
+!!                                               vertical levels
+!!      Modifications: July 2015    (Wim de Rooy) LHARAT (Racmo turbulence) switch
+!!                     2017-09 J.Escobar, use epsilon XMNH_TINY_12 for R*4 
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!! JL Redelsperger 03/2021 : adding Ocean case for temperature only 
+!! --------------------------------------------------------------------------
+!       
+!*      0. DECLARATIONS
+!          ------------
+!
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!
+USE MODD_CST
+USE MODD_CONF
+USE MODD_CTURB
+USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_PARAMETERS
+!
+USE MODI_GRADIENT_M
+USE MODI_EMOIST
+USE MODI_ETHETA
+USE MODI_SHUMAN, ONLY: MZM
+USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
+!
+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)   :: KRR           ! number of moist var.
+INTEGER,                INTENT(IN)   :: KRRI          ! number of ice var.
+!
+LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
+                                 ! diagnostic fields in the syncronous FM-file
+CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
+TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
+                                                  ! metric coefficients
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF  ! Virtual Potential Temp.
+                                                  ! of the reference state
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM ! Lv(T)/Cp/Exner at t-1 
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM      ! Turbulent Mixing length
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS    ! Dissipative length
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM,PTKEM! Conservative Potential 
+                                                  ! Temperature and TKE at t-1
+REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM      ! Mixing ratios at  t-1
+                                                  ! with PRM(:,:,:,1) = cons.
+                                                  ! mixing ratio
+REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM     ! Scalars at t-1      
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM
+                                  ! s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
+!
+!
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDTH1 ! Redelsperger number R_theta
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDR1  ! Redelsperger number R_q
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2TH3 ! Redelsperger number R*2_theta
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2R3  ! Redelsperger number R*2_q
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2THR3! Redelsperger number R*2_thq
+REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PREDS1   ! Redelsperger number R_s
+REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2THS3! Redelsperger number R*2_thsv
+REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2RS3 ! Redelsperger number R*2_qsv
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PBLL_O_E! beta*Lk*Leps/tke
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PETHETA ! coefficient E_theta
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PEMOIST ! coefficient E_moist
+!
+!
+!       0.2  declaration of local variables
+!
+REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::  &
+                  ZW1, ZW2, ZW3
+!                                                 working variables
+!                                                     
+INTEGER :: IKB      ! vertical index value for the first inner mass point
+INTEGER :: IKE      ! vertical index value for the last inner mass point
+INTEGER             :: IRESP        ! Return code of FM routines
+INTEGER             :: ILENG        ! Length of the data field in LFIFM file
+INTEGER             :: IGRID        ! C-grid indicator in LFIFM file
+INTEGER             :: ILENCH       ! Length of comment string in LFIFM file
+CHARACTER (LEN=100) :: YCOMMENT     ! comment string in LFIFM file
+CHARACTER (LEN=16)  :: YRECFM       ! Name of the desired field in LFIFM file
+INTEGER::  ISV                      ! number of scalar variables       
+INTEGER::  JSV                      ! loop index for the scalar variables  
+
+INTEGER :: JLOOP
+REAL    :: ZMINVAL
+TYPE(TFIELDDATA)  :: TZFIELD
+! ---------------------------------------------------------------------------
+!
+!*      1.  DEFAULT VALUES,  1D REDELSPERGER NUMBERS 
+!           ----------------------------------------
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('PRANDTL',0,ZHOOK_HANDLE)
+
+IF (LHARAT) THEN
+PREDTH1(:,:,:)=0.
+PREDR1(:,:,:)=0.
+PRED2TH3(:,:,:)=0.
+PRED2R3(:,:,:)=0.
+PRED2THR3(:,:,:)=0.
+PREDS1(:,:,:,:)=0.
+PRED2THS3(:,:,:,:)=0.
+PRED2RS3(:,:,:,:)=0.
+PBLL_O_E(:,:,:)=0.
+ENDIF
+!
+IKB = KKA+JPVEXT_TURB*KKL
+IKE = KKU-JPVEXT_TURB*KKL 
+ILENG=SIZE(PTHLM,1)*SIZE(PTHLM,2)*SIZE(PTHLM,3)
+ISV  =SIZE(PSVM,4)
+!
+PETHETA(:,:,:) = MZM(ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM), KKA, KKU, KKL)
+PEMOIST(:,:,:) = MZM(EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM), KKA, KKU, KKL)
+PETHETA(:,:,KKA) = 2.*PETHETA(:,:,IKB) - PETHETA(:,:,IKB+KKL)
+PEMOIST(:,:,KKA) = 2.*PEMOIST(:,:,IKB) - PEMOIST(:,:,IKB+KKL)
+!
+!---------------------------------------------------------------------------
+IF (.NOT. LHARAT) THEN
+!
+!          1.3 1D Redelsperger numbers
+!
+PBLL_O_E(:,:,:) = MZM(XG / PTHVREF(:,:,:) * PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:), KKA, KKU, KKL)
+IF (KRR /= 0) THEN                ! moist case
+  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * &
+                   & GZ_M_W(KKA, KKU, KKL,PTHLM,PDZZ)
+  PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
+                   & GZ_M_W(KKA, KKU, KKL,PRM(:,:,:,1),PDZZ)
+ELSE                              ! dry case
+  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(KKA, KKU, KKL,PTHLM,PDZZ)
+  PREDR1(:,:,:) = 0.
+END IF
+!
+!       3. Limits on 1D Redelperger numbers
+!          --------------------------------
+!
+ZMINVAL = (1.-1./XPHI_LIM)
+!
+ZW1 = 1.
+ZW2 = 1.
+!
+WHERE (PREDTH1+PREDR1<-ZMINVAL)
+  ZW1 = (-ZMINVAL) / (PREDTH1+PREDR1)
+END WHERE
+!
+WHERE (PREDTH1<-ZMINVAL)
+  ZW2 = (-ZMINVAL) / (PREDTH1)
+END WHERE
+ZW2 = MIN(ZW1,ZW2)
+!
+ZW1 = 1.
+WHERE (PREDR1<-ZMINVAL)
+  ZW1 = (-ZMINVAL) / (PREDR1)
+END WHERE
+ZW1 = MIN(ZW2,ZW1)
+!
+!
+!       3. Modification of Mixing length and dissipative length
+!          ----------------------------------------------------
+!
+PBLL_O_E(:,:,:) = PBLL_O_E(:,:,:) * ZW1(:,:,:)
+PREDTH1 (:,:,:) = PREDTH1 (:,:,:) * ZW1(:,:,:)
+PREDR1  (:,:,:) = PREDR1  (:,:,:) * ZW1(:,:,:)
+!
+!       4. Threshold for very small (in absolute value) Redelperger numbers
+!          ----------------------------------------------------------------
+!
+ZW2=SIGN(1.,PREDTH1(:,:,:))
+PREDTH1(:,:,:)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDTH1(:,:,:))
+!
+IF (KRR /= 0) THEN                ! dry case
+  ZW2=SIGN(1.,PREDR1(:,:,:))
+  PREDR1(:,:,:)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDR1(:,:,:))
+END IF
+!
+!
+!---------------------------------------------------------------------------
+!
+!          For the scalar variables
+DO JSV=1,ISV
+  PREDS1(:,:,:,JSV)=XCTV*PBLL_O_E(:,:,:)*GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
+END DO
+!
+DO JSV=1,ISV
+  ZW2=SIGN(1.,PREDS1(:,:,:,JSV))
+  PREDS1(:,:,:,JSV)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDS1(:,:,:,JSV))
+END DO
+!
+!---------------------------------------------------------------------------
+!
+!*      2.  3D REDELSPERGER NUMBERS
+!           ------------------------
+!
+IF(HTURBDIM=='1DIM') THEN        ! 1D case
+!
+!
+  PRED2TH3(:,:,:)  = PREDTH1(:,:,:)**2
+!
+  PRED2R3(:,:,:)   = PREDR1(:,:,:) **2
+!
+  PRED2THR3(:,:,:) = PREDTH1(:,:,:) * PREDR1(:,:,:)
+!
+ELSE IF (L2D) THEN                      ! 3D case in a 2D model
+!
+  IF (KRR /= 0) THEN                 ! moist 3D case
+    PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2+(XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
+      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
+!
+    PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 * &
+        MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+KKL)
+!
+    PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  XCTV**2*PBLL_O_E(:,:,:)**2 *   &
+                  PEMOIST(:,:,:) * PETHETA(:,:,:) *                         &
+      MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*     &
+                     GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL), KKA, KKU, KKL)
+    PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+KKL)
+!
+  ELSE                 ! dry 3D case in a 2D model
+    PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  XCTV**2*PBLL_O_E(:,:,:)**2 *     &
+      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
+!
+    PRED2R3(:,:,:) = 0.
+!
+    PRED2THR3(:,:,:) = 0.
+!
+  END IF
+!
+ELSE                                 ! 3D case in a 3D model
+!
+  IF (KRR /= 0) THEN                 ! moist 3D case
+    PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2 +  ( XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
+      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2 &
+      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
+!
+    PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 *      &
+        MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2 + &
+        GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+KKL)
+!
+    PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  XCTV**2*PBLL_O_E(:,:,:)**2 *   &
+         PEMOIST(:,:,:) * PETHETA(:,:,:) *                            &
+         MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*   &
+         GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)+                           &
+         GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, KKA, KKU, KKL)*                    &
+         GY_M_M(PTHLM,PDYY,PDZZ,PDZY, KKA, KKU, KKL), KKA, KKU, KKL)
+    PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+KKL)
+!
+  ELSE                 ! dry 3D case in a 3D model
+    PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  XCTV**2*PBLL_O_E(:,:,:)**2 *                &
+      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)**2 &
+      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)**2, KKA, KKU, KKL)
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
+!
+    PRED2R3(:,:,:) = 0.
+!
+    PRED2THR3(:,:,:) = 0.
+!
+  END IF
+!
+END IF   ! end of the if structure on the turbulence dimensionnality
+!
+!
+!---------------------------------------------------------------------------
+!
+!           5. Prandtl numbers for scalars
+!              ---------------------------
+DO JSV=1,ISV
+!
+  IF(HTURBDIM=='1DIM') THEN
+!        1D case
+    PRED2THS3(:,:,:,JSV)  = PREDS1(:,:,:,JSV) * PREDTH1(:,:,:)
+    IF (KRR /= 0) THEN
+      PRED2RS3(:,:,:,JSV)   = PREDR1(:,:,:) *PREDS1(:,:,:,JSV)
+    ELSE
+      PRED2RS3(:,:,:,JSV)   = 0.
+    END IF
+!
+  ELSE  IF (L2D) THEN ! 3D case in a 2D model
+!
+    IF (KRR /= 0) THEN
+      ZW1 = MZM((XG / PTHVREF * PLM * PLEPS / PTKEM)**2, KKA, KKU, KKL) *PETHETA
+    ELSE
+      ZW1 = MZM((XG / PTHVREF * PLM * PLEPS / PTKEM)**2, KKA, KKU, KKL)
+    END IF
+    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZW1*                                              &
+                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*       &
+                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL),                 &
+                           KKA, KKU, KKL)
+!
+    IF (KRR /= 0) THEN
+      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZW1 * PEMOIST *                                   &
+                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*       &
+                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL),          &
+                           KKA, KKU, KKL)
+    ELSE
+      PRED2RS3(:,:,:,JSV) = 0.
+    END IF
+!
+  ELSE ! 3D case in a 3D model
+!
+    IF (KRR /= 0) THEN
+      ZW1 = MZM((XG / PTHVREF * PLM * PLEPS / PTKEM)**2, KKA, KKU, KKL) *PETHETA
+    ELSE
+      ZW1 = MZM((XG / PTHVREF * PLM * PLEPS / PTKEM)**2, KKA, KKU, KKL)
+    END IF
+    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZW1*                                              &
+                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*       &
+                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)                  &
+                          +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, KKA, KKU, KKL)*       &
+                           GY_M_M(PTHLM,PDYY,PDZZ,PDZY, KKA, KKU, KKL),                 &
+                           KKA, KKU, KKL)
+!
+    IF (KRR /= 0) THEN
+      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZW1 * PEMOIST *                                   &
+                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, KKA, KKU, KKL)*       &
+                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)           &
+                          +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, KKA, KKU, KKL)*       &
+                           GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, KKA, KKU, KKL),          &
+                           KKA, KKU, KKL)
+    ELSE
+      PRED2RS3(:,:,:,JSV) = 0.
+    END IF
+!
+  END IF ! end of HTURBDIM if-block
+!
+END DO
+!
+!---------------------------------------------------------------------------
+!
+!*          6. SAVES THE REDELSPERGER NUMBERS
+!              ------------------------------
+!
+IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN
+  !
+  ! stores the RED_TH1
+  TZFIELD%CMNHNAME   = 'RED_TH1'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'RED_TH1'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_TH1'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDTH1)
+  !
+  ! stores the RED_R1
+  TZFIELD%CMNHNAME   = 'RED_R1'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'RED_R1'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_R1'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDR1)
+  !
+  ! stores the RED2_TH3
+  TZFIELD%CMNHNAME   = 'RED2_TH3'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'RED2_TH3'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_TH3'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2TH3)
+  !
+  ! stores the RED2_R3
+  TZFIELD%CMNHNAME   = 'RED2_R3'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'RED2_R3'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_R3'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2R3)
+  !
+  ! stores the RED2_THR3
+  TZFIELD%CMNHNAME   = 'RED2_THR3'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'RED2_THR3'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_THR3'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2THR3)
+  !
+END IF
+!
+!---------------------------------------------------------------------------
+ENDIF ! (Done only if LHARAT is FALSE)
+!
+IF (LHOOK) CALL DR_HOOK('PRANDTL',1,ZHOOK_HANDLE)
+END SUBROUTINE PRANDTL
+!
 SUBROUTINE SMOOTH_TURB_FUNCT(PPHI3,PF_LIM,PF)
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PPHI3   ! Phi3
@@ -54,6 +588,8 @@ FUNCTION PHI3(PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: ZW1, ZW2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
@@ -97,6 +633,7 @@ END IF
 PHI3(:,:,IKB-1)=PHI3(:,:,IKB)
 PHI3(:,:,IKE+1)=PHI3(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',1,ZHOOK_HANDLE)
 END FUNCTION PHI3
 !----------------------------------------------------------------------------
 FUNCTION PSI_SV(PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
@@ -112,6 +649,8 @@ FUNCTION PSI_SV(PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
   INTEGER :: IKB, IKE
   INTEGER :: JSV
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
@@ -132,6 +671,7 @@ DO JSV=1,SIZE(PSI_SV,4)
   PSI_SV(:,:,IKE+1,JSV)=PSI_SV(:,:,IKE,JSV)
 END DO
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',1,ZHOOK_HANDLE)
 END FUNCTION PSI_SV
 !----------------------------------------------------------------------------
 FUNCTION D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
@@ -145,6 +685,8 @@ FUNCTION D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUS
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DTDZ_O_DDTDZ
   INTEGER :: IKB, IKE,JL,JK,JJ
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
@@ -204,6 +746,7 @@ CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3,D_PHI3DTDZ_O_DDTDZ)
 D_PHI3DTDZ_O_DDTDZ(:,:,IKB-1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKB)
 D_PHI3DTDZ_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
@@ -217,6 +760,8 @@ FUNCTION D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUS
    REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DRDZ_O_DDRDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
@@ -254,6 +799,7 @@ CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3,D_PHI3DRDZ_O_DDRDZ)
 D_PHI3DRDZ_O_DDRDZ(:,:,IKB-1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKB)
 D_PHI3DRDZ_O_DDRDZ(:,:,IKE+1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PHI3DTDZ2_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV)
@@ -268,6 +814,8 @@ FUNCTION D_PHI3DTDZ2_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURB
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DTDZ2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
@@ -320,6 +868,7 @@ CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3*2.*PDTDZ,D_PHI3DTDZ2_O_DDTDZ)
 D_PHI3DTDZ2_O_DDTDZ(:,:,IKB-1)=D_PHI3DTDZ2_O_DDTDZ(:,:,IKB)
 D_PHI3DTDZ2_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_WTH2(PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
@@ -331,6 +880,8 @@ FUNCTION M3_WTH_WTH2(PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_WTH2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
@@ -339,6 +890,7 @@ M3_WTH_WTH2(:,:,:) = XCSHF*PBLL_O_E*PETHETA*0.5/XCTD        &
 M3_WTH_WTH2(:,:,IKB-1)=M3_WTH_WTH2(:,:,IKB)
 M3_WTH_WTH2(:,:,IKE+1)=M3_WTH_WTH2(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_WTH2_O_DDTDZ(PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
@@ -351,6 +903,8 @@ FUNCTION D_M3_WTH_WTH2_O_DDTDZ(PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
@@ -361,9 +915,13 @@ D_M3_WTH_WTH2_O_DDTDZ(:,:,:) = (  0.5*XCSHF*PBLL_O_E*PETHETA*0.5/XCTD/PD &
 D_M3_WTH_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2TH(PREDTH1,PREDR1,PD,PKEFF,PTKE)
+FUNCTION M3_WTH_W2TH(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -372,18 +930,24 @@ FUNCTION M3_WTH_W2TH(PREDTH1,PREDR1,PD,PKEFF,PTKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_W2TH
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_WTH_W2TH(:,:,:) = XCSHF*PKEFF*1.5/MZM(PTKE)              &
+M3_WTH_W2TH(:,:,:) = XCSHF*PKEFF*1.5/MZM(PTKE, KKA, KKU, KKL)              &
   * (1. - 0.5*PREDR1*(1.+PREDR1)/PD ) / (1.+PREDTH1)
 !
 M3_WTH_W2TH(:,:,IKB-1)=M3_WTH_W2TH(:,:,IKB)
 M3_WTH_W2TH(:,:,IKE+1)=M3_WTH_W2TH(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
+FUNCTION D_M3_WTH_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -394,19 +958,25 @@ FUNCTION D_M3_WTH_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_WTH_W2TH_O_DDTDZ(:,:,:) = &
- - XCSHF*PKEFF*1.5/MZM(PTKE)/(1.+PREDTH1)**2*XCTV*PBLL_O_E*PETHETA  &
+ - XCSHF*PKEFF*1.5/MZM(PTKE, KKA, KKU, KKL)/(1.+PREDTH1)**2*XCTV*PBLL_O_E*PETHETA  &
  * (1. - 0.5*PREDR1*(1.+PREDR1)/PD*( 1.+(1.+PREDTH1)*(1.5+PREDR1+PREDTH1)/PD) )
 !
 D_M3_WTH_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_W2TH_O_DDTDZ(:,:,IKB)
 D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2R(PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_WTH_W2R(KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
@@ -416,17 +986,23 @@ FUNCTION M3_WTH_W2R(PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_W2R
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_WTH_W2R(:,:,:) = - XCSHF*PKEFF*0.75*XCTV*PBLL_O_E/MZM(PTKE)*PEMOIST*PDTDZ/PD
+M3_WTH_W2R(:,:,:) = - XCSHF*PKEFF*0.75*XCTV*PBLL_O_E/MZM(PTKE, KKA, KKU, KKL)*PEMOIST*PDTDZ/PD
 !
 M3_WTH_W2R(:,:,IKB-1)=M3_WTH_W2R(:,:,IKB)
 M3_WTH_W2R(:,:,IKE+1)=M3_WTH_W2R(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_WTH_W2R_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -437,18 +1013,24 @@ FUNCTION D_M3_WTH_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_W2R_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_WTH_W2R_O_DDTDZ(:,:,:) = - XCSHF*PKEFF*0.75*XCTV*PBLL_O_E/MZM(PTKE)*PEMOIST/PD &
+D_M3_WTH_W2R_O_DDTDZ(:,:,:) = - XCSHF*PKEFF*0.75*XCTV*PBLL_O_E/MZM(PTKE, KKA, KKU, KKL)*PEMOIST/PD &
                                      * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
 !
 D_M3_WTH_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKB)
 D_M3_WTH_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WR2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
+FUNCTION M3_WTH_WR2(KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
@@ -461,18 +1043,24 @@ FUNCTION M3_WTH_WR2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_WR2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_WTH_WR2(:,:,:) = - XCSHF*PKEFF*0.25*PBLL_O_E*XCTV*PEMOIST**2       &
-                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE))/XCTD*PDTDZ/PD
+                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), KKA, KKU, KKL)/XCTD*PDTDZ/PD
 !
 M3_WTH_WR2(:,:,IKB-1)=M3_WTH_WR2(:,:,IKB)
 M3_WTH_WR2(:,:,IKE+1)=M3_WTH_WR2(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+FUNCTION D_M3_WTH_WR2_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -486,19 +1074,25 @@ FUNCTION D_M3_WTH_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PB
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WR2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_WTH_WR2_O_DDTDZ(:,:,:) = - XCSHF*PKEFF*0.25*PBLL_O_E*XCTV*PEMOIST**2 &
-                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE))/XCTD/PD     &
+                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), KKA, KKU, KKL)/XCTD/PD     &
                            * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
 !
 D_M3_WTH_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WTHR(PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
+FUNCTION M3_WTH_WTHR(KKA,KKU,KKL,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
@@ -510,17 +1104,20 @@ FUNCTION M3_WTH_WTHR(PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
   REAL, DIMENSION(SIZE(PREDR1,1),SIZE(PREDR1,2),SIZE(PREDR1,3)) :: M3_WTH_WTHR
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-!M3_WTH_WTHR(:,:,:) = XCSHF*PKEFF*PEMOIST/MZM(PBETA*PTKE*PSQRT_TKE) &
+!M3_WTH_WTHR(:,:,:) = XCSHF*PKEFF*PEMOIST/MZM(PBETA*PTKE*PSQRT_TKE, KKA, KKU, KKL) &
 !                         *0.5*PLEPS/XCTD*(1+PREDR1)/PD
-M3_WTH_WTHR(:,:,:) = XCSHF*PKEFF*PEMOIST*MZM(PBETA/PTKE*PSQRT_TKE) &
+M3_WTH_WTHR(:,:,:) = XCSHF*PKEFF*PEMOIST*MZM(PBETA/PTKE*PSQRT_TKE, KKA, KKU, KKL) &
                          *0.5*PLEPS/XCTD*(1+PREDR1)/PD
 !
 M3_WTH_WTHR(:,:,IKB-1)=M3_WTH_WTHR(:,:,IKB)
 M3_WTH_WTHR(:,:,IKE+1)=M3_WTH_WTHR(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_WTHR_O_DDTDZ(PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
@@ -533,6 +1130,8 @@ FUNCTION D_M3_WTH_WTHR_O_DDTDZ(PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
@@ -541,9 +1140,13 @@ D_M3_WTH_WTHR_O_DDTDZ(:,:,:) = - PM3_WTH_WTHR * (1.5+PREDTH1+PREDR1)/PD*XCTV*PBL
 D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2TH(PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
+FUNCTION M3_TH2_W2TH(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -554,18 +1157,24 @@ FUNCTION M3_TH2_W2TH(PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_W2TH
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_W2TH(:,:,:) = - MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)/(1.+PREDTH1)*PDTDZ) &
+M3_TH2_W2TH(:,:,:) = - MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)/(1.+PREDTH1)*PDTDZ, KKA, KKU, KKL) &
                        * 1.5*PLM*PLEPS/PTKE*XCTV
 !
 M3_TH2_W2TH(:,:,IKB-1)=M3_TH2_W2TH(:,:,IKB)
 M3_TH2_W2TH(:,:,IKE+1)=M3_TH2_W2TH(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
+FUNCTION D_M3_TH2_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -576,27 +1185,33 @@ FUNCTION D_M3_TH2_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 IF (OUSERV) THEN
 !  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*XCTV * MZF(                    &
 !          (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*(1.+PREDTH1)/PD )  &
-!        / (1.+PREDTH1)**2                                        )
-  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*XCTV * MZF(    &
+!        / (1.+PREDTH1)**2, KKA, KKU, KKL)
+  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*XCTV * MZF( &
           (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*   &
-             PREDTH1*(1.+PREDTH1)/PD ) / (1.+PREDTH1)**2      )
+             PREDTH1*(1.+PREDTH1)/PD ) / (1.+PREDTH1)**2, KKA, KKU, KKL)
 
 ELSE
-  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*XCTV * MZF(1./(1.+PREDTH1)**2)
+  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*XCTV * MZF(1./(1.+PREDTH1)**2, KKA, KKU, KKL)
 END IF
 !
 D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB)
 D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTH2(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_TH2_WTH2(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -605,18 +1220,24 @@ FUNCTION M3_TH2_WTH2(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WTH2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_TH2_WTH2(:,:,:) = PLEPS*0.5/XCTD/PSQRT_TKE          &
-  * MZF( (1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD )
+  * MZF((1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD, KKA, KKU, KKL)
 !
 M3_TH2_WTH2(:,:,IKB-1)=M3_TH2_WTH2(:,:,IKB)
 M3_TH2_WTH2(:,:,IKE+1)=M3_TH2_WTH2(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTH2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_TH2_WTH2_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -627,20 +1248,26 @@ FUNCTION D_M3_TH2_WTH2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHET
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_TH2_WTH2_O_DDTDZ(:,:,:) = PLEPS*0.5/XCTD/PSQRT_TKE*XCTV                        &
- * MZF( PBLL_O_E*PETHETA* (0.5/PD                                                   &
+ * MZF(PBLL_O_E*PETHETA* (0.5/PD                                                   &
              - (1.5+PREDTH1+PREDR1)*(1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD**2 &
-                           )  )
+                           ), KKA, KKU, KKL)
 !
 D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2R(PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_W2R(KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -651,17 +1278,23 @@ FUNCTION M3_TH2_W2R(PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_W2R
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_W2R(:,:,:) = 0.75*XCTV**2*MZF(PBLL_O_E*PEMOIST/PD*PDTDZ**2)*PLM*PLEPS/PTKE
+M3_TH2_W2R(:,:,:) = 0.75*XCTV**2*MZF(PBLL_O_E*PEMOIST/PD*PDTDZ**2, KKA, KKU, KKL)*PLM*PLEPS/PTKE
 !
 M3_TH2_W2R(:,:,IKB-1)=M3_TH2_W2R(:,:,IKB)
 M3_TH2_W2R(:,:,IKE+1)=M3_TH2_W2R(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_W2R_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -674,18 +1307,24 @@ FUNCTION D_M3_TH2_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_W2R_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_TH2_W2R_O_DDTDZ(:,:,:) = 0.75*XCTV**2*PLM*PLEPS/PTKE &
- * MZF( PBLL_O_E*PEMOIST/PD*PDTDZ*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD) )
+ * MZF(PBLL_O_E*PEMOIST/PD*PDTDZ*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
 !
 D_M3_TH2_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKB)
 D_M3_TH2_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WR2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_WR2(KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
@@ -695,17 +1334,23 @@ FUNCTION M3_TH2_WR2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WR2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_WR2(:,:,:) = 0.25*XCTV**2*MZF((PBLL_O_E*PEMOIST*PDTDZ)**2/PD)*PLEPS/PSQRT_TKE/XCTD
+M3_TH2_WR2(:,:,:) = 0.25*XCTV**2*MZF((PBLL_O_E*PEMOIST*PDTDZ)**2/PD, KKA, KKU, KKL)*PLEPS/PSQRT_TKE/XCTD
 !
 M3_TH2_WR2(:,:,IKB-1)=M3_TH2_WR2(:,:,IKB)
 M3_TH2_WR2(:,:,IKE+1)=M3_TH2_WR2(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_WR2_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -717,18 +1362,24 @@ FUNCTION D_M3_TH2_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WR2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_TH2_WR2_O_DDTDZ(:,:,:) = 0.25*XCTV**2*PLEPS/PSQRT_TKE/XCTD &
-  *  MZF( (PBLL_O_E*PEMOIST)**2*PDTDZ/PD*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD) )
+  *  MZF((PBLL_O_E*PEMOIST)**2*PDTDZ/PD*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
 !
 D_M3_TH2_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTHR(PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_WTHR(KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -739,18 +1390,24 @@ FUNCTION M3_TH2_WTHR(PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WTHR
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_TH2_WTHR(:,:,:) = - 0.5*XCTV*PLEPS/PSQRT_TKE/XCTD &
- * MZF( PBLL_O_E*PEMOIST*PDTDZ*(1.+PREDR1)/PD )
+ * MZF(PBLL_O_E*PEMOIST*PDTDZ*(1.+PREDR1)/PD, KKA, KKU, KKL)
 !
 M3_TH2_WTHR(:,:,IKB-1)=M3_TH2_WTHR(:,:,IKB)
 M3_TH2_WTHR(:,:,IKE+1)=M3_TH2_WTHR(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTHR_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_WTHR_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -762,18 +1419,24 @@ FUNCTION D_M3_TH2_WTHR_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIS
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_TH2_WTHR_O_DDTDZ(:,:,:) = - 0.5*XCTV*PLEPS/PSQRT_TKE/XCTD &
- * MZF( PBLL_O_E*PEMOIST*(1.+PREDR1)/PD * (1. -PREDTH1*(1.5+PREDTH1+PREDR1)/PD) )
+ * MZF(PBLL_O_E*PEMOIST*(1.+PREDR1)/PD * (1. -PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
 !
 D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTHR(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_THR_WTHR(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -782,18 +1445,24 @@ FUNCTION M3_THR_WTHR(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WTHR
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_THR_WTHR(:,:,:) = 0.5*PLEPS/PSQRT_TKE/XCTD &
- * MZF( (1.+PREDTH1)*(1.+PREDR1)/PD )
+ * MZF((1.+PREDTH1)*(1.+PREDR1)/PD, KKA, KKU, KKL)
 !
 M3_THR_WTHR(:,:,IKB-1)=M3_THR_WTHR(:,:,IKB)
 M3_THR_WTHR(:,:,IKE+1)=M3_THR_WTHR(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_THR_WTHR_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -804,18 +1473,24 @@ FUNCTION D_M3_THR_WTHR_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHET
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_THR_WTHR_O_DDTDZ(:,:,:) = 0.5*PLEPS/PSQRT_TKE/XCTD * XCTV &
- * MZF( PETHETA*PBLL_O_E/PD*(1.+PREDR1)*(1.-(1.+PREDTH1)*(1.5+PREDTH1+PREDR1)/PD) )
+ * MZF(PETHETA*PBLL_O_E/PD*(1.+PREDR1)*(1.-(1.+PREDTH1)*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
 !
 D_M3_THR_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_THR_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTH2(PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_THR_WTH2(KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -826,18 +1501,24 @@ FUNCTION M3_THR_WTH2(PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WTH2
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_THR_WTH2(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/XCTD*XCTV &
- * MZF( (1.+PREDR1)*PBLL_O_E*PETHETA*PDRDZ/PD )
+ * MZF((1.+PREDR1)*PBLL_O_E*PETHETA*PDRDZ/PD, KKA, KKU, KKL)
 !
 M3_THR_WTH2(:,:,IKB-1)=M3_THR_WTH2(:,:,IKB)
 M3_THR_WTH2(:,:,IKE+1)=M3_THR_WTH2(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_THR_WTH2_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -849,18 +1530,24 @@ FUNCTION D_M3_THR_WTH2_O_DDTDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHET
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_THR_WTH2_O_DDTDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/XCTD*XCTV**2 &
- * MZF( -(1.+PREDR1)*(PBLL_O_E*PETHETA/PD)**2*PDRDZ*(1.5+PREDTH1+PREDR1) )
+ * MZF(-(1.+PREDR1)*(PBLL_O_E*PETHETA/PD)**2*PDRDZ*(1.5+PREDTH1+PREDR1), KKA, KKU, KKL)
 !
 D_M3_THR_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_THR_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDRDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_THR_WTH2_O_DDRDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -871,20 +1558,26 @@ FUNCTION D_M3_THR_WTH2_O_DDRDZ(PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHET
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTH2_O_DDRDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_THR_WTH2_O_DDRDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/XCTD*XCTV          &
- * MZF( PBLL_O_E*PETHETA/PD                                              &
-       *(-(1.+PREDR1)*PREDR1/PD*(1.5+PREDTH1+PREDR1)+(1.+2.*PREDR1))     &
-      )
+ * MZF(PBLL_O_E*PETHETA/PD                                              &
+       *(-(1.+PREDR1)*PREDR1/PD*(1.5+PREDTH1+PREDR1)+(1.+2.*PREDR1)),     &
+       KKA, KKU, KKL)
 !
 D_M3_THR_WTH2_O_DDRDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKB)
 D_M3_THR_WTH2_O_DDRDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2TH(PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
+FUNCTION M3_THR_W2TH(KKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
@@ -894,18 +1587,24 @@ FUNCTION M3_THR_W2TH(PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_W2TH
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 M3_THR_W2TH(:,:,:) = - 0.75*PLM*PLEPS/PTKE * XCTV      &
- * MZF( (1.+PREDR1)*PDRDZ/PD )
+ * MZF((1.+PREDR1)*PDRDZ/PD, KKA, KKU, KKL)
 !
 M3_THR_W2TH(:,:,IKB-1)=M3_THR_W2TH(:,:,IKB)
 M3_THR_W2TH(:,:,IKE+1)=M3_THR_W2TH(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
+FUNCTION D_M3_THR_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -918,19 +1617,25 @@ FUNCTION D_M3_THR_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,P
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_THR_W2TH_O_DDTDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * XCTV**2    &
- * MZF( -PETHETA*PBLL_O_E*(1.+PREDR1)*PDRDZ*(1.5+PREDTH1+PREDR1)/PD**2 )
+ * MZF(-PETHETA*PBLL_O_E*(1.+PREDR1)*PDRDZ*(1.5+PREDTH1+PREDR1)/PD**2, KKA, KKU, KKL)
 
 !
 D_M3_THR_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKB)
 D_M3_THR_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDRDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
+FUNCTION D_M3_THR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -940,18 +1645,21 @@ FUNCTION D_M3_THR_W2TH_O_DDRDZ(PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2TH_O_DDRDZ
   INTEGER :: IKB, IKE
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
 D_M3_THR_W2TH_O_DDRDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * XCTV     &
- * MZF( -(1.+PREDR1)*PREDR1*(1.5+PREDTH1+PREDR1)/PD**2          &
-        +(1.+2.*PREDR1)/PD                                      &
-      )
+ * MZF(-(1.+PREDR1)*PREDR1*(1.5+PREDTH1+PREDR1)/PD**2          &
+        +(1.+2.*PREDR1)/PD,                                    &
+       KKA, KKU, KKL)
 
 !
 D_M3_THR_W2TH_O_DDRDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKB)
 D_M3_THR_W2TH_O_DDRDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
@@ -967,8 +1675,11 @@ FUNCTION PSI3(PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: PSI3
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',0,ZHOOK_HANDLE)
 PSI3 = PHI3(PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
 END FUNCTION PSI3
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
@@ -981,10 +1692,13 @@ FUNCTION D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSE
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DRDZ_O_DDRDZ
 
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
 D_PSI3DRDZ_O_DDRDZ = D_PHI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
 !
 !C'est ok?!
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
@@ -997,8 +1711,11 @@ FUNCTION D_PSI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSE
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DTDZ_O_DDTDZ
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
 D_PSI3DTDZ_O_DDTDZ = D_PHI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DRDZ2_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
@@ -1012,8 +1729,11 @@ FUNCTION D_PSI3DRDZ2_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBD
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DRDZ2_O_DDRDZ
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',0,ZHOOK_HANDLE)
 D_PSI3DRDZ2_O_DDRDZ = D_PHI3DTDZ2_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_WR2(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
@@ -1024,8 +1744,11 @@ FUNCTION M3_WR_WR2(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WR2
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',0,ZHOOK_HANDLE)
 M3_WR_WR2 = M3_WTH_WTH2(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_WR2_O_DDRDZ(PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
@@ -1037,11 +1760,17 @@ FUNCTION D_M3_WR_WR2_O_DDRDZ(PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WR2_O_DDRDZ
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
 D_M3_WR_WR2_O_DDRDZ = D_M3_WTH_WTH2_O_DDTDZ(PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2R(PREDR1,PREDTH1,PD,PKEFF,PTKE)
+FUNCTION M3_WR_W2R(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1049,11 +1778,17 @@ FUNCTION M3_WR_W2R(PREDR1,PREDTH1,PD,PKEFF,PTKE)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2R
 !
-M3_WR_W2R = M3_WTH_W2TH(PREDR1,PREDTH1,PD,PKEFF,PTKE)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',0,ZHOOK_HANDLE)
+M3_WR_W2R = M3_WTH_W2TH(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+FUNCTION D_M3_WR_W2R_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1063,11 +1798,17 @@ FUNCTION D_M3_WR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2R_O_DDRDZ
 !
-D_M3_WR_W2R_O_DDRDZ = D_M3_WTH_W2TH_O_DDTDZ(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_WR_W2R_O_DDRDZ = D_M3_WTH_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2TH(PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_WR_W2TH(KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
@@ -1076,11 +1817,17 @@ FUNCTION M3_WR_W2TH(PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2TH
 !
-M3_WR_W2TH = M3_WTH_W2R(PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',0,ZHOOK_HANDLE)
+M3_WR_W2TH = M3_WTH_W2R(KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2TH_O_DDRDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_WR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1090,11 +1837,17 @@ FUNCTION D_M3_WR_W2TH_O_DDRDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2TH_O_DDRDZ
 !
-D_M3_WR_W2TH_O_DDRDZ = D_M3_WTH_W2R_O_DDTDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_WR_W2TH_O_DDRDZ = D_M3_WTH_W2R_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTH2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+FUNCTION M3_WR_WTH2(KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
@@ -1106,11 +1859,17 @@ FUNCTION M3_WR_WTH2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTH2
 !
-M3_WR_WTH2 = M3_WTH_WR2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',0,ZHOOK_HANDLE)
+M3_WR_WTH2 = M3_WTH_WR2(KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+FUNCTION D_M3_WR_WTH2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1123,11 +1882,17 @@ FUNCTION D_M3_WR_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PB
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WTH2_O_DDRDZ
 !
-D_M3_WR_WTH2_O_DDRDZ = D_M3_WTH_WR2_O_DDTDZ(PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_WR_WTH2_O_DDRDZ = D_M3_WTH_WR2_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTHR(PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+FUNCTION M3_WR_WTHR(KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
@@ -1138,11 +1903,17 @@ FUNCTION M3_WR_WTHR(PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTHR
 !
-M3_WR_WTHR = M3_WTH_WTHR(PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',0,ZHOOK_HANDLE)
+M3_WR_WTHR = M3_WTH_WTHR(KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTHR_O_DDRDZ(PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_WR_WTHR_O_DDRDZ(KKA,KKU,KKL,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WR_WTHR
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
@@ -1151,11 +1922,17 @@ FUNCTION D_M3_WR_WTHR_O_DDRDZ(PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WTHR_O_DDRDZ
 !
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
 D_M3_WR_WTHR_O_DDRDZ = D_M3_WTH_WTHR_O_DDTDZ(PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2R(PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+FUNCTION M3_R2_W2R(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1165,11 +1942,17 @@ FUNCTION M3_R2_W2R(PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2R
 !
-M3_R2_W2R = M3_TH2_W2TH(PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',0,ZHOOK_HANDLE)
+M3_R2_W2R = M3_TH2_W2TH(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+FUNCTION D_M3_R2_W2R_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1179,11 +1962,17 @@ FUNCTION D_M3_R2_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
   LOGICAL,                INTENT(IN) :: OUSERV
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2R_O_DDRDZ
 !
-D_M3_R2_W2R_O_DDRDZ = D_M3_TH2_W2TH_O_DDTDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_R2_W2R_O_DDRDZ = D_M3_TH2_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WR2(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_R2_WR2(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1191,11 +1980,17 @@ FUNCTION M3_R2_WR2(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WR2
 !
-M3_R2_WR2 = M3_TH2_WTH2(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',0,ZHOOK_HANDLE)
+M3_R2_WR2 = M3_TH2_WTH2(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WR2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_R2_WR2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1205,11 +2000,17 @@ FUNCTION D_M3_R2_WR2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WR2_O_DDRDZ
 !
-D_M3_R2_WR2_O_DDRDZ = D_M3_TH2_WTH2_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_R2_WR2_O_DDRDZ = D_M3_TH2_WTH2_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2TH(PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_W2TH(KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -1219,11 +2020,17 @@ FUNCTION M3_R2_W2TH(PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2TH
 !
-M3_R2_W2TH = M3_TH2_W2R(PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',0,ZHOOK_HANDLE)
+M3_R2_W2TH = M3_TH2_W2R(KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2TH_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1235,11 +2042,17 @@ FUNCTION D_M3_R2_W2TH_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2TH_O_DDRDZ
 !
-D_M3_R2_W2TH_O_DDRDZ = D_M3_TH2_W2R_O_DDTDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_R2_W2TH_O_DDRDZ = D_M3_TH2_W2R_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTH2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_WTH2(KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
@@ -1248,11 +2061,17 @@ FUNCTION M3_R2_WTH2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTH2
 !
-M3_R2_WTH2 = M3_TH2_WR2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',0,ZHOOK_HANDLE)
+M3_R2_WTH2 = M3_TH2_WR2(KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_WTH2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1263,11 +2082,17 @@ FUNCTION D_M3_R2_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTH2_O_DDRDZ
 !
-D_M3_R2_WTH2_O_DDRDZ = D_M3_TH2_WR2_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_R2_WTH2_O_DDRDZ = D_M3_TH2_WR2_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTHR(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_WTHR(KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -1277,11 +2102,17 @@ FUNCTION M3_R2_WTHR(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTHR
 !
-M3_R2_WTHR = M3_TH2_WTHR(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',0,ZHOOK_HANDLE)
+M3_R2_WTHR = M3_TH2_WTHR(KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTHR_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_WTHR_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1292,11 +2123,17 @@ FUNCTION D_M3_R2_WTHR_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTHR_O_DDRDZ
 !
-D_M3_R2_WTHR_O_DDRDZ = D_M3_TH2_WTHR_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_R2_WTHR_O_DDRDZ = D_M3_TH2_WTHR_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_THR_WTHR_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1306,11 +2143,17 @@ FUNCTION D_M3_THR_WTHR_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIS
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTHR_O_DDRDZ
 !
-D_M3_THR_WTHR_O_DDRDZ = D_M3_THR_WTHR_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_THR_WTHR_O_DDRDZ = D_M3_THR_WTHR_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WR2(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_THR_WR2(KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
@@ -1320,11 +2163,17 @@ FUNCTION M3_THR_WR2(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WR2
 !
-M3_THR_WR2 = M3_THR_WTH2(PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',0,ZHOOK_HANDLE)
+M3_THR_WR2 = M3_THR_WTH2(KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_THR_WR2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1335,11 +2184,17 @@ FUNCTION D_M3_THR_WR2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDRDZ
 !
-D_M3_THR_WR2_O_DDRDZ = D_M3_THR_WTH2_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_THR_WR2_O_DDRDZ = D_M3_THR_WTH2_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_THR_WR2_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1349,11 +2204,17 @@ FUNCTION D_M3_THR_WR2_O_DDTDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDTDZ
 !
-D_M3_THR_WR2_O_DDTDZ = D_M3_THR_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
+D_M3_THR_WR2_O_DDTDZ = D_M3_THR_WTH2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2R(PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+FUNCTION M3_THR_W2R(KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
@@ -1362,11 +2223,17 @@ FUNCTION M3_THR_W2R(PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_W2R
 !
-M3_THR_W2R = M3_THR_W2TH(PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',0,ZHOOK_HANDLE)
+M3_THR_W2R = M3_THR_W2TH(KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+FUNCTION D_M3_THR_W2R_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1378,11 +2245,17 @@ FUNCTION D_M3_THR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PE
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDRDZ
 !
-D_M3_THR_W2R_O_DDRDZ = D_M3_THR_W2TH_O_DDTDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
+D_M3_THR_W2R_O_DDRDZ = D_M3_THR_W2TH_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDTDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+FUNCTION D_M3_THR_W2R_O_DDTDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+  INTEGER,                INTENT(IN) :: KKA 
+  INTEGER,                INTENT(IN) :: KKU  
+  INTEGER,                INTENT(IN) :: KKL
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
@@ -1391,9 +2264,13 @@ FUNCTION D_M3_THR_W2R_O_DDTDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
   REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
   REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDTDZ
 !
-D_M3_THR_W2R_O_DDTDZ = D_M3_THR_W2TH_O_DDRDZ(PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
+D_M3_THR_W2R_O_DDTDZ = D_M3_THR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
 !
+IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
 !
 END MODULE MODE_PRANDTL
+
diff --git a/src/mesonh/turb/mode_turb_ver_dyn_flux.f90 b/src/mesonh/turb/mode_turb_ver_dyn_flux.f90
index 4473628de..f103db1a7 100644
--- a/src/mesonh/turb/mode_turb_ver_dyn_flux.f90
+++ b/src/mesonh/turb/mode_turb_ver_dyn_flux.f90
@@ -543,7 +543,7 @@ IF(HTURBDIM=='3DIM') THEN
     CALL SECOND_MNH(ZTIME1)
     CALL LES_MEAN_SUBGRID(MZF(MXF(GX_W_UW(PWM,PDXX,&
       PDZZ,PDZX, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_W_SBG_UaW )
-    CALL LES_MEAN_SUBGRID(MXF(GX_M_U(PTHLM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)&
+    CALL LES_MEAN_SUBGRID(MXF(GX_M_U(KKA, KKU, KKL,PTHLM,PDXX,PDZZ,PDZX)&
       * MZF(ZFLXZ, KKA, KKU, KKL)), X_LES_RES_ddxa_Thl_SBG_UaW )
     IF (KRR>=1) THEN
       CALL LES_MEAN_SUBGRID(MXF(GX_U_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)&
@@ -723,7 +723,7 @@ IF(HTURBDIM=='3DIM') THEN
     CALL LES_MEAN_SUBGRID(MZF(MYF(GY_W_VW(PWM,PDYY,&
                          &PDZZ,PDZY, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), &
                          &X_LES_RES_ddxa_W_SBG_UaW , .TRUE. )
-    CALL LES_MEAN_SUBGRID(MYF(GY_M_V(PTHLM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)*&
+    CALL LES_MEAN_SUBGRID(MYF(GY_M_V(KKA, KKU, KKL,PTHLM,PDYY,PDZZ,PDZY)*&
                          &MZF(ZFLXZ, KKA, KKU, KKL)), &
                          &X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. )
     IF (KRR>=1) THEN
diff --git a/src/mesonh/turb/mode_turb_ver_sv_corr.f90 b/src/mesonh/turb/mode_turb_ver_sv_corr.f90
index f140c0792..786bcfdcc 100644
--- a/src/mesonh/turb/mode_turb_ver_sv_corr.f90
+++ b/src/mesonh/turb/mode_turb_ver_sv_corr.f90
@@ -138,7 +138,7 @@ DO JSV=1,NSV
   !
   IF (LLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
-    ZFLXZ(:,:,:) =  PPSI_SV(:,:,:,JSV)*GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)**2
+    ZFLXZ(:,:,:) =  PPSI_SV(:,:,:,JSV)*GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)**2
     ZFLXZ(:,:,:) = XCHF / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), KKA, KKU, KKL)
     CALL LES_MEAN_SUBGRID(-2.*ZCSVD*SQRT(PTKEM)*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) )
     CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
@@ -150,8 +150,8 @@ DO JSV=1,NSV
     ! approximation: diagnosed explicitely (without implicit term)
     ZA(:,:,:)   =  ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM)
     ZFLXZ(:,:,:)= ( XCSHF * PPHI3 + XCHF * PPSI_SV(:,:,:,JSV) )              &
-                  *  GZ_M_W(PTHLM,PDZZ, KKA, KKU, KKL)                          &
-                  *  GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)
+                  *  GZ_M_W(KKA, KKU, KKL,PTHLM,PDZZ)                          &
+                  *  GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
     ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCTSVD) * MZF(ZFLXZ, KKA, KKU, KKL)
     CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) ) 
     CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
@@ -159,8 +159,8 @@ DO JSV=1,NSV
     IF (KRR>=1) THEN
       ZA(:,:,:)   =  EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM)
       ZFLXZ(:,:,:)= ( XCHF * PPSI3 + XCHF * PPSI_SV(:,:,:,JSV) )             &
-                    *  GZ_M_W(PRM(:,:,:,1),PDZZ, KKA, KKU, KKL)                 &
-                    *  GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)
+                    *  GZ_M_W(KKA, KKU, KKL,PRM(:,:,:,1),PDZZ)                 &
+                    *  GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
       ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCQSVD) * MZF(ZFLXZ, KKA, KKU, KKL)
       CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
       CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
diff --git a/src/mesonh/turb/mode_turb_ver_sv_flux.f90 b/src/mesonh/turb/mode_turb_ver_sv_flux.f90
index 9ef220cf8..ada376d53 100644
--- a/src/mesonh/turb/mode_turb_ver_sv_flux.f90
+++ b/src/mesonh/turb/mode_turb_ver_sv_flux.f90
@@ -429,7 +429,7 @@ ENDIF
     CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WSv(:,:,:,JSV) )
     CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL), &
                           X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(MZF(GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), &
+    CALL LES_MEAN_SUBGRID(MZF(GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)*ZFLXZ, KKA, KKU, KKL), &
                           X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) )
     CALL LES_MEAN_SUBGRID(-ZCSVP*SQRT(PTKEM)/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_SvPz(:,:,:,JSV) )
     CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
diff --git a/src/mesonh/turb/mode_turb_ver_thermo_corr.f90 b/src/mesonh/turb/mode_turb_ver_thermo_corr.f90
index 3d420f393..7913b4e6a 100644
--- a/src/mesonh/turb/mode_turb_ver_thermo_corr.f90
+++ b/src/mesonh/turb/mode_turb_ver_thermo_corr.f90
@@ -852,8 +852,12 @@ ENDIF
     ! Extrapolate PSIGS at the ground and at the top
     PSIGS(:,:,KKA) = PSIGS(:,:,IKB)
     PSIGS(:,:,KKU) = PSIGS(:,:,IKE)
-    PSIGS(:,:,:) =   MAX (PSIGS(:,:,:) , 0.)
+#ifdef REPRO48
+    PSIGS(:,:,:) =  MAX (PSIGS(:,:,:) , 0.)
     PSIGS(:,:,:) =  SQRT(PSIGS(:,:,:))
+#else
+    PSIGS(:,:,:) =  SQRT( MAX (PSIGS(:,:,:) , 1.E-12) )
+#endif
   END IF
 
 !
diff --git a/src/mesonh/turb/mode_turb_ver_thermo_flux.f90 b/src/mesonh/turb/mode_turb_ver_thermo_flux.f90
index 7a79162a4..f96471652 100644
--- a/src/mesonh/turb/mode_turb_ver_thermo_flux.f90
+++ b/src/mesonh/turb/mode_turb_ver_thermo_flux.f90
@@ -466,7 +466,7 @@ END IF
 !
 ! d(w'2r')/dz
 IF (GFWR) THEN
-  ZF       = ZF       + M3_WTH_W2R(KKA,KKU,KKL,PREDTH1,PREDR1,PD,ZKEFF,&
+  ZF       = ZF       + M3_WTH_W2R(KKA,KKU,KKL,PD,ZKEFF,&
     & PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * PFWR
   ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2R_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,&
     & PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST) * PFWR
@@ -474,7 +474,7 @@ END IF
 !
 ! d(w'r'2)/dz
 IF (GFR2) THEN
-  ZF       = ZF       + M3_WTH_WR2(KKA,KKU,KKL,PREDTH1,PREDR1,PD,ZKEFF,PTKEM,&
+  ZF       = ZF       + M3_WTH_WR2(KKA,KKU,KKL,PD,ZKEFF,PTKEM,&
     & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ) * MZM(PFR2, KKA, KKU, KKL)
   ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WR2_O_DDTDZ(KKA,KKU,KKL,PREDTH1,PREDR1,PD,&
     & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST) * MZM(PFR2, KKA, KKU, KKL)
@@ -505,6 +505,9 @@ ELSE
                      * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
 END IF
 !
+#ifdef REPRO55
+ZF(:,:,IKE)=0.
+#endif
 ! Compute the splitted conservative potential temperature at t+deltat
 CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
                     PRHODJ,PTHLP)
@@ -559,20 +562,22 @@ PWTHV = MZM(PETHETA, KKA, KKU, KKL) * ZFLXZ
 PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB)
 !
 !*       2.3  Partial vertical divergence of the < Rc w > flux
-! Correction for qc and qi negative in AROME 
-!IF ( KRRL >= 1 ) THEN
-!  IF ( KRRI >= 1 ) THEN
-!    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-!                    DZF(MZM(PRHODJ*PATHETA*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL)       &
-!                    *(1.0-PFRAC_ICE(:,:,:))
-!    PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-!                    DZF(MZM(PRHODJ*PATHETA*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL)       &
-!                    *PFRAC_ICE(:,:,:)
-!  ELSE
-!    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-!                    DZF(MZM(PRHODJ*PATHETA*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL) 
-!  END IF
-!END IF
+!
+#ifdef REPRO55
+IF ( KRRL >= 1 ) THEN
+  IF ( KRRI >= 1 ) THEN
+    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
+                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL)       &
+                    *(1.0-PFRAC_ICE(:,:,:))
+    PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
+                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL)       &
+                    *PFRAC_ICE(:,:,:)
+  ELSE
+    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
+                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL)
+  END IF
+END IF
+#endif
 !
 !*       2.4  Storage in LES configuration
 ! 
@@ -648,7 +653,7 @@ IF (KRR /= 0) THEN
   !
   ! d(w'2th')/dz
   IF (GFWTH) THEN
-    ZF       = ZF       + M3_WR_W2TH(KKA,KKU,KKL,PREDR1,PREDTH1,PD,ZKEFF,&
+    ZF       = ZF       + M3_WR_W2TH(KKA,KKU,KKL,PD,ZKEFF,&
      & PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * PFWTH
     ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,& 
      & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA) * PFWTH
@@ -656,7 +661,7 @@ IF (KRR /= 0) THEN
   !
   ! d(w'th'2)/dz
   IF (GFTH2) THEN
-    ZF       = ZF       + M3_WR_WTH2(KKA,KKU,KKL,PREDR1,PREDTH1,PD,ZKEFF,PTKEM,&
+    ZF       = ZF       + M3_WR_WTH2(KKA,KKU,KKL,PD,ZKEFF,PTKEM,&
     & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ) * MZM(PFTH2, KKA, KKU, KKL)
     ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTH2_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
      &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA) * MZM(PFTH2, KKA, KKU, KKL)
@@ -687,6 +692,9 @@ IF (KRR /= 0) THEN
                        * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
   END IF
   !
+#ifdef REPRO55
+  ZF(:,:,IKE)=0.
+#endif
   ! Compute the splitted conservative potential temperature at t+deltat
   CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,&
                       PDZZ,PRHODJ,PRP)
@@ -739,20 +747,22 @@ IF (KRR /= 0) THEN
   PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB)
 !
 !*       3.3  Complete vertical divergence of the < Rc w > flux
-! Correction of qc and qi negative for AROME
-!  IF ( KRRL >= 1 ) THEN
-!    IF ( KRRI >= 1 ) THEN
-!      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-!                      DZF(MZM(PRHODJ*PAMOIST*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL)       &
-!                      *(1.0-PFRAC_ICE(:,:,:))
-!      PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-!                      DZF(MZM(PRHODJ*PAMOIST*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL)       &
-!                      *PFRAC_ICE(:,:,:)
-!    ELSE
-!      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-!                      DZF(MZM(PRHODJ*PAMOIST*2.*PSRCM, KKA, KKU, KKL)*ZFLXZ/PDZZ, KKA, KKU, KKL) 
-!    END IF
-!  END IF
+!
+#ifdef REPRO55
+  IF ( KRRL >= 1 ) THEN
+    IF ( KRRI >= 1 ) THEN
+      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
+                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL )       &
+                      *(1.0-PFRAC_ICE(:,:,:))
+      PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
+                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL )       &
+                      *PFRAC_ICE(:,:,:)
+    ELSE
+      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
+                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL )
+    END IF
+  END IF
+#endif
 !
 !*       3.4  Storage in LES configuration
 ! 
diff --git a/src/mesonh/turb/prandtl.f90 b/src/mesonh/turb/prandtl.f90
deleted file mode 100644
index 9b8455f87..000000000
--- a/src/mesonh/turb/prandtl.f90
+++ /dev/null
@@ -1,611 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    ###################
-     MODULE MODI_PRANDTL
-!    ###################
-!
-INTERFACE
-!
-      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_DIAG,      &
-                         HTURBDIM,                             &
-                         TPFILE,                               &
-                         PDXX,PDYY,PDZZ,PDZX,PDZY,             &
-                         PTHVREF,PLOCPEXNM,PATHETA,PAMOIST,    &
-                         PLM,PLEPS,PTKEM,PTHLM,PRM,PSVM,PSRCM, &
-                         PREDTH1,PREDR1,                       &
-                         PRED2TH3, PRED2R3, PRED2THR3,         &
-                         PREDS1,PRED2THS3, PRED2RS3,           &
-                         PBLL_O_E,                             &
-                         PETHETA, PEMOIST                      )
-!
-!
-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)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRI          ! number of ice var.
-!
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
-                                                  ! metric coefficients
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF  ! Virtual Potential Temp.
-                                                  ! of the reference state
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM ! Lv(T)/Cp/Exner at t-1 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM      ! Turbulent Mixing length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS    ! Dissipative length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM,PTKEM! Conservative Potential 
-                                                  ! Temperature and TKE at t-1
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM      ! Mixing ratios at  t-1
-                                                  ! with PRM(:,:,:,1) = cons.
-                                                  ! mixing ratio
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM     ! Scalars at t-1      
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM
-                                  ! s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-!
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDTH1 ! Redelsperger number R_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDR1  ! Redelsperger number R_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2TH3 ! Redelsperger number R*2_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2R3  ! Redelsperger number R*2_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2THR3! Redelsperger number R*2_thq
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PREDS1   ! Redelsperger number R_sv
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2THS3! Redelsperger number R*2_thsv
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2RS3 ! Redelsperger number R*2_qsv
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PBLL_O_E! beta*Lk*Leps/tke
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PETHETA ! coefficient E_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PEMOIST ! coefficient E_moist
-!
-END SUBROUTINE PRANDTL
-!
-END INTERFACE
-!
-END MODULE MODI_PRANDTL
-!
-!
-!
-!     ###########################################################
-      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_DIAG,      &
-                         HTURBDIM,                             &
-                         TPFILE,                               &
-                         PDXX,PDYY,PDZZ,PDZX,PDZY,             &
-                         PTHVREF,PLOCPEXNM,PATHETA,PAMOIST,    &
-                         PLM,PLEPS,PTKEM,PTHLM,PRM,PSVM,PSRCM, &
-                         PREDTH1,PREDR1,                       &
-                         PRED2TH3, PRED2R3, PRED2THR3,         &
-                         PREDS1,PRED2THS3, PRED2RS3,           &
-                         PBLL_O_E,                             &
-                         PETHETA, PEMOIST                      )
-!     ###########################################################
-!
-!
-!!****  *PRANDTL* - routine to compute the Prandtl turbulent numbers
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to compute the Redelsperger 
-!     numbers and then get the turbulent Prandtl and Schmidt numbers:
-!       * for the heat fluxes     - PHI3 = 1/ Prandtl
-!       * for the moisture fluxes - PSI3 = 1/ Schmidt
-!
-!!**  METHOD
-!!    ------
-!!    The following steps are performed:
-!!
-!!     1 - default values of 1 are taken for phi3 and psi3 and different masks
-!!       are defined depending on the presence of turbulence, stratification and
-!!       humidity. The 1D Redelsperger numbers are computed  
-!!         * ZREDTH1 : (g / THVREF ) (LT**2 / TKE ) ETHETA (D Theta / Dz)   
-!!         * ZREDR1  : (g / THVREF ) (LT**2 / TKE ) EMOIST (D TW    / Dz)  
-!!     2 - 3D Redelsperger numbers are computed only for turbulent 
-!!       grid points where  ZREDTH1 or ZREDR1 are > 0.
-!!     3 - PHI3 is  computed only for turbulent grid points where ZREDTH1 > 0
-!!      (turbulent thermally stratified points)
-!!     4 - PSI3 is computed only for turbulent grid points where ZREDR1 > 0
-!!      (turbulent moist points)
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute the coefficients 
-!!            for the turbulent correlation between any variable
-!!            and the virtual potential temperature, of its correlations 
-!!            with the conservative potential temperature and the humidity 
-!!            conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!      GX_M_M, GY_M_M, GZ_M_M :  Cartesian gradient operators
-!!      MZM : Shuman function (mean operator in the z direction)
-!!      Module MODI_ETHETA    : interface module for ETHETA
-!!      Module MODI_EMOIST    : interface module for EMOIST
-!!      Module MODI_SHUMAN    : interface module for Shuman operators
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST : contains physical constants
-!!           XG         : gravity constant
-!!
-!!      Module MODD_CTURB: contains the set of constants for
-!!                        the turbulence scheme
-!!       XCTV,XCPR2    : constants for the turbulent prandtl numbers
-!!       XTKEMIN        : minimum value allowed for the TKE
-!!
-!!      Module MODD_PARAMETERS 
-!!       JPVEXT_TURB         : number of vertical marginal points
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 2 of documentation (routine PRANDTL)
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         18/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: March 21, 1995 (J. Cuxart and J.Stein)
-!!                                  Phi3 and Psi3 at w point + cleaning
-!!      Modifications: July 2, 1995 (J.Cuxart and Ph.Bougeault)
-!!                         change the value of Phi3 and Psi3 if negative
-!!      Modifications: Sept 20, 1995 (J. Stein, J. Cuxart, J.L. Redelsperger)
-!!                         remove the Where + use REDTH1+REDR1 for the tests
-!!      Modifications: October 10, 1995 (J. Cuxart and J.Stein)
-!!                         Psi3 for tPREDS1he scalar variables
-!!      Modifications: February 27, 1996 (J.Stein) optimization
-!!      Modifications: June 15, 1996 (P.Jabouille) return to the previous
-!!                          computation of Phi3 and Psi3
-!!      Modifications: October 10, 1996 (J. Stein) change the temporal
-!!                          discretization
-!!      Modifications: May 23, 1997 (J. Stein) bug in 3D Redels number at ground
-!!                                             with orography
-!!      Modifications: Feb 20, 1998 (J. Stein) bug in all the 3D cases due to
-!!                                             the use of ZW1 instead of ZW2
-!!                     Feb 20, 2003 (JP Pinty) Add PFRAC_ICE
-!!                     July    2005 (Tomas, Masson) implicitation of PHI3 and PSI3
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!                     2012-02 Y. Seity,  add possibility to run with reversed 
-!!                                               vertical levels
-!!      Modifications: July 2015    (Wim de Rooy) LHARAT (Racmo turbulence) switch
-!!                     2017-09 J.Escobar, use epsilon XMNH_TINY_12 for R*4 
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!! JL Redelsperger 03/2021 : adding Ocean case for temperature only 
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST
-USE MODD_CONF
-USE MODD_CTURB
-USE MODD_DYN_n,          ONLY: LOCEAN
-use modd_field,          only: tfielddata, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS
-!
-USE MODI_GRADIENT_M
-USE MODI_EMOIST
-USE MODI_ETHETA
-USE MODI_SHUMAN
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-!
-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)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRI          ! number of ice var.
-!
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
-                                                  ! metric coefficients
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF  ! Virtual Potential Temp.
-                                                  ! of the reference state
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM ! Lv(T)/Cp/Exner at t-1 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM      ! Turbulent Mixing length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS    ! Dissipative length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM,PTKEM! Conservative Potential 
-                                                  ! Temperature and TKE at t-1
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM      ! Mixing ratios at  t-1
-                                                  ! with PRM(:,:,:,1) = cons.
-                                                  ! mixing ratio
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM     ! Scalars at t-1      
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM
-                                  ! s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-!
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDTH1 ! Redelsperger number R_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDR1  ! Redelsperger number R_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2TH3 ! Redelsperger number R*2_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2R3  ! Redelsperger number R*2_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2THR3! Redelsperger number R*2_thq
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PREDS1   ! Redelsperger number R_s
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2THS3! Redelsperger number R*2_thsv
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2RS3 ! Redelsperger number R*2_qsv
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PBLL_O_E! beta*Lk*Leps/tke
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PETHETA ! coefficient E_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PEMOIST ! coefficient E_moist
-!
-!
-!       0.2  declaration of local variables
-!
-REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::  &
-                  ZW1, ZW2
-!                                                 working variables
-!                                                     
-INTEGER :: IKB      ! vertical index value for the first inner mass point
-INTEGER :: IKE      ! vertical index value for the last inner mass point
-INTEGER::  ISV                      ! number of scalar variables       
-INTEGER::  JSV                      ! loop index for the scalar variables  
-
-INTEGER :: JLOOP
-REAL    :: ZMINVAL
-TYPE(TFIELDDATA)  :: TZFIELD
-! ---------------------------------------------------------------------------
-!
-!*      1.  DEFAULT VALUES,  1D REDELSPERGER NUMBERS 
-!           ----------------------------------------
-!
-IKB = KKA+JPVEXT_TURB*KKL
-IKE = KKU-JPVEXT_TURB*KKL 
-ISV  =SIZE(PSVM,4)
-!
-PETHETA(:,:,:) = MZM( ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) )
-PEMOIST(:,:,:) = MZM( EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) )
-PETHETA(:,:,KKA) = 2.*PETHETA(:,:,IKB) - PETHETA(:,:,IKB+KKL)
-PEMOIST(:,:,KKA) = 2.*PEMOIST(:,:,IKB) - PEMOIST(:,:,IKB+KKL)
-!
-!---------------------------------------------------------------------------
-!
-!          1.3 1D Redelsperger numbers
-!
-IF (LOCEAN) THEN
-  PBLL_O_E(:,:,:) = MZM(XG *XALPHAOC* PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:) )  
-  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
-  PREDR1(:,:,:) = 0.
-ELSE
-  PBLL_O_E(:,:,:) = MZM(XG / PTHVREF(:,:,:) * PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:) )  
-  IF (KRR /= 0) THEN                ! moist case
-    PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * &
-                     & GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
-    PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
-                     & GZ_M_W(KKA,KKU,KKL,PRM(:,:,:,1),PDZZ)
-  ELSE                              ! dry case
-    PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
-    PREDR1(:,:,:) = 0.
-  END IF
-!
-END IF
-!
-!       3. Limits on 1D Redelperger numbers
-!          --------------------------------
-!
-ZMINVAL = (1.-1./XPHI_LIM)
-!
-ZW1 = 1.
-ZW2 = 1.
-!
-WHERE (PREDTH1+PREDR1<-ZMINVAL)
-  ZW1 = (-ZMINVAL) / (PREDTH1+PREDR1)
-END WHERE
-!
-WHERE (PREDTH1<-ZMINVAL)
-  ZW2 = (-ZMINVAL) / (PREDTH1)
-END WHERE
-ZW2 = MIN(ZW1,ZW2)
-!
-ZW1 = 1.
-WHERE (PREDR1<-ZMINVAL)
-  ZW1 = (-ZMINVAL) / (PREDR1)
-END WHERE
-ZW1 = MIN(ZW2,ZW1)
-!
-!
-!       3. Modification of Mixing length and dissipative length
-!          ----------------------------------------------------
-!
-PBLL_O_E(:,:,:) = PBLL_O_E(:,:,:) * ZW1(:,:,:)
-PREDTH1 (:,:,:) = PREDTH1 (:,:,:) * ZW1(:,:,:)
-PREDR1  (:,:,:) = PREDR1  (:,:,:) * ZW1(:,:,:)
-!
-!       4. Threshold for very small (in absolute value) Redelperger numbers
-!          ----------------------------------------------------------------
-!
-ZW2=SIGN(1.,PREDTH1(:,:,:))
-PREDTH1(:,:,:)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDTH1(:,:,:))
-!
-IF (.NOT.LOCEAN) THEN
-  IF (KRR /= 0) THEN                ! dry case
-    ZW2=SIGN(1.,PREDR1(:,:,:))
-    PREDR1(:,:,:)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDR1(:,:,:))
-  END IF
-END IF
-!
-!
-!---------------------------------------------------------------------------
-!
-!          For the scalar variables
-DO JSV=1,ISV
-  PREDS1(:,:,:,JSV)=XCTV*PBLL_O_E(:,:,:)*GZ_M_W(KKA,KKU,KKL,PSVM(:,:,:,JSV),PDZZ)
-END DO
-!
-DO JSV=1,ISV
-  ZW2=SIGN(1.,PREDS1(:,:,:,JSV))
-  PREDS1(:,:,:,JSV)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDS1(:,:,:,JSV))
-END DO
-!
-!---------------------------------------------------------------------------
-!
-!*      2.  3D REDELSPERGER NUMBERS
-!           ------------------------
-!
-IF(HTURBDIM=='1DIM') THEN        ! 1D case
-!
-!
-  PRED2TH3(:,:,:)  = PREDTH1(:,:,:)**2
-!
-  PRED2R3(:,:,:)   = PREDR1(:,:,:) **2
-!
-  PRED2THR3(:,:,:) = PREDTH1(:,:,:) * PREDR1(:,:,:)
-!
-ELSE IF (L2D) THEN                      ! 3D case in a 2D model
-!
-  IF (KRR /= 0) THEN                 ! moist 3D case
-    PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2+(XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
-      MZM( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)**2 )
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
-!
-    PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 * &
-        MZM( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)**2 )
-    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+KKL)
-!
-    PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  XCTV**2*PBLL_O_E(:,:,:)**2 *   &
-                  PEMOIST(:,:,:) * PETHETA(:,:,:) *                         &
-      MZM( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)*     &
-                     GX_M_M(PTHLM,PDXX,PDZZ,PDZX))
-    PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+KKL)
-!
-  ELSE                 ! dry 3D case in a 2D model
-    PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  XCTV**2*PBLL_O_E(:,:,:)**2 *     &
-      MZM( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)**2 )
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
-!
-    PRED2R3(:,:,:) = 0.
-!
-    PRED2THR3(:,:,:) = 0.
-!
-  END IF
-!
-ELSE                                 ! 3D case in a 3D model
-!
-  IF (KRR /= 0) THEN                 ! moist 3D case
-    PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2 +  ( XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
-      MZM( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)**2 &
-      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY)**2 )
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
-!
-    PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 *      &
-        MZM( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)**2 + &
-        GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)**2 )
-    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+KKL)
-!
-    PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  XCTV**2*PBLL_O_E(:,:,:)**2 *   &
-         PEMOIST(:,:,:) * PETHETA(:,:,:) *                            &
-         MZM( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)*   &
-         GX_M_M(PTHLM,PDXX,PDZZ,PDZX)+                           &
-         GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)*                    &
-         GY_M_M(PTHLM,PDYY,PDZZ,PDZY) )
-    PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+KKL)
-!
-  ELSE                 ! dry 3D case in a 3D model
-    PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  XCTV**2*PBLL_O_E(:,:,:)**2 *                &
-      MZM( GX_M_M(PTHLM,PDXX,PDZZ,PDZX)**2 &
-      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY)**2 )
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+KKL)
-!
-    PRED2R3(:,:,:) = 0.
-!
-    PRED2THR3(:,:,:) = 0.
-!
-  END IF
-!
-END IF   ! end of the if structure on the turbulence dimensionnality
-!
-!
-!---------------------------------------------------------------------------
-!
-!           5. Prandtl numbers for scalars
-!              ---------------------------
-IF(HTURBDIM=='1DIM') THEN
-!        1D case
-  DO JSV=1,ISV
-    PRED2THS3(:,:,:,JSV)  = PREDS1(:,:,:,JSV) * PREDTH1(:,:,:)
-    IF (KRR /= 0) THEN
-      PRED2RS3(:,:,:,JSV)   = PREDR1(:,:,:) *PREDS1(:,:,:,JSV)
-    ELSE
-      PRED2RS3(:,:,:,JSV)   = 0.
-    END IF
-  ENDDO
-!
-ELSE  IF (L2D) THEN ! 3D case in a 2D model
-!
-  IF (LOCEAN) THEN    
-    IF (KRR /= 0) THEN
-      ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2 ) *PETHETA
-    ELSE
-      ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2)
-     END IF
-  ELSE
-    DO JSV=1,ISV
-      IF (KRR /= 0) THEN
-        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
-      ELSE
-        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
-      END IF
-      PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                         ZW1*                                              &
-                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                             GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
-                            )
-!
-      IF (KRR /= 0) THEN
-        PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                         ZW1 * PEMOIST *                                   &
-                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                             GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
-                            )
-      ELSE
-        PRED2RS3(:,:,:,JSV) = 0.
-      END IF
-    ENDDO
-  END IF
-!
-ELSE ! 3D case in a 3D model
-!
-  IF (LOCEAN) THEN    
-  IF (KRR /= 0) THEN
-        ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2 ) *PETHETA
-      ELSE
-        ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2)
-      END IF
-  ELSE   
-    DO JSV=1,ISV
-      IF (KRR /= 0) THEN
-        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
-      ELSE
-        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
-      END IF
-      PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                         ZW1*                                              &
-                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                             GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
-                            +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
-                             GY_M_M(PTHLM,PDYY,PDZZ,PDZY)                  &
-                            )
-!
-      IF (KRR /= 0) THEN
-        PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                         ZW1 * PEMOIST *                                   &
-                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                             GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
-                            +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
-                             GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)           &
-                            )
-      ELSE
-        PRED2RS3(:,:,:,JSV) = 0.
-      END IF
-    ENDDO
-  END IF
-!
-END IF ! end of HTURBDIM if-block
-!
-!
-!---------------------------------------------------------------------------
-!
-!*          6. SAVES THE REDELSPERGER NUMBERS
-!              ------------------------------
-!
-IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN
-  !
-  ! stores the RED_TH1
-  TZFIELD%CMNHNAME   = 'RED_TH1'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED_TH1'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_TH1'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PREDTH1)
-  !
-  ! stores the RED_R1
-  TZFIELD%CMNHNAME   = 'RED_R1'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED_R1'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED_R1'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PREDR1)
-  !
-  ! stores the RED2_TH3
-  TZFIELD%CMNHNAME   = 'RED2_TH3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_TH3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_TH3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PRED2TH3)
-  !
-  ! stores the RED2_R3
-  TZFIELD%CMNHNAME   = 'RED2_R3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_R3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_R3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PRED2R3)
-  !
-  ! stores the RED2_THR3
-  TZFIELD%CMNHNAME   = 'RED2_THR3'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'RED2_THR3'
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_RED2_THR3'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,PRED2THR3)
-  !
-END IF
-!
-!---------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('PRANDTL',1,ZHOOK_HANDLE)
-END SUBROUTINE PRANDTL
diff --git a/src/mesonh/turb/turb.f90 b/src/mesonh/turb/turb.f90
index 228241e2c..e089edc82 100644
--- a/src/mesonh/turb/turb.f90
+++ b/src/mesonh/turb/turb.f90
@@ -9,23 +9,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,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,                  &
-                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,PTR,PDISS,PLEM    )
+      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,PLEM,&
+              & TBUDGETS, KBUDGETS                                   )
 
 !
 USE MODD_IO, ONLY: TFILEDATA
+USE MODD_BUDGET, ONLY: TBUDGETDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -66,6 +69,7 @@ REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE       ! cosinus of the angle
 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
 !
@@ -119,10 +123,13 @@ 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)  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDISS ! Dissipation of TKE
+REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF   ! Transport production of TKE
+REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS ! Dissipation of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PLEM  ! Mixing length
-
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS
+! length scale from vdfexcu
+REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
 !
 !-------------------------------------------------------------------------------
 !
@@ -142,11 +149,13 @@ END MODULE MODI_TURB
                 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,PTR,PDISS,PLEM    )
+                PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTDIFF,PTDISS,PLEM,&
+                TBUDGETS, KBUDGETS                                    )
 !     #################################################################
 !
 !
@@ -355,7 +364,7 @@ use modd_budget,      only: lbudget_u,  lbudget_v,  lbudget_w,  lbudget_th, lbud
                             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, &
-                            tbudgets
+                            TBUDGETDATA
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
@@ -372,10 +381,10 @@ USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_BL89
-USE MODI_TURB_VER
+USE MODE_TURB_VER, ONLY : TURB_VER
 USE MODI_ROTATE_WIND
 USE MODI_TURB_HOR_SPLT 
-USE MODI_TKE_EPS_SOURCES
+USE MODE_TKE_EPS_SOURCES, ONLY: TKE_EPS_SOURCES
 USE MODI_SHUMAN
 USE MODI_GRADIENT_M
 USE MODI_LES_MEAN_SUBGRID
@@ -443,6 +452,7 @@ REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE       ! cosinus of the angle
 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
 !
@@ -496,10 +506,15 @@ 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)  :: PTR   ! Transport production of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDISS ! Dissipation of TKE
+REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF   ! Transport production of TKE
+REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS ! Dissipation of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PLEM  ! Mixing length
 !
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS
+!
+! length scale from vdfexcu
+REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
 !
 !-------------------------------------------------------------------------------
 !
@@ -987,7 +1002,6 @@ if ( lbudget_sv ) then
     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,                     &
@@ -998,7 +1012,7 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI,               &
           PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV,           &
           ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M,               &
           PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT,    &
-          PTKET,PLEM,ZLEPS,                              &
+          PTKET,PLEM,PLENGTHM,PLENGTHH,ZLEPS,MFMOIST,    &
           ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,     &
           ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,PBL_DEPTH,         &
           PSBL_DEPTH,ZLMO,                               &
@@ -1141,7 +1155,8 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,PLEM,ZLEPS,PDYP,ZTRH,     &
                      PTSTEP,PIMPL,ZEXPL,                             &
                      HTURBLEN,HTURBDIM,                              &
                      TPFILE,OTURB_DIAG,                              &
-                     PTHP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS,PTR,PDISS )
+                     PTHP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,&
+                     TBUDGETS,KBUDGETS,PRTKESM=PRTKEMS)
 
 !----------------------------------------------------------------------------
 !
diff --git a/src/mesonh/turb/turb_ver_dyn_flux.f90 b/src/mesonh/turb/turb_ver_dyn_flux.f90
deleted file mode 100644
index b7c131ba1..000000000
--- a/src/mesonh/turb/turb_ver_dyn_flux.f90
+++ /dev/null
@@ -1,932 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODI_TURB_VER_DYN_FLUX 
-!    ####################
-!
-INTERFACE 
-!
-      SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL,                     &
-                      OTURB_FLX,KRR,                                &
-                      HTURBDIM,PIMPL,PEXPL,                         &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
-                      PCOSSLOPE,PSINSLOPE,                          &
-                      PRHODJ,                                       &
-                      PCDUEFF,PTAU11M,PTAU12M,PTAU33M,              &
-                      PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, &
-                      PTKEM,PLM,MFMOIST,PWU,PWV,                    &
-                      PRUS,PRVS,PRWS,                               &
-                      PDP,PTP                                       )
-!
-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=AR 
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitude of flux points
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-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 volum
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
-       ! to the maximum slope direction and the surface normal and the binormal 
-       ! at time t - dt
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PUM,PVM,PWM,PTHLM
-  ! Wind at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
-                                     ! maximum slope direction
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
-                                     ! direction normal to the maximum slope one
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWU          ! momentum flux u'w'
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWV          ! momentum flux v'w'
-!
-REAL, DIMENSION(:,:,:), INTENT(INOUT)   ::  PRUS, PRVS, PRWS
-                            ! cumulated sources for the prognostic variables
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PDP          ! Dynamic TKE production term
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTP          ! Thermal TKE production term
-!
-!
-!
-END SUBROUTINE TURB_VER_DYN_FLUX
-!
-END INTERFACE
-!
-END MODULE MODI_TURB_VER_DYN_FLUX
-!
-!
-!     ###############################################################
-      SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL,                     &
-                      OTURB_FLX,KRR,                                &
-                      HTURBDIM,PIMPL,PEXPL,                         &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
-                      PCOSSLOPE,PSINSLOPE,                          &
-                      PRHODJ,                                       &
-                      PCDUEFF,PTAU11M,PTAU12M,PTAU33M,              &
-                      PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, &
-                      PTKEM,PLM,PWU,PWV,                            &
-                      PRUS,PRVS,PRWS,                               &
-                      PDP,PTP                                       )
-!     ###############################################################
-!
-!
-!!****  *TURB_VER_DYN_FLUX* -compute the source terms due to the vertical turbulent
-!!       fluxes.
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to compute the vertical turbulent
-!     fluxes of the evolutive variables and give back the source 
-!     terms to the main program.	In the case of large horizontal meshes,
-!     the divergence of these vertical turbulent fluxes represent the whole
-!     effect of the turbulence but when the three-dimensionnal version of
-!     the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences
-!     are completed in the next routine TURB_HOR. 
-!		  An arbitrary degree of implicitness has been implemented for the 
-!     temporal treatment of these diffusion terms.
-!       The vertical boundary conditions are as follows:
-!           *  at the bottom, the surface fluxes are prescribed at the same
-!              as the other turbulent fluxes
-!           *  at the top, the turbulent fluxes are set to 0.
-!       It should be noted that the condensation has been implicitely included
-!     in this turbulence scheme by using conservative variables and computing
-!     the subgrid variance of a statistical variable s indicating the presence 
-!     or not of condensation in a given mesh. 
-!
-!!**  METHOD
-!!    ------
-!!      1D type calculations are made;
-!!      The vertical turbulent fluxes are computed in an off-centered
-!!      implicit scheme (a Crank-Nicholson type with coefficients different
-!!      than 0.5), which allows to vary the degree of implicitness of the
-!!      formulation.
-!!      	 The different prognostic variables are treated one by one. 
-!!      The contributions of each turbulent fluxes are cumulated into the 
-!!      tendency  PRvarS, and into the dynamic and thermal production of 
-!!      TKE if necessary.
-!!        
-!!			 In section 2 and 3, the thermodynamical fields are considered.
-!!      Only the turbulent fluxes of the conservative variables
-!!      (Thetal and Rnp stored in PRx(:,:,:,1))  are computed. 
-!!       Note that the turbulent fluxes at the vertical 
-!!      boundaries are given either by the soil scheme for the surface one
-!!      ( at the same instant as the others fluxes) and equal to 0 at the 
-!!      top of the model. The thermal production is computed by vertically 
-!!      averaging the turbulent flux and multiply this flux at the mass point by
-!!      a function ETHETA or EMOIST, which preform the transformation from the
-!!      conservative variables to the virtual potential temperature. 
-!!     
-!! 	    In section 4, the variance of the statistical variable
-!!      s indicating presence or not of condensation, is determined in function 
-!!      of the turbulent moments of the conservative variables and its
-!!      squarred root is stored in PSIGS. This information will be completed in 
-!!      the horizontal turbulence if the turbulence dimensionality is not 
-!!      equal to "1DIM".
-!!
-!!			 In section 5, the x component of the stress tensor is computed.
-!!      The surface flux <u'w'> is computed from the value of the surface
-!!      fluxes computed in axes linked to the orography ( i", j" , k"):
-!!        i" is parallel to the surface and in the direction of the maximum
-!!           slope
-!!        j" is also parallel to the surface and in the normal direction of
-!!           the maximum slope
-!!        k" is the normal to the surface
-!!      In order to prevent numerical instability, the implicit scheme has 
-!!      been extended to the surface flux regarding to its dependence in 
-!!      function of U. The dependence in function of the other components 
-!!      introduced by the different rotations is only explicit.
-!!      The turbulent fluxes are used to compute the dynamic production of 
-!!      TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the
-!!      ground), an harmonic extrapolation from the dynamic production at 
-!!      PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U
-!!      in the surface layer.
-!!
-!!         In section 6, the same steps are repeated but for the y direction
-!!		  and in section 7, a diagnostic computation of the W variance is 
-!!      performed.
-!!
-!!         In section 8, the turbulent fluxes for the scalar variables are 
-!!      computed by the same way as the conservative thermodynamical variables
-!!
-!!            
-!!    EXTERNAL
-!!    --------
-!!      GX_U_M, GY_V_M, GZ_W_M :  cartesian gradient operators 
-!!      GX_U_UW,GY_V_VW	         (X,Y,Z) represent the direction of the gradient
-!!                               _(M,U,...)_ represent the localization of the 
-!!                               field to be derivated
-!!                               _(M,UW,...) represent the localization of the 
-!!                               field	derivated
-!!                               
-!!
-!!      MXM,MXF,MYM,MYF,MZM,MZF
-!!                             :  Shuman functions (mean operators)     
-!!      DXF,DYF,DZF,DZM
-!!                             :  Shuman functions (difference operators)     
-!!                               
-!!      SUBROUTINE TRIDIAG     : to compute the split implicit evolution
-!!                               of a variable located at a mass point
-!!
-!!      SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution
-!!                               of a variable located at a wind point
-!!
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute:
-!!            - the coefficients for the turbulent correlation between
-!!            any variable and the virtual potential temperature, of its 
-!!            correlations with the conservative potential temperature and 
-!!            the humidity conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST : contains physical constants
-!!
-!!           XG         : gravity constant
-!!
-!!      Module MODD_CTURB: contains the set of constants for
-!!                        the turbulence scheme
-!!
-!!           XCMFS,XCMFB : cts for the momentum flux
-!!           XCSHF       : ct for the sensible heat flux
-!!           XCHF        : ct for the moisture flux
-!!           XCTV,XCHV   : cts for the T and moisture variances
-!!
-!!      Module MODD_PARAMETERS
-!!
-!!           JPVEXT_TURB     : number of vertical external points
-!!           JPHEXT     : number of horizontal external points
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original       August   19, 1994
-!!      Modifications: February 14, 1995 (J.Cuxart and J.Stein) 
-!!                                  Doctorization and Optimization
-!!      Modifications: March 21, 1995 (J.M. Carriere) 
-!!                                  Introduction of cloud water
-!!      Modifications: June  14, 1995 (J.Cuxart and J. Stein) 
-!!                                 Phi3 and Psi3 at w-point + bug in the all
-!!                                 or nothing condens. 
-!!      Modifications: Sept  15, 1995 (J.Cuxart and J. Stein) 
-!!                                 Change the DP computation at the ground
-!!      Modifications: October 10, 1995 (J.Cuxart and J. Stein) 
-!!                                 Psi for scal var and LES tools
-!!      Modifications: November 10, 1995 (J. Stein)
-!!                                 change the surface	relations 
-!!      Modifications: February 20, 1995 (J. Stein) optimization
-!!      Modifications: May 21, 1996 (J. Stein) 
-!!                                  bug in the vertical flux of the V wind 
-!!                                  component for explicit computation
-!!      Modifications: May 21, 1996 (N. wood) 
-!!                                  modify the computation of the vertical
-!!                                   part or the surface tangential flux
-!!      Modifications: May 21, 1996 (P. Jabouille)
-!!                                  same modification in the Y direction
-!!      
-!!      Modifications: Sept 17, 1996 (J. Stein) change the moist case by using
-!!                                  Pi instead of Piref + use Atheta and Amoist
-!!
-!!      Modifications: Nov  24, 1997 (V. Masson) removes the DO loops 
-!!      Modifications: Mar  31, 1998 (V. Masson) splits the routine TURB_VER_DYN_FLUX 
-!!      Modifications: Oct  18, 2000 (J. Stein)  Bug in some computations for IKB level
-!!      Modifications: Oct  18, 2000 (V. Masson) LES computations + LFLAT switch
-!!                     Nov  06, 2002 (V. Masson) LES budgets
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!      2012-02 Y. Seity,  add possibility to run with reversed vertical levels
-!!      Modifications  July 2015 (Wim de Rooy) LHARATU switch
-!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      Q. Rodier      17/01/2019 : cleaning : remove cyclic conditions on DP and ZA
-!! JL Redelsperger 03/2021 : Add Ocean  & O-A Autocoupling LES Cases
-!!--------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-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_OCEANH
-USE MODD_PARAMETERS
-USE MODD_REF, ONLY : LCOUPLES
-USE MODD_TURB_n
-!
-!
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
-USE MODI_SECOND_MNH
-USE MODI_SHUMAN , ONLY: MZM, MZF, MXM, MXF, MYM, MYF,&
-                      & DZM, DXF, DXM, DYF, DYM
-USE MODI_TRIDIAG 
-USE MODI_TRIDIAG_WIND 
-USE MODI_LES_MEAN_SUBGRID
-!
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-USE MODE_ll
-!
-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
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitude of flux points
-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 volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
-
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
-       ! to the maximum slope direction and the surface normal and the binormal 
-       ! at time t - dt
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PUM,PVM,PWM, PTHLM
-  ! Wind at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
-                                     ! maximum slope direction
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
-                                     ! direction normal to the maximum slope one
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWU          ! momentum flux u'w'
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWV          ! momentum flux v'w'
-!
-REAL, DIMENSION(:,:,:), INTENT(INOUT)   ::  PRUS, PRVS, PRWS
-                            ! cumulated sources for the prognostic variables
-!
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PDP          ! Dynamic TKE production term
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTP          ! Thermal TKE production term
-!
-!
-!
-!
-!*       0.2  declaration of local variables
-!
-!
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2))  :: ZDIRSINZW ! sinus of the angle
-                   ! between the normal and the vertical at the surface
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),1):: ZCOEFS    ! coeff. for the 
-                   ! implicit scheme for the wind at the surface
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3))  ::  &
-       ZA, &       ! under diagonal elements of the tri-diagonal matrix involved
-                   ! in the temporal implicit scheme (also used to store coefficient
-                   ! J in Section 5)
-       ZRES, &     ! guess of the treated variable at t+ deltat when the turbu-
-                   ! lence is the only source of evolution added to the ones
-                   ! considered in ZSOURCE  
-       ZFLXZ,  &   ! vertical flux of the treated variable
-       ZSOURCE,  & ! source of evolution for the treated variable
-       ZKEFF       ! effectif diffusion coeff = LT * SQRT( TKE )
-INTEGER             :: IIB,IIE, &   ! I index values for the Beginning and End
-                       IJB,IJE, &   ! mass points of the domain in the 3 direct.
-                       IKB,IKE      !
-INTEGER             :: IKT          ! array size in k direction
-INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain
-INTEGER             :: JSV          ! scalar loop counter
-REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, &
-                                    ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM
-                                    ! coefficients for the surface flux
-                                    ! evaluation and copy of PUSLOPEM and
-                                    ! PVSLOPEM in local 3D arrays 
-INTEGER             :: IIU,IJU      ! size of array in x,y,z directions
-!
-REAL :: ZTIME1, ZTIME2
-TYPE(TFIELDDATA) :: TZFIELD
-!----------------------------------------------------------------------------
-!
-!*       1.   PRELIMINARIES
-!             -------------
-ZA=XUNDEF
-PDP=XUNDEF
-!
-IIU=SIZE(PUM,1)
-IJU=SIZE(PUM,2)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-IKT=SIZE(PUM,3)          
-IKTB=1+JPVEXT_TURB              
-IKTE=IKT-JPVEXT_TURB
-
-
-!
-ZSOURCE(:,:,:) = 0.
-!
-ZDIRSINZW(:,:) = SQRT(1.-PDIRCOSZW(:,:)**2)
-!  compute the coefficients for the uncentred gradient computation near the 
-!  ground
-!
-ZKEFF(:,:,:) = MZM( PLM(:,:,:) * SQRT(PTKEM(:,:,:)) )
-!
-ZUSLOPEM(:,:,1)=PUSLOPEM(:,:)
-ZVSLOPEM(:,:,1)=PVSLOPEM(:,:)
-!
-!----------------------------------------------------------------------------
-!
-!
-!*       5.   SOURCES OF U,W WIND COMPONENTS AND PARTIAL DYNAMIC PRODUCTION 
-!             -------------------------------------------------------------
-!
-!*       5.1  Source of U wind component
-!
-! Preparation of the arguments for TRIDIAG_WIND 
-!
-ZA(:,:,:)    = -PTSTEP * XCMFS *                              &
-              MXM( ZKEFF ) * MXM(MZM( PRHODJ )) / &
-              MXM( PDZZ )**2
-!
-!
-! Compute the source of U wind component 
-!
-! compute the coefficient between the vertical flux and the 2 components of the 
-! wind following the slope
-ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) &
-                                   * PCOSSLOPE(:,:)
-ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PSINSLOPE(:,:)
-
-! prepare the implicit scheme coefficients for the surface flux
-ZCOEFS(:,:,1)=  ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:)  &
-                 +ZCOEFFLXV(:,:,1) * PSINSLOPE(:,:)
-!
-! average this flux to be located at the U,W vorticity point
-ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
-!
-!
-! ZSOURCE= FLUX /DZ
-IF (LOCEAN) THEN  ! OCEAN MODEL ONLY
-  ! Sfx flux assumed to be in SI & at vorticity point
-  IF (LCOUPLES) THEN  
-    ZSOURCE(:,:,IKE:IKE) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) &
-         *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE))) 
-  ELSE
-    ZSOURCE(:,:,IKE)     = XSSUFL(:,:)
-    ZSOURCE(:,:,IKE:IKE) = ZSOURCE (:,:,IKE:IKE) /PDZZ(:,:,IKE:IKE) &
-        *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) )
-  ENDIF
-  !No flux at the ocean domain bottom
-   ZSOURCE(:,:,IKB)           = 0.
-   ZSOURCE(:,:,IKTB+1:IKTE-1) = 0
-!
-ELSE             !ATMOS MODEL ONLY
-  IF (LCOUPLES) THEN 
-   ZSOURCE(:,:,IKB:IKB) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) &
-      * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
-  ELSE               
-    ! compute the explicit tangential flux at the W point
-    ZSOURCE(:,:,IKB)     =                                              &
-     PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
-     -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:)                  &
-     -PTAU33M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:)  
-!
-    ! add the vertical part or the surface flux at the U,W vorticity point
-!
-    ZSOURCE(:,:,IKB:IKB) =                                  &
-    (   MXM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) ) &
-    +  MXM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
-           *ZUSLOPEM(:,:,1:1)                           &
-          -ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
-           *ZVSLOPEM(:,:,1:1)                      )    &
-    -  ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL        &
-    ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
-  ENDIF 
-!
-  ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
-  ZSOURCE(:,:,IKE) = 0.
-ENDIF !end ocean or atmosphere cases
-!
-! Obtention of the split U at t+ deltat 
-!
-CALL TRIDIAG_WIND(KKA,KKU,KKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,   &
-                  MXM(PRHODJ),ZSOURCE,ZRES)
-! 
-!  Compute the equivalent tendency for the U wind component
-!
-PRUS(:,:,:)=PRUS(:,:,:)+MXM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PUM(:,:,:))/PTSTEP
-!
-!
-!*       5.2  Partial Dynamic Production
-!
-! vertical flux of the U wind component
-!
-ZFLXZ(:,:,:)     = -XCMFS * MXM(ZKEFF) * &
-                  DZM (PIMPL*ZRES + PEXPL*PUM) / MXM(PDZZ)
-!
-! surface flux 
-ZFLXZ(:,:,IKB:IKB)   =   MXM(PDZZ(:,:,IKB:IKB))  *                &
-  ( ZSOURCE(:,:,IKB:IKB)                                          &
-   +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL                   &                
-  ) / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
-!
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-
-IF (LOCEAN) THEN !ocean model at phys sfc (ocean domain top)
-  ZFLXZ(:,:,IKE:IKE)   =   MXM(PDZZ(:,:,IKE:IKE))  *                &
-                           ZSOURCE(:,:,IKE:IKE)                     &
-                           / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) )
-  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) 
-END IF
-!
-IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
-  ! stores the U wind component vertical flux
-  TZFIELD%CMNHNAME   = 'UW_VFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'UW_VFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'U wind component vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-END IF
-!
-! first part of total momentum flux
-!
-PWU(:,:,:) = ZFLXZ(:,:,:)
-!
-! Contribution to the dynamic production of TKE
-! compute the dynamic production at the mass point
-!
-PDP(:,:,:) = - MZF( MXF ( ZFLXZ * GZ_U_UW(PUM,PDZZ) )  )
-!
-! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
-PDP(:,:,IKB:IKB) = - MXF (                                                      &
-  ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB))  &
-                         / MXM(PDZZ(:,:,IKB+KKL:IKB+KKL))                   &
-                         )
-!
-IF (LOCEAN) THEN
-  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
-  PDP(:,:,IKE:IKE) = - MXF (                                                      &
-    ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-KKL:IKE-KKL))  &
-                           / MXM(PDZZ(:,:,IKE-KKL:IKE-KKL))                   &
-                           ) 
-END IF
-!
-! Storage in the LES configuration
-! 
-IF (LLES_CALL) THEN
-  CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MZF(MXF(ZFLXZ)), X_LES_SUBGRID_WU )
-  CALL LES_MEAN_SUBGRID( MZF(MXF(GZ_U_UW(PUM,PDZZ) &
-                          & *ZFLXZ)), X_LES_RES_ddxa_U_SBG_UaU )
-  CALL LES_MEAN_SUBGRID( XCMFS * ZKEFF, X_LES_SUBGRID_Km )
-  CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-END IF
-!
-!*       5.3  Source of W wind component
-!
-!
-IF(HTURBDIM=='3DIM') THEN
-  ! Compute the source for the W wind component
-                ! used to compute the W source at the ground
-  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
- IF (LOCEAN) THEN
-   ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
- END IF     
-     
-  !
-  IF (.NOT. LFLAT) THEN
-    PRWS(:,:,:)= PRWS                                      &
-                -DXF( MZM( MXM(PRHODJ) /PDXX )  * ZFLXZ )  &
-                +DZM( PRHODJ / MZF(PDZZ ) *                &
-                      MXF( MZF( ZFLXZ*PDZX ) / PDXX )      &
-                    )
-  ELSE
-    PRWS(:,:,:)= PRWS -DXF( MZM( MXM(PRHODJ) /PDXX )  * ZFLXZ )
-  END IF
-  !
-  ! Complete the Dynamical production with the W wind component 
-  !
-  ZA(:,:,:)=-MZF( MXF ( ZFLXZ * GX_W_UW( PWM,PDXX,PDZZ,PDZX) )  )
-  !
-  !
-  ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
-  ZA(:,:,IKB:IKB) = - MXF (                                                  &
-   ZFLXZ(:,:,IKB+KKL:IKB+KKL) *                                              &
-     ( DXM( PWM(:,:,IKB+KKL:IKB+KKL) )                                       &
-      -MXM(  (PWM(:,:,IKB+2*KKL:IKB+2*KKL   )-PWM(:,:,IKB+KKL:IKB+KKL))      &
-              /(PDZZ(:,:,IKB+2*KKL:IKB+2*KKL)+PDZZ(:,:,IKB+KKL:IKB+KKL))     &
-            +(PWM(:,:,IKB+KKL:IKB+KKL)-PWM(:,:,IKB:IKB  ))                   &
-              /(PDZZ(:,:,IKB+KKL:IKB+KKL)+PDZZ(:,:,IKB:IKB  ))               &
-          )                                                                  &
-        * PDZX(:,:,IKB+KKL:IKB+KKL)                                          &
-     ) / (0.5*(PDXX(:,:,IKB+KKL:IKB+KKL)+PDXX(:,:,IKB:IKB)))                 &
-                          )
-  !
-IF (LOCEAN) THEN
-  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
-  ZA(:,:,IKE:IKE) = - MXF (                                                  &
-   ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                              &
-     ( DXM( PWM(:,:,IKE-KKL:IKE-KKL) )                                       &
-      -MXM(  (PWM(:,:,IKE-2*KKL:IKE-2*KKL   )-PWM(:,:,IKE-KKL:IKE-KKL))      &
-              /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL))     &
-            +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE  ))                   &
-              /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE  ))               &
-          )                                                                  &
-         * PDZX(:,:,IKE-KKL:IKE-KKL)                                          &
-     ) / (0.5*(PDXX(:,:,IKE-KKL:IKE-KKL)+PDXX(:,:,IKE:IKE)))                 &
-                          )
-END IF
-  !
-  PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
-  !
-  ! Storage in the LES configuration
-  ! 
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(MXF(GX_W_UW(PWM,PDXX,&
-      PDZZ,PDZX)*ZFLXZ)), X_LES_RES_ddxa_W_SBG_UaW )
-    CALL LES_MEAN_SUBGRID( MXF(GX_M_U(KKA,KKU,KKL,PTHLM,PDXX,PDZZ,PDZX)&
-      * MZF(ZFLXZ)), X_LES_RES_ddxa_Thl_SBG_UaW )
-    IF (KRR>=1) THEN
-      CALL LES_MEAN_SUBGRID(MXF(GX_U_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)&
-      *MZF(ZFLXZ)),X_LES_RES_ddxa_Rt_SBG_UaW )
-    END IF
-    DO JSV=1,NSV
-      CALL LES_MEAN_SUBGRID( MXF(GX_U_M(PSVM(:,:,:,JSV),PDXX,PDZZ,&
-      PDZX)*MZF(ZFLXZ)),X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) )
-    END DO
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-END IF
-!
-!----------------------------------------------------------------------------
-!
-!
-!*       6.   SOURCES OF V,W WIND COMPONENTS AND COMPLETE 1D DYNAMIC PRODUCTION 
-!             -----------------------------------------------------------------
-!
-!*       6.1  Source of V wind component
-!
-! Preparation of the arguments for TRIDIAG_WIND
-!!
-ZA(:,:,:)    = - PTSTEP * XCMFS *                              &
-              MYM( ZKEFF ) * MYM(MZM( PRHODJ )) /  &
-              MYM( PDZZ )**2
-!
-!
-!
-! Compute the source of V wind component
-! compute the coefficient between the vertical flux and the 2 components of the 
-! wind following the slope
-ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) &
-                                   * PSINSLOPE(:,:)
-ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PCOSSLOPE(:,:)
-
-! prepare the implicit scheme coefficients for the surface flux
-ZCOEFS(:,:,1)=  ZCOEFFLXU(:,:,1) * PSINSLOPE(:,:) * PDIRCOSZW(:,:)  &
-               +ZCOEFFLXV(:,:,1) * PCOSSLOPE(:,:)
-!
-! average this flux to be located at the V,W vorticity point
-ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
-!
-IF (LOCEAN) THEN ! Ocean case
-  IF (LCOUPLES) THEN
-    ZSOURCE(:,:,IKE:IKE) =  XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) &
-        *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) 
-  ELSE 
-    ZSOURCE(:,:,IKE) = XSSVFL(:,:)
-    ZSOURCE(:,:,IKE:IKE) = ZSOURCE(:,:,IKE:IKE)/PDZZ(:,:,IKE:IKE) &
-        *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) )
-  END IF
-  !No flux at the ocean domain bottom
-  ZSOURCE(:,:,IKB) = 0.
-ELSE ! Atmos case
-  IF (.NOT.LCOUPLES) THEN !  only atmosp without coupling
-  ! compute the explicit tangential flux at the W point
-    ZSOURCE(:,:,IKB)       =                                                  &
-      PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:)         &
-     +PTAU12M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:)                          &
-     -PTAU33M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) 
-!
-  ! add the vertical part or the surface flux at the V,W vorticity point
-  ZSOURCE(:,:,IKB:IKB) =                                      &
-    (   MYM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) )     &
-     +  MYM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
-            *ZUSLOPEM(:,:,1:1)                                &
-            +ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
-            *ZVSLOPEM(:,:,1:1)                      )         &
-     - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL             &
-    ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
-!
-  ELSE   !atmosphere when coupling
-    ! input flux assumed to be in SI and at vorticity point
-    ZSOURCE(:,:,IKB:IKB) =     -XSSVFL_C(:,:,1:1)/(1.*PDZZ(:,:,IKB:IKB)) &
-      * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
-  ENDIF
-  !No flux at the atmosphere top
-  ZSOURCE(:,:,IKE) = 0.
-ENDIF ! End of Ocean or Atmospher Cases
-ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
-! 
-!  Obtention of the split V at t+ deltat 
-CALL TRIDIAG_WIND(KKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,  &
-                  MYM(PRHODJ),ZSOURCE,ZRES)
-!
-! Compute the equivalent tendency for the V wind component
-!
-PRVS(:,:,:)=PRVS(:,:,:)+MYM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PVM(:,:,:))/PTSTEP
-!
-!
-!*       6.2  Complete 1D dynamic Production
-!
-!  vertical flux of the V wind component
-!
-ZFLXZ(:,:,:)   = -XCMFS * MYM(ZKEFF) * &
-                DZM( PIMPL*ZRES + PEXPL*PVM ) / MYM(PDZZ)
-!
-ZFLXZ(:,:,IKB:IKB)   =   MYM(PDZZ(:,:,IKB:IKB))  *                       &
-  ( ZSOURCE(:,:,IKB:IKB)                                                 &
-   +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL                      &      
-  ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
-!  
-!
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
-!
-IF (LOCEAN) THEN
-  ZFLXZ(:,:,IKE:IKE)   =   MYM(PDZZ(:,:,IKE:IKE))  *                &
-      ZSOURCE(:,:,IKE:IKE)                                          &
-      / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) )
-  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) 
-END IF
-!
-IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-  ! stores the V wind component vertical flux
-  TZFIELD%CMNHNAME   = 'VW_VFLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'VW_VFLX'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'V wind component vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-END IF
-!
-! second part of total momentum flux
-!
-PWV(:,:,:) = ZFLXZ(:,:,:)
-!
-!  Contribution to the dynamic production of TKE
-! compute the dynamic production contribution at the mass point
-!
-ZA(:,:,:) = - MZF( MYF ( ZFLXZ * GZ_V_VW(PVM,PDZZ) ) )
-!
-! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
-ZA(:,:,IKB:IKB)  =                                                 &
-                 - MYF (                                          &
-ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB))  &
-                       / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL))               &
-                       )
-!
-IF (LOCEAN) THEN
-  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
-  ZA(:,:,IKE:IKE) = - MYF (                                                  &
-   ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-KKL:IKE-KKL))  &
-                          / MYM(PDZZ(:,:,IKE-KKL:IKE-KKL))                   &
-                          )
-END IF
-!
-PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
-!
-! Storage in the LES configuration
-!
-IF (LLES_CALL) THEN
-  CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MZF(MYF(ZFLXZ)), X_LES_SUBGRID_WV )
-  CALL LES_MEAN_SUBGRID( MZF(MYF(GZ_V_VW(PVM,PDZZ)*&
-                    & ZFLXZ)), X_LES_RES_ddxa_V_SBG_UaV )
-  CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-END IF
-!
-!
-!*       6.3  Source of W wind component 
-!
-IF(HTURBDIM=='3DIM') THEN
-  ! Compute the source for the W wind component
-  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
-  IF (LOCEAN) THEN
-    ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
-  END IF
-  !
-  IF (.NOT. L2D) THEN 
-    IF (.NOT. LFLAT) THEN
-      PRWS(:,:,:)= PRWS(:,:,:)                               &
-                  -DYF( MZM( MYM(PRHODJ) /PDYY ) * ZFLXZ )   &
-                  +DZM( PRHODJ / MZF(PDZZ ) *                &
-                        MYF( MZF( ZFLXZ*PDZY ) / PDYY )      &
-                      )
-    ELSE
-      PRWS(:,:,:)= PRWS(:,:,:) -DYF( MZM( MYM(PRHODJ) /PDYY ) * ZFLXZ )
-    END IF
-  END IF
-  ! 
-  ! Complete the Dynamical production with the W wind component 
-  IF (.NOT. L2D) THEN
-    ZA(:,:,:) = - MZF( MYF ( ZFLXZ * GY_W_VW( PWM,PDYY,PDZZ,PDZY) )  )
-  !
-  ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
-    ZA(:,:,IKB:IKB) = - MYF (                                              &
-     ZFLXZ(:,:,IKB+KKL:IKB+KKL) *                                          &
-       ( DYM( PWM(:,:,IKB+KKL:IKB+KKL) )                                   &
-        -MYM(  (PWM(:,:,IKB+2*KKL:IKB+2*KKL)-PWM(:,:,IKB+KKL:IKB+KKL))     &
-                /(PDZZ(:,:,IKB+2*KKL:IKB+2*KKL)+PDZZ(:,:,IKB+KKL:IKB+KKL)) &
-              +(PWM(:,:,IKB+KKL:IKB+KKL)-PWM(:,:,IKB:IKB  ))               &
-                /(PDZZ(:,:,IKB+KKL:IKB+KKL)+PDZZ(:,:,IKB:IKB  ))           &
-            )                                                              &
-          * PDZY(:,:,IKB+KKL:IKB+KKL)                                      &
-       ) / (0.5*(PDYY(:,:,IKB+KKL:IKB+KKL)+PDYY(:,:,IKB:IKB)))             &
-                            )
-  !
-    IF (LOCEAN) THEN
-     ZA(:,:,IKE:IKE) = - MYF (                                              &
-      ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                          &
-        ( DYM( PWM(:,:,IKE-KKL:IKE-KKL) )                                   &
-         -MYM(  (PWM(:,:,IKE-2*KKL:IKE-2*KKL)-PWM(:,:,IKE-KKL:IKE-KKL))     &
-                 /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) &
-               +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE  ))               &
-                 /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE  ))           &
-             )                                                              &
-           * PDZY(:,:,IKE-KKL:IKE-KKL)                                      &
-        ) / (0.5*(PDYY(:,:,IKE-KKL:IKE-KKL)+PDYY(:,:,IKE:IKE)))             &
-                            )
-    END IF
-!    
-    PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
-  !
-  END IF
-  !
-  ! Storage in the LES configuration
-  !
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(MYF(GY_W_VW(PWM,PDYY,&
-    PDZZ,PDZY)*ZFLXZ)), X_LES_RES_ddxa_W_SBG_UaW , .TRUE. )
-    CALL LES_MEAN_SUBGRID( MYF(GY_M_V(KKA,KKU,KKL,PTHLM,PDYY,PDZZ,PDZY)&
-    *MZF(ZFLXZ)), X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. )
-    IF (KRR>=1) THEN
-      CALL LES_MEAN_SUBGRID( MYF(GY_V_M(PRM(:,:,:,1),PDYY,PDZZ,&
-      PDZY)*MZF(ZFLXZ)),X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE. )
-    END IF
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-  !
-END IF
-!
-!
-!----------------------------------------------------------------------------
-!
-!*       7.   DIAGNOSTIC COMPUTATION OF THE 1D <W W> VARIANCE
-!             -----------------------------------------------
-!
-IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. HTURBDIM == '1DIM') THEN
-  ZFLXZ(:,:,:)= (2./3.) * PTKEM(:,:,:)                     &
-     -XCMFS*PLM(:,:,:)*SQRT(PTKEM(:,:,:))*GZ_W_M(PWM,PDZZ)
-  ! to be tested &
-  !   +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) 
-  ! stores the W variance
-  TZFIELD%CMNHNAME   = 'W_VVAR'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'W_VVAR'
-  TZFIELD%CUNITS     = 'm2 s-2'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_W_VVAR'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-END IF
-!
-!----------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('TURB_VER_DYN_FLUX',1,ZHOOK_HANDLE)
-END SUBROUTINE TURB_VER_DYN_FLUX
diff --git a/src/mesonh/turb/turb_ver_sv_corr.f90 b/src/mesonh/turb/turb_ver_sv_corr.f90
deleted file mode 100644
index 6676e227c..000000000
--- a/src/mesonh/turb/turb_ver_sv_corr.f90
+++ /dev/null
@@ -1,229 +0,0 @@
-!MNH_LIC Copyright 2002-2020 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODI_TURB_VER_SV_CORR
-!    ####################
-!
-INTERFACE 
-!
-      SUBROUTINE TURB_VER_SV_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI,                    &
-                      PDZZ,                                         &
-                      PTHLM,PRM,PTHVREF,                            &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PPHI3,PPSI3,  &
-                      PWM,PSVM,                                     &
-                      PTKEM,PLM,PLEPS,PPSI_SV                       )
-!
-INTEGER,                 INTENT(IN)  ::  KKA, KKU ! near ground and uppest atmosphere array indexes
-INTEGER,                 INTENT(IN)  ::  KKL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
-INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
-INTEGER,                INTENT(IN)   ::  KRRL         ! number of liquid var.
-INTEGER,                INTENT(IN)   ::  KRRI         ! number of ice var.
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ 
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM        ! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! reference Thv
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
-                  ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Inv.Turb.Sch.for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Inv.Turb.Sch.for humidity
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! w at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
-                            ! cumulated sources for the prognostic variables
-!
-!
-END SUBROUTINE TURB_VER_SV_CORR
-!
-END INTERFACE
-!
-END MODULE MODI_TURB_VER_SV_CORR
-!
-!
-!     ###############################################################
-      SUBROUTINE TURB_VER_SV_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI,        &
-                      PDZZ,                                         &
-                      PTHLM,PRM,PTHVREF,                            &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PPHI3,PPSI3,  &
-                      PWM,PSVM,                                     &
-                      PTKEM,PLM,PLEPS,PPSI_SV                       )
-!     ###############################################################
-!
-!
-!!****  *TURB_VER_SV_CORR* -compute the subgrid Sv2 and SvThv terms
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!            
-!!    EXTERNAL
-!!    --------
-!!
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute:
-!!            - the coefficients for the turbulent correlation between
-!!            any variable and the virtual potential temperature, of its 
-!!            correlations with the conservative potential temperature and 
-!!            the humidity conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      V. Masson               * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original       October  29, 2002
-!!      JP Pinty       Feb      20, 2003 Add PFRAC_ICE
-!!--------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_PARAMETERS
-USE MODD_LES
-USE MODD_CONF
-USE MODD_NSV, ONLY : NSV,NSV_LGBEG,NSV_LGEND
-USE MODD_BLOWSNOW
-!
-!
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
-USE MODI_SHUMAN , ONLY : MZF
-USE MODI_EMOIST
-USE MODI_ETHETA
-USE MODI_LES_MEAN_SUBGRID
-!
-USE MODI_SECOND_MNH
-!
-IMPLICIT NONE
-!
-!*      0.1  declarations of arguments
-!
-!
-!
-INTEGER,                 INTENT(IN)  :: KKA, KKU ! near ground and uppest atmosphere array indexes
-INTEGER,                 INTENT(IN)  :: KKL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
-INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
-INTEGER,                INTENT(IN)   ::  KRRL         ! number of liquid var.
-INTEGER,                INTENT(IN)   ::  KRRI         ! number of ice var.
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM        ! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! reference Thv
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
-                  ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Inv.Turb.Sch.for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Inv.Turb.Sch.for humidity
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! w at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
-                            ! cumulated sources for the prognostic variables
-!
-!
-!
-!
-!*       0.2  declaration of local variables
-!
-!
-REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3))  ::  &
-       ZA, ZFLXZ
-!
-REAL :: ZCSV          !constant for the scalar flux
-!
-INTEGER             :: JSV          ! loop counters
-!
-REAL :: ZTIME1, ZTIME2
-!
-REAL :: ZCSVD  = 1.2  ! constant for scalar variance dissipation
-REAL :: ZCTSVD = 2.4  ! constant for temperature - scalar covariance dissipation
-REAL :: ZCQSVD = 2.4  ! constant for humidity - scalar covariance dissipation
-!----------------------------------------------------------------------------
-!
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',0,ZHOOK_HANDLE)
-CALL SECOND_MNH(ZTIME1)
-!
-IF(LBLOWSNOW) THEN
-! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables          
-   ZCSV= XCHF/XRSNOW
-ELSE
-   ZCSV= XCHF
-ENDIF
-!
-DO JSV=1,NSV
-  !
-  IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE
-  !
-  ! variance Sv2
-  !
-  IF (LLES_CALL) THEN
-    ! approximation: diagnosed explicitely (without implicit term)
-    ZFLXZ(:,:,:) =  PPSI_SV(:,:,:,JSV)*GZ_M_W(KKA,KKU,KKL,PSVM(:,:,:,JSV),PDZZ)**2
-    ZFLXZ(:,:,:) = ZCSV / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:) )
-    CALL LES_MEAN_SUBGRID( -2.*ZCSVD*SQRT(PTKEM)*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLXZ, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
-  END IF
-  !
-  ! covariance ThvSv
-  !
-  IF (LLES_CALL) THEN
-    ! approximation: diagnosed explicitely (without implicit term)
-    ZA(:,:,:)   =  ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM)
-    ZFLXZ(:,:,:)= ( XCSHF * PPHI3 + ZCSV * PPSI_SV(:,:,:,JSV) )              &
-                  *  GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)                          &
-                  *  GZ_M_W(KKA,KKU,KKL,PSVM(:,:,:,JSV),PDZZ)
-    ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCTSVD) * MZF(ZFLXZ)
-    CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) ) 
-    CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
-    !
-    IF (KRR>=1) THEN
-      ZA(:,:,:)   =  EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM)
-      ZFLXZ(:,:,:)= ( XCHF * PPSI3 + ZCSV * PPSI_SV(:,:,:,JSV) )             &
-                    *  GZ_M_W(KKA,KKU,KKL,PRM(:,:,:,1),PDZZ)                 &
-                    *  GZ_M_W(KKA,KKU,KKL,PSVM(:,:,:,JSV),PDZZ)
-      ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCQSVD) * MZF(ZFLXZ)
-      CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-      CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
-    END IF
-  END IF
-  !
-END DO   ! end of scalar loop 
-!
-CALL SECOND_MNH(ZTIME2)
-XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-!----------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',1,ZHOOK_HANDLE)
-END SUBROUTINE TURB_VER_SV_CORR
diff --git a/src/mesonh/turb/turb_ver_sv_flux.f90 b/src/mesonh/turb/turb_ver_sv_flux.f90
deleted file mode 100644
index aa7010e43..000000000
--- a/src/mesonh/turb/turb_ver_sv_flux.f90
+++ /dev/null
@@ -1,500 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODI_TURB_VER_SV_FLUX 
-!    ####################
-!
-INTERFACE 
-!
-      SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL,                      &
-                      OTURB_FLX,HTURBDIM,                           &
-                      PIMPL,PEXPL,                                  &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDZZ,PDIRCOSZW,                               &
-                      PRHODJ,PWM,                                   &
-                      PSFSVM,PSFSVP,                                &
-                      PSVM,                                         &
-                      PTKEM,PLM,MFMOIST,PPSI_SV,                    &
-                      PRSVS,PWSV                                    )
-!
-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=AR
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ 
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVM       ! t - deltat 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVP       ! t + deltat 
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
-                            ! cumulated sources for the prognostic variables
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)  :: PWSV        ! scalar flux
-
-!
-!
-END SUBROUTINE TURB_VER_SV_FLUX
-!
-END INTERFACE
-!
-END MODULE MODI_TURB_VER_SV_FLUX
-!
-!
-!     ###############################################################
-      SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL,                      &
-                      OTURB_FLX,HTURBDIM,                           &
-                      PIMPL,PEXPL,                                  &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDZZ,PDIRCOSZW,                               &
-                      PRHODJ,PWM,                                   &
-                      PSFSVM,PSFSVP,                                &
-                      PSVM,                                         &
-                      PTKEM,PLM,PPSI_SV,                            &
-                      PRSVS,PWSV                                    )
-!
-
-!
-!
-!!****  *TURB_VER_SV_FLUX* -compute the source terms due to the vertical turbulent
-!!       fluxes.
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to compute the vertical turbulent
-!     fluxes of the evolutive variables and give back the source 
-!     terms to the main program.	In the case of large horizontal meshes,
-!     the divergence of these vertical turbulent fluxes represent the whole
-!     effect of the turbulence but when the three-dimensionnal version of
-!     the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences
-!     are completed in the next routine TURB_HOR. 
-!		  An arbitrary degree of implicitness has been implemented for the 
-!     temporal treatment of these diffusion terms.
-!       The vertical boundary conditions are as follows:
-!           *  at the bottom, the surface fluxes are prescribed at the same
-!              as the other turbulent fluxes
-!           *  at the top, the turbulent fluxes are set to 0.
-!       It should be noted that the condensation has been implicitely included
-!     in this turbulence scheme by using conservative variables and computing
-!     the subgrid variance of a statistical variable s indicating the presence 
-!     or not of condensation in a given mesh. 
-!
-!!**  METHOD
-!!    ------
-!!      1D type calculations are made;
-!!      The vertical turbulent fluxes are computed in an off-centered
-!!      implicit scheme (a Crank-Nicholson type with coefficients different
-!!      than 0.5), which allows to vary the degree of implicitness of the
-!!      formulation.
-!!      	 The different prognostic variables are treated one by one. 
-!!      The contributions of each turbulent fluxes are cumulated into the 
-!!      tendency  PRvarS, and into the dynamic and thermal production of 
-!!      TKE if necessary.
-!!        
-!!			 In section 2 and 3, the thermodynamical fields are considered.
-!!      Only the turbulent fluxes of the conservative variables
-!!      (Thetal and Rnp stored in PRx(:,:,:,1))  are computed. 
-!!       Note that the turbulent fluxes at the vertical 
-!!      boundaries are given either by the soil scheme for the surface one
-!!      ( at the same instant as the others fluxes) and equal to 0 at the 
-!!      top of the model. The thermal production is computed by vertically 
-!!      averaging the turbulent flux and multiply this flux at the mass point by
-!!      a function ETHETA or EMOIST, which preform the transformation from the
-!!      conservative variables to the virtual potential temperature. 
-!!     
-!! 	    In section 4, the variance of the statistical variable
-!!      s indicating presence or not of condensation, is determined in function 
-!!      of the turbulent moments of the conservative variables and its
-!!      squarred root is stored in PSIGS. This information will be completed in 
-!!      the horizontal turbulence if the turbulence dimensionality is not 
-!!      equal to "1DIM".
-!!
-!!			 In section 5, the x component of the stress tensor is computed.
-!!      The surface flux <u'w'> is computed from the value of the surface
-!!      fluxes computed in axes linked to the orography ( i", j" , k"):
-!!        i" is parallel to the surface and in the direction of the maximum
-!!           slope
-!!        j" is also parallel to the surface and in the normal direction of
-!!           the maximum slope
-!!        k" is the normal to the surface
-!!      In order to prevent numerical instability, the implicit scheme has 
-!!      been extended to the surface flux regarding to its dependence in 
-!!      function of U. The dependence in function of the other components 
-!!      introduced by the different rotations is only explicit.
-!!      The turbulent fluxes are used to compute the dynamic production of 
-!!      TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the
-!!      ground), an harmonic extrapolation from the dynamic production at 
-!!      PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U
-!!      in the surface layer.
-!!
-!!         In section 6, the same steps are repeated but for the y direction
-!!		  and in section 7, a diagnostic computation of the W variance is 
-!!      performed.
-!!
-!!         In section 8, the turbulent fluxes for the scalar variables are 
-!!      computed by the same way as the conservative thermodynamical variables
-!!
-!!            
-!!    EXTERNAL
-!!    --------
-!!      GX_U_M, GY_V_M, GZ_W_M :  cartesian gradient operators 
-!!      GX_U_UW,GY_V_VW	         (X,Y,Z) represent the direction of the gradient
-!!                               _(M,U,...)_ represent the localization of the 
-!!                               field to be derivated
-!!                               _(M,UW,...) represent the localization of the 
-!!                               field	derivated
-!!                               
-!!
-!!      MXM,MXF,MYM,MYF,MZM,MZF
-!!                             :  Shuman functions (mean operators)     
-!!      DXF,DYF,DZF,DZM
-!!                             :  Shuman functions (difference operators)     
-!!                               
-!!      SUBROUTINE TRIDIAG     : to compute the split implicit evolution
-!!                               of a variable located at a mass point
-!!
-!!      SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution
-!!                               of a variable located at a wind point
-!!
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute:
-!!            - the coefficients for the turbulent correlation between
-!!            any variable and the virtual potential temperature, of its 
-!!            correlations with the conservative potential temperature and 
-!!            the humidity conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST : contains physical constants
-!!
-!!           XG         : gravity constant
-!!
-!!      Module MODD_CTURB: contains the set of constants for
-!!                        the turbulence scheme
-!!
-!!           XCMFS,XCMFB : cts for the momentum flux
-!!           XCSHF       : ct for the sensible heat flux
-!!           XCHF        : ct for the moisture flux
-!!           XCTV,XCHV   : cts for the T and moisture variances
-!!
-!!      Module MODD_PARAMETERS
-!!
-!!           JPVEXT_TURB     : number of vertical external points
-!!           JPHEXT     : number of horizontal external points
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original       August   19, 1994
-!!      Modifications: February 14, 1995 (J.Cuxart and J.Stein) 
-!!                                  Doctorization and Optimization
-!!      Modifications: March 21, 1995 (J.M. Carriere) 
-!!                                  Introduction of cloud water
-!!      Modifications: June  14, 1995 (J.Cuxart and J. Stein) 
-!!                                 Phi3 and Psi3 at w-point + bug in the all
-!!                                 or nothing condens. 
-!!      Modifications: Sept  15, 1995 (J.Cuxart and J. Stein) 
-!!                                 Change the DP computation at the ground
-!!      Modifications: October 10, 1995 (J.Cuxart and J. Stein) 
-!!                                 Psi for scal var and LES tools
-!!      Modifications: November 10, 1995 (J. Stein)
-!!                                 change the surface	relations 
-!!      Modifications: February 20, 1995 (J. Stein) optimization
-!!      Modifications: May 21, 1996 (J. Stein) 
-!!                                  bug in the vertical flux of the V wind 
-!!                                  component for explicit computation
-!!      Modifications: May 21, 1996 (N. wood) 
-!!                                  modify the computation of the vertical
-!!                                   part or the surface tangential flux
-!!      Modifications: May 21, 1996 (P. Jabouille)
-!!                                  same modification in the Y direction
-!!      
-!!      Modifications: Sept 17, 1996 (J. Stein) change the moist case by using
-!!                                  Pi instead of Piref + use Atheta and Amoist
-!!
-!!      Modifications: Nov  24, 1997 (V. Masson) removes the DO loops
-!!      Modifications: Mar  31, 1998 (V. Masson) splits the routine TURB_VER_SV_FLUX  
-!!      Modifications: Dec  01, 2000 (V. Masson) conservation of scalar emission
-!!                                               from surface in 1DIM case
-!!                                               when slopes are present
-!!                     Jun  20, 2001 (J Stein) case of lagragian variables
-!!                     Nov  06, 2002 (V. Masson) LES budgets
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!                     Feb 2012(Y. Seity) add possibility to run with reversed 
-!!                                              vertical levels
-!!      Modifications: July 2015 (Wim de Rooy) LHARAT switch
-!!                     Feb 2017(M. Leriche) add initialisation of ZSOURCE
-!!                                   to avoid unknwon values outside physical domain
-!!                                   and avoid negative values in sv tendencies
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!--------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS
-USE MODD_LES
-USE MODD_CONF
-USE MODD_NSV,            ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND
-USE MODD_BLOWSNOW
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
-!
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
-USE MODI_SHUMAN , ONLY : DZM, MZM, MZF
-USE MODI_TRIDIAG 
-USE MODI_TRIDIAG_WIND 
-USE MODI_EMOIST
-USE MODI_ETHETA
-USE MODI_LES_MEAN_SUBGRID
-!
-USE MODI_SECOND_MNH
-!
-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
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST       ! moist mf dual scheme
-
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVM       ! t - deltat 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVP       ! t + deltat 
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
-                            ! cumulated sources for the prognostic variables
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)  :: PWSV        ! scalar flux
-!
-!
-!
-!
-!*       0.2  declaration of local variables
-!
-!
-REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3))  ::  &
-       ZA, &       ! under diagonal elements of the tri-diagonal matrix involved
-                   ! in the temporal implicit scheme (also used to store coefficient
-                   ! J in Section 5)
-       ZRES, &     ! guess of the treated variable at t+ deltat when the turbu-
-                   ! lence is the only source of evolution added to the ones
-                   ! considered in ZSOURCE  
-       ZFLXZ,  &   ! vertical flux of the treated variable
-       ZSOURCE,  & ! source of evolution for the treated variable
-       ZKEFF       ! effectif diffusion coeff = LT * SQRT( TKE )
-INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
-                                    ! mass points of the domain in the 3 direct.
-INTEGER             :: IKT          ! array size in k direction
-INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
-INTEGER             :: JSV          ! loop counters
-INTEGER             :: JK           ! loop
-INTEGER             :: ISV          ! number of scalar var.
-!
-REAL :: ZTIME1, ZTIME2
-
-REAL :: ZCSVP = 4.0  ! constant for scalar flux presso-correlation (RS81)
-REAL :: ZCSV          !constant for the scalar flux
-!
-TYPE(TFIELDDATA)  :: TZFIELD
-!----------------------------------------------------------------------------
-!
-!*       1.   PRELIMINARIES
-!             -------------
-!
-
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_FLUX',0,ZHOOK_HANDLE)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-IKT=SIZE(PSVM,3)
-IKTE =IKT-JPVEXT_TURB  
-IKTB =1+JPVEXT_TURB               
-!
-ISV=SIZE(PSVM,4)
-!
-ZKEFF(:,:,:) = MZM( PLM(:,:,:) * SQRT(PTKEM(:,:,:)) )
-!
-IF(LBLOWSNOW) THEN
-! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables           
-   ZCSV= XCHF/XRSNOW
-ELSE
-   ZCSV= XCHF
-ENDIF
-!----------------------------------------------------------------------------
-!
-!*       8.   SOURCES OF PASSIVE SCALAR VARIABLES
-!             -----------------------------------
-!
-DO JSV=1,ISV
-!
-  IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE
-!
-! Preparation of the arguments for TRIDIAG 
-  ZA(:,:,:)    = -PTSTEP*ZCSV*PPSI_SV(:,:,:,JSV) *   &
-                 ZKEFF * MZM(PRHODJ) /   &
-                 PDZZ**2
-  ZSOURCE(:,:,:) = 0.
-!
-! Compute the sources for the JSVth scalar variable
-
-!* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
-! (in presence of slopes)
-!* in 1DIM case, the part of energy released in horizontal flux
-! is taken into account in the vertical part
-  IF (HTURBDIM=='3DIM') THEN
-    ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / &
-                       PDZZ(:,:,IKB) * PDIRCOSZW(:,:)                    &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))   
-  ELSE
-
-    ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / &
-                       PDZZ(:,:,IKB) / PDIRCOSZW(:,:)                    &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-  END IF
-  ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
-  ZSOURCE(:,:,IKE) = 0.
-!
-! Obtention of the split JSV scalar variable at t+ deltat  
-  CALL TRIDIAG(KKA,KKU,KKL,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES)
-!
-!  Compute the equivalent tendency for the JSV scalar variable
-  PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV)+    &
-                    PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP
-! PRSVS(:,:,:,JSV)= MAX((PRSVS(:,:,:,JSV)+    &
-!                   PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP),XSVMIN(JSV))
-!
-  IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL ) THEN
-    ! Diagnostic of the cartesian vertical flux
-    !
-    ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM)) / PDZZ * &
-                  DZM( PIMPL*ZRES(:,:,:) + PEXPL*PSVM(:,:,:,JSV) )
-    ! surface flux
-    !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
-    ! (in presence of slopes)
-    !* in 1DIM case, the part of energy released in horizontal flux
-    ! is taken into account in the vertical part
-    IF (HTURBDIM=='3DIM') THEN
-      ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV))  &
-                       * PDIRCOSZW(:,:)  
-    ELSE
-      ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV))  &
-                       / PDIRCOSZW(:,:)
-    END IF
-    ! extrapolates the flux under the ground so that the vertical average with
-    ! the IKB flux gives the ground value
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
-    DO JK=IKTB+1,IKTE-1
-      PWSV(:,:,JK,JSV)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
-    END DO
-    PWSV(:,:,IKB,JSV)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL))
-    PWSV(:,:,IKE,JSV)=PWSV(:,:,IKE-KKL,JSV)
- END IF
-  !
-  IF (OTURB_FLX .AND. TPFILE%LOPENED) THEN
-    ! stores the JSVth vertical flux
-    WRITE(TZFIELD%CMNHNAME,'("WSV_FLX_",I3.3)') JSV
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    !PW: TODO: use the correct units of the JSV variable (and multiply it by m s-1)
-    TZFIELD%CUNITS     = 'SVUNIT m s-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-  END IF
-  !
-  ! Storage in the LES configuration
-  !
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(ZFLXZ), X_LES_SUBGRID_WSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID( GZ_W_M(PWM,PDZZ)*MZF(ZFLXZ), &
-                           X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID( MZF(GZ_M_W(KKA,KKU,KKL,PSVM(:,:,:,JSV),PDZZ)*ZFLXZ), &
-                           X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID( -ZCSVP*SQRT(PTKEM)/PLM*MZF(ZFLXZ), X_LES_SUBGRID_SvPz(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID( MZF(PWM*ZFLXZ), X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-  !
-END DO   ! end of scalar loop 
-!
-!----------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_FLUX',1,ZHOOK_HANDLE)
-END SUBROUTINE TURB_VER_SV_FLUX
diff --git a/src/mesonh/turb/turb_ver_thermo_corr.f90 b/src/mesonh/turb/turb_ver_thermo_corr.f90
deleted file mode 100644
index 6edf5c724..000000000
--- a/src/mesonh/turb/turb_ver_thermo_corr.f90
+++ /dev/null
@@ -1,756 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODI_TURB_VER_THERMO_CORR
-!    ####################
-!
-INTERFACE 
-!
-      SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI,    &
-                      OTURB_FLX,HTURBDIM,HTOM,                      &
-                      PIMPL,PEXPL,                                  &
-                      TPFILE,                                       &
-                      PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,           &
-                      PRHODJ,PTHVREF,                               &
-                      PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
-                      PWM,PTHLM,PRM,PSVM,                           &
-                      PTKEM,PLM,PLEPS,                              &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,              &
-                      PBETA, PSQRT_TKE, PDTH_DZ, PDR_DZ, PRED2TH3,  &
-                      PRED2R3, PRED2THR3, PBLL_O_E, PETHETA,        &
-                      PEMOIST, PREDTH1, PREDR1, PPHI3, PPSI3, PD,   &
-                      PFWTH,PFWR,PFTH2,PFR2,PFTHR,                  &
-                      PTHLP,PRP,MFMOIST,PSIGS                       )
-!     ###############################################################
-!
-!
-!!****  *TURB_VER_THERMO_FLUX* -compute the source terms due to the vertical turbulent
-!!       fluxes.
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to compute the vertical turbulent
-!     fluxes of the evolutive variables and give back the source 
-!     terms to the main program.	In the case of large horizontal meshes,
-!     the divergence of these vertical turbulent fluxes represent the whole
-!     effect of the turbulence but when the three-dimensionnal version of
-!     the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences
-!     are completed in the next routine TURB_HOR. 
-!		  An arbitrary degree of implicitness has been implemented for the 
-!     temporal treatment of these diffusion terms.
-!       The vertical boundary conditions are as follows:
-!           *  at the bottom, the surface fluxes are prescribed at the same
-!              as the other turbulent fluxes
-!           *  at the top, the turbulent fluxes are set to 0.
-!       It should be noted that the condensation has been implicitely included
-!     in this turbulence scheme by using conservative variables and computing
-!     the subgrid variance of a statistical variable s indicating the presence 
-!     or not of condensation in a given mesh. 
-!
-!!**  METHOD
-!!    ------
-!!      1D type calculations are made;
-!!      The vertical turbulent fluxes are computed in an off-centered
-!!      implicit scheme (a Crank-Nicholson type with coefficients different
-!!      than 0.5), which allows to vary the degree of implicitness of the
-!!      formulation.
-!!      	 The different prognostic variables are treated one by one. 
-!!      The contributions of each turbulent fluxes are cumulated into the 
-!!      tendency  PRvarS, and into the dynamic and thermal production of 
-!!      TKE if necessary.
-!!        
-!!			 In section 2 and 3, the thermodynamical fields are considered.
-!!      Only the turbulent fluxes of the conservative variables
-!!      (Thetal and Rnp stored in PRx(:,:,:,1))  are computed. 
-!!       Note that the turbulent fluxes at the vertical 
-!!      boundaries are given either by the soil scheme for the surface one
-!!      ( at the same instant as the others fluxes) and equal to 0 at the 
-!!      top of the model. The thermal production is computed by vertically 
-!!      averaging the turbulent flux and multiply this flux at the mass point by
-!!      a function ETHETA or EMOIST, which preform the transformation from the
-!!      conservative variables to the virtual potential temperature. 
-!!     
-!! 	    In section 4, the variance of the statistical variable
-!!      s indicating presence or not of condensation, is determined in function 
-!!      of the turbulent moments of the conservative variables and its
-!!      squarred root is stored in PSIGS. This information will be completed in 
-!!      the horizontal turbulence if the turbulence dimensionality is not 
-!!      equal to "1DIM".
-!!
-!!			 In section 5, the x component of the stress tensor is computed.
-!!      The surface flux <u'w'> is computed from the value of the surface
-!!      fluxes computed in axes linked to the orography ( i", j" , k"):
-!!        i" is parallel to the surface and in the direction of the maximum
-!!           slope
-!!        j" is also parallel to the surface and in the normal direction of
-!!           the maximum slope
-!!        k" is the normal to the surface
-!!      In order to prevent numerical instability, the implicit scheme has 
-!!      been extended to the surface flux regarding to its dependence in 
-!!      function of U. The dependence in function of the other components 
-!!      introduced by the different rotations is only explicit.
-!!      The turbulent fluxes are used to compute the dynamic production of 
-!!      TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the
-!!      ground), an harmonic extrapolation from the dynamic production at 
-!!      PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U
-!!      in the surface layer.
-!!
-!!         In section 6, the same steps are repeated but for the y direction
-!!		  and in section 7, a diagnostic computation of the W variance is 
-!!      performed.
-!!
-!!         In section 8, the turbulent fluxes for the scalar variables are 
-!!      computed by the same way as the conservative thermodynamical variables
-!!
-!!            
-!!    EXTERNAL
-!!    --------
-!!      GX_U_M, GY_V_M, GZ_W_M :  cartesian gradient operators 
-!!      GX_U_UW,GY_V_VW	         (X,Y,Z) represent the direction of the gradient
-!!                               _(M,U,...)_ represent the localization of the 
-!!                               field to be derivated
-!!                               _(M,UW,...) represent the localization of the 
-!!                               field	derivated
-!!                               
-!!
-!!      MXM,MXF,MYM,MYF,MZM,MZF
-!!                             :  Shuman functions (mean operators)     
-!!      DXF,DYF,DZF,DZM
-!!                             :  Shuman functions (difference operators)     
-!!                               
-!!      SUBROUTINE TRIDIAG     : to compute the split implicit evolution
-!!                               of a variable located at a mass point
-!!
-!!      SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution
-!!                               of a variable located at a wind point
-!!
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute:
-!!            - the coefficients for the turbulent correlation between
-!!            any variable and the virtual potential temperature, of its 
-!!            correlations with the conservative potential temperature and 
-!!            the humidity conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST : contains physical constants
-!!
-!!           XG         : gravity constant
-!!
-!!      Module MODD_CTURB: contains the set of constants for
-!!                        the turbulence scheme
-!!
-!!           XCMFS,XCMFB : cts for the momentum flux
-!!           XCSHF       : ct for the sensible heat flux
-!!           XCHF        : ct for the moisture flux
-!!           XCTV,XCHV   : cts for the T and moisture variances
-!!
-!!      Module MODD_PARAMETERS
-!!
-!!           JPVEXT_TURB     : number of vertical external points
-!!           JPHEXT     : number of horizontal external points
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original       August   19, 1994
-!!      Modifications: February 14, 1995 (J.Cuxart and J.Stein) 
-!!                                  Doctorization and Optimization
-!!      Modifications: March 21, 1995 (J.M. Carriere) 
-!!                                  Introduction of cloud water
-!!      Modifications: June  14, 1995 (J.Cuxart and J. Stein) 
-!!                                 Phi3 and Psi3 at w-point + bug in the all
-!!                                 or nothing condens. 
-!!      Modifications: Sept  15, 1995 (J.Cuxart and J. Stein) 
-!!                                 Change the DP computation at the ground
-!!      Modifications: October 10, 1995 (J.Cuxart and J. Stein) 
-!!                                 Psi for scal var and LES tools
-!!      Modifications: November 10, 1995 (J. Stein)
-!!                                 change the surface	relations 
-!!      Modifications: February 20, 1995 (J. Stein) optimization
-!!      Modifications: May 21, 1996 (J. Stein) 
-!!                                  bug in the vertical flux of the V wind 
-!!                                  component for explicit computation
-!!      Modifications: May 21, 1996 (N. wood) 
-!!                                  modify the computation of the vertical
-!!                                   part or the surface tangential flux
-!!      Modifications: May 21, 1996 (P. Jabouille)
-!!                                  same modification in the Y direction
-!!      
-!!      Modifications: Sept 17, 1996 (J. Stein) change the moist case by using
-!!                                  Pi instead of Piref + use Atheta and Amoist
-!!
-!!      Modifications: Nov  24, 1997 (V. Masson) removes the DO loops 
-!!      Modifications: Mar  31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX 
-!!      Modifications: Oct  18, 2000 (V. Masson) LES computations
-!!      Modifications: Dec  01, 2000 (V. Masson) conservation of energy from
-!!                                               surface flux in 1DIM case
-!!                                               when slopes are present
-!!                     Nov  06, 2002 (V. Masson) LES budgets
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!                     2012-02 (Y. Seity) add possibility to run with reversed 
-!!                                              vertical levels
-!!      Modifications  July 2015 (Wim de Rooy) LHARAT switch
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!--------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_PARAMETERS
-USE MODD_CONF
-USE MODD_LES
-!
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
-USE MODI_SHUMAN , ONLY : DZM, MZM, MZF
-USE MODI_TRIDIAG 
-USE MODI_LES_MEAN_SUBGRID
-USE MODI_PRANDTL
-USE MODI_TRIDIAG_THERMO
-!
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-USE MODE_PRANDTL
-!
-USE MODI_SECOND_MNH
-!
-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)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-CHARACTER(len=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
-
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
-                                                      ! Potential Temperature 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
-!                                                     ! t - deltat 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
-!                                                     ! t + deltat 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM 
-! Vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM 
-! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
-                                                      ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! Mixing ratios 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-! In case LHARATU=TRUE, PLM already includes all stability corrections
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
-! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHLP      ! guess of thl at t+ deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRP        ! guess of r at t+ deltat
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PSIGS     ! Vert. part of Sigma_s at t
-!
-!
-!
-!*       0.2  declaration of local variables
-!
-!
-REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
-       ZA,       & ! work variable for wrc
-       ZFLXZ,    & ! vertical flux of the treated variable
-       ZSOURCE,  & ! source of evolution for the treated variable
-       ZKEFF,    & ! effectif diffusion coeff = LT * SQRT( TKE )
-       ZF,       & ! Flux in dTh/dt =-dF/dz (evaluated at t-1)(or rt instead of Th)
-       ZDFDDTDZ, & ! dF/d(dTh/dz)
-       ZDFDDRDZ, & ! dF/d(dr/dz)
-       Z3RDMOMENT  ! 3 order term in flux or variance equation
-INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
-                                    ! mass points of the domain in the 3 direct.
-INTEGER             :: I1,I2        ! For ZCOEFF allocation
-REAL, DIMENSION(:,:,:),ALLOCATABLE  :: ZCOEFF
-                                    ! coefficients for the uncentred gradient 
-                                    ! computation near the ground
-!
-REAL :: ZTIME1, ZTIME2
-!
-LOGICAL :: GUSERV   ! flag to use water
-LOGICAL :: GFTH2    ! flag to use w'th'2
-LOGICAL :: GFWTH    ! flag to use w'2th'
-LOGICAL :: GFR2     ! flag to use w'r'2
-LOGICAL :: GFWR     ! flag to use w'2r'
-LOGICAL :: GFTHR    ! flag to use w'th'r'
-TYPE(TFIELDDATA) :: TZFIELD
-!----------------------------------------------------------------------------
-!
-!*       1.   PRELIMINARIES
-!             -------------
-!
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-I1=MIN(KKA+JPVEXT_TURB*KKL,KKA+JPVEXT_TURB*KKL+2*KKL)
-I2=MAX(KKA+JPVEXT_TURB*KKL,KKA+JPVEXT_TURB*KKL+2*KKL)
-
-ALLOCATE(ZCOEFF(SIZE(PDZZ,1),SIZE(PDZZ,2),I1:I2))
-!
-GUSERV = (KRR/=0)
-!
-!  compute the coefficients for the uncentred gradient computation near the 
-!  ground
-ZCOEFF(:,:,IKB+2*KKL)= - PDZZ(:,:,IKB+KKL) /      &
-       ( (PDZZ(:,:,IKB+2*KKL)+PDZZ(:,:,IKB+KKL)) * PDZZ(:,:,IKB+2*KKL) )
-ZCOEFF(:,:,IKB+KKL)=   (PDZZ(:,:,IKB+2*KKL)+PDZZ(:,:,IKB+KKL)) /      &
-       ( PDZZ(:,:,IKB+KKL) * PDZZ(:,:,IKB+2*KKL) )
-ZCOEFF(:,:,IKB)= - (PDZZ(:,:,IKB+2*KKL)+2.*PDZZ(:,:,IKB+KKL)) /      &
-       ( (PDZZ(:,:,IKB+2*KKL)+PDZZ(:,:,IKB+KKL)) * PDZZ(:,:,IKB+KKL) )
-!
-ZKEFF(:,:,:) = MZM( PLM(:,:,:) * SQRT(PTKEM(:,:,:)) )
-!
-! Flags for 3rd order quantities
-!
-GFTH2 = .FALSE.
-GFR2  = .FALSE.
-GFTHR = .FALSE.
-GFWTH = .FALSE.
-GFWR  = .FALSE.
-!
-IF (HTOM/='NONE') THEN
-  GFTH2 = ANY(PFTH2/=0.)
-  GFR2  = ANY(PFR2 /=0.) .AND. GUSERV
-  GFTHR = ANY(PFTHR/=0.) .AND. GUSERV
-  GFWTH = ANY(PFWTH/=0.)
-  GFWR  = ANY(PFWR /=0.) .AND. GUSERV
-END IF
-!----------------------------------------------------------------------------
-!
-!
-!*       4.   TURBULENT CORRELATIONS : <THl THl>, <THl Rnp>, <Rnp Rnp>
-!             --------------------------------------------------------
-!
-!
-!*       4.2  <THl THl> 
-!
-! Compute the turbulent variance F and F' at time t-dt.
-  ZF      (:,:,:) = XCTV*PLM*PLEPS*MZF(PPHI3*PDTH_DZ**2)
-  ZDFDDTDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
-  !
-  ! Effect of 3rd order terms in temperature flux (at mass point)
-  !
-  ! d(w'th'2)/dz
-  IF (GFTH2) THEN
-    ZF       = ZF       + M3_TH2_WTH2(PREDTH1,PREDR1,PD,PLEPS,&
-     & PSQRT_TKE) * PFTH2
-    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTH2_O_DDTDZ(PREDTH1,PREDR1,&
-     & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTH2
-  END IF
-  !
-  ! d(w'2th')/dz
-  IF (GFWTH) THEN
-    ZF       = ZF       + M3_TH2_W2TH(PREDTH1,PREDR1,PD,PDTH_DZ,&
-     & PLM,PLEPS,PTKEM) * MZF(PFWTH)
-    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2TH_O_DDTDZ(PREDTH1,PREDR1,PD,&
-     & PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWTH)
-  END IF
-  !
-  IF (KRR/=0) THEN
-    ! d(w'r'2)/dz
-    IF (GFR2) THEN
-      ZF       = ZF       + M3_TH2_WR2(PD,PLEPS,PSQRT_TKE,PBLL_O_E,&
-       & PEMOIST,PDTH_DZ) * PFR2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
-    END IF
-    !
-    ! d(w'2r')/dz
-    IF (GFWR) THEN
-      ZF       = ZF       + M3_TH2_W2R(PD,PLM,PLEPS,PTKEM,PBLL_O_E,&
-       & PEMOIST,PDTH_DZ) * MZF(PFWR)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,&
-       & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * MZF(PFWR)
-    END IF
-    !
-    ! d(w'th'r')/dz
-    IF (GFTHR) THEN
-      ZF       = ZF       + M3_TH2_WTHR(PREDR1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PEMOIST,PDTH_DZ) * PFTHR
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTHR_O_DDTDZ(PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFTHR
-    END IF
-
-  END IF
-  !
-  ZFLXZ(:,:,:)   = ZF                                                              &
-  !     + PIMPL * XCTV*PLM*PLEPS                                                   &
-  !        *MZF(D_PHI3DTDZ2_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTH_DZ,HTURBDIM,GUSERV)   &
-  !             *DZM(PTHLP - PTHLM) / PDZZ                                        ) &
-        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM) / PDZZ )
-  !
-  ! special case near the ground ( uncentred gradient )
-  ZFLXZ(:,:,IKB) = XCTV * PPHI3(:,:,IKB+KKL) * PLM(:,:,IKB)   &
-     * PLEPS(:,:,IKB)                                         &
-  *( PEXPL *                                                  &
-     ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL)             &
-      +ZCOEFF(:,:,IKB+KKL  )*PTHLM(:,:,IKB+KKL  )             & 
-      +ZCOEFF(:,:,IKB      )*PTHLM(:,:,IKB  )   )**2          &
-    +PIMPL *                                                  &
-     ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL)             &
-      +ZCOEFF(:,:,IKB+KKL  )*PTHLP(:,:,IKB+KKL  )             &
-      +ZCOEFF(:,:,IKB      )*PTHLP(:,:,IKB  )   )**2          &
-   ) 
-  !
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-  !
-  ZFLXZ = MAX(0., ZFLXZ)
-  !
-  IF (KRRL > 0)  THEN
-    PSIGS(:,:,:) = ZFLXZ(:,:,:) * PATHETA(:,:,:)**2 
-  END IF
-  !
-  !
-  ! stores <THl THl>  
-  IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    TZFIELD%CMNHNAME   = 'THL_VVAR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'THL_VVAR'
-    TZFIELD%CUNITS     = 'K2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_THL_VVAR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-  END IF
-!
-! and we store in LES configuration
-!
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( ZFLXZ, X_LES_SUBGRID_Thl2 ) 
-    CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLXZ, X_LES_RES_W_SBG_Thl2 )
-    CALL LES_MEAN_SUBGRID( -2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Thl2 ) 
-    CALL LES_MEAN_SUBGRID( PETHETA*ZFLXZ, X_LES_SUBGRID_ThlThv ) 
-    CALL LES_MEAN_SUBGRID( -XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) 
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-!
-  IF ( KRR /= 0 ) THEN
-!
-!*       4.3  <THl Rnp>    
-!
-!
-    ! Compute the turbulent variance F and F' at time t-dt.
-    ZF      (:,:,:) = XCTV*PLM*PLEPS*MZF(0.5*(PPHI3+PPSI3)*PDTH_DZ*PDR_DZ)
-    ZDFDDTDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
-    ZDFDDRDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
-    !
-    ! Effect of 3rd order terms in temperature flux (at mass point)
-    !
-    ! d(w'th'2)/dz
-    IF (GFTH2) THEN
-      ZF       = ZF       + M3_THR_WTH2(PREDR1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTH2_O_DDTDZ(PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTH2_O_DDRDZ(PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTH2
-    END IF
-    !
-    ! d(w'2th')/dz
-    IF (GFWTH) THEN
-      ZF       = ZF       + M3_THR_W2TH(PREDR1,PD,PLM,PLEPS,PTKEM,&
-       & PDR_DZ) * MZF(PFWTH)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2TH_O_DDTDZ(PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PDR_DZ,PETHETA) * MZF(PFWTH)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2TH_O_DDRDZ(PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM) * MZF(PFWTH)
-    END IF
-    !
-    ! d(w'r'2)/dz
-    IF (GFR2) THEN
-      ZF       = ZF       + M3_THR_WR2(PREDTH1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WR2_O_DDTDZ(PREDR1,PREDTH1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFR2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WR2_O_DDRDZ(PREDR1,PREDTH1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
-    END IF
-    !
-      ! d(w'2r')/dz
-    IF (GFWR) THEN
-      ZF       = ZF       + M3_THR_W2R(PREDTH1,PD,PLM,PLEPS,PTKEM,&
-      & PDTH_DZ) * MZF(PFWR)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2R_O_DDTDZ(PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM) * MZF(PFWR)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST) * MZF(PFWR)
-    END IF
-    !
-    ! d(w'th'r')/dz
-    IF (GFTHR) THEN
-      ZF       = ZF       + M3_THR_WTHR(PREDTH1,PREDR1,PD,PLEPS,&
-      & PSQRT_TKE) * PFTHR
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTHR_O_DDTDZ(PREDTH1,PREDR1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTHR
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTHR_O_DDRDZ(PREDR1,PREDTH1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFTHR
-    END IF
-    !
-    ZFLXZ(:,:,:)   = ZF                                                     &
-        + PIMPL * XCTV*PLM*PLEPS*0.5                                        &
-          * MZF( ( D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*dthdz)/ddthdz term
-                  +D_PSI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*dthdz)/ddthdz term
-                 ) *PDR_DZ  *DZM(PTHLP - PTHLM       ) / PDZZ               &
-                +( D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*drdz )/ddrdz term
-                  +D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*drdz )/ddrdz term
-                 ) *PDTH_DZ *DZM(PRP   - PRM(:,:,:,1)) / PDZZ               &
-               )                                                            &
-        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:)) / PDZZ )         &
-        + PIMPL * ZDFDDRDZ * MZF(DZM(PRP   - PRM(:,:,:,1)) / PDZZ )
-    !
-    ! special case near the ground ( uncentred gradient )
-    ZFLXZ(:,:,IKB) =                                            & 
-    (XCHT1 * PPHI3(:,:,IKB+KKL) + XCHT2 * PPSI3(:,:,IKB+KKL))   &
-    *( PEXPL *                                                  &
-       ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL)             &
-        +ZCOEFF(:,:,IKB+KKL  )*PTHLM(:,:,IKB+KKL  )             & 
-        +ZCOEFF(:,:,IKB      )*PTHLM(:,:,IKB      ))            &
-      *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1)             &
-        +ZCOEFF(:,:,IKB+KKL  )*PRM(:,:,IKB+KKL,1  )             & 
-        +ZCOEFF(:,:,IKB      )*PRM(:,:,IKB  ,1    ))            &
-      +PIMPL *                                                  &
-       ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL)             &
-        +ZCOEFF(:,:,IKB+KKL  )*PTHLP(:,:,IKB+KKL  )             &
-        +ZCOEFF(:,:,IKB      )*PTHLP(:,:,IKB      ))            &
-      *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL  )             &
-        +ZCOEFF(:,:,IKB+KKL  )*PRP(:,:,IKB+KKL    )             & 
-        +ZCOEFF(:,:,IKB      )*PRP(:,:,IKB        ))            &
-     ) 
-    !    
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-    !
-      IF ( KRRL > 0 ) THEN
-      PSIGS(:,:,:) = PSIGS(:,:,:) +     &
-                     2. * PATHETA(:,:,:) * PAMOIST(:,:,:) * ZFLXZ(:,:,:)
-    END IF
-    ! stores <THl Rnp>   
-    IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'THLRCONS_VCOR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'THLRCONS_VCOR'
-      TZFIELD%CUNITS     = 'K kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_THLRCONS_VCOR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-    END IF
-!
-! and we store in LES configuration
-!
-    IF (LLES_CALL) THEN
-      CALL SECOND_MNH(ZTIME1)
-      CALL LES_MEAN_SUBGRID( ZFLXZ, X_LES_SUBGRID_THlRt ) 
-      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLXZ, X_LES_RES_W_SBG_ThlRt )
-      CALL LES_MEAN_SUBGRID( -2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_ThlRt ) 
-      CALL LES_MEAN_SUBGRID( PETHETA*ZFLXZ, X_LES_SUBGRID_RtThv ) 
-      CALL LES_MEAN_SUBGRID( -XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlThv , .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) 
-      CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-    END IF
-! 
-!
-!*       4.4  <Rnp Rnp>
-!
-!
-    ! Compute the turbulent variance F and F' at time t-dt.
-    ZF      (:,:,:) = XCTV*PLM*PLEPS*MZF(PPSI3*PDR_DZ**2)
-    ZDFDDRDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
-    !
-    ! Effect of 3rd order terms in temperature flux (at mass point)
-    !
-    ! d(w'r'2)/dz
-    IF (GFR2) THEN
-      ZF       = ZF       + M3_R2_WR2(PREDR1,PREDTH1,PD,PLEPS,&
-      & PSQRT_TKE) * PFR2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WR2_O_DDRDZ(PREDR1,PREDTH1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFR2
-    END IF
-    !
-    ! d(w'2r')/dz
-    IF (GFWR) THEN
-      ZF       = ZF       + M3_R2_W2R(PREDR1,PREDTH1,PD,PDR_DZ,&
-      & PLM,PLEPS,PTKEM) * MZF(PFWR)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2R_O_DDRDZ(PREDR1,PREDTH1,&
-      & PD,PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWR)
-    END IF
-    !
-    IF (KRR/=0) THEN
-      ! d(w'r'2)/dz
-      IF (GFTH2) THEN
-        ZF       = ZF       + M3_R2_WTH2(PD,PLEPS,PSQRT_TKE,&
-        & PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTH2_O_DDRDZ(PREDR1,&
-        & PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-      END IF
-      !
-      ! d(w'2r')/dz
-      IF (GFWTH) THEN
-        ZF       = ZF       + M3_R2_W2TH(PD,PLM,PLEPS,PTKEM,&
-        & PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH)
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2TH_O_DDRDZ(PREDR1,PREDTH1,&
-        & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH)
-      END IF
-      !
-      ! d(w'th'r')/dz
-      IF (GFTHR) THEN
-        ZF       = ZF       + M3_R2_WTHR(PREDTH1,PD,PLEPS,&
-        & PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTHR
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTHR_O_DDRDZ(PREDR1,PREDTH1,&
-        & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTHR
-      END IF
-  
-    END IF
-    !
-    ZFLXZ(:,:,:)   = ZF                                                              &
-          + PIMPL * XCTV*PLM*PLEPS                                                   &
-            *MZF(D_PSI3DRDZ2_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV)    &
-                 *DZM(PRP - PRM(:,:,:,1)) / PDZZ                                   ) &
-          + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1)) / PDZZ )
-    !
-    ! special case near the ground ( uncentred gradient )
-    ZFLXZ(:,:,IKB) = XCHV * PPSI3(:,:,IKB+KKL) * PLM(:,:,IKB)   &
-        * PLEPS(:,:,IKB)                                        &
-    *( PEXPL *                                                  &
-       ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1)             &
-        +ZCOEFF(:,:,IKB+KKL  )*PRM(:,:,IKB+KKL,1  )             & 
-        +ZCOEFF(:,:,IKB      )*PRM(:,:,IKB  ,1    ))**2         &
-      +PIMPL *                                                  &
-       ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL)               &
-        +ZCOEFF(:,:,IKB+KKL  )*PRP(:,:,IKB+KKL  )               &
-        +ZCOEFF(:,:,IKB      )*PRP(:,:,IKB      ))**2           &
-     ) 
-    !
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-    !
-    IF ( KRRL > 0 ) THEN
-      PSIGS(:,:,:) = PSIGS(:,:,:) + PAMOIST(:,:,:) **2 * ZFLXZ(:,:,:)
-    END IF
-    ! stores <Rnp Rnp>    
-    IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-      TZFIELD%CMNHNAME   = 'RTOT_VVAR'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = 'RTOT_VVAR'
-      TZFIELD%CUNITS     = 'kg2 kg-2'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_RTOT_VVAR'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-    END IF
-    !
-    ! and we store in LES configuration
-    !
-    IF (LLES_CALL) THEN
-      CALL SECOND_MNH(ZTIME1)
-      CALL LES_MEAN_SUBGRID( ZFLXZ, X_LES_SUBGRID_Rt2 ) 
-      CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLXZ, X_LES_RES_W_SBG_Rt2 )
-      CALL LES_MEAN_SUBGRID( PEMOIST*ZFLXZ, X_LES_SUBGRID_RtThv , .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. )
-      CALL LES_MEAN_SUBGRID( -2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Rt2 ) 
-      CALL SECOND_MNH(ZTIME2)
-      XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-    END IF
-    !
-  END IF  ! end if KRR ne 0
-!
-!
-!        4.5  Vertical part of Sigma_s
-!
-  IF ( KRRL > 0 ) THEN
-    ! Extrapolate PSIGS at the ground and at the top
-    PSIGS(:,:,KKA) = PSIGS(:,:,IKB)
-    PSIGS(:,:,KKU) = PSIGS(:,:,IKE)
-    PSIGS(:,:,:) =  SQRT( MAX (PSIGS(:,:,:) , 1.E-12) )
-  END IF
-
-!
-!        4.6  Deallocate
-!
-  DEALLOCATE(ZCOEFF)
-!----------------------------------------------------------------------------
-IF (LHOOK) CALL DR_HOOK('TURB_VER_THERMO_CORR',1,ZHOOK_HANDLE)
-END SUBROUTINE TURB_VER_THERMO_CORR
diff --git a/src/mesonh/turb/turb_ver_thermo_flux.f90 b/src/mesonh/turb/turb_ver_thermo_flux.f90
deleted file mode 100644
index 698bcfa76..000000000
--- a/src/mesonh/turb/turb_ver_thermo_flux.f90
+++ /dev/null
@@ -1,1117 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODI_TURB_VER_THERMO_FLUX 
-!    ####################
-!
-INTERFACE 
-!
-      SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI,    &
-                      OTURB_FLX,HTURBDIM,HTOM,                      &
-                      PIMPL,PEXPL,                                  &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
-                      PRHODJ,PTHVREF,                               &
-                      PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
-                      PWM,PTHLM,PRM,PSVM,                           &
-                      PTKEM,PLM,PLEPS,                              &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PFRAC_ICE,    &
-                      PBETA, PSQRT_TKE, PDTH_DZ, PDR_DZ, PRED2TH3,  &
-                      PRED2R3, PRED2THR3, PBLL_O_E, PETHETA,        &
-                      PEMOIST, PREDTH1, PREDR1, PPHI3, PPSI3, PD,   &
-                      PFWTH,PFWR,PFTH2,PFR2,PFTHR,MFMOIST,PBL_DEPTH,&
-                      PWTHV,PRTHLS,PRRS,PTHLP,PRP,PTP,PWTH,PWRC     )
-!
-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=AR O
-INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-CHARACTER(len=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitudes
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
-                                                      ! Potential Temperature 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
-!                                                     ! t - deltat 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
-!                                                     ! t + deltat 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM 
-! Vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM 
-! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
-                                                      ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! Mixing ratios 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
-                  ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-REAL, DIMENSION(:,:),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTHV         ! buoyancy flux
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHLS     ! cumulated source for theta
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS       ! cumulated source for rt
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTHLP      ! guess of thl at t+ deltat
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRP        ! guess of r at t+ deltat
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTP       ! Dynamic and thermal
-                                                     ! TKE production terms
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWTH       ! heat flux
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWRC       ! cloud water flux
-!
-!
-END SUBROUTINE TURB_VER_THERMO_FLUX
-!
-END INTERFACE
-!
-END MODULE MODI_TURB_VER_THERMO_FLUX
-!
-!
-!     ###############################################################
-      SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR, KRRL, KRRI,  &
-                      OTURB_FLX,HTURBDIM,HTOM,                      &
-                      PIMPL,PEXPL,                                  &
-                      PTSTEP,                                       &
-                      TPFILE,                                       &
-                      PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
-                      PRHODJ,PTHVREF,                               &
-                      PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
-                      PWM,PTHLM,PRM,PSVM,                           &
-                      PTKEM,PLM,PLEPS,                              &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PFRAC_ICE,    &
-                      PBETA, PSQRT_TKE, PDTH_DZ, PDR_DZ, PRED2TH3,  &
-                      PRED2R3, PRED2THR3, PBLL_O_E, PETHETA,        &
-                      PEMOIST, PREDTH1, PREDR1, PPHI3, PPSI3, PD,   &
-                      PFWTH,PFWR,PFTH2,PFR2,PFTHR,PBL_DEPTH,        &
-                      PWTHV,PRTHLS,PRRS,PTHLP,PRP,PTP,PWTH,PWRC     )
-!     ###############################################################
-!
-!
-!!****  *TURB_VER_THERMO_FLUX* -compute the source terms due to the vertical turbulent
-!!       fluxes.
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this routine is to compute the vertical turbulent
-!     fluxes of the evolutive variables and give back the source 
-!     terms to the main program.	In the case of large horizontal meshes,
-!     the divergence of these vertical turbulent fluxes represent the whole
-!     effect of the turbulence but when the three-dimensionnal version of
-!     the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences
-!     are completed in the next routine TURB_HOR. 
-!		  An arbitrary degree of implicitness has been implemented for the 
-!     temporal treatment of these diffusion terms.
-!       The vertical boundary conditions are as follows:
-!           *  at the bottom, the surface fluxes are prescribed at the same
-!              as the other turbulent fluxes
-!           *  at the top, the turbulent fluxes are set to 0.
-!       It should be noted that the condensation has been implicitely included
-!     in this turbulence scheme by using conservative variables and computing
-!     the subgrid variance of a statistical variable s indicating the presence 
-!     or not of condensation in a given mesh. 
-!
-!!**  METHOD
-!!    ------
-!!      1D type calculations are made;
-!!      The vertical turbulent fluxes are computed in an off-centered
-!!      implicit scheme (a Crank-Nicholson type with coefficients different
-!!      than 0.5), which allows to vary the degree of implicitness of the
-!!      formulation.
-!!      	 The different prognostic variables are treated one by one. 
-!!      The contributions of each turbulent fluxes are cumulated into the 
-!!      tendency  PRvarS, and into the dynamic and thermal production of 
-!!      TKE if necessary.
-!!        
-!!			 In section 2 and 3, the thermodynamical fields are considered.
-!!      Only the turbulent fluxes of the conservative variables
-!!      (Thetal and Rnp stored in PRx(:,:,:,1))  are computed. 
-!!       Note that the turbulent fluxes at the vertical 
-!!      boundaries are given either by the soil scheme for the surface one
-!!      ( at the same instant as the others fluxes) and equal to 0 at the 
-!!      top of the model. The thermal production is computed by vertically 
-!!      averaging the turbulent flux and multiply this flux at the mass point by
-!!      a function ETHETA or EMOIST, which preform the transformation from the
-!!      conservative variables to the virtual potential temperature. 
-!!     
-!! 	    In section 4, the variance of the statistical variable
-!!      s indicating presence or not of condensation, is determined in function 
-!!      of the turbulent moments of the conservative variables and its
-!!      squarred root is stored in PSIGS. This information will be completed in 
-!!      the horizontal turbulence if the turbulence dimensionality is not 
-!!      equal to "1DIM".
-!!
-!!			 In section 5, the x component of the stress tensor is computed.
-!!      The surface flux <u'w'> is computed from the value of the surface
-!!      fluxes computed in axes linked to the orography ( i", j" , k"):
-!!        i" is parallel to the surface and in the direction of the maximum
-!!           slope
-!!        j" is also parallel to the surface and in the normal direction of
-!!           the maximum slope
-!!        k" is the normal to the surface
-!!      In order to prevent numerical instability, the implicit scheme has 
-!!      been extended to the surface flux regarding to its dependence in 
-!!      function of U. The dependence in function of the other components 
-!!      introduced by the different rotations is only explicit.
-!!      The turbulent fluxes are used to compute the dynamic production of 
-!!      TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the
-!!      ground), an harmonic extrapolation from the dynamic production at 
-!!      PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U
-!!      in the surface layer.
-!!
-!!         In section 6, the same steps are repeated but for the y direction
-!!		  and in section 7, a diagnostic computation of the W variance is 
-!!      performed.
-!!
-!!         In section 8, the turbulent fluxes for the scalar variables are 
-!!      computed by the same way as the conservative thermodynamical variables
-!!
-!!            
-!!    EXTERNAL
-!!    --------
-!!      GX_U_M, GY_V_M, GZ_W_M :  cartesian gradient operators 
-!!      GX_U_UW,GY_V_VW	         (X,Y,Z) represent the direction of the gradient
-!!                               _(M,U,...)_ represent the localization of the 
-!!                               field to be derivated
-!!                               _(M,UW,...) represent the localization of the 
-!!                               field	derivated
-!!                               
-!!
-!!      MXM,MXF,MYM,MYF,MZM,MZF
-!!                             :  Shuman functions (mean operators)     
-!!      DXF,DYF,DZF,DZM
-!!                             :  Shuman functions (difference operators)     
-!!                               
-!!      SUBROUTINE TRIDIAG     : to compute the split implicit evolution
-!!                               of a variable located at a mass point
-!!
-!!      SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution
-!!                               of a variable located at a wind point
-!!
-!!      FUNCTIONs ETHETA and EMOIST  :  
-!!            allows to compute:
-!!            - the coefficients for the turbulent correlation between
-!!            any variable and the virtual potential temperature, of its 
-!!            correlations with the conservative potential temperature and 
-!!            the humidity conservative variable:
-!!            -------              -------              -------
-!!            A' Thv'  =  ETHETA   A' Thl'  +  EMOIST   A' Rnp'  
-!!
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST : contains physical constants
-!!
-!!           XG         : gravity constant
-!!
-!!      Module MODD_CTURB: contains the set of constants for
-!!                        the turbulence scheme
-!!
-!!           XCMFS,XCMFB : cts for the momentum flux
-!!           XCSHF       : ct for the sensible heat flux
-!!           XCHF        : ct for the moisture flux
-!!           XCTV,XCHV   : cts for the T and moisture variances
-!!
-!!      Module MODD_PARAMETERS
-!!
-!!           JPVEXT_TURB     : number of vertical external points
-!!           JPHEXT     : number of horizontal external points
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book 1 of documentation (Chapter: Turbulence)
-!!
-!!    AUTHOR
-!!    ------
-!!      Joan Cuxart             * INM and Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original       August   19, 1994
-!!      Modifications: February 14, 1995 (J.Cuxart and J.Stein) 
-!!                                  Doctorization and Optimization
-!!      Modifications: March 21, 1995 (J.M. Carriere) 
-!!                                  Introduction of cloud water
-!!      Modifications: June  14, 1995 (J.Cuxart and J. Stein) 
-!!                                 Phi3 and Psi3 at w-point + bug in the all
-!!                                 or nothing condens. 
-!!      Modifications: Sept  15, 1995 (J.Cuxart and J. Stein) 
-!!                                 Change the DP computation at the ground
-!!      Modifications: October 10, 1995 (J.Cuxart and J. Stein) 
-!!                                 Psi for scal var and LES tools
-!!      Modifications: November 10, 1995 (J. Stein)
-!!                                 change the surface	relations 
-!!      Modifications: February 20, 1995 (J. Stein) optimization
-!!      Modifications: May 21, 1996 (J. Stein) 
-!!                                  bug in the vertical flux of the V wind 
-!!                                  component for explicit computation
-!!      Modifications: May 21, 1996 (N. wood) 
-!!                                  modify the computation of the vertical
-!!                                   part or the surface tangential flux
-!!      Modifications: May 21, 1996 (P. Jabouille)
-!!                                  same modification in the Y direction
-!!      
-!!      Modifications: Sept 17, 1996 (J. Stein) change the moist case by using
-!!                                  Pi instead of Piref + use Atheta and Amoist
-!!
-!!      Modifications: Nov  24, 1997 (V. Masson) removes the DO loops 
-!!      Modifications: Mar  31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX 
-!!      Modifications: Oct  18, 2000 (V. Masson) LES computations
-!!      Modifications: Dec  01, 2000 (V. Masson) conservation of energy from
-!!                                               surface flux in 1DIM case
-!!                                               when slopes are present
-!!                     Nov  06, 2002 (V. Masson) LES budgets
-!!                     Feb  20, 2003 (JP Pinty)  Add PFRAC_ICE
-!!                     May  20, 2003 (JP Pinty)  Correction of ETHETA
-!!                                                         and EMOIST calls
-!!                     July     2005 (S. Tomas, V. Masson)
-!!                                               Add 3rd order moments
-!!                                               and implicitation of PHI3 and PSI3
-!!                     October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!                     2012-02 (Y. Seity) add possibility to run with reversed
-!!                                             vertical levels
-!!      Modifications  July 2015 (Wim de Rooy) LHARAT switch
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!                     2021 (D. Ricard) last version of HGRAD turbulence scheme
-!!                                 Leronard terms instead of Reynolds terms
-!!                                 applied to vertical fluxes of r_np and Thl
-!!                                 for implicit version of turbulence scheme
-!!                                 corrections and cleaning
-!!                     June 2020 (B. Vie) Patch preventing negative rc and ri in 2.3 and 3.3
-!! JL Redelsperger  : 03/2021: Ocean and Autocoupling O-A LES Cases
-!!                             Sfc flux shape for LDEEPOC Case
-!!--------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODD_GRID_n,         ONLY: XZS, XXHAT, XYHAT
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_METRICS_n,      ONLY: XDXX, XDYY, XDZX, XDZY, XDZZ
-USE MODD_PARAMETERS
-USE MODD_TURB_n,         ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, XCLDTHOLD
-USE MODD_CONF
-USE MODD_LES
-USE MODD_DIM_n
-USE MODD_DYN_n,          ONLY: LOCEAN
-USE MODD_OCEANH
-USE MODD_REF,            ONLY: LCOUPLES
-USE MODD_TURB_n
-USE MODD_FRC
-!
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
-USE MODI_GRADIENT_UV
-USE MODI_GRADIENT_UW
-USE MODI_GRADIENT_VW
-USE MODI_SHUMAN 
-USE MODI_TRIDIAG 
-USE MODI_LES_MEAN_SUBGRID
-USE MODI_PRANDTL
-USE MODI_TRIDIAG_THERMO
-USE MODI_TM06_H
-!
-USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
-USE MODE_PRANDTL
-!
-USE MODI_SECOND_MNH
-USE MODE_ll
-USE MODE_GATHER_ll
-!
-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)   :: KRR           ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
-LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
-                                 ! turbulent fluxes in the syncronous FM-file
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
-                                                      ! turbulence scheme
-CHARACTER(len=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
-REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
-REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
-TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
-                                                      ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
-                                                      ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitudes
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
-                                                      ! Potential Temperature 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
-!                                                     ! t - deltat 
-!
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
-!                                                     ! t + deltat 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM 
-! Vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM 
-! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
-                                                      ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! Mixing ratios 
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-!
-! In case LHARAT=TRUE, PLM already includes all stability corrections
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
-! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-REAL, DIMENSION(:,:),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTHV         ! buoyancy flux
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHLS     ! cumulated source for theta
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS       ! cumulated source for rt
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTHLP      ! guess of thl at t+ deltat
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRP        ! guess of r at t+ deltat
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTP       ! Dynamic and thermal
-                                                     ! TKE production terms
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWTH       ! heat flux
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWRC       ! cloud water flux
-!
-!
-!*       0.2  declaration of local variables
-!
-!
-REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
-       ZA,       & ! work variable for wrc or LES computation
-       ZFLXZ,    & ! vertical flux of the treated variable
-       ZSOURCE,  & ! source of evolution for the treated variable
-       ZKEFF,    & ! effectif diffusion coeff = LT * SQRT( TKE )
-       ZF,       & ! Flux in dTh/dt =-dF/dz (evaluated at t-1)(or rt instead of Th)
-       ZDFDDTDZ, & ! dF/d(dTh/dz)
-       ZDFDDRDZ, & ! dF/d(dr/dz)
-       Z3RDMOMENT,&  ! 3 order term in flux or variance equation
-       ZF_NEW,    &
-       ZRWTHL,    &
-       ZRWRNP,    &
-       ZCLD_THOLD
-!
-REAL,DIMENSION(SIZE(XZS,1),SIZE(XZS,2),KKU)  :: ZALT
-!
-INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
-                                    ! mass points of the domain in the 3 direct.
-INTEGER             :: IKT          ! array size in k direction
-INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
-INTEGER             :: JI, JJ ! loop indexes 
-!
-!
-INTEGER                    :: IIB,IJB       ! Lower bounds of the physical
-                                            ! sub-domain in x and y directions
-INTEGER                    :: IIE,IJE       ! Upper bounds of the physical
-                                            ! sub-domain in x and y directions
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
-                                                 ! plane (array on the complete domain)
-REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
-                                                 ! plane (array on the complete domain)
-!
-!
-CHARACTER (LEN=100) :: YCOMMENT     ! comment string in LFIFM file
-CHARACTER (LEN=LEN_HREC)  :: YRECFM       ! Name of the desired field in LFIFM file
-!
-REAL :: ZTIME1, ZTIME2
-REAL :: ZDELTAX
-REAL    :: ZXBEG,ZXEND,ZYBEG,ZYEND ! Forcing size for ocean deep convection
-REAL, DIMENSION(SIZE(XXHAT),SIZE(XYHAT)) :: ZDIST ! distance
-                                   ! from the center of the cooling               
-REAL :: ZFLPROV
-INTEGER           :: JKM          ! vertical index loop
-INTEGER          :: JSW
-REAL :: ZSWA     ! index for time flux interpolation
-!
-INTEGER :: IIU, IJU
-INTEGER :: IRESP
-INTEGER :: JK
-LOGICAL :: GUSERV   ! flag to use water
-LOGICAL :: GFTH2    ! flag to use w'th'2
-LOGICAL :: GFWTH    ! flag to use w'2th'
-LOGICAL :: GFR2     ! flag to use w'r'2
-LOGICAL :: GFWR     ! flag to use w'2r'
-LOGICAL :: GFTHR    ! flag to use w'th'r'
-TYPE(TFIELDDATA) :: TZFIELD
-!----------------------------------------------------------------------------
-!
-!*       1.   PRELIMINARIES
-!             -------------
-! Size for a given proc & a given model      
-IIU=SIZE(PTHLM,1) 
-IJU=SIZE(PTHLM,2)
-!
-!! Compute Shape of sfc flux for Oceanic Deep Conv Case
-! 
-IF (LOCEAN .AND. LDEEPOC) THEN
-  !*       COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS
-  ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT))
-  !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 )
-  !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc
-  !                                     L0_subproc as referenced in the full domain 1
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP)
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP)
-  CALL GET_DIM_EXT_ll('B',IIU,IJU)
-  CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
-  DO JJ = IJB,IJE
-    DO JI = IIB,IIE
-      ZDIST(JI,JJ) = SQRT(                         &
-      (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + &
-      (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2   &
-                                )
-    END DO
-  END DO
-  DO JJ=IJB,IJE
-    DO JI=IIB,IIE
-      IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0.
-    END DO
-  END DO
-END IF !END DEEP OCEAN CONV CASE
-!
-IKT  =SIZE(PTHLM,3)  
-IKTE =IKT-JPVEXT_TURB  
-IKTB =1+JPVEXT_TURB               
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-!
-GUSERV = (KRR/=0)
-!
-!  compute the coefficients for the uncentred gradient computation near the 
-!  ground
-!
-ZKEFF(:,:,:) = MZM( PLM(:,:,:) * SQRT(PTKEM(:,:,:)) )
-!
-! define a cloud mask with ri and rc (used after with a threshold) for Leonard terms
-!
-IF(LHGRAD) THEN
-  IF ( KRRL >= 1 ) THEN
-    IF ( KRRI >= 1 ) THEN
-      ZCLD_THOLD(:,:,:) = PRM(:,:,:,2) + PRM(:,:,:,4)
-    ELSE
-      ZCLD_THOLD(:,:,:) = PRM(:,:,:,2)
-    END IF
-  END IF
-END IF
-!
-! Flags for 3rd order quantities
-!
-GFTH2 = .FALSE.
-GFR2  = .FALSE.
-GFTHR = .FALSE.
-GFWTH = .FALSE.
-GFWR  = .FALSE.
-!
-IF (HTOM/='NONE') THEN
-  GFTH2 = ANY(PFTH2/=0.)
-  GFR2  = ANY(PFR2 /=0.) .AND. GUSERV
-  GFTHR = ANY(PFTHR/=0.) .AND. GUSERV
-  GFWTH = ANY(PFWTH/=0.)
-  GFWR  = ANY(PFWR /=0.) .AND. GUSERV
-END IF
-!----------------------------------------------------------------------------
-!
-!*       2.   SOURCES OF CONSERVATIVE POTENTIAL TEMPERATURE AND 
-!                                                  PARTIAL THERMAL PRODUCTION 
-!             ---------------------------------------------------------------
-!
-!*       2.1  Splitted value for cons. potential temperature at t+deltat
-!
-! Compute the turbulent flux F and F' at time t-dt.
-!
-ZF      (:,:,:) = -XCSHF*PPHI3*ZKEFF*DZM(PTHLM)/PDZZ
-ZDFDDTDZ(:,:,:) = -XCSHF*ZKEFF*D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
-!
-IF (LHGRAD) THEN
- ! Compute the Leonard terms for thl
- ZDELTAX= XXHAT(3) - XXHAT(2)
- ZF_NEW (:,:,:)= XCOEFHGRADTHL*ZDELTAX*ZDELTAX/12.0*(      &
-                 MXF(GX_W_UW(PWM(:,:,:), XDXX, XDZZ, XDZX))&
-                *MZM(GX_M_M(PTHLM(:,:,:),XDXX,XDZZ,XDZX))  &
-              +  MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY))  &
-                *MZM(GY_M_M(PTHLM(:,:,:),XDYY,XDZZ,XDZY)) )
-END IF
-!
-! Effect of 3rd order terms in temperature flux (at flux point)
-!
-! d(w'2th')/dz
-IF (GFWTH) THEN
-  Z3RDMOMENT= M3_WTH_W2TH(PREDTH1,PREDR1,PD,ZKEFF,PTKEM)
-!
-  ZF       = ZF       + Z3RDMOMENT * PFWTH
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2TH_O_DDTDZ(PREDTH1,PREDR1,&
-   & PD,PBLL_O_E,PETHETA,ZKEFF,PTKEM) * PFWTH
-END IF
-!
-! d(w'th'2)/dz
-IF (GFTH2) THEN
-  Z3RDMOMENT= M3_WTH_WTH2(PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
-!
-  ZF       = ZF       + Z3RDMOMENT * MZM(PFTH2)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTH2_O_DDTDZ(Z3RDMOMENT,PREDTH1,PREDR1,&
-    & PD,PBLL_O_E,PETHETA) * MZM(PFTH2)
-END IF
-!
-! d(w'2r')/dz
-IF (GFWR) THEN
-  ZF       = ZF       + M3_WTH_W2R(PD,ZKEFF,&
-    & PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * PFWR
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2R_O_DDTDZ(PREDTH1,PREDR1,&
-    & PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST) * PFWR
-END IF
-!
-! d(w'r'2)/dz
-IF (GFR2) THEN
-  ZF       = ZF       + M3_WTH_WR2(PD,ZKEFF,PTKEM,&
-    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ) * MZM(PFR2)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WR2_O_DDTDZ(PREDTH1,PREDR1,PD,&
-    & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST) * MZM(PFR2)
-END IF
-!
-! d(w'th'r')/dz
-IF (GFTHR) THEN
-  Z3RDMOMENT= M3_WTH_WTHR(PREDR1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
-    & PLEPS,PEMOIST)
-!
-  ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(Z3RDMOMENT,PREDTH1,&
-    & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR)
-END IF
-! compute interface flux
-IF (LCOUPLES) THEN   ! Autocoupling O-A LES
-  IF (LOCEAN) THEN    ! ocean model in coupled case 
-    ZF(:,:,IKE) =  (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) &
-                  *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) )
-  ELSE                ! atmosph model in coupled case
-    ZF(:,:,IKB) =  XSSTFL_C(:,:,1) &
-                  *0.5* ( 1. + PRHODJ(:,:,KKA)/PRHODJ(:,:,IKB) )
-  ENDIF 
-!
-ELSE  ! No coupling O and A cases
-  ! atmosp bottom
-  !*In 3D, a part of the flux goes vertically,
-  ! and another goes horizontally (in presence of slopes)
-  !*In 1D, part of energy released in horizontal flux is taken into account in the vertical part
-  IF (HTURBDIM=='3DIM') THEN
-    ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
-                       * PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-  ELSE
-    ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
-                       / PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-  END IF
-!
-  IF (LOCEAN) THEN
-    ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE))
-  ELSE !end ocean case (in nocoupled case)
-    ! atmos top
-    ZF(:,:,IKE)=0.
-  END IF
-END IF !end no coupled cases
-!
-! Compute the split conservative potential temperature at t+deltat
-CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
-                    PRHODJ,PTHLP)
-!
-! Compute the equivalent tendency for the conservative potential temperature
-!
-ZRWTHL(:,:,:)= PRHODJ(:,:,:)*(PTHLP(:,:,:)-PTHLM(:,:,:))/PTSTEP
-! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
-IF (LHGRAD) THEN
- DO JK=1,KKU
-  ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
- END DO
- WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD) .AND. ( ZALT(:,:,:) >= XALTHGRAD) )
-  ZRWTHL(:,:,:) = -GZ_W_M(MZM(PRHODJ(:,:,:))*ZF_NEW(:,:,:),XDZZ)
- END WHERE
-END IF
-!
-PRTHLS(:,:,:)= PRTHLS(:,:,:)  + ZRWTHL(:,:,:)
-!
-!*       2.2  Partial Thermal Production
-!
-!  Conservative potential temperature flux : 
-!
-ZFLXZ(:,:,:)   = ZF                                                &
-               + PIMPL * ZDFDDTDZ * DZM(PTHLP - PTHLM) / PDZZ
-! replace the flux by the Leonard terms
-IF (LHGRAD) THEN
- WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD) .AND. ( ZALT(:,:,:) >= XALTHGRAD) )
-  ZFLXZ(:,:,:) = ZF_NEW(:,:,:)
- END WHERE
-END IF
-!
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-IF (LOCEAN) THEN
-  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE)
-END IF
-!  
-DO JK=IKTB+1,IKTE-1
-  PWTH(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
-END DO
-!
-PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) 
-!
-IF (LOCEAN) THEN
-  PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL))
-  PWTH(:,:,KKA)=0. 
-  PWTH(:,:,KKU)=ZFLXZ(:,:,KKU)
-ELSE
-  PWTH(:,:,IKE)=PWTH(:,:,IKE-KKL)
-  PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
-END IF
-!
-IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-  ! stores the conservative potential temperature vertical flux
-  TZFIELD%CMNHNAME   = 'THW_FLX'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'THW_FLX'
-  TZFIELD%CUNITS     = 'K m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = 'Conservative potential temperature vertical flux'
-  TZFIELD%NGRID      = 4
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-END IF
-!
-! Contribution of the conservative temperature flux to the buoyancy flux
-IF (LOCEAN) THEN
-  PTP(:,:,:)= XG*XALPHAOC * MZF(ZFLXZ )
-ELSE
-  IF (KRR /= 0) THEN
-    PTP(:,:,:)  =  PBETA * MZF( MZM(PETHETA) * ZFLXZ )
-    PTP(:,:,IKB)=  PBETA(:,:,IKB) * PETHETA(:,:,IKB) *   &
-                   0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
-  ELSE
-    PTP(:,:,:)=  PBETA * MZF( ZFLXZ )
-  END IF
-END IF 
-!
-! Buoyancy flux at flux points
-! 
-PWTHV = MZM(PETHETA) * ZFLXZ
-PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB)
-!
-IF (LOCEAN) THEN
-  ! temperature contribution to Buy flux     
-  PWTHV(:,:,IKE) = PETHETA(:,:,IKE) * ZFLXZ(:,:,IKE)
-END IF
-!*       2.3  Partial vertical divergence of the < Rc w > flux
-!
-IF ( KRRL >= 1 ) THEN
-  IF ( KRRI >= 1 ) THEN
-    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ)       &
-                    *(1.0-PFRAC_ICE(:,:,:))
-    PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ)       &
-                    *PFRAC_ICE(:,:,:)
-  ELSE
-    PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                    PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ)
-  END IF
-END IF
-!
-!*       2.4  Storage in LES configuration
-! 
-IF (LLES_CALL) THEN
-  CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID( MZF(ZFLXZ), X_LES_SUBGRID_WThl )
-  CALL LES_MEAN_SUBGRID( MZF(PWM*ZFLXZ), X_LES_RES_W_SBG_WThl )
-  CALL LES_MEAN_SUBGRID( GZ_W_M(PWM,PDZZ)*MZF(ZFLXZ),&
-      & X_LES_RES_ddxa_W_SBG_UaThl )
-  CALL LES_MEAN_SUBGRID( MZF(PDTH_DZ*ZFLXZ), X_LES_RES_ddxa_Thl_SBG_UaThl )
-  CALL LES_MEAN_SUBGRID( -XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ), X_LES_SUBGRID_ThlPz )
-  CALL LES_MEAN_SUBGRID( MZF(MZM(PETHETA)*ZFLXZ), X_LES_SUBGRID_WThv )
-  IF (KRR>=1) THEN
-    CALL LES_MEAN_SUBGRID( MZF(PDR_DZ*ZFLXZ), X_LES_RES_ddxa_Rt_SBG_UaThl )
-  END IF
-  !* diagnostic of mixing coefficient for heat
-  ZA = DZM(PTHLP)
-  WHERE (ZA==0.) ZA=1.E-6
-  ZA = - ZFLXZ / ZA * PDZZ
-  ZA(:,:,IKB) = XCSHF*PPHI3(:,:,IKB)*ZKEFF(:,:,IKB)
-  ZA = MZF( ZA )
-  ZA = MIN(MAX(ZA,-1000.),1000.)
-  CALL LES_MEAN_SUBGRID( ZA, X_LES_SUBGRID_Kh   ) 
-  !
-  CALL SECOND_MNH(ZTIME2)
-  XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-END IF
-!
-!*       2.5  New boundary layer depth for TOMs
-! 
-IF (HTOM=='TM06') CALL TM06_H(IKB,IKTB,IKTE,PTSTEP,PZZ,ZFLXZ,PBL_DEPTH)
-!
-!----------------------------------------------------------------------------
-!
-!
-!*       3.   SOURCES OF CONSERVATIVE AND CLOUD MIXING RATIO AND 
-!                                        COMPLETE THERMAL PRODUCTION 
-!             ------------------------------------------------------
-!
-!*       3.1  Splitted value for cons. mixing ratio at t+deltat
-!
-!
-IF (KRR /= 0) THEN
-  ! Compute the turbulent flux F and F' at time t-dt.
-  !
-  ZF      (:,:,:) = -XCSHF*PPSI3*ZKEFF*DZM(PRM(:,:,:,1))/PDZZ
-  ZDFDDRDZ(:,:,:) = -XCSHF*ZKEFF*D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)
-  !
-  ! Compute Leonard Terms for Cloud mixing ratio
-  IF (LHGRAD) THEN
-    ZDELTAX= XXHAT(3) - XXHAT(2)
-    ZF_NEW (:,:,:)= XCOEFHGRADRM*ZDELTAX*ZDELTAX/12.0*(        &
-                MXF(GX_W_UW(PWM(:,:,:), XDXX, XDZZ, XDZX))       &
-                *MZM(GX_M_M(PRM(:,:,:,1),XDXX,XDZZ,XDZX)) &
-                +MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY))        &
-                *MZM(GY_M_M(PRM(:,:,:,1),XDYY,XDZZ,XDZY)) )
-   END IF
-  !
-  ! Effect of 3rd order terms in temperature flux (at flux point)
-  !
-  ! d(w'2r')/dz
-  IF (GFWR) THEN
-    Z3RDMOMENT= M3_WR_W2R(PREDR1,PREDTH1,PD,ZKEFF,PTKEM)
-  !
-    ZF       = ZF       + Z3RDMOMENT * PFWR
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2R_O_DDRDZ(PREDR1,PREDTH1,PD,&
-     & PBLL_O_E,PEMOIST,ZKEFF,PTKEM) * PFWR
-  END IF
-  !
-  ! d(w'r'2)/dz
-  IF (GFR2) THEN
-    Z3RDMOMENT= M3_WR_WR2(PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
-  !
-    ZF       = ZF       + Z3RDMOMENT * MZM(PFR2)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WR2_O_DDRDZ(Z3RDMOMENT,PREDR1,&
-     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFR2)
-  END IF
-  !
-  ! d(w'2th')/dz
-  IF (GFWTH) THEN
-    ZF       = ZF       + M3_WR_W2TH(PD,ZKEFF,&
-     & PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * PFWTH
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(PREDR1,PREDTH1,&
-     & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA) * PFWTH
-  END IF
-  !
-  ! d(w'th'2)/dz
-  IF (GFTH2) THEN
-    ZF       = ZF       + M3_WR_WTH2(PD,ZKEFF,PTKEM,&
-    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ) * MZM(PFTH2)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTH2_O_DDRDZ(PREDR1,PREDTH1,PD,&
-     &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA) * MZM(PFTH2)
-  END IF
-  !
-  ! d(w'th'r')/dz
-  IF (GFTHR) THEN
-    Z3RDMOMENT= M3_WR_WTHR(PREDTH1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
-     & PLEPS,PETHETA)
-  !
-    ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTHR_O_DDRDZ(Z3RDMOMENT,PREDR1, &
-     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR)
-  END IF
-  !
-  ! compute interface flux
-  IF (LCOUPLES) THEN   ! coupling NH O-A
-    IF (LOCEAN) THEN    ! ocean model in coupled case
-      ! evap effect on salinity to be added later !!!
-      ZF(:,:,IKE) =  0.
-    ELSE                ! atmosph model in coupled case
-      ZF(:,:,IKB) =  0.
-      ! AJOUTER FLUX EVAP SUR MODELE ATMOS
-    ENDIF
-  !
-  ELSE  ! No coupling NH OA case
-    ! atmosp bottom
-    !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
-    ! (in presence of slopes)
-    !* in 1DIM case, the part of energy released in horizontal flux
-    ! is taken into account in the vertical part
-    !
-    IF (HTURBDIM=='3DIM') THEN
-      ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )       &
-                           * PDIRCOSZW(:,:)                       &
-                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-    ELSE
-      ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )     &
-                         / PDIRCOSZW(:,:)                       &
-                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-    END IF
-    !
-    IF (LOCEAN) THEN
-      ! General ocean case
-      ! salinity/evap effect to be added later !!!!!
-      ZF(:,:,IKE) = 0.
-    ELSE !end ocean case (in nocoupled case)
-      ! atmos top
-     ZF(:,:,IKE)=0.
-    END IF
-  END IF!end no coupled cases
-  ! Compute the split conservative potential temperature at t+deltat
-  CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,&
-                      PDZZ,PRHODJ,PRP)
-  !
-  ! Compute the equivalent tendency for the conservative mixing ratio
-  !
-  ZRWRNP (:,:,:) = PRHODJ(:,:,:)*(PRP(:,:,:)-PRM(:,:,:,1))/PTSTEP
-  !
-  ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
-  IF (LHGRAD) THEN
-   DO JK=1,KKU
-    ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
-   END DO
-   WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= XALTHGRAD ) )
-    ZRWRNP (:,:,:) =  -GZ_W_M(MZM(PRHODJ(:,:,:))*ZF_NEW(:,:,:),XDZZ)
-   END WHERE
-  END IF
-  !
-  PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZRWRNP (:,:,:)
-  !
-  !*       3.2  Complete thermal production
-  !
-  ! cons. mixing ratio flux :
-  !
-  ZFLXZ(:,:,:)   = ZF                                                &
-                 + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1)) / PDZZ
-  !
-  ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
-  IF (LHGRAD) THEN
-   WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= XALTHGRAD ) )
-    ZFLXZ(:,:,:) = ZF_NEW(:,:,:)
-   END WHERE
-  END IF
-  !
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-  !
-  DO JK=IKTB+1,IKTE-1
-   PWRC(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
-  END DO
-  PWRC(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL))
-  PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
-  PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL)
-  !
-  !
-  IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    ! stores the conservative mixing ratio vertical flux
-    TZFIELD%CMNHNAME   = 'RCONSW_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RCONSW_FLX'
-    TZFIELD%CUNITS     = 'kg m s-1 kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Conservative mixing ratio vertical flux'
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-  END IF
-  !
-  ! Contribution of the conservative water flux to the Buoyancy flux
-  IF (LOCEAN) THEN
-     ZA(:,:,:)=  -XG*XBETAOC  * MZF(ZFLXZ )
-  ELSE
-    ZA(:,:,:)   =  PBETA * MZF( MZM(PEMOIST) * ZFLXZ )
-    ZA(:,:,IKB) =  PBETA(:,:,IKB) * PEMOIST(:,:,IKB) *   &
-                   0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
-    PTP(:,:,:) = PTP(:,:,:) + ZA(:,:,:)
-  END IF
-  !
-  ! Buoyancy flux at flux points
-  ! 
-  PWTHV          = PWTHV          + MZM(PEMOIST) * ZFLXZ
-  PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB)
-  IF (LOCEAN) THEN
-    PWTHV(:,:,IKE) = PWTHV(:,:,IKE) + PEMOIST(:,:,IKE)* ZFLXZ(:,:,IKE)
-  END IF   
-!
-!*       3.3  Complete vertical divergence of the < Rc w > flux
-!
-  IF ( KRRL >= 1 ) THEN
-    IF ( KRRI >= 1 ) THEN
-      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ )       &
-                      *(1.0-PFRAC_ICE(:,:,:))
-      PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ )       &
-                      *PFRAC_ICE(:,:,:)
-    ELSE
-      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                      PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ )
-    END IF
-  END IF
-!
-!*       3.4  Storage in LES configuration
-! 
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(ZFLXZ), X_LES_SUBGRID_WRt )
-    CALL LES_MEAN_SUBGRID( MZF(PWM*ZFLXZ), X_LES_RES_W_SBG_WRt )
-    CALL LES_MEAN_SUBGRID( GZ_W_M(PWM,PDZZ)*MZF(ZFLXZ),&
-    & X_LES_RES_ddxa_W_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID( MZF(PDTH_DZ*ZFLXZ), X_LES_RES_ddxa_Thl_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID( MZF(PDR_DZ*ZFLXZ), X_LES_RES_ddxa_Rt_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID( MZF(MZM(PEMOIST)*ZFLXZ), X_LES_SUBGRID_WThv , .TRUE. )
-    CALL LES_MEAN_SUBGRID( -XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ), X_LES_SUBGRID_RtPz )
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-!
-END IF
-!
-!----------------------------------------------------------------------------
-!
-!
-!*       4.   TURBULENT CORRELATIONS : <w Rc>
-!             -------------------------------
-!
-!
-!*       4.1  <w Rc>    
-!
-IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN
-  !  
-  ! recover the Conservative potential temperature flux : 
-  ZA(:,:,:)   = DZM(PIMPL * PTHLP + PEXPL * PTHLM) / PDZZ *       &
-                  (-PPHI3*MZM(PLM*PSQRT_TKE)) * XCSHF
-  ZA(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) ) &
-               * PDIRCOSZW(:,:)
-  !  
-  ! compute <w Rc>
-  ZFLXZ(:,:,:) = MZM( PAMOIST * 2.* PSRCM ) * ZFLXZ(:,:,:) + &
-                 MZM( PATHETA * 2.* PSRCM ) * ZA(:,:,:)
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
-  !                 
-  ! store the liquid water mixing ratio vertical flux
-  IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
-    TZFIELD%CMNHNAME   = 'RCW_FLX'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RCW_FLX'
-    TZFIELD%CUNITS     = 'kg m s-1 kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'Liquid water mixing ratio vertical flux'
-    TZFIELD%NGRID      = 4
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
-  END IF
-  !  
-! and we store in LES configuration this subgrid flux <w'rc'>
-!
-  IF (LLES_CALL) THEN
-    CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(ZFLXZ), X_LES_SUBGRID_WRc )
-    CALL SECOND_MNH(ZTIME2)
-    XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
-  END IF
-!
-END IF !end of <w Rc>
-IF (LOCEAN.AND.LDEEPOC) THEN
-  DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
-END IF
-!
-!----------------------------------------------------------------------------
-IF (LHOOK) CALL DR_HOOK('TURB_VER_THERMO_FLUX',1,ZHOOK_HANDLE)
-END SUBROUTINE TURB_VER_THERMO_FLUX
-- 
GitLab