From cd330ce4a4ea98e2639e946effe7c3c31032debf Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Wed, 2 Mar 2022 11:37:14 +0100
Subject: [PATCH] Quentin 02/03/2022: Merge MNH->COMMON mode_prandtl.F90
 SMOOTH_FUNCTION and correction from mesonh (in REPRO48 for AROME)

---
 src/common/turb/mode_prandtl.F90 |   93 +-
 src/mesonh/turb/mode_prandtl.f90 | 2277 ------------------------------
 2 files changed, 51 insertions(+), 2319 deletions(-)
 delete mode 100644 src/mesonh/turb/mode_prandtl.f90

diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index ec71f8db2..d11181fbf 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -684,7 +684,7 @@ FUNCTION D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUS
   CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DTDZ_O_DDTDZ
-  INTEGER :: IKB, IKE,JL,JK
+  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)
@@ -694,7 +694,11 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 IF (HTURBDIM=='3DIM') THEN
         !* 3DIM case
   IF (OUSERV) THEN
+#ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#else
+    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
+#endif
     D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                       &
           * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1+PREDR1)          &
                /((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))) &
@@ -708,7 +712,11 @@ IF (HTURBDIM=='3DIM') THEN
 
 !
   ELSE
+#ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#else
+    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
+#endif
     D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)             &
           * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1)      &
                /((1.+PREDTH1)*(1.+1./2.*PREDTH1)))        &
@@ -721,25 +729,25 @@ IF (HTURBDIM=='3DIM') THEN
   END IF
 ELSE
         !* 1DIM case
-!  WHERE (PPHI3(:,:,:)/=XPHI_LIM)
-!    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                           &
-!        * (1. - PREDTH1(:,:,:)*PPHI3(:,:,:))
-!  ELSEWHERE
-!    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
-!  ENDWHERE
-DO JL=1,SIZE(PPHI3,1)
-  DO JK=1,SIZE(PPHI3,3)
-    IF ( ABS(PPHI3(JL,1,JK)-XPHI_LIM) < 1.E-12 ) THEN
-       D_PHI3DTDZ_O_DDTDZ(JL,1,JK)=PPHI3(JL,1,JK)*&
-&     (1. - PREDTH1(JL,1,JK)*PPHI3(JL,1,JK))
-    ELSE
-       D_PHI3DTDZ_O_DDTDZ(JL,1,JK)=PPHI3(JL,1,JK)
-    ENDIF
+DO JJ=1,SIZE(PPHI3,2)
+  DO JL=1,SIZE(PPHI3,1)
+    DO JK=1,SIZE(PPHI3,3)
+      IF ( ABS(PPHI3(JL,JJ,JK)-XPHI_LIM) < 1.E-12 ) THEN
+         D_PHI3DTDZ_O_DDTDZ(JL,JJ,JK)=PPHI3(JL,JJ,JK)*&
+&       (1. - PREDTH1(JL,JJ,JK)*PPHI3(JL,JJ,JK))
+      ELSE
+         D_PHI3DTDZ_O_DDTDZ(JL,JJ,JK)=PPHI3(JL,JJ,JK)
+      ENDIF
+    ENDDO
   ENDDO
 ENDDO
-
 END IF
 !
+#ifdef REPRO48
+#else
+!* smoothing
+CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3,D_PHI3DTDZ_O_DDTDZ)
+#endif
 !
 D_PHI3DTDZ_O_DDTDZ(:,:,IKB-1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKB)
 D_PHI3DTDZ_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKE)
@@ -767,7 +775,11 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 IF (HTURBDIM=='3DIM') THEN
         !* 3DIM case
   IF (OUSERV) THEN
+#ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#else
+    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
+#endif
       D_PHI3DRDZ_O_DDRDZ(:,:,:) =          &
                 PPHI3(:,:,:) * (1.-PREDR1(:,:,:)*(3./2.+PREDTH1+PREDR1) &
                   / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))))  &
