diff --git a/src/common/turb/mode_emoist.F90 b/src/common/turb/mode_emoist.F90
index 42e978ae689948613cd12df7360ea1febc2928b9..531f156fcef67d74332e2846e687f16992acfe4d 100644
--- a/src/common/turb/mode_emoist.F90
+++ b/src/common/turb/mode_emoist.F90
@@ -5,7 +5,7 @@
 MODULE MODE_EMOIST
 IMPLICIT NONE
 CONTAINS
-FUNCTION EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN) RESULT(PEMOIST)
+FUNCTION EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN) RESULT(PEMOIST)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !   ############################################################################
@@ -57,30 +57,34 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 !*       0. DECLARATIONS
 !           ------------
-USE MODD_CST
+USE MODD_CST, ONLY : CST_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+
 !
 IMPLICIT NONE
 !
 !*       0.1 declarations of arguments and result
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
 INTEGER                              :: KRR        ! number of moist var.
 INTEGER                              :: KRRI       ! number of ice var.
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 !
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PTHLM    ! Conservative pot. temperature
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::   PRM      ! Mixing ratios, where
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PTHLM    ! Conservative pot. temperature
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::   PRM      ! Mixing ratios, where
 !                                    PRM(:,:,:,1) = conservative mixing ratio
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PAMOIST   ! Amoist
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PAMOIST   ! Amoist
 REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
                                                     ! moment s'r'c/2Sigma_s2
 !
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)):: PEMOIST ! result
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: PEMOIST ! result
 !
 !*       0.2 declarations of local variables
 !
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::       &
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT) ::       &
                                         ZA, ZRW
 !                ZA = coeft A, ZRW = total mixing ratio rw 
 REAL                                  :: ZDELTA  ! = Rv/Rd - 1
@@ -107,10 +111,10 @@ ELSE
  IF ( KRR == 0 ) THEN                                ! dry case
    PEMOIST(:,:,:) = 0.
  ELSE IF ( KRR == 1 ) THEN                           ! only vapor
-  ZDELTA = (XRV/XRD) - 1.
+  ZDELTA = (CST%XRV/CST%XRD) - 1.
   PEMOIST(:,:,:) = ZDELTA*PTHLM(:,:,:)
  ELSE                                                ! liquid water & ice present
-  ZDELTA = (XRV/XRD) - 1.
+  ZDELTA = (CST%XRV/CST%XRD) - 1.
   ZRW(:,:,:) = PRM(:,:,:,1)
 !
   IF ( KRRI>0) THEN  ! rc and ri case  
diff --git a/src/common/turb/mode_etheta.F90 b/src/common/turb/mode_etheta.F90
index 536133615c743dc04bd48eefeca355fa87992d60..96bcf2680c4f6dba1e7d960ea05f905dda8bba93 100644
--- a/src/common/turb/mode_etheta.F90
+++ b/src/common/turb/mode_etheta.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ETHETA
 IMPLICIT NONE
 CONTAINS
-FUNCTION ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN) RESULT(PETHETA)
+FUNCTION ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC) RESULT(PETHETA)
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !   ############################################################################
@@ -56,33 +56,39 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 !*       0. DECLARATIONS
 !           ------------
-USE MODD_CST
+USE MODD_CST, ONLY : CST_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 !
 IMPLICIT NONE
 !
 !*       0.1 declarations of arguments and result
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
 INTEGER                              :: KRR          ! number of moist var.
 INTEGER                              :: KRRI         ! number of ice var.
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 !
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PTHLM     ! Conservative pot. temperature
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::   PRM       ! Mixing ratios, where
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PTHLM     ! Conservative pot. temperature
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::   PRM       ! Mixing ratios, where
 !                                      PRM(:,:,:,1) = conservative mixing ratio
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PATHETA   ! Atheta
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PLOCPEXNM ! Lv(T)/Cp/Exner at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::   PATHETA   ! Atheta
 !                                                    
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)),   INTENT(IN)  ::   PSRCM     ! Normalized 2dn_order
                                                     ! moment s'r'c/2Sigma_s2
 !
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)):: PETHETA ! result
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: PETHETA ! result
 !
 !
 !
 !*       0.2 declarations of local variables
 !
-REAL,DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::       &
+REAL,DIMENSION(D%NIT,D%NJT,D%NKT) ::       &
                                         ZA, ZRW
 !                ZA = coeft A, ZRW = total mixing ratio rw
 REAL                                  :: ZDELTA  ! = Rv/Rd - 1
@@ -103,10 +109,10 @@ ELSE
  IF ( KRR == 0) THEN                                ! dry case
   PETHETA(:,:,:) = 1.
  ELSE IF ( KRR == 1 ) THEN                           ! only vapor
-  ZDELTA = (XRV/XRD) - 1.
+  ZDELTA = (CST%XRV/CST%XRD) - 1.
   PETHETA(:,:,:) = 1. + ZDELTA*PRM(:,:,:,1)
  ELSE                                                ! liquid water & ice present
-  ZDELTA = (XRV/XRD) - 1.
+  ZDELTA = (CST%XRV/CST%XRD) - 1.
   ZRW(:,:,:) = PRM(:,:,:,1)
 !
   IF ( KRRI>0 ) THEN  ! rc and ri case
diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90
index 19c8d33ee11663f8267c74ce8455c850781eefae..c8492b523a699f3d748cb6c675c1a8b578647e01 100644
--- a/src/common/turb/mode_prandtl.F90
+++ b/src/common/turb/mode_prandtl.F90
@@ -14,6 +14,7 @@
 !               05/2020   V. Masson and C. Lac : bug in D_PHI3DTDZ2_O_DDTDZ
 !
 USE MODD_CTURB,      ONLY : CSTURB_t
+USE MODD_DIMPHYEX,   ONLY : DIMPHYEX_t
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
 !
 USE MODI_SHUMAN, ONLY: MZM, MZF
@@ -21,8 +22,8 @@ IMPLICIT NONE
 !----------------------------------------------------------------------------
 CONTAINS
 !----------------------------------------------------------------------------
-      SUBROUTINE PRANDTL(CST,CSTURB,KKA,KKU,KKL,KRR,KRRI,OTURB_DIAG,&
-                         HTURBDIM,OOCEAN,OHARAT,O2D,           &
+      SUBROUTINE PRANDTL(D,CST,CSTURB,KKA,KKU,KKL,KRR,KSV,KRRI,OTURB_DIAG,&
+                         HTURBDIM,OOCEAN,OHARAT,O2D,OCOMPUTE_SRC,&
                          TPFILE,                               &
                          PDXX,PDYY,PDZZ,PDZX,PDZY,             &
                          PTHVREF,PLOCPEXNM,PATHETA,PAMOIST,    &
@@ -144,6 +145,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY : CST_t
 USE MODD_CTURB, ONLY : CSTURB_t
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
@@ -159,11 +161,13 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),                  INTENT(IN)    :: CST
 TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
 INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
+INTEGER,                INTENT(IN)   :: KSV           ! number of scalar variables
 
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice var.
@@ -172,41 +176,44 @@ LOGICAL,                INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
                                  ! diagnostic fields in the syncronous FM-file
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  OHARAT
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
 LOGICAL, INTENT(IN) :: O2D               ! Logical for 2D model version (modd_conf)
 CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! Kind of turbulence param.
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
                                                   ! metric coefficients
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF  ! Virtual Potential Temp.
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHVREF  ! Virtual Potential Temp.
                                                   ! of the reference state
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM ! Lv(T)/Cp/Exner at t-1 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLOCPEXNM ! Lv(T)/Cp/Exner at t-1 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM      ! Turbulent Mixing length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS    ! Dissipative length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM,PTKEM! Conservative Potential 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM      ! Turbulent Mixing length
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLEPS    ! Dissipative length
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHLM,PTKEM! Conservative Potential 
                                                   ! Temperature and TKE at t-1
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM      ! Mixing ratios at  t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM      ! Mixing ratios at  t-1
                                                   ! with PRM(:,:,:,1) = cons.
                                                   ! mixing ratio
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM     ! Scalars at t-1      
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM     ! Scalars at t-1      
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)),  INTENT(IN)   ::  PSRCM
                                   ! s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
 !
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDTH1 ! Redelsperger number R_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PREDR1  ! Redelsperger number R_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2TH3 ! Redelsperger number R*2_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2R3  ! Redelsperger number R*2_q
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PRED2THR3! Redelsperger number R*2_thq
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PREDS1   ! Redelsperger number R_s
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2THS3! Redelsperger number R*2_thsv
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)::  PRED2RS3 ! Redelsperger number R*2_qsv
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PBLL_O_E! beta*Lk*Leps/tke
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PETHETA ! coefficient E_theta
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PEMOIST ! coefficient E_moist
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PREDTH1 ! Redelsperger number R_theta
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PREDR1  ! Redelsperger number R_q
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PRED2TH3 ! Redelsperger number R*2_theta
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PRED2R3  ! Redelsperger number R*2_q
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PRED2THR3! Redelsperger number R*2_thq
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(OUT)::  PREDS1   ! Redelsperger number R_s
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(OUT)::  PRED2THS3! Redelsperger number R*2_thsv
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(OUT)::  PRED2RS3 ! Redelsperger number R*2_qsv
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PBLL_O_E! beta*Lk*Leps/tke
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PETHETA ! coefficient E_theta
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PEMOIST ! coefficient E_moist
 !
 !
 !       0.2  declaration of local variables
@@ -217,12 +224,6 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ::  &
 !                                                     
 INTEGER :: IKB      ! vertical index value for the first inner mass point
 INTEGER :: IKE      ! vertical index value for the last inner mass point
-INTEGER             :: IRESP        ! Return code of FM routines
-INTEGER             :: ILENG        ! Length of the data field in LFIFM file
-INTEGER             :: IGRID        ! C-grid indicator in LFIFM file
-INTEGER             :: ILENCH       ! Length of comment string in LFIFM file
-CHARACTER (LEN=100) :: YCOMMENT     ! comment string in LFIFM file
-CHARACTER (LEN=16)  :: YRECFM       ! Name of the desired field in LFIFM file
 INTEGER::  ISV                      ! number of scalar variables       
 INTEGER::  JSV                      ! loop index for the scalar variables  
 
@@ -249,13 +250,12 @@ PRED2RS3(:,:,:,:)=0.
 PBLL_O_E(:,:,:)=0.
 ENDIF
 !
-IKB = KKA+JPVEXT_TURB*KKL
-IKE = KKU-JPVEXT_TURB*KKL 
-ILENG=SIZE(PTHLM,1)*SIZE(PTHLM,2)*SIZE(PTHLM,3)
+IKB = D%NKB
+IKE = D%NKE 
 ISV  =SIZE(PSVM,4)
 !
-PETHETA(:,:,:) = MZM(ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN), KKA, KKU, KKL)
-PEMOIST(:,:,:) = MZM(EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN), KKA, KKU, KKL)
+PETHETA(:,:,:) = MZM(ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC), KKA, KKU, KKL)
+PEMOIST(:,:,:) = MZM(EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN), KKA, KKU, KKL)
 PETHETA(:,:,KKA) = 2.*PETHETA(:,:,IKB) - PETHETA(:,:,IKB+KKL)
 PEMOIST(:,:,KKA) = 2.*PEMOIST(:,:,IKB) - PEMOIST(:,:,IKB+KKL)
 !
@@ -557,15 +557,16 @@ ENDIF ! (Done only if OHARAT is FALSE)
 IF (LHOOK) CALL DR_HOOK('PRANDTL',1,ZHOOK_HANDLE)
 END SUBROUTINE PRANDTL
 !
-SUBROUTINE SMOOTH_TURB_FUNCT(CSTURB,PPHI3,PF_LIM,PF)
+SUBROUTINE SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PF_LIM,PF)
 !
 TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PPHI3   ! Phi3
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PF_LIM  ! Value of F when Phi3 is
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PPHI3   ! Phi3
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PF_LIM  ! Value of F when Phi3 is
 !                                                ! larger than Phi_lim
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PF      ! function F to smooth
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PF      ! function F to smooth
 !
-REAL, DIMENSION(SIZE(PF,1),SIZE(PF,2),SIZE(PF,3)) :: ZCOEF
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZCOEF
 !
 !* adds a artificial correction to smooth the function near the discontinuity
 !  point at Phi3 = Phi_lim
@@ -580,18 +581,19 @@ PF(:,:,:) =     ZCOEF(:,:,:)   * PF    &
 !
 END SUBROUTINE SMOOTH_TURB_FUNCT
 !----------------------------------------------------------------------------
-FUNCTION PHI3(CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION PHI3(D,CSTURB,PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: PHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: PHI3
 !
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: ZW1, ZW2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZW1, ZW2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -642,16 +644,18 @@ PHI3(:,:,IKE+1)=PHI3(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',1,ZHOOK_HANDLE)
 END FUNCTION PHI3
 !----------------------------------------------------------------------------
-FUNCTION PSI_SV(CSTURB,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
-  TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PREDS1
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRED2THS
-  REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRED2RS
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:),   INTENT(IN) :: PPSI3
-  REAL, DIMENSION(SIZE(PRED2THS,1),SIZE(PRED2THS,2),SIZE(PRED2THS,3),SIZE(PRED2THS,4)) :: PSI_SV
+FUNCTION PSI_SV(D,CSTURB,KSV,PREDTH1,PREDR1,PREDS1,PRED2THS,PRED2RS,PPHI3,PPSI3)
+  TYPE(CSTURB_t),                  INTENT(IN)      :: CSTURB
+  TYPE(DIMPHYEX_t),                INTENT(IN)      :: D
+  INTEGER,                         INTENT(IN)      :: KSV
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) :: PREDS1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) :: PRED2THS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) :: PRED2RS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PPHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) :: PPSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV) :: PSI_SV
 !
   INTEGER :: IKB, IKE
   INTEGER :: JSV
@@ -681,16 +685,17 @@ END DO
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',1,ZHOOK_HANDLE)
 END FUNCTION PSI_SV
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DTDZ_O_DDTDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DTDZ_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DTDZ_O_DDTDZ
   INTEGER :: IKB, IKE,JL,JK,JJ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -753,7 +758,7 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(CSTURB,PPHI3,PPHI3,D_PHI3DTDZ_O_DDTDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,D_PHI3DTDZ_O_DDTDZ)
 #endif
 !
 D_PHI3DTDZ_O_DDTDZ(:,:,IKB-1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKB)
@@ -762,16 +767,17 @@ D_PHI3DTDZ_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DRDZ_O_DDRDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DRDZ_O_DDRDZ
+   REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DRDZ_O_DDRDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -818,7 +824,7 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(CSTURB,PPHI3,PPHI3,D_PHI3DRDZ_O_DDRDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,D_PHI3DRDZ_O_DDRDZ)
 #endif
 !
 D_PHI3DRDZ_O_DDRDZ(:,:,IKB-1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKB)
@@ -827,17 +833,18 @@ D_PHI3DRDZ_O_DDRDZ(:,:,IKE+1)=D_PHI3DRDZ_O_DDRDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PHI3DTDZ2_O_DDTDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV)
+FUNCTION D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTURBDIM,OUSERV)
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPHI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PHI3DTDZ2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PHI3DTDZ2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -849,7 +856,7 @@ IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
 IF (HTURBDIM=='3DIM') THEN
    ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
    D_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ * (PPHI3 +  &
-           D_PHI3DTDZ_O_DDTDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) )
+           D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV) )
 
 ELSE
         !* 1DIM case
@@ -868,7 +875,7 @@ END IF
 #ifdef REPRO48
 #else
 !* smoothing
-CALL SMOOTH_TURB_FUNCT(CSTURB,PPHI3,PPHI3*2.*PDTDZ,D_PHI3DTDZ2_O_DDTDZ)
+CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3*2.*PDTDZ,D_PHI3DTDZ2_O_DDTDZ)
 #endif
 !
 !
