From 346f0a6f6c2744d0d7f0ca5b4e3110a0137c0d44 Mon Sep 17 00:00:00 2001 From: Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> Date: Tue, 13 Apr 2021 00:05:31 +0200 Subject: Add nodal synchronization of E and B fields in the main grid (#1817) * Add nodal synchronization of E and B fields in the main grid * Update benchmarks * Update value in pml analysis file and put synchronization between PSATD push and FillBoundary * Update PML benchmarks and put the synchronization back in its original position * Bogus change in benchmark to trigger CI again * Update benchmarks --- Source/Parallelization/WarpXComm.cpp | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'Source/Parallelization/WarpXComm.cpp') diff --git a/Source/Parallelization/WarpXComm.cpp b/Source/Parallelization/WarpXComm.cpp index 4131b7307..992583862 100644 --- a/Source/Parallelization/WarpXComm.cpp +++ b/Source/Parallelization/WarpXComm.cpp @@ -1156,3 +1156,69 @@ void WarpX::NodalSyncPML (int lev, PatchType patch_type) } } } + +void WarpX::NodalSyncE () +{ + if (!override_sync_intervals.contains(istep[0]) && !do_pml) return; + + for (int lev = 0; lev <= finest_level; lev++) { + NodalSyncE(lev); + } +} + +void WarpX::NodalSyncE (int lev) +{ + NodalSyncE(lev, PatchType::fine); + if (lev > 0) NodalSyncE(lev, PatchType::coarse); +} + +void WarpX::NodalSyncE (int lev, PatchType patch_type) +{ + if (patch_type == PatchType::fine) + { + const auto& period = Geom(lev).periodicity(); + Efield_fp[lev][0]->OverrideSync(period); + Efield_fp[lev][1]->OverrideSync(period); + Efield_fp[lev][2]->OverrideSync(period); + } + else if (patch_type == PatchType::coarse) + { + const auto& cperiod = Geom(lev-1).periodicity(); + Efield_cp[lev][0]->OverrideSync(cperiod); + Efield_cp[lev][1]->OverrideSync(cperiod); + Efield_cp[lev][2]->OverrideSync(cperiod); + } +} + +void WarpX::NodalSyncB () +{ + if (!override_sync_intervals.contains(istep[0]) && !do_pml) return; + + for (int lev = 0; lev <= finest_level; lev++) { + NodalSyncB(lev); + } +} + +void WarpX::NodalSyncB (int lev) +{ + NodalSyncB(lev, PatchType::fine); + if (lev > 0) NodalSyncB(lev, PatchType::coarse); +} + +void WarpX::NodalSyncB (int lev, PatchType patch_type) +{ + if (patch_type == PatchType::fine) + { + const auto& period = Geom(lev).periodicity(); + Bfield_fp[lev][0]->OverrideSync(period); + Bfield_fp[lev][1]->OverrideSync(period); + Bfield_fp[lev][2]->OverrideSync(period); + } + else if (patch_type == PatchType::coarse) + { + const auto& cperiod = Geom(lev-1).periodicity(); + Bfield_cp[lev][0]->OverrideSync(cperiod); + Bfield_cp[lev][1]->OverrideSync(cperiod); + Bfield_cp[lev][2]->OverrideSync(cperiod); + } +} -- cgit v1.2.3