From e89f780892ee15ee3004ce826588428b271236d0 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 5 Apr 2022 16:22:04 +0200
Subject: [PATCH] Quentin 05/04/2022: Expand Array mode_prandtl.F90

---
 src/common/turb/mode_prandtl.F90 | 889 +++++++++++++++++++------------
 1 file changed, 549 insertions(+), 340 deletions(-)

diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index e931f4b28..9d27bd513 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -215,13 +215,15 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PEMOIST ! coefficient E_moi
 !
 !       0.2  declaration of local variables
 !
-REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::  &
-                  ZW1, ZW2, ZW3
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) ::  &
+                  ZW1, ZW2, ZW3, &
 !                                                 working variables
+                  ZWORK1,ZWORK2,ZWORK3 
+!                                                 working variables for explicit array
 !                                                     
 INTEGER :: IKB      ! vertical index value for the first inner mass point
 INTEGER :: IKE      ! vertical index value for the last inner mass point
-INTEGER::  JSV                      ! loop index for the scalar variables  
+INTEGER::  JSV,JI,JJ,JK ! loop index
 
 INTEGER :: JLOOP
 REAL    :: ZMINVAL
@@ -251,8 +253,10 @@ IKE = D%NKE
 !
 PETHETA(:,:,:) = MZM(ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC), D%NKA, D%NKU, D%NKL)
 PEMOIST(:,:,:) = MZM(EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
 PETHETA(:,:,D%NKA) = 2.*PETHETA(:,:,IKB) - PETHETA(:,:,IKB+D%NKL)
 PEMOIST(:,:,D%NKA) = 2.*PEMOIST(:,:,IKB) - PEMOIST(:,:,IKB+D%NKL)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
 !
 !---------------------------------------------------------------------------
 IF (.NOT. OHARAT) THEN
@@ -260,14 +264,18 @@ IF (.NOT. OHARAT) THEN
 !          1.3 1D Redelsperger numbers
 !
 PBLL_O_E(:,:,:) = MZM(CST%XG / PTHVREF(:,:,:) * PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:), D%NKA, D%NKU, D%NKL)
+ZWORK1 =  GZ_M_W(D%NKA, D%NKU, D%NKL,PTHLM,PDZZ)
 IF (KRR /= 0) THEN                ! moist case
-  PREDTH1(:,:,:)= CSTURB%XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * &
-                   & GZ_M_W(D%NKA, D%NKU, D%NKL,PTHLM,PDZZ)
-  PREDR1(:,:,:) = CSTURB%XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
-                   & GZ_M_W(D%NKA, D%NKU, D%NKL,PRM(:,:,:,1),PDZZ)
+  ZWORK2 =  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)
+  PREDTH1(:,:,:)= CSTURB%XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * ZWORK1(:,:,:)
+  PREDR1(:,:,:) = CSTURB%XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * ZWORK2(:,:,:)
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 ELSE                              ! dry case
-  PREDTH1(:,:,:)= CSTURB%XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(D%NKA, D%NKU, D%NKL,PTHLM,PDZZ)
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  PREDTH1(:,:,:)= CSTURB%XCTV*PBLL_O_E(:,:,:)  * ZWORK1(:,:,:)
   PREDR1(:,:,:) = 0.
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 END IF
 !
 !       3. Limits on 1D Redelperger numbers
@@ -275,55 +283,82 @@ END IF
 !
 ZMINVAL = (1.-1./CSTURB%XPHI_LIM)
 !
-ZW1 = 1.
-ZW2 = 1.
-!
-WHERE (PREDTH1+PREDR1<-ZMINVAL)
-  ZW1 = (-ZMINVAL) / (PREDTH1+PREDR1)
-END WHERE
-!
-WHERE (PREDTH1<-ZMINVAL)
-  ZW2 = (-ZMINVAL) / (PREDTH1)
-END WHERE
-ZW2 = MIN(ZW1,ZW2)
-!
-ZW1 = 1.
-WHERE (PREDR1<-ZMINVAL)
-  ZW1 = (-ZMINVAL) / (PREDR1)
-END WHERE
-ZW1 = MIN(ZW2,ZW1)
-!
-!
-!       3. Modification of Mixing length and dissipative length
-!          ----------------------------------------------------
-!
-PBLL_O_E(:,:,:) = PBLL_O_E(:,:,:) * ZW1(:,:,:)
-PREDTH1 (:,:,:) = PREDTH1 (:,:,:) * ZW1(:,:,:)
-PREDR1  (:,:,:) = PREDR1  (:,:,:) * ZW1(:,:,:)
-!
-!       4. Threshold for very small (in absolute value) Redelperger numbers
-!          ----------------------------------------------------------------
-!
-ZW2=SIGN(1.,PREDTH1(:,:,:))
-PREDTH1(:,:,:)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDTH1(:,:,:))
-!
-IF (KRR /= 0) THEN                ! dry case
-  ZW2=SIGN(1.,PREDR1(:,:,:))
-  PREDR1(:,:,:)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDR1(:,:,:))
-END IF
+DO JK=1,D%NKT 
+ DO JJ=1,D%NJT 
+  DO JI=1,D%NIT 
+   ZW1(JI,JJ,JK) = 1.
+   ZW2(JI,JJ,JK) = 1.
+   !
+   IF (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK)<-ZMINVAL)THEN
+    ZW1(JI,JJ,JK) = (-ZMINVAL) / (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK))
+   ENDIF
+   !
+   IF (PREDTH1(JI,JJ,JK)<-ZMINVAL)THEN
+    ZW2(JI,JJ,JK) = (-ZMINVAL) / (PREDTH1(JI,JJ,JK))
+   ENDIF
+   ZW2(JI,JJ,JK) = MIN(ZW1(JI,JJ,JK),ZW2(JI,JJ,JK))
+   !
+   ZW1(JI,JJ,JK) = 1.
+   IF (PREDR1(JI,JJ,JK)<-ZMINVAL)THEN
+    ZW1(JI,JJ,JK) = (-ZMINVAL) / (PREDR1(JI,JJ,JK))
+   ENDIF
+   ZW1(JI,JJ,JK) = MIN(ZW2(JI,JJ,JK),ZW1(JI,JJ,JK))
+   !
+   !
+   !       3. Modification of Mixing length and dissipative length
+   !          ----------------------------------------------------
+   !
+   PBLL_O_E(JI,JJ,JK) = PBLL_O_E(JI,JJ,JK) * ZW1(JI,JJ,JK)
+   PREDTH1(JI,JJ,JK)  = PREDTH1(JI,JJ,JK)  * ZW1(JI,JJ,JK)
+   PREDR1(JI,JJ,JK)   = PREDR1(JI,JJ,JK)   * ZW1(JI,JJ,JK)
+   !
+   !       4. Threshold for very small (in absolute value) Redelperger numbers
+   !          ----------------------------------------------------------------
+   !
+   IF(PREDTH1(JI,JJ,JK) < 0.) THEN
+    ZW2(JI,JJ,JK)=-1.
+   ELSE
+    ZW2(JI,JJ,JK)=1.
+   END IF
+   PREDTH1(JI,JJ,JK)= ZW2(JI,JJ,JK) * MAX(1.E-30, ZW2(JI,JJ,JK)*PREDTH1(JI,JJ,JK))
+   !
+   IF (KRR /= 0) THEN                ! moist case
+    IF(PREDR1(JI,JJ,JK) < 0.) THEN
+     ZW2(JI,JJ,JK)=-1.
+    ELSE
+     ZW2(JI,JJ,JK)=1.
+    END IF
+    PREDR1(JI,JJ,JK)= ZW2(JI,JJ,JK) * MAX(1.E-30, ZW2(JI,JJ,JK)*PREDR1(JI,JJ,JK))
+   END IF
+  ENDDO
+ ENDDO
+ENDDO
 !
 !
 !---------------------------------------------------------------------------
 !
 !          For the scalar variables
 DO JSV=1,KSV
