diff --git a/src/arome/aux/mode_fill_dimphyexn.F90 b/src/arome/aux/mode_fill_dimphyexn.F90
index 5df75ef5e5d1d02924f228de45bf4b365ff27d54..daa5cf480bd1fc539e23f122d468cc157474df1d 100644
--- a/src/arome/aux/mode_fill_dimphyexn.F90
+++ b/src/arome/aux/mode_fill_dimphyexn.F90
@@ -73,6 +73,11 @@ YDDIMPHYEX%NKE=1+KVEXT
 YDDIMPHYEX%NKTB=1+KVEXT
 YDDIMPHYEX%NKTE=KKT-KVEXT
 !
+YDDIMPHYEX%NIBC=YDDIMPHYEX%NIB
+YDDIMPHYEX%NJBC=YDDIMPHYEX%NJB
+YDDIMPHYEX%NIEC=YDDIMPHYEX%NIE
+YDDIMPHYEX%NJEC=YDDIMPHYEX%NJE
+!
 IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 1, ZHOOK_HANDLE)
 !
 END SUBROUTINE FILL_DIMPHYEX
diff --git a/src/arome/aux/shuman_phy.F90 b/src/arome/aux/shuman_phy.F90
new file mode 100644
index 0000000000000000000000000000000000000000..f7d9c5bd2d7acb3101d1399e01374cc5d541fd57
--- /dev/null
+++ b/src/arome/aux/shuman_phy.F90
@@ -0,0 +1,85 @@
+MODULE SHUMAN_PHY
+IMPLICIT NONE
+CONTAINS
+!     ###############################
+      SUBROUTINE MZM_PHY(D,PA,PMZM)
+!     ###############################
+      USE PARKIND1, ONLY : JPRB
+      USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!     ###############################
+!
+!!****  *MZM* -  Shuman operator : mean operator in z direction for a
+!!                                 mass variable
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this function  is to compute a mean
+!     along the z direction (K index) for a field PA localized at a mass
+!     point. The result is localized at a z-flux point (w point).
+!
+!!**  METHOD
+!!    ------
+!!        The result PMZM(:,:,k) is defined by 0.5*(PA(:,:,k)+PA(:,:,k-1))
+!!        At k=1, PMZM(:,:,1) is defined by -999.
+!!
+!!
+!!    EXTERNAL
+!!    --------
+!!      NONE
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      NONE
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation of Meso-NH (SHUMAN operators)
+!!      Technical specifications Report of The Meso-NH (chapters 3)
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Ducrocq       * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    04/07/94
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+IMPLICIT NONE
+!
+!*       0.1   Declarations of argument and result
+!              ------------------------------------
+!
+TYPE(DIMPHYEX_t),       INTENT(IN)  :: D
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PA     ! variable at mass localization
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMZM   ! result at flux localization 
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER :: JK             ! Loop index in z direction
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    DEFINITION OF MZM
+!              ------------------
+!
+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) )
+END DO
+PMZM(:,:,D%NKA)    = -999.
+PMZM(:,:,D%NKU) = 0.5*( PA(:,:,D%NKU)+PA(:,:,D%NKU-D%NKL) )
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('MZM',1,ZHOOK_HANDLE)
+END SUBROUTINE MZM_PHY
+END MODULE SHUMAN_PHY
diff --git a/src/common/aux/modd_dimphyexn.F90 b/src/common/aux/modd_dimphyexn.F90
index d644ea4d52a0d5551983f691da9696ef3b7fbc82..d7493616a103843aaa48c917a9abab65b8d2f587 100644
--- a/src/common/aux/modd_dimphyexn.F90
+++ b/src/common/aux/modd_dimphyexn.F90
@@ -66,6 +66,11 @@ TYPE DIMPHYEX_t
   !* physical levels only from top of atm to ground: DO JK=NKE, NKB, -KKL
   !* all (including non physical) following the array ordering: DO JK=1, NKT
   !* physical levels only following the array ordering: DO JK=NKTB, NKTE
+  INTEGER :: NIBC  ! Computational indices used in DO LOOP
+  INTEGER :: NJBC  ! = NIB/NJC/NIE/NJE in all schemes
+  INTEGER :: NIEC  ! except in turbulence where external HALO points must be
+  INTEGER :: NJEC  ! included so NIBC=NJBC=1 and NIEC/NJEC=NIT/NJT
+!
 END TYPE DIMPHYEX_t
 !
 END MODULE MODD_DIMPHYEX
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index 526b14d708db26906c6291ccdbac3b37c8a4a9bc..5b5d44e760ac73e94c63670fe1c7ff50d0340a0e 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -145,6 +145,8 @@ USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD, BUDGET_STORE_END, BUDGET_STORE_INIT
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 USE MODE_ll
 !
