From 8927b719b59838e42fdb2feb20776cf321fe1695 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Fri, 22 Jul 2022 16:03:01 +0200
Subject: [PATCH] Quentin 22/07/2022: convert FUNCTION to SUBROUTINE in turb

---
 src/common/turb/mode_bl_depth_diag.F90        |  22 +-
 src/common/turb/mode_emoist.F90               |   6 +-
 src/common/turb/mode_etheta.F90               |   6 +-
 src/common/turb/mode_prandtl.F90              | 696 +++++++++---------
 src/common/turb/mode_sbl.F90                  | 209 +++---
 src/common/turb/mode_sbl_depth.F90            |   8 +-
 src/common/turb/mode_turb_hor_sv_corr.F90     |   4 +-
 src/common/turb/mode_turb_hor_thermo_corr.F90 |   4 +-
 src/common/turb/mode_turb_ver.F90             |   8 +-
 src/common/turb/mode_turb_ver_sv_corr.F90     |   4 +-
 src/common/turb/mode_turb_ver_thermo_corr.F90 | 148 ++--
 src/common/turb/mode_turb_ver_thermo_flux.F90 |  68 +-
 src/common/turb/turb.F90                      |  10 +-
 src/mesonh/ext/lesn.f90                       |   6 +-
 14 files changed, 604 insertions(+), 595 deletions(-)

diff --git a/src/common/turb/mode_bl_depth_diag.F90 b/src/common/turb/mode_bl_depth_diag.F90
index 3cf56530a..8b6980a81 100644
--- a/src/common/turb/mode_bl_depth_diag.F90
+++ b/src/common/turb/mode_bl_depth_diag.F90
@@ -11,7 +11,7 @@ END INTERFACE
 !
 CONTAINS
 !
-FUNCTION BL_DEPTH_DIAG_3D(KKB,KKE,PSURF,PZS,PFLUX,PZZ,PFTOP_O_FSURF)
+SUBROUTINE BL_DEPTH_DIAG_3D(KKB,KKE,PSURF,PZS,PFLUX,PZZ,PFTOP_O_FSURF,BL_DEPTH_DIAG3D)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -60,7 +60,7 @@ REAL, DIMENSION(:,:),   INTENT(IN)           :: PZS          ! orography
 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PFLUX        ! flux
 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PZZ          ! altitude of flux points
 REAL,                   INTENT(IN)           :: PFTOP_O_FSURF! Flux at BL top / Surface flux
-REAL, DIMENSION(SIZE(PSURF,1),SIZE(PSURF,2)) :: BL_DEPTH_DIAG_3D
+REAL, DIMENSION(SIZE(PSURF,1),SIZE(PSURF,2)), INTENT(OUT) :: BL_DEPTH_DIAG3D
 !
 !
 !       0.2  declaration of local variables
@@ -79,7 +79,7 @@ ELSE
   IKL=-1
 ENDIF
 
-BL_DEPTH_DIAG_3D(:,:) = 0.
+BL_DEPTH_DIAG3D(:,:) = 0.
 !
 
 DO JJ=1,SIZE(PSURF,2)
@@ -89,7 +89,7 @@ DO JJ=1,SIZE(PSURF,2)
       IF (PZZ(JI,JJ,JK-IKL)<=PZS(JI,JJ)) CYCLE
       ZFLX = PSURF(JI,JJ) * PFTOP_O_FSURF
       IF ( (PFLUX(JI,JJ,JK)-ZFLX)*(PFLUX(JI,JJ,JK-IKL)-ZFLX) <= 0. ) THEN
-        BL_DEPTH_DIAG_3D(JI,JJ) = (PZZ  (JI,JJ,JK-IKL) - PZS(JI,JJ))     &
+        BL_DEPTH_DIAG3D(JI,JJ) = (PZZ  (JI,JJ,JK-IKL) - PZS(JI,JJ))     &
                          + (PZZ  (JI,JJ,JK) - PZZ  (JI,JJ,JK-IKL))    &
                          * (ZFLX            - PFLUX(JI,JJ,JK-IKL)  )  &
                          / (PFLUX(JI,JJ,JK) - PFLUX(JI,JJ,JK-IKL)   )
@@ -99,12 +99,12 @@ DO JJ=1,SIZE(PSURF,2)
   END DO
 END DO
 !
-BL_DEPTH_DIAG_3D(:,:) = BL_DEPTH_DIAG_3D(:,:) / (1. - PFTOP_O_FSURF)
+BL_DEPTH_DIAG3D(:,:) = BL_DEPTH_DIAG3D(:,:) / (1. - PFTOP_O_FSURF)
 !
 IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',1,ZHOOK_HANDLE)
-END FUNCTION BL_DEPTH_DIAG_3D
+END SUBROUTINE BL_DEPTH_DIAG_3D
 !
-FUNCTION BL_DEPTH_DIAG_1D(KKB,KKE,PSURF,PZS,PFLUX,PZZ,PFTOP_O_FSURF)
+SUBROUTINE BL_DEPTH_DIAG_1D(KKB,KKE,PSURF,PZS,PFLUX,PZZ,PFTOP_O_FSURF,BL_DEPTH_DIAG1D)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -117,7 +117,7 @@ REAL,                   INTENT(IN)           :: PZS          ! orography
 REAL, DIMENSION(:),     INTENT(IN)           :: PFLUX        ! flux
 REAL, DIMENSION(:),     INTENT(IN)           :: PZZ          ! altitude of flux points
 REAL,                   INTENT(IN)           :: PFTOP_O_FSURF! Flux at BL top / Surface flux
-REAL                                         :: BL_DEPTH_DIAG_1D
+REAL,                   INTENT(OUT)          :: BL_DEPTH_DIAG1D
 !
 REAL, DIMENSION(1,1)             :: ZSURF
 REAL, DIMENSION(1,1)             :: ZZS
@@ -132,12 +132,12 @@ ZZS          = PZS
 ZFLUX(1,1,:) = PFLUX(:)
 ZZZ  (1,1,:) = PZZ  (:)
 !
-ZBL_DEPTH_DIAG = BL_DEPTH_DIAG_3D(KKB,KKE,ZSURF,ZZS,ZFLUX,ZZZ,PFTOP_O_FSURF)
+CALL BL_DEPTH_DIAG_3D(KKB,KKE,ZSURF,ZZS,ZFLUX,ZZZ,PFTOP_O_FSURF,ZBL_DEPTH_DIAG)
 !
-BL_DEPTH_DIAG_1D = ZBL_DEPTH_DIAG(1,1)
+BL_DEPTH_DIAG1D = ZBL_DEPTH_DIAG(1,1)
 !
 !-------------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_1D',1,ZHOOK_HANDLE)
-END FUNCTION BL_DEPTH_DIAG_1D
+END SUBROUTINE BL_DEPTH_DIAG_1D
 END MODULE MODE_BL_DEPTH_DIAG
diff --git a/src/common/turb/mode_emoist.F90 b/src/common/turb/mode_emoist.F90
index e57be179e..99196199b 100644
--- a/src/common/turb/mode_emoist.F90
+++ b/src/common/turb/mode_emoist.F90
@@ -5,7 +5,7 @@
 MODULE MODE_EMOIST
 IMPLICIT NONE
 CONTAINS
-FUNCTION EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN) RESULT(PEMOIST)
+SUBROUTINE EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,PEMOIST)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !   ############################################################################
@@ -80,7 +80,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PAMOIST   ! Amoist
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
                                                     ! moment s'r'c/2Sigma_s2
 !
-REAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: PEMOIST ! result
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PEMOIST ! result
 !
 !*       0.2 declarations of local variables
 !
@@ -190,5 +190,5 @@ END IF
 !---------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('EMOIST',1,ZHOOK_HANDLE)
-END FUNCTION EMOIST
+END SUBROUTINE EMOIST
 END MODULE MODE_EMOIST
diff --git a/src/common/turb/mode_etheta.F90 b/src/common/turb/mode_etheta.F90
index 34c2b6349..4d8c8b29d 100644
--- a/src/common/turb/mode_etheta.F90
+++ b/src/common/turb/mode_etheta.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ETHETA
 IMPLICIT NONE
 CONTAINS
-FUNCTION ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC) RESULT(PETHETA)
+SUBROUTINE ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,PETHETA)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !   ############################################################################
@@ -82,7 +82,7 @@ REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
                 MERGE(D%NKT,0,OCOMPUTE_SRC)),   INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
                                                     ! moment s'r'c/2Sigma_s2
 !
-REAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: PETHETA ! result
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PETHETA ! result
 !
 !
 !
@@ -186,5 +186,5 @@ END IF
 !---------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('ETHETA',1,ZHOOK_HANDLE)
-END FUNCTION ETHETA
+END SUBROUTINE ETHETA
 END MODULE MODE_ETHETA
diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index 3ff30addf..4a2ee968f 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -257,8 +257,8 @@ IIB=D%NIBC
 IJE=D%NJEC
 IJB=D%NJBC
 !
-ZWORK1 = ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
-ZWORK2 = EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZWORK1)
+CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZWORK2)
 CALL MZM_PHY(D,ZWORK1,PETHETA)
 CALL MZM_PHY(D,ZWORK2,PEMOIST)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
@@ -664,7 +664,7 @@ PF(IIB:IIE,IJB:IJE,1:D%NKT) =     ZCOEF(IIB:IIE,IJB:IJE,1:D%NKT)   * PF(IIB:IIE,
 !
 END SUBROUTINE SMOOTH_TURB_FUNCT
 !----------------------------------------------------------------------------
-FUNCTION PHI3(D,CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE PHI3(D,CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PPHI3)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -674,7 +674,7 @@ FUNCTION PHI3(D,CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: PHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PPHI3
 !
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZW1, ZW2
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
@@ -699,7 +699,7 @@ IF (HTURBDIM=='3DIM') THEN
 
     ZW2(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5 * (PRED2TH3(IIB:IIE,IJB:IJE,1:D%NKT)-PRED2R3(IIB:IIE,IJB:IJE,1:D%NKT))
 
-    PHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1. -                                          &
+    PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1. -                                          &
     ( ( (1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)) *                                   &
         (PRED2THR3(IIB:IIE,IJB:IJE,1:D%NKT) + PRED2TH3(IIB:IIE,IJB:IJE,1:D%NKT)) / PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)  &
       ) + ZW2(IIB:IIE,IJB:IJE,1:D%NKT)                                           &
@@ -710,35 +710,35 @@ IF (HTURBDIM=='3DIM') THEN
 
     ZW2(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5* PRED2TH3(IIB:IIE,IJB:IJE,1:D%NKT)
 
-    PHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1. -                                       &
+    PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1. -                                       &
             (PRED2TH3(IIB:IIE,IJB:IJE,1:D%NKT) / PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT) + ZW2(IIB:IIE,IJB:IJE,1:D%NKT)) &
             / ZW1(IIB:IIE,IJB:IJE,1:D%NKT)
   END IF
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 
   !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
-  WHERE( PHI3(IIB:IIE,IJB:IJE,1:D%NKT) <= 0. .OR. PHI3(IIB:IIE,IJB:IJE,1:D%NKT) > CSTURB%XPHI_LIM )
-    PHI3(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XPHI_LIM
+  WHERE( PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) <= 0. .OR. PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) > CSTURB%XPHI_LIM )
+    PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XPHI_LIM
   END WHERE
   !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 ELSE
         !* 1DIM case
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   IF (OUSERV) THEN
-    PHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1./(1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))
+    PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1./(1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))
   ELSE
-    PHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1./(1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))
+    PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)= 1./(1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))
   END IF
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 END IF
 !
-PHI3(IIB:IIE,IJB:IJE,IKB-1)=PHI3(IIB:IIE,IJB:IJE,IKB)
-PHI3(IIB:IIE,IJB:IJE,IKE+1)=PHI3(IIB:IIE,IJB:IJE,IKE)
+PPHI3(IIB:IIE,IJB:IJE,IKB-1)=PPHI3(IIB:IIE,IJB:IJE,IKB)
+PPHI3(IIB:IIE,IJB:IJE,IKE+1)=PPHI3(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',1,ZHOOK_HANDLE)
-END FUNCTION PHI3
+END SUBROUTINE PHI3
 !----------------------------------------------------------------------------
-FUNCTION PSI_SV(D,CSTURB,KSV,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
+SUBROUTINE PSI_SV(D,CSTURB,KSV,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3,PPSI_SV)
   TYPE(CSTURB_t),                  INTENT(IN)      :: CSTURB
   TYPE(DIMPHYEX_t),                INTENT(IN)      :: D
   INTEGER,                         INTENT(IN)      :: KSV
@@ -749,7 +749,7 @@ FUNCTION PSI_SV(D,CSTURB,KSV,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) :: PRED2RS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PPHI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PPSI3
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV) :: PSI_SV
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV),INTENT(OUT) :: PPSI_SV
 !
   INTEGER :: IKB, IKE, IIB,IIE,IJB,IJE
   INTEGER :: JSV,JI,JJ,JK