-  PREDS1(:,:,:,JSV)=CSTURB%XCTV*PBLL_O_E(:,:,:)*GZ_M_W(D%NKA, D%NKU, D%NKL,PSVM(:,:,:,JSV),PDZZ)
+  ZWORK1 = GZ_M_W(D%NKA, D%NKU, D%NKL,PSVM(:,:,:,JSV),PDZZ)
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  PREDS1(:,:,:,JSV)=CSTURB%XCTV*PBLL_O_E(:,:,:)*ZWORK1(:,:,:)
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 END DO
 !
 DO JSV=1,KSV
-  ZW2=SIGN(1.,PREDS1(:,:,:,JSV))
-  PREDS1(:,:,:,JSV)= ZW2(:,:,:) * MAX(1.E-30, ZW2(:,:,:)*PREDS1(:,:,:,JSV))
-END DO
+ DO JK=1,D%NKT 
+  DO JJ=1,D%NJT 
+   DO JI=1,D%NIT 
+    IF(PREDS1(JI,JJ,JK,JSV) < 0.) THEN
+     ZW2(JI,JJ,JK)=-1.
+    ELSE
+     ZW2(JI,JJ,JK)=1.
+    END IF
+    PREDS1(JI,JJ,JK,JSV)= ZW2(JI,JJ,JK) * MAX(1.E-30, ZW2(JI,JJ,JK)*PREDS1(JI,JJ,JK,JSV))
+   ENDDO
+  ENDDO
+ ENDDO
+ENDDO
 !
 !---------------------------------------------------------------------------
 !
@@ -333,32 +368,43 @@ END DO
 IF(HTURBDIM=='1DIM') THEN        ! 1D case
 !
 !
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
   PRED2TH3(:,:,:)  = PREDTH1(:,:,:)**2
 !
   PRED2R3(:,:,:)   = PREDR1(:,:,:) **2
 !
   PRED2THR3(:,:,:) = PREDTH1(:,:,:) * PREDR1(:,:,:)
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 ELSE IF (O2D) THEN                      ! 3D case in a 2D model
 !
+    ZWORK1 = MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
   IF (KRR /= 0) THEN                 ! moist 3D case
+    ZWORK2 = MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
+    ZWORK3 = MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*     &
+                 GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), D%NKA, D%NKU, D%NKL)
+!
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2+(CSTURB%XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
-      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
+                     ZWORK1(:,:,:)
 !
     PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (CSTURB%XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 * &
-        MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
-    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+D%NKL)
+                    ZWORK2(:,:,:)
 !
     PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  CSTURB%XCTV**2*PBLL_O_E(:,:,:)**2 *   &
-                  PEMOIST(:,:,:) * PETHETA(:,:,:) *                         &
-      MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*     &
-                     GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), D%NKA, D%NKU, D%NKL)
+                      PEMOIST(:,:,:) * PETHETA(:,:,:) *                         &
+                      ZWORK3(:,:,:)
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
+    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+D%NKL) 
     PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+D%NKL)
 !
   ELSE                 ! dry 3D case in a 2D model
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  CSTURB%XCTV**2*PBLL_O_E(:,:,:)**2 *     &
-      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
+                      ZWORK1(:,:,:)      
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
 !
     PRED2R3(:,:,:) = 0.
@@ -369,29 +415,39 @@ ELSE IF (O2D) THEN                      ! 3D case in a 2D model
 !
 ELSE                                 ! 3D case in a 3D model
 !
+  ZWORK1 = MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2 &
+      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
+
   IF (KRR /= 0) THEN                 ! moist 3D case
+    ZWORK2 = MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2 + &
+        GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
+    ZWORK3 = MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*   &
+         GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)+                           &
+         GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)*                    &
+         GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), D%NKA, D%NKU, D%NKL)
+
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2TH3(:,:,:)= PREDTH1(:,:,:)**2 +  ( CSTURB%XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:) )**2 * &
-      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2 &
-      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
-    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
+                     ZWORK1(:,:,:)      
 !
     PRED2R3(:,:,:)= PREDR1(:,:,:)**2 + (CSTURB%XCTV*PBLL_O_E(:,:,:)*PEMOIST(:,:,:))**2 *      &
-        MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2 + &
-        GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
-    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+D%NKL)
+                    ZWORK2(:,:,:)
 !
     PRED2THR3(:,:,:)= PREDR1(:,:,:) * PREDTH1(:,:,:) +  CSTURB%XCTV**2*PBLL_O_E(:,:,:)**2 *   &
-         PEMOIST(:,:,:) * PETHETA(:,:,:) *                            &
-         MZM(GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*   &
-         GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)+                           &
-         GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)*                    &
-         GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), D%NKA, D%NKU, D%NKL)
+         PEMOIST(:,:,:) * PETHETA(:,:,:) * ZWORK3(:,:,:)
+
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!
+    PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
+    PRED2R3(:,:,IKB)=PRED2R3(:,:,IKB+D%NKL)
     PRED2THR3(:,:,IKB)=PRED2THR3(:,:,IKB+D%NKL)
 !
   ELSE                 ! dry 3D case in a 3D model
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 +  CSTURB%XCTV**2*PBLL_O_E(:,:,:)**2 *                &
-      MZM(GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)**2 &
-      + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)**2, D%NKA, D%NKU, D%NKL)
+                      ZWORK1(:,:,:)
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+! 
     PRED2TH3(:,:,IKB)=PRED2TH3(:,:,IKB+D%NKL)
 !
     PRED2R3(:,:,:) = 0.
