diff --git a/src/ZSOLVER/advecuvw_rk.f90 b/src/ZSOLVER/advecuvw_rk.f90 index b617fffa6d22293b5eebb2686a4721a92e8fb081..ffdce5df247eb8b7cad744687ac5c924bcba083c 100644 --- a/src/ZSOLVER/advecuvw_rk.f90 +++ b/src/ZSOLVER/advecuvw_rk.f90 @@ -205,7 +205,8 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZBUTS! Butcher array coefficients !JUAN TYPE(LIST_ll), POINTER :: TZFIELDMT_ll ! list of fields to exchange TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll ! momentum variables -TYPE(HALO2LIST_ll), POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT +TYPE(HALO2LIST_ll), SAVE , POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT +LOGICAL , SAVE :: GFIRST_CALL_ADVECUVW_RK = .TRUE. INTEGER :: INBVAR INTEGER :: IIU, IJU, IKU ! array sizes !JUAN @@ -459,10 +460,16 @@ ZRWS(:, :, :, : ) = 0. !!$ CALL GET_HALO_D(ZVT,HNAME='ZVT') !!$ CALL GET_HALO_D(ZWT,HNAME='ZWT') !!$ CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll) +IF (GFIRST_CALL_ADVECUVW_RK) THEN + GFIRST_CALL_ADVECUVW_RK = .FALSE. + NULLIFY(TZHALO2_UT,TZHALO2_VT,TZHALO2_WT) + CALL INIT_HALO2_ll(TZHALO2_UT,1,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TZHALO2_VT,1,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TZHALO2_WT,1,IIU,IJU,IKU) +END IF CALL GET_HALO2_D(ZUT,TZHALO2_UT,HNAME='ZUT') CALL GET_HALO2_D(ZVT,TZHALO2_VT,HNAME='ZVT') - CALL GET_HALO2_D(ZWT,TZHALO2_WT,HNAME='ZWT') - + CALL GET_HALO2_D(ZWT,TZHALO2_WT,HNAME='ZWT') ! acc update device(ZUT,ZVT,ZWT) #endif @@ -554,9 +561,9 @@ CALL MNH_REL_ZT3D(IZMEAN,IZWORK) ! CALL CLEANLIST_ll(TZFIELDMT_ll) CALL DEL_HALO2_ll(TZHALO2MT_ll) -CALL DEL_HALO2_ll(TZHALO2_UT) -CALL DEL_HALO2_ll(TZHALO2_VT) -CALL DEL_HALO2_ll(TZHALO2_WT) +!!$CALL DEL_HALO2_ll(TZHALO2_UT) +!!$CALL DEL_HALO2_ll(TZHALO2_VT) +!!$CALL DEL_HALO2_ll(TZHALO2_WT) !$acc update self(PRUS_ADV,PRVS_ADV,PRWS_ADV) !------------------------------------------------------------------------------- ! diff --git a/src/ZSOLVER/contrav.f90 b/src/ZSOLVER/contrav.f90 index ebef79590bb7b5f6faa48cb6a8a680d0525a4f3e..b909f2298ec78c1c49736162c0f57533620983b3 100644 --- a/src/ZSOLVER/contrav.f90 +++ b/src/ZSOLVER/contrav.f90 @@ -567,7 +567,8 @@ LOGICAL :: GDATA_ON_DEVICE real :: ZTMP1, ZTMP2 ! Intermediate work variables REAL, DIMENSION(:,:), POINTER , CONTIGUOUS :: ZU_EAST, ZV_NORTH, ZDZX_EAST, ZDZY_NORTH TYPE(LIST_ll), POINTER :: TZFIELD_U, TZFIELD_V, TZFIELD_DZX, TZFIELD_DZY -TYPE(HALO2LIST_ll), POINTER :: TZHALO2_U, TZHALO2_V, TZHALO2_DZX, TZHALO2_DZY +TYPE(HALO2LIST_ll), SAVE, POINTER :: TZHALO2_U, TZHALO2_V, TZHALO2_DZX, TZHALO2_DZY +LOGICAL , SAVE :: GFIRST_CALL_CONTRAV_DEVICE = .TRUE. ! LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH ! @@ -634,14 +635,17 @@ IF (KADV_ORDER == 4 ) THEN !!$ NULLIFY(TZFIELD_DZY) !!$ CALL ADD3DFIELD_ll( TZFIELD_DZX, PDZX, 'CONTRAV::PDZX' ) !!$ CALL ADD3DFIELD_ll( TZFIELD_DZY, PDZY, 'CONTRAV::PDZY' ) -!!$ NULLIFY(TZHALO2_U) -!!$ NULLIFY(TZHALO2_V) -!!$ NULLIFY(TZHALO2_DZX) -!!$ NULLIFY(TZHALO2_DZY) -!!$ CALL INIT_HALO2_ll(TZHALO2_U,1,IIU,IJU,IKU) -!!$ CALL INIT_HALO2_ll(TZHALO2_V,1,IIU,IJU,IKU) -!!$ CALL INIT_HALO2_ll(TZHALO2_DZX,1,IIU,IJU,IKU) -!!$ CALL INIT_HALO2_ll(TZHALO2_DZY,1,IIU,IJU,IKU) + IF ( GFIRST_CALL_CONTRAV_DEVICE ) THEN + GFIRST_CALL_CONTRAV_DEVICE = .FALSE. + NULLIFY(TZHALO2_U) + NULLIFY(TZHALO2_V) + NULLIFY(TZHALO2_DZX) + NULLIFY(TZHALO2_DZY) + CALL INIT_HALO2_ll(TZHALO2_U,1,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TZHALO2_V,1,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TZHALO2_DZX,1,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TZHALO2_DZY,1,IIU,IJU,IKU) + END IF !!$ CALL UPDATE_HALO2_ll(TZFIELD_U, TZHALO2_U, IINFO_ll) !!$ CALL UPDATE_HALO2_ll(TZFIELD_V, TZHALO2_V, IINFO_ll) !!$ CALL UPDATE_HALO2_ll(TZFIELD_DZX, TZHALO2_DZX, IINFO_ll) @@ -874,10 +878,10 @@ IF (KADV_ORDER == 4 ) THEN !!$ !!$ IF (NHALO==1) THEN !!$ CALL CLEANLIST_ll(TZFIELD_DZX) !!$ CALL CLEANLIST_ll(TZFIELD_DZY) - CALL DEL_HALO2_ll(TZHALO2_U) - CALL DEL_HALO2_ll(TZHALO2_V) - CALL DEL_HALO2_ll(TZHALO2_DZX) - CALL DEL_HALO2_ll(TZHALO2_DZY) +!!$ CALL DEL_HALO2_ll(TZHALO2_U) +!!$ CALL DEL_HALO2_ll(TZHALO2_V) +!!$ CALL DEL_HALO2_ll(TZHALO2_DZX) +!!$ CALL DEL_HALO2_ll(TZHALO2_DZY) !!$ !!$ END IF END IF diff --git a/src/ZSOLVER/get_halo.f90 b/src/ZSOLVER/get_halo.f90 index acd7833cfc98ed5c7d0ec847b3f7cba64eba097f..201e1170b0e1f3440861d58adec87ee0bb2770fb 100644 --- a/src/ZSOLVER/get_halo.f90 +++ b/src/ZSOLVER/get_halo.f90 @@ -1513,7 +1513,7 @@ end if CALL GET_HALO_DD(PSRC,HNAME=yname) !!$NULLIFY( TZ_PSRC_ll,TP_PSRC_HALO2_ll) -CALL INIT_HALO2_ll(TP_PSRC_HALO2_ll,1,IIU,IJU,IKU) +!!$CALL INIT_HALO2_ll(TP_PSRC_HALO2_ll,1,IIU,IJU,IKU) ! CALL GET_HALO2_DD(PSRC,TP_PSRC_HALO2_ll,'GET_HALO2_DD::'//trim( yname ) ) ! diff --git a/src/ZSOLVER/ppm.f90 b/src/ZSOLVER/ppm.f90 index 2e899596cb4aa4108d7148a3c9582c3da2f1dc56..bfeac23c637953aeb011208d622d783c8c34ff34 100644 --- a/src/ZSOLVER/ppm.f90 +++ b/src/ZSOLVER/ppm.f90 @@ -2557,8 +2557,8 @@ INTEGER :: I,J,K REAL, DIMENSION(:,:) :: ZPSRC_HALO2_WEST #endif -TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC - +TYPE(HALO2LIST_ll), SAVE , POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC +LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_X = .TRUE. !------------------------------------------------------------------------------- !$acc data present( PSRC, PCR, PRHO, PR , & @@ -2593,6 +2593,11 @@ GEAST = LEAST_ll() !!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') !!$ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:) !!$!$acc update device (ZPSRC_HALO2_WEST) +IF (GFIRST_CALL_PPM_S0_X) THEN + GFIRST_CALL_PPM_S0_X = .FALSE. + NULLIFY(TZ_PSRC_HALO2_ll) + CALL INIT_HALO2_ll(TZ_PSRC_HALO2_ll,1,IIU,IJU,IKU) +END IF CALL GET_HALO2_D(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') !$acc kernels ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:) @@ -2834,7 +2839,7 @@ CALL GET_HALO(PR, HNAME='PR') CALL GET_HALO_D(PR, HDIR="S0_X", HNAME='PR') #endif !------------------------------------------------------------------------------- -CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +!!$CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) IF (MPPDB_INITIALIZED) THEN !Check all INOUT arrays @@ -2993,7 +2998,9 @@ REAL, DIMENSION(:,:,:) :: ZFPOS, ZFNEG ! variable at cell edges REAL, DIMENSION(:,:,:) :: ZPHAT ! -TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC +TYPE(HALO2LIST_ll), SAVE ,POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC +LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_Y = .TRUE. + TYPE(HALO2LIST_ll), POINTER :: TZ_PHAT_HALO2_ll ! halo2 for ZPHAT ! REAL, DIMENSION(:,:,:) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF @@ -3045,6 +3052,11 @@ ELSE !not L2D !!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') !!$ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:) !!$!$acc update device (ZPSRC_HALO2_SOUTH) +IF (GFIRST_CALL_PPM_S0_Y) THEN + GFIRST_CALL_PPM_S0_Y = .FALSE. + NULLIFY(TZ_PSRC_HALO2_ll) + CALL INIT_HALO2_ll(TZ_PSRC_HALO2_ll,1,IIU,IJU,IKU) +END IF CALL GET_HALO2_D(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') ! ! Initialize with relalistic value all work array @@ -3281,7 +3293,7 @@ CALL GET_HALO(PR, HNAME='PR') CALL GET_HALO_D(PR, HDIR="S0_Y", HNAME='PR') #endif ! -CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +!!$CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) ! IF (MPPDB_INITIALIZED) THEN !Check all INOUT arrays