8#ifndef WARPX_INJECTOR_POSITION_H_
9#define WARPX_INJECTOR_POSITION_H_
43 using namespace amrex::literals;
44#if ((defined WARPX_DIM_3D) || (defined WARPX_DIM_RZ) || (defined WARPX_DIM_RCYLINDER) || (defined WARPX_DIM_RSPHERE))
49#elif (defined(WARPX_DIM_XZ))
54#elif (defined(WARPX_DIM_1D_Z) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE))
82 using namespace amrex;
84#if (defined WARPX_DIM_3D)
85 int const nx = ref_fac[0]*
ppc.x;
86 int const ny = ref_fac[1]*
ppc.y;
87 int const nz = ref_fac[2]*
ppc.z;
88#elif (defined WARPX_DIM_RZ)
89 int const nx = ref_fac[0]*
ppc.x;
90 int const ny = ref_fac[1]*
ppc.y;
92#elif (defined WARPX_DIM_RCYLINDER)
93 int const nx = ref_fac[0]*
ppc.x;
96#elif (defined WARPX_DIM_RSPHERE)
97 int const nx = ref_fac[0]*
ppc.x;
100#elif (defined WARPX_DIM_XZ)
101 int const nx = ref_fac[0]*
ppc.x;
102 int const ny = ref_fac[1]*
ppc.y;
104#elif (defined WARPX_DIM_1D_Z)
105 int const nx = ref_fac[0]*
ppc.x;
109 int const ix_part = i_part / (ny*nz);
110 int const iz_part = (i_part-ix_part*(ny*nz)) / ny;
111 int const iy_part = (i_part-ix_part*(ny*nz)) - ny*iz_part;
113 (0.5_rt + ix_part) / nx,
114 (0.5_rt + iy_part) / ny,
115 (0.5_rt + iz_part) / nz
133 amrex::Real a_xmin, amrex::Real a_xmax,
134 amrex::Real a_ymin, amrex::Real a_ymax,
135 amrex::Real a_zmin, amrex::Real a_zmax)
145 amrex::Real a_xmin, amrex::Real a_xmax,
146 amrex::Real a_ymin, amrex::Real a_ymax,
147 amrex::Real a_zmin, amrex::Real a_zmax,
158 amrex::Real a_xmin, amrex::Real a_xmax,
159 amrex::Real a_ymin, amrex::Real a_ymax,
160 amrex::Real a_zmin, amrex::Real a_zmax,
190 return object.regular.getPositionUnitBox(i_part, ref_fac, engine);
194 return object.randomplane.getPositionUnitBox(i_part, ref_fac, engine);
198 return object.random.getPositionUnitBox(i_part, ref_fac, engine);
211 insideBounds (amrex::Real x, amrex::Real y, amrex::Real z)
const noexcept
213 return (x < xmax and x >=
xmin and
214 y < ymax and y >=
ymin and
215 z < zmax and z >=
zmin);
228 return (x <= xmax and x >=
xmin and
229 y <= ymax and y >=
ymin and
230 z <= zmax and z >=
zmin);
239 return ( (
xmin <= hi.x) && (
xmax >= lo.x)
241 && (
zmin <= hi.z) && (
zmax >= lo.z) );
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
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:132
amrex::Real ymax
Definition InjectorPosition.H:263
Object object
Definition InjectorPosition.H:260
Type
Definition InjectorPosition.H:245
@ random
Definition InjectorPosition.H:245
@ randomplane
Definition InjectorPosition.H:245
@ regular
Definition InjectorPosition.H:245
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool overlapsWith(const amrex::XDim3 &lo, const amrex::XDim3 &hi) const noexcept
Definition InjectorPosition.H:237
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:144
amrex::Real xmin
Definition InjectorPosition.H:262
AMREX_GPU_HOST_DEVICE bool insideBounds(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorPosition.H:211
amrex::Real ymin
Definition InjectorPosition.H:263
amrex::Real zmax
Definition InjectorPosition.H:264
AMREX_GPU_HOST_DEVICE bool insideBoundsInclusive(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorPosition.H:226
Type type
Definition InjectorPosition.H:246
void operator=(InjectorPosition const &)=delete
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:157
InjectorPosition(InjectorPosition &&)=delete
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, amrex::IntVect const ref_fac, amrex::RandomEngine const &engine) const noexcept
Definition InjectorPosition.H:183
InjectorPosition(InjectorPosition const &)=delete
amrex::Real zmin
Definition InjectorPosition.H:264
amrex::Real xmax
Definition InjectorPosition.H:262
~InjectorPosition()=default
Definition InjectorPosition.H:20
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int, amrex::IntVect const, amrex::RandomEngine const &engine) const noexcept
Definition InjectorPosition.H:24
Definition InjectorPosition.H:34
int dir
Definition InjectorPosition.H:63
InjectorPositionRandomPlane(int const &a_dir) noexcept
Definition InjectorPosition.H:35
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int, amrex::IntVect const, amrex::RandomEngine const &engine) const noexcept
Definition InjectorPosition.H:40
Definition InjectorPosition.H:69
InjectorPositionRegular(amrex::Dim3 const &a_ppc) noexcept
Definition InjectorPosition.H:70
AMREX_GPU_HOST_DEVICE amrex::XDim3 getPositionUnitBox(int const i_part, amrex::IntVect const ref_fac, amrex::RandomEngine const &) const noexcept
Definition InjectorPosition.H:79
amrex::Dim3 ppc
Definition InjectorPosition.H:119
Definition InjectorPosition.H:250
Object(InjectorPositionRandom *) noexcept
Definition InjectorPosition.H:251
InjectorPositionRegular regular
Definition InjectorPosition.H:258
InjectorPositionRandom random
Definition InjectorPosition.H:256
InjectorPositionRandomPlane randomplane
Definition InjectorPosition.H:257
Object(InjectorPositionRandomPlane *, int const &a_dir) noexcept
Definition InjectorPosition.H:252
Object(InjectorPositionRegular *, amrex::Dim3 const &a_ppc) noexcept
Definition InjectorPosition.H:254