@@ -411,62 +467,72 @@ DO JSV=1,KSV
 !
   IF(HTURBDIM=='1DIM') THEN
 !        1D case
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
     PRED2THS3(:,:,:,JSV)  = PREDS1(:,:,:,JSV) * PREDTH1(:,:,:)
     IF (KRR /= 0) THEN
       PRED2RS3(:,:,:,JSV)   = PREDR1(:,:,:) *PREDS1(:,:,:,JSV)
     ELSE
       PRED2RS3(:,:,:,JSV)   = 0.
     END IF
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
   ELSE  IF (O2D) THEN ! 3D case in a 2D model
 !
+    ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL)
+    ZWORK2 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
+                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL),                 &
+                           D%NKA, D%NKU, D%NKL)
+    ZWORK3 =  MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
+                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL),          &
+                           D%NKA, D%NKU, D%NKL)
+!
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
     IF (KRR /= 0) THEN
-      ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) *PETHETA
+      ZWORK1 = ZW1(:,:,:)*PETHETA(:,:,:)
     ELSE
-      ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL)
+      ZWORK1 = ZW1(:,:,:)
     END IF
     PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1*                                              &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
-                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL),                 &
-                           D%NKA, D%NKU, D%NKL)
-!
+                       ZWORK1(:,:,:) * ZWORK2(:,:,:)
+                       !
     IF (KRR /= 0) THEN
       PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1 * PEMOIST *                                   &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
-                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL),          &
-                           D%NKA, D%NKU, D%NKL)
+                       ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:)
     ELSE
       PRED2RS3(:,:,:,JSV) = 0.
     END IF
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
   ELSE ! 3D case in a 3D model
 !
-    IF (KRR /= 0) THEN
-      ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) *PETHETA
-    ELSE
-      ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL)
-    END IF
-    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1*                                              &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
+    ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL)
+    ZWORK2 =  MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
                            GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)                  &
                           +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)*       &
                            GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL),                 &
                            D%NKA, D%NKU, D%NKL)
-!
-    IF (KRR /= 0) THEN
-      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1 * PEMOIST *                                   &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
+    ZWORK3 =  MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)*       &
                            GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)           &
                           +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)*       &
                            GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL),          &
                            D%NKA, D%NKU, D%NKL)
+
+    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
+    IF (KRR /= 0) THEN
+      ZWORK1 = ZW1(:,:,:)*PETHETA(:,:,:)
+    ELSE
+      ZWORK1 = ZW1(:,:,:)
+    END IF
+    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZWORK1(:,:,:)*ZWORK2(:,:,:)
+                      !
+    IF (KRR /= 0) THEN
+      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                       ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:)
     ELSE
       PRED2RS3(:,:,:,JSV) = 0.
     END IF
+    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 !
   END IF ! end of HTURBDIM if-block
 !
@@ -562,6 +628,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PF_LIM  ! Value of F when P
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PF      ! function F to smooth
 !
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZCOEF
+INTEGER :: JI,JJ,JK
 !
 !* adds a artificial correction to smooth the function near the discontinuity
 !  point at Phi3 = Phi_lim
@@ -569,10 +636,12 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZCOEF
 !   Note that in the Boundary layer, phi is usually between 0.8 and 1
 !
 !
-ZCOEF = MAX(MIN((  10.*(1.-PPHI3/CSTURB%XPHI_LIM)) ,1.), 0.) 
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
+ZCOEF(:,:,:) = MAX(MIN((  10.*(1.-PPHI3(:,:,:)/CSTURB%XPHI_LIM)) ,1.), 0.) 
 !
