WarpX
BoschHaleFusionCrossSection.H
Go to the documentation of this file.
1 /* Copyright 2022 Remi Lehe
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 
8 #ifndef BOSCH_HALE_FUSION_CROSS_SECTION_H
9 #define BOSCH_HALE_FUSION_CROSS_SECTION_H
10 
12 #include "Utils/WarpXConst.H"
13 
14 #include <AMReX_REAL.H>
15 
16 #include <cmath>
17 
27 amrex::ParticleReal BoschHaleFusionCrossSection (
28  const amrex::ParticleReal& E_kin_star,
29  const NuclearFusionType& fusion_type,
30  const amrex::ParticleReal& m1,
31  const amrex::ParticleReal& m2 )
32 {
33  using namespace amrex::literals;
34 
35  constexpr amrex::ParticleReal joule_to_keV = 1.e-3_prt/PhysConst::q_e;
36  const amrex::ParticleReal E_keV = E_kin_star*joule_to_keV;
37 
38  // If kinetic energy is 0, return a 0 cross section and avoid later division by 0.
39  if (E_keV == 0._prt) {return 0._prt;}
40 
41  // Compute the Gamow constant B_G (in keV^{1/2})
42  // (See Eq. 3 in H.-S. Bosch and G.M. Hale 1992 Nucl. Fusion 32 611)
43  const amrex::ParticleReal m_reduced = m1 / (1._prt + m1/m2);
44  // The formula for `B_G` below assumes that both reactants have Z=1
45  // When one of the reactants is helium (Z=2), this formula is corrected further below.
46  amrex::ParticleReal B_G = MathConst::pi * PhysConst::alpha
47  * std::sqrt( 2._prt*m_reduced*PhysConst::c*PhysConst::c * joule_to_keV );
49  // Take into account the fact that Z=2 for one of the reactant (helium) in this case
50  B_G *= 2;
51  }
52 
53  // Compute astrophysical_factor
54  // (See Eq. 9 and Table IV in H.-S. Bosch and G.M. Hale 1992 Nucl. Fusion 32 611)
55  amrex::ParticleReal A1=0_prt, A2=0_prt, A3=0_prt, A4=0_prt, A5=0_prt, B1=0_prt, B2=0_prt, B3=0_prt, B4=0_prt;
57  A1 = 6.927e4_prt;
58  A2 = 7.454e8_prt;
59  A3 = 2.050e6_prt;
60  A4 = 5.2002e4_prt;
61  A5 = 0_prt;
62  B1 = 6.38e1_prt;
63  B2 = -9.95e-1_prt;
64  B3 = 6.981e-5_prt;
65  B4 = 1.728e-4_prt;
66  }
68  A1 = 5.5576e4_prt;
69  A2 = 2.1054e2_prt;
70  A3 = -3.2638e-2_prt;
71  A4 = 1.4987e-6_prt;
72  A5 = 1.8181e-10_prt;
73  B1 = 0_prt;
74  B2 = 0_prt;
75  B3 = 0_prt;
76  B4 = 0_prt;
77  }
79  A1 = 5.3701e4_prt;
80  A2 = 3.3027e2_prt;
81  A3 = -1.2706e-1_prt;
82  A4 = 2.9327e-5_prt;
83  A5 = -2.5151e-9_prt;
84  B1 = 0_prt;
85  B2 = 0_prt;
86  B3 = 0_prt;
87  B4 = 0_prt;
88  }
89  else if (fusion_type == NuclearFusionType::DeuteriumHeliumToProtonHelium) {
90  A1 = 5.7501e6_prt;
91  A2 = 2.5226e3_prt;
92  A3 = 4.5566e1_prt;
93  A4 = 0_prt;
94  A5 = 0_prt;
95  B1 = -3.1995e-3_prt;
96  B2 = -8.5530e-6_prt;
97  B3 = 5.9014e-8_prt;
98  B4 = 0_prt;
99  }
100 
101  amrex::ParticleReal astrophysical_factor =
102  (A1 + E_keV*(A2 + E_keV*(A3 + E_keV*(A4 + E_keV*A5)))) /
103  (1_prt + E_keV*(B1 + E_keV*(B2 + E_keV*(B3 + E_keV*B4))));
104 
105  // Compute cross-section in SI units
106  // (See Eq. 8 in H.-S. Bosch and G.M. Hale 1992 Nucl. Fusion 32 611)
107  constexpr amrex::ParticleReal millibarn_to_sqm = 1.e-31_prt;
108  return millibarn_to_sqm * astrophysical_factor/E_keV * std::exp(-B_G/std::sqrt(E_keV));
109 }
110 
111 #endif // BOSCH_HALE_FUSION_CROSS_SECTION_H
static constexpr auto q_e
elementary charge [C]
Definition: constant.H:50
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
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:27
#define AMREX_GPU_HOST_DEVICE
#define AMREX_INLINE
static constexpr amrex::Real pi
ratio of a circle&#39;s circumference to its diameter
Definition: constant.H:23
NuclearFusionType
Definition: BinaryCollisionUtils.H:22