@@ -878,14 +885,15 @@ D_PHI3DTDZ2_O_DDTDZ(:,:,IKE+1)=D_PHI3DTDZ2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PHI3DTDZ2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WTH2(CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+FUNCTION M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WTH2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -901,15 +909,16 @@ M3_WTH_WTH2(:,:,IKE+1)=M3_WTH_WTH2(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WTH2_O_DDTDZ(CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+FUNCTION D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WTH_WTH2,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WTH_WTH2
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WTH_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -927,17 +936,18 @@ D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTH2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2TH(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE)
+FUNCTION M3_WTH_W2TH(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_W2TH
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -954,19 +964,20 @@ M3_WTH_W2TH(:,:,IKE+1)=M3_WTH_W2TH(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
+FUNCTION D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA,PKEFF,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -984,18 +995,19 @@ D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2TH_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_W2R(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_WTH_W2R(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_W2R
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1011,19 +1023,20 @@ M3_WTH_W2R(:,:,IKE+1)=M3_WTH_W2R(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_W2R_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1040,21 +1053,22 @@ D_M3_WTH_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WR2(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
+FUNCTION M3_WTH_WR2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WTH_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WR2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1071,22 +1085,23 @@ M3_WTH_WR2(:,:,IKE+1)=M3_WTH_WR2(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+FUNCTION D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WR2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1104,19 +1119,20 @@ D_M3_WTH_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WTH_WTHR(CSTURB,KKA,KKU,KKL,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
+FUNCTION M3_WTH_WTHR(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
   REAL, DIMENSION(SIZE(PREDR1,1),SIZE(PREDR1,2),SIZE(PREDR1,3)) :: M3_WTH_WTHR
   INTEGER :: IKB, IKE
 !
@@ -1136,15 +1152,16 @@ M3_WTH_WTHR(:,:,IKE+1)=M3_WTH_WTHR(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WTH_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WTH_WTHR_O_DDTDZ(CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+FUNCTION D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WTH_WTHR
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WTH_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WTH_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1160,19 +1177,20 @@ D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WTH_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2TH(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
+FUNCTION M3_TH2_W2TH(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2TH
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1189,19 +1207,20 @@ M3_TH2_W2TH(:,:,IKE+1)=M3_TH2_W2TH(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
+FUNCTION D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   LOGICAL,                INTENT(IN) :: OUSERV
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1227,17 +1246,18 @@ D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTH2(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_TH2_WTH2(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTH2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1254,19 +1274,20 @@ M3_TH2_WTH2(:,:,IKE+1)=M3_TH2_WTH2(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1285,19 +1306,20 @@ D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_W2R(CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_W2R(D,CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2R
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1313,21 +1335,22 @@ M3_TH2_W2R(:,:,IKE+1)=M3_TH2_W2R(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2R_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1344,18 +1367,19 @@ D_M3_TH2_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_W2R_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WR2(CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_WR2(D,CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WR2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1371,20 +1395,21 @@ M3_TH2_WR2(:,:,IKE+1)=M3_TH2_WR2(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WR2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1401,19 +1426,20 @@ D_M3_TH2_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_TH2_WTHR(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_TH2_WTHR(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_TH2_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTHR
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1430,20 +1456,21 @@ M3_TH2_WTHR(:,:,IKE+1)=M3_TH2_WTHR(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_TH2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_TH2_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_TH2_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1460,17 +1487,18 @@ D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_TH2_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_THR_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTHR
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1487,19 +1515,20 @@ M3_THR_WTHR(:,:,IKE+1)=M3_THR_WTHR(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTHR_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTHR_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1516,19 +1545,20 @@ D_M3_THR_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WTH2(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_THR_WTH2(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTH2
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1545,20 +1575,21 @@ M3_THR_WTH2(:,:,IKE+1)=M3_THR_WTH2(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTH2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1575,19 +1606,20 @@ D_M3_THR_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDRDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1606,18 +1638,19 @@ D_M3_THR_WTH2_O_DDRDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2TH(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
+FUNCTION M3_THR_W2TH(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_W2TH
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1634,21 +1667,22 @@ M3_THR_W2TH(:,:,IKE+1)=M3_THR_W2TH(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
+FUNCTION D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2TH_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDTDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1666,18 +1700,19 @@ D_M3_THR_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKE)
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2TH_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
+FUNCTION D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDRDZ
   INTEGER :: IKB, IKE
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -1700,639 +1735,670 @@ END FUNCTION D_M3_THR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
 !
-FUNCTION PSI3(CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2TH3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: PSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: PSI3
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',0,ZHOOK_HANDLE)
-PSI3 = PHI3(CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
+PSI3 = PHI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
 END FUNCTION PSI3
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DRDZ_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DRDZ_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ_O_DDRDZ
 
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
-D_PSI3DRDZ_O_DDRDZ = D_PHI3DTDZ_O_DDTDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+D_PSI3DRDZ_O_DDRDZ = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
 !
 !C'est ok?!
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DTDZ_O_DDTDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+FUNCTION D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DTDZ_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DTDZ_O_DDTDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
-D_PSI3DTDZ_O_DDTDZ = D_PHI3DRDZ_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
+D_PSI3DTDZ_O_DDTDZ = D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DTDZ_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION D_PSI3DRDZ2_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
+FUNCTION D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PPSI3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2R3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PRED2THR3
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  CHARACTER(len=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
   LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
-  REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)) :: D_PSI3DRDZ2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_PSI3DRDZ2_O_DDRDZ = D_PHI3DTDZ2_O_DDTDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
+D_PSI3DRDZ2_O_DDRDZ = D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_PSI3DRDZ2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WR2(CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+FUNCTION M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WR2
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',0,ZHOOK_HANDLE)
-M3_WR_WR2 = M3_WTH_WTH2(CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+M3_WR_WR2 = M3_WTH_WTH2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WR2_O_DDRDZ(CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WR_WR2
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WR_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WR2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_WR_WR2_O_DDRDZ = D_M3_WTH_WTH2_O_DDTDZ(CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+D_M3_WR_WR2_O_DDRDZ = D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2R(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+FUNCTION M3_WR_W2R(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2R
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',0,ZHOOK_HANDLE)
-M3_WR_W2R = M3_WTH_W2TH(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
+M3_WR_W2R = M3_WTH_W2TH(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+FUNCTION D_M3_WR_W2R_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_W2R_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_WR_W2R_O_DDRDZ = D_M3_WTH_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
+D_M3_WR_W2R_O_DDRDZ = D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_W2TH(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_WR_W2TH(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2TH
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',0,ZHOOK_HANDLE)
-M3_WR_W2TH = M3_WTH_W2R(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+M3_WR_W2TH = M3_WTH_W2R(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+FUNCTION D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_W2TH_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_WR_W2TH_O_DDRDZ = D_M3_WTH_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
+D_M3_WR_W2TH_O_DDRDZ = D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTH2(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+FUNCTION M3_WR_WTH2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTH2
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',0,ZHOOK_HANDLE)
-M3_WR_WTH2 = M3_WTH_WR2(CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
+M3_WR_WTH2 = M3_WTH_WR2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+FUNCTION D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WTH2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_WR_WTH2_O_DDRDZ = D_M3_WTH_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
+D_M3_WR_WTH2_O_DDRDZ=D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_WR_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+FUNCTION M3_WR_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PKEFF
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_WR_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTHR
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',0,ZHOOK_HANDLE)
-M3_WR_WTHR = M3_WTH_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
+M3_WR_WTHR = M3_WTH_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_WR_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_WR_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PM3_WR_WTHR
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_WR_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WR_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WR_WTHR_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_WR_WTHR_O_DDRDZ = D_M3_WTH_WTHR_O_DDTDZ(CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+D_M3_WR_WTHR_O_DDRDZ = D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_WR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2R(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+FUNCTION M3_R2_W2R(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_W2R
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',0,ZHOOK_HANDLE)
-M3_R2_W2R = M3_TH2_W2TH(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
+M3_R2_W2R = M3_TH2_W2TH(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+FUNCTION D_M3_R2_W2R_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
   LOGICAL,                INTENT(IN) :: OUSERV
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_W2R_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_R2_W2R_O_DDRDZ = D_M3_TH2_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
+D_M3_R2_W2R_O_DDRDZ = D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WR2(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+FUNCTION M3_R2_WR2(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WR2
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',0,ZHOOK_HANDLE)
-M3_R2_WR2 = M3_TH2_WTH2(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
+M3_R2_WR2 = M3_TH2_WTH2(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WR2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_R2_WR2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WR2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_R2_WR2_O_DDRDZ = D_M3_TH2_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+D_M3_R2_WR2_O_DDRDZ = D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_W2TH(CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_W2TH(D,CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_W2TH
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_W2TH
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',0,ZHOOK_HANDLE)
-M3_R2_W2TH = M3_TH2_W2R(CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+M3_R2_W2TH = M3_TH2_W2R(D,CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_W2TH
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_W2TH_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_W2TH_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_R2_W2TH_O_DDRDZ = D_M3_TH2_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
+D_M3_R2_W2TH_O_DDRDZ = D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_W2TH_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTH2(CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_WTH2(D,CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTH2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WTH2
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',0,ZHOOK_HANDLE)
-M3_R2_WTH2 = M3_TH2_WR2(CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+M3_R2_WTH2 = M3_TH2_WR2(D,CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTH2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTH2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WTH2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_R2_WTH2_O_DDRDZ = D_M3_TH2_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+D_M3_R2_WTH2_O_DDRDZ = D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTH2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_R2_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION M3_R2_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_R2_WTHR
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_R2_WTHR
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',0,ZHOOK_HANDLE)
-M3_R2_WTHR = M3_TH2_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+M3_R2_WTHR = M3_TH2_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',1,ZHOOK_HANDLE)
 END FUNCTION M3_R2_WTHR
 !----------------------------------------------------------------------------
-FUNCTION D_M3_R2_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+FUNCTION D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PETHETA
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDRDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_R2_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_R2_WTHR_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_R2_WTHR_O_DDRDZ = D_M3_TH2_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
+D_M3_R2_WTHR_O_DDRDZ = D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_R2_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WTHR_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTHR_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_THR_WTHR_O_DDRDZ = D_M3_THR_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+D_M3_THR_WTHR_O_DDRDZ = D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WTHR_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_WR2(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION M3_THR_WR2(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_WR2
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WR2
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',0,ZHOOK_HANDLE)
-M3_THR_WR2 = M3_THR_WTH2(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+M3_THR_WR2 = M3_THR_WTH2(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_WR2
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+FUNCTION D_M3_THR_WR2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WR2_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_THR_WR2_O_DDRDZ = D_M3_THR_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
+D_M3_THR_WR2_O_DDRDZ = D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+FUNCTION D_M3_THR_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_WR2_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WR2_O_DDTDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
-D_M3_THR_WR2_O_DDTDZ = D_M3_THR_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
+D_M3_THR_WR2_O_DDTDZ = D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_WR2_O_DDTDZ
 !----------------------------------------------------------------------------
-FUNCTION M3_THR_W2R(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+FUNCTION M3_THR_W2R(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: M3_THR_W2R
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_W2R
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',0,ZHOOK_HANDLE)
-M3_THR_W2R = M3_THR_W2TH(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
+M3_THR_W2R = M3_THR_W2TH(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',1,ZHOOK_HANDLE)
 END FUNCTION M3_THR_W2R
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+FUNCTION D_M3_THR_W2R_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PBLL_O_E
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTDZ
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PEMOIST
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDRDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2R_O_DDRDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
-D_M3_THR_W2R_O_DDRDZ = D_M3_THR_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
+D_M3_THR_W2R_O_DDRDZ = D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2R_O_DDRDZ
 !----------------------------------------------------------------------------
-FUNCTION D_M3_THR_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+FUNCTION D_M3_THR_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+  TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
   TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
   INTEGER,                INTENT(IN) :: KKA 
   INTEGER,                INTENT(IN) :: KKU  
   INTEGER,                INTENT(IN) :: KKL
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDR1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PREDTH1
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PD
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS
-  REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE
-  REAL, DIMENSION(SIZE(PD,1),SIZE(PD,2),SIZE(PD,3)) :: D_M3_THR_W2R_O_DDTDZ
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2R_O_DDTDZ
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
-D_M3_THR_W2R_O_DDTDZ = D_M3_THR_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
+D_M3_THR_W2R_O_DDTDZ = D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE)
 !
 IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
 END FUNCTION D_M3_THR_W2R_O_DDTDZ
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index 3b3dd88c73bdde03883062b3554e6df40e517609..9f981d80eb81f3a7eb30ba0461fd3da2a1b8c240 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -5,14 +5,14 @@
 MODULE MODE_TKE_EPS_SOURCES
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TKE_EPS_SOURCES(CST,CSTURB,BUCONF,HPROGRAM, &
-                    & KKA,KKU,KKL,KMI,PTKEM,PLM,PLEPS,PDP,  &
+      SUBROUTINE TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,HPROGRAM,         &
+                    & KKA,KKU,KKL,KMI,PTKEM,PLM,PLEPS,PDP,             &
                     & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,        &
                     & PTSTEP,PIMPL,PEXPL,                              &
                     & HTURBLEN,HTURBDIM,                               &
                     & TPFILE,OTURB_DIAG,OLES_CALL,                     &
                     & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,&
-                    & TBUDGETS, KBUDGETS, &
+                    & TBUDGETS, KBUDGETS,                              &
                     & PEDR, PTR,PDISS                                  )
 !     ##################################################################
 !
@@ -134,6 +134,7 @@ USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_BUDGET, ONLY: TBUDGETCONF_t, NBUDGET_TKE, NBUDGET_TH, TBUDGETDATA
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_DIAG_IN_RUN, ONLY : LDIAG_IN_RUN, XCURRENT_TKE_DISS
 USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
@@ -160,21 +161,22 @@ IMPLICIT NONE
 !*       0.1  declarations of arguments
 !
 !
-TYPE(CST_t),             INTENT(IN)    :: CST
-TYPE(CSTURB_t),          INTENT(IN)    :: CSTURB
-TYPE(TBUDGETCONF_t),     INTENT(IN)    :: BUCONF
+TYPE(DIMPHYEX_t),        INTENT(IN)   :: D
+TYPE(CST_t),             INTENT(IN)   :: CST
+TYPE(CSTURB_t),          INTENT(IN)   :: CSTURB
+TYPE(TBUDGETCONF_t),     INTENT(IN)   :: BUCONF
 INTEGER,                 INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                 INTENT(IN)   :: KKU           !uppest atmosphere array index
 INTEGER,                 INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
 
 INTEGER,                 INTENT(IN)   ::  KMI          ! model index number  
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PTKEM        ! TKE at t-deltat
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PLM          ! mixing length         
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PLEPS        ! dissipative length
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PRHODJ       ! density * grid volume
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PTKEM        ! TKE at t-deltat
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PLM          ! mixing length         
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PLEPS        ! dissipative length
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PRHODJ       ! density * grid volume
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PDXX,PDYY,PDZZ,PDZX,PDZY
                                                        ! metric coefficients
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PZZ          ! physical height w-pt
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PZZ          ! physical height w-pt
 REAL,                    INTENT(IN)   ::  PTSTEP       ! Time step 
 REAL,                    INTENT(IN)   ::  PEXPL, PIMPL ! Coef. temporal. disc.
 CHARACTER(LEN=4),        INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
@@ -185,27 +187,27 @@ TYPE(TFILEDATA),         INTENT(IN)   ::  TPFILE       ! Output file
 LOGICAL,                 INTENT(IN)   ::  OLES_CALL    !
 LOGICAL,                 INTENT(IN)   ::  OTURB_DIAG   ! switch to write some
                                   ! diagnostic fields in the syncronous FM-file
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PDP          ! Dyn. prod. of TKE
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PTRH
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PTP          ! Ther. prod. of TKE
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRTKES       ! RHOD * Jacobian *
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(INOUT)::  PDP          ! Dyn. prod. of TKE
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PTRH
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PTP          ! Ther. prod. of TKE
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(INOUT)::  PRTKES       ! RHOD * Jacobian *
                                                        ! TKE at t+deltat
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
-REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
-REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
-REAL, DIMENSION(:,:,:),  INTENT(IN)  ::  PRTKEMS      ! Advection source
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(IN)  ::  PRTKEMS      ! Advection source
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
 INTEGER, INTENT(IN) :: KBUDGETS
-REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
-REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PDISS        ! Dissipation of TKE
-REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PEDR         ! EDR 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PDISS        ! Dissipation of TKE
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),  INTENT(OUT), OPTIONAL  ::  PEDR         ! EDR 
 !
 !
 !
 !*       0.2  declaration of local variables
 !
-REAL, DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3))::         &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) ::         &
        ZA,       & ! under diagonal elements of the tri-diagonal matrix involved
                    ! in the temporal implicit scheme
        ZRES,     & ! treated variable at t+ deltat when the turbu-
@@ -216,12 +218,10 @@ REAL, DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3))::         &
        ZSOURCE,  & ! source of evolution for the treated variable
        ZKEFF,    & ! effectif diffusion coeff = LT * SQRT( TKE )
        ZTR         ! Transport term
-LOGICAL,DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3)) :: GTKENEG
+LOGICAL,DIMENSION(D%NIT,D%NJT,D%NKT) :: GTKENEG
                    ! 3D mask .T. if TKE < CSTURB%XTKEMIN
-INTEGER             :: IIB,IIE,IJB,IJE,IKB,IKE
-                                    ! Index values for the Beginning and End
+INTEGER             :: IKB          ! Index values for the Beginning and End
                                     ! mass points of the domain 
-INTEGER             :: IIU,IJU,IKU  ! array size in the 3 dimensions 
 !
 TYPE(LIST_ll), POINTER :: TZFIELDDISS_ll ! list of fields to exchange
 INTEGER                :: IINFO_ll       ! return code of parallel routine
@@ -237,11 +237,7 @@ NULLIFY(TZFIELDDISS_ll)
 
 IF (LHOOK) CALL DR_HOOK('TKE_EPS_SOURCES',0,ZHOOK_HANDLE)
 !
-IIU=SIZE(PTKEM,1)
-IJU=SIZE(PTKEM,2)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
+IKB=D%NKB
 !
 ! compute the effective diffusion coefficient at the mass point
 ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) 
@@ -284,11 +280,11 @@ ZSOURCE(:,:,:) = ( PRTKES(:,:,:) +  PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) &
 ! matrix inverted in TRIDIAG 
 !
 ZA(:,:,:)     = - PTSTEP * CSTURB%XCET * &
-                MZM(ZKEFF, KKA, KKU, KKL) * MZM(PRHODJ, KKA, KKU, KKL) / PDZZ**2
+                MZM(ZKEFF, D%NKA, KKU, KKL) * MZM(PRHODJ, D%NKA, KKU, KKL) / PDZZ**2
 !
 ! Compute TKE at time t+deltat: ( stored in ZRES )
 !
-CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,&
+CALL TRIDIAG_TKE(D,D%NKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,&
             & ZSOURCE,PTSTEP*ZFLX,ZRES)
 CALL GET_HALO(ZRES)
 !
@@ -318,20 +314,20 @@ IF ( OLES_CALL .OR.                         &
 ! Compute the cartesian vertical flux of TKE in ZFLX
 !
 
-  ZFLX(:,:,:)   = - CSTURB%XCET * MZM(ZKEFF, KKA, KKU, KKL) *   &
-                  DZM(PIMPL * ZRES + PEXPL * PTKEM, KKA, KKU, KKL) / PDZZ
+  ZFLX(:,:,:)   = - CSTURB%XCET * MZM(ZKEFF, D%NKA, KKU, KKL) *   &
+                  DZM(PIMPL * ZRES + PEXPL * PTKEM, D%NKA, KKU, KKL) / PDZZ
 !
   ZFLX(:,:,IKB) = 0.
-  ZFLX(:,:,KKA) = 0.
+  ZFLX(:,:,D%NKA) = 0.
 !
 ! Compute the whole turbulent TRansport of TKE:
 !
-  ZTR(:,:,:)= ZTR - DZF(MZM(PRHODJ, KKA, KKU, KKL) * ZFLX / PDZZ, KKA, KKU, KKL) /PRHODJ
+  ZTR(:,:,:)= ZTR - DZF(MZM(PRHODJ, D%NKA, KKU, KKL) * ZFLX / PDZZ, D%NKA, KKU, KKL) /PRHODJ
 !
 ! Storage in the LES configuration
 !
   IF (OLES_CALL) THEN
-    CALL LES_MEAN_SUBGRID(MZF(ZFLX, KKA, KKU, KKL), X_LES_SUBGRID_WTke )
+    CALL LES_MEAN_SUBGRID(MZF(ZFLX, D%NKA, KKU, KKL), X_LES_SUBGRID_WTke )
     CALL LES_MEAN_SUBGRID(-ZTR, X_LES_SUBGRID_ddz_WTke )
   END IF
 !
diff --git a/src/common/turb/mode_tridiag.F90 b/src/common/turb/mode_tridiag.F90
index 3c695e7a55e0421fe8d023818c0c765da645e1be..81253f67f50f919dd1613d9d393b9772d4d16966 100644
--- a/src/common/turb/mode_tridiag.F90
+++ b/src/common/turb/mode_tridiag.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TRIDIAG
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TRIDIAG(KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
+SUBROUTINE TRIDIAG(D,KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
                                   PRHODJ,PSOURCE,PVARP )
        USE PARKIND1, ONLY : JPRB
        USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -115,29 +115,31 @@ SUBROUTINE TRIDIAG(KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
 !*       0. DECLARATIONS
 !
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 !
 IMPLICIT NONE
 !
 !
 !*       0.1 declarations of arguments
 !
+TYPE(DIMPHYEX_t),          INTENT(IN)   :: D
 INTEGER,                   INTENT(IN)  :: KKA        !near ground array index  
 INTEGER,                   INTENT(IN)  :: KKU        !uppest atmosphere array index
 INTEGER,                   INTENT(IN)  :: KKL        !vert. levels type 1=MNH -1=ARO
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PVARM       ! variable at t-1  
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PA          ! upper diag. elements
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PVARM       ! variable at t-1  
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PA          ! upper diag. elements
 REAL,                      INTENT(IN)  :: PTSTEP      ! Double time step
 REAL,                      INTENT(IN)  :: PEXPL,PIMPL ! weights of the temporal scheme
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PRHODJ      ! (dry rho)*J
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PSOURCE     ! source term of PVAR    
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PRHODJ      ! (dry rho)*J
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PSOURCE     ! source term of PVAR    
 !
-REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PVARP       ! variable at t+1        
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(OUT) :: PVARP       ! variable at t+1        
 !
 !*       0.2 declarations of local variables
 !
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZY ,ZGAM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZY ,ZGAM 
                                          ! RHS of the equation, 3D work array
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2))                :: ZBET
+REAL, DIMENSION(D%NIT,D%NJT)         :: ZBET
                                          ! 2D work array
 INTEGER                              :: JK            ! loop counter
 INTEGER                              :: IKB,IKE       ! inner vertical limits
@@ -152,12 +154,12 @@ INTEGER                              :: IKTB,IKTE     ! start, end of k loops in
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TRIDIAG',0,ZHOOK_HANDLE)
-IKTB=1+JPVEXT_TURB
-IKT=SIZE(PVARM,3)
-IKTE=IKT-JPVEXT_TURB 
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
 !
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE  
 !
 ZY(:,:,IKB) = PVARM(:,:,IKB)  + PTSTEP*PSOURCE(:,:,IKB) -   &
   PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB))
@@ -225,8 +227,8 @@ END IF
 !*       3.  FILL THE UPPER AND LOWER EXTERNAL VALUES
 !            ----------------------------------------
 !
-PVARP(:,:,KKA)=PVARP(:,:,IKB)
-PVARP(:,:,KKU)=PVARP(:,:,IKE)
+PVARP(:,:,D%NKA)=PVARP(:,:,IKB)
+PVARP(:,:,D%NKU)=PVARP(:,:,IKE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_tridiag_thermo.F90 b/src/common/turb/mode_tridiag_thermo.F90
index 5488c69f08941147fe0cafded7870f16aac0e796..1e1f4402d3f0a95f4a81e75c2f5205fa8ea49c7e 100644
--- a/src/common/turb/mode_tridiag_thermo.F90
+++ b/src/common/turb/mode_tridiag_thermo.F90
@@ -5,10 +5,8 @@
 MODULE MODE_TRIDIAG_THERMO
 IMPLICIT NONE
 CONTAINS       
-SUBROUTINE TRIDIAG_THERMO(KKA,KKU,KKL,PVARM,PF,PDFDDTDZ,PTSTEP,PIMPL,  &
+SUBROUTINE TRIDIAG_THERMO(D,KKA,KKU,KKL,PVARM,PF,PDFDDTDZ,PTSTEP,PIMPL,  &
                                  PDZZ,PRHODJ,PVARP             )
-       USE PARKIND1, ONLY : JPRB
-       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !      #################################################
 !
 !
@@ -118,6 +116,9 @@ SUBROUTINE TRIDIAG_THERMO(KKA,KKU,KKL,PVARM,PF,PDFDDTDZ,PTSTEP,PIMPL,  &
 !
 !*       0. DECLARATIONS
 !
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t
 USE MODD_PARAMETERS, ONLY : JPVEXT_TURB
 !
 USE MODI_SHUMAN, ONLY : MZM
@@ -127,28 +128,29 @@ IMPLICIT NONE
 !
 !*       0.1 declarations of arguments
 !
+TYPE(DIMPHYEX_t),     INTENT(IN)   :: D
 INTEGER,              INTENT(IN)   :: KKA     !near ground array index  
 INTEGER,              INTENT(IN)   :: KKU     !uppest atmosphere array index
 INTEGER,              INTENT(IN)   :: KKL     !vert. levels type 1=MNH -1=ARO
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PVARM   ! variable at t-1      at mass point
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PF      ! flux in dT/dt=-dF/dz at flux point
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PDFDDTDZ! dF/d(dT/dz)          at flux point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PVARM   ! variable at t-1      at mass point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PF      ! flux in dT/dt=-dF/dz at flux point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDFDDTDZ! dF/d(dT/dz)          at flux point
 REAL,                   INTENT(IN) :: PTSTEP  ! Double time step
 REAL,                   INTENT(IN) :: PIMPL   ! implicit weight
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ    ! Dz                   at flux point
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ  ! (dry rho)*J          at mass point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDZZ    ! Dz                   at flux point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRHODJ  ! (dry rho)*J          at mass point
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT):: PVARP   ! variable at t+1      at mass point
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT):: PVARP   ! variable at t+1      at mass point
 !
 !
 !*       0.2 declarations of local variables
 !
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZRHODJ_DFDDTDZ_O_DZ2
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZMZM_RHODJ
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZA, ZB, ZC
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZY ,ZGAM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZRHODJ_DFDDTDZ_O_DZ2
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZMZM_RHODJ
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZA, ZB, ZC
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZY ,ZGAM 
                                          ! RHS of the equation, 3D work array
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2))                :: ZBET
+REAL, DIMENSION(D%NIT,D%NJT)                :: ZBET
                                          ! 2D work array
 INTEGER             :: JK            ! loop counter
 INTEGER             :: IKB,IKE       ! inner vertical limits
@@ -162,11 +164,11 @@ INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TRIDIAG_THERMO',0,ZHOOK_HANDLE)
-IKT=SIZE(PVARM,3)          
-IKTB=1+JPVEXT_TURB              
-IKTE=IKT-JPVEXT_TURB
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE
 
 !
 ZMZM_RHODJ  = MZM(PRHODJ,KKA,KKU,KKL)
diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90
index 52ec08bdfbcec157530255aa9593f16e2ee02383..d2d2afb6a05084be5b58b0a31dbdffa3196938f5 100644
--- a/src/common/turb/mode_tridiag_tke.F90
+++ b/src/common/turb/mode_tridiag_tke.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TRIDIAG_TKE
 IMPLICIT NONE
 CONTAINS       
-SUBROUTINE TRIDIAG_TKE(KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
+SUBROUTINE TRIDIAG_TKE(D,KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
                                   PRHODJ,PSOURCE,PDIAG,PVARP )
        USE PARKIND1, ONLY : JPRB
        USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -113,31 +113,33 @@ SUBROUTINE TRIDIAG_TKE(KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, &
 !*       0. DECLARATIONS
 !
 USE MODD_PARAMETERS
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 !
 IMPLICIT NONE
 !
 !
 !*       0.1 declarations of arguments
 !
+TYPE(DIMPHYEX_t),     INTENT(IN)   :: D
 INTEGER,              INTENT(IN)   :: KKA     !near ground array index  
 INTEGER,              INTENT(IN)   :: KKU     !uppest atmosphere array index
 INTEGER,              INTENT(IN)   :: KKL     !vert. levels type 1=MNH -1=ARO
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PVARM       ! variable at t-1  
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PA          ! upper diag. elements
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PVARM       ! variable at t-1  
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PA          ! upper diag. elements
 REAL,                      INTENT(IN)  :: PTSTEP      ! Double time step
 REAL,                      INTENT(IN)  :: PEXPL,PIMPL ! weights of the temporal scheme
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PRHODJ      ! (dry rho)*J
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PSOURCE     ! source term of PVAR    
-REAL, DIMENSION(:,:,:),    INTENT(IN)  :: PDIAG       ! diagonal term linked to
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PRHODJ      ! (dry rho)*J
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PSOURCE     ! source term of PVAR    
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(IN)  :: PDIAG       ! diagonal term linked to
                                                       ! the implicit dissipation
 !
-REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PVARP       ! variable at t+1        
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),    INTENT(OUT) :: PVARP       ! variable at t+1        
 !
 !*       0.2 declarations of local variables
 !
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2),SIZE(PVARM,3))  :: ZY ,ZGAM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  :: ZY ,ZGAM 
                                          ! RHS of the equation, 3D work array
-REAL, DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2))                :: ZBET
+REAL, DIMENSION(D%NIT,D%NJT)        :: ZBET
                                          ! 2D work array
 INTEGER             :: JK            ! loop counter
 INTEGER             :: IKB,IKE       ! inner vertical limits
@@ -151,13 +153,12 @@ INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TRIDIAG_TKE',0,ZHOOK_HANDLE)
-IKT=SIZE(PVARM,3)
-IKTB=1+JPVEXT_TURB
-IKTE=IKT-JPVEXT_TURB
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-
 !
+IKT=D%NKT
+IKTB=D%NKTB
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE
 !
 ZY(:,:,IKB) = PVARM(:,:,IKB)  + PTSTEP*PSOURCE(:,:,IKB) -   &
   PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB))
diff --git a/src/common/turb/mode_turb_hor.F90 b/src/common/turb/mode_turb_hor.F90
index 76973ab7a2621f81e5f8adaa901ebd3aa28deaf5..df7a8447547b49601f9702d49e82a4b00d7a35bc 100644
--- a/src/common/turb/mode_turb_hor.F90
+++ b/src/common/turb/mode_turb_hor.F90
@@ -5,8 +5,9 @@
 MODULE MODE_TURB_HOR  
 IMPLICIT NONE
 CONTAINS
-             SUBROUTINE TURB_HOR(KSPLT, KRR, KRRL, KRRI, PTSTEP,            &
-                      OTURB_FLX,OSUBG_COND,OOCEAN,                   &
+             SUBROUTINE TURB_HOR(D,CST,CSTURB,                       &
+                      KSPLT, KRR, KRRL, KRRI, PTSTEP,                &
+                      OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                       TPFILE,                                        &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                  &
                       PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                 &
@@ -136,8 +137,9 @@ CONTAINS
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST
-USE MODD_CTURB
+USE MODD_CST, ONLY : CST_t
+USE MODD_CTURB, ONLY : CSTURB_t
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
@@ -157,6 +159,9 @@ IMPLICIT NONE
 !*       0.1  declaration of arguments
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 INTEGER,                INTENT(IN)   :: KSPLT         ! current split index
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -167,6 +172,7 @@ LOGICAL,                  INTENT(IN)    ::  OTURB_FLX    ! switch to write the
 LOGICAL,                 INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid 
 !                                                    condensation
 LOGICAL,                  INTENT(IN) ::  OOCEAN ! switch for ocean version
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 TYPE(TFILEDATA),          INTENT(IN)    ::  TPFILE       ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
@@ -265,8 +271,8 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
 !*       8.   TURBULENT CORRELATIONS : <THl THl>, <THl Rnp>, <Rnp Rnp>, Sigma_s
 !
       IF (KSPLT==1)                                                  &
-      CALL      TURB_HOR_THERMO_CORR(KRR, KRRL, KRRI,                &
-                      OTURB_FLX,OSUBG_COND,OOCEAN,                   &
+      CALL      TURB_HOR_THERMO_CORR(D,CST,KRR, KRRL, KRRI,          &
+                      OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                       TPFILE,                                        &
                       PINV_PDXX,PINV_PDYY,                           &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -356,7 +362,8 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) ::  PSIGS
                       PRSVS                                          )
 !
       IF (KSPLT==1 .AND. LLES_CALL)                                  &
-      CALL      TURB_HOR_SV_CORR(KRR,KRRL,KRRI,OOCEAN,               &
+      CALL      TURB_HOR_SV_CORR(D,CST,CSTURB,                       &
+                      KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,             &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
                       PLM,PLEPS,PTKEM,PTHVREF,                       &
                       PTHLM,PRM,                                     &
diff --git a/src/common/turb/mode_turb_hor_splt.F90 b/src/common/turb/mode_turb_hor_splt.F90
index ffdf167115a076217f87fa4455ee8f0cf45a4c30..9fb71c0419ff666ac9a3e861e16ac585261cedad 100644
--- a/src/common/turb/mode_turb_hor_splt.F90
+++ b/src/common/turb/mode_turb_hor_splt.F90
@@ -5,8 +5,9 @@
 MODULE MODE_TURB_HOR_SPLT
 IMPLICIT NONE
 CONTAINS
-           SUBROUTINE TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP,      &
-                      HLBCX,HLBCY,OTURB_FLX,OSUBG_COND,OOCEAN,       &
+           SUBROUTINE TURB_HOR_SPLT(D,CST,CSTURB,                    &
+                      KSPLIT, KRR, KRRL, KRRI, PTSTEP,HLBCX,HLBCY,   &
+                      OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                       TPFILE,                                        &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                  &
                       PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                 &
@@ -156,8 +157,9 @@ CONTAINS
 !          ------------
 !
 USE MODD_CONF
-USE MODD_CST
-USE MODD_CTURB
+USE MODD_CST, ONLY: CST_t
+USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
@@ -174,6 +176,9 @@ IMPLICIT NONE
 !*       0.1  declaration of arguments
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time splitting
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -182,9 +187,10 @@ REAL,                   INTENT(IN)   ::  PTSTEP       ! timestep
 CHARACTER (LEN=*), DIMENSION(:), INTENT(IN)       ::  HLBCX,HLBCY
 LOGICAL,                  INTENT(IN)    ::  OTURB_FLX    ! switch to write the
                                  ! turbulent fluxes in the syncronous FM-file
-LOGICAL,                 INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid 
+LOGICAL,                 INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid condensation
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
-!                                                    condensation
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
+
 TYPE(TFILEDATA),          INTENT(IN)    ::  TPFILE       ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
@@ -356,8 +362,8 @@ IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN
   DO JSPLT=1,KSPLIT
 !
 ! compute the turbulent tendencies for the small time step
-    CALL TURB_HOR(JSPLT, KRR, KRRL, KRRI, PTSTEP,                 &
-                   OTURB_FLX,OSUBG_COND,OOCEAN,                   &
+    CALL TURB_HOR(D,CST,CSTURB,JSPLT, KRR, KRRL, KRRI, PTSTEP,    &
+                   OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                    TPFILE,                                        &
                    PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                  &
                    PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                 &
@@ -497,8 +503,8 @@ IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN
 !
 ELSE
 !
-  CALL TURB_HOR(1, KRR, KRRL, KRRI,  PTSTEP,                   &
-                OTURB_FLX,OSUBG_COND,OOCEAN,                   &
+  CALL TURB_HOR(D,CST,CSTURB,1, KRR, KRRL, KRRI,  PTSTEP,      &
+                OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                 TPFILE,                                        &
                 PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                  &
                 PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                 &
diff --git a/src/common/turb/mode_turb_hor_sv_corr.F90 b/src/common/turb/mode_turb_hor_sv_corr.F90
index 9f559aa8e3c5e4e6fe9b98db9a12c61a104c7def..a007a975573d6870ac503047697fc28688138bb3 100644
--- a/src/common/turb/mode_turb_hor_sv_corr.F90
+++ b/src/common/turb/mode_turb_hor_sv_corr.F90
@@ -5,7 +5,8 @@
 MODULE MODE_TURB_HOR_SV_CORR
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_SV_CORR(KRR,KRRL,KRRI,OOCEAN,              &
+      SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB,                      &
+                      KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,             &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
                       PLM,PLEPS,PTKEM,PTHVREF,                       &
                       PTHLM,PRM,                                     &
@@ -47,9 +48,10 @@ CONTAINS
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST
+USE MODD_CST, ONLY: CST_t
 USE MODD_CONF
-USE MODD_CTURB
+USE MODD_CTURB, ONLY : CSTURB_t
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PARAMETERS
 USE MODD_NSV, ONLY : NSV,NSV_LGBEG,NSV_LGEND
 USE MODD_LES
@@ -73,10 +75,14 @@ IMPLICIT NONE
 !
 !
 !
+TYPE(DIMPHYEX_t),         INTENT(IN)    ::  D
+TYPE(CST_t),              INTENT(IN)    ::  CST
+TYPE(CSTURB_t),           INTENT(IN)    ::  CSTURB
 INTEGER,                  INTENT(IN)    ::  KRR          ! number of moist var.
 INTEGER,                  INTENT(IN)    ::  KRRL         ! number of liquid var.
 INTEGER,                  INTENT(IN)    ::  KRRI         ! number of ice var.
 LOGICAL,                  INTENT(IN)    ::  OOCEAN       ! switch for Ocean model version
+LOGICAL,                  INTENT(IN)    ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
                                                          ! Metric coefficients
 REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PLM          ! mixing length
@@ -117,9 +123,9 @@ CALL SECOND_MNH(ZTIME1)
 !
 IF(LBLOWSNOW) THEN
 ! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables        
-   ZCSV= XCHF/XRSNOW 
+   ZCSV= CSTURB%XCHF/XRSNOW 
 ELSE
-   ZCSV= XCHF
+   ZCSV= CSTURB%XCHF
 ENDIF
 !
 DO JSV=1,NSV
@@ -145,34 +151,34 @@ DO JSV=1,NSV
   ! covariance SvThv
   !
   IF (LLES_CALL) THEN
-    ZA(:,:,:)   =  ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN)
+    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
     IF (.NOT. L2D) THEN
       ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                          &
           *  (  GX_M_M(PTHLM,PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
               + GY_M_M(PTHLM,PDYY,PDZZ,PDZY) * GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)  &
-             ) * (XCSHF+ZCSV) / (2.*ZCTSVD)
+             ) * (CSTURB%XCSHF+ZCSV) / (2.*ZCTSVD)
     ELSE
       ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                          &
               * GX_M_M(PTHLM,PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
-              * (XCSHF+ZCSV) / (2.*ZCTSVD)
+              * (CSTURB%XCSHF+ZCSV) / (2.*ZCTSVD)
     END IF
     CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-    CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
+    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
     !
     IF (KRR>=1) THEN
-      ZA(:,:,:)   =  EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
       IF (.NOT. L2D) THEN
         ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                                 &
             *  (  GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
                 + GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY) * GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)  &
-               ) * (XCHF+ZCSV) / (2.*ZCQSVD)
+               ) * (CSTURB%XCHF+ZCSV) / (2.*ZCQSVD)
       ELSE
         ZFLX(:,:,:)=  PLM(:,:,:) * PLEPS(:,:,:)                                                 &
                 * GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)  &
-                * (XCHF+ZCSV) / (2.*ZCQSVD)
+                * (CSTURB%XCHF+ZCSV) / (2.*ZCQSVD)
       END IF
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
-      CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE. )
     END IF
   END IF
 !
diff --git a/src/common/turb/mode_turb_hor_thermo_corr.F90 b/src/common/turb/mode_turb_hor_thermo_corr.F90
index cd359059e6b87ecaf951a16f2ccc3888aac14db3..7e01a792529d88cee4811a35865b2ef67ae68524 100644
--- a/src/common/turb/mode_turb_hor_thermo_corr.F90
+++ b/src/common/turb/mode_turb_hor_thermo_corr.F90
@@ -6,8 +6,8 @@
 MODULE MODE_TURB_HOR_THERMO_CORR
 IMPLICIT NONE
 CONTAINS
-      SUBROUTINE TURB_HOR_THERMO_CORR(KRR, KRRL, KRRI,               &
-                      OTURB_FLX,OSUBG_COND,OOCEAN,                   &
+      SUBROUTINE TURB_HOR_THERMO_CORR(D,CST,KRR, KRRL, KRRI,         &
+                      OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,      &
                       TPFILE,                                        &
                       PINV_PDXX,PINV_PDYY,                           &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,                      &
@@ -58,10 +58,11 @@ CONTAINS
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST
+USE MODD_CST, ONLY : CST_t
 USE MODD_CONF
 USE MODD_CTURB
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
@@ -87,14 +88,16 @@ IMPLICIT NONE
 !
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
 LOGICAL,                  INTENT(IN)    ::  OTURB_FLX    ! switch to write the
                                  ! turbulent fluxes in the syncronous FM-file
-LOGICAL,                 INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid
+LOGICAL,                 INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid condensation
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
-!                                                    condensation
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 TYPE(TFILEDATA),          INTENT(IN)    ::  TPFILE       ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    ::  PINV_PDXX   ! 1./PDXX
@@ -227,9 +230,9 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. TPFILE%LOPENED ) &
     CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Thl2, .TRUE. ) 
     CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Thl2, .TRUE. )
     CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_Thl2, .TRUE. )
-    ZA(:,:,:)   =  ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN)
+    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
     CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
-    CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz, .TRUE. )
+    CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz, .TRUE. )
     CALL SECOND_MNH(ZTIME2)
     XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
   END IF
@@ -316,10 +319,10 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. TPFILE%LOPENED ) &
       CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_ThlRt, .TRUE. )
       CALL LES_MEAN_SUBGRID( -XCTD*SQRT(PTKEM)*ZFLX/PLEPS ,X_LES_SUBGRID_DISS_ThlRt, .TRUE. )
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_RtThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
-      ZA(:,:,:)   =  EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
+      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_ThlThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz,.TRUE.)
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_ThlPz,.TRUE.)
       CALL SECOND_MNH(ZTIME2)
       XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
     END IF
@@ -383,7 +386,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. TPFILE%LOPENED ) &
       CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Rt2, .TRUE. ) 
       CALL LES_MEAN_SUBGRID( MZF(PWM)*ZFLX, X_LES_RES_W_SBG_Rt2, .TRUE. )
       CALL LES_MEAN_SUBGRID( ZA*ZFLX, X_LES_SUBGRID_RtThv, .TRUE. ) 
-      CALL LES_MEAN_SUBGRID( -XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
+      CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLX, X_LES_SUBGRID_RtPz,.TRUE.)
       CALL LES_MEAN_SUBGRID( -2.*XCTD*SQRT(PTKEM)*ZFLX/PLEPS, X_LES_SUBGRID_DISS_Rt2, .TRUE. )
       CALL SECOND_MNH(ZTIME2)
       XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90
index 749fce361b41d8e1c6b54e860daed16d0e9f1fb6..19b8f2219600b4bda56a21ad36985bc0c216835d 100644
--- a/src/common/turb/mode_turb_ver.F90
+++ b/src/common/turb/mode_turb_ver.F90
@@ -5,12 +5,12 @@
 MODULE MODE_TURB_VER
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER(CST,CSTURB,TURBN,KKA,KKU,KKL,KRR,KRRL,KRRI,     &
-                      OTURB_FLX, OOCEAN, ODEEPOC, OHARAT,           &
+SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,KKA,KKU,KKL,KRR,KRRL,KRRI,   &
+                      OTURB_FLX,OOCEAN,ODEEPOC,OHARAT,OCOMPUTE_SRC, &
                       KSV,KSV_LGBEG,KSV_LGEND,                      &
                       HTURBDIM,HTOM,PIMPL,PEXPL,                    &
                       HPROGRAM, O2D, ONOMIXLG, OFLAT,               &
-                      OLES_CALL,OCOUPLES,OBLOWSNOW,                 &                      
+                      OLES_CALL,OCOUPLES,OBLOWSNOW, ORMC01,         &                      
                       PTSTEP, TPFILE,                               &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                       PCOSSLOPE,PSINSLOPE,                          &
@@ -213,6 +213,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
@@ -236,13 +237,13 @@ USE MODI_SECOND_MNH
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
-!
 IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
@@ -258,10 +259,12 @@ LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
 LOGICAL,                INTENT(IN)   ::  OHARAT       ! 
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables
 LOGICAL,                INTENT(IN)   ::  OFLAT        ! Logical for zero ororography
 LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
+LOGICAL,                INTENT(IN)   ::  ORMC01       ! switch for RMC01 lengths in SBL
 CHARACTER(LEN=6),       INTENT(IN)   ::  HPROGRAM     ! HPROGRAM is the program currently running
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables
 LOGICAL,                INTENT(IN)   ::  O2D          ! Logical for 2D model version
@@ -272,84 +275,91 @@ REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! timestep 
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
                                                       ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitudes at flux points
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE    ! cosinus of the angle 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PZZ          ! altitudes at flux points
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PCOSSLOPE    ! cosinus of the angle 
                                       ! between i and the slope vector
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSINSLOPE    ! sinus of the angle 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSINSLOPE    ! sinus of the angle 
                                       ! between i and the slope vector
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
 ! MFMOIST used in case of OHARATU
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST       ! moist mass flux dual scheme
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  MFMOIST       ! moist mass flux dual scheme
 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
                                                       ! Potential Temperature 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVM       ! t - deltat 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT,KSV), INTENT(IN)   ::  PSFSVM       ! t - deltat 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVP       ! t + deltat 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT,KSV), INTENT(IN)   ::  PSFSVP       ! t + deltat 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
        ! to the maximum slope direction and the surface normal and the binormal 
        ! at time t - dt
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PUM,PVM,PWM,PTHLM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PUM,PVM,PWM,PTHLM 
   ! Wind and potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios 
                                                       ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
                                      ! maximum slope direction
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
                                      ! direction normal to the maximum slope one
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
 ! PLENGTHM PLENGTHH used in case of OHARATU
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLENGTHM     ! Turb. mixing length momentum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLENGTHH     ! Turb. mixing length heat/moisture 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLENGTHM     ! Turb. mixing length momentum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLENGTHH     ! Turb. mixing length heat/moisture 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLEPS        ! dissipative length
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(IN)   ::  PSRCM        ! normalized 
                   ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz
-REAL, DIMENSION(:,:),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
-REAL, DIMENSION(:,:),   INTENT(INOUT)::  PSBL_DEPTH   ! SBL depth
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PLMO         ! Monin-Obukhov length
-!
-REAL, DIMENSION(:,:,:), INTENT(INOUT)   ::  PRUS, PRVS, PRWS, PRTHLS
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS,PRRS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz
+REAL, DIMENSION(MERGE(D%NIT,0,HTOM=='TMO6'),&
+                MERGE(D%NJT,0,HTOM=='TMO6')),INTENT(INOUT) :: PBL_DEPTH  ! BL height for TOMS
+REAL, DIMENSION(MERGE(D%NIT,0,ORMC01),&
+                MERGE(D%NJT,0,ORMC01)),INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PLMO         ! Monin-Obukhov length
+!
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT)   ::  PRUS, PRVS, PRWS, PRTHLS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(INOUT) ::  PRRS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(INOUT) ::  PRSVS
                             ! cumulated sources for the prognostic variables
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PDP,PTP   ! Dynamic and thermal
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PDP,PTP   ! Dynamic and thermal
                                                    ! TKE production terms
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PSIGS     ! Vert. part of Sigma_s at t
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTH      ! heat flux
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWRC      ! cloud water flux
-REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV       ! scalar flux
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(OUT)     ::  PSIGS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  :: PWTH      ! heat flux
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  :: PWRC      ! cloud water flux
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV),INTENT(OUT) :: PWSV       ! scalar flux
 !
 !
 !*       0.2  declaration of local variables
 !
 !JUAN BUG PGI
 !!$REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
-REAL, ALLOCATABLE, DIMENSION(:,:,:)  ::  &
+REAL,  DIMENSION(D%NIT,D%NJT,D%NKT)  ::  &
        ZBETA,    & ! buoyancy coefficient
        ZSQRT_TKE,& ! sqrt(e)
        ZDTH_DZ,  & ! d(th)/dz
@@ -372,12 +382,12 @@ REAL, ALLOCATABLE, DIMENSION(:,:,:)  ::  &
        ZRP         ! guess of total water due to vert. turbulent flux
 
 !!$REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV)  ::  &
-REAL, ALLOCATABLE, DIMENSION(:,:,:,:)  ::  &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV)  ::  &
        ZPSI_SV,  & ! Prandtl number for scalars
        ZREDS1,   & ! 1D Redelsperger number R_sv
        ZRED2THS, & ! 3D Redelsperger number R*2_thsv
        ZRED2RS     ! 3D Redelsperger number R*2_rsv
-REAL, DIMENSION(SIZE(PLM,1),SIZE(PLM,2),SIZE(PLM,3))  ::  ZLM
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  ::  ZLM
 !
 LOGICAL :: GUSERV    ! flag to use water vapor
 INTEGER :: IKB,IKE   ! index value for the Beginning
@@ -388,33 +398,6 @@ REAL    :: ZTIME2
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 TYPE(TFIELDDATA) :: TZFIELD
 !----------------------------------------------------------------------------
-ALLOCATE (      ZBETA(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))    ,&
-       ZSQRT_TKE(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)),& 
-       ZDTH_DZ(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ,&
-       ZDR_DZ(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))   ,&
-       ZRED2TH3(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ,& 
-       ZRED2R3(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ,&
-       ZRED2THR3(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)),&
-       ZBLL_O_E(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ,&
-       ZETHETA(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ,&
-       ZEMOIST(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ,&
-       ZREDTH1(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ,&
-       ZREDR1(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))   ,&
-       ZPHI3(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))    ,&
-       ZPSI3(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))    ,&
-       ZD(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))       ,&
-       ZWTHV(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))    ,&
-       ZWU(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))      ,&
-       ZWV(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))      ,&
-       ZTHLP(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))    ,&
-       ZRP(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))     )   
-
-ALLOCATE ( &
- ZPSI_SV(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV),  &
- ZREDS1(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV),   &
- ZRED2THS(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV), &
- ZRED2RS(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),KSV)   )
-
 !----------------------------------------------------------------------------
 !
 !*       1.   PRELIMINARIES
@@ -422,15 +405,15 @@ ALLOCATE ( &
 !
 IF (LHOOK) CALL DR_HOOK('TURB_VER',0,ZHOOK_HANDLE)
 !
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
+IKB=D%NKB
+IKE=D%NKE
 !
 !
 ! 3D Redelsperger numbers
 !
 !
-CALL PRANDTL(CST,CSTURB,KKA,KKU,KKL,KRR,KRRI,OTURB_FLX, &
-             HTURBDIM, OOCEAN,OHARAT,O2D,          &
+CALL PRANDTL(D,CST,CSTURB,KKA,KKU,KKL,KRR,KSV,KRRI,OTURB_FLX, &
+             HTURBDIM,OOCEAN,OHARAT,O2D,OCOMPUTE_SRC,&
              TPFILE,                               &
              PDXX,PDYY,PDZZ,PDZX,PDZY,             &
              PTHVREF,PLOCPEXNM,PATHETA,PAMOIST,    &
@@ -472,13 +455,13 @@ ENDIF
 !
 GUSERV = KRR/=0
 !
-ZPHI3 = PHI3(CSTURB,ZREDTH1,ZREDR1,ZRED2TH3,ZRED2R3,ZRED2THR3,HTURBDIM,GUSERV)
+ZPHI3 = PHI3(D,CSTURB,ZREDTH1,ZREDR1,ZRED2TH3,ZRED2R3,ZRED2THR3,HTURBDIM,GUSERV)
 IF(KRR/=0) &
-ZPSI3 = PSI3(CSTURB,ZREDR1,ZREDTH1,ZRED2R3,ZRED2TH3,ZRED2THR3,HTURBDIM,GUSERV)
+ZPSI3 = PSI3(D,CSTURB,ZREDR1,ZREDTH1,ZRED2R3,ZRED2TH3,ZRED2THR3,HTURBDIM,GUSERV)
 !
 ! Prandtl numbers for scalars
 !
-ZPSI_SV = PSI_SV(CSTURB,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3)
+ZPSI_SV = PSI_SV(D,CSTURB,KSV,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3)
 !
 ! LES diagnostics
 !
@@ -512,15 +495,16 @@ ELSE
   ZLM=PLM
 ENDIF
 !
-  CALL  TURB_VER_THERMO_FLUX(CST,CSTURB,TURBN,KKA,KKU,KKL,KRR,KRRL,KRRI,&
+  CALL  TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,                      &
+                        KKA,KKU,KKL,KRR,KRRL,KRRI,KSV,                &
                         OTURB_FLX,HTURBDIM,HTOM,OOCEAN,ODEEPOC,OHARAT,&
-                        OCOUPLES,OLES_CALL,                           &
+                        OCOUPLES,OLES_CALL,OCOMPUTE_SRC,              &
                         PIMPL,PEXPL,PTSTEP,HPROGRAM,TPFILE,           &
                         PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
                         PRHODJ,PTHVREF,                               &
                         PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
                         PWM,PTHLM,PRM,PSVM,                           &
-                        PTKEM,ZLM,PLEPS,                         &
+                        PTKEM,ZLM,PLEPS,                              &
                         PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PFRAC_ICE,    &
                         ZBETA, ZSQRT_TKE, ZDTH_DZ, ZDR_DZ, ZRED2TH3,  &
                         ZRED2R3, ZRED2THR3, ZBLL_O_E, ZETHETA,        &
@@ -529,8 +513,9 @@ ENDIF
                         MFMOIST,PBL_DEPTH,ZWTHV,                      &
                         PRTHLS,PRRS,ZTHLP,ZRP,PTP,PWTH,PWRC )
 !
-  CALL  TURB_VER_THERMO_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,    &
-                        OTURB_FLX,HTURBDIM,HTOM, OHARAT,              &
+  CALL  TURB_VER_THERMO_CORR(D,CST,CSTURB,                            &
+                        KKA,KKU,KKL,KRR,KRRL,KRRI,KSV,                &
+                        OTURB_FLX,HTURBDIM,HTOM, OHARAT,OCOMPUTE_SRC, &
                         OCOUPLES,OLES_CALL,                           &                        
                         PIMPL,PEXPL,TPFILE,                           &
                         PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,           &
@@ -538,7 +523,7 @@ ENDIF
                         PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
                         PWM,PTHLM,PRM,PSVM,                           &
                         PTKEM,ZLM,PLEPS,                              &
-                        PLOCPEXNM,PATHETA,PAMOIST,PSRCM,              &
+                        PLOCPEXNM,PATHETA,PAMOIST,                    &
                         ZBETA, ZSQRT_TKE, ZDTH_DZ, ZDR_DZ, ZRED2TH3,  &
                         ZRED2R3, ZRED2THR3, ZBLL_O_E, ZETHETA,        &
                         ZEMOIST, ZREDTH1, ZREDR1, ZPHI3, ZPSI3, ZD,   &
@@ -561,7 +546,7 @@ ENDIF
 !
 IF (OHARAT) ZLM=PLENGTHM
 !
-CALL  TURB_VER_DYN_FLUX(CST,CSTURB,TURBN,KKA,KKU,KKL,KSV,O2D,OFLAT,  &
+CALL  TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KKA,KKU,KKL,KSV,O2D,OFLAT,  &
                       OTURB_FLX,KRR,OOCEAN,OHARAT,OCOUPLES,OLES_CALL,&
                       HTURBDIM,PIMPL,PEXPL,PTSTEP,TPFILE,           &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
@@ -582,8 +567,8 @@ CALL  TURB_VER_DYN_FLUX(CST,CSTURB,TURBN,KKA,KKU,KKL,KSV,O2D,OFLAT,  &
 IF (OHARAT) ZLM=PLENGTHH
 !
 IF (SIZE(PSVM,4)>0)                                                 &
-CALL  TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG,             &
-                      KSV_LGBEG,KSV_LGEND,                          &
+CALL  TURB_VER_SV_FLUX(D,CST,CSTURB,KKA,KKU,KKL,ONOMIXLG,           &
+                      KSV,KSV_LGBEG,KSV_LGEND,                      &
                       OTURB_FLX,HTURBDIM,OHARAT,OBLOWSNOW,OLES_CALL,&
                       PIMPL,PEXPL,PTSTEP,                           &
                       TPFILE,                                       &
@@ -596,9 +581,9 @@ CALL  TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG,             &
 !
 !
 IF (SIZE(PSVM,4)>0 .AND. OLES_CALL)                                 &
-CALL  TURB_VER_SV_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN, &
+CALL  TURB_VER_SV_CORR(D,CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN,&
                       PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG,        &
-                      OBLOWSNOW,OLES_CALL,                          &
+                      OBLOWSNOW,OLES_CALL,OCOMPUTE_SRC,             &
                       PTHLM,PRM,PTHVREF,                            &
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,ZPHI3,ZPSI3,  &
                       PWM,PSVM,                                     &
@@ -610,7 +595,7 @@ CALL  TURB_VER_SV_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN, &
 !*       9.   DIAGNOSTIC OF Surface Boundary Layer Depth
 !             ------------------------------------------
 !
-IF (SIZE(PSBL_DEPTH)>0) CALL SBL_DEPTH(IKB,IKE,PZZ,ZWU,ZWV,ZWTHV,PLMO,PSBL_DEPTH)
+IF (ORMC01) CALL SBL_DEPTH(IKB,IKE,PZZ,ZWU,ZWV,ZWTHV,PLMO,PSBL_DEPTH)
 !
 !----------------------------------------------------------------------------
 !
diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90
index 5dd7da70d81f4de63386ec3305bdc784fddf22a0..f4aa457c560642d329e5a9af2cea32ff195d9b27 100644
--- a/src/common/turb/mode_turb_ver_dyn_flux.F90
+++ b/src/common/turb/mode_turb_ver_dyn_flux.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TURB_VER_DYN_FLUX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_DYN_FLUX(CST,CSTURB,TURBN,KKA,KKU,KKL,KSV,O2D,OFLAT,&
+SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KKA,KKU,KKL,KSV,O2D,OFLAT,&
                       OTURB_FLX,KRR, OOCEAN,OHARAT,OCOUPLES,OLES_CALL,&
                       HTURBDIM,PIMPL,PEXPL,                         &
                       PTSTEP,                                       &
@@ -208,6 +208,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LES
@@ -235,6 +236,7 @@ IMPLICIT NONE
 !
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
@@ -257,46 +259,46 @@ REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDXX, PDYY, PDZZ, PDZX, PDZY 
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
                                                       ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitude of flux points
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCOSSLOPE    ! cosinus of the angle 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PZZ          ! altitude of flux points
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PCOSSLOPE    ! cosinus of the angle 
                                       ! between i and the slope vector
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSINSLOPE    ! sinus of the angle 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSINSLOPE    ! sinus of the angle 
                                       ! between i and the slope vector
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PCDUEFF     ! Cd * || u || at time t
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU11M      ! <uu> in the axes linked 
        ! to the maximum slope direction and the surface normal and the binormal 
        ! at time t - dt
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU12M      ! <uv> in the same axes
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PTAU33M      ! <ww> in the same axes
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PUM,PVM,PWM, PTHLM
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PUM,PVM,PWM, PTHLM
   ! Wind at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PUSLOPEM     ! wind component along the 
                                      ! maximum slope direction
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PVSLOPEM     ! wind component along the 
                                      ! direction normal to the maximum slope one
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWU          ! momentum flux u'w'
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PWV          ! momentum flux v'w'
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PWU          ! momentum flux u'w'
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PWV          ! momentum flux v'w'
 !
-REAL, DIMENSION(:,:,:), INTENT(INOUT)   ::  PRUS, PRVS, PRWS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT)   ::  PRUS, PRVS, PRWS
                             ! cumulated sources for the prognostic variables
 !
-REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PDP          ! Dynamic TKE production term
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTP          ! Thermal TKE production term
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  ::  PDP          ! Dynamic TKE production term
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTP          ! Thermal TKE production term
 !
 !
 !
@@ -304,11 +306,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTP          ! Thermal TKE production t
 !*       0.2  declaration of local variables
 !
 !
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2))  :: ZDIRSINZW ! sinus of the angle
+REAL, DIMENSION(D%NIT,D%NJT)  :: ZDIRSINZW ! sinus of the angle
                    ! between the normal and the vertical at the surface
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),1):: ZCOEFS    ! coeff. for the 
+REAL, DIMENSION(D%NIT,D%NJT,1):: ZCOEFS    ! coeff. for the 
                    ! implicit scheme for the wind at the surface
-REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3))  ::  &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  ::  &
        ZA, &       ! under diagonal elements of the tri-diagonal matrix involved
                    ! in the temporal implicit scheme (also used to store coefficient
                    ! J in Section 5)
@@ -318,18 +320,15 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3))  ::  &
        ZFLXZ,  &   ! vertical flux of the treated variable
        ZSOURCE,  & ! source of evolution for the treated variable
        ZKEFF       ! effectif diffusion coeff = LT * SQRT( TKE )
-INTEGER             :: IIB,IIE, &   ! I index values for the Beginning and End
-                       IJB,IJE, &   ! mass points of the domain in the 3 direct.
-                       IKB,IKE      !
+INTEGER             :: IKB,IKE      !
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain
 INTEGER             :: JSV          ! scalar loop counter
-REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, &
+REAL, DIMENSION(D%NIT,D%NJT,1)   :: ZCOEFFLXU, &
                                     ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM
                                     ! coefficients for the surface flux
                                     ! evaluation and copy of PUSLOPEM and
                                     ! PVSLOPEM in local 3D arrays 
-INTEGER             :: IIU,IJU      ! size of array in x,y,z directions
 !
 REAL :: ZTIME1, ZTIME2, ZCMFS
 TYPE(TFIELDDATA) :: TZFIELD
@@ -343,16 +342,11 @@ IF (LHOOK) CALL DR_HOOK('TURB_VER_DYN_FLUX',0,ZHOOK_HANDLE)
 ZA=XUNDEF
 PDP=XUNDEF
 !
-IIU=SIZE(PUM,1)
-IJU=SIZE(PUM,2)
-CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-IKT=SIZE(PUM,3)          
-IKTB=1+JPVEXT_TURB              
-IKTE=IKT-JPVEXT_TURB
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE
 !
 ZSOURCE = 0.
 ZFLXZ   = 0.
@@ -368,7 +362,7 @@ ZDIRSINZW(:,:) = SQRT(1.-PDIRCOSZW(:,:)**2)
 IF (OHARAT) THEN
   ZKEFF(:,:,:) =  PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:)
 ELSE 
-  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL)
+  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), D%NKA, KKU, KKL)
 ENDIF
 
 !
@@ -386,7 +380,7 @@ ZVSLOPEM(:,:,1)=PVSLOPEM(:,:)
 ! Preparation of the arguments for TRIDIAG_WIND 
 !
 ZA(:,:,:)    = -PTSTEP * ZCMFS *                              &
-              MXM( ZKEFF ) * MXM(MZM(PRHODJ, KKA, KKU, KKL)) / &
+              MXM( ZKEFF ) * MXM(MZM(PRHODJ, D%NKA, KKU, KKL)) / &
               MXM( PDZZ )**2
 !
 !
@@ -424,7 +418,7 @@ IF (OOCEAN) THEN  ! OCEAN MODEL ONLY
 ELSE             !ATMOS MODEL ONLY
   IF (OCOUPLES) THEN 
    ZSOURCE(:,:,IKB:IKB) = TURBN%XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) &
-      * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+      * 0.5 * ( 1. + MXM(PRHODJ(:,:,D%NKA:D%NKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
   ELSE               
     ! compute the explicit tangential flux at the W point
     ZSOURCE(:,:,IKB)     =                                              &
@@ -441,7 +435,7 @@ ELSE             !ATMOS MODEL ONLY
           -ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
            *ZVSLOPEM(:,:,1:1)                      )    &
     -  ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL        &
-    ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+    ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,D%NKA:D%NKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
   ENDIF 
 !
   ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
@@ -450,7 +444,7 @@ ENDIF !end ocean or atmosphere cases
 !
 ! Obtention of the split U at t+ deltat 
 !
-CALL TRIDIAG_WIND(KKA,KKU,KKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,   &
+CALL TRIDIAG_WIND(D%NKA,KKU,KKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,   &
                   MXM(PRHODJ),ZSOURCE,ZRES)
 ! 
 !  Compute the equivalent tendency for the U wind component
@@ -463,15 +457,15 @@ PRUS(:,:,:)=PRUS(:,:,:)+MXM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PUM(:,:,:))/PTSTEP
 ! vertical flux of the U wind component
 !
 ZFLXZ(:,:,:)     = -ZCMFS * MXM(ZKEFF) * &
-                  DZM(PIMPL*ZRES + PEXPL*PUM, KKA, KKU, KKL) / MXM(PDZZ)
+                  DZM(PIMPL*ZRES + PEXPL*PUM, D%NKA, KKU, KKL) / MXM(PDZZ)
 !
 ! surface flux 
 ZFLXZ(:,:,IKB:IKB)   =   MXM(PDZZ(:,:,IKB:IKB))  *                &
   ( ZSOURCE(:,:,IKB:IKB)                                          &
    +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL                   &                
-  ) / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+  ) / 0.5 / ( 1. + MXM(PRHODJ(:,:,D%NKA:D%NKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
 !
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
 
 IF (OOCEAN) THEN !ocean model at phys sfc (ocean domain top)
   ZFLXZ(:,:,IKE:IKE)   =   MXM(PDZZ(:,:,IKE:IKE))  *                &
@@ -502,7 +496,7 @@ PWU(:,:,:) = ZFLXZ(:,:,:)
 ! Contribution to the dynamic production of TKE
 ! compute the dynamic production at the mass point
 !
-PDP(:,:,:) = - MZF(MXF(ZFLXZ * GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL)
+PDP(:,:,:) = - MZF(MXF(ZFLXZ * GZ_U_UW(PUM,PDZZ, D%NKA, KKU, KKL)), D%NKA, KKU, KKL)
 !
 ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
 PDP(:,:,IKB:IKB) = - MXF (                                                      &
@@ -522,9 +516,9 @@ END IF
 ! 
 IF (OLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID(MZF(MXF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WU ) 
-  CALL LES_MEAN_SUBGRID(MZF(MXF(GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL) &
-                       & *ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_U_SBG_UaU )
+  CALL LES_MEAN_SUBGRID(MZF(MXF(ZFLXZ), D%NKA, KKU, KKL), X_LES_SUBGRID_WU ) 
+  CALL LES_MEAN_SUBGRID(MZF(MXF(GZ_U_UW(PUM,PDZZ, D%NKA, KKU, KKL) &
+                       & *ZFLXZ), D%NKA, KKU, KKL), X_LES_RES_ddxa_U_SBG_UaU )
   CALL LES_MEAN_SUBGRID( ZCMFS * ZKEFF, X_LES_SUBGRID_Km )
   CALL SECOND_MNH(ZTIME2)
   XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
@@ -536,7 +530,7 @@ END IF
 IF(HTURBDIM=='3DIM') THEN
   ! Compute the source for the W wind component
                 ! used to compute the W source at the ground
-  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
+  ZFLXZ(:,:,D%NKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
  IF (OOCEAN) THEN
    ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
  END IF     
@@ -544,17 +538,17 @@ IF(HTURBDIM=='3DIM') THEN
   !
   IF (.NOT. OFLAT) THEN
     PRWS(:,:,:)= PRWS                                      &
-                -DXF( MZM(MXM(PRHODJ) /PDXX, KKA, KKU, KKL)  * ZFLXZ )  &
-                +DZM(PRHODJ / MZF(PDZZ, KKA, KKU, KKL) *                &
-                      MXF(MZF(ZFLXZ*PDZX, KKA, KKU, KKL) / PDXX ),      &
-                     KKA, KKU, KKL)
+                -DXF( MZM(MXM(PRHODJ) /PDXX, D%NKA, KKU, KKL)  * ZFLXZ )  &
+                +DZM(PRHODJ / MZF(PDZZ, D%NKA, KKU, KKL) *                &
+                      MXF(MZF(ZFLXZ*PDZX, D%NKA, KKU, KKL) / PDXX ),      &
+                     D%NKA, KKU, KKL)
   ELSE
-    PRWS(:,:,:)= PRWS -DXF(MZM(MXM(PRHODJ) /PDXX, KKA, KKU, KKL)  * ZFLXZ )
+    PRWS(:,:,:)= PRWS -DXF(MZM(MXM(PRHODJ) /PDXX, D%NKA, KKU, KKL)  * ZFLXZ )
   END IF
   !
   ! Complete the Dynamical production with the W wind component 
   !
-  ZA(:,:,:)=-MZF(MXF(ZFLXZ * GX_W_UW(PWM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)), KKA, KKU, KKL)
+  ZA(:,:,:)=-MZF(MXF(ZFLXZ * GX_W_UW(PWM,PDXX,PDZZ,PDZX, D%NKA, KKU, KKL)), D%NKA, KKU, KKL)
   !
   !
   ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
@@ -592,16 +586,16 @@ END IF
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     CALL LES_MEAN_SUBGRID(MZF(MXF(GX_W_UW(PWM,PDXX,&
-      PDZZ,PDZX, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_W_SBG_UaW )
-    CALL LES_MEAN_SUBGRID(MXF(GX_M_U(KKA, KKU, KKL,PTHLM,PDXX,PDZZ,PDZX)&
-      * MZF(ZFLXZ, KKA, KKU, KKL)), X_LES_RES_ddxa_Thl_SBG_UaW )
+      PDZZ,PDZX, D%NKA, KKU, KKL)*ZFLXZ), D%NKA, KKU, KKL), X_LES_RES_ddxa_W_SBG_UaW )
+    CALL LES_MEAN_SUBGRID(MXF(GX_M_U(D%NKA, KKU, KKL,PTHLM,PDXX,PDZZ,PDZX)&
+      * MZF(ZFLXZ, D%NKA, KKU, KKL)), X_LES_RES_ddxa_Thl_SBG_UaW )
     IF (KRR>=1) THEN
-      CALL LES_MEAN_SUBGRID(MXF(GX_U_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, KKA, KKU, KKL)&
-      *MZF(ZFLXZ, KKA, KKU, KKL)),X_LES_RES_ddxa_Rt_SBG_UaW )
+      CALL LES_MEAN_SUBGRID(MXF(GX_U_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, KKU, KKL)&
+      *MZF(ZFLXZ, D%NKA, KKU, KKL)),X_LES_RES_ddxa_Rt_SBG_UaW )
     END IF
     DO JSV=1,KSV
       CALL LES_MEAN_SUBGRID( MXF(GX_U_M(PSVM(:,:,:,JSV),PDXX,PDZZ,&
-      PDZX, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL)),X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) )
+      PDZX, D%NKA, KKU, KKL)*MZF(ZFLXZ, D%NKA, KKU, KKL)),X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) )
     END DO
     CALL SECOND_MNH(ZTIME2)
     XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
@@ -619,7 +613,7 @@ END IF
 ! Preparation of the arguments for TRIDIAG_WIND
 !!
 ZA(:,:,:)    = - PTSTEP * ZCMFS *                              &
-              MYM( ZKEFF ) * MYM(MZM(PRHODJ, KKA, KKU, KKL)) / &
+              MYM( ZKEFF ) * MYM(MZM(PRHODJ, D%NKA, KKU, KKL)) / &
               MYM( PDZZ )**2
 !
 !
@@ -665,12 +659,12 @@ ELSE ! Atmos case
             +ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
             *ZVSLOPEM(:,:,1:1)                      )         &
      - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL             &
-    ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
+    ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,D%NKA:D%NKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
 !
   ELSE   !atmosphere when coupling
     ! input flux assumed to be in SI and at vorticity point
     ZSOURCE(:,:,IKB:IKB) =     -TURBN%XSSVFL_C(:,:,1:1)/(1.*PDZZ(:,:,IKB:IKB)) &
-      * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
+      * 0.5 * ( 1. + MYM(PRHODJ(:,:,D%NKA:D%NKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
   ENDIF
   !No flux at the atmosphere top
   ZSOURCE(:,:,IKE) = 0.
@@ -678,7 +672,7 @@ ENDIF ! End of Ocean or Atmospher Cases
 ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
 ! 
 !  Obtention of the split V at t+ deltat 
-CALL TRIDIAG_WIND(KKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,  &
+CALL TRIDIAG_WIND(D%NKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,  &
                   MYM(PRHODJ),ZSOURCE,ZRES)
 !
 ! Compute the equivalent tendency for the V wind component
@@ -691,15 +685,15 @@ PRVS(:,:,:)=PRVS(:,:,:)+MYM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PVM(:,:,:))/PTSTEP
 !  vertical flux of the V wind component
 !
 ZFLXZ(:,:,:)   = -ZCMFS * MYM(ZKEFF) * &
-                DZM(PIMPL*ZRES + PEXPL*PVM, KKA, KKU, KKL) / MYM(PDZZ)
+                DZM(PIMPL*ZRES + PEXPL*PVM, D%NKA, KKU, KKL) / MYM(PDZZ)
 !
 ZFLXZ(:,:,IKB:IKB)   =   MYM(PDZZ(:,:,IKB:IKB))  *                       &
   ( ZSOURCE(:,:,IKB:IKB)                                                 &
    +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL                      &      
-  ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
+  ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,D%NKA:D%NKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
 !  
 !
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
+ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB)
 !
 IF (OOCEAN) THEN
   ZFLXZ(:,:,IKE:IKE)   =   MYM(PDZZ(:,:,IKE:IKE))  *                &
@@ -730,7 +724,7 @@ PWV(:,:,:) = ZFLXZ(:,:,:)
 !  Contribution to the dynamic production of TKE
 ! compute the dynamic production contribution at the mass point
 !
-ZA(:,:,:) = - MZF(MYF(ZFLXZ * GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL)
+ZA(:,:,:) = - MZF(MYF(ZFLXZ * GZ_V_VW(PVM,PDZZ, D%NKA, KKU, KKL)), D%NKA, KKU, KKL)
 !
 ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
 ZA(:,:,IKB:IKB)  =                                                 &
@@ -753,9 +747,9 @@ PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
 !
 IF (OLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID(MZF(MYF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WV ) 
-  CALL LES_MEAN_SUBGRID(MZF(MYF(GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)*&
-                    & ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_V_SBG_UaV )
+  CALL LES_MEAN_SUBGRID(MZF(MYF(ZFLXZ), D%NKA, KKU, KKL), X_LES_SUBGRID_WV ) 
+  CALL LES_MEAN_SUBGRID(MZF(MYF(GZ_V_VW(PVM,PDZZ, D%NKA, KKU, KKL)*&
+                    & ZFLXZ), D%NKA, KKU, KKL), X_LES_RES_ddxa_V_SBG_UaV )
   CALL SECOND_MNH(ZTIME2)
   XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
 END IF
@@ -765,7 +759,7 @@ END IF
 !
 IF(HTURBDIM=='3DIM') THEN
   ! Compute the source for the W wind component
-  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
+  ZFLXZ(:,:,D%NKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
   IF (OOCEAN) THEN
     ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
   END IF
@@ -773,18 +767,18 @@ IF(HTURBDIM=='3DIM') THEN
   IF (.NOT. O2D) THEN 
     IF (.NOT. OFLAT) THEN
       PRWS(:,:,:)= PRWS(:,:,:)                               &
-                  -DYF( MZM(MYM(PRHODJ) /PDYY, KKA, KKU, KKL) * ZFLXZ )   &
-                  +DZM(PRHODJ / MZF(PDZZ, KKA, KKU, KKL) *                &
-                        MYF(MZF(ZFLXZ*PDZY, KKA, KKU, KKL) / PDYY ),      &
-                       KKA, KKU, KKL)
+                  -DYF( MZM(MYM(PRHODJ) /PDYY, D%NKA, KKU, KKL) * ZFLXZ )   &
+                  +DZM(PRHODJ / MZF(PDZZ, D%NKA, KKU, KKL) *                &
+                        MYF(MZF(ZFLXZ*PDZY, D%NKA, KKU, KKL) / PDYY ),      &
+                       D%NKA, KKU, KKL)
     ELSE
-      PRWS(:,:,:)= PRWS(:,:,:) -DYF(MZM(MYM(PRHODJ) /PDYY, KKA, KKU, KKL) * ZFLXZ )
+      PRWS(:,:,:)= PRWS(:,:,:) -DYF(MZM(MYM(PRHODJ) /PDYY, D%NKA, KKU, KKL) * ZFLXZ )
     END IF
   END IF
   ! 
   ! Complete the Dynamical production with the W wind component 
   IF (.NOT. O2D) THEN
-    ZA(:,:,:) = - MZF(MYF(ZFLXZ * GY_W_VW(PWM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)), KKA, KKU, KKL)
+    ZA(:,:,:) = - MZF(MYF(ZFLXZ * GY_W_VW(PWM,PDYY,PDZZ,PDZY, D%NKA, KKU, KKL)), D%NKA, KKU, KKL)
   !
   ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB)
     ZA(:,:,IKB:IKB) = - MYF (                                              &
@@ -822,14 +816,14 @@ IF(HTURBDIM=='3DIM') THEN
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     CALL LES_MEAN_SUBGRID(MZF(MYF(GY_W_VW(PWM,PDYY,&
-                         &PDZZ,PDZY, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), &
+                         &PDZZ,PDZY, D%NKA, KKU, KKL)*ZFLXZ), D%NKA, KKU, KKL), &
                          &X_LES_RES_ddxa_W_SBG_UaW , .TRUE. )
-    CALL LES_MEAN_SUBGRID(MYF(GY_M_V(KKA, KKU, KKL,PTHLM,PDYY,PDZZ,PDZY)*&
-                         &MZF(ZFLXZ, KKA, KKU, KKL)), &
+    CALL LES_MEAN_SUBGRID(MYF(GY_M_V(D%NKA, KKU, KKL,PTHLM,PDYY,PDZZ,PDZY)*&
+                         &MZF(ZFLXZ, D%NKA, KKU, KKL)), &
                          &X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. )
     IF (KRR>=1) THEN
       CALL LES_MEAN_SUBGRID(MYF(GY_V_M(PRM(:,:,:,1),PDYY,PDZZ,&
-                           &PDZY, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL)),&
+                           &PDZY, D%NKA, KKU, KKL)*MZF(ZFLXZ, D%NKA, KKU, KKL)),&
                            &X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE. )
     END IF
     CALL SECOND_MNH(ZTIME2)
@@ -846,7 +840,7 @@ END IF
 !
 IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. HTURBDIM == '1DIM') THEN
   ZFLXZ(:,:,:)= (2./3.) * PTKEM(:,:,:)                     &
-     -ZCMFS*PLM(:,:,:)*SQRT(PTKEM(:,:,:))*GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)
+     -ZCMFS*PLM(:,:,:)*SQRT(PTKEM(:,:,:))*GZ_W_M(PWM,PDZZ, D%NKA, KKU, KKL)
   ! to be tested &
   !   +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) 
   ! stores the W variance
diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90
index 184117fb2674a56b26951f8c4f4a0175d96ad5e4..d77d744495182263ee5bc370f3cb8f685e9c8da6 100644
--- a/src/common/turb/mode_turb_ver_sv_corr.F90
+++ b/src/common/turb/mode_turb_ver_sv_corr.F90
@@ -5,9 +5,9 @@
 MODULE MODE_TURB_VER_SV_CORR
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_SV_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN,&
+SUBROUTINE TURB_VER_SV_CORR(D,CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN,&
                       PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG,        &
-                      OBLOWSNOW,OLES_CALL,                          &
+                      OBLOWSNOW,OLES_CALL,OCOMPUTE_SRC,             &
                       PTHLM,PRM,PTHVREF,                            &
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PPHI3,PPSI3,  &
                       PWM,PSVM,                                     &
@@ -58,6 +58,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
 USE MODD_LES
 USE MODD_BLOWSNOW, ONLY: XRSNOW
@@ -80,36 +81,40 @@ IMPLICIT NONE
 !
 !
 !
-TYPE(CST_t),                  INTENT(IN)    :: CST
-TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
-INTEGER,                 INTENT(IN)  :: KKA, KKU ! near ground and uppest atmosphere array indexes
-INTEGER,                 INTENT(IN)  :: KKL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)    :: CST
+TYPE(CSTURB_t),         INTENT(IN)    :: CSTURB
+INTEGER,                INTENT(IN)  :: KKA, KKU ! near ground and uppest atmosphere array indexes
+INTEGER,                INTENT(IN)  :: KKL     ! +1 if grid goes from ground to atmosphere top, -1 otherwise
 INTEGER,                INTENT(IN)   :: KSV, KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables (modd_conf)
 LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OBLOWSNOW    ! switch to activate pronostic blowing snow
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
 INTEGER,                INTENT(IN)   ::  KRR          ! number of moist var.
 INTEGER,                INTENT(IN)   ::  KRRL         ! number of liquid var.
 INTEGER,                INTENT(IN)   ::  KRRI         ! number of ice var.
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDZZ
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM        ! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! reference Thv
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHLM        ! potential temperature at t-Delta t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios at t-Delta t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! reference Thv
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(IN)   ::  PSRCM        ! normalized 
                   ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Inv.Turb.Sch.for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Inv.Turb.Sch.for humidity
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! w at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPHI3        ! Inv.Turb.Sch.for temperature
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPSI3        ! Inv.Turb.Sch.for humidity
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PWM          ! w at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLEPS        ! dissipative length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
                             ! cumulated sources for the prognostic variables
 !
 !
@@ -118,7 +123,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
 !*       0.2  declaration of local variables
 !
 !
-REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3))  ::  &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  ::  &
        ZA, ZFLXZ
 !
 REAL :: ZCSV          !constant for the scalar flux
@@ -151,30 +156,30 @@ DO JSV=1,KSV
   !
   IF (OLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
-    ZFLXZ(:,:,:) =  PPSI_SV(:,:,:,JSV)*GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)**2
-    ZFLXZ(:,:,:) = ZCSV / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), KKA, KKU, KKL)
+    ZFLXZ(:,:,:) =  PPSI_SV(:,:,:,JSV)*GZ_M_W(D%NKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)**2
+    ZFLXZ(:,:,:) = ZCSV / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), D%NKA, KKU, KKL)
     CALL LES_MEAN_SUBGRID(-2.*ZCSVD*SQRT(PTKEM)*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID(MZF(PWM, D%NKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) )
   END IF
   !
   ! covariance ThvSv
   !
   IF (OLES_CALL) THEN
     ! approximation: diagnosed explicitely (without implicit term)
-    ZA(:,:,:)   =  ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN)
+    ZA(:,:,:)   =  ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC)
     ZFLXZ(:,:,:)= ( CSTURB%XCSHF * PPHI3 + ZCSV * PPSI_SV(:,:,:,JSV) )              &
-                  *  GZ_M_W(KKA, KKU, KKL,PTHLM,PDZZ)                          &
-                  *  GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
-    ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCTSVD) * MZF(ZFLXZ, KKA, KKU, KKL)
+                  *  GZ_M_W(D%NKA, KKU, KKL,PTHLM,PDZZ)                          &
+                  *  GZ_M_W(D%NKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
+    ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCTSVD) * MZF(ZFLXZ, D%NKA, KKU, KKL)
     CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) ) 
     CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
     !
     IF (KRR>=1) THEN
-      ZA(:,:,:)   =  EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
+      ZA(:,:,:)   =  EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN)
       ZFLXZ(:,:,:)= ( ZCSV * PPSI3 + ZCSV * PPSI_SV(:,:,:,JSV) )             &
-                    *  GZ_M_W(KKA, KKU, KKL,PRM(:,:,:,1),PDZZ)                 &
-                    *  GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
-      ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCQSVD) * MZF(ZFLXZ, KKA, KKU, KKL)
+                    *  GZ_M_W(D%NKA, KKU, KKL,PRM(:,:,:,1),PDZZ)                 &
+                    *  GZ_M_W(D%NKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)
+      ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCQSVD) * MZF(ZFLXZ, D%NKA, KKU, KKL)
       CALL LES_MEAN_SUBGRID( ZA*ZFLXZ, X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.)
       CALL LES_MEAN_SUBGRID( -CST%XG/PTHVREF/3.*ZA*ZFLXZ, X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.)
     END IF
diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90
index 2dd6d9eafeb66275c0bcf2fb1041dfdc40c0eceb..52487054dd77022a3c64c505f35e2cac6e4e88e0 100644
--- a/src/common/turb/mode_turb_ver_sv_flux.F90
+++ b/src/common/turb/mode_turb_ver_sv_flux.F90
@@ -5,8 +5,8 @@
 MODULE MODE_TURB_VER_SV_FLUX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG,        &
-                      KSV_LGBEG,KSV_LGEND,                          &
+SUBROUTINE TURB_VER_SV_FLUX(D,CST,CSTURB,KKA,KKU,KKL,ONOMIXLG,      &
+                      KSV,KSV_LGBEG,KSV_LGEND,                      &
                       OTURB_FLX,HTURBDIM,OHARAT,OBLOWSNOW,OLES_CALL,&
                       PIMPL,PEXPL,                                  &
                       PTSTEP,                                       &
@@ -213,6 +213,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
@@ -237,12 +238,14 @@ IMPLICIT NONE
 !*      0.1  declarations of arguments
 !
 !
-TYPE(CST_t),                  INTENT(IN)    :: CST
-TYPE(CSTURB_t),                  INTENT(IN)    :: CSTURB
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
 INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
-INTEGER,                INTENT(IN)   :: KSV_LGBEG, KSV_LGEND ! number of scalar variables
+INTEGER,                INTENT(IN)   :: KSV, &
+                                        KSV_LGBEG, KSV_LGEND ! number of scalar variables
 LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
                                  ! turbulent fluxes in the syncronous FM-file
 LOGICAL,                INTENT(IN)   ::  ONOMIXLG     ! to use turbulence for lagrangian variables (modd_conf)
@@ -255,29 +258,29 @@ REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDZZ
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
                                                       ! normal to the ground surface
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST       ! moist mf dual scheme
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  MFMOIST       ! moist mf dual scheme
 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVM       ! t - deltat 
+REAL, DIMENSION(D%NIT,D%NJT,KSV), INTENT(IN)   ::  PSFSVM       ! t - deltat 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSFSVP       ! t + deltat 
+REAL, DIMENSION(D%NIT,D%NJT,KSV), INTENT(IN)   ::  PSFSVP       ! t + deltat 
 !
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! scalar var. at t-Delta t
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM          ! vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PWM          ! vertical wind
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PPSI_SV      ! Inv.Turb.Sch.for scalars
 !
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) ::  PRSVS
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(INOUT) ::  PRSVS
                             ! cumulated sources for the prognostic variables
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)  :: PWSV        ! scalar flux
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(OUT)  :: PWSV        ! scalar flux
 !
 !
 !
@@ -285,7 +288,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT)  :: PWSV        ! scalar flux
 !*       0.2  declaration of local variables
 !
 !
-REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3))  ::  &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  ::  &
        ZA, &       ! under diagonal elements of the tri-diagonal matrix involved
                    ! in the temporal implicit scheme (also used to store coefficient
                    ! J in Section 5)
@@ -314,21 +317,21 @@ TYPE(TFIELDDATA)  :: TZFIELD
 !*       1.   PRELIMINARIES
 !             -------------
 !
-
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_FLUX',0,ZHOOK_HANDLE)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-IKT=SIZE(PSVM,3)
-IKTE =IKT-JPVEXT_TURB  
-IKTB =1+JPVEXT_TURB               
+!
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE             
 !
 ISV=SIZE(PSVM,4)
 !
 IF (OHARAT) THEN
   ZKEFF(:,:,:) =  PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:)
 ELSE
-  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL)
+  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), D%NKA, KKU, KKL)
 ENDIF
 !
 IF(OBLOWSNOW) THEN
@@ -349,11 +352,11 @@ DO JSV=1,ISV
 ! Preparation of the arguments for TRIDIAG 
     IF (OHARAT) THEN
       ZA(:,:,:)    = -PTSTEP*   &
-                   ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) /   &
+                   ZKEFF * MZM(PRHODJ, D%NKA, KKU, KKL) /   &
                    PDZZ**2
     ELSE
       ZA(:,:,:)    = -PTSTEP*ZCSV*PPSI_SV(:,:,:,JSV) *   &
-                   ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) /   &
+                   ZKEFF * MZM(PRHODJ, D%NKA, KKU, KKL) /   &
                    PDZZ**2
     ENDIF
   ZSOURCE(:,:,:) = 0.
@@ -367,18 +370,18 @@ DO JSV=1,ISV
   IF (HTURBDIM=='3DIM') THEN
     ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / &
                        PDZZ(:,:,IKB) * PDIRCOSZW(:,:)                    &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))   
+                     * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))   
   ELSE
 
     ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / &
                        PDZZ(:,:,IKB) / PDIRCOSZW(:,:)                    &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+                     * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))
   END IF
   ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
   ZSOURCE(:,:,IKE) = 0.
 !
 ! Obtention of the split JSV scalar variable at t+ deltat  
-  CALL TRIDIAG(KKA,KKU,KKL,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES)
+  CALL TRIDIAG(D,D%NKA,KKU,KKL,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES)
 !
 !  Compute the equivalent tendency for the JSV scalar variable
   PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV)+    &
@@ -387,8 +390,8 @@ DO JSV=1,ISV
   IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL ) THEN
     ! Diagnostic of the cartesian vertical flux
     !
-    ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM), KKA, KKU, KKL) / PDZZ * &
-                  DZM(PIMPL*ZRES(:,:,:) + PEXPL*PSVM(:,:,:,JSV), KKA, KKU, KKL)
+    ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM), D%NKA, KKU, KKL) / PDZZ * &
+                  DZM(PIMPL*ZRES(:,:,:) + PEXPL*PSVM(:,:,:,JSV), D%NKA, KKU, KKL)
     ! surface flux
     !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
     ! (in presence of slopes)
@@ -403,7 +406,7 @@ DO JSV=1,ISV
     END IF
     ! extrapolates the flux under the ground so that the vertical average with
     ! the IKB flux gives the ground value
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
+    ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB)
     DO JK=IKTB+1,IKTE-1
       PWSV(:,:,JK,JSV)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
     END DO
@@ -432,13 +435,13 @@ DO JSV=1,ISV
   !
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL), &
+    CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, D%NKA, KKU, KKL)*MZF(ZFLXZ, D%NKA, KKU, KKL), &
                           X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(MZF(GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)*ZFLXZ, KKA, KKU, KKL), &