+USE SHUMAN_PHY, ONLY : MZM_PHY
+!
 USE MODI_GET_HALO
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -219,8 +221,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) ::         &
 
 LOGICAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: GTKENEG
                    ! 3D mask .T. if TKE < CSTURB%XTKEMIN
-INTEGER             :: IKB          ! Index values for the Beginning and End
-                                    ! mass points of the domain 
+INTEGER             :: IIE,IIB,IJE,IJB,IKB,IKE      ! Index value for the mass points of the domain 
 !
 TYPE(LIST_ll), POINTER :: TZFIELDDISS_ll ! list of fields to exchange
 INTEGER                :: IINFO_ll       ! return code of parallel routine
@@ -237,11 +238,16 @@ NULLIFY(TZFIELDDISS_ll)
 IF (LHOOK) CALL DR_HOOK('TKE_EPS_SOURCES',0,ZHOOK_HANDLE)
 !
 IKB=D%NKB
+IKE=D%NKE
+IIE=D%NIEC
+IIB=D%NIBC
+IJE=D%NJEC
+IJB=D%NJBC
 !
 ! compute the effective diffusion coefficient at the mass point
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:))
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+ZKEFF(IIB:IIE,IJB:IJE,IKB:IKE) = PLM(IIB:IIE,IJB:IJE,IKB:IKE) * SQRT(PTKEM(IIB:IIE,IJB:IJE,IKB:IKE))
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 !----------------------------------------------------------------------------
 !
@@ -254,9 +260,9 @@ ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:))
 ! Complete the sources of TKE with the horizontal turbulent explicit transport
 !
 IF (HTURBDIM=='3DIM') THEN
-  ZTR=PTRH
+  ZTR(IIB:IIE,IJB:IJE,IKB:IKE)=PTRH(IIB:IIE,IJB:IJE,IKB:IKE)
 ELSE
-  ZTR=0.
+  ZTR(IIB:IIE,IJB:IJE,IKB:IKE)=0.
 END IF
 !
 !
@@ -265,21 +271,21 @@ END IF
 ! extrapolate the dynamic production with a 1/Z law from its value at the 
 ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB)
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+D%NKL)/PDZZ(:,:,IKB))
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+PDP(IIB:IIE,IJB:IJE,IKB) = PDP(IIB:IIE,IJB:IJE,IKB) * (1. + PDZZ(IIB:IIE,IJB:IJE,IKB+D%NKL)/PDZZ(IIB:IIE,IJB:IJE,IKB))
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
 !
 ! Compute the source terms for TKE: ( ADVECtion + NUMerical DIFFusion + ..)
 ! + (Dynamical Production) + (Thermal Production) - (dissipation) 
 !
-ZMWORK1 = MZM(ZKEFF, D%NKA, D%NKU, D%NKL) 
-ZMWORK2 = MZM(PRHODJ, D%NKA, D%NKU, D%NKL)
+CALL MZM_PHY(D,ZKEFF,ZMWORK1)
+CALL MZM_PHY(D,PRHODJ,ZMWORK2)
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-ZFLX(:,:,:) = CSTURB%XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:)
-ZSOURCE(:,:,:) = ( PRTKES(:,:,:) +  PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) &
-   - PTKEM(:,:,:) / PTSTEP &
-   + PDP(:,:,:) + PTP(:,:,:) + ZTR(:,:,:) - PEXPL * ZFLX(:,:,:) * PTKEM(:,:,:)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+ZFLX(IIB:IIE,IJB:IJE,IKB:IKE) = CSTURB%XCED * SQRT(PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)) / PLEPS(IIB:IIE,IJB:IJE,IKB:IKE)
+ZSOURCE(IIB:IIE,IJB:IJE,IKB:IKE) = ( PRTKES(IIB:IIE,IJB:IJE,IKB:IKE) +  PRTKEMS(IIB:IIE,IJB:IJE,IKB:IKE) ) / PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE) &
+   - PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) / PTSTEP &
+   + PDP(IIB:IIE,IJB:IJE,IKB:IKE) + PTP(IIB:IIE,IJB:IJE,IKB:IKE) + ZTR(IIB:IIE,IJB:IJE,IKB:IKE) - PEXPL * ZFLX(IIB:IIE,IJB:IJE,IKB:IKE) * PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)
 !
 !*       2.2  implicit vertical TKE transport
 !
