WarpX
Loading...
Searching...
No Matches
LinearComptonCollisionFunc::Executor Struct Reference

#include <LinearComptonCollisionFunc.H>

Public Member Functions

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 LinearComptonCollisionFunc class. Performs linear Compton scattering at the cell level using the algorithm described in Higginson et al., Journal of Computational Physics 388, 439-453 (2019). Note that this function does not yet create the product particles, but instead fills an array p_mask that stores which collisions result in a scattering event.
 

Public Attributes

amrex::ParticleReal m_event_multiplier
 
amrex::ParticleReal m_probability_threshold
 
amrex::ParticleReal m_probability_target_value
 
bool m_isSameSpecies
 
bool m_computeSpeciesDensities = false
 
bool m_computeSpeciesTemperatures = false
 
bool m_need_product_data = false
 

Member Function Documentation

◆ operator()()

AMREX_GPU_HOST_DEVICE AMREX_INLINE void LinearComptonCollisionFunc::Executor::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
inline

Executor of the LinearComptonCollisionFunc class. Performs linear Compton scattering at the cell level using the algorithm described in Higginson et al., Journal of Computational Physics 388, 439-453 (2019). Note that this function does not yet create the product particles, but instead fills an array p_mask that stores which collisions result in a scattering event.

Also note that there are three main differences between this implementation and the algorithm described in Higginson's paper:

  • 1) The transformation from the lab frame to the center of mass frame is nonrelativistic in Higginson's paper. Here, we implement a relativistic generalization.
  • 2) The behaviour when the estimated probability is greater than one is not specified in Higginson's paper. Here, we provide an implementation using two runtime dependent parameters (probability threshold and probability target value). See documentation for more details.
  • 3) Here, we divide the weight of a particle by the number of times it is paired with other particles. This was not explicitly specified in Higginson's paper.
Parameters
[in]I1s,I2sis the start index for I1,I2 (inclusive).
[in]I1e,I2eis the stop index for I1,I2 (exclusive).
[in]I1,I2index arrays. They determine all elements that will be used.
[in]soa_1,soa_2contain the struct of array data of the two species
[in]dtis the time step length between two collision calls.
[in]dVis the volume of the corresponding cell.
[in]coll_idxis the collision number of the cell
[in]cell_start_pairis the start index of the pairs in that cell.
[out]p_maskis a mask that will be set to true if a collision occurs for a given pair. It is only needed here to store information that will be used later on when actually creating the product particles.
[out]p_pair_indices_1,p_pair_indices_2arrays that store the indices of the particles of a given pair. They are only needed here to store information that will be used later on when actually creating the product particles.
[out]p_pair_reaction_weightstores the weight of the product particles. It is only needed here to store information that will be used later on when actually creating the product particles.
[in]enginethe random engine.

Member Data Documentation

◆ m_computeSpeciesDensities

bool LinearComptonCollisionFunc::Executor::m_computeSpeciesDensities = false

◆ m_computeSpeciesTemperatures

bool LinearComptonCollisionFunc::Executor::m_computeSpeciesTemperatures = false

◆ m_event_multiplier

amrex::ParticleReal LinearComptonCollisionFunc::Executor::m_event_multiplier

◆ m_isSameSpecies

bool LinearComptonCollisionFunc::Executor::m_isSameSpecies

◆ m_need_product_data

bool LinearComptonCollisionFunc::Executor::m_need_product_data = false

◆ m_probability_target_value

amrex::ParticleReal LinearComptonCollisionFunc::Executor::m_probability_target_value

◆ m_probability_threshold

amrex::ParticleReal LinearComptonCollisionFunc::Executor::m_probability_threshold

The documentation for this struct was generated from the following file: