diff --git a/src/ZSOLVER/dotprod.f90 b/src/ZSOLVER/dotprod.f90
index ec920cc5191fe74c3876981858b20aeb001a996c..fefef61ba38c6e663e8ede27dedcc64dee0be028 100644
--- a/src/ZSOLVER/dotprod.f90
+++ b/src/ZSOLVER/dotprod.f90
@@ -88,6 +88,11 @@ USE MODE_ll
 !JUAN
 USE MODE_REPRO_SUM
 !JUAN
+#ifdef MNH_OPENACC
+USE MODE_MNH_ZWORK,      ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
+#endif
+!
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -118,13 +123,18 @@ INTEGER :: ILBXB,ILBYB,ILBXE,ILBYE          ! loop indices depending on the
 !
 INTEGER  :: IINFO_ll
 !JUAN16
-REAL, ALLOCATABLE, DIMENSION(:,:)     :: ZDOTPROD
+REAL, POINTER, CONTIGUOUS, DIMENSION(:,:)     :: ZDOTPROD
 !JUAN16
 !
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTE LOOP BOUNDS
-!              -------------------
+!-------------------
+if ( mppdb_initialized ) then
+   !Check all in arrays
+   call Mppdb_check( PA,       "Dotprod beg:PA"       )
+   call Mppdb_check( PB,       "Dotprod beg:PB"       )   
+end if
 !
 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
 !
@@ -167,8 +177,13 @@ ENDIF
 !              -----------------------
 !
 !JUAN16
+#ifndef MNH_OPENACC
 ALLOCATE(ZDOTPROD(ILBXB:ILBXE,ILBYB:ILBYE))
-!$acc kernels
+#else
+CALL MNH_MEM_POSITION_PIN()
+CALL MNH_MEM_GET(ZDOTPROD, ILBXB,ILBXE ,ILBYB,ILBYE )
+#endif
+!$acc kernels present(ZDOTPROD)
 ZDOTPROD    = 0.
 !$acc loop seq
 DO JK = IKB-1,IKE+1
@@ -180,8 +195,14 @@ DO JK = IKB-1,IKE+1
    END DO
 END DO
 !$acc end kernels
+!$acc update host(ZDOTPROD)
 PDOTPROD = SUM_DD_R2_ll(ZDOTPROD)
 !JUAN16
+#ifndef MNH_OPENACC
+DEALLOCATE(ZDOTPROD)
+#else
+CALL MNH_MEM_RELEASE()
+#endif
 !
 !-------------------------------------------------------------------------------
 !