@@ -287,8 +293,8 @@ ZSOURCE(:,:,:) = ( PRTKES(:,:,:) +  PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) &
 ! Compute the vector giving the elements just under the diagonal for the 
 ! matrix inverted in TRIDIAG 
 !
-ZA(:,:,:)     = - PTSTEP * CSTURB%XCET * ZMWORK1(:,:,:) * ZMWORK2(:,:,:) / PDZZ(:,:,:)**2
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+ZA(IIB:IIE,IJB:IJE,IKB:IKE)     = - PTSTEP * CSTURB%XCET * ZMWORK1(IIB:IIE,IJB:IJE,IKB:IKE) * ZMWORK2(IIB:IIE,IJB:IJE,IKB:IKE) / PDZZ(IIB:IIE,IJB:IJE,IKB:IKE)**2
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 ! Compute TKE at time t+deltat: ( stored in ZRES )
 !
@@ -298,10 +304,10 @@ CALL GET_HALO(ZRES)
 !* diagnose the dissipation
 !
 IF (LDIAG_IN_RUN) THEN
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  XCURRENT_TKE_DISS(:,:,:) = ZFLX(:,:,:) * PTKEM(:,:,:) &
-                                  *(PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:))
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+  XCURRENT_TKE_DISS(IIB:IIE,IJB:IJE,IKB:IKE) = ZFLX(IIB:IIE,IJB:IJE,IKB:IKE) * PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) &
+                                  *(PEXPL*PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) + PIMPL*ZRES(IIB:IIE,IJB:IJE,IKB:IKE))
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
   CALL ADD3DFIELD_ll( TZFIELDDISS_ll, XCURRENT_TKE_DISS, 'TKE_EPS_SOURCES::XCURRENT_TKE_DISS' )
   CALL UPDATE_HALO_ll(TZFIELDDISS_ll,IINFO_ll)
@@ -311,17 +317,17 @@ ENDIF
 ! TKE must be greater than its minimum value
 ! CL : Now done at the end of the time step in ADVECTION_METSV for MesoNH
 IF(HPROGRAM/='MESONH') THEN
- !$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
- GTKENEG(:,:,:) =  ZRES(:,:,:) <= CSTURB%XTKEMIN
- WHERE ( GTKENEG(:,:,:) ) 
-   ZRES(:,:,:) = CSTURB%XTKEMIN
+ !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+ GTKENEG(IIB:IIE,IJB:IJE,IKB:IKE) =  ZRES(IIB:IIE,IJB:IJE,IKB:IKE) <= CSTURB%XTKEMIN
+ WHERE ( GTKENEG(IIB:IIE,IJB:IJE,IKB:IKE) ) 
+   ZRES(IIB:IIE,IJB:IJE,IKB:IKE) = CSTURB%XTKEMIN
  END WHERE
- !$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+ !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 END IF
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-PTDISS(:,:,:) = - ZFLX(:,:,:)*(PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:))
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+PTDISS(IIB:IIE,IJB:IJE,IKB:IKE) = - ZFLX(IIB:IIE,IJB:IJE,IKB:IKE)*(PEXPL*PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) + PIMPL*ZRES(IIB:IIE,IJB:IJE,IKB:IKE))
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 IF ( OLES_CALL .OR.                         &
      (OTURB_DIAG .AND. TPFILE%LOPENED)  ) THEN
@@ -330,9 +336,9 @@ IF ( OLES_CALL .OR.                         &
 !
   ZMWORK1 = MZM(ZKEFF, D%NKA, D%NKU, D%NKL)
   ZDWORK1 = DZM(PIMPL * ZRES + PEXPL * PTKEM, D%NKA, D%NKU, D%NKL)
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  ZFLX(:,:,:)  = - CSTURB%XCET * ZMWORK1(:,:,:) * ZDWORK1(:,:,:) / PDZZ(:,:,:)
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+  ZFLX(IIB:IIE,IJB:IJE,IKB:IKE)  = - CSTURB%XCET * ZMWORK1(IIB:IIE,IJB:IJE,IKB:IKE) * ZDWORK1(IIB:IIE,IJB:IJE,IKB:IKE) / PDZZ(IIB:IIE,IJB:IJE,IKB:IKE)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
   ZFLX(:,:,IKB) = 0.
   ZFLX(:,:,D%NKA) = 0.
@@ -340,9 +346,9 @@ IF ( OLES_CALL .OR.                         &
 ! Compute the whole turbulent TRansport of TKE:
 !
   ZDWORK1 = DZF(MZM(PRHODJ, D%NKA, D%NKU, D%NKL) * ZFLX / PDZZ, D%NKA, D%NKU, D%NKL)
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  ZTR(:,:,:)= ZTR(:,:,:) - ZDWORK1(:,:,:) /PRHODJ(:,:,:)
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+  ZTR(IIB:IIE,IJB:IJE,IKB:IKE)= ZTR(IIB:IIE,IJB:IJE,IKB:IKE) - ZDWORK1(IIB:IIE,IJB:IJE,IKB:IKE) /PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 ! Storage in the LES configuration
 !
@@ -357,9 +363,9 @@ END IF
 !
 IF (BUCONF%LBUDGET_TKE) THEN
   ! Dynamical production
-  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DP', PDP(:, :, :) * PRHODJ(:, :, :) )
+  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DP', PDP(:,:,:) * PRHODJ(:,:,:) )
   ! Thermal production
-  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'TP', PTP(:, :, :) * PRHODJ(:, :, :) )
+  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'TP', PTP(:,:,:) * PRHODJ(:,:,:) )
   ! Dissipation
   CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DISS',- CSTURB%XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
                 (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:))
@@ -370,20 +376,20 @@ END IF
 
 !Store the previous source terms in prtkes before initializing the next one
 !Should be in IF LBUDGET_TKE only. Was removed out for a correct comput. of PTDIFF in case of LBUDGET_TKE=F in AROME
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-PRTKES(:,:,:) = PRTKES(:,:,:) + PRHODJ(:,:,:) *                                                           &
-                ( PDP(:,:,:) + PTP(:,:,:)                                                                 &
-                  - CSTURB%XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * ( PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:) ) )
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+PRTKES(IIB:IIE,IJB:IJE,IKB:IKE) = PRTKES(IIB:IIE,IJB:IJE,IKB:IKE) + PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE) *                                                           &
+                ( PDP(IIB:IIE,IJB:IJE,IKB:IKE) + PTP(IIB:IIE,IJB:IJE,IKB:IKE)                                                                 &
+                  - CSTURB%XCED * SQRT(PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)) / PLEPS(IIB:IIE,IJB:IJE,IKB:IKE) * ( PEXPL*PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) + PIMPL*ZRES(IIB:IIE,IJB:IJE,IKB:IKE) ) )
 !
-PTDIFF(:,:,:) =  ZRES(:,:,:) / PTSTEP - PRTKES(:,:,:)/PRHODJ(:,:,:) &
- & - PDP(:,:,:)- PTP(:,:,:) - PTDISS(:,:,:)
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+PTDIFF(IIB:IIE,IJB:IJE,IKB:IKE) =  ZRES(IIB:IIE,IJB:IJE,IKB:IKE) / PTSTEP - PRTKES(IIB:IIE,IJB:IJE,IKB:IKE)/PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE) &
+ & - PDP(IIB:IIE,IJB:IJE,IKB:IKE)- PTP(IIB:IIE,IJB:IJE,IKB:IKE) - PTDISS(IIB:IIE,IJB:IJE,IKB:IKE)
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 IF (BUCONF%LBUDGET_TKE) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  PRTKEMS(:,:,:)
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+PRTKES(IIB:IIE,IJB:IJE,IKB:IKE) = ZRES(IIB:IIE,IJB:IJE,IKB:IKE) * PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE) / PTSTEP -  PRTKEMS(IIB:IIE,IJB:IJE,IKB:IKE)
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !
 ! stores the whole turbulent transport
 !
@@ -394,10 +400,10 @@ IF (BUCONF%LBUDGET_TKE) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TKE), 'TR', PRTK
 !*       3.   COMPUTE THE DISSIPATIVE HEATING
 !             -------------------------------
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-PRTHLS(:,:,:) = PRTHLS(:,:,:) + CSTURB%XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
-                (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) * PCOEF_DISS(:,:,:)
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+PRTHLS(IIB:IIE,IJB:IJE,IKB:IKE) = PRTHLS(IIB:IIE,IJB:IJE,IKB:IKE) + CSTURB%XCED * SQRT(PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)) / PLEPS(IIB:IIE,IJB:IJE,IKB:IKE) * &
+                (PEXPL*PTKEM(IIB:IIE,IJB:IJE,IKB:IKE) + PIMPL*ZRES(IIB:IIE,IJB:IJE,IKB:IKE)) * PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE) * PCOEF_DISS(IIB:IIE,IJB:IJE,IKB:IKE)
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 !----------------------------------------------------------------------------
 !
 !*       4.   STORES SOME DIAGNOSTICS
