From a217e71fba824f9901dedfaefc6ba11b0324daf9 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Thu, 18 Aug 2022 17:03:23 +0200
Subject: [PATCH] Quentin 18/08/2022: Incomplete NPROMA bloc test lead to
 correction on loop index computation (IIJB:IIJE)

---
 src/common/aux/shuman_phy.F90           |  84 +++++++-----
 src/common/turb/mode_bl89.F90           |  58 ++++----
 src/common/turb/mode_rmc01.F90          | 170 ++++++++++++------------
 src/common/turb/mode_tridiag.F90        |  99 +++++++-------
 src/common/turb/mode_tridiag_thermo.F90 | 139 +++++++++----------
 src/common/turb/mode_tridiag_tke.F90    |  99 +++++++-------
 src/common/turb/mode_tridiag_wind.F90   |  99 +++++++-------
 7 files changed, 390 insertions(+), 358 deletions(-)

diff --git a/src/common/aux/shuman_phy.F90 b/src/common/aux/shuman_phy.F90
index 3679a76fb..f7d599102 100644
--- a/src/common/aux/shuman_phy.F90
+++ b/src/common/aux/shuman_phy.F90
@@ -371,13 +371,13 @@ IMPLICIT NONE
 !              ------------------------------------
 !
 TYPE(DIMPHYEX_t),       INTENT(IN)  :: D
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)  :: PA     ! variable at mass localization
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PMZM   ! result at flux localization 
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)  :: PA     ! variable at mass localization
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PMZM   ! result at flux localization 
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER :: JK             ! Loop index in z direction
+INTEGER :: JK,JIJ,IIJB,IIJE             ! Loop index
 !
 !-------------------------------------------------------------------------------
 !
@@ -386,11 +386,17 @@ INTEGER :: JK             ! Loop index in z direction
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MZM',0,ZHOOK_HANDLE)
-DO JK=2,SIZE(PA,3)-1
-  PMZM(:,:,JK) = 0.5*( PA(:,:,JK)+PA(:,:,JK-D%NKL) )
+IIJB = D%NIJB
+IIJE = D%NIJE
+DO JK=2,D%NKT-1
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  PMZM(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK-D%NKL) )
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
-PMZM(:,:,D%NKA)    = -999.
-PMZM(:,:,D%NKU) = 0.5*( PA(:,:,D%NKU)+PA(:,:,D%NKU-D%NKL) )
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PMZM(IIJB:IIJE,D%NKA)    = -999.
+PMZM(IIJB:IIJE,D%NKU) = 0.5*( PA(IIJB:IIJE,D%NKU)+PA(IIJB:IIJE,D%NKU-D%NKL) )
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !
 !-------------------------------------------------------------------------------
@@ -451,14 +457,14 @@ IMPLICIT NONE
 !              ------------------------------------
 !
 TYPE(DIMPHYEX_t),       INTENT(IN)  :: D
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)  :: PA     ! variable at mass localization
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PDZM   ! result at flux
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)  :: PA     ! variable at mass localization
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDZM   ! result at flux
                                                             ! side
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER :: JK            ! Loop index in z direction
+INTEGER :: JK,JIJ,IIJB,IIJE             ! Loop index
 !
 !-------------------------------------------------------------------------------
 !
@@ -467,11 +473,17 @@ INTEGER :: JK            ! Loop index in z direction
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('DZM',0,ZHOOK_HANDLE)
-DO JK=2,SIZE(PA,3)-1
-  PDZM(:,:,JK)          = PA(:,:,JK) -  PA(:,:,JK-D%NKL)
+IIJB = D%NIJB
+IIJE = D%NIJE
+DO JK=2,D%NKT-1
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  PDZM(IIJB:IIJE,JK)          = PA(IIJB:IIJE,JK) -  PA(IIJB:IIJE,JK-D%NKL)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
-PDZM(:,:,D%NKA)    =  -999.
-PDZM(:,:,D%NKU)    = PA(:,:,D%NKU) -  PA(:,:,D%NKU-D%NKL)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PDZM(IIJB:IIJE,D%NKA)    =  -999.
+PDZM(IIJB:IIJE,D%NKU)    = PA(IIJB:IIJE,D%NKU) -  PA(IIJB:IIJE,D%NKU-D%NKL)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -845,14 +857,13 @@ IMPLICIT NONE
 !              ------------------------------------
 !
 TYPE(DIMPHYEX_t),       INTENT(IN)  :: D
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)  :: PA     ! variable at flux localization
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PMZF   ! result at mass localization 
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)  :: PA     ! variable at flux localization
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PMZF   ! result at mass localization 
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER :: JK             ! Loop index in z direction
-INTEGER :: IKT          ! upper bound in z direction of PA
+INTEGER :: JK,JIJ,IIJB,IIJE             ! Loop index
 !
 !-------------------------------------------------------------------------------
 !
@@ -861,12 +872,17 @@ INTEGER :: IKT          ! upper bound in z direction of PA
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MZF',0,ZHOOK_HANDLE)
-IKT = SIZE(PA,3)
-DO JK=2,IKT-1
-  PMZF(:,:,JK) = 0.5*( PA(:,:,JK)+PA(:,:,JK+D%NKL) )
+IIJB = D%NIJB
+IIJE = D%NIJE
+DO JK=2,D%NKT-1
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  PMZF(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL) )
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
-PMZF(:,:,D%NKU) = -999.
-PMZF(:,:,D%NKA) = 0.5*( PA(:,:,D%NKA)+PA(:,:,D%NKA+D%NKL) )
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PMZF(IIJB:IIJE,D%NKU) = -999.
+PMZF(IIJB:IIJE,D%NKA) = 0.5*( PA(IIJB:IIJE,D%NKA)+PA(IIJB:IIJE,D%NKA+D%NKL) )
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -926,14 +942,13 @@ IMPLICIT NONE
 !              ------------------------------------
 !
 TYPE(DIMPHYEX_t),       INTENT(IN)  :: D
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)  :: PA     ! variable at flux localization
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PDZF   ! result at mass localization 
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)  :: PA     ! variable at flux localization
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDZF   ! result at mass localization 
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER :: JK           ! Loop index in z direction
-INTEGER :: IKT          ! upper bound in z direction of PA
+INTEGER :: JK,JIJ,IIJB,IIJE             ! Loop index
 !
 !-------------------------------------------------------------------------------
 !
