From 6e0c64dc197c748b267c9b95c7d3bec23f9d292a Mon Sep 17 00:00:00 2001 From: Juan Escobar <juan.escobar@aero.obs-mip.fr> Date: Wed, 15 Sep 2021 18:35:20 +0200 Subject: [PATCH] Juan 15/09/2021: for GET_HALO2_D , allocate HALO2 list at first call and put it SAVE --- src/ZSOLVER/advecuvw_rk.f90 | 19 +++++++++++++------ src/ZSOLVER/contrav.f90 | 30 +++++++++++++++++------------- src/ZSOLVER/get_halo.f90 | 2 +- src/ZSOLVER/ppm.f90 | 22 +++++++++++++++++----- 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/ZSOLVER/advecuvw_rk.f90 b/src/ZSOLVER/advecuvw_rk.f90 index b617fffa6..ffdce5df2 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 ebef79590..b909f2298 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 acd7833cf..201e1170b 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 2e899596c..bfeac23c6 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 -- GitLab