@@ -405,15 +411,15 @@ PRTHLS(:,:,:) = PRTHLS(:,:,:) + CSTURB%XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:)
 !
 IF(PRESENT(PTR)) PTR=ZTR
 IF(PRESENT(PDISS)) THEN
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  PDISS(:,:,:) =  -CSTURB%XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:)
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+  PDISS(IIB:IIE,IJB:IJE,IKB:IKE) =  -CSTURB%XCED * (PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)**1.5) / PLEPS(IIB:IIE,IJB:IJE,IKB:IKE)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 END IF
 !
 IF(PRESENT(PEDR)) THEN
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  PEDR(:,:,:) = CSTURB%XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:)
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
+  PEDR(IIB:IIE,IJB:IJE,IKB:IKE) = CSTURB%XCED * (PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)**1.5) / PLEPS(IIB:IIE,IJB:IJE,IKB:IKE)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE)
 END IF
 !
 IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN
diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90
index e69a64f731e87616f78b73530e4148bb6ac3eb94..0832e106020d4a66359dbf2b85815dcc1d66ea83 100644
--- a/src/common/turb/mode_tridiag_tke.F90
+++ b/src/common/turb/mode_tridiag_tke.F90
@@ -142,6 +142,7 @@ INTEGER             :: JI,JJ,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             :: IIE,IIB,IJE,IJB
 !
 ! ---------------------------------------------------------------------------
 !                                              
@@ -156,27 +157,31 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIE=D%NIEC
+IIB=D%NIBC
+IJE=D%NJEC
+IJB=D%NJBC
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-ZY(:,:,IKB) = PVARM(:,:,IKB)  + PTSTEP*PSOURCE(:,:,IKB) -   &
-  PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+D%NKL) * (PVARM(:,:,IKB+D%NKL) - PVARM(:,:,IKB))
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+ZY(IIB:IIE,IJB:IJE,IKB) = PVARM(IIB:IIE,IJB:IJE,IKB)  + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,IKB) -   &
+  PEXPL / PRHODJ(IIB:IIE,IJB:IJE,IKB) * PA(IIB:IIE,IJB:IJE,IKB+D%NKL) * (PVARM(IIB:IIE,IJB:IJE,IKB+D%NKL) - PVARM(IIB:IIE,IJB:IJE,IKB))
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
 !
 DO JK=IKTB+1,IKTE-1
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-  ZY(:,:,JK)= PVARM(:,:,JK)  + PTSTEP*PSOURCE(:,:,JK) -               &
-      PEXPL / PRHODJ(:,:,JK) *                                           &
-                             ( PVARM(:,:,JK-D%NKL)*PA(:,:,JK)                &
-                              -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+D%NKL))   &
-                              +PVARM(:,:,JK+D%NKL)*PA(:,:,JK+D%NKL)              &
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+  ZY(IIB:IIE,IJB:IJE,JK)= PVARM(IIB:IIE,IJB:IJE,JK)  + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,JK) -               &
+      PEXPL / PRHODJ(IIB:IIE,IJB:IJE,JK) *                                           &
+                             ( PVARM(IIB:IIE,IJB:IJE,JK-D%NKL)*PA(IIB:IIE,IJB:IJE,JK)                &
+                              -PVARM(IIB:IIE,IJB:IJE,JK)*(PA(IIB:IIE,IJB:IJE,JK)+PA(IIB:IIE,IJB:IJE,JK+D%NKL))   &
+                              +PVARM(IIB:IIE,IJB:IJE,JK+D%NKL)*PA(IIB:IIE,IJB:IJE,JK+D%NKL)              &
                              ) 
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
 END DO
 ! 
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) +               &
-  PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-D%NKL))
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+ZY(IIB:IIE,IJB:IJE,IKE)= PVARM(IIB:IIE,IJB:IJE,IKE) + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,IKE) +               &
+  PEXPL / PRHODJ(IIB:IIE,IJB:IJE,IKE) * PA(IIB:IIE,IJB:IJE,IKE) * (PVARM(IIB:IIE,IJB:IJE,IKE)-PVARM(IIB:IIE,IJB:IJE,IKE-D%NKL))
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
 !
 !
 !*       2.  INVERSION OF THE TRIDIAGONAL SYSTEM
@@ -187,55 +192,55 @@ IF ( PIMPL > 1.E-10 ) THEN
   !
   !  going up
   !
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-  ZBET(:,:) = 1. + PIMPL * (PDIAG(:,:,IKB)-PA(:,:,IKB+D%NKL) / PRHODJ(:,:,IKB))
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+  ZBET(IIB:IIE,IJB:IJE) = 1. + PIMPL * (PDIAG(IIB:IIE,IJB:IJE,IKB)-PA(IIB:IIE,IJB:IJE,IKB+D%NKL) / PRHODJ(IIB:IIE,IJB:IJE,IKB))
                                                     ! bet = b(ikb)
