aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Remi Lehe <remi.lehe@normalesup.org> 2022-10-12 16:38:30 -0700
committerGravatar GitHub <noreply@github.com> 2022-10-12 16:38:30 -0700
commitd2d2138349761c6d1598f8f7fb2093c502154ebb (patch)
tree6b39bbcf913ab5a706b6e9b8813527bf9cf9c47d /Source/Particles/PhysicalParticleContainer.cpp
parent1ceef7a8b3fd3caf7e2d8d964009d1bf2344fd93 (diff)
downloadWarpX-d2d2138349761c6d1598f8f7fb2093c502154ebb.tar.gz
WarpX-d2d2138349761c6d1598f8f7fb2093c502154ebb.tar.zst
WarpX-d2d2138349761c6d1598f8f7fb2093c502154ebb.zip
Correct particle positions outside refined injection (#3463)
* Correct particle positions outside refined injection * Improve test * Update benchmark * Update Examples/Physics_applications/laser_acceleration/analysis_refined_injection.py
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp
index fa9b0c647..7e04d6902 100644
--- a/Source/Particles/PhysicalParticleContainer.cpp
+++ b/Source/Particles/PhysicalParticleContainer.cpp
@@ -1130,9 +1130,11 @@ PhysicalParticleContainer::AddPlasma (int lev, RealBox part_realbox)
ParticleType& p = pp[ip];
p.id() = pid+ip;
p.cpu() = cpuid;
-
- const XDim3 r =
- inj_pos->getPositionUnitBox(i_part, lrrfac, engine);
+ const XDim3 r = (fine_overlap_box.ok() && fine_overlap_box.contains(iv)) ?
+ // In the refined injection region: use refinement ratio `lrrfac`
+ inj_pos->getPositionUnitBox(i_part, lrrfac, engine) :
+ // Otherwise: use 1 as the refinement ratio
+ inj_pos->getPositionUnitBox(i_part, 1, engine);
auto pos = getCellCoords(overlap_corner, dx, r, iv);
#if defined(WARPX_DIM_3D)
@@ -1645,8 +1647,11 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt)
p.cpu() = cpuid;
// This assumes the inj_pos is of type InjectorPositionRandomPlane
- const XDim3 r =
- inj_pos->getPositionUnitBox(i_part, lrrfac, engine);
+ const XDim3 r = (fine_overlap_box.ok() && fine_overlap_box.contains(iv)) ?
+ // In the refined injection region: use refinement ratio `lrrfac`
+ inj_pos->getPositionUnitBox(i_part, lrrfac, engine) :
+ // Otherwise: use 1 as the refinement ratio
+ inj_pos->getPositionUnitBox(i_part, 1, engine);
auto pos = getCellCoords(overlap_corner, dx, r, iv);
auto ppos = PDim3(pos);