@@ -765,7 +765,7 @@ IJB=D%NJBC
 !
 DO JSV=1,KSV
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
-  PSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) = ( 1.                                             &
+  PPSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) = ( 1.                                             &
     - (CSTURB%XCPR3+CSTURB%XCPR5) * &
     (PRED2THS(IIB:IIE,IJB:IJE,1:D%NKT,JSV)/PREDS1(IIB:IIE,IJB:IJE,1:D%NKT,JSV)-PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)) &
     - (CSTURB%XCPR4+CSTURB%XCPR5) * &
@@ -778,23 +778,23 @@ DO JSV=1,KSV
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 !        control of the PSI_SV positivity
   !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
-  WHERE ( (PSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) <=0.).AND. (PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))<=0.)
-    PSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV)=CSTURB%XPHI_LIM
+  WHERE ( (PPSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) <=0.).AND. (PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))<=0.)
+    PPSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV)=CSTURB%XPHI_LIM
   END WHERE
   !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
-  PSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) = MAX( 1.E-4, MIN(CSTURB%XPHI_LIM,PSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV)) )
+  PPSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV) = MAX( 1.E-4, MIN(CSTURB%XPHI_LIM,PPSI_SV(IIB:IIE,IJB:IJE,1:D%NKT,JSV)) )
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 !
-  PSI_SV(IIB:IIE,IJB:IJE,IKB-1,JSV)=PSI_SV(IIB:IIE,IJB:IJE,IKB,JSV)
-  PSI_SV(IIB:IIE,IJB:IJE,IKE+1,JSV)=PSI_SV(IIB:IIE,IJB:IJE,IKE,JSV)
+  PPSI_SV(IIB:IIE,IJB:IJE,IKB-1,JSV)=PPSI_SV(IIB:IIE,IJB:IJE,IKB,JSV)
+  PPSI_SV(IIB:IIE,IJB:IJE,IKE+1,JSV)=PPSI_SV(IIB:IIE,IJB:IJE,IKE,JSV)
 END DO
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',1,ZHOOK_HANDLE)
-END FUNCTION PSI_SV
+END SUBROUTINE PSI_SV
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PD_PHI3DTDZ_O_DDTDZ)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
@@ -804,7 +804,7 @@ FUNCTION D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTU
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DTDZ_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_PHI3DTDZ_O_DDTDZ
   INTEGER :: IKB, IKE,JK,JJ,JI, IIB,IIE,IJB,IJE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -825,7 +825,7 @@ IF (HTURBDIM=='3DIM') THEN
 #else
     WHERE (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)<=CSTURB%XPHI_LIM)
 #endif
-      D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)                       &
+      PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)                       &
           * (1. - PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT) * (3./2.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))   &
                /((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)) &
                *(1.+1./2.*(PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))))) &
@@ -837,7 +837,7 @@ IF (HTURBDIM=='3DIM') THEN
                / ((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))&
                *(1.+1./2.*(PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))))
     ELSEWHERE
-      D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
+      PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
     ENDWHERE
    !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 
@@ -849,7 +849,7 @@ IF (HTURBDIM=='3DIM') THEN
 #else
     WHERE (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)<=CSTURB%XPHI_LIM)
 #endif
-    D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)             &
+    PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)             &
           * (1. - PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT) * (3./2.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))      &
                /((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))*(1.+1./2.*PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))))        &
           + PRED2TH3(IIB:IIE,IJB:IJE,1:D%NKT) &
@@ -857,7 +857,7 @@ IF (HTURBDIM=='3DIM') THEN
           - 1./2.*PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT) &
           / ((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))*(1.+1./2.*PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)))
     ELSEWHERE
-      D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
+      PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
     ENDWHERE
    !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 !
@@ -868,10 +868,10 @@ DO JK=1,D%NKT
   DO JJ=IJB,IJE
     DO JI=IIB,IIE
       IF ( ABS(PPHI3(JI,JJ,JK)-CSTURB%XPHI_LIM) < 1.E-12 ) THEN
-         D_PHI3DTDZ_O_DDTDZ(JI,JJ,JK)=PPHI3(JI,JJ,JK)*&
+         PD_PHI3DTDZ_O_DDTDZ(JI,JJ,JK)=PPHI3(JI,JJ,JK)*&
 &       (1. - PREDTH1(JI,JJ,JK)*PPHI3(JI,JJ,JK))
       ELSE
-         D_PHI3DTDZ_O_DDTDZ(JI,JJ,JK)=PPHI3(JI,JJ,JK)
+         PD_PHI3DTDZ_O_DDTDZ(JI,JJ,JK)=PPHI3(JI,JJ,JK)
       ENDIF
     ENDDO
   ENDDO
@@ -881,16 +881,16 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,D_PHI3DTDZ_O_DDTDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,PD_PHI3DTDZ_O_DDTDZ)
 #endif
 !
-D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_PHI3DTDZ_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PHI3DTDZ_O_DDTDZ
+END SUBROUTINE D_PHI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PD_PHI3DRDZ_O_DDRDZ)
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
@@ -900,7 +900,7 @@ FUNCTION D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTU
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DRDZ_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_PHI3DRDZ_O_DDRDZ
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -922,7 +922,7 @@ IF (HTURBDIM=='3DIM') THEN
 #else
     WHERE (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)<=CSTURB%XPHI_LIM)
 #endif
-      D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) &
+      PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) &
       * (1.-PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)*(3./2.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)) &
       / ((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)) & 
       *(1.+1./2.*(PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)))))  &
@@ -934,11 +934,11 @@ IF (HTURBDIM=='3DIM') THEN
       / ((1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))&
       *(1.+1./2.*(PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))))
     ELSEWHERE
-      D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
+      PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
     END WHERE
    !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
   ELSE
-    D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
+    PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
   END IF
 ELSE
         !* 1DIM case
@@ -948,10 +948,10 @@ ELSE
 #else
     WHERE (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)<=CSTURB%XPHI_LIM)
 #endif
-    D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)                           &
+    PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)                           &
           * (1. - PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)*PPHI3(IIB:IIE,IJB:IJE,1:D%NKT))
   ELSEWHERE
-    D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
+    PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)
   END WHERE
   !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 END IF
@@ -959,16 +959,16 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,D_PHI3DRDZ_O_DDRDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,PD_PHI3DRDZ_O_DDRDZ)
 #endif
 !
-D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
-D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=D_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKE)
+PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
+PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_PHI3DRDZ_O_DDRDZ(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PHI3DRDZ_O_DDRDZ
+END SUBROUTINE D_PHI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV)
+SUBROUTINE D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV,PD_PHI3DTDZ2_O_DDTDZ)
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
@@ -979,7 +979,7 @@ FUNCTION D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DTDZ2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_PHI3DTDZ2_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
@@ -995,9 +995,9 @@ IJB=D%NJBC
 !
 IF (HTURBDIM=='3DIM') THEN
    ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
-   ZWORK1 = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) 
+   CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,ZWORK1)
    !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-   D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) &
+   PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) &
    * (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) +  ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT))
    !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 ELSE
@@ -1008,10 +1008,10 @@ ELSE
 #else
     WHERE (PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)<=CSTURB%XPHI_LIM)
 #endif
-      D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)*PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)             &
+      PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT)*PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)             &
           * (2. - PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)*PPHI3(IIB:IIE,IJB:IJE,1:D%NKT))
     ELSEWHERE
-      D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) * 2. * PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)
+      PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PPHI3(IIB:IIE,IJB:IJE,1:D%NKT) * 2. * PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)
     END WHERE
     !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
 END IF
@@ -1019,17 +1019,17 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3*2.*PDTDZ,D_PHI3DTDZ2_O_DDTDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3*2.*PDTDZ,PD_PHI3DTDZ2_O_DDTDZ)
 #endif
 !
 !
-D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_PHI3DTDZ2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PHI3DTDZ2_O_DDTDZ
+END SUBROUTINE D_PHI3DTDZ2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+SUBROUTINE M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PM3_WTH_WTH2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1037,7 +1037,7 @@ FUNCTION M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_WTH_WTH2
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1050,17 +1050,17 @@ IJE=D%NJEC
 IJB=D%NJBC
 
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCSHF*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)&
+PM3_WTH_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCSHF*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)&
                    * PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)*0.5/CSTURB%XCTD        &
                    * (1.+0.5*PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)) / PD(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_WTH2(IIB:IIE,IJB:IJE,IKB-1)=M3_WTH_WTH2(IIB:IIE,IJB:IJE,IKB)
-M3_WTH_WTH2(IIB:IIE,IJB:IJE,IKE+1)=M3_WTH_WTH2(IIB:IIE,IJB:IJE,IKE)
+PM3_WTH_WTH2(IIB:IIE,IJB:IJE,IKB-1)=PM3_WTH_WTH2(IIB:IIE,IJB:IJE,IKB)
+PM3_WTH_WTH2(IIB:IIE,IJB:IJE,IKE+1)=PM3_WTH_WTH2(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',1,ZHOOK_HANDLE)
-END FUNCTION M3_WTH_WTH2
+END SUBROUTINE M3_WTH_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PD_M3_WTH_WTH2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WTH_WTH2
@@ -1069,7 +1069,7 @@ FUNCTION D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_WTH_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1082,20 +1082,20 @@ IJE=D%NJEC
 IJB=D%NJBC
 
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PD_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
 (0.5*CSTURB%XCSHF*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)*0.5/CSTURB%XCTD/PD(IIB:IIE,IJB:IJE,1:D%NKT) &
 - PM3_WTH_WTH2(IIB:IIE,IJB:IJE,1:D%NKT)/PD(IIB:IIE,IJB:IJE,1:D%NKT)&
 *(1.5+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))  )&
 * PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * PETHETA(IIB:IIE,IJB:IJE,1:D%NKT) * CSTURB%XCTV
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_WTH_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_WTH_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE)
+SUBROUTINE M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PM3_WTH_W2TH)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1103,7 +1103,7 @@ FUNCTION M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_WTH_W2TH
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
@@ -1117,18 +1117,18 @@ IJE=D%NJEC
 IJB=D%NJBC
 CALL MZM_PHY(D,PTKE,ZWORK1)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*1.5/ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) &
+PM3_WTH_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*1.5/ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) &
   * (1. - 0.5*PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)*(1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))/PD(IIB:IIE,IJB:IJE,1:D%NKT) ) &
   / (1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_WTH_W2TH(IIB:IIE,IJB:IJE,IKB-1)=M3_WTH_W2TH(IIB:IIE,IJB:IJE,IKB)
-M3_WTH_W2TH(IIB:IIE,IJB:IJE,IKE+1)=M3_WTH_W2TH(IIB:IIE,IJB:IJE,IKE)
+PM3_WTH_W2TH(IIB:IIE,IJB:IJE,IKB-1)=PM3_WTH_W2TH(IIB:IIE,IJB:IJE,IKB)
+PM3_WTH_W2TH(IIB:IIE,IJB:IJE,IKE+1)=PM3_WTH_W2TH(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',1,ZHOOK_HANDLE)
-END FUNCTION M3_WTH_W2TH
+END SUBROUTINE M3_WTH_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
+SUBROUTINE D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE,PD_M3_WTH_W2TH_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1138,7 +1138,7 @@ FUNCTION D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_WTH_W2TH_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK, IIB,IIE,IJB,IJE
 !
@@ -1153,7 +1153,7 @@ IJB=D%NJBC
 
 CALL MZM_PHY(D,PTKE,ZWORK1)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PD_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
  - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*1.5/ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)/(1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))**2 &
  * CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)  &
  * (1. - 0.5*PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)*(1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))/PD(IIB:IIE,IJB:IJE,1:D%NKT)* &
