diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index a7658c4880cc7b8c099d9381745ad75de9e7b266..e8c655bab463c4522edc4495cf1ec2c5178ca01f 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -805,8 +805,10 @@ IF (KRRL >=1) THEN
 !$acc data present( zamoist_ice, zatheta_ice )
 
     CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, &
+                                 PPABST, PRT,                              &
                                  ZLVOCPEXNM,ZAMOIST,ZATHETA)
     CALL COMPUTE_FUNCTION_THERMO(XALPI,XBETAI,XGAMI,XLSTT,XCI,ZT,ZEXN,ZCP, &
+                                 PPABST, PRT,                              &
                                  ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE)
 !
 !$acc kernels present_cr( zamoist, zatheta, zlocpexnm, zlvocpexnm, zlsocpexnm, zamoist_ice, zatheta_ice )    
@@ -835,6 +837,7 @@ IF (KRRL >=1) THEN
 #endif
   ELSE
     CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, &
+                                 PPABST, PRT,                              &
                                  ZLOCPEXNM,ZAMOIST,ZATHETA)
   END IF
 !
@@ -997,7 +1000,10 @@ IF (KMODEL_CL==KMI .AND. HTURBLEN_CL/='NONE') THEN
 #ifdef MNH_OPENACC
     call Print_msg( NVERB_FATAL, 'GEN', 'TURB', 'OpenACC: CLOUD_MODIF_LM not yet implemented' )
 #endif
-  CALL CLOUD_MODIF_LM
+  CALL CLOUD_MODIF_LM( TPFILE, OTURB_DIAG,                                                                      &
+                       KKA, KKU, KKL, KRR, KRRI, IKB, IKE, IKTB, IKTE, ORMC01, HTURBDIM, HTURBLEN, HTURBLEN_CL, &
+                       PCEI, PCEI_MIN, PCEI_MAX, PCOEF_AMPL_SAT, PDXX, PDYY, PDZZ, PZZ, PTHVREF, ZTHLM, ZRM,    &
+                       PTKET, PDIRCOSZW, PTHLT, PSRCT, PRT, ZLOCPEXNM, ZATHETA, ZAMOIST, PLEM                   )
 END IF
 
 !
@@ -1068,7 +1074,7 @@ ENDIF
                      PDXX,PDYY,PDZZ,                    &
                      ZUSLOPE,ZVSLOPE                    )
 !
-    CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
+    CALL UPDATE_ROTATE_WIND( HLBCX, HLBCY, ZUSLOPE, ZVSLOPE )
   ELSE
 !$acc kernels present_cr(ZUSLOPE,ZVSLOPE)
     ZUSLOPE=PUT(:,:,KKA)
@@ -1686,14 +1692,13 @@ CALL MNH_MEM_RELEASE( 'TURB 1' )
 
 !$acc end data
 
+END SUBROUTINE TURB
 !----------------------------------------------------------------------------
-!
-CONTAINS
-!
-!
-!     ##############################################
-      SUBROUTINE UPDATE_ROTATE_WIND(PUSLOPE,PVSLOPE)
-!     ##############################################
+
+
+!     ###############################################################
+      SUBROUTINE UPDATE_ROTATE_WIND( HLBCX, HLBCY, PUSLOPE, PVSLOPE )
+!     ###############################################################
 !!
 !!****  *UPDATE_ROTATE_WIND* routine to set rotate wind values at the border
 !
@@ -1711,10 +1716,12 @@ CONTAINS
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_CONF
 
+USE MODE_ll
+USE MODE_MPPDB
+
 #ifdef MNH_OPENACC
 USE MODI_GET_HALO
 #endif
@@ -1723,12 +1730,13 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PUSLOPE,PVSLOPE
+CHARACTER(LEN=*), DIMENSION(:),   INTENT(IN)    :: HLBCX, HLBCY  ! X- and Y-direc LBC
+REAL,             DIMENSION(:,:), INTENT(INOUT) :: PUSLOPE,PVSLOPE
 ! tangential surface fluxes in the axes following the orography
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER             :: IIB,IIE,IJB,IJE ! index values for the physical subdomain
+INTEGER                :: IIB,IIE,IJB,IJE ! index values for the physical subdomain
 TYPE(LIST_ll), POINTER :: TZFIELDS_ll  ! list of fields to exchange
 INTEGER                :: IINFO_ll     ! return code of parallel routine
 logical                :: gwest, geast, gnorth, gsouth
@@ -1799,9 +1807,11 @@ end if
 !$acc end data
 
 END SUBROUTINE UPDATE_ROTATE_WIND
-!
+
+
 !     ########################################################################
       SUBROUTINE COMPUTE_FUNCTION_THERMO(PALP,PBETA,PGAM,PLTT,PC,PT,PEXN,PCP,&
+                                         PPABST, PRT,                        &
                                          PLOCPEXN,PAMOIST,PATHETA            )
 !     ########################################################################
 !!