@@ -942,12 +957,17 @@ INTEGER :: IKT          ! upper bound in z direction of PA
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('DZF',0,ZHOOK_HANDLE)
-IKT = SIZE(PA,3)
-DO JK=2,IKT-1
-  PDZF(:,:,JK)          = PA(:,:,JK+D%NKL) -  PA(:,:,JK)
+IIJB = D%NIJB
+IIJE = D%NIJE
+DO JK=2,D%NKT-1
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  PDZF(IIJB:IIJE,JK)          = PA(IIJB:IIJE,JK+D%NKL) -  PA(IIJB:IIJE,JK)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
-PDZF(:,:,D%NKA)    = PA(:,:,D%NKA+D%NKL) -  PA(:,:,D%NKA)
-PDZF(:,:,D%NKU)    = -999.
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PDZF(IIJB:IIJE,D%NKA)    = PA(IIJB:IIJE,D%NKA+D%NKL) -  PA(IIJB:IIJE,D%NKA)
+PDZF(IIJB:IIJE,D%NKU)    = -999.
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_bl89.F90 b/src/common/turb/mode_bl89.F90
index c110da535..ce9a0898f 100644
--- a/src/common/turb/mode_bl89.F90
+++ b/src/common/turb/mode_bl89.F90
@@ -106,7 +106,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZG_O_THVREF
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZSQRT_TKE
 REAL, DIMENSION(D%NIJT,D%NKT) :: PLMDN
 !
-INTEGER :: IIU,IJU
+INTEGER :: IIJB, IIJE
 INTEGER :: JIJ        ! horizontal loop counter
 INTEGER :: JK,JKK     ! loop counters
 INTEGER :: JRR        ! moist loop counter
@@ -122,6 +122,8 @@ Z2SQRT2=2.*SQRT(2.)
 !
 ZRVORD = CST%XRV / CST%XRD
 !
+IIJB = D%NIJB
+IIJE = D%NIJE
 !-------------------------------------------------------------------------------
 !
 !*       1.    pack the horizontal dimensions into one
@@ -132,21 +134,21 @@ ZRVORD = CST%XRV / CST%XRD
 !
 IF (OOCEAN) THEN
   DO JK=1,D%NKT
-    DO JIJ=1,D%NIJT
+    DO JIJ=IIJB,IIJE
       ZG_O_THVREF(JIJ,JK) = CST%XG * CST%XALPHAOC
     END DO
   END DO
 ELSE !Atmosphere case
   DO JK=1,D%NKT
-    DO JIJ=1,D%NIJT
+    DO JIJ=IIJB,IIJE
       ZG_O_THVREF(JIJ,JK) = CST%XG / PTHVREF(JIJ,JK)
     END DO
   END DO
 END IF
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-ZSQRT_TKE(D%NIJB:D%NIJE,1:D%NKT) = SQRT(PTKEM(D%NIJB:D%NIJE,1:D%NKT))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+ZSQRT_TKE(IIJB:IIJE,1:D%NKT) = SQRT(PTKEM(IIJB:IIJE,1:D%NKT))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
 !ZBL89EXP is defined here because (and not in ini_cturb) because CSTURB%XCED is defined in read_exseg (depending on BL89/RM17)
 ZBL89EXP = LOG(16.)/(4.*LOG(CST%XKARMAN)+LOG(CSTURB%XCED)-3.*LOG(CSTURB%XCMFS))
@@ -157,18 +159,18 @@ ZUSRBL89 = 1./ZBL89EXP
 !              -----------------------------------------------
 !
 IF(KRR /= 0) THEN
-  ZSUM(D%NIJB:D%NIJE,1:D%NKT) = 0.
+  ZSUM(IIJB:IIJE,1:D%NKT) = 0.
   DO JRR=1,KRR
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-    ZSUM(D%NIJB:D%NIJE,1:D%NKT) = ZSUM(D%NIJB:D%NIJE,1:D%NKT)+PRM(D%NIJB:D%NIJE,1:D%NKT,JRR)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+    ZSUM(IIJB:IIJE,1:D%NKT) = ZSUM(IIJB:IIJE,1:D%NKT)+PRM(IIJB:IIJE,1:D%NKT,JRR)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
   ENDDO
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-  ZVPT(D%NIJB:D%NIJE,1:D%NKT)=PTHLM(D%NIJB:D%NIJE,1:D%NKT) * ( 1. + ZRVORD*PRM(D%NIJB:D%NIJE,1:D%NKT,1) )  &
-                           / ( 1. + ZSUM(D%NIJB:D%NIJE,1:D%NKT) )
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+  !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+  ZVPT(IIJB:IIJE,1:D%NKT)=PTHLM(IIJB:IIJE,1:D%NKT) * ( 1. + ZRVORD*PRM(IIJB:IIJE,1:D%NKT,1) )  &
+                           / ( 1. + ZSUM(IIJB:IIJE,1:D%NKT) )
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 ELSE
-  ZVPT(D%NIJB:D%NIJE,1:D%NKT)=PTHLM(D%NIJB:D%NIJE,1:D%NKT)
+  ZVPT(IIJB:IIJE,1:D%NKT)=PTHLM(IIJB:IIJE,1:D%NKT)
 END IF
 !
 !!!!!!!!!!!!
@@ -183,13 +185,13 @@ END IF
 !!!!!!!!!!!!
 !
 DO JK=D%NKTB,D%NKTE
-  DO JIJ=1,D%NIJT
+  DO JIJ=IIJB,IIJE
     ZDELTVPT(JIJ,JK) = ZVPT(JIJ,JK) - ZVPT(JIJ,JK-D%NKL)
     ZHLVPT(JIJ,JK) = 0.5 * ( ZVPT(JIJ,JK) + ZVPT(JIJ,JK-D%NKL) )
   END DO
 END DO
 !
-DO JIJ=1,D%NIJT
+DO JIJ=IIJB,IIJE
   ZDELTVPT(JIJ,D%NKU) = ZVPT(JIJ,D%NKU) - ZVPT(JIJ,D%NKU-D%NKL)
   ZDELTVPT(JIJ,D%NKA) = 0.
   ZHLVPT(JIJ,D%NKU) = 0.5 * ( ZVPT(JIJ,D%NKU) + ZVPT(JIJ,D%NKU-D%NKL) )
@@ -197,7 +199,7 @@ DO JIJ=1,D%NIJT
 END DO
 !
 DO JK=1,D%NKT
-  DO JIJ=1,D%NIJT
+  DO JIJ=IIJB,IIJE
     IF(ABS(ZDELTVPT(JIJ,JK))<CSTURB%XLINF) THEN
       ZDELTVPT(JIJ,JK)=CSTURB%XLINF
     END IF
@@ -215,13 +217,13 @@ DO JK=D%NKTB,D%NKTE
 !
 !*       4.  mixing length for a downwards displacement
 !            ------------------------------------------
-  ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK)
+  ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK)
   ZLWORK=0.
   ZTESTM=1.
   DO JKK=JK,D%NKB,-D%NKL
     IF(ZTESTM > 0.) THEN
       ZTESTM=0.
-      DO JIJ=1,D%NIJT
+      DO JIJ=IIJB,IIJE
         ZTEST0=0.5+SIGN(0.5,ZINTE(JIJ))
         !--------- SHEAR + STABILITY -----------
         ZPOTE = ZTEST0* &
@@ -255,7 +257,7 @@ DO JK=D%NKTB,D%NKTE
 !*       5.  intermediate storage of the final mixing length
 !            -----------------------------------------------
 !
