From afb26f518583f5c60739b8bf18b88cf2c4c717ac Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Mon, 24 Jan 2022 11:27:36 +0100
Subject: [PATCH] Quentin 24/01/2022: Move routines to mode_ and clean
 prandtl.F90

---
 src/arome/turb/modi_bl89.F90                  |  22 -
 src/arome/turb/modi_emoist.F90                |  26 -
 src/arome/turb/modi_etheta.F90                |  28 -
 src/arome/turb/modi_prandtl.F90               |  72 ---
 src/arome/turb/modi_rmc01.F90                 |  24 -
 src/arome/turb/modi_sbl_depth.F90             |  24 -
 src/arome/turb/prandtl.F90                    | 501 ----------------
 src/common/turb/{bl89.F90 => mode_bl89.F90}   |   8 +
 .../turb/{emoist.F90 => mode_emoist.F90}      |   7 +-
 .../turb/{etheta.F90 => mode_etheta.F90}      |   5 +-
 src/common/turb/mode_prandtl.F90              |   4 +-
 src/common/turb/{rmc01.F90 => mode_rmc01.F90} |  11 +-
 .../{sbl_depth.F90 => mode_sbl_depth.F90}     |   8 +
 src/common/turb/mode_turb_ver.F90             |   6 +-
 src/common/turb/mode_turb_ver_sv_corr.F90     |   4 +-
 src/common/turb/mode_turb_ver_sv_flux.F90     |   4 +-
 src/common/turb/prandtl.F90                   | 540 ------------------
 src/common/turb/turb.F90                      |   8 +-
 18 files changed, 47 insertions(+), 1255 deletions(-)
 delete mode 100644 src/arome/turb/modi_bl89.F90
 delete mode 100644 src/arome/turb/modi_emoist.F90
 delete mode 100644 src/arome/turb/modi_etheta.F90
 delete mode 100644 src/arome/turb/modi_prandtl.F90
 delete mode 100644 src/arome/turb/modi_rmc01.F90
 delete mode 100644 src/arome/turb/modi_sbl_depth.F90
 delete mode 100644 src/arome/turb/prandtl.F90
 rename src/common/turb/{bl89.F90 => mode_bl89.F90} (97%)
 rename src/common/turb/{emoist.F90 => mode_emoist.F90} (97%)
 rename src/common/turb/{etheta.F90 => mode_etheta.F90} (98%)
 rename src/common/turb/{rmc01.F90 => mode_rmc01.F90} (95%)
 rename src/common/turb/{sbl_depth.F90 => mode_sbl_depth.F90} (92%)
 delete mode 100644 src/common/turb/prandtl.F90