@@ -1821,19 +1831,25 @@ END SUBROUTINE UPDATE_ROTATE_WIND
 !*       0.    DECLARATIONS
 !              ------------
 USE MODD_CST
+
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
-!*       0.1   Declarations of dummy arguments 
+!*       0.1   Declarations of dummy arguments
 !
 REAL,                   INTENT(IN)    :: PALP,PBETA,PGAM,PLTT,PC
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PT,PEXN,PCP
+REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PPABST      ! Pressure at time t
+REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PRT         ! water variables
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLOCPEXN
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PAMOIST,PATHETA
 !
 !*       0.2   Declarations of local variables
 !
+INTEGER :: JI, JJ, JK
+INTEGER  :: JIU,JJU,JKU
 REAL                :: ZEPS         ! XMV / XMD
 real, dimension(:,:,:), pointer , contiguous :: zrvsat
 real, dimension(:,:,:), pointer , contiguous :: zdrvsatdt
@@ -1850,15 +1866,19 @@ end if
 
 !$acc data present( PT, PEXN, PCP, PLOCPEXN, PAMOIST, PATHETA, PPABST, PRT )
 
-#ifndef MNH_OPENACC  
-  allocate( zrvsat   ( size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) ) )
-  allocate( zdrvsatdt( size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) ) )
+JIU = SIZE( PEXN, 1 )
+JJU = SIZE( PEXN, 2 )
+JKU = SIZE( PEXN, 3 )
+
+#ifndef MNH_OPENACC
+  allocate( zrvsat   (jiu, jju, jku) )
+  allocate( zdrvsatdt(jiu, jju, jku) )
 #else
 !Pin positions in the pools of MNH memory
 CALL MNH_MEM_POSITION_PIN( 'COMPUTE_FUNCTION_THERMO' )
 
-CALL MNH_MEM_GET( zrvsat   , size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
-CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
+CALL MNH_MEM_GET( zrvsat   , jiu, jju, jku )
+CALL MNH_MEM_GET( zdrvsatdt, jiu, jju, jku )
 #endif
 
 !$acc data present_cr( zrvsat, zdrvsatdt )
@@ -1957,11 +1977,14 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
 !$acc end data
 
 END SUBROUTINE COMPUTE_FUNCTION_THERMO
-!
-!
-!     #########################
-      SUBROUTINE CLOUD_MODIF_LM
-!     #########################
+
+
+!     #####################################################################################################################
+      SUBROUTINE CLOUD_MODIF_LM( TPFILE, OTURB_DIAG,                                                                      &
+                                 KKA, KKU, KKL, KRR, KRRI, KKB, KKE, KKTB, KKTE, ORMC01, HTURBDIM, HTURBLEN, HTURBLEN_CL, &
+                                 PCEI, PCEI_MIN, PCEI_MAX, PCOEF_AMPL_SAT, PDXX, PDYY, PDZZ, PZZ, PTHVREF, PTHLM, PRM,    &
+                                 PTKET, PDIRCOSZW, PTHLT, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLEM                   )
+!     #####################################################################################################################
 !!
 !!*****CLOUD_MODIF_LM routine to:
 !!       1/ change the mixing length in the clouds
@@ -2008,31 +2031,79 @@ END SUBROUTINE COMPUTE_FUNCTION_THERMO
 !*       0.    DECLARATIONS
 !              ------------
 !
+use modd_field,          only: tfielddata, TYPEREAL
+USE MODD_IO,             ONLY: TFILEDATA
+
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
+
+USE MODI_BL89
+
 IMPLICIT NONE
 !
+TYPE(TFILEDATA),          INTENT(INOUT) :: TPFILE        ! Output file
+LOGICAL,                  INTENT(IN)    :: OTURB_DIAG    ! switch to write some diagnostic fields in the syncronous FM-file
+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)    :: KRRI          ! number of ice water var.
+INTEGER,                  INTENT(IN)    :: KKB, KKE      ! index value for the bBeginning and the End of the physical domain for the mass points
+INTEGER,                  INTENT(IN)    :: KKTB, KKTE    ! start, end of k loops in physical domain
+LOGICAL,                  INTENT(IN)    :: ORMC01        ! switch for RMC01 lengths in SBL
+CHARACTER(len=4),         INTENT(IN)    :: HTURBDIM      ! dimensionality of the turbulence scheme
+CHARACTER(len=4),         INTENT(IN)    :: HTURBLEN      ! kind of mixing length
+CHARACTER(len=4),         INTENT(IN)    :: HTURBLEN_CL   ! kind of cloud mixing length
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCEI          ! Cloud Entrainment instability index to emphasize localy turbulent fluxes
+REAL,                     INTENT(IN)    :: PCEI_MIN      ! minimum threshold for the instability index CEI
+REAL,                     INTENT(IN)    :: PCEI_MAX      ! maximum threshold for the instability index CEI
+REAL,                     INTENT(IN)    :: PCOEF_AMPL_SAT ! saturation of the amplification coefficient
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX, PDYY, PDZZ ! metric coefficients
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ           !  physical distance between 2 succesive grid points along the K direction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHVREF       ! Virtual Potential Temperature of the reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHLM         ! initial potential temp.
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRM           ! initial mixing ratio
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTKET         ! TKE
+REAL, DIMENSION(:,:),     INTENT(IN)    :: PDIRCOSZW     ! Director Cosinus along z direction at surface w-point
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHLT         ! conservative pot. temp.
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSRCT         ! Second-order flux s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT           ! water var.  where
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PLOCPEXNM     ! Lv/Cp/EXNREF at t-1
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PATHETA, PAMOIST  ! coefficients for s = f (Thetal,Rnp)
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PLEM          ! Mixing length
+
+INTEGER :: JI, JJ, JK
+INTEGER :: JIU,JJU,JKU
 REAL :: ZPENTE            ! Slope of the amplification straight line
 REAL :: ZCOEF_AMPL_CEI_NUL! Ordonnate at the origin of the
                           ! amplification straight line
 real, dimension(:,:,:), pointer , contiguous :: zcoef_ampl
                           ! Amplification coefficient of the mixing length