-PF(:,:,:) =     ZCOEF(:,:,:)   * PF    &
-          + (1.-ZCOEF(:,:,:))  * PF_LIM
+PF(:,:,:) =     ZCOEF(:,:,:)   * PF(:,:,:)    &
+          + (1.-ZCOEF(:,:,:))  * PF_LIM(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 !
 END SUBROUTINE SMOOTH_TURB_FUNCT
 !----------------------------------------------------------------------------
@@ -589,7 +658,7 @@ FUNCTION PHI3(D,CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: PHI3
 !
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZW1, ZW2
-  INTEGER :: IKB, IKE
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',0,ZHOOK_HANDLE)
@@ -598,6 +667,7 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
 IF (HTURBDIM=='3DIM') THEN
         !* 3DIM case
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
   IF (OUSERV) THEN
     ZW1(:,:,:) = 1. + 1.5* (PREDTH1(:,:,:)+PREDR1(:,:,:)) +      &
                    ( 0.5 * (PREDTH1(:,:,:)**2+PREDR1(:,:,:)**2)  &
@@ -620,17 +690,22 @@ IF (HTURBDIM=='3DIM') THEN
     PHI3(:,:,:)= 1. -                                       &
             (PRED2TH3(:,:,:) / PREDTH1(:,:,:) + ZW2(:,:,:)) / ZW1(:,:,:)
   END IF
-  WHERE( PHI3 <= 0. .OR. PHI3 > CSTURB%XPHI_LIM )
-    PHI3 = CSTURB%XPHI_LIM
-  END WHERE
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 
+  !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
+  WHERE( PHI3(:,:,:) <= 0. .OR. PHI3(:,:,:) > CSTURB%XPHI_LIM )
+    PHI3(:,:,:) = CSTURB%XPHI_LIM
+  END WHERE
+  !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 ELSE
         !* 1DIM case
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
   IF (OUSERV) THEN
     PHI3(:,:,:)= 1./(1.+PREDTH1(:,:,:)+PREDR1(:,:,:))
   ELSE
     PHI3(:,:,:)= 1./(1.+PREDTH1(:,:,:))
   END IF
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 END IF
 !
 PHI3(:,:,IKB-1)=PHI3(:,:,IKB)
@@ -653,7 +728,7 @@ FUNCTION PSI_SV(D,CSTURB,KSV,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV) :: PSI_SV
 !
   INTEGER :: IKB, IKE
-  INTEGER :: JSV
+  INTEGER :: JSV,JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',0,ZHOOK_HANDLE)
@@ -661,17 +736,24 @@ IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
 DO JSV=1,SIZE(PSI_SV,4)
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
   PSI_SV(:,:,:,JSV) = ( 1.                                             &
-    - (CSTURB%XCPR3+CSTURB%XCPR5) * (PRED2THS(:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDTH1) &
-    - (CSTURB%XCPR4+CSTURB%XCPR5) * (PRED2RS (:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDR1 ) &
-    - CSTURB%XCPR3 * PREDTH1 * PPHI3 - CSTURB%XCPR4 * PREDR1 * PPSI3                 &
-                ) / (  1. + CSTURB%XCPR5 * ( PREDTH1 + PREDR1 ) )           
+    - (CSTURB%XCPR3+CSTURB%XCPR5) * (PRED2THS(:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDTH1(:,:,:)) &
+    - (CSTURB%XCPR4+CSTURB%XCPR5) * (PRED2RS(:,:,:,JSV)/PREDS1(:,:,:,JSV)-PREDR1(:,:,:)) &
+    - CSTURB%XCPR3 * PREDTH1(:,:,:) * PPHI3(:,:,:) - CSTURB%XCPR4 * PREDR1(:,:,:) * PPSI3(:,:,:)                 &
+                ) / (  1. + CSTURB%XCPR5 * ( PREDTH1(:,:,:) + PREDR1(:,:,:) ) )           
   
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 !        control of the PSI_SV positivity
-  WHERE ( (PSI_SV(:,:,:,JSV) <=0.).AND. (PREDTH1+PREDR1) <= 0. )
+  !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
+  WHERE ( (PSI_SV(:,:,:,JSV) <=0.).AND. (PREDTH1(:,:,:)+PREDR1(:,:,:)) <= 0. )
     PSI_SV(:,:,:,JSV)=CSTURB%XPHI_LIM
   END WHERE
+  !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
+
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
   PSI_SV(:,:,:,JSV) = MAX( 1.E-4, MIN(CSTURB%XPHI_LIM,PSI_SV(:,:,:,JSV)) )
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 !
   PSI_SV(:,:,IKB-1,JSV)=PSI_SV(:,:,IKB,JSV)
   PSI_SV(:,:,IKE+1,JSV)=PSI_SV(:,:,IKE,JSV)
@@ -691,7 +773,7 @@ FUNCTION D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTU
   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
-  INTEGER :: IKB, IKE,JL,JK,JJ
+  INTEGER :: IKB, IKE,JL,JK,JJ,JI
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
@@ -701,37 +783,42 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 IF (HTURBDIM=='3DIM') THEN
         !* 3DIM case
   IF (OUSERV) THEN
+   !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 #ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=CSTURB%XPHI_LIM)
 #else
     WHERE (PPHI3(:,:,:)<=CSTURB%XPHI_LIM)
 #endif
-    D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                       &
-          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1+PREDR1)          &
-               /((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))) &
-          + (1.+PREDR1)*(PRED2THR3+PRED2TH3)                       &
-               / (PREDTH1*(1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))) &
-          - (1./2.*PREDTH1+PREDR1 * (1.+PREDTH1+PREDR1))           &
-               / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
+      D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)                       &
+          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1(:,:,:)+PREDR1(:,:,:))          &
+               /((1.+PREDTH1(:,:,:)+PREDR1(:,:,:))*(1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:))))) &
+          + (1.+PREDR1(:,:,:))*(PRED2THR3(:,:,:)+PRED2TH3(:,:,:))                       &
+               / (PREDTH1(:,:,:)*(1.+PREDTH1(:,:,:)+PREDR1(:,:,:))* &
+                 (1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:)))) &
+          - (1./2.*PREDTH1(:,:,:)+PREDR1(:,:,:) * (1.+PREDTH1(:,:,:)+PREDR1(:,:,:)))           &
+               / ((1.+PREDTH1(:,:,:)+PREDR1(:,:,:))*(1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:))))
     ELSEWHERE
       D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
     ENDWHERE
+   !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 
 !
   ELSE
+   !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 #ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=CSTURB%XPHI_LIM)
 #else
     WHERE (PPHI3(:,:,:)<=CSTURB%XPHI_LIM)
 #endif
     D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)             &
-          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1)      &
-               /((1.+PREDTH1)*(1.+1./2.*PREDTH1)))        &
-          + PRED2TH3 / (PREDTH1*(1.+PREDTH1)*(1.+1./2.*PREDTH1)) &
-          - 1./2.*PREDTH1 / ((1.+PREDTH1)*(1.+1./2.*PREDTH1))
+          * (1. - PREDTH1(:,:,:) * (3./2.+PREDTH1(:,:,:))      &
+               /((1.+PREDTH1(:,:,:))*(1.+1./2.*PREDTH1(:,:,:))))        &
+          + PRED2TH3(:,:,:) / (PREDTH1(:,:,:)*(1.+PREDTH1(:,:,:))*(1.+1./2.*PREDTH1(:,:,:))) &
+          - 1./2.*PREDTH1(:,:,:) / ((1.+PREDTH1(:,:,:))*(1.+1./2.*PREDTH1(:,:,:)))
     ELSEWHERE
       D_PHI3DTDZ_O_DDTDZ(:,:,:) = PPHI3(:,:,:)
     ENDWHERE
+   !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 !
   END IF
 ELSE
@@ -763,8 +850,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -773,7 +860,7 @@ FUNCTION D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTU
   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
-  INTEGER :: IKB, IKE
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
@@ -784,26 +871,29 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 IF (HTURBDIM=='3DIM') THEN
         !* 3DIM case
   IF (OUSERV) THEN
+   !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 #ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=CSTURB%XPHI_LIM)
 #else
     WHERE (PPHI3(:,:,:)<=CSTURB%XPHI_LIM)
 #endif
       D_PHI3DRDZ_O_DDRDZ(:,:,:) =          &
-                PPHI3(:,:,:) * (1.-PREDR1(:,:,:)*(3./2.+PREDTH1+PREDR1) &
-                  / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1))))  &
-              - PREDR1(:,:,:) * (PRED2THR3+PRED2TH3) / (PREDTH1         &
-                  * (1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))    &
-              + PREDR1(:,:,:) * (1./2.+PREDTH1+PREDR1)                  &
-                  / ((1.+PREDTH1+PREDR1)*(1.+1./2.*(PREDTH1+PREDR1)))
+                PPHI3(:,:,:) * (1.-PREDR1(:,:,:)*(3./2.+PREDTH1(:,:,:)+PREDR1(:,:,:)) &
+                  / ((1.+PREDTH1(:,:,:)+PREDR1(:,:,:))*(1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:)))))  &
+              - PREDR1(:,:,:) * (PRED2THR3(:,:,:)+PRED2TH3(:,:,:)) / (PREDTH1(:,:,:)         &
+                  * (1.+PREDTH1(:,:,:)+PREDR1(:,:,:))*(1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:))))    &
+              + PREDR1(:,:,:) * (1./2.+PREDTH1(:,:,:)+PREDR1(:,:,:))                  &
+                  / ((1.+PREDTH1(:,:,:)+PREDR1(:,:,:))*(1.+1./2.*(PREDTH1(:,:,:)+PREDR1(:,:,:))))
     ELSEWHERE
       D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
     END WHERE
