diff options
Diffstat (limited to 'Source/WarpXPML.cpp')
-rw-r--r-- | Source/WarpXPML.cpp | 138 |
1 files changed, 91 insertions, 47 deletions
diff --git a/Source/WarpXPML.cpp b/Source/WarpXPML.cpp index cb8e8cc12..f9b924725 100644 --- a/Source/WarpXPML.cpp +++ b/Source/WarpXPML.cpp @@ -520,17 +520,25 @@ void PML::ExchangeB (const std::array<amrex::MultiFab*,3>& B_fp, const std::array<amrex::MultiFab*,3>& B_cp) { - if (pml_B_fp[0]) + ExchangeB(PatchType::fine, B_fp); + ExchangeB(PatchType::coarse, B_cp); +} + +void +PML::ExchangeB (PatchType patch_type, + const std::array<amrex::MultiFab*,3>& Bp) +{ + if (patch_type == PatchType::fine && pml_B_fp[0] && Bp[0]) { - Exchange(*pml_B_fp[0], *B_fp[0], *m_geom); - Exchange(*pml_B_fp[1], *B_fp[1], *m_geom); - Exchange(*pml_B_fp[2], *B_fp[2], *m_geom); + Exchange(*pml_B_fp[0], *Bp[0], *m_geom); + Exchange(*pml_B_fp[1], *Bp[1], *m_geom); + Exchange(*pml_B_fp[2], *Bp[2], *m_geom); } - if (B_cp[0] && pml_B_cp[0]) + else if (patch_type == PatchType::coarse && pml_B_cp[0] && Bp[0]) { - Exchange(*pml_B_cp[0], *B_cp[0], *m_cgeom); - Exchange(*pml_B_cp[1], *B_cp[1], *m_cgeom); - Exchange(*pml_B_cp[2], *B_cp[2], *m_cgeom); + Exchange(*pml_B_cp[0], *Bp[0], *m_cgeom); + Exchange(*pml_B_cp[1], *Bp[1], *m_cgeom); + Exchange(*pml_B_cp[2], *Bp[2], *m_cgeom); } } @@ -538,25 +546,43 @@ void PML::ExchangeE (const std::array<amrex::MultiFab*,3>& E_fp, const std::array<amrex::MultiFab*,3>& E_cp) { - if (pml_E_fp[0]) + ExchangeB(PatchType::fine, E_fp); + ExchangeB(PatchType::coarse, E_cp); +} + +void +PML::ExchangeE (PatchType patch_type, + const std::array<amrex::MultiFab*,3>& Ep) +{ + if (patch_type == PatchType::fine && pml_E_fp[0] && Ep[0]) { - Exchange(*pml_E_fp[0], *E_fp[0], *m_geom); - Exchange(*pml_E_fp[1], *E_fp[1], *m_geom); - Exchange(*pml_E_fp[2], *E_fp[2], *m_geom); + Exchange(*pml_E_fp[0], *Ep[0], *m_geom); + Exchange(*pml_E_fp[1], *Ep[1], *m_geom); + Exchange(*pml_E_fp[2], *Ep[2], *m_geom); } - if (E_cp[0] && pml_E_cp[0]) + else if (patch_type == PatchType::coarse && pml_E_cp[0] && Ep[0]) { - Exchange(*pml_E_cp[0], *E_cp[0], *m_cgeom); - Exchange(*pml_E_cp[1], *E_cp[1], *m_cgeom); - Exchange(*pml_E_cp[2], *E_cp[2], *m_cgeom); + Exchange(*pml_E_cp[0], *Ep[0], *m_cgeom); + Exchange(*pml_E_cp[1], *Ep[1], *m_cgeom); + Exchange(*pml_E_cp[2], *Ep[2], *m_cgeom); } } void PML::ExchangeF (MultiFab* F_fp, MultiFab* F_cp) { - if (pml_F_fp) Exchange(*pml_F_fp, *F_fp, *m_geom); - if (pml_F_cp) Exchange(*pml_F_cp, *F_cp, *m_cgeom); + ExchangeF(PatchType::fine, F_fp); + ExchangeF(PatchType::coarse, F_cp); +} + +void +PML::ExchangeF (PatchType patch_type, MultiFab* Fp) +{ + if (patch_type == PatchType::fine && pml_F_fp && Fp) { + Exchange(*pml_F_fp, *Fp, *m_geom); + } else if (patch_type == PatchType::coarse && pml_F_cp && Fp) { + Exchange(*pml_F_cp, *Fp, *m_cgeom); + } } void @@ -613,56 +639,74 @@ PML::FillBoundary () void PML::FillBoundaryE () { - if (pml_E_fp[0] && pml_E_fp[0]->nGrowVect().max() > 0) + FillBoundaryE(PatchType::fine); + FillBoundaryE(PatchType::coarse); +} + +void +PML::FillBoundaryE (PatchType patch_type) +{ + if (patch_type == PatchType::fine && pml_E_fp[0] && pml_E_fp[0]->nGrowVect().max() > 0) { - const auto& period = m_geom->periodicity(); - pml_E_fp[0]->FillBoundary(period); - pml_E_fp[1]->FillBoundary(period); - pml_E_fp[2]->FillBoundary(period); + const auto& period = m_geom->periodicity(); + pml_E_fp[0]->FillBoundary(period); + pml_E_fp[1]->FillBoundary(period); + pml_E_fp[2]->FillBoundary(period); } - - if (pml_E_cp[0] && pml_E_cp[0]->nGrowVect().max() > 0) + else if (patch_type == PatchType::coarse && pml_E_cp[0] && pml_E_cp[0]->nGrowVect().max() > 0) { - const auto& period = m_cgeom->periodicity(); - pml_E_cp[0]->FillBoundary(period); - pml_E_cp[1]->FillBoundary(period); - pml_E_cp[2]->FillBoundary(period); + const auto& period = m_cgeom->periodicity(); + pml_E_cp[0]->FillBoundary(period); + pml_E_cp[1]->FillBoundary(period); + pml_E_cp[2]->FillBoundary(period); } } void PML::FillBoundaryB () { - if (pml_B_fp[0]) + FillBoundaryB(PatchType::fine); + FillBoundaryB(PatchType::coarse); +} + +void +PML::FillBoundaryB (PatchType patch_type) +{ + if (patch_type == PatchType::fine && pml_B_fp[0]) { - const auto& period = m_geom->periodicity(); - pml_B_fp[0]->FillBoundary(period); - pml_B_fp[1]->FillBoundary(period); - pml_B_fp[2]->FillBoundary(period); + const auto& period = m_geom->periodicity(); + pml_B_fp[0]->FillBoundary(period); + pml_B_fp[1]->FillBoundary(period); + pml_B_fp[2]->FillBoundary(period); } - - if (pml_B_cp[0]) + else if (patch_type == PatchType::coarse && pml_B_cp[0]) { - const auto& period = m_cgeom->periodicity(); - pml_B_cp[0]->FillBoundary(period); - pml_B_cp[1]->FillBoundary(period); - pml_B_cp[2]->FillBoundary(period); + const auto& period = m_cgeom->periodicity(); + pml_B_cp[0]->FillBoundary(period); + pml_B_cp[1]->FillBoundary(period); + pml_B_cp[2]->FillBoundary(period); } } void PML::FillBoundaryF () { - if (pml_F_fp && pml_F_fp->nGrowVect().max() > 0) + FillBoundaryF(PatchType::fine); + FillBoundaryF(PatchType::coarse); +} + +void +PML::FillBoundaryF (PatchType patch_type) +{ + if (patch_type == PatchType::fine && pml_F_fp && pml_F_fp->nGrowVect().max() > 0) { - const auto& period = m_geom->periodicity(); - pml_F_fp->FillBoundary(period); + const auto& period = m_geom->periodicity(); + pml_F_fp->FillBoundary(period); } - - if (pml_F_cp && pml_F_cp->nGrowVect().max() > 0) + else if (patch_type == PatchType::coarse && pml_F_cp && pml_F_cp->nGrowVect().max() > 0) { - const auto& period = m_cgeom->periodicity(); - pml_F_cp->FillBoundary(period); + const auto& period = m_cgeom->periodicity(); + pml_F_cp->FillBoundary(period); } } |