@@ -783,7 +795,11 @@ IF (HTURBDIM=='3DIM') THEN
   END IF
 ELSE
         !* 1DIM case
-  WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#ifdef REPRO48
+    WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#else
+    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
+#endif
     D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)                           &
           * (1. - PREDR1(:,:,:)*PPHI3(:,:,:))
   ELSEWHERE
@@ -791,6 +807,11 @@ ELSE
   END WHERE
 END IF
 !
+#ifdef REPRO48
+#else
+!* smoothing
+CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3,D_PHI3DRDZ_O_DDRDZ)
+#endif
 !
 D_PHI3DRDZ_O_DDRDZ(:,:,IKB-1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKB)
 D_PHI3DRDZ_O_DDRDZ(:,:,IKE+1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKE)
@@ -817,35 +838,17 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
 !
 IF (HTURBDIM=='3DIM') THEN
-        !* 3DIM case
-  IF (OUSERV) THEN
-    WHERE (PPHI3(:,:,:)/=XPHI_LIM)
-    D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                      &
-          * PDTDZ(:,:,:)*(2.-PREDTH1(:,:,:)*(3./2.+PREDTH1+PREDR1) &
-               /((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))) &
-          + (1.+PREDR1)*(PRED2THR3+PRED2TH3)                       &
-               / (PREDTH1*(1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))) &
-          - (1./2.*PREDTH1+PREDR1 * (1.+PREDTH1+PREDR1))           &
-               / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
-    ELSEWHERE
-      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
-    ENDWHERE
+   ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
+   D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ * (PPHI3 +  &
+           D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) )
 
-!
-  ELSE
-    WHERE (PPHI3(:,:,:)/=XPHI_LIM)
-    D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                  &
-          * PDTDZ(:,:,:)*(2.-PREDTH1(:,:,:)*(3./2.+PREDTH1)   &
-               /((1.+PREDTH1)*(1.+1./2.*PREDTH1)))             &
-          + PRED2TH3 / (PREDTH1*(1.+PREDTH1)*(1.+1./2.*PREDTH1)) &
-          - 1./2.*PREDTH1 / ((1.+PREDTH1)*(1.+1./2.*PREDTH1))
-    ELSEWHERE
-      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
-    ENDWHERE
-  END IF
 ELSE
         !* 1DIM case
+#ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=XPHI_LIM)
+#else
+    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
+#endif
       D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)*PDTDZ(:,:,:)             &
           * (2. - PREDTH1(:,:,:)*PPHI3(:,:,:))
     ELSEWHERE
@@ -853,6 +856,12 @@ ELSE
     END WHERE
 END IF
 !
+#ifdef REPRO48
+#else
+!* smoothing
+CALL SMOOTH_TURB_FUNCT(PPHI3,PPHI3*2.*PDTDZ,D_PHI3DTDZ2_O_DDTDZ)
+#endif
+!
 !
 D_PHI3DTDZ2_O_DDTDZ(:,:,IKB-1)=D_PHI3DTDZ2_O_DDTDZ(:,:,IKB)
 D_PHI3DTDZ2_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ2_O_DDTDZ(:,:,IKE)