diff --git a/src/arome/turb/modi_bl89.F90 b/src/arome/turb/modi_bl89.F90
deleted file mode 100644
index e45177299..000000000
--- a/src/arome/turb/modi_bl89.F90
+++ /dev/null
@@ -1,22 +0,0 @@
-!     ######spl
-      MODULE MODI_BL89
-!     ################
-INTERFACE
-      SUBROUTINE BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,PTHLM,KRR,PRM,PTKEM,PSHEAR,PLM)
-!
-INTEGER,                  INTENT(IN)  :: KKA 
-INTEGER,                  INTENT(IN)  :: KKU 
-INTEGER,                  INTENT(IN)  :: KKL 
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PZZ
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PDZZ
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHVREF
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHLM
-INTEGER,                  INTENT(IN)  :: KRR
-REAL, DIMENSION(:,:,:,:), INTENT(IN)  :: PRM
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTKEM
-REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PSHEAR
-REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PLM
-
-END SUBROUTINE BL89
-END INTERFACE
-END MODULE MODI_BL89
diff --git a/src/arome/turb/modi_emoist.F90 b/src/arome/turb/modi_emoist.F90
deleted file mode 100644
index 57e762b71..000000000
--- a/src/arome/turb/modi_emoist.F90
+++ /dev/null
@@ -1,26 +0,0 @@
-!     ######spl
-MODULE MODI_EMOIST
-!#################
-!
-INTERFACE
-!
-FUNCTION EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) RESULT(PEMOIST)
-!
-INTEGER                              :: KRR        ! number of moist var.
-INTEGER                              :: KRRI       ! number of ice var.
-!
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PTHLM    ! Conservative pot. temperature
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::   PRM      ! Mixing ratios, where
-!                                    PRM(:,:,:,1) = conservative mixing ratio
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PAMOIST   ! Amoist
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
-                                                    ! moment s'r'c/2Sigma_s2
-!
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)):: PEMOIST ! result
-!
-END FUNCTION EMOIST
-!
-END INTERFACE
-!
-END MODULE MODI_EMOIST
diff --git a/src/arome/turb/modi_etheta.F90 b/src/arome/turb/modi_etheta.F90
deleted file mode 100644
index bc08b8a89..000000000
--- a/src/arome/turb/modi_etheta.F90
+++ /dev/null
@@ -1,28 +0,0 @@
-!     ######spl
-MODULE MODI_ETHETA
-!#################
-!
-INTERFACE
-!
-FUNCTION ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) RESULT(PETHETA)
-!
-INTEGER                              :: KRR          ! number of moist var.
-INTEGER                              :: KRRI         ! number of ice var.
-!
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PTHLM     ! Conservative pot. temperature
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::   PRM       ! Mixing ratios, where
-!                                      PRM(:,:,:,1) = conservative mixing ratio
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PATHETA   ! Atheta
-!                                                    
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
-                                                    ! moment s'r'c/2Sigma_s2
-!
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)):: PETHETA ! result
-!
-!
-END FUNCTION ETHETA
-!
-END INTERFACE
-!
-END MODULE MODI_ETHETA
diff --git a/src/arome/turb/modi_prandtl.F90 b/src/arome/turb/modi_prandtl.F90
deleted file mode 100644
index 74fb802bf..000000000
--- a/src/arome/turb/modi_prandtl.F90
+++ /dev/null
@@ -1,72 +0,0 @@
-!     ######spl
-     MODULE MODI_PRANDTL
-!    ###################
-!
-INTERFACE
-!
-      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OCLOSE_OUT,OTURB_DIAG,&
-                         HTURBDIM,                             &
-                         HFMFILE,HLUOUT,                       &
-                         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                      )
-!
-!
-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)   ::  OCLOSE_OUT   ! switch for syncronous
-                                                      ! file opening
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-CHARACTER*4           , INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
-CHARACTER(LEN=*),       INTENT(IN)   ::  HFMFILE      ! Name of the output
-                                                      ! FM-file
-CHARACTER(LEN=*),       INTENT(IN)   ::  HLUOUT       ! Output-listing name for
-                                                      ! model n
-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
diff --git a/src/arome/turb/modi_rmc01.F90 b/src/arome/turb/modi_rmc01.F90
deleted file mode 100644
index 1845c21be..000000000
--- a/src/arome/turb/modi_rmc01.F90
+++ /dev/null
@@ -1,24 +0,0 @@
-!     ######spl
-      MODULE MODI_RMC01
-!     ################
-INTERFACE
-      SUBROUTINE RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW, &
-                       PSBL_DEPTH, PLMO, PLK, PLEPS                )
-!
-CHARACTER(LEN=4),         INTENT(IN)    :: HTURBLEN ! type of mixing length
-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
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ   ! altitude of flux points
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX  ! width of grid mesh (X dir)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDYY  ! width of grid mesh (Y dir)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ  ! width of vert. layers
-REAL, DIMENSION(:,:),     INTENT(IN)    :: PDIRCOSZW ! Director Cosinus 
-REAL, DIMENSION(:,:),     INTENT(IN)    :: PSBL_DEPTH! SBL depth
-REAL, DIMENSION(:,:),     INTENT(IN)    :: PLMO  ! Monin Obuhkov length
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PLK   ! Mixing length
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PLEPS ! Dissipative length
-
-END SUBROUTINE RMC01
-END INTERFACE
-END MODULE MODI_RMC01
diff --git a/src/arome/turb/modi_sbl_depth.F90 b/src/arome/turb/modi_sbl_depth.F90
deleted file mode 100644
index 1f9fb9439..000000000
--- a/src/arome/turb/modi_sbl_depth.F90
+++ /dev/null
@@ -1,24 +0,0 @@
-!     ######spl
-     MODULE MODI_SBL_DEPTH  
-!    ################ 
-!
-INTERFACE
-!
-      SUBROUTINE SBL_DEPTH(KKB,KKE,PZZ,PFLXU,PFLXV,PWTHV,PLMO,PSBL_DEPTH)
-!
-INTEGER,                INTENT(IN)    :: KKB       ! first physical level
-INTEGER,                INTENT(IN)    :: KKE       ! upper physical level
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PZZ       ! altitude of flux levels
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PFLXU     ! u'w'
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PFLXV     ! v'w'
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PWTHV     ! buoyancy flux
-REAL, DIMENSION(:,:),   INTENT(IN)    :: PLMO      ! Monin-Obukhov length
-REAL, DIMENSION(:,:),   INTENT(INOUT) :: PSBL_DEPTH! boundary layer height
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE SBL_DEPTH
-!
-END INTERFACE
-!
-END MODULE MODI_SBL_DEPTH
diff --git a/src/arome/turb/prandtl.F90 b/src/arome/turb/prandtl.F90
deleted file mode 100644
index 3afb18cc4..000000000
--- a/src/arome/turb/prandtl.F90
+++ /dev/null
@@ -1,501 +0,0 @@
-!     ######spl
-      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OCLOSE_OUT,OTURB_DIAG,       &
-                         HTURBDIM,                             &
-                         HFMFILE,HLUOUT,                       &
-                         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 PARKIND1, ONLY : JPRB
-      USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-      USE MODD_CTURB, ONLY : LHARAT
-!     ###########################################################
-!
-!
-!!****  *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
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST
-USE MODD_CONF
-USE MODD_CTURB
-USE MODD_PARAMETERS
-!
-USE MODI_GRADIENT_M
-USE MODI_EMOIST
-USE MODI_ETHETA
-USE MODI_SHUMAN, ONLY: MZM
-USE MODE_FMWRIT
-!
-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)   ::  OCLOSE_OUT   ! switch for syncronous
-                                                      ! file opening
-LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
-                                 ! diagnostic fields in the syncronous FM-file
-CHARACTER*4           , INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
-CHARACTER(LEN=*),       INTENT(IN)   ::  HFMFILE      ! Name of the output
-                                                      ! FM-file
-CHARACTER(LEN=*),       INTENT(IN)   ::  HLUOUT       ! Output-listing name for
-                                                      ! model n
-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
-! ---------------------------------------------------------------------------
-!
-!
-!*      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(PTHLM,PDZZ, KKA, KKU, KKL)
-  PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
-                   & GZ_M_W(PRM(:,:,:,1),PDZZ, KKA, KKU, KKL)
-ELSE                              ! dry case
-  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(PTHLM,PDZZ, KKA, KKU, KKL)
-  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(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)
-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. OCLOSE_OUT ) THEN
-  !
-  ! stores the RED_TH1
-  YRECFM  ='RED_TH1'
-  YCOMMENT='X_Y_Z_RED_TH1 (0)'
-  IGRID   = 4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',PREDTH1,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  ! stores the RED_R1
-  YRECFM  ='RED_R1'
-  YCOMMENT='X_Y_Z_RED_R1 (0)'
-  IGRID   = 4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',PREDR1,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  ! stores the RED2_TH3
-  YRECFM  ='RED2_TH3'
-  YCOMMENT='X_Y_Z_RED2_TH3 (0)'
-  IGRID   = 4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',PRED2TH3,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  ! stores the RED2_R3
-  YRECFM  ='RED2_R3'
-  YCOMMENT='X_Y_Z_RED2_R3 (0)'
-  IGRID   = 4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',PRED2R3,IGRID,ILENCH,YCOMMENT,IRESP)
-  !
-  ! stores the RED2_THR3
-  YRECFM  ='RED2_THR3'
-  YCOMMENT='X_Y_Z_RED2_THR3 (0)'
-  IGRID   = 4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',PRED2THR3,IGRID,ILENCH,YCOMMENT,IRESP)
-END IF
-!
-!---------------------------------------------------------------------------
-ENDIF ! (Done only if LHARAT is FALSE)
-!
-IF (LHOOK) CALL DR_HOOK('PRANDTL',1,ZHOOK_HANDLE)
-END SUBROUTINE PRANDTL
diff --git a/src/common/turb/bl89.F90 b/src/common/turb/mode_bl89.F90
similarity index 97%
rename from src/common/turb/bl89.F90
rename to src/common/turb/mode_bl89.F90
index 57056e481..9208fcb6b 100644
--- a/src/common/turb/bl89.F90
+++ b/src/common/turb/mode_bl89.F90
@@ -1,3 +1,10 @@
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+MODULE MODE_BL89
+IMPLICIT NONE
+CONTAINS
 !     ######spl
       SUBROUTINE BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,PTHLM,KRR,PRM,PTKEM,PSHEAR,PLM)
       USE PARKIND1, ONLY : JPRB