+    CALL LES_MEAN_SUBGRID(MZF(GZ_M_W(D%NKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)*ZFLXZ, D%NKA, KKU, KKL), &
                           X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(-ZCSVP*SQRT(PTKEM)/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_SvPz(:,:,:,JSV) )
-    CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID(-ZCSVP*SQRT(PTKEM)/PLM*MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_SvPz(:,:,:,JSV) )
+    CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_W_SBG_WSv(:,:,:,JSV) )
     CALL SECOND_MNH(ZTIME2)
     XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
   END IF
diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90
index 730b785874cf1e22029c7bfdfaccaaf5b5c77456..b551bdd34134fd94934e7d35b8ec00e952441949 100644
--- a/src/common/turb/mode_turb_ver_thermo_corr.F90
+++ b/src/common/turb/mode_turb_ver_thermo_corr.F90
@@ -5,8 +5,9 @@
 MODULE MODE_TURB_VER_THERMO_CORR
 IMPLICIT NONE
 CONTAINS      
-SUBROUTINE TURB_VER_THERMO_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,    &
-                      OTURB_FLX,HTURBDIM,HTOM,OHARAT,               &
+SUBROUTINE TURB_VER_THERMO_CORR(D,CST,CSTURB,                       &
+                      KKA,KKU,KKL,KRR,KRRL,KRRI,KSV,                &
+                      OTURB_FLX,HTURBDIM,HTOM,OHARAT,OCOMPUTE_SRC,  &
                       OCOUPLES,OLES_CALL,                           &
                       PIMPL,PEXPL,TPFILE,                           &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,           &
@@ -14,7 +15,7 @@ SUBROUTINE TURB_VER_THERMO_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,    &
                       PSFTHM,PSFRM,PSFTHP,PSFRP,                    &
                       PWM,PTHLM,PRM,PSVM,                           &
                       PTKEM,PLM,PLEPS,                              &
-                      PLOCPEXNM,PATHETA,PAMOIST,PSRCM,              &
+                      PLOCPEXNM,PATHETA,PAMOIST,                    &
                       PBETA, PSQRT_TKE, PDTH_DZ, PDR_DZ, PRED2TH3,  &
                       PRED2R3, PRED2THR3, PBLL_O_E, PETHETA,        &
                       PEMOIST, PREDTH1, PREDR1, PPHI3, PPSI3, PD,   &
@@ -206,6 +207,7 @@ USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
@@ -230,12 +232,14 @@ IMPLICIT NONE
 !
 !
 !
-TYPE(CST_t),                  INTENT(IN)    :: CST
-TYPE(CSTURB_t),                INTENT(IN)    :: CSTURB
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
+TYPE(CST_t),            INTENT(IN)   :: CST
+TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
 INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
+INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
 LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
@@ -245,69 +249,71 @@ CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
 CHARACTER(len=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
 LOGICAL,                INTENT(IN)   ::  OHARAT
 LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
-LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
+LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and version 
 REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
                                                       ! normal to the ground surface
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
                                                       ! Potential Temperature 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
 !                                                     ! t - deltat 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
 !                                                     ! t + deltat 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PWM 
 ! Vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHLM 
 ! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios 
                                                       ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! Mixing ratios 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! Mixing ratios 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
 ! In case OHARATU=TRUE, PLM already includes all stability corrections
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLEPS        ! dissipative length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
 ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHLP      ! guess of thl at t+ deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRP        ! guess of r at t+ deltat
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PSIGS     ! Vert. part of Sigma_s at t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
+!
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PTHLP      ! guess of thl at t+ deltat
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRP        ! guess of r at t+ deltat
+!
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)),   INTENT(OUT)  ::  PSIGS     ! Vert. part of Sigma_s at t
 !
 !
 !
