aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Weiqun Zhang <WeiqunZhang@lbl.gov> 2022-09-01 10:30:42 -0700
committerGravatar GitHub <noreply@github.com> 2022-09-01 10:30:42 -0700
commitf98da67950e7fd34d89bb7996327a6c566338c9e (patch)
treea6fd28ab5e0a1730c2132c64df418aaeb2085a64 /Source/Particles/PhysicalParticleContainer.cpp
parenta10d4a27c399b930dc6c9e58030dd0663d42a7ac (diff)
downloadWarpX-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.cpp38
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);