@@ -348,3 +355,4 @@ END IF
 !
 IF (LHOOK) CALL DR_HOOK('BL89',1,ZHOOK_HANDLE)
 END SUBROUTINE BL89
+END MODULE MODE_BL89
diff --git a/src/common/turb/emoist.F90 b/src/common/turb/mode_emoist.F90
similarity index 97%
rename from src/common/turb/emoist.F90
rename to src/common/turb/mode_emoist.F90
index f17bc3168..b06579b1f 100644
--- a/src/common/turb/emoist.F90
+++ b/src/common/turb/mode_emoist.F90
@@ -1,8 +1,10 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
-!     ######spl
+MODULE MODE_EMOIST
+IMPLICIT NONE
+CONTAINS
 FUNCTION EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) RESULT(PEMOIST)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -162,3 +164,4 @@ END IF
 !
 IF (LHOOK) CALL DR_HOOK('EMOIST',1,ZHOOK_HANDLE)
 END FUNCTION EMOIST
+END MODULE MODE_EMOIST
diff --git a/src/common/turb/etheta.F90 b/src/common/turb/mode_etheta.F90
similarity index 98%
rename from src/common/turb/etheta.F90
rename to src/common/turb/mode_etheta.F90
index f0506bd89..4e3e91fad 100644
--- a/src/common/turb/etheta.F90
+++ b/src/common/turb/mode_etheta.F90
@@ -2,7 +2,9 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
-!     ######spl
+MODULE MODE_ETHETA
+IMPLICIT NONE
+CONTAINS
 FUNCTION ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) RESULT(PETHETA)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -153,3 +155,4 @@ END IF
 !
 IF (LHOOK) CALL DR_HOOK('ETHETA',1,ZHOOK_HANDLE)
 END FUNCTION ETHETA