@@ -1161,13 +1161,13 @@ D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
    /PD(IIB:IIE,IJB:IJE,1:D%NKT)) )
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_WTH_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_WTH_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_WTH_W2R)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1176,7 +1176,7 @@ FUNCTION M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_WTH_W2R
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1191,18 +1191,18 @@ IJB=D%NJBC
 
 CALL MZM_PHY(D,PTKE,ZWORK1)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_W2R(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PM3_WTH_W2R(IIB:IIE,IJB:IJE,1:D%NKT) = &
   - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*0.75*CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) &
   /ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT)*PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)/PD(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_WTH_W2R(IIB:IIE,IJB:IJE,IKB-1)=M3_WTH_W2R(IIB:IIE,IJB:IJE,IKB)
-M3_WTH_W2R(IIB:IIE,IJB:IJE,IKE+1)=M3_WTH_W2R(IIB:IIE,IJB:IJE,IKE)
+PM3_WTH_W2R(IIB:IIE,IJB:IJE,IKB-1)=PM3_WTH_W2R(IIB:IIE,IJB:IJE,IKB)
+PM3_WTH_W2R(IIB:IIE,IJB:IJE,IKE+1)=PM3_WTH_W2R(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE)
-END FUNCTION M3_WTH_W2R
+END SUBROUTINE M3_WTH_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PD_M3_WTH_W2R_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1212,7 +1212,7 @@ FUNCTION D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_WTH_W2R_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1227,20 +1227,20 @@ IJB=D%NJBC
 
 CALL MZM_PHY(D,PTKE,ZWORK1)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PD_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
 - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*0.75*CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) &
                                /ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT)/PD(IIB:IIE,IJB:IJE,1:D%NKT) &
                                      * (1. -  PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)*(1.5+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)& 
                                      +PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))/PD(IIB:IIE,IJB:IJE,1:D%NKT))
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_WTH_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_WTH_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WR2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
+SUBROUTINE M3_WTH_WR2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ,PM3_WTH_WR2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1252,7 +1252,7 @@ FUNCTION M3_WTH_WR2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_WTH_WR2
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1270,18 +1270,18 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBETA(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,I
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZM_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_WR2(IIB:IIE,IJB:IJE,1:D%NKT) = - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)& 
+PM3_WTH_WR2(IIB:IIE,IJB:IJE,1:D%NKT) = - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)& 
                            *0.25*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV*PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT)**2 &
                            *ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD*PDTDZ(IIB:IIE,IJB:IJE,1:D%NKT)/PD(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_WTH_WR2(IIB:IIE,IJB:IJE,IKB-1)=M3_WTH_WR2(IIB:IIE,IJB:IJE,IKB)
-M3_WTH_WR2(IIB:IIE,IJB:IJE,IKE+1)=M3_WTH_WR2(IIB:IIE,IJB:IJE,IKE)
+PM3_WTH_WR2(IIB:IIE,IJB:IJE,IKB-1)=PM3_WTH_WR2(IIB:IIE,IJB:IJE,IKB)
+PM3_WTH_WR2(IIB:IIE,IJB:IJE,IKE+1)=PM3_WTH_WR2(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE)
-END FUNCTION M3_WTH_WR2
+END SUBROUTINE M3_WTH_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+SUBROUTINE D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PD_M3_WTH_WR2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1294,7 +1294,7 @@ FUNCTION D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_WTH_WR2_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1312,20 +1312,20 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBETA(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,I
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZM_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)& 
+PD_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)& 
                            *0.25*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV*PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT)**2 &
                            *ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD/PD(IIB:IIE,IJB:IJE,1:D%NKT)     &
                            * (1. -  PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)* &
                            (1.5+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))/PD(IIB:IIE,IJB:IJE,1:D%NKT))
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_WTH_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_WTH_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WTHR(D,CSTURB,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
+SUBROUTINE M3_WTH_WTHR(D,CSTURB,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST,PM3_WTH_WTHR)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1336,7 +1336,7 @@ FUNCTION M3_WTH_WTHR(D,CSTURB,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_WTH_WTHR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1355,18 +1355,18 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBETA(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,I
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZM_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_WTH_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PM3_WTH_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = &
                    CSTURB%XCSHF*PKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT)*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
                    *0.5*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD*(1+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))/PD(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_WTH_WTHR(IIB:IIE,IJB:IJE,IKB-1)=M3_WTH_WTHR(IIB:IIE,IJB:IJE,IKB)
-M3_WTH_WTHR(IIB:IIE,IJB:IJE,IKE+1)=M3_WTH_WTHR(IIB:IIE,IJB:IJE,IKE)
+PM3_WTH_WTHR(IIB:IIE,IJB:IJE,IKB-1)=PM3_WTH_WTHR(IIB:IIE,IJB:IJE,IKB)
+PM3_WTH_WTHR(IIB:IIE,IJB:IJE,IKE+1)=PM3_WTH_WTHR(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE)
-END FUNCTION M3_WTH_WTHR
+END SUBROUTINE M3_WTH_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PD_M3_WTH_WTHR_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WTH_WTHR
@@ -1375,7 +1375,7 @@ FUNCTION D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_WTH_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1388,18 +1388,18 @@ IJE=D%NJEC
 IJB=D%NJBC
 
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
+PD_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = &
                 - PM3_WTH_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) * (1.5+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))&
                 /PD(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_WTH_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_WTH_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
+SUBROUTINE M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE,PM3_TH2_W2TH)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1409,7 +1409,7 @@ FUNCTION M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_TH2_W2TH
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1427,17 +1427,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (1.-0.5*PREDR1(IIB:IIE,IJB:IJE,1:D%NKT)*(1.+PR
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_TH2_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = - ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
+PM3_TH2_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = - ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
                        * 1.5*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PTKE(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_TH2_W2TH(IIB:IIE,IJB:IJE,IKB-1)=M3_TH2_W2TH(IIB:IIE,IJB:IJE,IKB)
-M3_TH2_W2TH(IIB:IIE,IJB:IJE,IKE+1)=M3_TH2_W2TH(IIB:IIE,IJB:IJE,IKE)
+PM3_TH2_W2TH(IIB:IIE,IJB:IJE,IKB-1)=PM3_TH2_W2TH(IIB:IIE,IJB:IJE,IKB)
+PM3_TH2_W2TH(IIB:IIE,IJB:IJE,IKE+1)=PM3_TH2_W2TH(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE)
-END FUNCTION M3_TH2_W2TH
+END SUBROUTINE M3_TH2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
+SUBROUTINE D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV,PD_M3_TH2_W2TH_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1447,7 +1447,7 @@ FUNCTION D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   LOGICAL,                INTENT(IN) :: OUSERV
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_TH2_W2TH_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1472,7 +1472,7 @@ IF (OUSERV) THEN
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   CALL MZF_PHY(D,ZWORK1,ZWORK2)
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-  D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 1.5*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
+  PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 1.5*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
                                                    /PTKE(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 ELSE
@@ -1481,18 +1481,18 @@ ELSE
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   CALL MZF_PHY(D,ZWORK1,ZWORK2)
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-  D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 1.5*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+  PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 1.5*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                                    /PTKE(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 END IF
 !
-D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_TH2_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_TH2_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+SUBROUTINE M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PM3_TH2_WTH2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1500,7 +1500,7 @@ FUNCTION M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_TH2_WTH2
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1518,17 +1518,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (1.+0.5*PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT) &
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_TH2_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)*0.5/CSTURB%XCTD/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT) &
+PM3_TH2_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)*0.5/CSTURB%XCTD/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT) &
                      * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_TH2_WTH2(IIB:IIE,IJB:IJE,IKB-1)=M3_TH2_WTH2(IIB:IIE,IJB:IJE,IKB)
-M3_TH2_WTH2(IIB:IIE,IJB:IJE,IKE+1)=M3_TH2_WTH2(IIB:IIE,IJB:IJE,IKE)
+PM3_TH2_WTH2(IIB:IIE,IJB:IJE,IKB-1)=PM3_TH2_WTH2(IIB:IIE,IJB:IJE,IKB)
+PM3_TH2_WTH2(IIB:IIE,IJB:IJE,IKE+1)=PM3_TH2_WTH2(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE)
-END FUNCTION M3_TH2_WTH2
+END SUBROUTINE M3_TH2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PD_M3_TH2_WTH2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1538,7 +1538,7 @@ FUNCTION D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_TH2_WTH2_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1558,17 +1558,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PETHETA(IIB:
  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PD_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                  *0.5/CSTURB%XCTD/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)*CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_TH2_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_TH2_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_TH2_W2R)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1578,7 +1578,7 @@ FUNCTION M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_TH2_W2R
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1596,17 +1596,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_TH2_W2R(IIB:IIE,IJB:IJE,1:D%NKT) = 0.75*CSTURB%XCTV**2*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
+PM3_TH2_W2R(IIB:IIE,IJB:IJE,1:D%NKT) = 0.75*CSTURB%XCTV**2*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
                     *PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PTKE(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_TH2_W2R(IIB:IIE,IJB:IJE,IKB-1)=M3_TH2_W2R(IIB:IIE,IJB:IJE,IKB)
-M3_TH2_W2R(IIB:IIE,IJB:IJE,IKE+1)=M3_TH2_W2R(IIB:IIE,IJB:IJE,IKE)
+PM3_TH2_W2R(IIB:IIE,IJB:IJE,IKB-1)=PM3_TH2_W2R(IIB:IIE,IJB:IJE,IKB)
+PM3_TH2_W2R(IIB:IIE,IJB:IJE,IKE+1)=PM3_TH2_W2R(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE)
-END FUNCTION M3_TH2_W2R
+END SUBROUTINE M3_TH2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_TH2_W2R_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1618,7 +1618,7 @@ FUNCTION D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_TH2_W2R_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1637,17 +1637,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) =  PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.75*CSTURB%XCTV**2*PLM(IIB:IIE,IJB:IJE,1:D%NKT) *PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
+PD_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.75*CSTURB%XCTV**2*PLM(IIB:IIE,IJB:IJE,1:D%NKT) *PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
                                                 /PTKE(IIB:IIE,IJB:IJE,1:D%NKT) * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_TH2_W2R_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_TH2_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_TH2_WR2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1656,7 +1656,7 @@ FUNCTION M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_TH2_WR2
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1674,17 +1674,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_TH2_WR2(IIB:IIE,IJB:IJE,1:D%NKT) = 0.25*CSTURB%XCTV**2*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)&
+PM3_TH2_WR2(IIB:IIE,IJB:IJE,1:D%NKT) = 0.25*CSTURB%XCTV**2*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)&
                     *PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_TH2_WR2(IIB:IIE,IJB:IJE,IKB-1)=M3_TH2_WR2(IIB:IIE,IJB:IJE,IKB)
-M3_TH2_WR2(IIB:IIE,IJB:IJE,IKE+1)=M3_TH2_WR2(IIB:IIE,IJB:IJE,IKE)
+PM3_TH2_WR2(IIB:IIE,IJB:IJE,IKB-1)=PM3_TH2_WR2(IIB:IIE,IJB:IJE,IKB)
+PM3_TH2_WR2(IIB:IIE,IJB:IJE,IKE+1)=PM3_TH2_WR2(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE)
-END FUNCTION M3_TH2_WR2
+END SUBROUTINE M3_TH2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_TH2_WR2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1695,7 +1695,7 @@ FUNCTION D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_TH2_WR2_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1714,17 +1714,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.25*CSTURB%XCTV**2*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PD_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.25*CSTURB%XCTV**2*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                                / PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_TH2_WR2_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_TH2_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_TH2_WTHR)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1734,7 +1734,7 @@ FUNCTION M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_TH2_WTHR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1752,17 +1752,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_TH2_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.5*CSTURB%XCTV*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PM3_TH2_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.5*CSTURB%XCTV*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                        / PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_TH2_WTHR(IIB:IIE,IJB:IJE,IKB-1)=M3_TH2_WTHR(IIB:IIE,IJB:IJE,IKB)
-M3_TH2_WTHR(IIB:IIE,IJB:IJE,IKE+1)=M3_TH2_WTHR(IIB:IIE,IJB:IJE,IKE)
+PM3_TH2_WTHR(IIB:IIE,IJB:IJE,IKB-1)=PM3_TH2_WTHR(IIB:IIE,IJB:IJE,IKB)
+PM3_TH2_WTHR(IIB:IIE,IJB:IJE,IKE+1)=PM3_TH2_WTHR(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE)
-END FUNCTION M3_TH2_WTHR
+END SUBROUTINE M3_TH2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_TH2_WTHR_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1773,7 +1773,7 @@ FUNCTION D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_TH2_WTHR_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1792,17 +1792,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PEMOIST(IIB:
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.5*CSTURB%XCTV*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PD_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.5*CSTURB%XCTV*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                                 / PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) 
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_TH2_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_TH2_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+SUBROUTINE M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PM3_THR_WTHR)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1810,7 +1810,7 @@ FUNCTION M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_THR_WTHR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1828,17 +1828,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) =  (1.+PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT))* &
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_THR_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD &
+PM3_THR_WTHR(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD &
                      * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_THR_WTHR(IIB:IIE,IJB:IJE,IKB-1)=M3_THR_WTHR(IIB:IIE,IJB:IJE,IKB)
-M3_THR_WTHR(IIB:IIE,IJB:IJE,IKE+1)=M3_THR_WTHR(IIB:IIE,IJB:IJE,IKE)
+PM3_THR_WTHR(IIB:IIE,IJB:IJE,IKB-1)=PM3_THR_WTHR(IIB:IIE,IJB:IJE,IKB)
+PM3_THR_WTHR(IIB:IIE,IJB:IJE,IKE+1)=PM3_THR_WTHR(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE)
-END FUNCTION M3_THR_WTHR
+END SUBROUTINE M3_THR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PD_M3_THR_WTHR_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1848,7 +1848,7 @@ FUNCTION D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTHR_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1867,17 +1867,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)*PBLL_O_E(IIB:
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PD_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = 0.5*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                                 / CSTURB%XCTD * CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_THR_WTHR_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_THR_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_THR_WTH2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1887,7 +1887,7 @@ FUNCTION M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_THR_WTH2
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1905,17 +1905,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))*PBLL_O_E(
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_THR_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
+PM3_THR_WTH2(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) & 
                                     / PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD*CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_THR_WTH2(IIB:IIE,IJB:IJE,IKB-1)=M3_THR_WTH2(IIB:IIE,IJB:IJE,IKB)
-M3_THR_WTH2(IIB:IIE,IJB:IJE,IKE+1)=M3_THR_WTH2(IIB:IIE,IJB:IJE,IKE)
+PM3_THR_WTH2(IIB:IIE,IJB:IJE,IKB-1)=PM3_THR_WTH2(IIB:IIE,IJB:IJE,IKB)
+PM3_THR_WTH2(IIB:IIE,IJB:IJE,IKE+1)=PM3_THR_WTH2(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
-END FUNCTION M3_THR_WTH2
+END SUBROUTINE M3_THR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_THR_WTH2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1926,7 +1926,7 @@ FUNCTION D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTH2_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1946,17 +1946,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = -(1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))*(PBLL_O_
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
+PD_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) &
                                  /PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)/CSTURB%XCTD*CSTURB%XCTV**2 * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) 
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_THR_WTH2_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_THR_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PD_M3_THR_WTH2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1966,7 +1966,7 @@ FUNCTION D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTH2_O_DDRDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -1985,17 +1985,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*PETHETA(IIB:
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)& 
+PD_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.25*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)/PSQRT_TKE(IIB:IIE,IJB:IJE,1:D%NKT)& 
                                                 / CSTURB%XCTD*CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_THR_WTH2_O_DDRDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_THR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
+SUBROUTINE M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ,PM3_THR_W2TH)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2004,7 +2004,7 @@ FUNCTION M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_THR_W2TH
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -2021,17 +2021,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = (1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))*PDRDZ(IIB
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-M3_THR_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)& 
+PM3_THR_W2TH(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)& 
                                       / PTKE(IIB:IIE,IJB:IJE,1:D%NKT) * CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-M3_THR_W2TH(IIB:IIE,IJB:IJE,IKB-1)=M3_THR_W2TH(IIB:IIE,IJB:IJE,IKB)
-M3_THR_W2TH(IIB:IIE,IJB:IJE,IKE+1)=M3_THR_W2TH(IIB:IIE,IJB:IJE,IKE)
+PM3_THR_W2TH(IIB:IIE,IJB:IJE,IKB-1)=PM3_THR_W2TH(IIB:IIE,IJB:IJE,IKB)
+PM3_THR_W2TH(IIB:IIE,IJB:IJE,IKE+1)=PM3_THR_W2TH(IIB:IIE,IJB:IJE,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
-END FUNCTION M3_THR_W2TH
+END SUBROUTINE M3_THR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
+SUBROUTINE D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA,PD_M3_THR_W2TH_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2043,7 +2043,7 @@ FUNCTION D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2TH_O_DDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -2062,17 +2062,17 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) =  -PETHETA(IIB:IIE,IJB:IJE,1:D%NKT)*PBLL_O_E(II
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)&
+PD_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)&
                                                 / PTKE(IIB:IIE,IJB:IJE,1:D%NKT) * CSTURB%XCTV**2 * ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_THR_W2TH_O_DDTDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_THR_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
+SUBROUTINE D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2TH_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2081,7 +2081,7 @@ FUNCTION D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2TH_O_DDRDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
   INTEGER :: IKB, IKE, JI,JJ,JK,IIB,IIE,IJB,IJE
 !
@@ -2100,20 +2100,20 @@ ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) =  -(1.+PREDR1(IIB:IIE,IJB:IJE,1:D%NKT))*PREDR1(
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 CALL MZF_PHY(D,ZWORK1,ZWORK2)
 !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-D_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)&
+PD_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = - 0.75*PLM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)&
                                                 / PTKE(IIB:IIE,IJB:IJE,1:D%NKT) * CSTURB%XCTV * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)
 !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
 !
-D_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=D_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
-D_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=D_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKE)
+PD_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKB-1)=PD_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKB)
+PD_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,IKE+1)=PD_M3_THR_W2TH_O_DDRDZ(IIB:IIE,IJB:IJE,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
+END SUBROUTINE D_M3_THR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
 !
-FUNCTION PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PPSI3)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2123,16 +2123,16 @@ FUNCTION PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: PSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PPSI3
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',0,ZHOOK_HANDLE)
-PSI3 = PHI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+CALL PHI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PPSI3)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
-END FUNCTION PSI3
+END SUBROUTINE PSI3
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DRDZ_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
@@ -2142,18 +2142,18 @@ FUNCTION D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTUR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DRDZ_O_DDRDZ)
 !
 !C'est ok?!
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PSI3DRDZ_O_DDRDZ
+END SUBROUTINE D_PSI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+SUBROUTINE D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DTDZ_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
@@ -2163,16 +2163,16 @@ FUNCTION D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTUR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DTDZ_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+CALL D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DTDZ_O_DDTDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PSI3DTDZ_O_DDTDZ
+END SUBROUTINE D_PSI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
+SUBROUTINE D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV,PD_PSI3DRDZ2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
@@ -2183,16 +2183,16 @@ FUNCTION D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
   CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
+CALL D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV,PD_PSI3DRDZ2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_PSI3DRDZ2_O_DDRDZ
+END SUBROUTINE D_PSI3DRDZ2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+SUBROUTINE M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PM3_WR_WR2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2200,16 +2200,16 @@ FUNCTION M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+CALL M3_WTH_WTH2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PM3_WR_WR2)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
-END FUNCTION M3_WR_WR2
+END SUBROUTINE M3_WR_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WR2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WR_WR2
@@ -2218,16 +2218,16 @@ FUNCTION D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMO
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+CALL D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WR2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_WR_WR2_O_DDRDZ
+END SUBROUTINE D_M3_WR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+SUBROUTINE M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PM3_WR_W2R)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2235,16 +2235,16 @@ FUNCTION M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+CALL M3_WTH_W2TH(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PM3_WR_W2R)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
-END FUNCTION M3_WR_W2R
+END SUBROUTINE M3_WR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+SUBROUTINE D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE,PD_M3_WR_W2R_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2254,16 +2254,16 @@ FUNCTION D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,P
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+CALL D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE,PD_M3_WR_W2R_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_WR_W2R_O_DDRDZ
+END SUBROUTINE D_M3_WR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2TH(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE M3_WR_W2TH(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_WR_W2TH)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2272,16 +2272,16 @@ FUNCTION M3_WR_W2TH(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_WR_W2TH)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
-END FUNCTION M3_WR_W2TH
+END SUBROUTINE M3_WR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+SUBROUTINE D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PD_M3_WR_W2TH_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2291,16 +2291,16 @@ FUNCTION D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PET
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+CALL D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PD_M3_WR_W2TH_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_WR_W2TH_O_DDRDZ
+END SUBROUTINE D_M3_WR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTH2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+SUBROUTINE M3_WR_WTH2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ,PM3_WR_WTH2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2312,16 +2312,16 @@ FUNCTION M3_WR_WTH2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHET
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+CALL M3_WTH_WR2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ,PM3_WR_WTH2)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
-END FUNCTION M3_WR_WTH2
+END SUBROUTINE M3_WR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+SUBROUTINE D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PD_M3_WR_WTH2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2334,16 +2334,16 @@ FUNCTION D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+CALL D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PD_M3_WR_WTH2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_WR_WTH2_O_DDRDZ
+END SUBROUTINE D_M3_WR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTHR(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+SUBROUTINE M3_WR_WTHR(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA,PM3_WR_WTHR)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2354,16 +2354,16 @@ FUNCTION M3_WR_WTHR(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+CALL M3_WTH_WTHR(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA,PM3_WR_WTHR)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',1,ZHOOK_HANDLE)
-END FUNCTION M3_WR_WTHR
+END SUBROUTINE M3_WR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WTHR_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WR_WTHR
@@ -2372,16 +2372,16 @@ FUNCTION D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+CALL D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WTHR_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_WR_WTHR_O_DDRDZ
+END SUBROUTINE D_M3_WR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+SUBROUTINE M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE,PM3_R2_W2R)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2391,16 +2391,16 @@ FUNCTION M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PM3_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(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+CALL M3_TH2_W2TH(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE,PM3_R2_W2R)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',1,ZHOOK_HANDLE)
-END FUNCTION M3_R2_W2R
+END SUBROUTINE M3_R2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+SUBROUTINE D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV,PD_M3_R2_W2R_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2410,16 +2410,16 @@ FUNCTION D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   LOGICAL,                INTENT(IN) :: OUSERV
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+CALL D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV,PD_M3_R2_W2R_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_R2_W2R_O_DDRDZ
+END SUBROUTINE D_M3_R2_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+SUBROUTINE M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PM3_R2_WR2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2427,16 +2427,16 @@ FUNCTION M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+CALL M3_TH2_WTH2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PM3_R2_WR2)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',1,ZHOOK_HANDLE)
-END FUNCTION M3_R2_WR2
+END SUBROUTINE M3_R2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_R2_WR2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2446,16 +2446,16 @@ FUNCTION D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+CALL D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_R2_WR2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_R2_WR2_O_DDRDZ
+END SUBROUTINE D_M3_R2_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_W2TH)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2465,16 +2465,16 @@ FUNCTION M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_W2TH)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',1,ZHOOK_HANDLE)
-END FUNCTION M3_R2_W2TH
+END SUBROUTINE M3_R2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_W2TH_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2486,16 +2486,16 @@ FUNCTION D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_W2TH_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_R2_W2TH_O_DDRDZ
+END SUBROUTINE D_M3_R2_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTH2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2504,16 +2504,16 @@ FUNCTION M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTH2)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',1,ZHOOK_HANDLE)
-END FUNCTION M3_R2_WTH2
+END SUBROUTINE M3_R2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTH2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2524,16 +2524,16 @@ FUNCTION D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTH2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_R2_WTH2_O_DDRDZ
+END SUBROUTINE D_M3_R2_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTHR)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2543,16 +2543,16 @@ FUNCTION M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL M3_TH2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTHR)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',1,ZHOOK_HANDLE)
-END FUNCTION M3_R2_WTHR
+END SUBROUTINE M3_R2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+SUBROUTINE D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTHR_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2563,16 +2563,16 @@ FUNCTION D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+CALL D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTHR_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_R2_WTHR_O_DDRDZ
+END SUBROUTINE D_M3_R2_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WTHR_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2582,16 +2582,16 @@ FUNCTION D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+CALL D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WTHR_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_THR_WTHR_O_DDRDZ
+END SUBROUTINE D_M3_THR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_THR_WR2)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2601,16 +2601,16 @@ FUNCTION M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+CALL M3_THR_WTH2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_THR_WR2)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',1,ZHOOK_HANDLE)
-END FUNCTION M3_THR_WR2
+END SUBROUTINE M3_THR_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+SUBROUTINE D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_THR_WR2_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2621,16 +2621,16 @@ FUNCTION D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+CALL D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_THR_WR2_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_THR_WR2_O_DDRDZ
+END SUBROUTINE D_M3_THR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+SUBROUTINE D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WR2_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2640,16 +2640,16 @@ FUNCTION D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+CALL D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WR2_O_DDTDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_THR_WR2_O_DDTDZ
+END SUBROUTINE D_M3_THR_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+SUBROUTINE M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ,PM3_THR_W2R)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -2658,16 +2658,16 @@ FUNCTION M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PM3_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(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+CALL M3_THR_W2TH(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ,PM3_THR_W2R)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',1,ZHOOK_HANDLE)
-END FUNCTION M3_THR_W2R
+END SUBROUTINE M3_THR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+SUBROUTINE D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST,PD_M3_THR_W2R_O_DDRDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2679,16 +2679,16 @@ FUNCTION D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+CALL D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST,PD_M3_THR_W2R_O_DDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
-END FUNCTION D_M3_THR_W2R_O_DDRDZ
+END SUBROUTINE D_M3_THR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+SUBROUTINE D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2R_O_DDTDZ)
   TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -2697,14 +2697,14 @@ FUNCTION D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
-  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),INTENT(OUT) :: PD_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(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+CALL D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2R_O_DDTDZ)
 !
 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 SUBROUTINE D_M3_THR_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
 !
 END MODULE MODE_PRANDTL