+   !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
   ELSE
     D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
   END IF
 ELSE
         !* 1DIM case
+    !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 #ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=CSTURB%XPHI_LIM)
 #else
@@ -814,6 +904,7 @@ ELSE
   ELSEWHERE
     D_PHI3DRDZ_O_DDRDZ(:,:,:) = PPHI3(:,:,:)
   END WHERE
+  !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 END IF
 !
 #ifdef REPRO48
@@ -829,8 +920,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV)
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -840,7 +931,8 @@ FUNCTION D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PD
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',0,ZHOOK_HANDLE)
@@ -850,11 +942,13 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 !
 IF (HTURBDIM=='3DIM') THEN
    ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
-   D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ * (PPHI3 +  &
-           D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) )
-
+   ZWORK1 = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) 
+   !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+   D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ(:,:,:) * (PPHI3(:,:,:) +  ZWORK1(:,:,:))
+   !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 ELSE
         !* 1DIM case
+    !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 #ifdef REPRO48
     WHERE (PPHI3(:,:,:)/=CSTURB%XPHI_LIM)
 #else
@@ -865,6 +959,7 @@ ELSE
     ELSEWHERE
       D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PPHI3(:,:,:) * 2. * PDTDZ(:,:,:)
     END WHERE
+    !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)    
 END IF
 !
 #ifdef REPRO48
@@ -881,23 +976,25 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   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
-  INTEGER :: IKB, IKE
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_WTH_WTH2(:,:,:) = CSTURB%XCSHF*PBLL_O_E*PETHETA*0.5/CSTURB%XCTD        &
-                   * (1.+0.5*PREDTH1+PREDR1) / PD
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_WTH_WTH2(:,:,:) = CSTURB%XCSHF*PBLL_O_E(:,:,:)*PETHETA(:,:,:)*0.5/CSTURB%XCTD        &
+                   * (1.+0.5*PREDTH1(:,:,:)+PREDR1(:,:,:)) / PD(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 M3_WTH_WTH2(:,:,IKB-1)=M3_WTH_WTH2(:,:,IKB)
 M3_WTH_WTH2(:,:,IKE+1)=M3_WTH_WTH2(:,:,IKE)
 !
@@ -905,8 +1002,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  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
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -914,16 +1011,18 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_WTH_WTH2_O_DDTDZ(:,:,:) = (  0.5*CSTURB%XCSHF*PBLL_O_E*PETHETA*0.5/CSTURB%XCTD/PD &
-                                - PM3_WTH_WTH2/PD*(1.5+PREDTH1+PREDR1)  )&
-                             * PBLL_O_E * PETHETA * CSTURB%XCTV
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_WTH_WTH2_O_DDTDZ(:,:,:) = (  0.5*CSTURB%XCSHF*PBLL_O_E(:,:,:)*PETHETA(:,:,:)*0.5/CSTURB%XCTD/PD(:,:,:) &
+                                - PM3_WTH_WTH2(:,:,:)/PD(:,:,:)*(1.5+PREDTH1(:,:,:)+PREDR1(:,:,:))  )&
+                             * PBLL_O_E(:,:,:) * PETHETA(:,:,:) * CSTURB%XCTV
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_WTH_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE)
@@ -932,23 +1031,26 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
-
-M3_WTH_W2TH(:,:,:) = CSTURB%XCSHF*PKEFF*1.5/MZM(PTKE, D%NKA, D%NKU, D%NKL)              &
-  * (1. - 0.5*PREDR1*(1.+PREDR1)/PD ) / (1.+PREDTH1)
+ZWORK1 = MZM(PTKE, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_WTH_W2TH(:,:,:) = CSTURB%XCSHF*PKEFF(:,:,:)*1.5/ZWORK1(:,:,:)              &
+  * (1. - 0.5*PREDR1(:,:,:)*(1.+PREDR1(:,:,:))/PD(:,:,:) ) / (1.+PREDTH1(:,:,:))
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_WTH_W2TH(:,:,IKB-1)=M3_WTH_W2TH(:,:,IKB)
 M3_WTH_W2TH(:,:,IKE+1)=M3_WTH_W2TH(:,:,IKE)
@@ -957,8 +1059,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2TH
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -967,16 +1069,22 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
+ZWORK1 = MZM(PTKE, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 D_M3_WTH_W2TH_O_DDTDZ(:,:,:) = &
- - CSTURB%XCSHF*PKEFF*1.5/MZM(PTKE, D%NKA, D%NKU, D%NKL)/(1.+PREDTH1)**2*CSTURB%XCTV*PBLL_O_E*PETHETA  &
- * (1. - 0.5*PREDR1*(1.+PREDR1)/PD*( 1.+(1.+PREDTH1)*(1.5+PREDR1+PREDTH1)/PD) )
+ - CSTURB%XCSHF*PKEFF(:,:,:)*1.5/ZWORK1(:,:,:)/(1.+PREDTH1(:,:,:))**2 &
+ * CSTURB%XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:)  &
+ * (1. - 0.5*PREDR1(:,:,:)*(1.+PREDR1(:,:,:))/PD(:,:,:)* &
+   ( 1.+(1.+PREDTH1(:,:,:))*(1.5+PREDR1(:,:,:)+PREDTH1(:,:,:))/PD(:,:,:)) )
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_WTH_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_W2TH_O_DDTDZ(:,:,IKB)
 D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE)