@@ -335,8 +341,6 @@ INTEGER             :: IKU  ! array sizes
 
                                     ! mass points of the domain in the 3 direct.
 INTEGER             :: I1,I2        ! For ZCOEFF allocation
-CHARACTER (LEN=100) :: YCOMMENT     ! comment string in LFIFM file
-CHARACTER (LEN=16)  :: YRECFM       ! Name of the desired field in LFIFM file
 REAL, DIMENSION(:,:,:),ALLOCATABLE  :: ZCOEFF
                                     ! coefficients for the uncentred gradient 
                                     ! computation near the ground
@@ -358,11 +362,10 @@ TYPE(TFIELDDATA) :: TZFIELD
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TURB_VER_THERMO_CORR',0,ZHOOK_HANDLE)
 
-IKU=SIZE(PTKEM,3)
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
-I1=MIN(KKA+JPVEXT_TURB*KKL,KKA+JPVEXT_TURB*KKL+2*KKL)
-I2=MAX(KKA+JPVEXT_TURB*KKL,KKA+JPVEXT_TURB*KKL+2*KKL)
+IKB=D%NKB
+IKE=D%NKE
+I1=MIN(D%NKA+JPVEXT_TURB*KKL,D%NKA+JPVEXT_TURB*KKL+2*KKL)
+I2=MAX(D%NKA+JPVEXT_TURB*KKL,D%NKA+JPVEXT_TURB*KKL+2*KKL)
 
 ALLOCATE(ZCOEFF(SIZE(PDZZ,1),SIZE(PDZZ,2),I1:I2))
 !