diff --git a/src/common/turb/mode_sbl.F90 b/src/common/turb/mode_sbl.F90
index d4105044f..c219c43f4 100644
--- a/src/common/turb/mode_sbl.F90
+++ b/src/common/turb/mode_sbl.F90
@@ -80,162 +80,162 @@ END INTERFACE
 CONTAINS
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIM_3D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIM_3D(PZ_O_LMO,BUSINGER_PHIM3D)
   REAL, DIMENSION(:,:,:), INTENT(IN)                 :: PZ_O_LMO
   REAL, DIMENSION(SIZE(PZ_O_LMO,1), &
-                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) :: BUSINGER_PHIM_3D
+                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)),INTENT(OUT) :: BUSINGER_PHIM3D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_3D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:,:,:) < 0. )
-    BUSINGER_PHIM_3D(:,:,:) = (1.-15.*PZ_O_LMO)**(-0.25)
+    BUSINGER_PHIM3D(:,:,:) = (1.-15.*PZ_O_LMO)**(-0.25)
   ELSEWHERE
-    BUSINGER_PHIM_3D(:,:,:) = 1. + 4.7 * PZ_O_LMO
+    BUSINGER_PHIM3D(:,:,:) = 1. + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_3D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIM_3D
+END SUBROUTINE BUSINGER_PHIM_3D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIM_2D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIM_2D(PZ_O_LMO,BUSINGER_PHIM2D)
   REAL, DIMENSION(:,:), INTENT(IN)                   :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: BUSINGER_PHIM_2D
+  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)),INTENT(OUT) :: BUSINGER_PHIM2D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_2D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:,:) < 0. )
-    BUSINGER_PHIM_2D(:,:) = (1.-15.*PZ_O_LMO)**(-0.25)
+    BUSINGER_PHIM2D(:,:) = (1.-15.*PZ_O_LMO)**(-0.25)
   ELSEWHERE
-    BUSINGER_PHIM_2D(:,:) = 1. + 4.7 * PZ_O_LMO
+    BUSINGER_PHIM2D(:,:) = 1. + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_2D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIM_2D
+END SUBROUTINE BUSINGER_PHIM_2D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIM_1D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIM_1D(PZ_O_LMO,BUSINGER_PHIM1D)
   REAL, DIMENSION(:), INTENT(IN)  :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO)) :: BUSINGER_PHIM_1D
+  REAL, DIMENSION(SIZE(PZ_O_LMO)),INTENT(OUT) :: BUSINGER_PHIM1D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_1D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:) < 0. )
-    BUSINGER_PHIM_1D(:) = (1.-15.*PZ_O_LMO)**(-0.25)
+    BUSINGER_PHIM1D(:) = (1.-15.*PZ_O_LMO)**(-0.25)
   ELSEWHERE
-    BUSINGER_PHIM_1D(:) = 1. + 4.7 * PZ_O_LMO
+    BUSINGER_PHIM1D(:) = 1. + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_1D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIM_1D
+END SUBROUTINE BUSINGER_PHIM_1D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIM_0D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIM_0D(PZ_O_LMO,BUSINGER_PHIM0D)
   REAL, INTENT(IN)                   :: PZ_O_LMO
-  REAL                               :: BUSINGER_PHIM_0D
+  REAL,INTENT(OUT)                   :: BUSINGER_PHIM0D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_0D',0,ZHOOK_HANDLE)
   IF ( PZ_O_LMO < 0. ) THEN
-    BUSINGER_PHIM_0D = (1.-15.*PZ_O_LMO)**(-0.25)
+    BUSINGER_PHIM0D = (1.-15.*PZ_O_LMO)**(-0.25)
   ELSE
-    BUSINGER_PHIM_0D = 1. + 4.7 * PZ_O_LMO
+    BUSINGER_PHIM0D = 1. + 4.7 * PZ_O_LMO
   END IF
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM_0D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIM_0D
+END SUBROUTINE BUSINGER_PHIM_0D
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIH_3D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIH_3D(PZ_O_LMO,BUSINGER_PHIH3D)
   REAL, DIMENSION(:,:,:), INTENT(IN)                 :: PZ_O_LMO
   REAL, DIMENSION(SIZE(PZ_O_LMO,1), &
-                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) :: BUSINGER_PHIH_3D
+                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)),INTENT(OUT) :: BUSINGER_PHIH3D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_3D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:,:,:) < 0. )
-    BUSINGER_PHIH_3D(:,:,:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
+    BUSINGER_PHIH3D(:,:,:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
   ELSEWHERE
-    BUSINGER_PHIH_3D(:,:,:) = 0.74 + 4.7 * PZ_O_LMO
+    BUSINGER_PHIH3D(:,:,:) = 0.74 + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_3D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIH_3D
+END SUBROUTINE BUSINGER_PHIH_3D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIH_2D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIH_2D(PZ_O_LMO,BUSINGER_PHIH2D)
   REAL, DIMENSION(:,:), INTENT(IN)                   :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: BUSINGER_PHIH_2D
+  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)),INTENT(OUT) :: BUSINGER_PHIH2D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_2D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:,:) < 0. )
-    BUSINGER_PHIH_2D(:,:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
+    BUSINGER_PHIH2D(:,:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
   ELSEWHERE
-    BUSINGER_PHIH_2D(:,:) = 0.74 + 4.7 * PZ_O_LMO
+    BUSINGER_PHIH2D(:,:) = 0.74 + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_2D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIH_2D
+END SUBROUTINE BUSINGER_PHIH_2D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIH_1D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIH_1D(PZ_O_LMO,BUSINGER_PHIH1D)
   REAL, DIMENSION(:), INTENT(IN)  :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO)) :: BUSINGER_PHIH_1D
+  REAL, DIMENSION(SIZE(PZ_O_LMO)),INTENT(OUT) :: BUSINGER_PHIH1D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_1D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:) < 0. )
-    BUSINGER_PHIH_1D(:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
+    BUSINGER_PHIH1D(:) = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
   ELSEWHERE
-    BUSINGER_PHIH_1D(:) = 0.74 + 4.7 * PZ_O_LMO
+    BUSINGER_PHIH1D(:) = 0.74 + 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_1D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIH_1D
+END SUBROUTINE BUSINGER_PHIH_1D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIH_0D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIH_0D(PZ_O_LMO,BUSINGER_PHIH0D)
   REAL, INTENT(IN)                   :: PZ_O_LMO
-  REAL                               :: BUSINGER_PHIH_0D
+  REAL,INTENT(OUT)                   :: BUSINGER_PHIH0D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_0D',0,ZHOOK_HANDLE)
   IF ( PZ_O_LMO < 0. ) THEN
-    BUSINGER_PHIH_0D = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
+    BUSINGER_PHIH0D = 0.74 * (1.-9.*PZ_O_LMO)**(-0.5)
   ELSE
-    BUSINGER_PHIH_0D = 0.74 + 4.7 * PZ_O_LMO
+    BUSINGER_PHIH0D = 0.74 + 4.7 * PZ_O_LMO
   END IF
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH_0D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIH_0D
+END SUBROUTINE BUSINGER_PHIH_0D
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
-FUNCTION BUSINGER_PHIE_3D(PZ_O_LMO)
+SUBROUTINE BUSINGER_PHIE_3D(PZ_O_LMO,BUSINGER_PHIE3D)
   USE MODD_CTURB
   REAL, DIMENSION(:,:,:), INTENT(IN)                 :: PZ_O_LMO
   REAL, DIMENSION(SIZE(PZ_O_LMO,1), &
-                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) :: BUSINGER_PHIE_3D
+                  SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)),INTENT(OUT) :: BUSINGER_PHIE3D
 !
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIE_3D',0,ZHOOK_HANDLE)
   WHERE ( PZ_O_LMO(:,:,:) < 0. )
-    BUSINGER_PHIE_3D(:,:,:) =   (1.+(-PZ_O_LMO)**(2./3.)/XALPSBL) &
+    BUSINGER_PHIE3D(:,:,:) =   (1.+(-PZ_O_LMO)**(2./3.)/XALPSBL) &
                               * (1.-15.*PZ_O_LMO)**(0.5)
   ELSEWHERE
-    BUSINGER_PHIE_3D(:,:,:) = 1./(1. + 4.7 * PZ_O_LMO)**2
+    BUSINGER_PHIE3D(:,:,:) = 1./(1. + 4.7 * PZ_O_LMO)**2
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIE_3D',1,ZHOOK_HANDLE)
-END FUNCTION BUSINGER_PHIE_3D
+END SUBROUTINE BUSINGER_PHIE_3D
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
-FUNCTION PAULSON_PSIM_2D(PZ_O_LMO)
+SUBROUTINE PAULSON_PSIM_2D(PZ_O_LMO,PAULSON_PSIM2D)
   USE MODD_CST
   REAL, DIMENSION(:,:), INTENT(IN)                   :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: PAULSON_PSIM_2D
+  REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)),INTENT(OUT) :: PAULSON_PSIM2D
 !
   REAL, DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: ZX
 
@@ -244,19 +244,19 @@ FUNCTION PAULSON_PSIM_2D(PZ_O_LMO)
   ZX=1.
   WHERE ( PZ_O_LMO(:,:) < 0. )
     ZX=(1.-15.*PZ_O_LMO)**(0.25)
-    PAULSON_PSIM_2D(:,:) = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
+    PAULSON_PSIM2D(:,:) = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
   ELSEWHERE
-    PAULSON_PSIM_2D(:,:) = - 4.7 * PZ_O_LMO
+    PAULSON_PSIM2D(:,:) = - 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:PAULSON_PSIM_2D',1,ZHOOK_HANDLE)
-END FUNCTION PAULSON_PSIM_2D
+END SUBROUTINE PAULSON_PSIM_2D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION PAULSON_PSIM_1D(PZ_O_LMO)
+SUBROUTINE PAULSON_PSIM_1D(PZ_O_LMO,PAULSON_PSIM1D)
   USE MODD_CST
   REAL, DIMENSION(:), INTENT(IN)    :: PZ_O_LMO
-  REAL, DIMENSION(SIZE(PZ_O_LMO,1)) :: PAULSON_PSIM_1D
+  REAL, DIMENSION(SIZE(PZ_O_LMO,1)),INTENT(OUT) :: PAULSON_PSIM1D
 !
   REAL, DIMENSION(SIZE(PZ_O_LMO,1)) :: ZX
 
@@ -265,19 +265,19 @@ FUNCTION PAULSON_PSIM_1D(PZ_O_LMO)
   ZX=1.
   WHERE ( PZ_O_LMO(:) < 0. )
     ZX=(1.-15.*PZ_O_LMO)**(0.25)
-    PAULSON_PSIM_1D(:) = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
+    PAULSON_PSIM1D(:) = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
   ELSEWHERE
-    PAULSON_PSIM_1D(:) = - 4.7 * PZ_O_LMO
+    PAULSON_PSIM1D(:) = - 4.7 * PZ_O_LMO
   END WHERE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:PAULSON_PSIM_1D',1,ZHOOK_HANDLE)
-END FUNCTION PAULSON_PSIM_1D
+END SUBROUTINE PAULSON_PSIM_1D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION PAULSON_PSIM_0D(PZ_O_LMO)
+SUBROUTINE PAULSON_PSIM_0D(PZ_O_LMO,PAULSON_PSIM0D)
   USE MODD_CST
   REAL, INTENT(IN)    :: PZ_O_LMO
-  REAL                :: PAULSON_PSIM_0D
+  REAL,INTENT(OUT)    :: PAULSON_PSIM0D
 !
   REAL                :: ZX
 
@@ -286,17 +286,17 @@ FUNCTION PAULSON_PSIM_0D(PZ_O_LMO)
   ZX=1.
   IF ( PZ_O_LMO < 0. ) THEN
     ZX=(1.-15.*PZ_O_LMO)**(0.25)
-    PAULSON_PSIM_0D = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
+    PAULSON_PSIM0D = LOG( (1.+ZX**2)*(1+ZX)**2/8. ) - 2.*ATAN(ZX) + XPI/2.
   ELSE
-    PAULSON_PSIM_0D = - 4.7 * PZ_O_LMO
+    PAULSON_PSIM0D = - 4.7 * PZ_O_LMO
   END IF
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:PAULSON_PSIM_0D',1,ZHOOK_HANDLE)
-END FUNCTION PAULSON_PSIM_0D
+END SUBROUTINE PAULSON_PSIM_0D
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
-FUNCTION LMO_2D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
+SUBROUTINE LMO_2D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV,LMO2D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, DIMENSION(:,:), INTENT(IN)               :: PUSTAR
@@ -304,7 +304,7 @@ FUNCTION LMO_2D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
   REAL, DIMENSION(:,:), INTENT(IN)               :: PRV
   REAL, DIMENSION(:,:), INTENT(IN)               :: PSFTH
   REAL, DIMENSION(:,:), INTENT(IN)               :: PSFRV
-  REAL, DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) :: LMO_2D
+  REAL, DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)),INTENT(OUT) :: LMO2D
 !
   REAL, DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) :: ZTHETAV
   REAL, DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) :: ZQ0
@@ -317,17 +317,17 @@ FUNCTION LMO_2D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
   ZTHETAV(:,:) = PTHETA(:,:) * ( 1. +ZEPS * PRV(:,:))
   ZQ0    (:,:) = PSFTH(:,:) + ZTHETAV(:,:) * ZEPS * PSFRV(:,:)
 !