-  DO JIJ=1,D%NIJT
+  DO JIJ=IIJB,IIJE
     PLMDN(JIJ,JK)=MIN(ZLWORK(JIJ),0.5*(PZZ(JIJ,JK)+PZZ(JIJ,JK+D%NKL))-PZZ(JIJ,D%NKB))
   END DO
 !
@@ -264,14 +266,14 @@ DO JK=D%NKTB,D%NKTE
 !*       6.  mixing length for an upwards displacement
 !            -----------------------------------------
 !
-  ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK)
-  ZLWORK(D%NIJB:D%NIJE)=0.
+  ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK)
+  ZLWORK(IIJB:IIJE)=0.
   ZTESTM=1.
 !
   DO JKK=JK+D%NKL,D%NKE,D%NKL
     IF(ZTESTM > 0.) THEN
       ZTESTM=0.
-      DO JIJ=1,D%NIJT
+      DO JIJ=IIJB,IIJE
         ZTEST0=0.5+SIGN(0.5,ZINTE(JIJ))
         !--------- SHEAR + STABILITY -----------
         ZPOTE = ZTEST0* &
@@ -304,7 +306,7 @@ DO JK=D%NKTB,D%NKTE
 !
 !*       7.  final mixing length
 !
-  DO JIJ=1,D%NIJT
+  DO JIJ=IIJB,IIJE
     ZLWORK1=MAX(PLMDN(JIJ,JK),1.E-10_MNHREAL)
     ZLWORK2=MAX(ZLWORK(JIJ),1.E-10_MNHREAL)
     ZPOTE = ZLWORK1 / ZLWORK2
@@ -330,9 +332,9 @@ END DO
 !*       9.  boundaries
 !            ----------
 !
-PLM(D%NIJB:D%NIJE,D%NKA)=PLM(D%NIJB:D%NIJE,D%NKB)
-PLM(D%NIJB:D%NIJE,D%NKE)=PLM(D%NIJB:D%NIJE,D%NKE-D%NKL)
-PLM(D%NIJB:D%NIJE,D%NKU)=PLM(D%NIJB:D%NIJE,D%NKE-D%NKL)
+PLM(IIJB:IIJE,D%NKA)=PLM(IIJB:IIJE,D%NKB)
+PLM(IIJB:IIJE,D%NKE)=PLM(IIJB:IIJE,D%NKE-D%NKL)
+PLM(IIJB:IIJE,D%NKU)=PLM(IIJB:IIJE,D%NKE-D%NKL)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_rmc01.F90 b/src/common/turb/mode_rmc01.F90
index f15d2d9a3..9faf02606 100644
--- a/src/common/turb/mode_rmc01.F90
+++ b/src/common/turb/mode_rmc01.F90
@@ -79,7 +79,7 @@ REAL, DIMENSION(D%NIJT,D%NKT),   INTENT(INOUT) :: PLEPS ! Dissipative length
 INTEGER :: IKB,IKE    ! first,last physical level
 INTEGER :: IKTB,IKTE  ! start, end of k loops in physical domain
 INTEGER :: JK,JIJ   ! loop counter
-INTEGER :: IIE,IIB,IJE,IJB
+INTEGER :: IIJB,IIJE
 !
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZZZ  ! height of mass
                                                              ! points above ground
@@ -109,23 +109,21 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
-IIE=D%NIEC
-IIB=D%NIBC
-IJE=D%NJEC
-IJB=D%NJBC
+IIJB=D%NIJB
+IIJE=D%NIJE
 !
 ! altitude of mass points
 CALL MZF_PHY(D,PZZ,ZZZ)
 ! replace by height of mass points
 DO JK=1,D%NKT
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZZZ(D%NIJB:D%NIJE,JK) = ZZZ(D%NIJB:D%NIJE,JK) - PZZ(D%NIJB:D%NIJE,IKB)
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZZZ(IIJB:IIJE,JK) = ZZZ(IIJB:IIJE,JK) - PZZ(IIJB:IIJE,IKB)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 ! fill upper level with physical value
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZZZ(D%NIJB:D%NIJE,D%NKU) = 2.*ZZZ(D%NIJB:D%NIJE,D%NKU-D%NKL) - ZZZ(D%NIJB:D%NIJE,D%NKU-2*D%NKL)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZZZ(IIJB:IIJE,D%NKU) = 2.*ZZZ(IIJB:IIJE,D%NKU-D%NKL) - ZZZ(IIJB:IIJE,D%NKU-2*D%NKL)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -134,18 +132,18 @@ ZZZ(D%NIJB:D%NIJE,D%NKU) = 2.*ZZZ(D%NIJB:D%NIJE,D%NKU-D%NKL) - ZZZ(D%NIJB:D%NIJE
 !
 ! z/LMO
 DO JK=1,D%NKT
-  !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-  WHERE (PLMO(D%NIJB:D%NIJE)==XUNDEF)
-    ZZ_O_LMO(D%NIJB:D%NIJE,JK)=0.
+  !$mnh_expand_where(JIJ=IIJB:IIJE)
+  WHERE (PLMO(IIJB:IIJE)==XUNDEF)
+    ZZ_O_LMO(IIJB:IIJE,JK)=0.
   ELSEWHERE
-    ZZ_O_LMO(D%NIJB:D%NIJE,JK)=ZZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE)/PLMO(D%NIJB:D%NIJE)
+    ZZ_O_LMO(IIJB:IIJE,JK)=ZZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE)/PLMO(IIJB:IIJE)
   END WHERE
-  !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_where(JIJ=IIJB:IIJE)
 END DO
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT) = MAX(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT),-10.)
-ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT) = MIN(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT), 10.)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+ZZ_O_LMO(IIJB:IIJE,1:D%NKT) = MAX(ZZ_O_LMO(IIJB:IIJE,1:D%NKT),-10.)
+ZZ_O_LMO(IIJB:IIJE,1:D%NKT) = MIN(ZZ_O_LMO(IIJB:IIJE,1:D%NKT), 10.)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
 !
 ! MO function for stress
@@ -169,42 +167,42 @@ SELECT CASE (HTURBLEN)
   CASE ('DELT','DEAR')
     CALL MXF_PHY(D,PDXX,ZWORK1)
     CALL MYF_PHY(D,PDYY,ZWORK2)
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-    ZDH(D%NIJB:D%NIJE,1:D%NKT) = SQRT(ZWORK1(D%NIJB:D%NIJE,1:D%NKT)*ZWORK2(D%NIJB:D%NIJE,1:D%NKT))
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+    ZDH(IIJB:IIJE,1:D%NKT) = SQRT(ZWORK1(IIJB:IIJE,1:D%NKT)*ZWORK2(IIJB:IIJE,1:D%NKT))
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
     ZDH(D%NIT*IJB:D%NIT*IJE:D%NIT,1:D%NKT) = ZDH(D%NIT*IJB-1:D%NIT*IJE-1:D%NIT,1:D%NKT)
     ZDH(D%NIJT-IIE+IIB:D%NIJT,1:D%NKT) = ZDH(D%NIJT-2*IIE+IIB:D%NIJT-IIE,1:D%NKT)
     DO JK=1,D%NKT
