diff --git a/src/ZSOLVER/p_abs.f90 b/src/ZSOLVER/p_abs.f90
index dac98f5e9e6f37824a980c7cdc21a7d4a2d18b1b..a05854af13d903ebb33de57f17b4fd79bd83325d 100644
--- a/src/ZSOLVER/p_abs.f90
+++ b/src/ZSOLVER/p_abs.f90
@@ -180,7 +180,7 @@ REAL     ::  ZMASSGUESS    ! guess of mass resulting of the pressure function
                                        ! provided by the pressure solveur, to an arbitary constant
 REAL     ::  ZWATERMASST   ! Total mass of water Mw
 !JUAN16
-REAL, SAVE , ALLOCATABLE, DIMENSION(:,:)     :: ZMASS_O_PI_2D,ZMASSGUESS_2D,ZWATERMASST_2D
+REAL, DIMENSION(:,:) , POINTER , CONTIGUOUS :: ZMASS_O_PI_2D,ZMASSGUESS_2D,ZWATERMASST_2D
 !JUAN16
 REAL     ::  ZPI0          ! constant to retrieve the absolute Exner pressure
 INTEGER  ::  JWATER        ! loop index on the different types of water
@@ -214,22 +214,22 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
 !
 GPRVREF0 =  ( SIZE(PRVREF,1) == 0 )
 !
-IF (GFIRST_CALL_P_ABS) THEN
-   GFIRST_CALL_P_ABS = .FALSE. 
-   ALLOCATE(ZMASS_O_PI_2D(IIB:IIE,IJB:IJE))
-   ALLOCATE(ZMASSGUESS_2D(IIB:IIE,IJB:IJE))
-   ALLOCATE(ZWATERMASST_2D(IIB:IIE,IJB:IJE))
-END IF
 !
 ZP00_O_RD = XP00 / XRD
 ZCVD_O_RD = (XCPD - XRD) / XRD
 !
 #ifndef MNH_OPENACC
+ALLOCATE(ZMASS_O_PI_2D(IIB:IIE,IJB:IJE))
+ALLOCATE(ZMASSGUESS_2D(IIB:IIE,IJB:IJE))
+ALLOCATE(ZWATERMASST_2D(IIB:IIE,IJB:IJE))
 ALLOCATE (ZRTOT(IIU,IJU,IKU), ZRHOREF(IIU,IJU,IKU), ZWORK(IIU,IJU,IKU))
 #else
 !Pin positions in the pools of MNH memory
 CALL MNH_MEM_POSITION_PIN()
 
+CALL MNH_MEM_GET(ZMASS_O_PI_2D  , IIB,IIE , IJB,IJE)
+CALL MNH_MEM_GET(ZMASSGUESS_2D  , IIB,IIE , IJB,IJE)
+CALL MNH_MEM_GET(ZWATERMASST_2D , IIB,IIE , IJB,IJE)
 CALL MNH_MEM_GET( ZRTOT,   IIU, IJU, IKU )
 CALL MNH_MEM_GET( ZRHOREF, IIU, IJU, IKU )
 CALL MNH_MEM_GET( ZWORK,   IIU, IJU, IKU )
@@ -310,6 +310,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN
   END IF
 !
   !
+  !$acc update host(ZMASSGUESS_2D,ZMASS_O_PI_2D,ZWATERMASST_2D)
   ZMASSGUESS  = SUM_DD_R2_ll(ZMASSGUESS_2D)
   ZMASS_O_PI  = SUM_DD_R2_ll(ZMASS_O_PI_2D)
   ZWATERMASST = SUM_DD_R2_ll(ZWATERMASST_2D)
@@ -446,6 +447,7 @@ ELSEIF( CEQNSYS == 'LHE' ) THEN
 END IF
 !
 #ifndef MNH_OPENACC
+DEALLOCATE(ZMASS_O_PI_2D,ZMASSGUESS_2D,ZWATERMASST_2D)
 DEALLOCATE (ZRTOT, ZRHOREF, ZWORK)
 #else
 !Release all memory allocated with MNH_MEM_GET calls since last call to MNH_MEM_POSITION_PIN