8 #ifndef INJECTOR_POSITION_H_ 9 #define INJECTOR_POSITION_H_ 13 #include <AMReX_Dim3.H> 14 #include <AMReX_Gpu.H> 15 #include <AMReX_Utility.H> 24 amrex::RandomEngine
const& engine)
const noexcept
26 return amrex::XDim3{amrex::Random(engine), amrex::Random(engine), amrex::Random(engine)};
39 amrex::RandomEngine
const& engine)
const noexcept
42 if (dir == 0)
return amrex::XDim3{0._rt, amrex::Random(engine), amrex::Random(engine)};
43 #if (defined WARPX_DIM_RZ) 44 if (dir == 1)
return amrex::XDim3{amrex::Random(engine), 0._rt, 0._rt};
46 if (dir == 1)
return amrex::XDim3{amrex::Random(engine), 0._rt, amrex::Random(engine)};
48 else return amrex::XDim3{amrex::Random(engine), amrex::Random(engine), 0._rt};
67 amrex::RandomEngine
const&)
const noexcept
69 using namespace amrex;
71 int const nx = ref_fac*ppc.x;
72 int const ny = ref_fac*ppc.y;
73 #if (defined WARPX_DIM_3D) || (defined WARPX_DIM_RZ) 74 int const nz = ref_fac*ppc.z;
78 int const ix_part = i_part / (ny*nz);
79 int const iz_part = (i_part-ix_part*(ny*nz)) / ny;
80 int const iy_part = (i_part-ix_part*(ny*nz)) - ny*iz_part;
82 (0.5_rt + ix_part) / nx,
83 (0.5_rt + iy_part) / ny,
84 (0.5_rt + iz_part) / nz
102 amrex::Real a_xmin, amrex::Real a_xmax,
103 amrex::Real a_ymin, amrex::Real a_ymax,
104 amrex::Real a_zmin, amrex::Real a_zmax)
107 xmin(a_xmin), xmax(a_xmax),
108 ymin(a_ymin), ymax(a_ymax),
109 zmin(a_zmin), zmax(a_zmax)
114 amrex::Real a_xmin, amrex::Real a_xmax,
115 amrex::Real a_ymin, amrex::Real a_ymax,
116 amrex::Real a_zmin, amrex::Real a_zmax,
120 xmin(a_xmin), xmax(a_xmax),
121 ymin(a_ymin), ymax(a_ymax),
122 zmin(a_zmin), zmax(a_zmax)
127 amrex::Real a_xmin, amrex::Real a_xmax,
128 amrex::Real a_ymin, amrex::Real a_ymax,
129 amrex::Real a_zmin, amrex::Real a_zmax,
130 amrex::Dim3
const& a_ppc)
133 xmin(a_xmin), xmax(a_xmax),
134 ymin(a_ymin), ymax(a_ymax),
135 zmin(a_zmin), zmax(a_zmax)
147 AMREX_GPU_HOST_DEVICE
150 amrex::RandomEngine
const& engine)
const noexcept
156 return object.regular.getPositionUnitBox(i_part, ref_fac, engine);
158 case Type::randomplane:
160 return object.randomplane.getPositionUnitBox(i_part, ref_fac, engine);
164 return object.random.getPositionUnitBox(i_part, ref_fac, engine);
170 AMREX_GPU_HOST_DEVICE
174 return (x < xmax and x >= xmin and
175 y < ymax and y >= ymin and
176 z < zmax and z >= zmin);
180 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
182 overlapsWith (
const amrex::XDim3& lo,
const amrex::XDim3& hi)
const noexcept
184 return ! ( (xmin > hi.x) || (xmax < lo.x)
185 || (ymin > hi.y) || (ymax < lo.y)
186 || (zmin > hi.z) || (zmax < lo.z) );
190 enum struct Type { random, randomplane, regular };
198 : randomplane(a_dir) {}
int dir
Definition: InjectorPosition.H:51
InjectorPositionRegular regular
Definition: InjectorPosition.H:203
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:101
Object(InjectorPositionRandom *) noexcept
Definition: InjectorPosition.H:196
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:126
Object(InjectorPositionRandomPlane *, int const &a_dir) noexcept
Definition: InjectorPosition.H:197
Definition: InjectorPosition.H:195
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int, int, amrex::RandomEngine const &engine) const noexcept
Definition: InjectorPosition.H:23
amrex::Real ymin
Definition: InjectorPosition.H:208
InjectorPositionRandomPlane randomplane
Definition: InjectorPosition.H:202
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:182
amrex::Real xmin
Definition: InjectorPosition.H:207
Type type
Definition: InjectorPosition.H:191
InjectorPositionRegular(amrex::Dim3 const &a_ppc) noexcept
Definition: InjectorPosition.H:58
AMREX_GPU_HOST_DEVICE bool insideBounds(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition: InjectorPosition.H:172
Definition: InjectorPosition.H:19
InjectorPositionRandom random
Definition: InjectorPosition.H:201
type
Definition: run_alltests_1node.py:67
amrex::Real zmin
Definition: InjectorPosition.H:209
Type
Definition: InjectorPosition.H:190
InjectorPosition(InjectorPositionRandomPlane *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, int const &a_dir)
Definition: InjectorPosition.H:113
Object object
Definition: InjectorPosition.H:205
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, int const ref_fac, amrex::RandomEngine const &) const noexcept
Definition: InjectorPosition.H:66
Definition: InjectorPosition.H:56
Definition: InjectorPosition.H:32
Object(InjectorPositionRegular *, amrex::Dim3 const &a_ppc) noexcept
Definition: InjectorPosition.H:199
Definition: InjectorPosition.H:98
InjectorPositionRandomPlane(int const &a_dir) noexcept
Definition: InjectorPosition.H:34
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, int const ref_fac, amrex::RandomEngine const &engine) const noexcept
Definition: InjectorPosition.H:149
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int, int, amrex::RandomEngine const &engine) const noexcept
Definition: InjectorPosition.H:38
Definition: BreitWheelerEngineWrapper.H:35
amrex::Dim3 ppc
Definition: InjectorPosition.H:88