-      !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-      ZZC(D%NIJB:D%NIJE,JK) = 2.*MIN(ZPHIM(D%NIJB:D%NIJE,JK),1.)/CST%XKARMAN    &
-                     * MAX( PDZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE) , & 
-                     ZDH(D%NIJB:D%NIJE,JK)/PDIRCOSZW(D%NIJB:D%NIJE)/3. )
-      !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+      !$mnh_expand_array(JIJ=IIJB:IIJE)
+      ZZC(IIJB:IIJE,JK) = 2.*MIN(ZPHIM(IIJB:IIJE,JK),1.)/CST%XKARMAN    &
+                     * MAX( PDZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE) , & 
+                     ZDH(IIJB:IIJE,JK)/PDIRCOSZW(IIJB:IIJE)/3. )
+      !$mnh_end_expand_array(JIJ=IIJB:IIJE)
     END DO
 !
 !*     4. factor controling the transition between SBL and free isotropic turb. (3D case)
 !         --------------------------------------------------------------------
 !
-    ZGAM(D%NIJB:D%NIJE,D%NKA) = 0.
+    ZGAM(IIJB:IIJE,D%NKA) = 0.
     DO JK=IKTB,IKTE
-      !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-      ZGAM(D%NIJB:D%NIJE,JK) = 1.  - EXP( -3.*(ZZZ(D%NIJB:D%NIJE,JK)-ZZZ(D%NIJB:D%NIJE,IKB))/(ZZC(D%NIJB:D%NIJE,JK)) )
-      !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
-      !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-      WHERE (ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>ZGAM(D%NIJB:D%NIJE,JK) .OR. ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>0.99 ) 
-        ZGAM(D%NIJB:D%NIJE,JK) = 1.
+      !$mnh_expand_array(JIJ=IIJB:IIJE)
+      ZGAM(IIJB:IIJE,JK) = 1.  - EXP( -3.*(ZZZ(IIJB:IIJE,JK)-ZZZ(IIJB:IIJE,IKB))/(ZZC(IIJB:IIJE,JK)) )
+      !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+      !$mnh_expand_where(JIJ=IIJB:IIJE)
+      WHERE (ZGAM(IIJB:IIJE,JK-D%NKL)>ZGAM(IIJB:IIJE,JK) .OR. ZGAM(IIJB:IIJE,JK-D%NKL)>0.99 ) 
+        ZGAM(IIJB:IIJE,JK) = 1.
       END WHERE
-     !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+     !$mnh_end_expand_where(JIJ=IIJB:IIJE)
     END DO
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZGAM(D%NIJB:D%NIJE,D%NKU) = 1.  - EXP( -3.*(ZZZ(D%NIJB:D%NIJE,D%NKU)-ZZZ(D%NIJB:D%NIJE,IKB))& 
-                                   /(ZZC(D%NIJB:D%NIJE,D%NKU)) )
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
-    !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-    WHERE (ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>ZGAM(D%NIJB:D%NIJE,D%NKU) .OR. ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>0.99 ) 
-      ZGAM(D%NIJB:D%NIJE,D%NKU) = 1.
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZGAM(IIJB:IIJE,D%NKU) = 1.  - EXP( -3.*(ZZZ(IIJB:IIJE,D%NKU)-ZZZ(IIJB:IIJE,IKB))& 
+                                   /(ZZC(IIJB:IIJE,D%NKU)) )
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
+    !$mnh_expand_where(JIJ=IIJB:IIJE)
+    WHERE (ZGAM(IIJB:IIJE,D%NKU-D%NKL)>ZGAM(IIJB:IIJE,D%NKU) .OR. ZGAM(IIJB:IIJE,D%NKU-D%NKL)>0.99 ) 
+      ZGAM(IIJB:IIJE,D%NKU) = 1.
     END WHERE
-    !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !   
 !
 !-------------------------------------------------------------------------------
@@ -214,30 +212,30 @@ SELECT CASE (HTURBLEN)
 !
   CASE DEFAULT
 !* SBL depth is used
-    ZGAM(D%NIJB:D%NIJE,1:D%NKT) = 1.
-    ZGAM(D%NIJB:D%NIJE,D%NKA) = 0.
+    ZGAM(IIJB:IIJE,1:D%NKT) = 1.
+    ZGAM(IIJB:IIJE,D%NKA) = 0.
     DO JK=IKTB,IKTE
-      !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-      WHERE(PSBL_DEPTH(D%NIJB:D%NIJE)>0.)
-        ZGAM(D%NIJB:D%NIJE,JK) = TANH( (ZZZ(D%NIJB:D%NIJE,JK)-ZZZ(D%NIJB:D%NIJE,IKB))/PSBL_DEPTH(D%NIJB:D%NIJE) )
+      !$mnh_expand_where(JIJ=IIJB:IIJE)
+      WHERE(PSBL_DEPTH(IIJB:IIJE)>0.)
+        ZGAM(IIJB:IIJE,JK) = TANH( (ZZZ(IIJB:IIJE,JK)-ZZZ(IIJB:IIJE,IKB))/PSBL_DEPTH(IIJB:IIJE) )
       END WHERE
-      !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
-      !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-      WHERE (ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>0.99 ) 
-        ZGAM(D%NIJB:D%NIJE,JK) = 1.
+      !$mnh_end_expand_where(JIJ=IIJB:IIJE)
+      !$mnh_expand_where(JIJ=IIJB:IIJE)
+      WHERE (ZGAM(IIJB:IIJE,JK-D%NKL)>0.99 ) 
+        ZGAM(IIJB:IIJE,JK) = 1.
       END WHERE
-      !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+      !$mnh_end_expand_where(JIJ=IIJB:IIJE)
     END DO
-    !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-    WHERE(PSBL_DEPTH(D%NIJB:D%NIJE)>0.)
-      ZGAM(D%NIJB:D%NIJE,D%NKU) = TANH( (ZZZ(D%NIJB:D%NIJE,D%NKU)-ZZZ(D%NIJB:D%NIJE,IKB))/PSBL_DEPTH(D%NIJB:D%NIJE) )
+    !$mnh_expand_where(JIJ=IIJB:IIJE)
+    WHERE(PSBL_DEPTH(IIJB:IIJE)>0.)
+      ZGAM(IIJB:IIJE,D%NKU) = TANH( (ZZZ(IIJB:IIJE,D%NKU)-ZZZ(IIJB:IIJE,IKB))/PSBL_DEPTH(IIJB:IIJE) )
     END WHERE
-   !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
-   !$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
-    WHERE (ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>0.99 ) 
-      ZGAM(D%NIJB:D%NIJE,JK) = 1.
+   !$mnh_end_expand_where(JIJ=IIJB:IIJE)
+   !$mnh_expand_where(JIJ=IIJB:IIJE)
+    WHERE (ZGAM(IIJB:IIJE,D%NKU-D%NKL)>0.99 ) 
+      ZGAM(IIJB:IIJE,JK) = 1.
     END WHERE
