8#ifndef WARPX_SINGLE_NUCLEAR_FUSION_EVENT_H_
9#define WARPX_SINGLE_NUCLEAR_FUSION_EVENT_H_
52template <
typename index_type>
55 const amrex::ParticleReal& u1z,
const amrex::ParticleReal& u2x,
56 const amrex::ParticleReal& u2y,
const amrex::ParticleReal& u2z,
57 const amrex::ParticleReal& m1,
const amrex::ParticleReal& m2,
58 amrex::ParticleReal w1, amrex::ParticleReal w2,
59 const amrex::Real& dt,
const amrex::ParticleReal& dV,
const int& pair_index,
62 const amrex::ParticleReal& fusion_multiplier,
63 const int& multiplier_ratio,
64 const amrex::ParticleReal& probability_threshold,
65 const amrex::ParticleReal& probability_target_value,
69 amrex::ParticleReal E_coll, v_coll, lab_to_COM_factor;
72 m1*u1x, m1*u1y, m1*u1z, m2*u2x, m2*u2y, m2*u2z, m1, m2,
73 E_coll, v_coll, lab_to_COM_factor);
75 using namespace amrex::literals;
77 const amrex::ParticleReal w_min =
amrex::min(w1, w2);
78 const amrex::ParticleReal w_max =
amrex::max(w1, w2);
81 auto fusion_cross_section = amrex::ParticleReal(0.);
94 amrex::ParticleReal probability_estimate = multiplier_ratio * fusion_multiplier *
95 lab_to_COM_factor * w_max * fusion_cross_section * v_coll * dt / dV;
98 amrex::ParticleReal fusion_multiplier_eff = fusion_multiplier;
103 if (probability_estimate > probability_threshold)
107 fusion_multiplier_eff =
amrex::max(fusion_multiplier *
108 probability_target_value / probability_estimate , 1._prt);
109 probability_estimate *= fusion_multiplier_eff/fusion_multiplier;
117 const amrex::ParticleReal probability = -std::expm1(-probability_estimate);
120 const amrex::ParticleReal random_number =
amrex::Random(engine);
123 if (random_number < probability)
125 p_mask[pair_index] =
true;
126 p_pair_reaction_weight[pair_index] = w_min/fusion_multiplier_eff;
130 p_mask[pair_index] =
false;
#define AMREX_GPU_HOST_DEVICE
NuclearFusionType
Definition BinaryCollisionUtils.H:29
@ ProtonBoronToAlphas
Definition BinaryCollisionUtils.H:34
@ DeuteriumDeuteriumToProtonTritium
Definition BinaryCollisionUtils.H:31
@ DeuteriumDeuteriumToNeutronHelium
Definition BinaryCollisionUtils.H:32
@ DeuteriumTritiumToNeutronHelium
Definition BinaryCollisionUtils.H:30
AMREX_GPU_HOST_DEVICE AMREX_INLINE amrex::ParticleReal BoschHaleFusionCrossSection(const amrex::ParticleReal &E_kin_star, const NuclearFusionType &fusion_type, const amrex::ParticleReal &m1, const amrex::ParticleReal &m2)
Computes the fusion cross section, using the analytical fits given in H.-S. Bosch and G....
Definition BoschHaleFusionCrossSection.H:29
AMREX_GPU_HOST_DEVICE AMREX_INLINE amrex::ParticleReal ProtonBoronFusionCrossSection(const amrex::ParticleReal &E_kin_star)
Computes the total proton-boron fusion cross section using the analytical fit described in A....
Definition ProtonBoronFusionCrossSection.H:139
AMREX_GPU_HOST_DEVICE AMREX_INLINE void SingleNuclearFusionEvent(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, 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 &fusion_multiplier, const int &multiplier_ratio, const amrex::ParticleReal &probability_threshold, const amrex::ParticleReal &probability_target_value, const NuclearFusionType &fusion_type, const amrex::RandomEngine &engine)
This function computes whether the collision between two particles result in a nuclear fusion event,...
Definition SingleNuclearFusionEvent.H:54
AMREX_GPU_HOST_DEVICE AMREX_INLINE void get_collision_parameters(const amrex::ParticleReal &p1x, const amrex::ParticleReal &p1y, const amrex::ParticleReal &p1z, const amrex::ParticleReal &p2x, const amrex::ParticleReal &p2y, const amrex::ParticleReal &p2z, const amrex::ParticleReal &m1, const amrex::ParticleReal &m2, amrex::ParticleReal &E_kin_COM, amrex::ParticleReal &v_rel_COM, amrex::ParticleReal &lab_to_COM_lorentz_factor)
Return (relativistic) collision energy, collision speed and Lorentz factor for transforming between t...
Definition BinaryCollisionUtils.H:53
__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