aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpXPML.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WarpXPML.cpp')
-rw-r--r--Source/WarpXPML.cpp138
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);
}
}