-    !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 END SELECT
@@ -247,44 +245,44 @@ END SELECT
 !         ---------------------------------
 !
 DO JK=1,D%NKT
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZL(D%NIJB:D%NIJE,JK) =  CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS                                      &
-              * ZZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE)/(ZPHIM(D%NIJB:D%NIJE,JK)**2*SQRT(ZPHIE(D%NIJB:D%NIJE,JK)))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZL(IIJB:IIJE,JK) =  CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS                                      &
+              * ZZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE)/(ZPHIM(IIJB:IIJE,JK)**2*SQRT(ZPHIE(IIJB:IIJE,JK)))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-PLK(D%NIJB:D%NIJE,1:D%NKT)=(1.-ZGAM(D%NIJB:D%NIJE,1:D%NKT))*ZL(D%NIJB:D%NIJE,1:D%NKT) &
-                             +ZGAM(D%NIJB:D%NIJE,1:D%NKT)*PLK(D%NIJB:D%NIJE,1:D%NKT)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+PLK(IIJB:IIJE,1:D%NKT)=(1.-ZGAM(IIJB:IIJE,1:D%NKT))*ZL(IIJB:IIJE,1:D%NKT) &
+                             +ZGAM(IIJB:IIJE,1:D%NKT)*PLK(IIJB:IIJE,1:D%NKT)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-PLK(D%NIJB:D%NIJE,D%NKA) = PLK(D%NIJB:D%NIJE,IKB)
-PLK(D%NIJB:D%NIJE,D%NKU) = PLK(D%NIJB:D%NIJE,IKE)
+PLK(IIJB:IIJE,D%NKA) = PLK(IIJB:IIJE,IKB)
+PLK(IIJB:IIJE,D%NKU) = PLK(IIJB:IIJE,IKE)
 !-------------------------------------------------------------------------------
 !
 !*     7. Modification of the dissipative length
 !         --------------------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) &
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) &
         / (CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-!$mnh_expand_where(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-WHERE (ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT)<0.)
-  ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT)/(1.-1.9*ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT))
+!$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:D%NKT)
+WHERE (ZZ_O_LMO(IIJB:IIJE,1:D%NKT)<0.)
+  ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT)/(1.-1.9*ZZ_O_LMO(IIJB:IIJE,1:D%NKT))
 ELSEWHERE
-  ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT)))
+  ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(IIJB:IIJE,1:D%NKT)))
 END WHERE
-!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-PLEPS(D%NIJB:D%NIJE,1:D%NKT)=(1.-ZGAM(D%NIJB:D%NIJE,1:D%NKT))*ZL(D%NIJB:D%NIJE,1:D%NKT) &
-                               +ZGAM(D%NIJB:D%NIJE,1:D%NKT)*PLEPS(D%NIJB:D%NIJE,1:D%NKT)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+PLEPS(IIJB:IIJE,1:D%NKT)=(1.-ZGAM(IIJB:IIJE,1:D%NKT))*ZL(IIJB:IIJE,1:D%NKT) &
+                               +ZGAM(IIJB:IIJE,1:D%NKT)*PLEPS(IIJB:IIJE,1:D%NKT)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
-PLEPS(D%NIJB:D%NIJE,D%NKA) = PLEPS(D%NIJB:D%NIJE,IKB)
-PLEPS(D%NIJB:D%NIJE,D%NKU) = PLEPS(D%NIJB:D%NIJE,IKE)
+PLEPS(IIJB:IIJE,D%NKA) = PLEPS(IIJB:IIJE,IKB)
+PLEPS(IIJB:IIJE,D%NKU) = PLEPS(IIJB:IIJE,IKE)
 !-------------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE)
diff --git a/src/common/turb/mode_tridiag.F90 b/src/common/turb/mode_tridiag.F90
index 78a23b2cf..fe9729a90 100644
--- a/src/common/turb/mode_tridiag.F90
+++ b/src/common/turb/mode_tridiag.F90
@@ -141,7 +141,8 @@ REAL, DIMENSION(D%NIJT)         :: ZBET
 INTEGER                              :: JIJ,JK            ! loop counter
 INTEGER                              :: IKB,IKE       ! inner vertical limits
 INTEGER                              :: IKT           ! array size in k direction
-INTEGER                              :: IKTB,IKTE     ! start, end of k loops in physical domain 
+INTEGER                              :: IKTB,IKTE     ! start, end of k loops in physical domain
+INTEGER                              :: IIJB, IIJE    ! start, end of ij loops in physical domain
 
 !
 ! ---------------------------------------------------------------------------
@@ -157,28 +158,30 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIJB=D%NIJB
+IIJE=D%NIJE
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) -   &
-  PEXPL / PRHODJ(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) * &
-  (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB)  + PTSTEP*PSOURCE(IIJB:IIJE,IKB) -   &
+  PEXPL / PRHODJ(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) * &
+  (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) -               &
-      PEXPL / PRHODJ(D%NIJB:D%NIJE,JK) *                                           &
-                             ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK)                &
-                              -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL))   &
-                              +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL)              &
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK)  + PTSTEP*PSOURCE(IIJB:IIJE,JK) -               &
+      PEXPL / PRHODJ(IIJB:IIJE,JK) *                                           &
+                             ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK)                &
+                              -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL))   &
+                              +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL)              &
                              ) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 ! 
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) +               &
-  PEXPL / PRHODJ(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) +               &
+  PEXPL / PRHODJ(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !
 !*       2.  INVERSION OF THE TRIDIAGONAL SYSTEM
@@ -189,52 +192,52 @@ IF ( PIMPL > 1.E-10 ) THEN
   !
   !  going up
   !
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJ(D%NIJB:D%NIJE,IKB)  ! bet = b(ikb)
-  PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE)
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)               
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZBET(IIJB:IIJE) = 1. - PIMPL * PA(IIJB:IIJE,IKB+D%NKL) / PRHODJ(IIJB:IIJE,IKB)  ! bet = b(ikb)
+  PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)               
   !
   DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE)  
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE)  
                                                     ! gam(k) = c(k-1) / bet
-    ZBET(D%NIJB:D%NIJE)    = 1. - PIMPL * (  PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK))  &
-                                 + PA(D%NIJB:D%NIJE,JK+D%NKL)                      &
-                                ) / PRHODJ(D%NIJB:D%NIJE,JK)  
+    ZBET(IIJB:IIJE)    = 1. - PIMPL * (  PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK))  &
+                                 + PA(IIJB:IIJE,JK+D%NKL)                      &
+                                ) / PRHODJ(IIJB:IIJE,JK)  
                                                     ! bet = b(k) - a(k)* gam(k)  
-    PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK) &
-                    * PVARP(D%NIJB:D%NIJE,JK-D%NKL)                                 &
-                   ) / ZBET(D%NIJB:D%NIJE)
+    PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) &
+                    * PVARP(IIJB:IIJE,JK-D%NKL)                                 &
+                   ) / ZBET(IIJB:IIJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
   ! special treatment for the last level
-  ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) 
+  ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) 
                                                     ! gam(k) = c(k-1) / bet