-  PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:)                
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)               
+  PVARP(IIB:IIE,IJB:IJE,IKB) = ZY(IIB:IIE,IJB:IJE,IKB) / ZBET(IIB:IIE,IJB:IJE)                
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)               
   !
   DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
-    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-    ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-D%NKL) / ZBET(:,:)  
+    !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+    ZGAM(IIB:IIE,IJB:IJE,JK) = PIMPL * PA(IIB:IIE,IJB:IJE,JK) / PRHODJ(IIB:IIE,IJB:IJE,JK-D%NKL) / ZBET(IIB:IIE,IJB:IJE)  
                                                     ! gam(k) = c(k-1) / bet
-    ZBET(:,:)    = 1. + PIMPL * ( PDIAG(:,:,JK) -                     &
-                                 (  PA(:,:,JK) * (1. + ZGAM(:,:,JK))  &
-                                  + PA(:,:,JK+D%NKL)                      &
-                                 ) / PRHODJ(:,:,JK)                   &
+    ZBET(IIB:IIE,IJB:IJE)    = 1. + PIMPL * ( PDIAG(IIB:IIE,IJB:IJE,JK) -                     &
+                                 (  PA(IIB:IIE,IJB:IJE,JK) * (1. + ZGAM(IIB:IIE,IJB:IJE,JK))  &
+                                  + PA(IIB:IIE,IJB:IJE,JK+D%NKL)                      &
+                                 ) / PRHODJ(IIB:IIE,IJB:IJE,JK)                   &
                                 )                   ! bet = b(k) - a(k)* gam(k)  
-    PVARP(:,:,JK)= ( ZY(:,:,JK) - PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK) &
-                    * PVARP(:,:,JK-D%NKL)                                 &
-                   ) / ZBET(:,:)
+    PVARP(IIB:IIE,IJB:IJE,JK)= ( ZY(IIB:IIE,IJB:IJE,JK) - PIMPL * PA(IIB:IIE,IJB:IJE,JK) / PRHODJ(IIB:IIE,IJB:IJE,JK) &
+                    * PVARP(IIB:IIE,IJB:IJE,JK-D%NKL)                                 &
+                   ) / ZBET(IIB:IIE,IJB:IJE)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+    !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
   END DO
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
   ! special treatment for the last level
-  ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-D%NKL) / ZBET(:,:) 
+  ZGAM(IIB:IIE,IJB:IJE,IKE) = PIMPL * PA(IIB:IIE,IJB:IJE,IKE) / PRHODJ(IIB:IIE,IJB:IJE,IKE-D%NKL) / ZBET(IIB:IIE,IJB:IJE) 
                                                     ! gam(k) = c(k-1) / bet
-  ZBET(:,:)    = 1. + PIMPL * ( PDIAG(:,:,IKE) -                   &
-         (  PA(:,:,IKE) * (1. + ZGAM(:,:,IKE)) ) / PRHODJ(:,:,IKE) &
+  ZBET(IIB:IIE,IJB:IJE)    = 1. + PIMPL * ( PDIAG(IIB:IIE,IJB:IJE,IKE) -                   &
+         (  PA(IIB:IIE,IJB:IJE,IKE) * (1. + ZGAM(IIB:IIE,IJB:IJE,IKE)) ) / PRHODJ(IIB:IIE,IJB:IJE,IKE) &
                               )  
                                                     ! bet = b(k) - a(k)* gam(k)  
-  PVARP(:,:,IKE)= ( ZY(:,:,IKE) - PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE) &
-                                * PVARP(:,:,IKE-D%NKL)                      &
-                 ) / ZBET(:,:)
+  PVARP(IIB:IIE,IJB:IJE,IKE)= ( ZY(IIB:IIE,IJB:IJE,IKE) - PIMPL * PA(IIB:IIE,IJB:IJE,IKE) / PRHODJ(IIB:IIE,IJB:IJE,IKE) &
+                                * PVARP(IIB:IIE,IJB:IJE,IKE-D%NKL)                      &
+                 ) / ZBET(IIB:IIE,IJB:IJE)
                                        ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
   !
   !  going down
   !
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
   DO JK = IKE-D%NKL,IKB,-1*D%NKL
-  !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-    PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) 
-  !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+  !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+    PVARP(IIB:IIE,IJB:IJE,JK) = PVARP(IIB:IIE,IJB:IJE,JK) - ZGAM(IIB:IIE,IJB:IJE,JK+D%NKL) * PVARP(IIB:IIE,IJB:IJE,JK+D%NKL) 
+  !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
   END DO
 !
 ELSE
 ! 
   DO JK=IKTB,IKTE