-  LMO_2D(:,:) = XUNDEF
+  LMO2D(:,:) = XUNDEF
   WHERE ( ZQ0(:,:) /=0.  )                                   &
-    LMO_2D(:,:) = - MAX(PUSTAR(:,:),1.E-6)**3                &
+    LMO2D(:,:) = - MAX(PUSTAR(:,:),1.E-6)**3                &
                   / ( XKARMAN * XG / ZTHETAV(:,:) *ZQ0(:,:) )
 
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:LMO_2D',1,ZHOOK_HANDLE)
-END FUNCTION LMO_2D
+END SUBROUTINE LMO_2D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION LMO_1D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
+SUBROUTINE LMO_1D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV,LMO1D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, DIMENSION(:), INTENT(IN)  :: PUSTAR
@@ -335,7 +335,7 @@ FUNCTION LMO_1D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
   REAL, DIMENSION(:), INTENT(IN)  :: PRV
   REAL, DIMENSION(:), INTENT(IN)  :: PSFTH
   REAL, DIMENSION(:), INTENT(IN)  :: PSFRV
-  REAL, DIMENSION(SIZE(PUSTAR))   :: LMO_1D
+  REAL, DIMENSION(SIZE(PUSTAR)),INTENT(OUT)   :: LMO1D
 !
   REAL, DIMENSION(SIZE(PUSTAR))   :: ZTHETAV
   REAL                                           :: ZEPS
@@ -347,17 +347,17 @@ FUNCTION LMO_1D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
 !
   ZTHETAV(:) = PTHETA(:) * ( 1. +ZEPS * PRV(:))
 !
-  LMO_1D(:) = XUNDEF
+  LMO1D(:) = XUNDEF
   WHERE ( PSFTH(:)/ZTHETAV(:)+ZEPS*PSFRV(:)/=0. )                  &
-    LMO_1D(:) = - MAX(PUSTAR(:),1.E-6)**3                          &
+    LMO1D(:) = - MAX(PUSTAR(:),1.E-6)**3                          &
               / ( XKARMAN * (  XG / ZTHETAV(:)    * PSFTH(:)       &
                              + XG * ZEPS * PSFRV(:) )  )
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:LMO_1D',1,ZHOOK_HANDLE)
-END FUNCTION LMO_1D
+END SUBROUTINE LMO_1D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION LMO_0D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
+SUBROUTINE LMO_0D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV,LMO0D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, INTENT(IN)  :: PUSTAR
@@ -365,7 +365,7 @@ FUNCTION LMO_0D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
   REAL, INTENT(IN)  :: PRV
   REAL, INTENT(IN)  :: PSFTH
   REAL, INTENT(IN)  :: PSFRV
-  REAL              :: LMO_0D
+  REAL, INTENT(OUT) :: LMO0D
 !
   REAL              :: ZTHETAV
   REAL              :: ZEPS
@@ -378,18 +378,18 @@ FUNCTION LMO_0D(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
 !
   ZTHETAV = PTHETA * ( 1. +ZEPS * PRV)
 !
-  LMO_0D = XUNDEF
+  LMO0D = XUNDEF
   IF ( PSFTH/ZTHETAV+ZEPS*PSFRV/=0. )                      &
-  LMO_0D = - MAX(PUSTAR,1.E-6)**3                          &
+  LMO0D = - MAX(PUSTAR,1.E-6)**3                          &
            / ( XKARMAN * (  XG / ZTHETAV       * PSFTH     &
                           + XG * ZEPS * PSFRV )  )
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:LMO_0D',1,ZHOOK_HANDLE)
-END FUNCTION LMO_0D
+END SUBROUTINE LMO_0D
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
-FUNCTION USTAR_2D(PU,PV,PZ,PZ0,PLMO)
+SUBROUTINE USTAR_2D(PU,PV,PZ,PZ0,PLMO,USTAR2D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, DIMENSION(:,:), INTENT(IN)               :: PU
@@ -397,41 +397,43 @@ FUNCTION USTAR_2D(PU,PV,PZ,PZ0,PLMO)
   REAL, DIMENSION(:,:), INTENT(IN)               :: PZ
   REAL, DIMENSION(:,:), INTENT(IN)               :: PZ0
   REAL, DIMENSION(:,:), INTENT(IN)               :: PLMO
-  REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2))         :: USTAR_2D
+  REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2)),INTENT(OUT) :: USTAR2D
 
   REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2))         :: ZZ_O_LMO
   REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2))         :: ZZ0_O_LMO
+  REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2))         :: ZWORK1,ZWORK2
 !
 !* purely unstable case
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_2D',0,ZHOOK_HANDLE)
-  USTAR_2D(:,:) = 0.
+  USTAR2D(:,:) = 0.
   ZZ_O_LMO(:,:) = XUNDEF
   ZZ0_O_LMO(:,:) = XUNDEF
 !
 !* general case
+  CALL PAULSON_PSIM(ZZ_O_LMO,ZWORK1)
+  CALL PAULSON_PSIM(ZZ0_O_LMO,ZWORK2)
   WHERE(ABS(PLMO) > 1.E-20 .AND. PLMO/=XUNDEF)
     ZZ_O_LMO  = PZ(:,:)  / PLMO(:,:)
-    ZZ0_O_LMO = PZ0(:,:) / PLMO(:,:)
-    USTAR_2D(:,:) = SQRT( PU(:,:)**2+PV(:,:)**2 )               &
+    ZZ0_O_LMO = PZ0(:,:) / PLMO(:,:)      
+    USTAR2D(:,:) = SQRT( PU(:,:)**2+PV(:,:)**2 )               &
                   * XKARMAN / ( LOG(PZ(:,:)/PZ0(:,:))           &
-                                 - PAULSON_PSIM(ZZ_O_LMO(:,:))  &
-                                 + PAULSON_PSIM(ZZ0_O_LMO(:,:)) )
+                                 - ZWORK1(:,:) + ZWORK2(:,:))
   END WHERE
 !
 !* purely neutral case
   WHERE(PLMO==XUNDEF)
     ZZ_O_LMO = 0.
-    USTAR_2D(:,:) = SQRT( PU(:,:)**2+PV(:,:)**2 )      &
+    USTAR2D(:,:) = SQRT( PU(:,:)**2+PV(:,:)**2 )      &
                   * XKARMAN / LOG(PZ(:,:)/PZ0(:,:))
   END WHERE
 !
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_2D',1,ZHOOK_HANDLE)
-END FUNCTION USTAR_2D
+END SUBROUTINE USTAR_2D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION USTAR_1D(PU,PV,PZ,PZ0,PLMO)
+SUBROUTINE USTAR_1D(PU,PV,PZ,PZ0,PLMO,USTAR1D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, DIMENSION(:), INTENT(IN)               :: PU
@@ -439,41 +441,43 @@ FUNCTION USTAR_1D(PU,PV,PZ,PZ0,PLMO)
   REAL, DIMENSION(:), INTENT(IN)               :: PZ
   REAL, DIMENSION(:), INTENT(IN)               :: PZ0
   REAL, DIMENSION(:), INTENT(IN)               :: PLMO
-  REAL, DIMENSION(SIZE(PU))                    :: USTAR_1D
+  REAL, DIMENSION(SIZE(PU)),INTENT(OUT)        :: USTAR1D
 
   REAL, DIMENSION(SIZE(PU))                    :: ZZ_O_LMO
   REAL, DIMENSION(SIZE(PU))                    :: ZZ0_O_LMO
+  REAL, DIMENSION(SIZE(PU))                    :: ZWORK1,ZWORK2
 !
 !* purely unstable case
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_1D',0,ZHOOK_HANDLE)
-  USTAR_1D(:) = 0.
+  USTAR1D(:) = 0.
   ZZ_O_LMO(:) = XUNDEF
   ZZ0_O_LMO(:) = XUNDEF
 !
 !* general case
+  CALL PAULSON_PSIM(ZZ_O_LMO,ZWORK1)
+  CALL PAULSON_PSIM(ZZ0_O_LMO,ZWORK2)
   WHERE(ABS(PLMO) > 1.E-20 .AND. PLMO/=XUNDEF)
     ZZ_O_LMO  = PZ(:)  / PLMO(:)
     ZZ0_O_LMO = PZ0(:) / PLMO(:)
-    USTAR_1D(:) = SQRT( PU(:)**2+PV(:)**2 )               &
+    USTAR1D(:) = SQRT( PU(:)**2+PV(:)**2 )               &
                 * XKARMAN / ( LOG(PZ(:)/PZ0(:))           &
-                             - PAULSON_PSIM(ZZ_O_LMO(:))  &
-                             + PAULSON_PSIM(ZZ0_O_LMO(:)) )
+                             - ZWORK1(:) + ZWORK2(:))
   END WHERE
 !
 !* purely neutral case
   WHERE(PLMO==XUNDEF)
     ZZ_O_LMO = 0.
-    USTAR_1D(:) = SQRT( PU(:)**2+PV(:)**2 )      &
+    USTAR1D(:) = SQRT( PU(:)**2+PV(:)**2 )      &
                   * XKARMAN / LOG(PZ(:)/PZ0(:))
   END WHERE
 !
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_1D',1,ZHOOK_HANDLE)
-END FUNCTION USTAR_1D
+END SUBROUTINE USTAR_1D
 !
 !-------------------------------------------------------------------------------
 !
-FUNCTION USTAR_0D(PU,PV,PZ,PZ0,PLMO)
+SUBROUTINE USTAR_0D(PU,PV,PZ,PZ0,PLMO,USTAR0D)
   USE MODD_CST
   USE MODD_PARAMETERS, ONLY: JPVEXT_TURB,XUNDEF
   REAL, INTENT(IN)               :: PU
@@ -481,27 +485,30 @@ FUNCTION USTAR_0D(PU,PV,PZ,PZ0,PLMO)
   REAL, INTENT(IN)               :: PZ
   REAL, INTENT(IN)               :: PZ0
   REAL, INTENT(IN)               :: PLMO
-  REAL                           :: USTAR_0D
+  REAL, INTENT(OUT)              :: USTAR0D
+  REAL :: ZWORK, ZWORK2
 !
 !* purely unstable case
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_0D',0,ZHOOK_HANDLE)
-  USTAR_0D = 0.
+  USTAR0D = 0.
 !
 !* general case
-  IF ( ABS(PLMO) >= 1.E-20 .AND. PLMO/=XUNDEF)    &
-  USTAR_0D = SQRT( PU**2+PV**2 )                  &
+  IF ( ABS(PLMO) >= 1.E-20 .AND. PLMO/=XUNDEF) THEN
+    CALL PAULSON_PSIM(PZ/PLMO,ZWORK1)
+    CALL PAULSON_PSIM(PZ0/PLMO,ZWORK2)
+    USTAR0D = SQRT( PU**2+PV**2 )                  &
              * XKARMAN / ( LOG(PZ/PZ0)            &
-                          - PAULSON_PSIM(PZ/PLMO) &
-                          + PAULSON_PSIM(PZ0/PLMO))
+                          - ZWORK1 + ZWORK2)
+  END IF
 !
 !* purely neutral case
   IF (PLMO==XUNDEF)                  &
-  USTAR_0D = SQRT( PU**2+PV**2 )     &
+  USTAR0D = SQRT( PU**2+PV**2 )     &
              * XKARMAN / LOG(PZ/PZ0)
 
   IF (LHOOK) CALL DR_HOOK('MODE_SBL:USTAR_0D',1,ZHOOK_HANDLE)
-END FUNCTION USTAR_0D
+END SUBROUTINE USTAR_0D
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_sbl_depth.F90 b/src/common/turb/mode_sbl_depth.F90
index e485940e0..43403935f 100644
--- a/src/common/turb/mode_sbl_depth.F90
+++ b/src/common/turb/mode_sbl_depth.F90
@@ -48,7 +48,7 @@ CONTAINS
 USE MODD_PARAMETERS, ONLY : XUNDEF
 USE MODD_CTURB,      ONLY : XFTOP_O_FSURF, XSBL_O_BL
 !
-USE MODE_BL_DEPTH_DIAG
+USE MODE_BL_DEPTH_DIAG, ONLY : BL_DEPTH_DIAG
 !
 IMPLICIT NONE
 !
@@ -97,13 +97,15 @@ ZUSTAR2(:,:) = SQRT(ZWU**2+ZWV**2)
 !* BL and SBL diagnosed with friction criteria
 !
 ZWIND=SQRT(PFLXU**2+PFLXV**2)
-ZSBL_DYN = XSBL_O_BL * BL_DEPTH_DIAG(KKB,KKE,ZUSTAR2,PZZ(:,:,KKB),ZWIND,PZZ,XFTOP_O_FSURF) 
+CALL BL_DEPTH_DIAG(KKB,KKE,ZUSTAR2,PZZ(:,:,KKB),ZWIND,PZZ,XFTOP_O_FSURF,ZSBL_DYN) 
+ZSBL_DYN = XSBL_O_BL * ZSBL_DYN
 !
 !----------------------------------------------------------------------------
 !
 !* BL and SBL diagnosed with buoyancy flux criteria
 !