-  ZBET(D%NIJB:D%NIJE)    = 1. - PIMPL * (  PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE))  &
-                              ) / PRHODJ(D%NIJB:D%NIJE,IKE)  
+  ZBET(IIJB:IIJE)    = 1. - PIMPL * (  PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE))  &
+                              ) / PRHODJ(IIJB:IIJE,IKE)  
                                                     ! bet = b(k) - a(k)* gam(k)  
-  PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE) &
-                                * PVARP(D%NIJB:D%NIJE,IKE-D%NKL)                      &
-                 ) / ZBET(D%NIJB:D%NIJE)
+  PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) &
+                                * PVARP(IIJB:IIJE,IKE-D%NKL)                      &
+                 ) / ZBET(IIJB:IIJE)
                                        ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
   !
   !  going down
   !
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   DO JK = IKE-D%NKL,IKB,-1*D%NKL
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) 
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 ELSE
 ! 
   DO JK=IKTB,IKTE
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 END IF 
@@ -243,10 +246,10 @@ END IF
 !*       3.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB)
-PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB)
+PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_tridiag_thermo.F90 b/src/common/turb/mode_tridiag_thermo.F90
index 2d10fbc7a..037563f68 100644
--- a/src/common/turb/mode_tridiag_thermo.F90
+++ b/src/common/turb/mode_tridiag_thermo.F90
@@ -154,6 +154,7 @@ INTEGER             :: JIJ,JK            ! loop counter
 INTEGER             :: IKB,IKE ! inner limits
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
+INTEGER             :: IIJB, IIJE    ! start, end of ij loops in physical domain
 !
 ! ---------------------------------------------------------------------------
 !                                              
@@ -167,12 +168,14 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIJB=D%NIJB
+IIJE=D%NIJE
 !
 CALL MZM_PHY(D,PRHODJ,ZMZM_RHODJ)
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
-ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,1:D%NKT) = ZMZM_RHODJ(D%NIJB:D%NIJE,1:D%NKT)*PDFDDTDZ(D%NIJB:D%NIJE,1:D%NKT) &
-                                                /PDZZ(D%NIJB:D%NIJE,1:D%NKT)**2
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,1:D%NKT) = ZMZM_RHODJ(IIJB:IIJE,1:D%NKT)*PDFDDTDZ(IIJB:IIJE,1:D%NKT) &
+                                                /PDZZ(IIJB:IIJE,1:D%NKT)**2
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
 !
 ZA=0.
 ZB=0.
@@ -183,33 +186,33 @@ ZY=0.
 !*      2.  COMPUTE THE RIGHT HAND SIDE
 !           ---------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKB) = PRHODJ(D%NIJB:D%NIJE,IKB)*PVARM(D%NIJB:D%NIJE,IKB)/PTSTEP                  &
-    - ZMZM_RHODJ(D%NIJB:D%NIJE,IKB+D%NKL) * PF(D%NIJB:D%NIJE,IKB+D%NKL)/PDZZ(D%NIJB:D%NIJE,IKB+D%NKL)    &
-    + ZMZM_RHODJ(D%NIJB:D%NIJE,IKB  ) * PF(D%NIJB:D%NIJE,IKB  )/PDZZ(D%NIJB:D%NIJE,IKB  )          &
-    + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,IKB+D%NKL) &
-    - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,IKB  )
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)*PVARM(IIJB:IIJE,IKB)/PTSTEP                  &
+    - ZMZM_RHODJ(IIJB:IIJE,IKB+D%NKL) * PF(IIJB:IIJE,IKB+D%NKL)/PDZZ(IIJB:IIJE,IKB+D%NKL)    &
+    + ZMZM_RHODJ(IIJB:IIJE,IKB  ) * PF(IIJB:IIJE,IKB  )/PDZZ(IIJB:IIJE,IKB  )          &
+    + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL * PVARM(IIJB:IIJE,IKB+D%NKL) &
+    - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL * PVARM(IIJB:IIJE,IKB  )
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZY(D%NIJB:D%NIJE,JK) = PRHODJ(D%NIJB:D%NIJE,JK)*PVARM(D%NIJB:D%NIJE,JK)/PTSTEP                 &
-    - ZMZM_RHODJ(D%NIJB:D%NIJE,JK+D%NKL) * PF(D%NIJB:D%NIJE,JK+D%NKL)/PDZZ(D%NIJB:D%NIJE,JK+D%NKL)     &
-    + ZMZM_RHODJ(D%NIJB:D%NIJE,JK  ) * PF(D%NIJB:D%NIJE,JK  )/PDZZ(D%NIJB:D%NIJE,JK  )           &
-    + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,JK+D%NKL) &
-    - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,JK  )   &
-    - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK    ) * PIMPL * PVARM(D%NIJB:D%NIJE,JK  )   &
-    + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK    ) * PIMPL * PVARM(D%NIJB:D%NIJE,JK-D%NKL)
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZY(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)*PVARM(IIJB:IIJE,JK)/PTSTEP                 &
+    - ZMZM_RHODJ(IIJB:IIJE,JK+D%NKL) * PF(IIJB:IIJE,JK+D%NKL)/PDZZ(IIJB:IIJE,JK+D%NKL)     &
+    + ZMZM_RHODJ(IIJB:IIJE,JK  ) * PF(IIJB:IIJE,JK  )/PDZZ(IIJB:IIJE,JK  )           &
+    + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL * PVARM(IIJB:IIJE,JK+D%NKL) &
+    - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL * PVARM(IIJB:IIJE,JK  )   &
+    - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK    ) * PIMPL * PVARM(IIJB:IIJE,JK  )   &
+    + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK    ) * PIMPL * PVARM(IIJB:IIJE,JK-D%NKL)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 ! 
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKE) = PRHODJ(D%NIJB:D%NIJE,IKE)*PVARM(D%NIJB:D%NIJE,IKE)/PTSTEP               &
-    - ZMZM_RHODJ(D%NIJB:D%NIJE,IKE+D%NKL) * PF(D%NIJB:D%NIJE,IKE+D%NKL)/PDZZ(D%NIJB:D%NIJE,IKE+D%NKL) &
-    + ZMZM_RHODJ(D%NIJB:D%NIJE,IKE  ) * PF(D%NIJB:D%NIJE,IKE  )/PDZZ(D%NIJB:D%NIJE,IKE  )       &
-    - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL * PVARM(D%NIJB:D%NIJE,IKE  )   &
-    + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL * PVARM(D%NIJB:D%NIJE,IKE-D%NKL)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)*PVARM(IIJB:IIJE,IKE)/PTSTEP               &
+    - ZMZM_RHODJ(IIJB:IIJE,IKE+D%NKL) * PF(IIJB:IIJE,IKE+D%NKL)/PDZZ(IIJB:IIJE,IKE+D%NKL) &
+    + ZMZM_RHODJ(IIJB:IIJE,IKE  ) * PF(IIJB:IIJE,IKE  )/PDZZ(IIJB:IIJE,IKE  )       &
+    - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL * PVARM(IIJB:IIJE,IKE  )   &
+    + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL * PVARM(IIJB:IIJE,IKE-D%NKL)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !
 !*       3.  INVERSION OF THE TRIDIAGONAL SYSTEM