@@ -379,15 +382,15 @@ ZCOEFF(:,:,IKB)= - (PDZZ(:,:,IKB+2*KKL)+2.*PDZZ(:,:,IKB+KKL)) /      &
 !
 !
 IF (OHARAT) THEN
-PLMF=MZF(PLM, KKA, KKU, KKL)
+PLMF=MZF(PLM, D%NKA, KKU, KKL)
 PLEPSF=PLMF
 !  function MZF produces -999 for level IKU (82 for 80 levels)
 !  so put these to normal value as this level (82) is indeed calculated
-PLMF(:,:,IKU)=0.001
-PLEPSF(:,:,IKU)=0.001
+PLMF(:,:,D%NKT)=0.001
+PLEPSF(:,:,D%NKT)=0.001
 ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:)
 ELSE
-ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL)
+ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), D%NKA, KKU, KKL)
 ENDIF
 !
 
@@ -419,9 +422,9 @@ END IF
 ! Compute the turbulent variance F and F' at time t-dt.
 !
 IF (OHARAT) THEN
-  ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ**2, KKA, KKU, KKL)
+  ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ**2, D%NKA, KKU, KKL)
 ELSE
-  ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(PPHI3*PDTH_DZ**2, KKA, KKU, KKL)
+  ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(PPHI3*PDTH_DZ**2, D%NKA, KKU, KKL)
 ENDIF
   ZDFDDTDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
   !
@@ -429,42 +432,42 @@ ENDIF
   !
   ! d(w'th'2)/dz
   IF (GFTH2) THEN
