aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/Collision/BinaryCollision
diff options
context:
space:
mode:
authorGravatar Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> 2022-05-05 00:08:17 +0200
committerGravatar GitHub <noreply@github.com> 2022-05-04 15:08:17 -0700
commit331485dcb3d65ce18cfe3668f4360ade56b8f6d9 (patch)
tree428bacd93d842a5d0ca55c3cc0e134db924ab653 /Source/Particles/Collision/BinaryCollision
parent9788bbf18ca67af0c394b008a48f4deb053afa8f (diff)
downloadWarpX-331485dcb3d65ce18cfe3668f4360ade56b8f6d9.tar.gz
WarpX-331485dcb3d65ce18cfe3668f4360ade56b8f6d9.tar.zst
WarpX-331485dcb3d65ce18cfe3668f4360ade56b8f6d9.zip
Nuclear fusion: remove underflow warning in single precision (#3058)
* Nuclear fusion: remove underflow warning in single precision * Explicitly set underflowing constexprs as double * Also set alpha and beryllium masses as doubles
Diffstat (limited to 'Source/Particles/Collision/BinaryCollision')
-rw-r--r--Source/Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H22
1 files changed, 8 insertions, 14 deletions
diff --git a/Source/Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H b/Source/Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H
index 2fe2abb92..4ff93b285 100644
--- a/Source/Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H
+++ b/Source/Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H
@@ -77,8 +77,14 @@ namespace {
// cf. JEFF-3.3 radioactive decay data library (2017)
constexpr amrex::ParticleReal E_decay = 0.0918984_prt*mev_to_joule;
- constexpr amrex::ParticleReal m_alpha = PhysConst::m_p * 3.97369_prt;
- constexpr amrex::ParticleReal m_beryllium = PhysConst::m_p * 7.94748_prt;
+ // The constexprs ma_sq and mBe_sq underflow in single precision because we use SI units,
+ // which can cause compilation to fail or generate a warning, so we're explicitly setting
+ // them as double. Note that nuclear fusion module does not currently work with single
+ // precision anyways.
+ constexpr double m_alpha = PhysConst::m_p * 3.97369_prt;
+ constexpr double m_beryllium = PhysConst::m_p * 7.94748_prt;
+ constexpr double ma_sq = m_alpha*m_alpha;
+ constexpr double mBe_sq = m_beryllium*m_beryllium;
constexpr amrex::ParticleReal c_sq = PhysConst::c * PhysConst::c;
constexpr amrex::ParticleReal inv_csq = 1._prt / ( c_sq );
// Rest energy of proton+boron
@@ -86,18 +92,6 @@ namespace {
// Rest energy of alpha+beryllium
constexpr amrex::ParticleReal E_rest_abe = (m_alpha + m_beryllium)*c_sq;
- // These constexprs underflow in single precision because we use SI units and sometimes the
- // code won't compile. Nuclear fusion module does not currently work with single precision
- // anyways so these #ifdef are just here to make sure that the code always compiles with
- // single precision.
-#ifdef AMREX_SINGLE_PRECISION_PARTICLES
- const amrex::ParticleReal ma_sq = m_alpha*m_alpha;
- const amrex::ParticleReal mBe_sq = m_beryllium*m_beryllium;
-#else
- constexpr amrex::ParticleReal ma_sq = m_alpha*m_alpha;
- constexpr amrex::ParticleReal mBe_sq = m_beryllium*m_beryllium;
-#endif
-
// Normalized momentum of colliding particles (proton and boron)
const amrex::ParticleReal u1x = soa_1.m_rdata[PIdx::ux][idx_1];
const amrex::ParticleReal u1y = soa_1.m_rdata[PIdx::uy][idx_1];