10 #ifndef WARPX_DSMC_FUNC_H_
11 #define WARPX_DSMC_FUNC_H_
99 amrex::ParticleReal
const , amrex::ParticleReal
const ,
100 amrex::ParticleReal
const m1, amrex::ParticleReal
const m2,
101 amrex::Real
const dt, amrex::Real
const dV,
index_type coll_idx,
104 amrex::ParticleReal* AMREX_RESTRICT p_pair_reaction_weight,
123 index_type pair_index = cell_start_pair + coll_idx;
134 #if (defined WARPX_DIM_RZ)
142 for (
index_type k = coll_idx; k < max_N; k += min_N)
146 const index_type c1k = (k%NI1 < max_N%NI1) ? c1 + 1: c1;
147 const index_type c2k = (k%NI2 < max_N%NI2) ? c2 + 1: c2;
149 #if (defined WARPX_DIM_RZ)
159 amrex::ParticleReal
const theta = theta2[I2[i2]]-theta1[I1[i1]];
160 amrex::ParticleReal
const u1xbuf = u1x[I1[i1]];
161 u1x[I1[i1]] = u1xbuf*std::cos(theta) - u1y[I1[i1]]*std::sin(theta);
162 u1y[I1[i1]] = u1xbuf*std::sin(theta) + u1y[I1[i1]]*std::cos(theta);
166 u1x[ I1[i1] ], u1y[ I1[i1] ], u1z[ I1[i1] ],
167 u2x[ I2[i2] ], u2y[ I2[i2] ], u2z[ I2[i2] ],
168 m1, m2, w1[ I1[i1] ]/c1k, w2[ I2[i2] ]/c2k,
169 dt, dV,
static_cast<int>(pair_index), p_mask,
170 p_pair_reaction_weight,
static_cast<int>(max_N),
173 #if (defined WARPX_DIM_RZ)
174 amrex::ParticleReal
const u1xbuf_new = u1x[I1[i1]];
175 u1x[I1[i1]] = u1xbuf_new*std::cos(-theta) - u1y[I1[i1]]*std::sin(-theta);
176 u1y[I1[i1]] = u1xbuf_new*std::sin(-theta) + u1y[I1[i1]]*std::cos(-theta);
179 p_pair_indices_1[pair_index] = I1[i1];
180 p_pair_indices_2[pair_index] = I2[i2];
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_INLINE void CollisionPairFilter(const amrex::ParticleReal u1x, const amrex::ParticleReal u1y, const amrex::ParticleReal u1z, const amrex::ParticleReal u2x, const amrex::ParticleReal u2y, const amrex::ParticleReal u2z, const amrex::ParticleReal m1, const amrex::ParticleReal m2, const amrex::ParticleReal w1, const amrex::ParticleReal w2, const amrex::Real dt, const amrex::ParticleReal dV, const int pair_index, index_type *AMREX_RESTRICT p_mask, amrex::ParticleReal *AMREX_RESTRICT p_pair_reaction_weight, const int multiplier, const int process_count, const ScatteringProcess::Executor *scattering_processes, const amrex::RandomEngine &engine)
This function determines whether a collision occurs for a given pair of particles.
Definition: CollisionFilterFunc.H:39
This class performs DSMC (direct simulation Monte Carlo) collisions within a cell....
Definition: DSMCFunc.H:38
amrex::Vector< ScatteringProcess > m_scattering_processes
Definition: DSMCFunc.H:198
ParticleBins::index_type index_type
Definition: DSMCFunc.H:44
Executor m_exe
Definition: DSMCFunc.H:201
DSMCFunc()=default
Constructor of the DSMCFunc class.
DSMCFunc(const std::string &collision_name, MultiParticleContainer const *mypc, bool isSameSpecies)
Constructor of the DSMCFunc class.
amrex::Gpu::DeviceVector< ScatteringProcess::Executor > m_scattering_processes_exe
Definition: DSMCFunc.H:199
WarpXParticleContainer::ParticleType ParticleType
Definition: DSMCFunc.H:40
Executor const & executor() const
Definition: DSMCFunc.H:195
Definition: MultiParticleContainer.H:66
ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
T_ParticleType ParticleType
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE const T & max(const T &a, const T &b) noexcept
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE const T & min(const T &a, const T &b) noexcept
float dt
Definition: stencil.py:442
Definition: DSMCFunc.H:65
int m_process_count
Definition: DSMCFunc.H:191
ScatteringProcess::Executor * m_scattering_processes_data
Definition: DSMCFunc.H:192
AMREX_GPU_HOST_DEVICE AMREX_INLINE void operator()(index_type const I1s, index_type const I1e, index_type const I2s, index_type const I2e, index_type const *AMREX_RESTRICT I1, index_type const *AMREX_RESTRICT I2, const SoaData_type &soa_1, const SoaData_type &soa_2, GetParticlePosition< PIdx >, GetParticlePosition< PIdx >, amrex::ParticleReal const, amrex::ParticleReal const, amrex::ParticleReal const m1, amrex::ParticleReal const m2, amrex::Real const dt, amrex::Real const dV, index_type coll_idx, index_type const cell_start_pair, index_type *AMREX_RESTRICT p_mask, index_type *AMREX_RESTRICT p_pair_indices_1, index_type *AMREX_RESTRICT p_pair_indices_2, amrex::ParticleReal *AMREX_RESTRICT p_pair_reaction_weight, amrex::RandomEngine const &engine) const
Executor of the DSMCFunc class. Performs DSMC collisions at the cell level. Note that this function d...
Definition: DSMCFunc.H:92
@ theta
RZ needs all three position components.
Definition: NamedComponentParticleContainer.H:36
@ uz
Definition: NamedComponentParticleContainer.H:34
@ w
weight
Definition: NamedComponentParticleContainer.H:33
@ uy
Definition: NamedComponentParticleContainer.H:34
@ ux
Definition: NamedComponentParticleContainer.H:34
Definition: ScatteringProcess.H:71
GpuArray< ParticleReal *, NAR > m_rdata
ParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ParticleTileDataType