diff options
author | 2022-09-01 10:30:42 -0700 | |
---|---|---|
committer | 2022-09-01 10:30:42 -0700 | |
commit | f98da67950e7fd34d89bb7996327a6c566338c9e (patch) | |
tree | a6fd28ab5e0a1730c2132c64df418aaeb2085a64 /Source/Particles/PhysicalParticleContainer.cpp | |
parent | a10d4a27c399b930dc6c9e58030dd0663d42a7ac (diff) | |
download | WarpX-f98da67950e7fd34d89bb7996327a6c566338c9e.tar.gz WarpX-f98da67950e7fd34d89bb7996327a6c566338c9e.tar.zst WarpX-f98da67950e7fd34d89bb7996327a6c566338c9e.zip |
Fix a bug in AddPlasma (#3351)
When warpx.refine_plasma=1, there was an error in the logic like below.
if (lrefine_injection) {
Box fine_overlap_box = ...;
if (fine_overlap_box.ok()) {
pcounts[index] = ...;
} // the else part was missing
} else {
pcounts[index] = ...;
}
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 5b0ea8ae5..981dce211 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -963,8 +963,10 @@ PhysicalParticleContainer::AddPlasma (int lev, RealBox part_realbox) Gpu::DeviceVector<int> offset(overlap_box.numPts()); auto pcounts = counts.data(); int lrrfac = rrfac; - int lrefine_injection = refine_injection; - Box lfine_box = fine_injection_box; + Box fine_overlap_box; // default Box is NOT ok(). + if (refine_injection) { + fine_overlap_box = overlap_box & amrex::shift(fine_injection_box, -shifted); + } amrex::ParallelFor(overlap_box, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { IntVect iv(AMREX_D_DECL(i, j, k)); @@ -977,16 +979,13 @@ PhysicalParticleContainer::AddPlasma (int lev, RealBox part_realbox) if (inj_pos->overlapsWith(lo, hi)) { auto index = overlap_box.index(iv); - if (lrefine_injection) { - Box fine_overlap_box = overlap_box & amrex::shift(lfine_box, -shifted); - if (fine_overlap_box.ok()) { - int r = (fine_overlap_box.contains(iv)) ? - AMREX_D_TERM(lrrfac,*lrrfac,*lrrfac) : 1; - pcounts[index] = num_ppc*r; - } + int r; + if (fine_overlap_box.ok() && fine_overlap_box.contains(iv)) { + r = AMREX_D_TERM(lrrfac,*lrrfac,*lrrfac); } else { - pcounts[index] = num_ppc; + r = 1; } + pcounts[index] = num_ppc*r; } #if defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) amrex::ignore_unused(k); @@ -1497,8 +1496,10 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt) Gpu::DeviceVector<int> offset(overlap_box.numPts()); auto pcounts = counts.data(); int lrrfac = rrfac; - int lrefine_injection = refine_injection; - Box lfine_box = fine_injection_box; + Box fine_overlap_box; // default Box is NOT ok(). + if (refine_injection) { + fine_overlap_box = overlap_box & amrex::shift(fine_injection_box, -shifted); + } amrex::ParallelForRNG(overlap_box, [=] AMREX_GPU_DEVICE (int i, int j, int k, amrex::RandomEngine const& engine) noexcept { IntVect iv(AMREX_D_DECL(i, j, k)); @@ -1510,16 +1511,13 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt) if (inj_pos->overlapsWith(lo, hi)) { auto index = overlap_box.index(iv); - if (lrefine_injection) { - Box fine_overlap_box = overlap_box & amrex::shift(lfine_box, -shifted); - if (fine_overlap_box.ok()) { - int r = (fine_overlap_box.contains(iv)) ? - AMREX_D_TERM(lrrfac,*lrrfac,*lrrfac) : 1; - pcounts[index] = num_ppc_int*r; - } + int r; + if (fine_overlap_box.ok() && fine_overlap_box.contains(iv)) { + r = AMREX_D_TERM(lrrfac,*lrrfac,*lrrfac); } else { - pcounts[index] = num_ppc_int; + r = 1; } + pcounts[index] = num_ppc_int*r; } #if defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) amrex::ignore_unused(k); |