-    ZF       = ZF       + M3_TH2_WTH2(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,&
+    ZF       = ZF       + M3_TH2_WTH2(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,&
      & PSQRT_TKE) * PFTH2
-    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
      & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTH2
   END IF
   !
   ! d(w'2th')/dz
   IF (GFWTH) THEN
-    ZF       = ZF       + M3_TH2_W2TH(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTH_DZ,&
-     & PLM,PLEPS,PTKEM) * MZF(PFWTH, KKA, KKU, KKL)
-    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,&
-     & PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWTH, KKA, KKU, KKL)
+    ZF       = ZF       + M3_TH2_W2TH(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTH_DZ,&
+     & PLM,PLEPS,PTKEM) * MZF(PFWTH, D%NKA, KKU, KKL)
+    ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,&
+     & PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWTH, D%NKA, KKU, KKL)
   END IF
   !
   IF (KRR/=0) THEN
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZF       = ZF       + M3_TH2_WR2(CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,&
+      ZF       = ZF       + M3_TH2_WR2(D,CSTURB,D%NKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,&
        & PEMOIST,PDTH_DZ) * PFR2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,&
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,&
        & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
     END IF
     !
     ! d(w'2r')/dz
     IF (GFWR) THEN
-      ZF       = ZF       + M3_TH2_W2R(CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKEM,PBLL_O_E,&
-       & PEMOIST,PDTH_DZ) * MZF(PFWR, KKA, KKU, KKL)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,&
-       & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * MZF(PFWR, KKA, KKU, KKL)
+      ZF       = ZF       + M3_TH2_W2R(D,CSTURB,D%NKA,KKU,KKL,PD,PLM,PLEPS,PTKEM,PBLL_O_E,&
+       & PEMOIST,PDTH_DZ) * MZF(PFWR, D%NKA, KKU, KKL)
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,&
+       & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * MZF(PFWR, D%NKA, KKU, KKL)
     END IF
     !
     ! d(w'th'r')/dz
     IF (GFTHR) THEN
-      ZF       = ZF       + M3_TH2_WTHR(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,&
+      ZF       = ZF       + M3_TH2_WTHR(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,&
        & PBLL_O_E,PEMOIST,PDTH_DZ) * PFTHR
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
        & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFTHR
     END IF
 
@@ -473,8 +476,8 @@ ENDIF
   ZFLXZ(:,:,:)   = ZF                                                              &
   !     + PIMPL * CSTURB%XCTV*PLM*PLEPS                                                   &
   !        *MZF(D_PHI3DTDZ2_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTH_DZ,HTURBDIM,GUSERV)   &
-  !             *DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ                                        ) &
-        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)
+  !             *DZM(PTHLP - PTHLM, D%NKA, KKU, KKL) / PDZZ                                        ) &
+        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM, D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)
   !
   ! special case near the ground ( uncentred gradient )
   IF (OHARAT) THEN
@@ -503,7 +506,7 @@ ENDIF
    ) 
    ENDIF
   !
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+  ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
   !
   ZFLXZ = MAX(0., ZFLXZ)
   !
@@ -532,7 +535,7 @@ ENDIF
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
     CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Thl2 ) 
-    CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Thl2 )
+    CALL LES_MEAN_SUBGRID(MZF(PWM, D%NKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Thl2 )
     CALL LES_MEAN_SUBGRID(-2.*CSTURB%XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Thl2 ) 
     CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_ThlThv ) 
     CALL LES_MEAN_SUBGRID(-CSTURB%XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) 
@@ -547,9 +550,9 @@ ENDIF
 !
     ! Compute the turbulent variance F and F' at time t-dt.
 IF (OHARAT) THEN
-    ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ*PDR_DZ, KKA, KKU, KKL)
+    ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ*PDR_DZ, D%NKA, KKU, KKL)
 ELSE
-    ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(0.5*(PPHI3+PPSI3)*PDTH_DZ*PDR_DZ, KKA, KKU, KKL)
+    ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(0.5*(PPHI3+PPSI3)*PDTH_DZ*PDR_DZ, D%NKA, KKU, KKL)
 ENDIF
     ZDFDDTDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
     ZDFDDRDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
@@ -558,51 +561,51 @@ ENDIF
     !
     ! d(w'th'2)/dz
     IF (GFTH2) THEN
-      ZF       = ZF       + M3_THR_WTH2(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,&
+      ZF       = ZF       + M3_THR_WTH2(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,&
        & PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTH2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
        & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
        & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTH2
     END IF
     !
     ! d(w'2th')/dz
     IF (GFWTH) THEN
-      ZF       = ZF       + M3_THR_W2TH(CSTURB,KKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKEM,&
-       & PDR_DZ) * MZF(PFWTH, KKA, KKU, KKL)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PDR_DZ,PETHETA) * MZF(PFWTH, KKA, KKU, KKL)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
-       & PD,PLM,PLEPS,PTKEM) * MZF(PFWTH, KKA, KKU, KKL)
+      ZF       = ZF       + M3_THR_W2TH(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKEM,&
+       & PDR_DZ) * MZF(PFWTH, D%NKA, KKU, KKL)
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
+       & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PDR_DZ,PETHETA) * MZF(PFWTH, D%NKA, KKU, KKL)
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
+       & PD,PLM,PLEPS,PTKEM) * MZF(PFWTH, D%NKA, KKU, KKL)
     END IF
     !
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZF       = ZF       + M3_THR_WR2(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,&
+      ZF       = ZF       + M3_THR_WR2(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PD,PLEPS,PSQRT_TKE,&
        & PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WR2_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
        & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFR2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WR2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WR2_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
        & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ) * PFR2
     END IF
     !
       ! d(w'2r')/dz
     IF (GFWR) THEN
-      ZF       = ZF       + M3_THR_W2R(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKEM,&
-      & PDTH_DZ) * MZF(PFWR, KKA, KKU, KKL)
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM) * MZF(PFWR, KKA, KKU, KKL)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
-      & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST) * MZF(PFWR, KKA, KKU, KKL)
+      ZF       = ZF       + M3_THR_W2R(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PD,PLM,PLEPS,PTKEM,&
+      & PDTH_DZ) * MZF(PFWR, D%NKA, KKU, KKL)
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_W2R_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+      & PLM,PLEPS,PTKEM) * MZF(PFWR, D%NKA, KKU, KKL)
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_W2R_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+      & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST) * MZF(PFWR, D%NKA, KKU, KKL)
     END IF
     !
     ! d(w'th'r')/dz
     IF (GFTHR) THEN
-      ZF       = ZF       + M3_THR_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,&
+      ZF       = ZF       + M3_THR_WTHR(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,&
       & PSQRT_TKE) * PFTHR
-      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTHR_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+      ZDFDDTDZ = ZDFDDTDZ + D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA) * PFTHR
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,&
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,&
       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFTHR
     END IF
     !
@@ -610,24 +613,24 @@ ENDIF
     ZFLXZ(:,:,:)   = ZF                                                     &
         + PIMPL * PLMF*PLEPSF*0.5                                        &
           * MZF(( 2.  & 
-                 ) *PDR_DZ  *DZM(PTHLP - PTHLM, KKA, KKU, KKL    ) / PDZZ               &
+                 ) *PDR_DZ  *DZM(PTHLP - PTHLM, D%NKA, KKU, KKL    ) / PDZZ               &
                 +( 2.                                                    &
-                 ) *PDTH_DZ *DZM(PRP   - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ               &
-               , KKA, KKU, KKL)                                                            &
-        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)         &
-        + PIMPL * ZDFDDRDZ * MZF(DZM(PRP   - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)
+                 ) *PDTH_DZ *DZM(PRP   - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ               &
+               , D%NKA, KKU, KKL)                                                            &
+        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)         &
+        + PIMPL * ZDFDDRDZ * MZF(DZM(PRP   - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)
     ELSE
     ZFLXZ(:,:,:)   = ZF                                                     &
         + PIMPL * CSTURB%XCTV*PLM*PLEPS*0.5                                        &
-          * MZF(( D_PHI3DTDZ_O_DDTDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*dthdz)/ddthdz term
-                  +D_PSI3DTDZ_O_DDTDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*dthdz)/ddthdz term
-                 ) *PDR_DZ  *DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ               &
-                +( D_PHI3DRDZ_O_DDRDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*drdz )/ddrdz term
-                  +D_PSI3DRDZ_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*drdz )/ddrdz term
-                 ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ               &
-               , KKA, KKU, KKL)                                                            &
-        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)         &
-        + PIMPL * ZDFDDRDZ * MZF(DZM(PRP   - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)
+          * MZF(( D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*dthdz)/ddthdz term
+                  +D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*dthdz)/ddthdz term
+                 ) *PDR_DZ  *DZM(PTHLP - PTHLM, D%NKA, KKU, KKL) / PDZZ               &
+                +( D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*drdz )/ddrdz term
+                  +D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*drdz )/ddrdz term
+                 ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ               &
+               , D%NKA, KKU, KKL)                                                            &
+        + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)         &
+        + PIMPL * ZDFDDRDZ * MZF(DZM(PRP   - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)
     ENDIF
     !
     ! special case near the ground ( uncentred gradient )
@@ -669,7 +672,7 @@ ENDIF
      ) 
     ENDIF
     !    
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+    ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
     !
       IF ( KRRL > 0 ) THEN
 !
@@ -699,7 +702,7 @@ ENDIF
 IF (OLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
       CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_THlRt ) 
-      CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_ThlRt )
+      CALL LES_MEAN_SUBGRID(MZF(PWM, D%NKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_ThlRt )
       CALL LES_MEAN_SUBGRID(-2.*CSTURB%XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_ThlRt ) 
       CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_RtThv ) 
       CALL LES_MEAN_SUBGRID(-CSTURB%XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. ) 
@@ -715,9 +718,9 @@ END IF
 !
     ! Compute the turbulent variance F and F' at time t-dt.
 IF (OHARAT) THEN
-    ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDR_DZ**2, KKA, KKU, KKL)
+    ZF      (:,:,:) = PLMF*PLEPSF*MZF(PDR_DZ**2, D%NKA, KKU, KKL)
   ELSE
-    ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(PPSI3*PDR_DZ**2, KKA, KKU, KKL)
+    ZF      (:,:,:) = CSTURB%XCTV*PLM*PLEPS*MZF(PPSI3*PDR_DZ**2, D%NKA, KKU, KKL)
 ENDIF
     ZDFDDRDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
     !
@@ -725,42 +728,42 @@ ENDIF
     !
     ! d(w'r'2)/dz
     IF (GFR2) THEN
-      ZF       = ZF       + M3_R2_WR2(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,&
+      ZF       = ZF       + M3_R2_WR2(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,PLEPS,&
       & PSQRT_TKE) * PFR2
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WR2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,&
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WR2_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,&
       & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST) * PFR2
     END IF
     !
     ! d(w'2r')/dz
     IF (GFWR) THEN
-      ZF       = ZF       + M3_R2_W2R(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PDR_DZ,&
-      & PLM,PLEPS,PTKEM) * MZF(PFWR, KKA, KKU, KKL)
-      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,&
-      & PD,PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWR, KKA, KKU, KKL)
+      ZF       = ZF       + M3_R2_W2R(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,PDR_DZ,&
+      & PLM,PLEPS,PTKEM) * MZF(PFWR, D%NKA, KKU, KKL)
+      ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2R_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,&
+      & PD,PLM,PLEPS,PTKEM,GUSERV) * MZF(PFWR, D%NKA, KKU, KKL)
     END IF
     !
     IF (KRR/=0) THEN
       ! d(w'r'2)/dz
       IF (GFTH2) THEN
-        ZF       = ZF       + M3_R2_WTH2(CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,&
+        ZF       = ZF       + M3_R2_WTH2(D,CSTURB,D%NKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,&
         & PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,&
+        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,&
         & PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTH2
       END IF
       !
       ! d(w'2r')/dz
       IF (GFWTH) THEN
-        ZF       = ZF       + M3_R2_W2TH(CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKEM,&
-        & PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH, KKA, KKU, KKL)
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,&
-        & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH, KKA, KKU, KKL)
+        ZF       = ZF       + M3_R2_W2TH(D,CSTURB,D%NKA,KKU,KKL,PD,PLM,PLEPS,PTKEM,&
+        & PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH, D%NKA, KKU, KKL)
+        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,&
+        & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * MZF(PFWTH, D%NKA, KKU, KKL)
       END IF
       !
       ! d(w'th'r')/dz
       IF (GFTHR) THEN
-        ZF       = ZF       + M3_R2_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,PLEPS,&
+        ZF       = ZF       + M3_R2_WTHR(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PD,PLEPS,&
         & PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTHR
-        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,&
+        ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,&
         & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTHR
       END IF
   
@@ -770,14 +773,14 @@ ENDIF
     ZFLXZ(:,:,:)   = ZF                                                              &
           + PIMPL * PLMF*PLEPSF                                                  &
             *MZF(2.*PDR_DZ*    &
-                 DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) &
-          + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)
+                 DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL) &
+          + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)
    ELSE
     ZFLXZ(:,:,:)   = ZF                                                              &
           + PIMPL * CSTURB%XCTV*PLM*PLEPS                                                  &
-            *MZF(D_PSI3DRDZ2_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV)    &
-                 *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) &
-          + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL)
+            *MZF(D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV)    &
+                 *DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL) &
+          + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ, D%NKA, KKU, KKL)
   ENDIF
     !
     ! special case near the ground ( uncentred gradient )
@@ -807,7 +810,7 @@ ENDIF
      ) 
   ENDIF
     !
-    ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+    ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
     !
     IF ( KRRL > 0 ) THEN
       PSIGS(:,:,:) = PSIGS(:,:,:) + PAMOIST(:,:,:) **2 * ZFLXZ(:,:,:)
@@ -832,7 +835,7 @@ ENDIF
     IF (OLES_CALL) THEN
       CALL SECOND_MNH(ZTIME1)
       CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Rt2 ) 
-      CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Rt2 )
+      CALL LES_MEAN_SUBGRID(MZF(PWM, D%NKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Rt2 )
       CALL LES_MEAN_SUBGRID(PEMOIST*ZFLXZ, X_LES_SUBGRID_RtThv , .TRUE. ) 
       CALL LES_MEAN_SUBGRID(-CSTURB%XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. )
       CALL LES_MEAN_SUBGRID(-2.*CSTURB%XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Rt2 ) 
@@ -847,7 +850,7 @@ ENDIF
 !
   IF ( KRRL > 0 ) THEN
     ! Extrapolate PSIGS at the ground and at the top
-    PSIGS(:,:,KKA) = PSIGS(:,:,IKB)
+    PSIGS(:,:,D%NKA) = PSIGS(:,:,IKB)
     PSIGS(:,:,KKU) = PSIGS(:,:,IKE)
 #ifdef REPRO48
     PSIGS(:,:,:) =  MAX (PSIGS(:,:,:) , 0.)
diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90
index f88fcf9846fa91cc8947a06b32e2703fc7e067a8..fdbc06d2e86d999328be98ae2ce33982d928c1d9 100644
--- a/src/common/turb/mode_turb_ver_thermo_flux.F90
+++ b/src/common/turb/mode_turb_ver_thermo_flux.F90
@@ -6,10 +6,10 @@ MODULE MODE_TURB_VER_THERMO_FLUX
 IMPLICIT NONE
 CONTAINS
       
-SUBROUTINE TURB_VER_THERMO_FLUX(CST,CSTURB,TURBN,                   &
-                      KKA,KKU,KKL,KRR,KRRL,KRRI,                    &
+SUBROUTINE TURB_VER_THERMO_FLUX(D,CST,CSTURB,TURBN,                 &
+                      KKA,KKU,KKL,KRR,KRRL,KRRI,KSV,                &
                       OTURB_FLX,HTURBDIM,HTOM,OOCEAN,ODEEPOC,OHARAT,&
-                      OCOUPLES,OLES_CALL,                           &
+                      OCOUPLES,OLES_CALL, OCOMPUTE_SRC,             &
                       PIMPL,PEXPL,PTSTEP,HPROGRAM,                  &
                       TPFILE,                                       &
                       PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,       &
@@ -230,6 +230,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
 USE MODD_CST, ONLY: CST_t
 USE MODD_CTURB, ONLY: CSTURB_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_FIELD,          ONLY: TFIELDDATA, TYPEREAL
 USE MODD_GRID_n,         ONLY: XZS, XXHAT, XYHAT
 USE MODD_IO,             ONLY: TFILEDATA
@@ -247,7 +248,6 @@ USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
 USE MODI_SHUMAN , ONLY : DZF, DZM, MZF, MZM, MYF, MXF
-USE MODE_TRIDIAG, ONLY: TRIDIAG
 USE MODI_LES_MEAN_SUBGRID
 USE MODE_TRIDIAG_THERMO, ONLY: TRIDIAG_THERMO
 USE MODE_TM06_H, ONLY: TM06_H
@@ -265,6 +265,7 @@ IMPLICIT NONE
 !
 !
 !
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 TYPE(CST_t),            INTENT(IN)   :: CST
 TYPE(CSTURB_t),         INTENT(IN)   :: CSTURB
 TYPE(TURB_t),           INTENT(IN)   :: TURBN
@@ -272,6 +273,7 @@ INTEGER,                INTENT(IN)   :: KKA           !near ground array index
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
 INTEGER,                INTENT(IN)   :: KKL           !vert. levels type 1=MNH -1=ARO
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
+INTEGER,                INTENT(IN)   :: KSV           ! number of scalar var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
 INTEGER,                INTENT(IN)   :: KRRI          ! number of ice water var.
 LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
@@ -279,91 +281,95 @@ LOGICAL,                INTENT(IN)   ::  OTURB_FLX    ! switch to write the
 LOGICAL,                INTENT(IN)   ::  OOCEAN       ! switch for Ocean model version
 LOGICAL,                INTENT(IN)   ::  ODEEPOC      ! activates sfc forcing for ideal ocean deep conv
 LOGICAL,                INTENT(IN)   ::  OHARAT
-CHARACTER(len=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
+LOGICAL,                INTENT(IN)   ::  OCOMPUTE_SRC ! flag to define dimensions of SIGS and
+CHARACTER(LEN=4),       INTENT(IN)   ::  HTURBDIM     ! dimensionality of the
                                                       ! turbulence scheme
 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! CPROGRAM is the program currently running (modd_conf)
-CHARACTER(len=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
+CHARACTER(LEN=4),       INTENT(IN)   ::  HTOM         ! type of Third Order Moment
 REAL,                   INTENT(IN)   ::  PIMPL, PEXPL ! Coef. for temporal disc.
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time Step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
 LOGICAL,                INTENT(IN)   ::  OLES_CALL    ! compute the LES diagnostics at current time-step
 LOGICAL,                INTENT(IN)   ::  OCOUPLES     ! switch to activate atmos-ocean LES version 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDZZ, PDXX, PDYY, PDZX, PDZY
                                                       ! Metric coefficients
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PDIRCOSZW    ! Director Cosinus of the
                                                       ! normal to the ground surface
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PZZ          ! altitudes
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PZZ          ! altitudes
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRHODJ       ! dry density * grid volum
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  MFMOIST      ! moist mass flux dual scheme
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHVREF      ! ref. state Virtual 
                                                       ! Potential Temperature 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHM,PSFRM ! surface fluxes at time
 !                                                     ! t - deltat 
 !
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
+REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)   ::  PSFTHP,PSFRP ! surface fluxes at time
 !                                                     ! t + deltat 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PWM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PWM 
 ! Vertical wind
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTHLM 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTHLM 
 ! potential temperature at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRM          ! Mixing ratios 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(IN) ::  PRM          ! Mixing ratios 
                                                       ! at t-Delta t
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM         ! Mixing ratios 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVM         ! Mixing ratios 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PTKEM        ! TKE at time t
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PTKEM        ! TKE at time t
 !
 ! In case OHARAT=TRUE, PLM already includes all stability corrections
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLM          ! Turb. mixing length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLEPS        ! dissipative length   
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PATHETA      ! coefficients between 
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSRCM        ! normalized 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLM          ! Turb. mixing length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLEPS        ! dissipative length   
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PLOCPEXNM    ! Lv(T)/Cp/Exnref at time t-1
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PATHETA      ! coefficients between 
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PAMOIST      ! s and Thetal and Rnp
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(IN)   ::  PSRCM        ! normalized 
 ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
-REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
-REAL, DIMENSION(:,:),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
-REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PWTHV         ! buoyancy flux
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHLS     ! cumulated source for theta
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS       ! cumulated source for rt
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTHLP      ! guess of thl at t+ deltat
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRP        ! guess of r at t+ deltat
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PTP       ! Dynamic and thermal
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFRAC_ICE    ! ri fraction of rc+ri
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PBETA        ! buoyancy coefficient
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PSQRT_TKE    ! sqrt(e)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDTH_DZ      ! d(th)/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PDR_DZ       ! d(rt)/dz
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2TH3     ! 3D Redeslperger number R*2_th
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2R3      ! 3D Redeslperger number R*2_r
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PRED2THR3    ! 3D Redeslperger number R*2_thr
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PBLL_O_E     ! beta * Lk * Leps / tke
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PETHETA      ! Coefficient for theta in theta_v computation
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PEMOIST      ! Coefficient for r in theta_v computation
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PREDTH1      ! 1D Redelsperger number for Th
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PREDR1       ! 1D Redelsperger number for r
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPHI3        ! Prandtl number for temperature
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PPSI3        ! Prandtl number for vapor
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PD           ! Denominator in Prandtl numbers
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWTH        ! d(w'2th' )/dz (at flux point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFWR         ! d(w'2r'  )/dz (at flux point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTH2        ! d(w'th'2 )/dz (at mass point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFR2         ! d(w'r'2  )/dz (at mass point)
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   ::  PFTHR        ! d(w'th'r')/dz (at mass point)
+REAL, DIMENSION(MERGE(D%NIT,0,HTOM=='TMO6'),&
+                MERGE(D%NJT,0,HTOM=='TMO6')),   INTENT(INOUT)::  PBL_DEPTH    ! BL depth
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)  :: PWTHV         ! buoyancy flux
+!
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PRTHLS     ! cumulated source for theta
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR), INTENT(INOUT) :: PRRS       ! cumulated source for rt
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(OUT)   :: PTHLP      ! guess of thl at t+ deltat
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(OUT)   :: PRP        ! guess of r at t+ deltat
+!
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(OUT)   :: PTP       ! Dynamic and thermal
                                                      ! TKE production terms
 !
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWTH       ! heat flux
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PWRC       ! cloud water flux
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(OUT)   :: PWTH       ! heat flux
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(OUT)   :: PWRC       ! cloud water flux
 !
 !
 !*       0.2  declaration of local variables
 !
 !
-REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT)  ::  &
        ZA,       & ! work variable for wrc or LES computation
        ZFLXZ,    & ! vertical flux of the treated variable
        ZSOURCE,  & ! source of evolution for the treated variable
@@ -375,9 +381,7 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
        ZF_LEONARD,&  ! Leonard terms
        ZRWTHL,    &
        ZRWRNP,    &
-       ZCLD_THOLD
-!
-REAL,DIMENSION(SIZE(XZS,1),SIZE(XZS,2),KKU)  :: ZALT
+       ZCLD_THOLD, ZALT
 !
 INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
                                     ! mass points of the domain in the 3 direct.
@@ -399,7 +403,7 @@ REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
 REAL :: ZTIME1, ZTIME2
 REAL :: ZDELTAX
 REAL :: ZXBEG,ZXEND,ZYBEG,ZYEND ! Forcing size for ocean deep convection
-REAL, DIMENSION(SIZE(XXHAT),SIZE(XYHAT)) :: ZDIST ! distance
+REAL, DIMENSION(D%NIT,D%NJT) :: ZDIST ! distance
                                    ! from the center of the cooling               
 REAL :: ZFLPROV
 INTEGER           :: JKM          ! vertical index loop
@@ -455,11 +459,11 @@ IF (OOCEAN .AND. ODEEPOC) THEN
   END DO
 END IF !END DEEP OCEAN CONV CASE
 !
-IKT  =SIZE(PTHLM,3)  
-IKTE =IKT-JPVEXT_TURB  
-IKTB =1+JPVEXT_TURB               
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE
 !
 GUSERV = (KRR/=0)
 !
@@ -470,7 +474,7 @@ IF (OHARAT) THEN
 ! OHARAT so TKE and length scales at half levels!
   ZKEFF(:,:,:) =  PLM(:,:,:) * SQRT(PTKEM(:,:,:)) +50.*MFMOIST(:,:,:)
 ELSE
-  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL)
+  ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), D%NKA, KKU, KKL)
 ENDIF
 !
 ! Define a cloud mask with ri and rc (used after with a threshold) for Leonard terms
@@ -511,67 +515,67 @@ END IF
 ! Compute the turbulent flux F and F' at time t-dt.
 !
 IF (OHARAT) THEN
-  ZF      (:,:,:) = -ZKEFF*DZM(PTHLM, KKA, KKU, KKL)/PDZZ
+  ZF      (:,:,:) = -ZKEFF*DZM(PTHLM, D%NKA, KKU, KKL)/PDZZ
   ZDFDDTDZ(:,:,:) = -ZKEFF
 ELSE
-  ZF      (:,:,:) = -CSTURB%XCSHF*PPHI3*ZKEFF*DZM(PTHLM, KKA, KKU, KKL)/PDZZ
-  ZDFDDTDZ(:,:,:) = -CSTURB%XCSHF*ZKEFF*D_PHI3DTDZ_O_DDTDZ(CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
+  ZF      (:,:,:) = -CSTURB%XCSHF*PPHI3*ZKEFF*DZM(PTHLM, D%NKA, KKU, KKL)/PDZZ
+  ZDFDDTDZ(:,:,:) = -CSTURB%XCSHF*ZKEFF*D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
 END IF
 !
 IF (TURBN%LHGRAD) THEN
  ! Compute the Leonard terms for thl
  ZDELTAX= XXHAT(3) - XXHAT(2)
  ZF_LEONARD (:,:,:)= TURBN%XCOEFHGRADTHL*ZDELTAX*ZDELTAX/12.0*(      &
-                 MXF(GX_W_UW(PWM(:,:,:), XDXX,XDZZ,XDZX,KKA,KKU,KKL))&
-                *MZM(GX_M_M(PTHLM(:,:,:),XDXX,XDZZ,XDZX,KKA, KKU, KKL), KKA, KKU, KKL)  &
-              +  MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY,KKA,KKU,KKL))  &
-                *MZM(GY_M_M(PTHLM(:,:,:),XDYY,XDZZ,XDZY,KKA, KKU, KKL), KKA, KKU, KKL) )
+                 MXF(GX_W_UW(PWM(:,:,:), XDXX,XDZZ,XDZX,D%NKA,KKU,KKL))&
+                *MZM(GX_M_M(PTHLM(:,:,:),XDXX,XDZZ,XDZX,D%NKA, KKU, KKL), D%NKA, KKU, KKL)  &
+              +  MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY,D%NKA,KKU,KKL))  &
+                *MZM(GY_M_M(PTHLM(:,:,:),XDYY,XDZZ,XDZY,D%NKA, KKU, KKL), D%NKA, KKU, KKL) )
 END IF
 !
 ! Effect of 3rd order terms in temperature flux (at flux point)
 !
 ! d(w'2th')/dz
 IF (GFWTH) THEN