@@ -985,8 +1093,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -994,14 +1102,19 @@ FUNCTION M3_WTH_W2R(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_WTH_W2R(:,:,:) = - CSTURB%XCSHF*PKEFF*0.75*CSTURB%XCTV*PBLL_O_E/MZM(PTKE, D%NKA, D%NKU, D%NKL)*PEMOIST*PDTDZ/PD
+ZWORK1 = MZM(PTKE, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_WTH_W2R(:,:,:) = - CSTURB%XCSHF*PKEFF(:,:,:)*0.75*CSTURB%XCTV*PBLL_O_E(:,:,:) &
+                    /ZWORK1(:,:,:)*PEMOIST(:,:,:)*PDTDZ(:,:,:)/PD(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_WTH_W2R(:,:,IKB-1)=M3_WTH_W2R(:,:,IKB)
 M3_WTH_W2R(:,:,IKE+1)=M3_WTH_W2R(:,:,IKE)
@@ -1010,8 +1123,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2R
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1020,15 +1133,20 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_WTH_W2R_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF*0.75*CSTURB%XCTV*PBLL_O_E/MZM(PTKE, D%NKA, D%NKU, D%NKL)*PEMOIST/PD &
-                                     * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
+ZWORK1 = MZM(PTKE, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_WTH_W2R_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF(:,:,:)*0.75*CSTURB%XCTV*PBLL_O_E(:,:,:) &
+                               /ZWORK1(:,:,:)*PEMOIST(:,:,:)/PD(:,:,:) &
+                                     * (1. -  PREDTH1(:,:,:)*(1.5+PREDTH1(:,:,:)+PREDR1(:,:,:))/PD(:,:,:))
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_WTH_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKB)
 D_M3_WTH_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKE)
@@ -1037,8 +1155,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_WR2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -1049,15 +1167,19 @@ 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) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WR2
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_WTH_WR2(:,:,:) = - CSTURB%XCSHF*PKEFF*0.25*PBLL_O_E*CSTURB%XCTV*PEMOIST**2       &
-                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), D%NKA, D%NKU, D%NKL)/CSTURB%XCTD*PDTDZ/PD
+ZWORK1 = MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_WTH_WR2(:,:,:) = - CSTURB%XCSHF*PKEFF(:,:,:)*0.25*PBLL_O_E(:,:,:)*CSTURB%XCTV*PEMOIST(:,:,:)**2       &
+                           *ZWORK1(:,:,:)/CSTURB%XCTD*PDTDZ(:,:,:)/PD(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_WTH_WR2(:,:,IKB-1)=M3_WTH_WR2(:,:,IKB)
 M3_WTH_WR2(:,:,IKE+1)=M3_WTH_WR2(:,:,IKE)
@@ -1066,8 +1188,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1079,16 +1201,20 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_WTH_WR2_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF*0.25*PBLL_O_E*CSTURB%XCTV*PEMOIST**2 &
-                           *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), D%NKA, D%NKU, D%NKL)/CSTURB%XCTD/PD     &
-                           * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
+ZWORK1 = MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_WTH_WR2_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF(:,:,:)*0.25*PBLL_O_E(:,:,:)*CSTURB%XCTV*PEMOIST(:,:,:)**2 &
+                           *ZWORK1(:,:,:)/CSTURB%XCTD/PD(:,:,:)     &
+                           * (1. -  PREDTH1(:,:,:)*(1.5+PREDTH1(:,:,:)+PREDR1(:,:,:))/PD(:,:,:))
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_WTH_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKE)
@@ -1097,8 +1223,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WTH_WTHR(D,CSTURB,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
@@ -1107,18 +1233,20 @@ 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(SIZE(PREDR1,1),SIZE(PREDR1,2),SIZE(PREDR1,3)) :: M3_WTH_WTHR
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-!M3_WTH_WTHR(:,:,:) = CSTURB%XCSHF*PKEFF*PEMOIST/MZM(PBETA*PTKE*PSQRT_TKE, D%NKA, D%NKU, D%NKL) &
-!                         *0.5*PLEPS/CSTURB%XCTD*(1+PREDR1)/PD
-M3_WTH_WTHR(:,:,:) = CSTURB%XCSHF*PKEFF*PEMOIST*MZM(PBETA/PTKE*PSQRT_TKE, D%NKA, D%NKU, D%NKL) &
-                         *0.5*PLEPS/CSTURB%XCTD*(1+PREDR1)/PD
+ZWORK1 = MZM(PBETA/PTKE*PSQRT_TKE, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_WTH_WTHR(:,:,:) = CSTURB%XCSHF*PKEFF(:,:,:)*PEMOIST(:,:,:)*ZWORK1(:,:,:) &
+                         *0.5*PLEPS(:,:,:)/CSTURB%XCTD*(1+PREDR1(:,:,:))/PD(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_WTH_WTHR(:,:,IKB-1)=M3_WTH_WTHR(:,:,IKB)
 M3_WTH_WTHR(:,:,IKE+1)=M3_WTH_WTHR(:,:,IKE)
@@ -1127,8 +1255,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  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
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1136,14 +1264,17 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_WTH_WTHR_O_DDTDZ(:,:,:) = - PM3_WTH_WTHR * (1.5+PREDTH1+PREDR1)/PD*CSTURB%XCTV*PBLL_O_E*PETHETA
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_WTH_WTHR_O_DDTDZ(:,:,:) = - PM3_WTH_WTHR(:,:,:) * (1.5+PREDTH1(:,:,:)+PREDR1(:,:,:))&
+                               /PD(:,:,:)*CSTURB%XCTV*PBLL_O_E(:,:,:)*PETHETA(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE)
@@ -1152,8 +1283,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1162,15 +1293,19 @@ FUNCTION M3_TH2_W2TH(D,CSTURB,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_W2TH(:,:,:) = - MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)/(1.+PREDTH1)*PDTDZ, D%NKA, D%NKU, D%NKL) &
-                       * 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV
+ZWORK1 = MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)/(1.+PREDTH1)*PDTDZ, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_TH2_W2TH(:,:,:) = - ZWORK1(:,:,:) &
+                       * 1.5*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:)*CSTURB%XCTV
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_TH2_W2TH(:,:,IKB-1)=M3_TH2_W2TH(:,:,IKB)
 M3_TH2_W2TH(:,:,IKE+1)=M3_TH2_W2TH(:,:,IKE)
@@ -1179,8 +1314,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2TH
 !----------------------------------------------------------------------------
 FUNCTION D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1189,7 +1324,8 @@ 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) :: PTKE
   LOGICAL,                INTENT(IN) :: OUSERV
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2TH_O_DDTDZ
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
@@ -1200,12 +1336,20 @@ IF (OUSERV) THEN
 !  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF(                    &
 !          (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*(1.+PREDTH1)/PD )  &
 !        / (1.+PREDTH1)**2, D%NKA, D%NKU, D%NKL)
-  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF( &
-          (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*   &
+
+  ZWORK1 = MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*   &
              PREDTH1*(1.+PREDTH1)/PD ) / (1.+PREDTH1)**2, D%NKA, D%NKU, D%NKL)
 
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:)*CSTURB%XCTV * &
+                                 ZWORK1(:,:,:)
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 ELSE
-  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF(1./(1.+PREDTH1)**2, D%NKA, D%NKU, D%NKL)
+  ZWORK1 = MZF(1./(1.+PREDTH1)**2, D%NKA, D%NKU, D%NKL)
+  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:)*CSTURB%XCTV &
+                                 * ZWORK1(:,:,:)
+  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 END IF
 !
 D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB)