+END MODULE MODE_ETHETA
diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index 6a84eb9b3..9cce0c874 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -151,8 +151,8 @@ USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 USE MODI_GRADIENT_M
-USE MODI_EMOIST
-USE MODI_ETHETA
+USE MODE_EMOIST, ONLY: EMOIST
+USE MODE_ETHETA, ONLY: ETHETA
 USE MODI_SHUMAN, ONLY: MZM
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 !
diff --git a/src/common/turb/rmc01.F90 b/src/common/turb/mode_rmc01.F90
similarity index 95%
rename from src/common/turb/rmc01.F90
rename to src/common/turb/mode_rmc01.F90
index 7488d6cbd..628b4cad0 100644
--- a/src/common/turb/rmc01.F90
+++ b/src/common/turb/mode_rmc01.F90
@@ -1,5 +1,11 @@
-!     ######spl
-      SUBROUTINE RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY, &
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+MODULE MODE_RMC01
+IMPLICIT NONE
+CONTAINS
+SUBROUTINE RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY, &
       PDZZ,PDIRCOSZW,PSBL_DEPTH,PLMO,PLK,PLEPS)
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -233,3 +239,4 @@ PLEPS(:,:,KKU  ) = PLEPS(:,:,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE)
 END SUBROUTINE RMC01
+END MODULE MODE_RMC01
diff --git a/src/common/turb/sbl_depth.F90 b/src/common/turb/mode_sbl_depth.F90
similarity index 92%
rename from src/common/turb/sbl_depth.F90
rename to src/common/turb/mode_sbl_depth.F90
index 0c670f8db..8de257fe9 100644
--- a/src/common/turb/sbl_depth.F90
+++ b/src/common/turb/mode_sbl_depth.F90
@@ -1,3 +1,10 @@
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+MODULE MODE_SBL_DEPTH
+IMPLICIT NONE
+CONTAINS
 !     ######spl
       SUBROUTINE SBL_DEPTH(KKB,KKE,PZZ,PFLXU,PFLXV,PWTHV,PLMO,PSBL_DEPTH)
       USE PARKIND1, ONLY : JPRB
@@ -119,3 +126,4 @@ WHERE (PLMO(:,:)==XUNDEF) PSBL_DEPTH = ZSBL_DYN
 !----------------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('SBL_DEPTH',1,ZHOOK_HANDLE)
 END SUBROUTINE SBL_DEPTH
