diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90
index 1061075fcffa6723729195bd24040f4a4580fdb9..8fa13802e433176044e3fa1135a53f786c2986c7 100644
--- a/src/ZSOLVER/turb.f90
+++ b/src/ZSOLVER/turb.f90
@@ -2087,8 +2087,6 @@ END SUBROUTINE CLOUD_MODIF_LM
 !
 END SUBROUTINE TURB
 
-
-
 !###################
 SUBROUTINE DELT(KKA,KKU,KKL,KKB, KKE,KKTB, KKTE,ORMC01,HTURBDIM,PDXX, PDYY,PZZ,PDIRCOSZW,PLM, ODZ)
 !###################
@@ -2118,6 +2116,7 @@ use mode_mppdb
 USE MODI_SHUMAN
 #else
 USE MODI_SHUMAN_DEVICE
+USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
 #endif
 
 implicit none
@@ -2155,9 +2154,12 @@ REAL                :: ZD           ! distance to the surface
 real, dimension(:,:,:), pointer , contiguous :: ztmp1_device, ztmp2_device
 #endif
 !
+integer :: jiu, jju, jku
 !-------------------------------------------------------------------------------
 
-!$acc data present( PDXX, PDYY, PZZ, PDIRCOSZW, PLM )
+jiu =  size( pdxx, 1 )
+jju =  size( pdxx, 2 )
+jku =  size( pdxx, 3 )
 
 if ( mppdb_initialized ) then
   !Check all in arrays
@@ -2168,13 +2170,18 @@ if ( mppdb_initialized ) then
 end if
 
 #ifdef MNH_OPENACC
-allocate( ztmp1_device( size( pdxx, 1 ), size( pdxx, 2 ), size( pdxx, 3 ) ) )
-allocate( ztmp2_device( size( pdxx, 1 ), size( pdxx, 2 ), size( pdxx, 3 ) ) )
+!!$allocate( ztmp1_device( JIU,JJU,JKU ) )
+!!$allocate( ztmp2_device( JIU,JJU,JKU ) )
+!Pin positions in the pools of MNH memory
+CALL MNH_MEM_POSITION_PIN()
+CALL MNH_MEM_GET( ztmp1_device, JIU,JJU,JKU )
+CALL MNH_MEM_GET( ztmp2_device, JIU,JJU,JKU )
 #endif
 
 GOCEAN = LOCEAN
 
-!$acc data create( ztmp1_device, ztmp2_device )
+!$acc data present( PDXX, PDYY, PZZ, PDIRCOSZW, PLM ) &
+!$acc      present( ztmp1_device, ztmp2_device )
 
 IF (ODZ) THEN
 !$acc kernels
@@ -2192,7 +2199,7 @@ IF (ODZ) THEN
 #else
       CALL MXF_DEVICE( PDXX, ZTMP1_DEVICE )
 !$acc kernels
-      PLM(:,:,:) = SQRT( PLM(:,:,:) * ZTMP1_DEVICE )
+      PLM(:,:,:) = SQRT( PLM(:,:,:) * ZTMP1_DEVICE(:,:,:) )
 !$acc end kernels
 #endif
     ELSE
@@ -2207,9 +2214,9 @@ IF (ODZ) THEN
       CALL MYF_DEVICE( PDYY, ZTMP2_DEVICE )
 !$acc kernels
 #ifndef MNH_BITREP
-      PLM(:,:,:) = ( PLM(:,:,:) * ZTMP1_DEVICE * ZTMP2_DEVICE ) ** (1./3.)
+      PLM(:,:,:) = ( PLM(:,:,:) * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) ) ** (1./3.)
 #else
-      PLM(:,:,:) = BR_POW( PLM(:,:,:) * ZTMP1_DEVICE * ZTMP2_DEVICE, 1./3. )
+      PLM(:,:,:) = BR_POW( PLM(:,:,:) * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:), 1./3. )
 #endif
 !$acc end kernels
 #endif
@@ -2218,7 +2225,7 @@ IF (ODZ) THEN
 ELSE
   ! Dz not taken into account in computation to assure invariability with vertical grid mesh
 !$acc kernels
-  PLM=1.E10
+  PLM(:,:,:)=1.E10
 !$acc end kernels
   IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
     IF ( L2D) THEN
@@ -2241,7 +2248,7 @@ ELSE
 #ifndef MNH_BITREP
       PLM(:,:,:) = ( ZTMP1_DEVICE * ZTMP2_DEVICE ) ** (1./2.)
 #else
-      PLM(:,:,:) = BR_POW( ZTMP1_DEVICE * ZTMP2_DEVICE,  1. / 2. )
+      PLM(:,:,:) = BR_POW( ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:),  1. / 2. )
 #endif
 !$acc end kernels
 #endif
@@ -2253,7 +2260,7 @@ END IF
 !  mixing length limited by the distance normal to the surface
 !  (with the same factor as for BL89)
 !
-!$acc kernels
+
 IF (.NOT. ORMC01) THEN
 #ifndef MNH_BITREP
   ZALPHA = 0.5**(-1.5)
@@ -2261,8 +2268,9 @@ IF (.NOT. ORMC01) THEN
   ZALPHA = BR_POW( 0.5, -1.5 )
 #endif
   !
-  DO JJ=1,SIZE(PLM,2)
-    DO JI=1,SIZE(PLM,1)
+!$acc kernels  
+  DO JJ=1,JJU
+    DO JI=1,JIU
       IF (GOCEAN) THEN
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
@@ -2283,21 +2291,27 @@ IF (.NOT. ORMC01) THEN
         END DO
       ENDIF   
     END DO
-  END DO
+ END DO 
+!$acc end kernels
 END IF
 !
-PLM(:,:,KKA) = PLM(:,:,KKB  )
-PLM(:,:,KKU  ) = PLM(:,:,KKE)
+!$acc kernels
+DO CONCURRENT(JI=1:JIU , JJ=1:JJU )
+   PLM(JI,JJ,KKA) = PLM(JI,JJ,KKB  )
+   PLM(JI,JJ,KKU  ) = PLM(JI,JJ,KKE)
+END DO
 !$acc end kernels
 
+!$acc end data
+
 if ( mppdb_initialized ) then
   !Check all out arrays
   call Mppdb_check( plm, "Delt end:plm" )
 end if
 
-!$acc end data
-
-!$acc end data
+#ifdef MNH_OPENACC
+CALL MNH_MEM_RELEASE()
+#endif
 
 END SUBROUTINE DELT