From d2d2138349761c6d1598f8f7fb2093c502154ebb Mon Sep 17 00:00:00 2001 From: Remi Lehe Date: Wed, 12 Oct 2022 16:38:30 -0700 Subject: 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 --- Source/Particles/PhysicalParticleContainer.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'Source/Particles/PhysicalParticleContainer.cpp') 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); -- cgit v1.2.3