aboutsummaryrefslogtreecommitdiff
path: root/Source/Parallelization/WarpXComm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Parallelization/WarpXComm.cpp')
-rw-r--r--Source/Parallelization/WarpXComm.cpp64
1 files changed, 34 insertions, 30 deletions
diff --git a/Source/Parallelization/WarpXComm.cpp b/Source/Parallelization/WarpXComm.cpp
index d0567fd39..9b7f16478 100644
--- a/Source/Parallelization/WarpXComm.cpp
+++ b/Source/Parallelization/WarpXComm.cpp
@@ -856,7 +856,8 @@ WarpX::FillBoundaryAux (int lev, IntVect ng)
void
WarpX::SyncCurrent (
const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
- const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp)
+ const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
+ const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_buffer)
{
WARPX_PROFILE("WarpX::SyncCurrent()");
@@ -989,14 +990,14 @@ WarpX::SyncCurrent (
ablastr::coarsen::average::Coarsen(*J_cp[lev][idim],
*J_fp[lev][idim],
refRatio(lev-1));
- if (current_buf[lev][idim])
+ if (J_buffer[lev][idim])
{
IntVect const& ng = J_cp[lev][idim]->nGrowVect();
- AMREX_ASSERT(ng.allLE(current_buf[lev][idim]->nGrowVect()));
- MultiFab::Add(*current_buf[lev][idim], *J_cp[lev][idim],
+ AMREX_ASSERT(ng.allLE(J_buffer[lev][idim]->nGrowVect()));
+ MultiFab::Add(*J_buffer[lev][idim], *J_cp[lev][idim],
0, 0, ncomp, ng);
mf_comm = std::make_unique<MultiFab>
- (*current_buf[lev][idim], amrex::make_alias, 0, ncomp);
+ (*J_buffer[lev][idim], amrex::make_alias, 0, ncomp);
}
else
{
@@ -1016,13 +1017,14 @@ WarpX::SyncCurrent (
void
WarpX::SyncRho () {
- SyncRho(rho_fp, rho_cp);
+ SyncRho(rho_fp, rho_cp, charge_buf);
}
void
WarpX::SyncRho (
const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
- const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp)
+ const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
+ const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_buffer)
{
WARPX_PROFILE("WarpX::SyncRho()");
@@ -1074,13 +1076,13 @@ WarpX::SyncRho (
ablastr::coarsen::average::Coarsen(*charge_cp[lev],
*charge_fp[lev],
refRatio(lev-1));
- if (charge_buf[lev])
+ if (charge_buffer[lev])
{
IntVect const& ng = charge_cp[lev]->nGrowVect();
- AMREX_ASSERT(ng.allLE(charge_buf[lev]->nGrowVect()));
- MultiFab::Add(*charge_buf[lev], *charge_cp[lev], 0, 0, ncomp, ng);
+ AMREX_ASSERT(ng.allLE(charge_buffer[lev]->nGrowVect()));
+ MultiFab::Add(*charge_buffer[lev], *charge_cp[lev], 0, 0, ncomp, ng);
mf_comm = std::make_unique<MultiFab>
- (*charge_buf[lev], amrex::make_alias, 0, ncomp);
+ (*charge_buffer[lev], amrex::make_alias, 0, ncomp);
}
else
{
@@ -1210,6 +1212,7 @@ void WarpX::SumBoundaryJ (
void WarpX::AddCurrentFromFineLevelandSumBoundary (
const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
+ const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_buffer,
const int lev)
{
const amrex::Periodicity& period = Geom(lev).periodicity();
@@ -1233,18 +1236,18 @@ void WarpX::AddCurrentFromFineLevelandSumBoundary (
const IntVect ng = J_cp[lev+1][idim]->nGrowVect();
- if (use_filter && current_buf[lev+1][idim])
+ if (use_filter && J_buffer[lev+1][idim])
{
ApplyFilterJ(J_cp, lev+1, idim);
- ApplyFilterJ(current_buf, lev+1, idim);
+ ApplyFilterJ(J_buffer, lev+1, idim);
MultiFab::Add(
- *current_buf[lev+1][idim], *J_cp[lev+1][idim],
- 0, 0, current_buf[lev+1][idim]->nComp(), ng);
+ *J_buffer[lev+1][idim], *J_cp[lev+1][idim],
+ 0, 0, J_buffer[lev+1][idim]->nComp(), ng);
ablastr::utils::communication::ParallelAdd(
- mf, *current_buf[lev+1][idim], 0, 0,
- current_buf[lev+1][idim]->nComp(),
+ mf, *J_buffer[lev+1][idim], 0, 0,
+ J_buffer[lev+1][idim]->nComp(),
ng, amrex::IntVect(0),
do_single_precision_comms, period);
}
@@ -1258,15 +1261,15 @@ void WarpX::AddCurrentFromFineLevelandSumBoundary (
ng, amrex::IntVect(0),
do_single_precision_comms, period);
}
- else if (current_buf[lev+1][idim]) // but no filter
+ else if (J_buffer[lev+1][idim]) // but no filter
{
MultiFab::Add(
- *current_buf[lev+1][idim], *J_cp[lev+1][idim],
- 0, 0, current_buf[lev+1][idim]->nComp(), ng);
+ *J_buffer[lev+1][idim], *J_cp[lev+1][idim],
+ 0, 0, J_buffer[lev+1][idim]->nComp(), ng);
ablastr::utils::communication::ParallelAdd(
- mf, *current_buf[lev+1][idim], 0, 0,
- current_buf[lev+1][idim]->nComp(),
+ mf, *J_buffer[lev+1][idim], 0, 0,
+ J_buffer[lev+1][idim]->nComp(),
ng, amrex::IntVect(0),
do_single_precision_comms, period);
}
@@ -1345,6 +1348,7 @@ void WarpX::ApplyFilterandSumBoundaryRho (int /*lev*/, int glev, amrex::MultiFab
void WarpX::AddRhoFromFineLevelandSumBoundary (
const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
+ const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_buffer,
const int lev,
const int icomp,
const int ncomp)
@@ -1362,7 +1366,7 @@ void WarpX::AddRhoFromFineLevelandSumBoundary (
mf.setVal(0.0);
IntVect ng = charge_cp[lev+1]->nGrowVect();
IntVect ng_depos_rho = get_ng_depos_rho();
- if (use_filter && charge_buf[lev+1])
+ if (use_filter && charge_buffer[lev+1])
{
// coarse patch of fine level
ng += bilinear_filter.stencil_length_each_dir-1;
@@ -1373,9 +1377,9 @@ void WarpX::AddRhoFromFineLevelandSumBoundary (
bilinear_filter.ApplyStencil(rhofc, *charge_cp[lev+1], lev+1, icomp, 0, ncomp);
// buffer patch of fine level
- MultiFab rhofb(charge_buf[lev+1]->boxArray(),
- charge_buf[lev+1]->DistributionMap(), ncomp, ng);
- bilinear_filter.ApplyStencil(rhofb, *charge_buf[lev+1], lev+1, icomp, 0, ncomp);
+ MultiFab rhofb(charge_buffer[lev+1]->boxArray(),
+ charge_buffer[lev+1]->DistributionMap(), ncomp, ng);
+ bilinear_filter.ApplyStencil(rhofb, *charge_buffer[lev+1], lev+1, icomp, 0, ncomp);
MultiFab::Add(rhofb, rhofc, 0, 0, ncomp, ng);
@@ -1395,16 +1399,16 @@ void WarpX::AddRhoFromFineLevelandSumBoundary (
WarpX::do_single_precision_comms, period);
WarpXSumGuardCells( *charge_cp[lev+1], rf, period, ng_depos_rho, icomp, ncomp );
}
- else if (charge_buf[lev+1]) // but no filter
+ else if (charge_buffer[lev+1]) // but no filter
{
ng_depos_rho.min(ng);
- MultiFab::Add(*charge_buf[lev+1],
+ MultiFab::Add(*charge_buffer[lev+1],
*charge_cp[lev+1], icomp, icomp, ncomp,
charge_cp[lev+1]->nGrowVect());
- ablastr::utils::communication::ParallelAdd(mf, *charge_buf[lev + 1], icomp, 0,
+ ablastr::utils::communication::ParallelAdd(mf, *charge_buffer[lev + 1], icomp, 0,
ncomp,
- charge_buf[lev + 1]->nGrowVect(),
+ charge_buffer[lev + 1]->nGrowVect(),
IntVect::TheZeroVector(), WarpX::do_single_precision_comms,
period);
WarpXSumGuardCells(*(charge_cp[lev+1]), period, ng_depos_rho, icomp, ncomp);