-                          ! when the instability criterium is verified 
+                          ! when the instability criterium is verified
 real, dimension(:,:,:), pointer , contiguous :: zlm_cloud
                           ! Turbulent mixing length in the clouds
+REAL, DIMENSION(:,:,:), pointer , contiguous :: ZSHEAR
+TYPE(TFIELDDATA) :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 #ifdef MNH_OPENACC
 call Print_msg( NVERB_FATAL, 'GEN', 'TURB', 'OpenACC: CLOUD_MODIF_LM not yet implemented' )
 #endif
 
+JIU = SIZE( PLEM, 1 )
+JJU = SIZE( PLEM, 2 )
+JKU = SIZE( PLEM, 3 )
+
 #ifndef MNH_OPENACC
-allocate( zcoef_ampl(size( put, 1 ), size( put, 2 ), size( put, 3) ) )
-allocate( zlm_cloud (size( put, 1 ), size( put, 2 ), size( put, 3) ) )
+allocate( zcoef_ampl( jiu, jju, jku ) )
+allocate( zlm_cloud ( jiu, jju, jku ) )
+allocate( zshear    ( jiu, jju, jku ) )
 #else
 !Pin positions in the pools of MNH memory
 CALL MNH_MEM_POSITION_PIN()
 
-CALL MNH_MEM_GET( zcoef_ampl, size( put, 1 ), size( put, 2 ), size( put, 3) )
-CALL MNH_MEM_GET( zlm_cloud , size( put, 1 ), size( put, 2 ), size( put, 3) )
+CALL MNH_MEM_GET( zcoef_ampl, jiu, jju, jku )
+CALL MNH_MEM_GET( zlm_cloud , jiu, jju, jku )
+CALL MNH_MEM_GET( zshear    , jiu, jju, jku )
 #endif
 !
 !*       1.    INITIALISATION
@@ -2074,19 +2145,19 @@ ELSE
     ZSHEAR(:, :, : ) = 0.
 !$mnh_end_expand_array()
 !$acc end kernels
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD)
+    CALL BL89( KKA, KKU, KKL, PZZ, PDZZ, PTHVREF, PTHLM, KRR, PRM, PTKET, ZSHEAR, ZLM_CLOUD )
 !
 !*         3.2 Delta mixing length
 !           -------------------
   CASE ('DELT')
-    CALL DELT(KKA,KKU,KKL,IKB, IKE,IKTB, IKTE,ORMC01,HTURBDIM,PDXX, PDYY,PZZ,PDIRCOSZW,ZLM_CLOUD,ODZ=.TRUE.)
+    CALL DELT( KKA, KKU, KKL, KKB, KKE, KKTB, KKTE, ORMC01, HTURBDIM, PDXX, PDYY, PZZ, PDIRCOSZW, ZLM_CLOUD, ODZ=.TRUE. )
 !
 !*         3.3 Deardorff mixing length
 !           -----------------------
   CASE ('DEAR')
-    CALL DEAR(KKA,KKU,KKL,KRR, KRRI, IKB, IKE,IKTB, IKTE, &
-                ORMC01,HTURBDIM,PDXX, PDYY, PDZZ,PZZ,PDIRCOSZW,PTHLT,PTHVREF,PTKET,PSRCT,PRT,&
-                ZLOCPEXNM,ZATHETA, ZAMOIST, ZLM_CLOUD)
+    CALL DEAR( KKA, KKU, KKL, KRR, KRRI, KKB, KKE, KKTB, KKTE,                                        &
+               ORMC01, HTURBDIM, PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, &
+               PLOCPEXNM, PATHETA, PAMOIST, ZLM_CLOUD                                                 )
 !
   END SELECT
 ENDIF
@@ -2155,9 +2226,6 @@ CALL MNH_MEM_RELEASE()
 #endif
 
 END SUBROUTINE CLOUD_MODIF_LM
-!
-END SUBROUTINE TURB
-
 
 
 !###################