aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/MultiParticleContainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r--Source/Particles/MultiParticleContainer.cpp42
1 files changed, 23 insertions, 19 deletions
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp
index 34dd488c1..a0b80877d 100644
--- a/Source/Particles/MultiParticleContainer.cpp
+++ b/Source/Particles/MultiParticleContainer.cpp
@@ -486,12 +486,19 @@ MultiParticleContainer::GetZeroChargeDensity (const int lev)
{
WarpX& warpx = WarpX::GetInstance();
- BoxArray ba = warpx.boxArray(lev);
+ BoxArray nba = warpx.boxArray(lev);
DistributionMapping dmap = warpx.DistributionMap(lev);
const int ng_rho = warpx.get_ng_depos_rho().max();
- auto zero_rho = std::make_unique<MultiFab>(amrex::convert(ba,IntVect::TheNodeVector()),
- dmap,WarpX::ncomps,ng_rho);
+ bool is_PSATD_RZ = false;
+#ifdef WARPX_DIM_RZ
+ if (WarpX::maxwell_solver_id == MaxwellSolverAlgo::PSATD)
+ is_PSATD_RZ = true;
+#endif
+ if( !is_PSATD_RZ )
+ nba.surroundingNodes();
+
+ auto zero_rho = std::make_unique<MultiFab>(nba, dmap, WarpX::ncomps, ng_rho);
zero_rho->setVal(amrex::Real(0.0));
return zero_rho;
}
@@ -540,6 +547,8 @@ MultiParticleContainer::DepositCharge (
// Call the deposition kernel for each species
for (auto& pc : allcontainers)
{
+ if (pc->do_not_deposit) continue;
+
bool const local = true;
bool const reset = false;
bool const do_rz_volume_scaling = false;
@@ -562,24 +571,19 @@ MultiParticleContainer::DepositCharge (
std::unique_ptr<MultiFab>
MultiParticleContainer::GetChargeDensity (int lev, bool local)
{
- if (allcontainers.empty())
- {
- std::unique_ptr<MultiFab> rho = GetZeroChargeDensity(lev);
- return rho;
+ std::unique_ptr<MultiFab> rho = GetZeroChargeDensity(lev);
+
+ for (unsigned i = 0, n = allcontainers.size(); i < n; ++i) {
+ if (allcontainers[i]->do_not_deposit) continue;
+ std::unique_ptr<MultiFab> rhoi = allcontainers[i]->GetChargeDensity(lev, true);
+ MultiFab::Add(*rho, *rhoi, 0, 0, rho->nComp(), rho->nGrowVect());
}
- else
- {
- std::unique_ptr<MultiFab> rho = allcontainers[0]->GetChargeDensity(lev, true);
- for (unsigned i = 1, n = allcontainers.size(); i < n; ++i) {
- std::unique_ptr<MultiFab> rhoi = allcontainers[i]->GetChargeDensity(lev, true);
- MultiFab::Add(*rho, *rhoi, 0, 0, rho->nComp(), rho->nGrowVect());
- }
- if (!local) {
- const Geometry& gm = allcontainers[0]->Geom(lev);
- ablastr::utils::communication::SumBoundary(*rho, WarpX::do_single_precision_comms, gm.periodicity());
- }
- return rho;
+ if (!local) {
+ const Geometry& gm = allcontainers[0]->Geom(lev);
+ ablastr::utils::communication::SumBoundary(*rho, WarpX::do_single_precision_comms, gm.periodicity());
}
+
+ return rho;
}
void