@@ -1215,23 +1359,27 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_TH2_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_WTH2(:,:,:) = PLEPS*0.5/CSTURB%XCTD/PSQRT_TKE          &
-  * MZF((1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD, D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF((1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_TH2_WTH2(:,:,:) = PLEPS(:,:,:)*0.5/CSTURB%XCTD/PSQRT_TKE(:,:,:)          &
+                     * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_TH2_WTH2(:,:,IKB-1)=M3_TH2_WTH2(:,:,IKB)
 M3_TH2_WTH2(:,:,IKE+1)=M3_TH2_WTH2(:,:,IKE)
@@ -1240,8 +1388,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1250,17 +1398,22 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_TH2_WTH2_O_DDTDZ(:,:,:) = PLEPS*0.5/CSTURB%XCTD/PSQRT_TKE*CSTURB%XCTV                        &
- * MZF(PBLL_O_E*PETHETA* (0.5/PD                                                   &
+ZWORK1 = MZF(PBLL_O_E*PETHETA* (0.5/PD                                                   &
              - (1.5+PREDTH1+PREDR1)*(1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD**2 &
                            ), D%NKA, D%NKU, D%NKL)
+ 
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_TH2_WTH2_O_DDTDZ(:,:,:) = PLEPS(:,:,:)*0.5/CSTURB%XCTD/PSQRT_TKE(:,:,:)*CSTURB%XCTV &
+                               * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE)
@@ -1269,8 +1422,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_TH2_W2R(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -1279,14 +1432,19 @@ 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) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2R
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_W2R(:,:,:) = 0.75*CSTURB%XCTV**2*MZF(PBLL_O_E*PEMOIST/PD*PDTDZ**2, D%NKA, D%NKU, D%NKL)*PLM*PLEPS/PTKE
+ZWORK1 = MZF(PBLL_O_E*PEMOIST/PD*PDTDZ**2, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_TH2_W2R(:,:,:) = 0.75*CSTURB%XCTV**2*ZWORK1(:,:,:) &
+                    *PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_TH2_W2R(:,:,IKB-1)=M3_TH2_W2R(:,:,IKB)
 M3_TH2_W2R(:,:,IKE+1)=M3_TH2_W2R(:,:,IKE)
@@ -1295,8 +1453,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2R
 !----------------------------------------------------------------------------
 FUNCTION D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1307,15 +1465,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_TH2_W2R_O_DDTDZ(:,:,:) = 0.75*CSTURB%XCTV**2*PLM*PLEPS/PTKE &
- * MZF(PBLL_O_E*PEMOIST/PD*PDTDZ*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+ZWORK1 =  MZF(PBLL_O_E*PEMOIST/PD*PDTDZ*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_TH2_W2R_O_DDTDZ(:,:,:) = 0.75*CSTURB%XCTV**2*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:) &
+                              * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_TH2_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKB)
 D_M3_TH2_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKE)
@@ -1324,8 +1486,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_TH2_WR2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -1333,14 +1495,19 @@ 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) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WR2
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_WR2(:,:,:) = 0.25*CSTURB%XCTV**2*MZF((PBLL_O_E*PEMOIST*PDTDZ)**2/PD, D%NKA, D%NKU, D%NKL)*PLEPS/PSQRT_TKE/CSTURB%XCTD
+ZWORK1 = MZF((PBLL_O_E*PEMOIST*PDTDZ)**2/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_TH2_WR2(:,:,:) = 0.25*CSTURB%XCTV**2*ZWORK1(:,:,:)&
+                    *PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_TH2_WR2(:,:,IKB-1)=M3_TH2_WR2(:,:,IKB)
 M3_TH2_WR2(:,:,IKE+1)=M3_TH2_WR2(:,:,IKE)
@@ -1349,8 +1516,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1360,15 +1527,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_TH2_WR2_O_DDTDZ(:,:,:) = 0.25*CSTURB%XCTV**2*PLEPS/PSQRT_TKE/CSTURB%XCTD &
-  *  MZF((PBLL_O_E*PEMOIST)**2*PDTDZ/PD*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF((PBLL_O_E*PEMOIST)**2*PDTDZ/PD*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_TH2_WR2_O_DDTDZ(:,:,:) = 0.25*CSTURB%XCTV**2*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD &
+                              *  ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_TH2_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKE)
@@ -1377,8 +1548,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_TH2_WTHR(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -1387,15 +1558,19 @@ 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) :: PEMOIST
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTHR
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_TH2_WTHR(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS/PSQRT_TKE/CSTURB%XCTD &
- * MZF(PBLL_O_E*PEMOIST*PDTDZ*(1.+PREDR1)/PD, D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF(PBLL_O_E*PEMOIST*PDTDZ*(1.+PREDR1)/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_TH2_WTHR(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD &
+                       *ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_TH2_WTHR(:,:,IKB-1)=M3_TH2_WTHR(:,:,IKB)
 M3_TH2_WTHR(:,:,IKE+1)=M3_TH2_WTHR(:,:,IKE)
@@ -1404,8 +1579,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1415,15 +1590,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_TH2_WTHR_O_DDTDZ(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS/PSQRT_TKE/CSTURB%XCTD &
- * MZF(PBLL_O_E*PEMOIST*(1.+PREDR1)/PD * (1. -PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF(PBLL_O_E*PEMOIST*(1.+PREDR1)/PD * (1. -PREDTH1*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_TH2_WTHR_O_DDTDZ(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD &
+                               * ZWORK1(:,:,:) 
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE)
@@ -1432,23 +1611,27 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_THR_WTHR(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_THR_WTHR(:,:,:) = 0.5*PLEPS/PSQRT_TKE/CSTURB%XCTD &
- * MZF((1.+PREDTH1)*(1.+PREDR1)/PD, D%NKA, D%NKU, D%NKL)
+ZWORK1 =  MZF((1.+PREDTH1)*(1.+PREDR1)/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_THR_WTHR(:,:,:) = 0.5*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD &
+                     * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_THR_WTHR(:,:,IKB-1)=M3_THR_WTHR(:,:,IKB)
 M3_THR_WTHR(:,:,IKE+1)=M3_THR_WTHR(:,:,IKE)
@@ -1457,8 +1640,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1467,15 +1650,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_THR_WTHR_O_DDTDZ(:,:,:) = 0.5*PLEPS/PSQRT_TKE/CSTURB%XCTD * CSTURB%XCTV &
- * MZF(PETHETA*PBLL_O_E/PD*(1.+PREDR1)*(1.-(1.+PREDTH1)*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF(PETHETA*PBLL_O_E/PD*(1.+PREDR1)*(1.-(1.+PREDTH1)*(1.5+PREDTH1+PREDR1)/PD), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_THR_WTHR_O_DDTDZ(:,:,:) = 0.5*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD * CSTURB%XCTV &
+                               * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_THR_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKB)
 D_M3_THR_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKE)
@@ -1484,8 +1671,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_THR_WTH2(D,CSTURB,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -1494,15 +1681,19 @@ 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) :: PETHETA
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTH2
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_THR_WTH2(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV &
- * MZF((1.+PREDR1)*PBLL_O_E*PETHETA*PDRDZ/PD, D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF((1.+PREDR1)*PBLL_O_E*PETHETA*PDRDZ/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_THR_WTH2(:,:,:) = - 0.25*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD*CSTURB%XCTV &
+                     * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_THR_WTH2(:,:,IKB-1)=M3_THR_WTH2(:,:,IKB)
 M3_THR_WTH2(:,:,IKE+1)=M3_THR_WTH2(:,:,IKE)
@@ -1511,8 +1702,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1522,15 +1713,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_THR_WTH2_O_DDTDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV**2 &
- * MZF(-(1.+PREDR1)*(PBLL_O_E*PETHETA/PD)**2*PDRDZ*(1.5+PREDTH1+PREDR1), D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF(-(1.+PREDR1)*(PBLL_O_E*PETHETA/PD)**2*PDRDZ*(1.5+PREDTH1+PREDR1), D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_THR_WTH2_O_DDTDZ(:,:,:) = - 0.25*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD*CSTURB%XCTV**2 &
+                               * ZWORK1(:,:,:) 
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_THR_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKB)
 D_M3_THR_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKE)
@@ -1539,8 +1734,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1549,17 +1744,21 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_THR_WTH2_O_DDRDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV          &
- * MZF(PBLL_O_E*PETHETA/PD                                              &
+ZWORK1 = MZF(PBLL_O_E*PETHETA/PD                                              &
        *(-(1.+PREDR1)*PREDR1/PD*(1.5+PREDTH1+PREDR1)+(1.+2.*PREDR1)),     &
        D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_THR_WTH2_O_DDRDZ(:,:,:) = - 0.25*PLEPS(:,:,:)/PSQRT_TKE(:,:,:)/CSTURB%XCTD*CSTURB%XCTV          &
+                               * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_THR_WTH2_O_DDRDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKB)
 D_M3_THR_WTH2_O_DDRDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKE)
@@ -1568,8 +1767,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
@@ -1577,15 +1776,19 @@ FUNCTION M3_THR_W2TH(D,CSTURB,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
   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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-M3_THR_W2TH(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV      &
- * MZF((1.+PREDR1)*PDRDZ/PD, D%NKA, D%NKU, D%NKL)
+ZWORK1 = MZF((1.+PREDR1)*PDRDZ/PD, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+M3_THR_W2TH(:,:,:) = - 0.75*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:) * CSTURB%XCTV      &
+                     * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 M3_THR_W2TH(:,:,IKB-1)=M3_THR_W2TH(:,:,IKB)
 M3_THR_W2TH(:,:,IKE+1)=M3_THR_W2TH(:,:,IKE)
@@ -1594,8 +1797,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2TH
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1606,16 +1809,19 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_THR_W2TH_O_DDTDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV**2    &
- * MZF(-PETHETA*PBLL_O_E*(1.+PREDR1)*PDRDZ*(1.5+PREDTH1+PREDR1)/PD**2, D%NKA, D%NKU, D%NKL)
-
+ZWORK1 =  MZF(-PETHETA*PBLL_O_E*(1.+PREDR1)*PDRDZ*(1.5+PREDTH1+PREDR1)/PD**2, D%NKA, D%NKU, D%NKL)
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_THR_W2TH_O_DDTDZ(:,:,:) = - 0.75*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:) * CSTURB%XCTV**2    &
+                               * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_THR_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKB)
 D_M3_THR_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKE)
@@ -1624,8 +1830,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1633,18 +1839,21 @@ 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) :: 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
-  INTEGER :: IKB, IKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1 ! working array
+  INTEGER :: IKB, IKE, JI,JJ,JK
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PD,3)-JPVEXT_TURB
 
-D_M3_THR_W2TH_O_DDRDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV     &
- * MZF(-(1.+PREDR1)*PREDR1*(1.5+PREDTH1+PREDR1)/PD**2          &
+ZWORK1 =  MZF(-(1.+PREDR1)*PREDR1*(1.5+PREDTH1+PREDR1)/PD**2          &
         +(1.+2.*PREDR1)/PD,                                    &
        D%NKA, D%NKU, D%NKL)
-
+!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+D_M3_THR_W2TH_O_DDRDZ(:,:,:) = - 0.75*PLM(:,:,:)*PLEPS(:,:,:)/PTKE(:,:,:) * CSTURB%XCTV     &
+                               * ZWORK1(:,:,:)
+!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 !
 D_M3_THR_W2TH_O_DDRDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKB)
 D_M3_THR_W2TH_O_DDRDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKE)
@@ -1656,8 +1865,8 @@ END FUNCTION D_M3_THR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 !
 FUNCTION PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
@@ -1675,8 +1884,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
 END FUNCTION PSI3
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1696,8 +1905,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
@@ -1715,8 +1924,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1735,8 +1944,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1752,8 +1961,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  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
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1770,8 +1979,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1787,8 +1996,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2R
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1806,8 +2015,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_W2TH(D,CSTURB,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -1824,8 +2033,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2TH
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1843,8 +2052,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_WTH2(D,CSTURB,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -1864,8 +2073,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1886,8 +2095,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_WR_WTHR(D,CSTURB,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
@@ -1906,8 +2115,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  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
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
@@ -1924,8 +2133,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_R2_W2R(D,CSTURB,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1943,8 +2152,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2R
 !----------------------------------------------------------------------------
 FUNCTION D_M3_R2_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1962,8 +2171,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_R2_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1979,8 +2188,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_R2_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -1998,8 +2207,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_R2_W2TH(D,CSTURB,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -2017,8 +2226,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2TH
 !----------------------------------------------------------------------------
 FUNCTION D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2038,8 +2247,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_R2_WTH2(D,CSTURB,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   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
@@ -2056,8 +2265,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTH2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2076,8 +2285,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_R2_WTHR(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -2095,8 +2304,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTHR
 !----------------------------------------------------------------------------
 FUNCTION D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2115,8 +2324,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2134,8 +2343,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_THR_WR2(D,CSTURB,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
@@ -2153,8 +2362,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WR2
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WR2_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2173,8 +2382,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_WR2_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2192,8 +2401,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
 FUNCTION M3_THR_W2R(D,CSTURB,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
@@ -2210,8 +2419,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2R
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_W2R_O_DDRDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
@@ -2231,8 +2440,8 @@ IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
 FUNCTION D_M3_THR_W2R_O_DDTDZ(D,CSTURB,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
-  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+  TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
+  TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
-- 
GitLab