diff --git a/AMSS_NCKU_source/bssn_class.C b/AMSS_NCKU_source/bssn_class.C index 432747e..1b951d1 100644 --- a/AMSS_NCKU_source/bssn_class.C +++ b/AMSS_NCKU_source/bssn_class.C @@ -5745,11 +5745,17 @@ void bssn_class::SHStep() //================================================================================================ -// 0: do not use mixing two levels data for OutBD; 1: do use - -#define MIXOUTB 0 -void bssn_class::RestrictProlong(int lev, int YN, bool BB, - MyList *SL, MyList *OL, MyList *corL) +// 0: do not use mixing two levels data for OutBD; 1: do use + +#define MIXOUTB 0 +// In the cached Restrict->OutBdLow2Hi path, coarse Sync is usually redundant: +// OutBdLow2Hi_cached reads coarse owned cells (build_owned_gsl type-4), not coarse ghost/buffer cells. +// Keep a switch to restore the old behavior if needed for debugging. +#ifndef RP_SYNC_COARSE_AFTER_RESTRICT +#define RP_SYNC_COARSE_AFTER_RESTRICT 0 +#endif +void bssn_class::RestrictProlong(int lev, int YN, bool BB, + MyList *SL, MyList *OL, MyList *corL) // we assume // StateList 1 ----------- // @@ -5811,7 +5817,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB, // misc::tillherecheck(GH->Commlev[GH->mylev],GH->start_rank[GH->mylev],a_stream.str()); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (PSTR == 1 || PSTR == 2) // a_stream.clear(); @@ -5862,7 +5870,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB, // misc::tillherecheck(GH->Commlev[GH->mylev],GH->start_rank[GH->mylev],a_stream.str()); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (PSTR == 1 || PSTR == 2) // a_stream.clear(); @@ -5948,7 +5958,9 @@ void bssn_class::RestrictProlong_aux(int lev, int YN, bool BB, Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SL, SynchList_pre, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -5970,7 +5982,9 @@ void bssn_class::RestrictProlong_aux(int lev, int YN, bool BB, Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SL, SL, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6035,7 +6049,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, SynchList_pre, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6059,7 +6075,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, StateList, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6083,7 +6101,7 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) //================================================================================================ -void bssn_class::ProlongRestrict(int lev, int YN, bool BB) +void bssn_class::ProlongRestrict(int lev, int YN, bool BB) { if (lev > 0) { @@ -6136,15 +6154,18 @@ void bssn_class::ProlongRestrict(int lev, int YN, bool BB) #else Parallel::Restrict_after(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, StateList, Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#endif } Parallel::Sync_cached(GH->PatL[lev], SynchList_cor, Symmetry, sync_cache_rp_fine[lev]); } -} -#undef MIXOUTB - -//================================================================================================ +} +#undef MIXOUTB +#undef RP_SYNC_COARSE_AFTER_RESTRICT + +//================================================================================================