8 #ifndef INJECTOR_POSITION_H_ 9 #define INJECTOR_POSITION_H_ 11 #include <AMReX_Gpu.H> 12 #include <AMReX_Dim3.H> 13 #include <AMReX_Utility.H> 22 amrex::RandomEngine
const& engine)
const noexcept
24 return amrex::XDim3{amrex::Random(engine), amrex::Random(engine), amrex::Random(engine)};
41 amrex::RandomEngine
const&)
const noexcept
43 using namespace amrex;
45 int const nx = ref_fac*ppc.x;
46 int const ny = ref_fac*ppc.y;
47 #if (defined WARPX_DIM_3D) || (defined WARPX_DIM_RZ) 48 int const nz = ref_fac*ppc.z;
52 int const ix_part = i_part / (ny*nz);
53 int const iz_part = (i_part-ix_part*(ny*nz)) / ny;
54 int const iy_part = (i_part-ix_part*(ny*nz)) - ny*iz_part;
56 (0.5_rt + ix_part) / nx,
57 (0.5_rt + iy_part) / ny,
58 (0.5_rt + iz_part) / nz
76 amrex::Real a_xmin, amrex::Real a_xmax,
77 amrex::Real a_ymin, amrex::Real a_ymax,
78 amrex::Real a_zmin, amrex::Real a_zmax)
81 xmin(a_xmin), xmax(a_xmax),
82 ymin(a_ymin), ymax(a_ymax),
83 zmin(a_zmin), zmax(a_zmax)
88 amrex::Real a_xmin, amrex::Real a_xmax,
89 amrex::Real a_ymin, amrex::Real a_ymax,
90 amrex::Real a_zmin, amrex::Real a_zmax,
91 amrex::Dim3
const& a_ppc)
94 xmin(a_xmin), xmax(a_xmax),
95 ymin(a_ymin), ymax(a_ymax),
96 zmin(a_zmin), zmax(a_zmax)
108 AMREX_GPU_HOST_DEVICE
111 amrex::RandomEngine
const& engine)
const noexcept
117 return object.regular.getPositionUnitBox(i_part, ref_fac, engine);
121 return object.random.getPositionUnitBox(i_part, ref_fac, engine);
127 AMREX_GPU_HOST_DEVICE
131 return (x < xmax and x >= xmin and
132 y < ymax and y >= ymin and
133 z < zmax and z >= zmin);
137 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
139 overlapsWith (
const amrex::XDim3& lo,
const amrex::XDim3& hi)
const noexcept
141 return ! ( (xmin > hi.x) || (xmax < lo.x)
142 || (ymin > hi.y) || (ymax < lo.y)
143 || (zmin > hi.z) || (zmax < lo.z) );
147 enum struct Type { random, regular };
InjectorPositionRegular regular
Definition: InjectorPosition.H:157
def x
Definition: read_lab_particles.py:25
InjectorPosition(InjectorPositionRandom *t, amrex::Real a_xmin, amrex::Real a_xmax, amrex::Real a_ymin, amrex::Real a_ymax, amrex::Real a_zmin, amrex::Real a_zmax)
Definition: InjectorPosition.H:75
Object(InjectorPositionRandom *) noexcept
Definition: InjectorPosition.H:153
InjectorPosition(InjectorPositionRegular *t, amrex::Real a_xmin, amrex::Real a_xmax, amrex::Real a_ymin, amrex::Real a_ymax, amrex::Real a_zmin, amrex::Real a_zmax, amrex::Dim3 const &a_ppc)
Definition: InjectorPosition.H:87
Definition: InjectorPosition.H:152
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int, int, amrex::RandomEngine const &engine) const noexcept
Definition: InjectorPosition.H:21
amrex::Real ymin
Definition: InjectorPosition.H:162
def z
Definition: read_lab_particles.py:26
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool overlapsWith(const amrex::XDim3 &lo, const amrex::XDim3 &hi) const noexcept
Definition: InjectorPosition.H:139
amrex::Real xmin
Definition: InjectorPosition.H:161
Type type
Definition: InjectorPosition.H:148
InjectorPositionRegular(amrex::Dim3 const &a_ppc) noexcept
Definition: InjectorPosition.H:32
AMREX_GPU_HOST_DEVICE bool insideBounds(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition: InjectorPosition.H:129
Definition: InjectorPosition.H:17
InjectorPositionRandom random
Definition: InjectorPosition.H:156
type
Definition: run_alltests_1node.py:67
amrex::Real zmin
Definition: InjectorPosition.H:163
Type
Definition: InjectorPosition.H:147
Object object
Definition: InjectorPosition.H:159
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, int const ref_fac, amrex::RandomEngine const &) const noexcept
Definition: InjectorPosition.H:40
Definition: InjectorPosition.H:30
Object(InjectorPositionRegular *, amrex::Dim3 const &a_ppc) noexcept
Definition: InjectorPosition.H:154
Definition: InjectorPosition.H:72
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, int const ref_fac, amrex::RandomEngine const &engine) const noexcept
Definition: InjectorPosition.H:110
amrex::Dim3 ppc
Definition: InjectorPosition.H:62