-    !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-    PVARP(:,:,JK) = ZY(:,:,JK)
-    !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+    !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+    PVARP(IIB:IIE,IJB:IJE,JK) = ZY(IIB:IIE,IJB:IJE,JK)
+    !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
   END DO
 !
 END IF 
@@ -244,10 +249,10 @@ END IF
 !*       3.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
-PVARP(:,:,D%NKA)=PVARP(:,:,IKB)
-PVARP(:,:,D%NKU)=PVARP(:,:,IKE)
-!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
+!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+PVARP(IIB:IIE,IJB:IJE,D%NKA)=PVARP(IIB:IIE,IJB:IJE,IKB)
+PVARP(IIB:IIE,IJB:IJE,D%NKU)=PVARP(IIB:IIE,IJB:IJE,IKE)
+!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 639ea970f7353c43d68b8f0968cfc9ccd71b2262..b9e96fd9c6a8d019be67a908768e62614bd9af21 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -459,7 +459,7 @@ REAL, DIMENSION(D%NIT,D%NJT) ::  ZTAU11M,ZTAU12M,  &
 REAL                :: ZEXPL        ! 1-PIMPL deg of expl.
 REAL                :: ZRVORD       ! RV/RD
 !
-INTEGER             :: IKB,IKE      ! index value for the
+INTEGER             :: IIE,IIB,IJE,IJB,IKB,IKE      ! index value for the
 ! Beginning and the End of the physical domain for the mass points
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
@@ -494,6 +494,11 @@ IKTB=D%NKTB
 IKTE=D%NKTE
 IKB=D%NKB
 IKE=D%NKE
+IIE=D%NIEC
+IIB=D%NIBC
+IJE=D%NJEC
+IJB=D%NJBC
+!print*,"MINMAX PRTKES = ",MINVAL(PRTKES),MAXVAL(PRTKES)
 !
 ZEXPL = 1.- PIMPL
 ZRVORD= CST%XRV / CST%XRD
@@ -1074,13 +1079,13 @@ END IF
 !      cloud computation is not statistical 
 ZWORK1 = MZF(PFLXZTHVMF,D%NKA, D%NKU, D%NKL)
 !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-PTP(:,:,:) = PTP(:,:,:) + CST%XG / PTHVREF(:,:,:) * ZWORK1(:,:,:)
+PTP(IIB:IIE,IJB:IJE,IKB:IKE) = PTP(IIB:IIE,IJB:IJE,IKB:IKE) + CST%XG / PTHVREF(IIB:IIE,IJB:IJE,IKB:IKE) * ZWORK1(IIB:IIE,IJB:IJE,IKB:IKE)
 !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 
 IF(PRESENT(PTPMF))  THEN
   ZWORK1 = MZF(PFLXZTHVMF, D%NKA, D%NKU, D%NKL)
   !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
-  PTPMF(:,:,:)=CST%XG / PTHVREF(:,:,:) * ZWORK1(:,:,:)
+  PTPMF(IIB:IIE,IJB:IJE,IKB:IKE)=CST%XG / PTHVREF(IIB:IIE,IJB:IJE,IKB:IKE) * ZWORK1(IIB:IIE,IJB:IJE,IKB:IKE)
   !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
 END IF
 !  6.2 TKE evolution equation
@@ -1283,7 +1288,7 @@ IF (OLES_CALL) THEN
   XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
 END IF
 !
-IF(PRESENT(PLEM)) PLEM(:,:,:) = ZLM(:,:,:)
+IF(PRESENT(PLEM)) PLEM(IIB:IIE,IJB:IJE,IKB:IKE) = ZLM(IIB:IIE,IJB:IJE,IKB:IKE)
 !----------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE)
diff --git a/src/mesonh/aux/mode_fill_dimphyexn.F90 b/src/mesonh/aux/mode_fill_dimphyexn.F90
index af7b191d0363c882276e9b49344e4c80365c579b..351c96d49720d56cab26f73ac1808854602d9b04 100644
--- a/src/mesonh/aux/mode_fill_dimphyexn.F90
+++ b/src/mesonh/aux/mode_fill_dimphyexn.F90
@@ -6,7 +6,7 @@
 MODULE MODE_FILL_DIMPHYEX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT)
+SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT, LTURB)
 !     #########################
 !
 !!
@@ -46,7 +46,9 @@ IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t), INTENT(OUT) :: YDDIMPHYEX ! Structure to fill in
 INTEGER, INTENT(IN) :: KIT, KJT, KKT ! Array dimensions