diff --git a/src/mesonh/turb/mode_prandtl.f90 b/src/mesonh/turb/mode_prandtl.f90
deleted file mode 100644
index be6a381d6..000000000
--- a/src/mesonh/turb/mode_prandtl.f90
+++ /dev/null
@@ -1,2277 +0,0 @@
-!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!    #################### 
-     MODULE MODE_PRANDTL
-     USE PARKIND1, ONLY : JPRB
-     USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!    #################### 
-!
-!* modification 08/2010  V. Masson  smoothing of the discontinuity in functions 
-!                                   used for implicitation of exchange coefficients
-!               05/2020   V. Masson and C. Lac : bug in D_PHI3DTDZ2_O_DDTDZ
-!
-USE MODD_CTURB,      ONLY : XCTV, XCSHF, XCTD, XPHI_LIM, XCPR3, XCPR4, XCPR5
-USE MODD_PARAMETERS, ONLY : JPVEXT_TURB
-!
-USE MODI_SHUMAN, ONLY: MZM, MZF
-IMPLICIT NONE
-!----------------------------------------------------------------------------
-CONTAINS
-!----------------------------------------------------------------------------
-      SUBROUTINE PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_DIAG,       &
-                         HTURBDIM,OOCEAN,                      &
-                         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 MODE_EMOIST
-USE MODE_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
-LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
-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,OOCEAN), KKA, KKU, KKL)
-PEMOIST(:,:,:) = MZM(EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN), 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
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PF_LIM  ! Value of F when Phi3 is
-!                                                ! larger than Phi_lim
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PF      ! function F to smooth
-!
-REAL, DIMENSION(SIZE(PF,1),SIZE(PF,2),SIZE(PF,3)) :: ZCOEF
-!
-!* adds a artificial correction to smooth the function near the discontinuity
-!  point at Phi3 = Phi_lim
-!  This smoothing is applied between 0.9*phi_lim (=2.7) and Phi_lim (=3)
-!   Note that in the Boundary layer, phi is usually between 0.8 and 1
-!
-!
-ZCOEF = MAX(MIN((  10.*(1.-PPHI3/XPHI_LIM)) ,1.), 0.) 
-!
-PF(:,:,:) =     ZCOEF(:,:,:)   * PF    &
-          + (1.-ZCOEF(:,:,:))  * PF_LIM
-!
-END SUBROUTINE SMOOTH_TURB_FUNCT
-!----------------------------------------------------------------------------
-FUNCTION PHI3(PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: PHI3
-!
-  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
-!
-IF (HTURBDIM=='3DIM') THEN
-        !* 3DIM case
-  IF (OUSERV) THEN
-    ZW1(:,:,:) = 1. + 1.5* (PREDTH1(:,:,:)+PREDR1(:,:,:)) +      &
-                   ( 0.5 * (PREDTH1(:,:,:)**2+PREDR1(:,:,:)**2)  &
-                         + PREDTH1(:,:,:) * PREDR1(:,:,:)        &
-                   )
-
-    ZW2(:,:,:) = 0.5 * (PRED2TH3(:,:,:)-PRED2R3(:,:,:))
-
-    PHI3(:,:,:)= 1. -                                          &
-    ( ( (1.+PREDR1(:,:,:)) *                                   &
-        (PRED2THR3(:,:,:) + PRED2TH3(:,:,:)) / PREDTH1(:,:,:)  &
-      ) + ZW2(:,:,:)                                           &
-    ) / ZW1(:,:,:)
-  ELSE
-    ZW1(:,:,:) = 1. + 1.5* PREDTH1(:,:,:) + &
-                 0.5* PREDTH1(:,:,:)**2
-
-    ZW2(:,:,:) = 0.5* PRED2TH3(:,:,:)
-
-    PHI3(:,:,:)= 1. -                                       &
-            (PRED2TH3(:,:,:) / PREDTH1(:,:,:) + ZW2(:,:,:)) / ZW1(:,:,:)
-  END IF
-  WHERE( PHI3 <= 0. .OR. PHI3 > XPHI_LIM )
-    PHI3 = XPHI_LIM
-  END WHERE
-
-ELSE
-        !* 1DIM case
-  IF (OUSERV) THEN
-    PHI3(:,:,:)= 1./(1.+PREDTH1(:,:,:)+PREDR1(:,:,:))
-  ELSE
-    PHI3(:,:,:)= 1./(1.+PREDTH1(:,:,:))
-  END IF
-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)
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PREDS1
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRED2THS
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRED2RS
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PPSI3
-  REAL, DIMENSION(SIZE(PRED2THS,1),SIZE(PRED2THS,2),SIZE(PRED2THS,3),SIZE(PRED2THS,4)) :: PSI_SV
-!
-  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
-!
-DO JSV=1,SIZE(PSI_SV,4)
-  PSI_SV(:,:,:,JSV) = ( 1.                                             &
-    - (XCPR3+XCPR5) * (PRED2THS(:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDTH1) &
-    - (XCPR4+XCPR5) * (PRED2RS (:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDR1 ) &
-    - XCPR3 * PREDTH1 * PPHI3 - XCPR4 * PREDR1 * PPSI3                 &
-                ) / (  1. + XCPR5 * ( PREDTH1 + PREDR1 ) )           
-  
-!        control of the PSI_SV positivity
-  WHERE ( (PSI_SV(:,:,:,JSV) <=0.).AND. (PREDTH1+PREDR1) <= 0. )
-    PSI_SV(:,:,:,JSV)=XPHI_LIM
-  END WHERE
-  PSI_SV(:,:,:,JSV) = MAX( 1.E-4, MIN(XPHI_LIM,PSI_SV(:,:,:,JSV)) )
-!
-  PSI_SV(:,:,IKB-1,JSV)=PSI_SV(:,:,IKB,JSV)
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  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
-!
-IF (HTURBDIM=='3DIM') THEN
-        !* 3DIM case
-  IF (OUSERV) THEN
-    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                       &
-          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1+PREDR1)          &
-               /((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))) &
-          + (1.+PREDR1)*(PRED2THR3+PRED2TH3)                       &
-               / (PREDTH1*(1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))) &
-          - (1./2.*PREDTH1+PREDR1 * (1.+PREDTH1+PREDR1))           &
-               / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
-    ELSEWHERE
-      D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
-    ENDWHERE
-
-!
-  ELSE
-    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)             &
-          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1)      &
-               /((1.+PREDTH1)*(1.+1./2.*PREDTH1)))        &
-          + PRED2TH3 / (PREDTH1*(1.+PREDTH1)*(1.+1./2.*PREDTH1)) &
-          - 1./2.*PREDTH1 / ((1.+PREDTH1)*(1.+1./2.*PREDTH1))
-    ELSEWHERE
-      D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
-    ENDWHERE
-!
-  END IF
-ELSE
-        !* 1DIM case
-!  WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-!    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                           &
-!        * (1. - PREDTH1(:,:,:)*PPHI3(:,:,:))
-!  ELSEWHERE
-!    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
-!  ENDWHERE
-DO JJ=1,SIZE(PPHI3,2)
-  DO JL=1,SIZE(PPHI3,1)
-    DO JK=1,SIZE(PPHI3,3)
-      IF ( ABS(PPHI3(JL,JJ,JK)-XPHI_LIM) < 1.E-12 ) THEN
-         D_PHI3DTDZ_O_DDTDZ(JL,JJ,JK)=PPHI3(JL,JJ,JK)*&
-&       (1. - PREDTH1(JL,JJ,JK)*PPHI3(JL,JJ,JK))
-      ELSE
-         D_PHI3DTDZ_O_DDTDZ(JL,JJ,JK)=PPHI3(JL,JJ,JK)
-      ENDIF
-    ENDDO
-  ENDDO
-ENDDO
-END IF
-!
-!* smoothing
-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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-   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
-!
-!
-IF (HTURBDIM=='3DIM') THEN
-        !* 3DIM case
-  IF (OUSERV) THEN
-    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-      D_PHI3DRDZ_O_DDRDZ(:,:,:) =          &
-                PPHI3(:,:,:) * (1.-PREDR1(:,:,:)*(3./2.+PREDTH1+PREDR1) &
-                  / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))))  &
-              - PREDR1(:,:,:) * (PRED2THR3+PRED2TH3) / (PREDTH1         &
-                  * (1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))    &
-              + PREDR1(:,:,:) * (1./2.+PREDTH1+PREDR1)                  &
-                  / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
-    ELSEWHERE
-      D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
-    END WHERE
-  ELSE
-    D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
-  END IF
-ELSE
-        !* 1DIM case
-  WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-    D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)                           &
-          * (1. - PREDR1(:,:,:)*PPHI3(:,:,:))
-  ELSEWHERE
-    D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
-  END WHERE
-END IF
-!
-!* smoothing
-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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  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
-!
-!
-IF (HTURBDIM=='3DIM') THEN
-   ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
-   D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ * (PPHI3 +  &
-           D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) )
-
-!        !* 3DIM case
-!  IF (OUSERV) THEN
-!    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-!    D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                      &
-!          * PDTDZ(:,:,:)*(2.-PREDTH1(:,:,:)*(3./2.+PREDTH1+PREDR1) &
-!               /((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))) &
-!          + (1.+PREDR1)*(PRED2THR3+PRED2TH3)                       &
-!               / (PREDTH1*(1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))) &
-!          - (1./2.*PREDTH1+PREDR1 * (1.+PREDTH1+PREDR1))           &
-!               / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
-!    ELSEWHERE
-!      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
-!    ENDWHERE
-!
-!!
-!  ELSE
-!    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-!    D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                  &
-!          * PDTDZ(:,:,:)*(2.-PREDTH1(:,:,:)*(3./2.+PREDTH1)   &
-!               /((1.+PREDTH1)*(1.+1./2.*PREDTH1)))             &
-!          + PRED2TH3 / (PREDTH1*(1.+PREDTH1)*(1.+1./2.*PREDTH1)) &
-!          - 1./2.*PREDTH1 / ((1.+PREDTH1)*(1.+1./2.*PREDTH1))
-!    ELSEWHERE
-!      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
-!    ENDWHERE
-!  END IF
-ELSE
-        !* 1DIM case
-    WHERE (PPHI3(:,:,:)<=XPHI_LIM)
-      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:)*PDTDZ(:,:,:)             &
-          * (2. - PREDTH1(:,:,:)*PPHI3(:,:,:))
-    ELSEWHERE
-      D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
-    END WHERE
-END IF
-!
-!* smoothing
-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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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
-
-M3_WTH_WTH2(:,:,:) = XCSHF*PBLL_O_E*PETHETA*0.5/XCTD        &
-                   * (1.+0.5*PREDTH1+PREDR1) / PD
-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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WTH_WTH2
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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
-
-D_M3_WTH_WTH2_O_DDTDZ(:,:,:) = (  0.5*XCSHF*PBLL_O_E*PETHETA*0.5/XCTD/PD &
-                                - PM3_WTH_WTH2/PD*(1.5+PREDTH1+PREDR1)  )&
-                             * PBLL_O_E * PETHETA * XCTV
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, KKA, KKU, KKL) &
-!                         *0.5*PLEPS/XCTD*(1+PREDR1)/PD
-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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WTH_WTHR
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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
-
-D_M3_WTH_WTHR_O_DDTDZ(:,:,:) = - PM3_WTH_WTHR * (1.5+PREDTH1+PREDR1)/PD*XCTV*PBLL_O_E*PETHETA
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  LOGICAL,                INTENT(IN) :: 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, 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, KKA, KKU, KKL)
-
-ELSE
-  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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  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                                                   &
-             - (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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  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), 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  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)),     &
-       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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  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, 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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: 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,                                    &
-       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
-!----------------------------------------------------------------------------
-!----------------------------------------------------------------------------
-!----------------------------------------------------------------------------
-!
-FUNCTION PSI3(PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  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)
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WR_WR2
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2R
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2R_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2TH
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2TH_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTH2
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WTH2_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTHR
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2R
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  LOGICAL,                INTENT(IN) :: OUSERV
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2R_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WR2
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WR2_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2TH
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2TH_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTH2
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTH2_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTHR
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTHR_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTHR_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WR2
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDTDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_W2R
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDRDZ
-!
-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(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
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDTDZ
-!
-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
-
-- 
GitLab