8#ifndef LINEAR_BREIT_WHEELER_COLLISION_FUNC_H_
9#define LINEAR_BREIT_WHEELER_COLLISION_FUNC_H_
43 using SoaData_type = WarpXParticleContainer::ParticleTileType::ParticleTileDataType;
58 const std::string& collision_name,
60 const bool isSameSpecies) :
65#ifdef AMREX_SINGLE_PRECISION_PARTICLES
71 constexpr auto default_event_multiplier = 1.0_prt;
76 constexpr auto default_probability_threshold = 0.02_prt;
81 constexpr auto default_probability_target_value = 0.002_prt;
84 pp_collision_name,
"probability_target_value",
173 index_type pair_index = cell_start_pair + coll_idx;
176 const auto multiplier_ratio =
static_cast<int>(
183 for (
index_type k = coll_idx; k < max_N; k += min_N)
189 p_mask[pair_index] =
false;
193 u1x[ I1[i1] ], u1y[ I1[i1] ], u1z[ I1[i1] ],
194 u2x[ I2[i2] ], u2y[ I2[i2] ], u2z[ I2[i2] ],
195 w1[ I1[i1] ], w2[ I2[i2] ],
196 dt, dV,
static_cast<int>(pair_index), p_mask, p_pair_reaction_weight,
202 if (p_mask[pair_index]) {
204 w1[ I1[i1] ], idcpu1[ I1[i1] ], p_pair_reaction_weight[pair_index]);
206 w2[ I2[i2] ], idcpu2[ I2[i2] ], p_pair_reaction_weight[pair_index]);
210 p_pair_indices_1[pair_index] = I1[i1];
211 p_pair_indices_2[pair_index] = I2[i2];
212 if (max_N == NI1) { i1 += min_N; }
213 if (max_N == NI2) { i2 += min_N; }
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_INLINE void SingleLinearBreitWheelerCollisionEvent(const amrex::ParticleReal &u1x, const amrex::ParticleReal &u1y, const amrex::ParticleReal &u1z, const amrex::ParticleReal &u2x, const amrex::ParticleReal &u2y, const amrex::ParticleReal &u2z, amrex::ParticleReal w1, 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 amrex::ParticleReal &event_multiplier, const int &multiplier_ratio, const amrex::ParticleReal &probability_threshold, const amrex::ParticleReal &probability_target_value, const amrex::RandomEngine &engine)
This function computes whether the collision between two photons results in a pair-producing (electro...
Definition SingleLinearBreitWheelerCollisionEvent.H:56
#define WARPX_ABORT_WITH_MESSAGE(MSG)
Definition TextMsg.H:15
WarpXParticleContainer::ParticleTileType ParticleTileType
Definition LinearBreitWheelerCollisionFunc.H:39
amrex::ParticleReal m_probability_threshold
Definition LinearBreitWheelerCollisionFunc.H:241
bool use_global_debye_length()
Definition LinearBreitWheelerCollisionFunc.H:229
bool m_isSameSpecies
Definition LinearBreitWheelerCollisionFunc.H:243
ParticleBins::index_type index_type
Definition LinearBreitWheelerCollisionFunc.H:42
Executor const & executor() const
Definition LinearBreitWheelerCollisionFunc.H:227
amrex::DenseBins< ParticleTileDataType > ParticleBins
Definition LinearBreitWheelerCollisionFunc.H:41
Executor m_exe
Definition LinearBreitWheelerCollisionFunc.H:245
LinearBreitWheelerCollisionFunc()=default
Default constructor of the LinearBreitWheelerCollisionFunc class.
WarpXParticleContainer::ParticleTileType::ParticleTileDataType SoaData_type
Definition LinearBreitWheelerCollisionFunc.H:43
amrex::ParticleReal m_probability_target_value
Definition LinearBreitWheelerCollisionFunc.H:242
ParticleTileType::ParticleTileDataType ParticleTileDataType
Definition LinearBreitWheelerCollisionFunc.H:40
LinearBreitWheelerCollisionFunc(const std::string &collision_name, MultiParticleContainer const *const, const bool isSameSpecies)
Constructor of the LinearBreitWheelerCollisionFunc class.
Definition LinearBreitWheelerCollisionFunc.H:57
WarpXParticleContainer::ParticleType ParticleType
Definition LinearBreitWheelerCollisionFunc.H:38
amrex::ParticleReal m_event_multiplier
Definition LinearBreitWheelerCollisionFunc.H:234
Definition MultiParticleContainer.H:69
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
T_ParticleType ParticleType
amrex_particle_real ParticleReal
AMREX_GPU_HOST_DEVICE AMREX_INLINE void remove_weight_from_colliding_particle(amrex::ParticleReal &weight, uint64_t &idcpu, const amrex::ParticleReal reaction_weight)
Subtract given weight from particle and set its ID to invalid if the weight reaches zero.
Definition BinaryCollisionUtils.H:193
constexpr std::uint64_t Invalid
__host__ __device__ constexpr const T & min(const T &a, const T &b) noexcept
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
int queryWithParser(const amrex::ParmParse &a_pp, char const *const str, T &val)
Definition ParserUtils.H:102
Functor that can be used to extract the positions of the macroparticles inside a ParallelFor kernel.
Definition GetAndSetPosition.H:75
Definition LinearBreitWheelerCollisionFunc.H:93
amrex::ParticleReal m_event_multiplier
Definition LinearBreitWheelerCollisionFunc.H:218
amrex::ParticleReal m_probability_threshold
Definition LinearBreitWheelerCollisionFunc.H:219
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, amrex::ParticleReal const, amrex::Real const, amrex::ParticleReal const, amrex::ParticleReal const, amrex::ParticleReal const, amrex::ParticleReal const, 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::ParticleReal *, amrex::RandomEngine const &engine) const
Executor of the LinearBreitWheelerCollisionFunc class. Performs two-photon collisions at the cell lev...
Definition LinearBreitWheelerCollisionFunc.H:136
bool m_computeSpeciesDensities
Definition LinearBreitWheelerCollisionFunc.H:222
bool m_computeSpeciesTemperatures
Definition LinearBreitWheelerCollisionFunc.H:223
amrex::ParticleReal m_probability_target_value
Definition LinearBreitWheelerCollisionFunc.H:220
bool m_isSameSpecies
Definition LinearBreitWheelerCollisionFunc.H:221
bool m_need_product_data
Definition LinearBreitWheelerCollisionFunc.H:224
@ uz
Definition WarpXParticleContainer.H:70
@ w
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70