-
+LOGICAL, INTENT(IN), OPTIONAL :: LTURB ! Flag to replace array dimensions I/JB and I/JE to the full array size
+                                       ! needed if computation in HALO points (e.g. in turbulence)
+LOGICAL :: YTURB
 !
 !*       0.2  declaration of local variables
 !
@@ -69,6 +71,23 @@ YDDIMPHYEX%NKE=KKT-JPVEXT
 YDDIMPHYEX%NKTB=1+JPVEXT
 YDDIMPHYEX%NKTE=KKT-JPVEXT
 !
+IF(PRESENT(LTURB)) THEN
+  YTURB=LTURB
+ELSE
+  YTURB=.FALSE. ! Default value
+END IF
+!
+IF(YTURB) THEN
+  YDDIMPHYEX%NIBC=1
+  YDDIMPHYEX%NJBC=1
+  YDDIMPHYEX%NIEC=YDDIMPHYEX%NIT
+  YDDIMPHYEX%NJEC=YDDIMPHYEX%NJT
+ELSE
+  YDDIMPHYEX%NIBC=YDDIMPHYEX%NIB
+  YDDIMPHYEX%NJBC=YDDIMPHYEX%NJB
+  YDDIMPHYEX%NIEC=YDDIMPHYEX%NIE
+  YDDIMPHYEX%NJEC=YDDIMPHYEX%NJE
+END IF
 IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 1, ZHOOK_HANDLE)
 !
 END SUBROUTINE FILL_DIMPHYEX
diff --git a/src/mesonh/aux/shuman_phy.f90 b/src/mesonh/aux/shuman_phy.f90
new file mode 100644
index 0000000000000000000000000000000000000000..28feda3c7fe85a89e6740c439493eafd4faf54cb
--- /dev/null
+++ b/src/mesonh/aux/shuman_phy.f90
@@ -0,0 +1,99 @@
+MODULE SHUMAN_PHY
+IMPLICIT NONE
+CONTAINS
+!     ###############################
+      SUBROUTINE MZM_PHY(D,PA,PMZM)
+!     ###############################
+!
+!!****  *MZM* -  Shuman operator : mean operator in z direction for a 
+!!                                 mass variable 
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this function  is to compute a mean
+!     along the z direction (K index) for a field PA localized at a mass
+!     point. The result is localized at a z-flux point (w point).
+!
+!!**  METHOD
+!!    ------ 
+!!        The result PMZM(:,:,k) is defined by 0.5*(PA(:,:,k)+PA(:,:,k-1))
+!!        At k=1, PMZM(:,:,1) is defined by -999.
+!!    
+!!
+!!    EXTERNAL
+!!    --------
+!!      NONE
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      NONE
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation of Meso-NH (SHUMAN operators)
+!!      Technical specifications Report of The Meso-NH (chapters 3)  
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	V. Ducrocq       * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    04/07/94 
+!!                   optimisation                 20/08/00 J. Escobar
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+IMPLICIT NONE
+!
+!*       0.1   Declarations of argument and result
+!              ------------------------------------
+!
+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 
+
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER :: JK             ! Loop index in z direction
+INTEGER :: IKU            ! upper bound in z direction of PA
+!           
+INTEGER :: IIU,IJU
+INTEGER :: JIJ,JI,JJ
+INTEGER :: JIJK,JIJKOR,JIJKEND
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    DEFINITION OF MZM
+!              ------------------
+!
+IIU = SIZE(PA,1)
+IJU = SIZE(PA,2)
+IKU = SIZE(PA,3)
+!
+JIJKOR  = 1 + IIU*IJU
+JIJKEND = IIU*IJU*IKU
+!
+!CDIR NODEP
+!OCL NOVREC
+DO JIJK=JIJKOR , JIJKEND
+   PMZM(JIJK,1,1) = 0.5*( PA(JIJK,1,1)+PA(JIJK-IIU*IJU,1,1) )
+END DO
+!
+!CDIR NODEP
+!OCL NOVREC
+DO JIJ=1,IIU*IJU
+   PMZM(JIJ,1,1)    = -999.
+END DO
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE MZM_PHY
+END MODULE SHUMAN_PHY
diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90
index 59162c9b728035ce98357a0f0b34bb07a8ca0fa7..5e45659593cecd02bc9e5a617fe5626c8f462bd3 100644
--- a/src/mesonh/ext/phys_paramn.f90
+++ b/src/mesonh/ext/phys_paramn.f90
@@ -476,7 +476,7 @@ IKB = 1 + JPVEXT
 IKE = IKU - JPVEXT
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3))
+CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.)
 !
 ZTIME1 = 0.0_MNHTIME
 ZTIME2 = 0.0_MNHTIME