-  Z3RDMOMENT= M3_WTH_W2TH(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,ZKEFF,PTKEM)
+  Z3RDMOMENT= M3_WTH_W2TH(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,ZKEFF,PTKEM)
 !
   ZF       = ZF       + Z3RDMOMENT * PFWTH
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2TH_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
    & PD,PBLL_O_E,PETHETA,ZKEFF,PTKEM) * PFWTH
 END IF
 !
 ! d(w'th'2)/dz
 IF (GFTH2) THEN
-  Z3RDMOMENT= M3_WTH_WTH2(CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
+  Z3RDMOMENT= M3_WTH_WTH2(D,CSTURB,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
 !
-  ZF       = ZF       + Z3RDMOMENT * MZM(PFTH2, KKA, KKU, KKL)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTH2_O_DDTDZ(CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,&
-    & PD,PBLL_O_E,PETHETA) * MZM(PFTH2, KKA, KKU, KKL)
+  ZF       = ZF       + Z3RDMOMENT * MZM(PFTH2, D%NKA, KKU, KKL)
+  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,PREDR1,&
+    & PD,PBLL_O_E,PETHETA) * MZM(PFTH2, D%NKA, KKU, KKL)
 END IF
 !
 ! d(w'2r')/dz
 IF (GFWR) THEN
-  ZF       = ZF       + M3_WTH_W2R(CSTURB,KKA,KKU,KKL,PD,ZKEFF,&
+  ZF       = ZF       + M3_WTH_W2R(D,CSTURB,D%NKA,KKU,KKL,PD,ZKEFF,&
     & PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ) * PFWR
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2R_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,&
+  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,&
     & PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST) * PFWR
 END IF
 !
 ! d(w'r'2)/dz
 IF (GFR2) THEN
-  ZF       = ZF       + M3_WTH_WR2(CSTURB,KKA,KKU,KKL,PD,ZKEFF,PTKEM,&
-    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ) * MZM(PFR2, KKA, KKU, KKL)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WR2_O_DDTDZ(CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,&
-    & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST) * MZM(PFR2, KKA, KKU, KKL)
+  ZF       = ZF       + M3_WTH_WR2(D,CSTURB,D%NKA,KKU,KKL,PD,ZKEFF,PTKEM,&
+    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTH_DZ) * MZM(PFR2, D%NKA, KKU, KKL)
+  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PREDR1,PD,&
+    & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST) * MZM(PFR2, D%NKA, KKU, KKL)
 END IF
 !
 ! d(w'th'r')/dz
 IF (GFTHR) THEN
-  Z3RDMOMENT= M3_WTH_WTHR(CSTURB,KKA,KKU,KKL,PREDR1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
+  Z3RDMOMENT= M3_WTH_WTHR(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
     & PLEPS,PEMOIST)
 !
-  ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR, KKA, KKU, KKL)
-  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(CSTURB,Z3RDMOMENT,PREDTH1,&
-    & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR, KKA, KKU, KKL)
+  ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR, D%NKA, KKU, KKL)
+  ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,Z3RDMOMENT,PREDTH1,&
+    & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR, D%NKA, KKU, KKL)
 END IF
 ! compute interface flux
 IF (OCOUPLES) THEN   ! Autocoupling O-A LES
@@ -580,7 +584,7 @@ IF (OCOUPLES) THEN   ! Autocoupling O-A LES
                   *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) )
   ELSE                ! atmosph model in coupled case
     ZF(:,:,IKB) =  TURBN%XSSTFL_C(:,:,1) &
-                  *0.5* ( 1. + PRHODJ(:,:,KKA)/PRHODJ(:,:,IKB) )
+                  *0.5* ( 1. + PRHODJ(:,:,D%NKA)/PRHODJ(:,:,IKB) )
   ENDIF 
 !
 ELSE  ! No coupling O and A cases
@@ -591,11 +595,11 @@ ELSE  ! No coupling O and A cases
   IF (HTURBDIM=='3DIM') THEN
     ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
                        * PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+                       * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))
   ELSE
     ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
                        / PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+                       * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))
   END IF
 !
   IF (OOCEAN) THEN
@@ -610,7 +614,7 @@ ELSE  ! No coupling O and A cases
 END IF !end no coupled cases
 !
 ! Compute the split conservative potential temperature at t+deltat
-CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
+CALL TRIDIAG_THERMO(D,D%NKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
                     PRHODJ,PTHLP)
 !
 ! Compute the equivalent tendency for the conservative potential temperature
@@ -622,8 +626,8 @@ IF (TURBN%LHGRAD) THEN
   ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
  END DO
  WHERE ( (ZCLD_THOLD(:,:,:) >= TURBN%XCLDTHOLD) .AND. ( ZALT(:,:,:) >= TURBN%XALTHGRAD) )
-  ZRWTHL(:,:,:) = -GZ_W_M(MZM(PRHODJ(:,:,:), KKA, KKU, KKL)*ZF_LEONARD(:,:,:),XDZZ,&
-                   KKA, KKU, KKL)
+  ZRWTHL(:,:,:) = -GZ_W_M(MZM(PRHODJ(:,:,:), D%NKA, KKU, KKL)*ZF_LEONARD(:,:,:),XDZZ,&
+                   D%NKA, KKU, KKL)
  END WHERE
 END IF
 !
@@ -634,7 +638,7 @@ PRTHLS(:,:,:)= PRTHLS(:,:,:)  + ZRWTHL(:,:,:)
 !  Conservative potential temperature flux : 
 !
 ZFLXZ(:,:,:)   = ZF                                                &
-               + PIMPL * ZDFDDTDZ * DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ
+               + PIMPL * ZDFDDTDZ * DZM(PTHLP - PTHLM, D%NKA, KKU, KKL) / PDZZ
 ! replace the flux by the Leonard terms
 IF (TURBN%LHGRAD) THEN
  WHERE ( (ZCLD_THOLD(:,:,:) >= TURBN%XCLDTHOLD) .AND. ( ZALT(:,:,:) >= TURBN%XALTHGRAD) )
@@ -642,7 +646,7 @@ IF (TURBN%LHGRAD) THEN
  END WHERE
 END IF
 !
-ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
 IF (OOCEAN) THEN
   ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE)
 END IF
@@ -655,10 +659,10 @@ PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL))
 !
 IF (OOCEAN) THEN
   PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL))
-  PWTH(:,:,KKA)=0. 
+  PWTH(:,:,D%NKA)=0. 
   PWTH(:,:,KKU)=ZFLXZ(:,:,KKU)
 ELSE
-  PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
+  PWTH(:,:,D%NKA)=0.5*(ZFLXZ(:,:,D%NKA)+ZFLXZ(:,:,D%NKA+KKL))
   PWTH(:,:,IKE)=PWTH(:,:,IKE-KKL)
 END IF
 !
@@ -679,20 +683,20 @@ END IF
 !
 ! Contribution of the conservative temperature flux to the buoyancy flux
 IF (OOCEAN) THEN
-  PTP(:,:,:)= CST%XG*CST%XALPHAOC * MZF(ZFLXZ,KKA, KKU, KKL )
+  PTP(:,:,:)= CST%XG*CST%XALPHAOC * MZF(ZFLXZ,D%NKA, KKU, KKL )
 ELSE
   IF (KRR /= 0) THEN
-    PTP(:,:,:)  =  PBETA * MZF( MZM(PETHETA,KKA, KKU, KKL) * ZFLXZ,KKA, KKU, KKL )
+    PTP(:,:,:)  =  PBETA * MZF( MZM(PETHETA,D%NKA, KKU, KKL) * ZFLXZ,D%NKA, KKU, KKL )
     PTP(:,:,IKB)=  PBETA(:,:,IKB) * PETHETA(:,:,IKB) *   &
                    0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
   ELSE
-    PTP(:,:,:)=  PBETA * MZF( ZFLXZ,KKA, KKU, KKL )
+    PTP(:,:,:)=  PBETA * MZF( ZFLXZ,D%NKA, KKU, KKL )
   END IF
 END IF 
 !
 ! Buoyancy flux at flux points
 ! 
-PWTHV = MZM(PETHETA, KKA, KKU, KKL) * ZFLXZ
+PWTHV = MZM(PETHETA, D%NKA, KKU, KKL) * ZFLXZ
 PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB)
 !
 IF (OOCEAN) THEN
@@ -705,14 +709,14 @@ IF(HPROGRAM/='AROME  ') THEN
  IF ( KRRL >= 1 ) THEN
    IF ( KRRI >= 1 ) THEN
      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL) &
+                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, D%NKA, KKU, KKL) &
                      *(1.0-PFRAC_ICE(:,:,:))
      PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL) &
+                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, D%NKA, KKU, KKL) &
                      *PFRAC_ICE(:,:,:)
    ELSE
      PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, KKA, KKU, KKL)
+                     PRHODJ*PATHETA*2.*PSRCM*DZF(ZFLXZ/PDZZ, D%NKA, KKU, KKL)
    END IF
  END IF
 END IF
@@ -721,22 +725,22 @@ END IF
 ! 
 IF (OLES_CALL) THEN
   CALL SECOND_MNH(ZTIME1)
-  CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThl ) 
-  CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WThl )
-  CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL),&
+  CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WThl ) 
+  CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_W_SBG_WThl )
+  CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, D%NKA, KKU, KKL)*MZF(ZFLXZ, D%NKA, KKU, KKL),&
       & X_LES_RES_ddxa_W_SBG_UaThl )
-  CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaThl )
-  CALL LES_MEAN_SUBGRID(-CSTURB%XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_ThlPz ) 
-  CALL LES_MEAN_SUBGRID(MZF(MZM(PETHETA, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv ) 
+  CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaThl )
+  CALL LES_MEAN_SUBGRID(-CSTURB%XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_ThlPz ) 
+  CALL LES_MEAN_SUBGRID(MZF(MZM(PETHETA, D%NKA, KKU, KKL)*ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WThv ) 
   IF (KRR>=1) THEN
-    CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaThl )
+    CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaThl )
   END IF
   !* diagnostic of mixing coefficient for heat
-  ZA = DZM(PTHLP, KKA, KKU, KKL)
+  ZA = DZM(PTHLP, D%NKA, KKU, KKL)
   WHERE (ZA==0.) ZA=1.E-6
   ZA = - ZFLXZ / ZA * PDZZ
   ZA(:,:,IKB) = CSTURB%XCSHF*PPHI3(:,:,IKB)*ZKEFF(:,:,IKB)
-  ZA = MZF(ZA, KKA, KKU, KKL)
+  ZA = MZF(ZA, D%NKA, KKU, KKL)
   ZA = MIN(MAX(ZA,-1000.),1000.)
   CALL LES_MEAN_SUBGRID( ZA, X_LES_SUBGRID_Kh   ) 
   !
@@ -762,67 +766,67 @@ IF (KRR /= 0) THEN
   ! Compute the turbulent flux F and F' at time t-dt.
   !
  IF (OHARAT) THEN
-  ZF      (:,:,:) = -ZKEFF*DZM(PRM(:,:,:,1), KKA, KKU, KKL)/PDZZ
+  ZF      (:,:,:) = -ZKEFF*DZM(PRM(:,:,:,1), D%NKA, KKU, KKL)/PDZZ
   ZDFDDRDZ(:,:,:) = -ZKEFF
  ELSE
-  ZF      (:,:,:) = -CSTURB%XCSHF*PPSI3*ZKEFF*DZM(PRM(:,:,:,1), KKA, KKU, KKL)/PDZZ
-  ZDFDDRDZ(:,:,:) = -CSTURB%XCSHF*ZKEFF*D_PSI3DRDZ_O_DDRDZ(CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)
+  ZF      (:,:,:) = -CSTURB%XCSHF*PPSI3*ZKEFF*DZM(PRM(:,:,:,1), D%NKA, KKU, KKL)/PDZZ
+  ZDFDDRDZ(:,:,:) = -CSTURB%XCSHF*ZKEFF*D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)
  ENDIF
   !
   ! Compute Leonard Terms for Cloud mixing ratio
   IF (TURBN%LHGRAD) THEN
     ZDELTAX= XXHAT(3) - XXHAT(2)
     ZF_LEONARD (:,:,:)= TURBN%XCOEFHGRADRM*ZDELTAX*ZDELTAX/12.0*(        &
-                MXF(GX_W_UW(PWM(:,:,:),  XDXX,XDZZ,XDZX,KKA,KKU,KKL))       &
-                *MZM(GX_M_M(PRM(:,:,:,1),XDXX,XDZZ,XDZX,KKA,KKU,KKL),KKA,KKU,KKL) &
-                +MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY,KKA,KKU,KKL))        &
-                *MZM(GY_M_M(PRM(:,:,:,1),XDYY,XDZZ,XDZY,KKA,KKU,KKL),KKA,KKU,KKL) )
+                MXF(GX_W_UW(PWM(:,:,:),  XDXX,XDZZ,XDZX,D%NKA,KKU,KKL))       &
+                *MZM(GX_M_M(PRM(:,:,:,1),XDXX,XDZZ,XDZX,D%NKA,KKU,KKL),D%NKA,KKU,KKL) &
+                +MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY,D%NKA,KKU,KKL))        &
+                *MZM(GY_M_M(PRM(:,:,:,1),XDYY,XDZZ,XDZY,D%NKA,KKU,KKL),D%NKA,KKU,KKL) )
    END IF
   !
   ! Effect of 3rd order terms in temperature flux (at flux point)
   !
   ! d(w'2r')/dz
   IF (GFWR) THEN
-    Z3RDMOMENT= M3_WR_W2R(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,ZKEFF,PTKEM)
+    Z3RDMOMENT= M3_WR_W2R(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,ZKEFF,PTKEM)
   !
     ZF       = ZF       + Z3RDMOMENT * PFWR
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2R_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2R_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
      & PBLL_O_E,PEMOIST,ZKEFF,PTKEM) * PFWR
   END IF
   !
   ! d(w'r'2)/dz
   IF (GFR2) THEN
-    Z3RDMOMENT= M3_WR_WR2(CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
+    Z3RDMOMENT= M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
   !
-    ZF       = ZF       + Z3RDMOMENT * MZM(PFR2, KKA, KKU, KKL)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WR2_O_DDRDZ(CSTURB,Z3RDMOMENT,PREDR1,&
-     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFR2, KKA, KKU, KKL)
+    ZF       = ZF       + Z3RDMOMENT * MZM(PFR2, D%NKA, KKU, KKL)
+    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WR2_O_DDRDZ(D,CSTURB,Z3RDMOMENT,PREDR1,&
+     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFR2, D%NKA, KKU, KKL)
   END IF
   !
   ! d(w'2th')/dz
   IF (GFWTH) THEN
-    ZF       = ZF       + M3_WR_W2TH(CSTURB,KKA,KKU,KKL,PD,ZKEFF,&
+    ZF       = ZF       + M3_WR_W2TH(D,CSTURB,D%NKA,KKU,KKL,PD,ZKEFF,&
      & PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * PFWTH
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,& 
+    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,& 
      & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA) * PFWTH
   END IF
   !
   ! d(w'th'2)/dz
   IF (GFTH2) THEN
-    ZF       = ZF       + M3_WR_WTH2(CSTURB,KKA,KKU,KKL,PD,ZKEFF,PTKEM,&
-    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ) * MZM(PFTH2, KKA, KKU, KKL)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTH2_O_DDRDZ(CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,&
-     &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA) * MZM(PFTH2, KKA, KKU, KKL)
+    ZF       = ZF       + M3_WR_WTH2(D,CSTURB,D%NKA,KKU,KKL,PD,ZKEFF,PTKEM,&
+    & PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDR_DZ) * MZM(PFTH2, D%NKA, KKU, KKL)
+    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,PREDR1,PREDTH1,PD,&
+     &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA) * MZM(PFTH2, D%NKA, KKU, KKL)
   END IF
   !
   ! d(w'th'r')/dz
   IF (GFTHR) THEN
-    Z3RDMOMENT= M3_WR_WTHR(CSTURB,KKA,KKU,KKL,PREDTH1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
+    Z3RDMOMENT= M3_WR_WTHR(D,CSTURB,D%NKA,KKU,KKL,PREDTH1,PD,ZKEFF,PTKEM,PSQRT_TKE,PBETA,&
      & PLEPS,PETHETA)
   !
-    ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR, KKA, KKU, KKL)
-    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTHR_O_DDRDZ(CSTURB,KKA,KKU,KKL,Z3RDMOMENT,PREDR1, &
-     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR, KKA, KKU, KKL)
+    ZF       = ZF       + Z3RDMOMENT * MZM(PFTHR, D%NKA, KKU, KKL)
+    ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,D%NKA,KKU,KKL,Z3RDMOMENT,PREDR1, &
+     & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR, D%NKA, KKU, KKL)
   END IF
   !
   ! compute interface flux
@@ -845,11 +849,11 @@ IF (KRR /= 0) THEN
     IF (HTURBDIM=='3DIM') THEN
       ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )       &
                            * PDIRCOSZW(:,:)                       &
-                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+                         * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))
     ELSE
       ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )     &
                          / PDIRCOSZW(:,:)                       &
-                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+                         * 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB))
     END IF
     !
     IF (OOCEAN) THEN
@@ -865,7 +869,7 @@ IF (KRR /= 0) THEN
     END IF
   END IF!end no coupled cases
   ! Compute the split conservative potential temperature at t+deltat
-  CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,&
+  CALL TRIDIAG_THERMO(D,D%NKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,&
                       PDZZ,PRHODJ,PRP)
   !
   ! Compute the equivalent tendency for the conservative mixing ratio
@@ -878,7 +882,7 @@ IF (KRR /= 0) THEN
     ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
    END DO
    WHERE ( (ZCLD_THOLD(:,:,:) >= TURBN%XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= TURBN%XALTHGRAD ) )
-    ZRWRNP (:,:,:) =  -GZ_W_M(MZM(PRHODJ(:,:,:),KKA,KKU,KKL)*ZF_LEONARD(:,:,:),XDZZ,KKA,KKU,KKL)
+    ZRWRNP (:,:,:) =  -GZ_W_M(MZM(PRHODJ(:,:,:),D%NKA,KKU,KKL)*ZF_LEONARD(:,:,:),XDZZ,D%NKA,KKU,KKL)
    END WHERE
   END IF
   !
@@ -889,7 +893,7 @@ IF (KRR /= 0) THEN
   ! cons. mixing ratio flux :
   !
   ZFLXZ(:,:,:)   = ZF                                                &