+END MODULE MODE_SBL_DEPTH
diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90
index 32e00a0af..2860adfd3 100644
--- a/src/common/turb/mode_turb_ver.F90
+++ b/src/common/turb/mode_turb_ver.F90
@@ -219,8 +219,8 @@ USE MODD_LES
 USE MODD_NSV,            ONLY: NSV
 !
 !USE MODE_PRANDTL, ONLY: PRANDTL
-USE MODI_EMOIST
-USE MODI_ETHETA
+USE MODE_EMOIST, ONLY: EMOIST
+USE MODE_ETHETA, ONLY: ETHETA
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_W
 USE MODI_TURB
@@ -230,7 +230,7 @@ USE MODE_TURB_VER_DYN_FLUX, ONLY: TURB_VER_DYN_FLUX
 USE MODE_TURB_VER_SV_FLUX, ONLY: TURB_VER_SV_FLUX
 USE MODE_TURB_VER_SV_CORR, ONLY: TURB_VER_SV_CORR
 USE MODI_LES_MEAN_SUBGRID
-USE MODI_SBL_DEPTH
+USE MODE_SBL_DEPTH, ONLY: SBL_DEPTH
 USE MODI_SECOND_MNH
 !
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write
diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90
index 7de442316..97928bf69 100644
--- a/src/common/turb/mode_turb_ver_sv_corr.F90
+++ b/src/common/turb/mode_turb_ver_sv_corr.F90
@@ -69,8 +69,8 @@ USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
 USE MODI_SHUMAN , ONLY : MZF
-USE MODI_EMOIST
-USE MODI_ETHETA
+USE MODE_EMOIST, ONLY: EMOIST
+USE MODE_ETHETA, ONLY: ETHETA
 USE MODI_LES_MEAN_SUBGRID
 !
 USE MODI_SECOND_MNH
diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90
index 6fdbba5c3..781e1b125 100644
--- a/src/common/turb/mode_turb_ver_sv_flux.F90
+++ b/src/common/turb/mode_turb_ver_sv_flux.F90
@@ -227,8 +227,8 @@ USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
 USE MODI_SHUMAN , ONLY : DZM, MZM, MZF
 USE MODE_TRIDIAG, ONLY: TRIDIAG
-USE MODI_EMOIST
-USE MODI_ETHETA
+USE MODE_EMOIST, ONLY: EMOIST
+USE MODE_ETHETA, ONLY: ETHETA
 USE MODI_LES_MEAN_SUBGRID
 !
 USE MODI_SECOND_MNH
diff --git a/src/common/turb/prandtl.F90 b/src/common/turb/prandtl.F90
deleted file mode 100644
index 458899f39..000000000
--- a/src/common/turb/prandtl.F90
+++ /dev/null
@@ -1,540 +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 MODE_PRANDTL
-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_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, 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(PTHLM,PDZZ, KKA, KKU, KKL)
-  PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
-                   & GZ_M_W(PRM(:,:,:,1),PDZZ, KKA, KKU, KKL)
-ELSE                              ! dry case
-  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(PTHLM,PDZZ, KKA, KKU, KKL)
-  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(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)
-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
-END MODULE MODE_PRANDTL
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 9bfa00590..5f710e437 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -232,7 +232,7 @@ USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
 !
-USE MODI_BL89
+USE MODE_BL89, ONLY: BL89
 USE MODE_TURB_VER, ONLY : TURB_VER
 !!MODIF AROME
 !USE MODI_ROTATE_WIND
@@ -242,7 +242,7 @@ USE MODI_SHUMAN, ONLY : MZF, MXF, MYF
 USE MODI_GRADIENT_M
 USE MODI_BUDGET_DDH
 USE MODI_LES_MEAN_SUBGRID
-USE MODI_RMC01
+USE MODE_RMC01, ONLY: RMC01
 USE MODI_GRADIENT_W
 USE MODE_TM06, ONLY: TM06
 USE MODI_UPDATE_LM
@@ -251,8 +251,8 @@ USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 USE MODE_SBL
 USE MODE_FMWRIT
 !
-USE MODI_EMOIST
-USE MODI_ETHETA
+USE MODE_EMOIST, ONLY: EMOIST
+USE MODE_ETHETA, ONLY: ETHETA
 !
 USE DDH_MIX, ONLY  : TYP_DDH
 USE YOMLDDH, ONLY  : TLDDH
-- 
GitLab