7 #ifndef PARTICLEBOUNDARIES_K_H_
8 #define PARTICLEBOUNDARIES_K_H_
22 bool& change_sign_ux,
bool& particle_lost,
24 amrex::Real refl_probability_xmin, amrex::Real refl_probability_xmax,
32 if (refl_probability_xmin == 0 ||
amrex::Random(engine) > refl_probability_xmin) {
38 change_sign_ux =
true;
43 change_sign_ux =
true;
51 if (refl_probability_xmax == 0 ||
amrex::Random(engine) > refl_probability_xmax) {
57 change_sign_ux =
true;
62 change_sign_ux =
true;
86 #ifndef WARPX_DIM_1D_Z
87 amrex::ParticleReal& x, amrex::Real xmin, amrex::Real xmax,
89 #
if (defined WARPX_DIM_3D) || (defined WARPX_DIM_RZ)
90 amrex::ParticleReal&
y,
92 #
if (defined WARPX_DIM_3D)
93 amrex::Real ymin, amrex::Real ymax,
95 amrex::ParticleReal&
z, amrex::Real zmin, amrex::Real zmax,
96 amrex::ParticleReal& ux, amrex::ParticleReal& uy, amrex::ParticleReal& uz,
101 bool change_sign_ux =
false;
102 bool change_sign_uy =
false;
103 bool change_sign_uz =
false;
105 #ifndef WARPX_DIM_1D_Z
123 change_sign_ux =
true;
124 change_sign_uy =
true;
125 change_sign_uz =
true;
130 if (change_sign_ux && change_sign_uy) {
133 }
else if (change_sign_ux) {
136 amrex::Real ur = ux*std::cos(
y) + uy*std::sin(
y);
137 amrex::Real ut = -ux*std::sin(
y) + uy*std::cos(
y);
139 ux = ur*std::cos(
y) - ut*std::sin(
y);
140 uy = ur*std::sin(
y) + ut*std::cos(
y);
143 if (change_sign_ux) ux = -ux;
144 if (change_sign_uy) uy = -uy;
146 if (change_sign_uz) uz = -uz;
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
ParticleBoundaryType
Definition: WarpXAlgorithmSelection.H:161
@ Absorbing
particles crossing domain boundary are removed
@ Reflecting
particles are reflected
@ Open
particles cross domain boundary leave with damped j
Definition: ParticleBoundaries_K.H:14
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void apply_boundaries(amrex::ParticleReal &x, amrex::Real xmin, amrex::Real xmax, amrex::ParticleReal &y, amrex::ParticleReal &z, amrex::Real zmin, amrex::Real zmax, amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, bool &particle_lost, ParticleBoundaries::ParticleBoundariesData const &boundaries, amrex::RandomEngine const &engine)
Definition: ParticleBoundaries_K.H:85
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void apply_boundary(amrex::ParticleReal &x, amrex::Real xmin, amrex::Real xmax, bool &change_sign_ux, bool &particle_lost, ParticleBoundaryType xmin_bc, ParticleBoundaryType xmax_bc, amrex::Real refl_probability_xmin, amrex::Real refl_probability_xmax, amrex::RandomEngine const &engine)
Definition: ParticleBoundaries_K.H:21
def y
Definition: Excitation_Flag_Generator.py:76
def z
Definition: Excitation_Flag_Generator.py:77
Definition: ParticleBoundaries.H:49
bool reflect_all_velocities
Definition: ParticleBoundaries.H:65
amrex::ParserExecutor< 1 > reflection_model_ylo
Definition: ParticleBoundaries.H:60
ParticleBoundaryType ymax_bc
Definition: ParticleBoundaries.H:54
ParticleBoundaryType xmin_bc
Definition: ParticleBoundaries.H:51
amrex::ParserExecutor< 1 > reflection_model_zhi
Definition: ParticleBoundaries.H:63
ParticleBoundaryType xmax_bc
Definition: ParticleBoundaries.H:52
amrex::ParserExecutor< 1 > reflection_model_xhi
Definition: ParticleBoundaries.H:59
ParticleBoundaryType zmax_bc
Definition: ParticleBoundaries.H:56
amrex::ParserExecutor< 1 > reflection_model_zlo
Definition: ParticleBoundaries.H:62
ParticleBoundaryType ymin_bc
Definition: ParticleBoundaries.H:53
amrex::ParserExecutor< 1 > reflection_model_xlo
Definition: ParticleBoundaries.H:58
ParticleBoundaryType zmin_bc
Definition: ParticleBoundaries.H:55
amrex::ParserExecutor< 1 > reflection_model_yhi
Definition: ParticleBoundaries.H:61