@@ -220,72 +223,72 @@ IF ( PIMPL > 1.E-10 ) THEN
 !*       3.1 arrays A, B, C
 !            --------------
 !
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZB(D%NIJB:D%NIJE,IKB) =   PRHODJ(D%NIJB:D%NIJE,IKB)/PTSTEP                   &
-                - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL
-  ZC(D%NIJB:D%NIJE,IKB) =   ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZB(IIJB:IIJE,IKB) =   PRHODJ(IIJB:IIJE,IKB)/PTSTEP                   &
+                - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL
+  ZC(IIJB:IIJE,IKB) =   ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
   DO JK=IKTB+1,IKTE-1
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZA(D%NIJB:D%NIJE,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK) * PIMPL
-    ZB(D%NIJB:D%NIJE,JK) =   PRHODJ(D%NIJB:D%NIJE,JK)/PTSTEP                        &
-                            - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL &
-                            - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK) * PIMPL
-    ZC(D%NIJB:D%NIJE,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZA(IIJB:IIJE,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK) * PIMPL
+    ZB(IIJB:IIJE,JK) =   PRHODJ(IIJB:IIJE,JK)/PTSTEP                        &
+                            - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL &
+                            - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK) * PIMPL
+    ZC(IIJB:IIJE,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZA(D%NIJB:D%NIJE,IKE) =   ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE  ) * PIMPL
-  ZB(D%NIJB:D%NIJE,IKE) =   PRHODJ(D%NIJB:D%NIJE,IKE)/PTSTEP                   &
-                - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE  ) * PIMPL
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZA(IIJB:IIJE,IKE) =   ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE  ) * PIMPL
+  ZB(IIJB:IIJE,IKE) =   PRHODJ(IIJB:IIJE,IKE)/PTSTEP                   &
+                - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE  ) * PIMPL
 !
 !*       3.2 going up
 !            --------
 !
-  ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,IKB)  ! bet = b(ikb)
-  PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE)
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKB)  ! bet = b(ikb)
+  PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 
   !
   DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZGAM(D%NIJB:D%NIJE,JK) = ZC(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE)  
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZGAM(IIJB:IIJE,JK) = ZC(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE)  
                                                     ! gam(k) = c(k-1) / bet
-    ZBET(D%NIJB:D%NIJE)    = ZB(D%NIJB:D%NIJE,JK) - ZA(D%NIJB:D%NIJE,JK) * ZGAM(D%NIJB:D%NIJE,JK)
+    ZBET(IIJB:IIJE)    = ZB(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * ZGAM(IIJB:IIJE,JK)
                                                     ! bet = b(k) - a(k)* gam(k)  
-    PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - ZA(D%NIJB:D%NIJE,JK) * PVARP(D%NIJB:D%NIJE,JK-D%NKL) ) &
-                               / ZBET(D%NIJB:D%NIJE)
+    PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * PVARP(IIJB:IIJE,JK-D%NKL) ) &
+                               / ZBET(IIJB:IIJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO 
   ! special treatment for the last level
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZGAM(D%NIJB:D%NIJE,IKE) = ZC(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) 
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZGAM(IIJB:IIJE,IKE) = ZC(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) 
                                                     ! gam(k) = c(k-1) / bet
-  ZBET(D%NIJB:D%NIJE)     = ZB(D%NIJB:D%NIJE,IKE) - ZA(D%NIJB:D%NIJE,IKE) * ZGAM(D%NIJB:D%NIJE,IKE)
+  ZBET(IIJB:IIJE)     = ZB(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * ZGAM(IIJB:IIJE,IKE)
                                                     ! bet = b(k) - a(k)* gam(k)  
-  PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - ZA(D%NIJB:D%NIJE,IKE) * PVARP(D%NIJB:D%NIJE,IKE-D%NKL) ) &
-                              / ZBET(D%NIJB:D%NIJE)
+  PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * PVARP(IIJB:IIJE,IKE-D%NKL) ) &
+                              / ZBET(IIJB:IIJE)
                                        ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !*       3.3 going down
 !            ----------
 !
   DO JK = IKE-D%NKL,IKB,-1*D%NKL
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 ELSE
 ! 
   DO JK=IKTB,IKTE
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK) * PTSTEP / PRHODJ(D%NIJB:D%NIJE,JK)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) * PTSTEP / PRHODJ(IIJB:IIJE,JK)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 END IF 
@@ -294,10 +297,10 @@ END IF
 !*       4.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB)
-PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB)
+PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90
index 2b3f97af2..533664d70 100644
--- a/src/common/turb/mode_tridiag_tke.F90
+++ b/src/common/turb/mode_tridiag_tke.F90
@@ -142,6 +142,7 @@ INTEGER             :: JIJ,JK     ! loop counter
 INTEGER             :: IKB,IKE      ! inner vertical limits
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain
+INTEGER             :: IIJB, IIJE   ! start, end of ij loops in physical domain
 !
 ! ---------------------------------------------------------------------------
 !                                              
@@ -156,28 +157,30 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIJB=D%NIJB
+IIJE=D%NIJE
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) -   &
-  PEXPL / PRHODJ(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) *  & 
-  (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB)  + PTSTEP*PSOURCE(IIJB:IIJE,IKB) -   &
+  PEXPL / PRHODJ(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) *  & 
+  (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) -               &
-      PEXPL / PRHODJ(D%NIJB:D%NIJE,JK) *                                           &
-                             ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK)                &
-                              -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL))   &
-                              +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL)              &
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK)  + PTSTEP*PSOURCE(IIJB:IIJE,JK) -               &
+      PEXPL / PRHODJ(IIJB:IIJE,JK) *                                           &
+                             ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK)                &
+                              -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL))   &
+                              +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL)              &
                              ) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 ! 
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) +               &
-  PEXPL / PRHODJ(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) +               &
+  PEXPL / PRHODJ(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !
 !*       2.  INVERSION OF THE TRIDIAGONAL SYSTEM
@@ -188,55 +191,55 @@ IF ( PIMPL > 1.E-10 ) THEN
   !
   !  going up
   !
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZBET(D%NIJB:D%NIJE) = 1. + PIMPL * (PDIAG(D%NIJB:D%NIJE,IKB)-PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJ(D%NIJB:D%NIJE,IKB))
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZBET(IIJB:IIJE) = 1. + PIMPL * (PDIAG(IIJB:IIJE,IKB)-PA(IIJB:IIJE,IKB+D%NKL) / PRHODJ(IIJB:IIJE,IKB))
                                                     ! bet = b(ikb)
-  PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE)                
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)               
+  PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE)                
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)               
   !
   DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE)  
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE)  
                                                     ! gam(k) = c(k-1) / bet
