diff options
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r-- | Source/Particles/MultiParticleContainer.cpp | 42 |
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 |