-ZSBL_THER= XSBL_O_BL * BL_DEPTH_DIAG(KKB,KKE,ZQ0,PZZ(:,:,KKB),PWTHV,PZZ,XFTOP_O_FSURF)
+CALL BL_DEPTH_DIAG(KKB,KKE,ZQ0,PZZ(:,:,KKB),PWTHV,PZZ,XFTOP_O_FSURF,ZSBL_THER)
+ZSBL_THER= XSBL_O_BL * ZSBL_THER
 !
 !----------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_turb_hor_sv_corr.F90 b/src/common/turb/mode_turb_hor_sv_corr.F90
index a007a9755..be965cc09 100644
--- a/src/common/turb/mode_turb_hor_sv_corr.F90
+++ b/src/common/turb/mode_turb_hor_sv_corr.F90
@@ -151,7 +151,7 @@ DO JSV=1,NSV
   ! covariance SvThv
   !
   IF (LLES_CALL) THEN
-    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
+    CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
     IF (.NOT. L2D) THEN
       ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                          &
           *  (  GX_M_M(PTHLM,PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
@@ -166,7 +166,7 @@ DO JSV=1,NSV
     CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
     !
     IF (KRR>=1) THEN
-      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      CALL  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
       IF (.NOT. L2D) THEN
         ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                                 &
             *  (  GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
diff --git a/src/common/turb/mode_turb_hor_thermo_corr.F90 b/src/common/turb/mode_turb_hor_thermo_corr.F90
index 7e01a7925..8e9f1ae17 100644
--- a/src/common/turb/mode_turb_hor_thermo_corr.F90
+++ b/src/common/turb/mode_turb_hor_thermo_corr.F90
@@ -230,7 +230,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. TPFILE%LOPENED ) &
     CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Thl2, .TRUE. ) 
     CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Thl2, .TRUE. )
     CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_Thl2, .TRUE. )
-    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
+    CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
     CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
     CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz, .TRUE. )
     CALL SECOND_MNH(ZTIME2)
@@ -320,7 +320,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. TPFILE%LOPENED ) &
       CALL LES_MEAN_SUBGRID( -XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_ThlRt, .TRUE. )
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_RtThv, .TRUE. ) 
       CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
-      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
       CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz,.TRUE.)
       CALL SECOND_MNH(ZTIME2)
diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90
index 1e099de53..edf72192d 100644
--- a/src/common/turb/mode_turb_ver.F90
+++ b/src/common/turb/mode_turb_ver.F90
@@ -236,7 +236,7 @@ USE MODE_SBL_DEPTH, ONLY: SBL_DEPTH
 USE MODI_SECOND_MNH
 !
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-USE MODE_PRANDTL
+USE MODE_PRANDTL, ONLY: PSI_SV, PSI3, PHI3, PRANDTL
 !
 IMPLICIT NONE
 !
@@ -468,13 +468,13 @@ ENDIF
 !
 GUSERV = KRR/=0
 !
-ZPHI3 = PHI3(D,CSTURB,ZREDTH1,ZREDR1,ZRED2TH3,ZRED2R3,ZRED2THR3,HTURBDIM,GUSERV)
+CALL PHI3(D,CSTURB,ZREDTH1,ZREDR1,ZRED2TH3,ZRED2R3,ZRED2THR3,HTURBDIM,GUSERV,ZPHI3)
 IF(KRR/=0) &
-ZPSI3 = PSI3(D,CSTURB,ZREDR1,ZREDTH1,ZRED2R3,ZRED2TH3,ZRED2THR3,HTURBDIM,GUSERV)
+CALL PSI3(D,CSTURB,ZREDR1,ZREDTH1,ZRED2R3,ZRED2TH3,ZRED2THR3,HTURBDIM,GUSERV,ZPSI3)
 !
 ! Prandtl numbers for scalars
 !
-ZPSI_SV = PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3)
+CALL PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3,ZPSI_SV)
 !
 ! LES diagnostics
 !
diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90
index 95a0a6568..7450b5137 100644
--- a/src/common/turb/mode_turb_ver_sv_corr.F90
+++ b/src/common/turb/mode_turb_ver_sv_corr.F90
@@ -168,7 +168,7 @@ DO JSV=1,KSV
   !
   IF (OLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
-    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
+    CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA)
     !
     ZWORK1 = GZ_M_W(D%NKA, D%NKU, D%NKL,PTHLM,PDZZ)
     ZWORK2 = GZ_M_W(D%NKA, D%NKU, D%NKL,PSVM(:,:,:,JSV),PDZZ)
@@ -187,7 +187,7 @@ DO JSV=1,KSV
     CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
     !
     IF (KRR>=1) THEN
-      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA)
       !
       ZWORK1 = GZ_M_W(D%NKA, D%NKU, D%NKL,PRM(:,:,:,1),PDZZ)
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90
index 2a34f1e14..24a2e2555 100644
--- a/src/common/turb/mode_turb_ver_thermo_corr.F90
+++ b/src/common/turb/mode_turb_ver_thermo_corr.F90
@@ -459,9 +459,9 @@ END IF
   !
   ! d(w'th'2)/dz
   IF (GFTH2) THEN
-    ZWORK1 = M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
-    ZWORK2 = D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-     & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+    CALL M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,ZWORK1)
+    CALL D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+     & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,ZWORK2)
     !
     !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:) + ZWORK1(:,:,:) * PFTH2(:,:,:)
@@ -471,11 +471,11 @@ END IF
   !
   ! d(w'2th')/dz
   IF (GFWTH) THEN
-    ZWORK1 = M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTH_DZ,&
-     & PLM,PLEPS,PTKEM)
+    CALL M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTH_DZ,&
+     & PLM,PLEPS,PTKEM,ZWORK1)
     ZWORK2 = MZF(PFWTH, D%NKA, D%NKU, D%NKL)
-    ZWORK3 = D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
-     & PLM,PLEPS,PTKEM,GUSERV)
+    CALL D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
+     & PLM,PLEPS,PTKEM,GUSERV,ZWORK3)
     !
     !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     ZF(:,:,:)  = ZF(:,:,:) + ZWORK1(:,:,:) * ZWORK2(:,:,:)
@@ -486,10 +486,10 @@ END IF
   IF (KRR/=0) THEN
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZWORK1 = M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,&
-       & PEMOIST,PDTH_DZ)
-      ZWORK2 = D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ)
+      CALL M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,&
+       & PEMOIST,PDTH_DZ,ZWORK1)
+       CALL D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
+       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK2)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFR2(:,:,:)
@@ -499,11 +499,11 @@ END IF
     !
     ! d(w'2r')/dz
     IF (GFWR) THEN
-      ZWORK1 = M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKEM,PBLL_O_E,&
-       & PEMOIST,PDTH_DZ)
+      CALL M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKEM,PBLL_O_E,&
+       & PEMOIST,PDTH_DZ,ZWORK1)
       ZWORK2 = MZF(PFWR, D%NKA, D%NKU, D%NKL)
-      ZWORK3 = D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
-       & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ)
+      CALL D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
+       & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK3)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * ZWORK2(:,:,:)
@@ -513,10 +513,10 @@ END IF
     !
     ! d(w'th'r')/dz
     IF (GFTHR) THEN
-      ZWORK1 = M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PEMOIST,PDTH_DZ)
-      ZWORK2 = D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ)
+      CALL M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,&
+       & PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK1)
+       CALL D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK2)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFTHR(:,:,:)
@@ -646,12 +646,12 @@ END IF
     !
     ! d(w'th'2)/dz
     IF (GFTH2) THEN
-      ZWORK1 = M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PETHETA,PDR_DZ)
-      ZWORK2 = D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ)
-      ZWORK3 = D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,&
-       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+      CALL M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,&
+       & PBLL_O_E,PETHETA,PDR_DZ,ZWORK1)
+      CALL D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK2)
+      CALL D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,&
+       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,ZWORK3)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFTH2(:,:,:)
@@ -663,12 +663,12 @@ END IF
     ! d(w'2th')/dz
     IF (GFWTH) THEN
       ZWORK1 = MZF(PFWTH, D%NKA, D%NKU, D%NKL)
-      ZWORK2 = M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKEM,&
-       & PDR_DZ)
-      ZWORK3 = D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PDR_DZ,PETHETA)
-      ZWORK4 = D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM)
+      CALL M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKEM,&
+       & PDR_DZ,ZWORK2)
+      CALL D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+       & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PDR_DZ,PETHETA,ZWORK3)
+      CALL D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,&
+       & PD,PLM,PLEPS,PTKEM,ZWORK4)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK2(:,:,:) * ZWORK1(:,:,:)
@@ -679,12 +679,12 @@ END IF
     !
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZWORK1 = M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,&
-       & PBLL_O_E,PEMOIST,PDTH_DZ)
-      ZWORK2 = D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
-      ZWORK3 = D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ)
+      CALL M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,&
+       & PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK1)
+      CALL D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,ZWORK2)
+      CALL D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+       & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK3)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFR2(:,:,:)
@@ -696,12 +696,12 @@ END IF
       ! d(w'2r')/dz
     IF (GFWR) THEN
       ZWORK1 = MZF(PFWR, D%NKA, D%NKU, D%NKL)
-      ZWORK2 = M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKEM,&
-      & PDTH_DZ)
-      ZWORK3 = D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM)
-      ZWORK4 = D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST)
+      CALL M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKEM,&
+      & PDTH_DZ,ZWORK2)
+      CALL D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+      & PLM,PLEPS,PTKEM,ZWORK3)
+      CALL D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+      & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST,ZWORK4)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK2(:,:,:) * ZWORK1(:,:,:)
@@ -712,12 +712,12 @@ END IF
     !
     ! d(w'th'r')/dz
     IF (GFTHR) THEN
-      ZWORK1 = M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,&
-      & PSQRT_TKE)
-      ZWORK2 = D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
-      ZWORK3 = D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+      CALL M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,&
+      & PSQRT_TKE,ZWORK1)
+      CALL D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,ZWORK2)
+      CALL D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
+      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,ZWORK3)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFTHR(:,:,:)
@@ -752,13 +752,13 @@ END IF
         + PIMPL * ZDFDDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) * ZWORK8(IIB:IIE,IJB:IJE,1:D%NKT)
        !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ELSE
-      ZWKPHIPSI1(:,:,:) = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) 
+      CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,ZWKPHIPSI1) 
       ! d(phi3*dthdz)/ddthdz term
-      ZWKPHIPSI2(:,:,:) = D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) 
+      CALL D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZWKPHIPSI2) 
       ! d(psi3*dthdz)/ddthdz term
-      ZWKPHIPSI3(:,:,:) = D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
+      CALL D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,ZWKPHIPSI3)
       ! d(phi3*drdz )/ddrdz term
-      ZWKPHIPSI4(:,:,:) = D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)  
+      CALL D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZWKPHIPSI4)
       ! d(psi3*drdz )/ddrdz term
  
       !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
@@ -893,10 +893,10 @@ ENDIF
     !
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZWORK1 = M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,&
-      & PSQRT_TKE)
-      ZWORK2 = D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
-      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+      CALL M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,&
+      & PSQRT_TKE,ZWORK1)
+      CALL D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
+      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,ZWORK2)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFR2(:,:,:)
@@ -907,10 +907,10 @@ ENDIF
     ! d(w'2r')/dz
     IF (GFWR) THEN
       ZWORK1 = MZF(PFWR, D%NKA, D%NKU, D%NKL)
-      ZWORK2 = M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDR_DZ,&
-      & PLM,PLEPS,PTKEM)
-      ZWORK3 = D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
-      & PD,PLM,PLEPS,PTKEM,GUSERV)
+      CALL M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDR_DZ,&
+      & PLM,PLEPS,PTKEM,ZWORK2)
+      CALL D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
+      & PD,PLM,PLEPS,PTKEM,GUSERV,ZWORK3)
       !
       !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
       ZF(:,:,:) = ZF(:,:,:) + ZWORK2(:,:,:) * ZWORK1(:,:,:)
@@ -921,10 +921,10 @@ ENDIF
     IF (KRR/=0) THEN
       ! d(w'r'2)/dz
       IF (GFTH2) THEN
-        ZWORK1 = M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,&
-          & PBLL_O_E,PETHETA,PDR_DZ)
-        ZWORK2 = D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,&
-          & PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ)
+        CALL M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,&
+          & PBLL_O_E,PETHETA,PDR_DZ,ZWORK1)
+        CALL D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,&
+          & PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK2)
         !
         !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
         ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFTH2(:,:,:) 
