diff options
author | 2022-10-12 16:38:30 -0700 | |
---|---|---|
committer | 2022-10-12 16:38:30 -0700 | |
commit | d2d2138349761c6d1598f8f7fb2093c502154ebb (patch) | |
tree | 6b39bbcf913ab5a706b6e9b8813527bf9cf9c47d /Source/Particles/PhysicalParticleContainer.cpp | |
parent | 1ceef7a8b3fd3caf7e2d8d964009d1bf2344fd93 (diff) | |
download | WarpX-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.cpp | 15 |
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); |