diff --git a/src/ZSOLVER/pressurez.f90 b/src/ZSOLVER/pressurez.f90
index 2d1146b364cdca7f3affc3641060269af07f5b2e..b7221fa4acb1ab350c0658a531032e553d8f22b5 100644
--- a/src/ZSOLVER/pressurez.f90
+++ b/src/ZSOLVER/pressurez.f90
@@ -394,10 +394,10 @@ INTEGER         :: IIU,IJU,IKU     ! array sizes in I,J,K
 INTEGER         :: JK              ! loop index on the vertical levels
 INTEGER         :: JI,JJ
 !
-REAL, DIMENSION(SIZE(PDXX,1),SIZE(PDXX,3)) :: ZPABS_S ! local pressure on southern side
-REAL, DIMENSION(SIZE(PDXX,1),SIZE(PDXX,3)) :: ZPABS_N ! local pressure on northern side
-REAL, DIMENSION(SIZE(PDYY,2),SIZE(PDXX,3)) :: ZPABS_E ! local pressure on eastern side
-REAL, DIMENSION(SIZE(PDYY,2),SIZE(PDXX,3)) :: ZPABS_W ! local pressure on western side
+REAL, SAVE , ALLOCATABLE , DIMENSION(:,:) :: ZPABS_S ! local pressure on southern side
+REAL, SAVE , ALLOCATABLE , DIMENSION(:,:) :: ZPABS_N ! local pressure on northern side
+REAL, SAVE , ALLOCATABLE , DIMENSION(:,:) :: ZPABS_E ! local pressure on eastern side
+REAL, SAVE , ALLOCATABLE , DIMENSION(:,:) :: ZPABS_W ! local pressure on western side
 INTEGER :: IINFO_ll,KINFO
 TYPE(LIST_ll), POINTER :: TZFIELDS_ll, TZFIELDS2_ll  ! list of fields to exchange
 !
@@ -413,6 +413,8 @@ INTEGER :: IZMYM_PRHODJ
 LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH
 LOGICAL :: GSOUTH2D,GNORTH2D,GPRVREF0
 !
+LOGICAL, SAVE :: GFIRST_CALL_PRESSUREZ = .TRUE.
+!
 !------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
@@ -454,6 +456,10 @@ IZMZM_PRHODJ = MNH_ALLOCATE_ZT3D( ZMZM_PRHODJ,IIU,IJU,IKU  )
 IZGZ_M_W     = MNH_ALLOCATE_ZT3D( ZGZ_M_W,IIU,IJU,IKU  )
 IZMYM_PRHODJ = MNH_ALLOCATE_ZT3D( ZMYM_PRHODJ,IIU,IJU,IKU  )
 !
+IF (GFIRST_CALL_PRESSUREZ) THEN
+   GFIRST_CALL_PRESSUREZ = .FALSE.
+   ALLOCATE ( ZPABS_S(IIU,IKU),ZPABS_N(IIU,IKU),ZPABS_E(IJU,IKU),ZPABS_W(IJU,IKU))
+END IF
 !$acc kernels
 ZPABS_S(:,:) = 0.
 ZPABS_N(:,:) = 0.