@@ -935,10 +935,10 @@ ENDIF
       ! d(w'2r')/dz
       IF (GFWTH) THEN
         ZWORK1 = MZF(PFWTH, D%NKA, D%NKU, D%NKL)
-        ZWORK2 = M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKEM,&
-          & PBLL_O_E,PETHETA,PDR_DZ)
-        ZWORK3 = D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
-          & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ)
+        CALL M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKEM,&
+          & PBLL_O_E,PETHETA,PDR_DZ,ZWORK2)
+        CALL D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
+          & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ,ZWORK3)
         !
         !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
         ZF(:,:,:) = ZF(:,:,:) + ZWORK2(:,:,:) * ZWORK1(:,:,:)
@@ -948,10 +948,10 @@ ENDIF
       !
       ! d(w'th'r')/dz
       IF (GFTHR) THEN
-        ZWORK1 = M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,&
-          & PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ)
-        ZWORK2 = D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
-          & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ)
+        CALL M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,&
+          & PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK1)
+        CALL D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,&
+          & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK2)
         !
         !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
         ZF(:,:,:) = ZF(:,:,:) + ZWORK1(:,:,:) * PFTHR(:,:,:) 
@@ -980,7 +980,7 @@ ENDIF
           + PIMPL * ZDFDDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) * ZWORK6(IIB:IIE,IJB:IJE,1:D%NKT)
     !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
    ELSE
-    ZWKPHIPSI1(:,:,:) = D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV)  
+    CALL D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV,ZWKPHIPSI1)
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = ZWKPHIPSI1(IIB:IIE,IJB:IJE,1:D%NKT)*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) &
                                       / PDZZ(IIB:IIE,IJB:IJE,1:D%NKT)
diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90
index e6cbcea89..4ee346eba 100644
--- a/src/common/turb/mode_turb_ver_thermo_flux.F90
+++ b/src/common/turb/mode_turb_ver_thermo_flux.F90
@@ -528,7 +528,7 @@ END IF
 ! Compute the turbulent flux F and F' at time t-dt.
 !
 CALL DZM_PHY(D,PTHLM,ZWORK1)
-ZWORK2 = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
+CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,ZWORK2)
 IF (OHARAT) THEN
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   ZF(IIB:IIE,IJB:IJE,1:D%NKT) = -ZKEFF(IIB:IIE,IJB:IJE,1:D%NKT)*ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)/PDZZ(IIB:IIE,IJB:IJE,1:D%NKT)
@@ -556,9 +556,9 @@ END IF
 !
 ! d(w'2th')/dz
 IF (GFWTH) THEN
-  Z3RDMOMENT= M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,ZKEFF,PTKEM)
-  ZWORK1 = D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
-   & PD,PBLL_O_E,PETHETA,ZKEFF,PTKEM)
+  CALL M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,ZKEFF,PTKEM,Z3RDMOMENT)
+  CALL D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,&
+   & PD,PBLL_O_E,PETHETA,ZKEFF,PTKEM,ZWORK1)
 !
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   ZF(:,:,:)= ZF(:,:,:)       + Z3RDMOMENT(:,:,:) * PFWTH(:,:,:)
@@ -568,9 +568,9 @@ END IF
 !
 ! d(w'th'2)/dz
 IF (GFTH2) THEN
-  Z3RDMOMENT= M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
-  ZWORK1 = D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,&
-    & PD,PBLL_O_E,PETHETA)
+  CALL M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,Z3RDMOMENT)
+  CALL D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,&
+    & PD,PBLL_O_E,PETHETA,ZWORK1)
   ZWORK2 = MZM(PFTH2, D%NKA, D%NKU, D%NKL)
 !
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
@@ -581,8 +581,8 @@ END IF
 !
 ! d(w'2r')/dz
 IF (GFWR) THEN
-  ZWORK1 = M3_WTH_W2R(D,CSTURB,PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ)
-  ZWORK2 = D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST)
+  CALL M3_WTH_W2R(D,CSTURB,PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK1)
+  CALL D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST,ZWORK2)
 !
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
   ZF(:,:,:)       = ZF(:,:,:)       + ZWORK1(:,:,:) * PFWR(:,:,:)
@@ -592,10 +592,10 @@ END IF
 !
 ! d(w'r'2)/dz
 IF (GFR2) THEN
-  ZWORK1 = M3_WTH_WR2(D,CSTURB,PD,ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ)
+  CALL M3_WTH_WR2(D,CSTURB,PD,ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ,ZWORK1)
   ZWORK2 = MZM(PFR2, D%NKA, D%NKU, D%NKL)
-  ZWORK3 = D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
-    & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+  CALL D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,&
+    & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,ZWORK3)
 !
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
   ZF(:,:,:)       = ZF(:,:,:)       + ZWORK1(:,:,:) * ZWORK2(:,:,:)
@@ -605,9 +605,9 @@ END IF
 !
 ! d(w'th'r')/dz
 IF (GFTHR) THEN
-  Z3RDMOMENT= M3_WTH_WTHR(D,CSTURB,PREDR1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
-    & PLEPS,PEMOIST)
-  ZWORK1 = D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+  CALL M3_WTH_WTHR(D,CSTURB,PREDR1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
+    & PLEPS,PEMOIST,Z3RDMOMENT)
+  CALL D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,ZWORK1)
   ZWORK2 = MZM(PFTHR, D%NKA, D%NKU, D%NKL)
 !
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
@@ -891,7 +891,7 @@ IF (KRR /= 0) THEN
   ZDFDDRDZ(IIB:IIE,IJB:IJE,1:D%NKT) = -ZKEFF(IIB:IIE,IJB:IJE,1:D%NKT)
   !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
  ELSE
-  ZWORK2 = D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)
+  CALL D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZWORK2)
   !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)    
   ZF(IIB:IIE,IJB:IJE,1:D%NKT) = -CSTURB%XCSHF*PPSI3(IIB:IIE,IJB:IJE,1:D%NKT)*ZKEFF(IIB:IIE,IJB:IJE,1:D%NKT)& 
                                 *ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)/PDZZ(IIB:IIE,IJB:IJE,1:D%NKT)
@@ -913,9 +913,9 @@ IF (KRR /= 0) THEN
   !
   ! d(w'2r')/dz
   IF (GFWR) THEN
-    Z3RDMOMENT= M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,ZKEFF,PTKEM)
-    ZWORK1 = D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-     & PBLL_O_E,PEMOIST,ZKEFF,PTKEM)
+    CALL M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,ZKEFF,PTKEM,Z3RDMOMENT)
+    CALL D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+     & PBLL_O_E,PEMOIST,ZKEFF,PTKEM,ZWORK1)
   !
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:)       + Z3RDMOMENT(:,:,:) * PFWR(:,:,:)
@@ -925,10 +925,10 @@ IF (KRR /= 0) THEN
   !
   ! d(w'r'2)/dz
   IF (GFR2) THEN
-    Z3RDMOMENT= M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+    CALL M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,Z3RDMOMENT)
     ZWORK1 = MZM(PFR2, D%NKA, D%NKU, D%NKL)
-    ZWORK2 = D_M3_WR_WR2_O_DDRDZ(D,CSTURB,Z3RDMOMENT,PREDR1,&
-     & PREDTH1,PD,PBLL_O_E,PEMOIST)
+    CALL D_M3_WR_WR2_O_DDRDZ(D,CSTURB,Z3RDMOMENT,PREDR1,&
+     & PREDTH1,PD,PBLL_O_E,PEMOIST,ZWORK2)
   !
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:)       + Z3RDMOMENT(:,:,:) * ZWORK1(:,:,:)
@@ -938,10 +938,10 @@ IF (KRR /= 0) THEN
   !
   ! d(w'2th')/dz
   IF (GFWTH) THEN
-    ZWORK1 = M3_WR_W2TH(D,CSTURB,PD,ZKEFF,&
-     & PTKEM,PBLL_O_E,PETHETA,PDR_DZ)
-    ZWORK2 = D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,& 
-     & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA)
+    CALL M3_WR_W2TH(D,CSTURB,PD,ZKEFF,&
+     & PTKEM,PBLL_O_E,PETHETA,PDR_DZ,ZWORK1)
+    CALL D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,& 
+     & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA,ZWORK2)
   !
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:)       + ZWORK1(:,:,:) * PFWTH(:,:,:)
@@ -952,10 +952,10 @@ IF (KRR /= 0) THEN
   ! d(w'th'2)/dz
   IF (GFTH2) THEN
     ZWORK1 = MZM(PFTH2, D%NKA, D%NKU, D%NKL)
-    ZWORK2 = M3_WR_WTH2(D,CSTURB,PD,ZKEFF,PTKEM,&
-    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ)
-    ZWORK3 = D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
-     &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+    CALL M3_WR_WTH2(D,CSTURB,PD,ZKEFF,PTKEM,&
+    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ,ZWORK2)
+    CALL D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,&
+     &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,ZWORK3)
     !
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:)       + ZWORK2(:,:,:) * ZWORK1(:,:,:)
@@ -965,11 +965,11 @@ IF (KRR /= 0) THEN
   !
   ! d(w'th'r')/dz
   IF (GFTHR) THEN
-    Z3RDMOMENT= M3_WR_WTHR(D,CSTURB,PREDTH1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
-     & PLEPS,PETHETA)
+    CALL M3_WR_WTHR(D,CSTURB,PREDTH1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
+     & PLEPS,PETHETA,Z3RDMOMENT)
     ZWORK1 = MZM(PFTHR, D%NKA, D%NKU, D%NKL)
-    ZWORK2 = D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,Z3RDMOMENT,PREDR1, &
-     & PREDTH1,PD,PBLL_O_E,PEMOIST)
+    CALL D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,Z3RDMOMENT,PREDR1, &
+     & PREDTH1,PD,PBLL_O_E,PEMOIST,ZWORK2)
   !
     !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
     ZF(:,:,:)       = ZF(:,:,:)       + Z3RDMOMENT(:,:,:) * ZWORK1(:,:,:)
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 51cb03b5a..a6cc80b51 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -264,7 +264,7 @@ USE MODE_BUDGET,         ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 USE MODE_ll, ONLY: ADD2DFIELD_ll, UPDATE_HALO_ll, CLEANLIST_ll, &
                    LWEST_ll, LEAST_ll, LSOUTH_ll, LNORTH_ll
-USE MODE_SBL
+USE MODE_SBL, ONLY: LMO
 USE MODE_SOURCES_NEG_CORRECT, ONLY: SOURCES_NEG_CORRECT
 USE MODE_EMOIST, ONLY: EMOIST
 USE MODE_ETHETA, ONLY: ETHETA
@@ -800,11 +800,11 @@ IF (ORMC01) THEN
   ZUSTAR(:,:)=(PSFU(:,:)**2+PSFV(:,:)**2)**(0.25)
   !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
   IF (KRR>0) THEN
-    ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRM(:,:,IKB,1),PSFTH,PSFRV)
+    CALL LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRM(:,:,IKB,1),PSFTH,PSFRV,ZLMO)
   ELSE
     ZRVM(:,:)=0.
     ZSFRV(:,:)=0.
-    ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV)
+    CALL LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV,ZLMO)
   END IF
   CALL RMC01(D,CST,CSTURB,HTURBLEN,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
 END IF
@@ -1618,8 +1618,8 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
 END IF
 !   compute a mixing length limited by the stability
 !
-ZETHETA(:,:,:) = ETHETA(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,OOCEAN,OCOMPUTE_SRC)
-ZEMOIST(:,:,:) = EMOIST(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,OOCEAN)
+CALL ETHETA(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,OOCEAN,OCOMPUTE_SRC,ZETHETA)
+CALL EMOIST(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,OOCEAN,ZEMOIST)
 !
 IF (KRR>0) THEN
   DO JK = IKTB+1,IKTE-1
diff --git a/src/mesonh/ext/lesn.f90 b/src/mesonh/ext/lesn.f90
index acd15c8ed..7e73c302f 100644
--- a/src/mesonh/ext/lesn.f90
+++ b/src/mesonh/ext/lesn.f90
@@ -3264,9 +3264,9 @@ ELSE IF (CBL_HEIGHT_DEF=='FRI') THEN
                    +( XLES_SUBGRID_WV (:,NLES_CURRENT_TCOUNT,1)      &
                      +XLES_RESOLVED_WV(:,NLES_CURRENT_TCOUNT,1))**2 )
   ZFRIC_SURF = XLES_USTAR(NLES_CURRENT_TCOUNT)**2
-  XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = BL_DEPTH_DIAG(IKB,IKE,ZFRIC_SURF, XLES_ZS, &
-                                                      ZFRIC_LES,  XLES_Z,  &
-                                                      XFTOP_O_FSURF        )
+  CALL BL_DEPTH_DIAG(IKB,IKE,ZFRIC_SURF, XLES_ZS, &
+                     ZFRIC_LES,  XLES_Z,  &
+                     XFTOP_O_FSURF,XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT))
 END IF
 !
 !
-- 
GitLab