-                 + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ 
+                 + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1), D%NKA, KKU, KKL) / PDZZ 
   !
   ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
   IF (TURBN%LHGRAD) THEN
@@ -898,13 +902,13 @@ IF (KRR /= 0) THEN
    END WHERE
   END IF
   !
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+  ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
   !
   DO JK=IKTB+1,IKTE-1
    PWRC(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
   END DO
   PWRC(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL))
-  PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
+  PWRC(:,:,D%NKA)=0.5*(ZFLXZ(:,:,D%NKA)+ZFLXZ(:,:,D%NKA+KKL))
   PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL)
   !
   !
@@ -925,9 +929,9 @@ IF (KRR /= 0) THEN
   !
   ! Contribution of the conservative water flux to the Buoyancy flux
   IF (OOCEAN) THEN
-     ZA(:,:,:)=  -CST%XG*CST%XBETAOC  * MZF(ZFLXZ, KKA, KKU, KKL )
+     ZA(:,:,:)=  -CST%XG*CST%XBETAOC  * MZF(ZFLXZ, D%NKA, KKU, KKL )
   ELSE
-    ZA(:,:,:)   =  PBETA * MZF( MZM(PEMOIST, KKA, KKU, KKL) * ZFLXZ,KKA,KKU,KKL )
+    ZA(:,:,:)   =  PBETA * MZF( MZM(PEMOIST, D%NKA, KKU, KKL) * ZFLXZ,D%NKA,KKU,KKL )
     ZA(:,:,IKB) =  PBETA(:,:,IKB) * PEMOIST(:,:,IKB) *   &
                    0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
     PTP(:,:,:) = PTP(:,:,:) + ZA(:,:,:)
@@ -935,7 +939,7 @@ IF (KRR /= 0) THEN
   !
   ! Buoyancy flux at flux points
   ! 
-  PWTHV          = PWTHV          + MZM(PEMOIST, KKA, KKU, KKL) * ZFLXZ
+  PWTHV          = PWTHV          + MZM(PEMOIST, D%NKA, KKU, KKL) * ZFLXZ
   PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB)
   IF (OOCEAN) THEN
     PWTHV(:,:,IKE) = PWTHV(:,:,IKE) + PEMOIST(:,:,IKE)* ZFLXZ(:,:,IKE)
@@ -947,14 +951,14 @@ IF(HPROGRAM/='AROME  ') THEN
    IF ( KRRL >= 1 ) THEN
      IF ( KRRI >= 1 ) THEN
        PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,KKA,KKU,KKL )       &
+                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,D%NKA,KKU,KKL )       &
                        *(1.0-PFRAC_ICE(:,:,:))
        PRRS(:,:,:,4) = PRRS(:,:,:,4) -                                        &
-                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,KKA,KKU,KKL )       &
+                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,D%NKA,KKU,KKL )       &
                        *PFRAC_ICE(:,:,:)
      ELSE
        PRRS(:,:,:,2) = PRRS(:,:,:,2) -                                        &
-                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,KKA,KKU,KKL )
+                       PRHODJ*PAMOIST*2.*PSRCM*DZF(ZFLXZ/PDZZ,D%NKA,KKU,KKL )
      END IF
    END IF
 END IF
@@ -963,14 +967,14 @@ END IF
 ! 
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRt ) 
-    CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WRt )
-    CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL),&
+    CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WRt ) 
+    CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_W_SBG_WRt )
+    CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, D%NKA, KKU, KKL)*MZF(ZFLXZ, D%NKA, KKU, KKL),&
     & X_LES_RES_ddxa_W_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaRt )
-    CALL LES_MEAN_SUBGRID(MZF(MZM(PEMOIST, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv , .TRUE. ) 
-    CALL LES_MEAN_SUBGRID(-CSTURB%XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_RtPz ) 
+    CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaRt )
+    CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, D%NKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaRt )
+    CALL LES_MEAN_SUBGRID(MZF(MZM(PEMOIST, D%NKA, KKU, KKL)*ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WThv , .TRUE. ) 
+    CALL LES_MEAN_SUBGRID(-CSTURB%XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_RtPz ) 
     CALL SECOND_MNH(ZTIME2)
     XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
   END IF
@@ -992,19 +996,19 @@ IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL) .AND. (KRRL > 0) ) THEN
 ! With OHARAT is true tke and length scales at half levels
 ! yet modify to use length scale and tke at half levels from vdfexcuhl
  IF (OHARAT) THEN
-  ZA(:,:,:)   = DZM(PIMPL * PTHLP + PEXPL * PTHLM, KKA, KKU, KKL) / PDZZ *       &
+  ZA(:,:,:)   = DZM(PIMPL * PTHLP + PEXPL * PTHLM, D%NKA, KKU, KKL) / PDZZ *       &
                   (-PLM*PSQRT_TKE) 
  ELSE
-  ZA(:,:,:)   = DZM(PIMPL * PTHLP + PEXPL * PTHLM, KKA, KKU, KKL) / PDZZ *       &
-                  (-PPHI3*MZM(PLM*PSQRT_TKE, KKA, KKU, KKL)) * CSTURB%XCSHF 
+  ZA(:,:,:)   = DZM(PIMPL * PTHLP + PEXPL * PTHLM, D%NKA, KKU, KKL) / PDZZ *       &
+                  (-PPHI3*MZM(PLM*PSQRT_TKE, D%NKA, KKU, KKL)) * CSTURB%XCSHF 
  ENDIF
   ZA(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) ) &
                * PDIRCOSZW(:,:)
   !  
   ! compute <w Rc>
-  ZFLXZ(:,:,:) = MZM(PAMOIST * 2.* PSRCM, KKA, KKU, KKL) * ZFLXZ(:,:,:) + &
-                 MZM(PATHETA * 2.* PSRCM, KKA, KKU, KKL) * ZA(:,:,:)
-  ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+  ZFLXZ(:,:,:) = MZM(PAMOIST * 2.* PSRCM, D%NKA, KKU, KKL) * ZFLXZ(:,:,:) + &
+                 MZM(PATHETA * 2.* PSRCM, D%NKA, KKU, KKL) * ZA(:,:,:)
+  ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) 
   !                 
   ! store the liquid water mixing ratio vertical flux
   IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN
@@ -1025,7 +1029,7 @@ IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL) .AND. (KRRL > 0) ) THEN
 !
   IF (OLES_CALL) THEN
     CALL SECOND_MNH(ZTIME1)
-    CALL LES_MEAN_SUBGRID( MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRc ) 
+    CALL LES_MEAN_SUBGRID( MZF(ZFLXZ, D%NKA, KKU, KKL), X_LES_SUBGRID_WRc ) 
     CALL SECOND_MNH(ZTIME2)
     XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
   END IF
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index eb4e8e84b582d4efd630c9962ee1004d5c8e1ff2..2ddae8f94cc25f6637df8af80fd1e25618883456 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -347,7 +347,9 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) ::  PPABST      ! Pressure at t
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) ::  PUT,PVT,PWT ! wind components
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) ::  PTKET       ! TKE
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) ::  PSVT        ! passive scal. var.
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN) ::  PSRCT       ! Second-order flux
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)),   INTENT(IN) ::  PSRCT       ! Second-order flux
                       ! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3
 REAL, DIMENSION(MERGE(D%NIT,0,HTOM=='TMO6'),&
                 MERGE(D%NJT,0,HTOM=='TMO6')),INTENT(INOUT) :: PBL_DEPTH  ! BL height for TOMS
@@ -488,12 +490,12 @@ ENDIF
 IF (OHARAT .AND. OLES_CALL) THEN
   CALL ABOR1('OHARATU not implemented for option LLES_CALL')
 ENDIF
-
-IKT=SIZE(PTHLT,3)          
-IKTB=1+JPVEXT_TURB              
-IKTE=IKT-JPVEXT_TURB
-IKB=KKA+JPVEXT_TURB*KKL
-IKE=KKU-JPVEXT_TURB*KKL
+!
+IKT=D%NKT  
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IKE=D%NKE
 !
 ZEXPL = 1.- PIMPL
 ZRVORD= CST%XRV / CST%XRD
@@ -655,25 +657,25 @@ SELECT CASE (HTURBLEN)
 
   CASE ('BL89')
     ZSHEAR=0.
-    CALL BL89(D,CST,CSTURB,KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
+    CALL BL89(D,CST,CSTURB,D%NKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
 !
 !*      3.2 RM17 mixing length
 !           ------------------
 
   CASE ('RM17')
-    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,KKA,KKU,KKL),KKA,KKU,KKL))
-    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,KKA,KKU,KKL),KKA,KKU,KKL))
+    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
+    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
     ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
-    CALL BL89(D,CST,CSTURB,KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
+    CALL BL89(D,CST,CSTURB,D%NKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
 !
 !*      3.3 Grey-zone combined RM17 & Deardorff mixing lengths 
 !           --------------------------------------------------
 
   CASE ('ADAP')
-    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,KKA,KKU,KKL),KKA,KKU,KKL))
-    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,KKA,KKU,KKL),KKA,KKU,KKL))
+    ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
+    ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
     ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
-    CALL BL89(D,CST,CSTURB,KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
+    CALL BL89(D,CST,CSTURB,D%NKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
 
     CALL DELT(ZLMW,ODZ=.FALSE.)
     ! The minimum mixing length is chosen between Horizontal grid mesh (not taking into account the vertical grid mesh) and RM17.
@@ -706,7 +708,7 @@ SELECT CASE (HTURBLEN)
    !
    DO JK=IKTB,IKTE
      ZLM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - &
-     & PZZ(:,:,KKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:)
+     & PZZ(:,:,D%NKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:)
      ZLM(:,:,JK) = ZALPHA  * ZLM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,:,JK) )
    END DO
 !
@@ -745,7 +747,7 @@ IF (ORMC01) THEN
     ZSFRV=0.
     ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV)
   END IF
-  CALL RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
+  CALL RMC01(HTURBLEN,D%NKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
 END IF
 !
 !RMC01 is only applied on RM17 in ADAP
@@ -783,8 +785,8 @@ IF (HPROGRAM/='AROME ') THEN
 !
   CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
 ELSE
-  ZUSLOPE=PUT(:,:,KKA)
-  ZVSLOPE=PVT(:,:,KKA)
+  ZUSLOPE=PUT(:,:,D%NKA)
+  ZVSLOPE=PVT(:,:,D%NKA)
 END IF
 !
 !
@@ -819,10 +821,10 @@ ZMR2  = 0.     ! w'r'2
 ZMTHR = 0.     ! w'th'r'
 
 IF (HTOM=='TM06') THEN
-  CALL TM06(KKA,KKU,KKL,PTHVREF,PBL_DEPTH,PZZ,PSFTH,ZMWTH,ZMTH2)
+  CALL TM06(D%NKA,KKU,KKL,PTHVREF,PBL_DEPTH,PZZ,PSFTH,ZMWTH,ZMTH2)
 !
-  ZFWTH = -GZ_M_W(KKA,KKU,KKL,ZMWTH,PDZZ)    ! -d(w'2th' )/dz
-  !ZFWR  = -GZ_M_W(KKA,KKU,KKL,ZMWR, PDZZ)    ! -d(w'2r'  )/dz
+  ZFWTH = -GZ_M_W(D%NKA,KKU,KKL,ZMWTH,PDZZ)    ! -d(w'2th' )/dz
+  !ZFWR  = -GZ_M_W(D%NKA,KKU,KKL,ZMWR, PDZZ)    ! -d(w'2r'  )/dz
   ZFTH2 = -GZ_W_M(ZMTH2,PDZZ)    ! -d(w'th'2 )/dz
   !ZFR2  = -GZ_W_M(ZMR2, PDZZ)    ! -d(w'r'2  )/dz
   !ZFTHR = -GZ_W_M(ZMTHR,PDZZ)    ! -d(w'th'r')/dz
@@ -887,12 +889,12 @@ IF( BUCONF%LBUDGET_SV ) THEN
   END DO
 END IF
 
-CALL TURB_VER(CST,CSTURB,TURBN,KKA,KKU,KKL,KRR, KRRL, KRRI,&
-          OTURB_FLX, OOCEAN, ODEEPOC, OHARAT,            &
+CALL TURB_VER(D, CST,CSTURB,TURBN,D%NKA,KKU,KKL,KRR, KRRL, KRRI,&
+          OTURB_FLX, OOCEAN, ODEEPOC, OHARAT,OCOMPUTE_SRC,&
           KSV,KSV_LGBEG,KSV_LGEND,                       &
           HTURBDIM,HTOM,PIMPL,ZEXPL,                     &
           HPROGRAM, O2D, ONOMIXLG, OFLAT,                &
-          OLES_CALL,OCOUPLES,OBLOWSNOW,                  &
+          OLES_CALL,OCOUPLES,OBLOWSNOW, ORMC01,          &
           PTSTEP,TPFILE,                                 &
           PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ,        &
           PCOSSLOPE,PSINSLOPE,                           &
@@ -983,8 +985,9 @@ IF( HTURBDIM == '3DIM' ) THEN
 !à supprimer une fois le précédent ifdef REPRO48 validé
 #ifdef REPRO48
 #else
-    CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP,        &
-          HLBCX,HLBCY,OTURB_FLX,OSUBG_COND,OOCEAN,             &
+    CALL TURB_HOR_SPLT(D,CST,CSTURB,                           &
+          KSPLIT, KRR, KRRL, KRRI, PTSTEP,HLBCX,HLBCY,         &
+          OTURB_FLX,OSUBG_COND,OOCEAN,OCOMPUTE_SRC,            &
           TPFILE,                                              &
           PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                        &
           PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                       &
@@ -993,7 +996,7 @@ IF( HTURBDIM == '3DIM' ) THEN
           PSFTH,PSFRV,PSFSV,                                   &
           ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M,             &
           PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT,          &
-          PTKET,ZLM,ZLEPS,                                    &
+          PTKET,ZLM,ZLEPS,                                     &
           ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,           &
           PDP,PTP,PSIGS,                                       &
           ZTRH,                                                &
@@ -1044,8 +1047,8 @@ END IF
 !  6.1 Contribution of mass-flux in the TKE buoyancy production if 
 !      cloud computation is not statistical 
 
-PTP = PTP + CST%XG / PTHVREF * MZF(PFLXZTHVMF,KKA, KKU, KKL)
-IF(PRESENT(PTPMF))  PTPMF=CST%XG / PTHVREF * MZF(PFLXZTHVMF, KKA, KKU, KKL)
+PTP = PTP + CST%XG / PTHVREF * MZF(PFLXZTHVMF,D%NKA, KKU, KKL)
+IF(PRESENT(PTPMF))  PTPMF=CST%XG / PTHVREF * MZF(PFLXZTHVMF, D%NKA, KKU, KKL)
 
 !  6.2 TKE evolution equation
 
@@ -1068,8 +1071,8 @@ ELSE
   ZRTKEMS=0.
 END IF
 !
-CALL TKE_EPS_SOURCES(CST,CSTURB,BUCONF,HPROGRAM,&
-                   &KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,       &
+CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,HPROGRAM,&
+                   &D%NKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,       &
                    & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,            &
                    & PTSTEP,PIMPL,ZEXPL,                         &
                    & HTURBLEN,HTURBDIM,                              &
@@ -1213,14 +1216,14 @@ IF (OLES_CALL) THEN
     CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_U2)
     X_LES_SUBGRID_V2 = X_LES_SUBGRID_U2
     X_LES_SUBGRID_W2 = X_LES_SUBGRID_U2
-    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(KKA,KKU,KKL,PTHLT,PDZZ),&
-                          KKA, KKU, KKL),X_LES_RES_ddz_Thl_SBG_W2)
+    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(D%NKA,KKU,KKL,PTHLT,PDZZ),&
+                          D%NKA, KKU, KKL),X_LES_RES_ddz_Thl_SBG_W2)
     IF (KRR>=1) &
-    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(KKA,KKU,KKL,PRT(:,:,:,1),PDZZ),&
-                         &KKA, KKU, KKL),X_LES_RES_ddz_Rt_SBG_W2)
+    CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(D%NKA,KKU,KKL,PRT(:,:,:,1),PDZZ),&
+                         &D%NKA, KKU, KKL),X_LES_RES_ddz_Rt_SBG_W2)
     DO JSV=1,KSV
-      CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(KKA,KKU,KKL,PSVT(:,:,:,JSV),PDZZ), &
-                           &KKA, KKU, KKL), X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
+      CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(D%NKA,KKU,KKL,PSVT(:,:,:,JSV),PDZZ), &
+                           &D%NKA, KKU, KKL), X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
     END DO
   END IF
 
@@ -1244,6 +1247,28 @@ END IF
 IF(PRESENT(PLEM)) PLEM = ZLM
 !----------------------------------------------------------------------------
 !
+
+print*,"PTHLT = ",MINVAL(PTHLT),MAXVAL(PTHLT)
+print*," PRT = ",MINVAL(PRT),MAXVAL(PRT)
+print*," PRUS = ",MINVAL(PRUS),MAXVAL(PRUS)
+print*," PRVS = ",MINVAL(PRVS),MAXVAL(PRVS)
+print*," PRWS = ",MINVAL(PRWS),MAXVAL(PRWS)
+print*," PRTHLS = ",MINVAL(PRTHLS),MAXVAL(PRTHLS)
+print*," PRTKES = ",MINVAL(PRTKES),MAXVAL(PRTKES)
+print*," PRRS = ",MINVAL(PRRS),MAXVAL(PRRS)
+print*," PRSVS = ",MINVAL(PRSVS),MAXVAL(PRSVS)
+print*," PSIGS = ",MINVAL(PSIGS),MAXVAL(PSIGS)
+print*," PWTH = ",MINVAL(PWTH),MAXVAL(PWTH)
+print*," PWRC = ",MINVAL(PWRC),MAXVAL(PWRC)
+print*," PWSV = ",MINVAL(PWSV),MAXVAL(PWSV)
+print*," PTP = ",MINVAL(PTP),MAXVAL(PTP)
+print*," PTPMF = ",MINVAL(PTPMF),MAXVAL(PTPMF)
+print*," PDP = ",MINVAL(PDP),MAXVAL(PDP)
+print*," PTDIFF = ",MINVAL(PTDIFF),MAXVAL(PTDIFF)
+print*," PTDISS = ",MINVAL(PTDISS),MAXVAL(PTDISS)
+
+
+
 IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE)
 CONTAINS
 !
@@ -1451,7 +1476,7 @@ IF (ODZ) THEN
     PLM(:,:,JK) = PZZ(:,:,JK+KKL) - PZZ(:,:,JK)
   END DO
   PLM(:,:,KKU) = PLM(:,:,IKE)
-  PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA)
+  PLM(:,:,D%NKA) = PZZ(:,:,IKB) - PZZ(:,:,D%NKA)
   IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
     IF ( O2D) THEN
       PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) ) 
@@ -1503,7 +1528,7 @@ IF (.NOT. ORMC01) THEN
   END DO
 END IF
 !
-PLM(:,:,KKA) = PLM(:,:,IKB  )
+PLM(:,:,D%NKA) = PLM(:,:,IKB  )
 PLM(:,:,KKU  ) = PLM(:,:,IKE)
 !
 IF (LHOOK) CALL DR_HOOK('TURB:DELT',1,ZHOOK_HANDLE)
@@ -1555,7 +1580,7 @@ IF (LHOOK) CALL DR_HOOK('TURB:DEAR',0,ZHOOK_HANDLE)
 ! 1D turbulence scheme
 PLM(:,:,IKTB:IKTE) = PZZ(:,:,IKTB+KKL:IKTE+KKL) - PZZ(:,:,IKTB:IKTE)
 PLM(:,:,KKU) = PLM(:,:,IKE)
-PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA)
+PLM(:,:,D%NKA) = PZZ(:,:,IKB) - PZZ(:,:,D%NKA)
 IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
   IF ( O2D) THEN
     PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) )
@@ -1565,8 +1590,8 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
 END IF
 !   compute a mixing length limited by the stability
 !
-ZETHETA(:,:,:) = ETHETA(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,OOCEAN)
-ZEMOIST(:,:,:) = EMOIST(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,OOCEAN)
+ZETHETA(:,:,:) = ETHETA(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,OOCEAN,OCOMPUTE_SRC)
+ZEMOIST(:,:,:) = EMOIST(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,OOCEAN)
 !
 IF (KRR>0) THEN
   DO JK = IKTB+1,IKTE-1
@@ -1661,7 +1686,7 @@ IF (.NOT. ORMC01) THEN
   END DO
 END IF
 !
-PLM(:,:,KKA) = PLM(:,:,IKB  )
+PLM(:,:,D%NKA) = PLM(:,:,IKB  )
 PLM(:,:,IKE  ) = PLM(:,:,IKE-KKL)
 PLM(:,:,KKU  ) = PLM(:,:,KKU-KKL)
 !
@@ -1767,7 +1792,7 @@ ELSE
 !           ------------------
   CASE ('BL89','RM17','ADAP')
     ZSHEAR=0.
-    CALL BL89(D,CST,CSTURB,KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD,OOCEAN,HPROGRAM)
+    CALL BL89(D,CST,CSTURB,D%NKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD,OOCEAN,HPROGRAM)
 !
 !*         3.2 Delta mixing length
 !           -------------------
diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90
index 70b6262e0000728ec279c12ce67a588287e22893..7d11618e261d7303ef1a58c93852c88e61ce1b10 100644
--- a/src/mesonh/ext/phys_paramn.f90
+++ b/src/mesonh/ext/phys_paramn.f90
@@ -459,7 +459,8 @@ REAL :: ZSWA,TINTSW     ! index for SW interpolation and int time betwenn forcin
 REAL, DIMENSION(:), ALLOCATABLE :: ZIZOCE(:) ! Solar flux penetrating in ocean
 REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetrating solar flux
 !
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !OHARAT turb option from AROME
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !OHARAT turb option from AROME (not allocated in MNH)
+                                                                    ! to be moved as optional args for turb
 !
 TYPE(DIMPHYEX_t) :: YLDIMPHYEX
 LOGICAL :: GCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables 
@@ -476,8 +477,6 @@ IKE = IKU - JPVEXT
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3))
-print*,"IIB,IJB,IIE,IJE = ",IIB,IJB,IIE,IJE
-print*,"YLDIMPHYEX = ",YLDIMPHYEX%NIB,YLDIMPHYEX%NJB,YLDIMPHYEX%NIE,YLDIMPHYEX%NJE
 !
 ZTIME1 = 0.0_MNHTIME
 ZTIME2 = 0.0_MNHTIME
@@ -1495,6 +1494,7 @@ ELSE
 END IF
 !
 GCOMPUTE_SRC=SIZE(XSIGS, 3)/=0
+!
 !
    CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,&
               1, IKU, 1, IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, 1, NMODEL_CLOUD,       &