-    ZBET(D%NIJB:D%NIJE)    = 1. + PIMPL * ( PDIAG(D%NIJB:D%NIJE,JK) -                     &
-                                 (  PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK))  &
-                                  + PA(D%NIJB:D%NIJE,JK+D%NKL)                      &
-                                 ) / PRHODJ(D%NIJB:D%NIJE,JK)                   &
+    ZBET(IIJB:IIJE)    = 1. + PIMPL * ( PDIAG(IIJB:IIJE,JK) -                     &
+                                 (  PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK))  &
+                                  + PA(IIJB:IIJE,JK+D%NKL)                      &
+                                 ) / PRHODJ(IIJB:IIJE,JK)                   &
                                 )                   ! bet = b(k) - a(k)* gam(k)  
-    PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK) &
-                    * PVARP(D%NIJB:D%NIJE,JK-D%NKL)                                 &
-                   ) / ZBET(D%NIJB:D%NIJE)
+    PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) &
+                    * PVARP(IIJB:IIJE,JK-D%NKL)                                 &
+                   ) / ZBET(IIJB:IIJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
   ! special treatment for the last level
-  ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) 
+  ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) 
                                                     ! gam(k) = c(k-1) / bet
-  ZBET(D%NIJB:D%NIJE)    = 1. + PIMPL * ( PDIAG(D%NIJB:D%NIJE,IKE) -                   &
-         (  PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE)) ) / PRHODJ(D%NIJB:D%NIJE,IKE) &
+  ZBET(IIJB:IIJE)    = 1. + PIMPL * ( PDIAG(IIJB:IIJE,IKE) -                   &
+         (  PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) ) / PRHODJ(IIJB:IIJE,IKE) &
                               )  
                                                     ! bet = b(k) - a(k)* gam(k)  
-  PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE) &
-                                * PVARP(D%NIJB:D%NIJE,IKE-D%NKL)                      &
-                 ) / ZBET(D%NIJB:D%NIJE)
+  PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) &
+                                * PVARP(IIJB:IIJE,IKE-D%NKL)                      &
+                 ) / ZBET(IIJB:IIJE)
                                        ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
   !
   !  going down
   !
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   DO JK = IKE-D%NKL,IKB,-1*D%NKL
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) 
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 ELSE
 ! 
   DO JK=IKTB,IKTE
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 END IF 
@@ -245,10 +248,10 @@ END IF
 !*       3.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB)
-PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB)
+PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_tridiag_wind.F90 b/src/common/turb/mode_tridiag_wind.F90
index ef323530a..96b79dd53 100644
--- a/src/common/turb/mode_tridiag_wind.F90
+++ b/src/common/turb/mode_tridiag_wind.F90
@@ -147,6 +147,7 @@ INTEGER             :: JIJ,JK     ! loop counter
 INTEGER             :: IKB,IKE      ! inner vertical limits
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
+INTEGER             :: IIJB, IIJE   ! start, end of ij loops in physical domain
 !
 ! ---------------------------------------------------------------------------
 !                                              
@@ -161,28 +162,30 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIJB=D%NIJB
+IIJE=D%NIJE
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) -   &
-  PEXPL / PRHODJA(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) * &
-  (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB)  + PTSTEP*PSOURCE(IIJB:IIJE,IKB) -   &
+  PEXPL / PRHODJA(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) * &
+  (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK)  + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) -               &
-      PEXPL / PRHODJA(D%NIJB:D%NIJE,JK) *                                          &
-                             ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK)                &
-                              -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL))   &
-                              +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL)              &
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK)  + PTSTEP*PSOURCE(IIJB:IIJE,JK) -               &
+      PEXPL / PRHODJA(IIJB:IIJE,JK) *                                          &
+                             ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK)                &
+                              -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL))   &
+                              +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL)              &
                              ) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
 END DO
 ! 
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) +               &
-  PEXPL / PRHODJA(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL))
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) +               &
+  PEXPL / PRHODJA(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL))
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !
 !*       2.  INVERSION OF THE TRIDIAGONAL SYSTEM
@@ -193,53 +196,53 @@ IF ( PIMPL > 1.E-10 ) THEN
   !
   !  going up
   !
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-  ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * (  PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJA(D%NIJB:D%NIJE,IKB) &  
-                            + PCOEFS(D%NIJB:D%NIJE) *  PTSTEP        )   ! bet = b(ikb)
-  PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE)
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)               
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+  ZBET(IIJB:IIJE) = 1. - PIMPL * (  PA(IIJB:IIJE,IKB+D%NKL) / PRHODJA(IIJB:IIJE,IKB) &  
+                            + PCOEFS(IIJB:IIJE) *  PTSTEP        )   ! bet = b(ikb)
+  PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)               
   !
   DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJA(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE)  
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE)  
                                                     ! gam(k) = c(k-1) / bet
-    ZBET(D%NIJB:D%NIJE)    = 1. - PIMPL * (  PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK))  &
-                                 + PA(D%NIJB:D%NIJE,JK+D%NKL)                      &
-                                ) / PRHODJA(D%NIJB:D%NIJE,JK)  
+    ZBET(IIJB:IIJE)    = 1. - PIMPL * (  PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK))  &
+                                 + PA(IIJB:IIJE,JK+D%NKL)                      &
+                                ) / PRHODJA(IIJB:IIJE,JK)  
                                                     ! bet = b(k) - a(k)* gam(k)  
-    PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJA(D%NIJB:D%NIJE,JK) &
-                    * PVARP(D%NIJB:D%NIJE,JK-D%NKL)                                 &
-                   ) / ZBET(D%NIJB:D%NIJE)
+    PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK) &
+                    * PVARP(IIJB:IIJE,JK-D%NKL)                                 &
+                   ) / ZBET(IIJB:IIJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
   ! special treatment for the last level
-  ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJA(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) 
+  ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) 
                                                     ! gam(k) = c(k-1) / bet
-  ZBET(D%NIJB:D%NIJE)    = 1. - PIMPL * (  PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE))  &
-                              ) / PRHODJA(D%NIJB:D%NIJE,IKE)  
+  ZBET(IIJB:IIJE)    = 1. - PIMPL * (  PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE))  &
+                              ) / PRHODJA(IIJB:IIJE,IKE)  
                                                     ! bet = b(k) - a(k)* gam(k)  
-  PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJA(D%NIJB:D%NIJE,IKE) &
-                                 * PVARP(D%NIJB:D%NIJE,IKE-D%NKL)                      &
-                  ) / ZBET(D%NIJB:D%NIJE)
+  PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE) &
+                                 * PVARP(IIJB:IIJE,IKE-D%NKL)                      &
+                  ) / ZBET(IIJB:IIJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
   !
   !  going down
   !
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   DO JK = IKE-D%NKL,IKB,-1*D%NKL
-  !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) 
-  !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+  !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) 
+  !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 ELSE
 ! 
   DO JK=IKTB,IKTE
-    !$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-    PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK)
-    !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+    !$mnh_expand_array(JIJ=IIJB:IIJE)
+    PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK)
+    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   END DO
 !
 END IF 
@@ -248,10 +251,10 @@ END IF
 !*       3.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
-PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB)
-PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE)
-!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB)
+PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !-------------------------------------------------------------------------------
 !
-- 
GitLab