aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H')
-rw-r--r--Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H24
1 files changed, 24 insertions, 0 deletions
diff --git a/Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H b/Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H
index 6a8387eef..510c59094 100644
--- a/Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H
+++ b/Source/Particles/Collision/BinaryCollision/ParticleCreationFunc.H
@@ -10,6 +10,7 @@
#include "BinaryCollisionUtils.H"
+#include "Particles/Collision/BinaryCollision/NuclearFusion/TwoProductFusionInitializeMomentum.H"
#include "Particles/Collision/BinaryCollision/NuclearFusion/ProtonBoronFusionInitializeMomentum.H"
#include "Particles/ParticleCreation/SmartCopy.H"
#include "Particles/MultiParticleContainer.H"
@@ -77,6 +78,7 @@ public:
* reaches 0.
* @param[in] m1 mass of the first colliding particle species
* @param[in] m2 mass of the second colliding particle species
+ * @param[in] products_mass array storing the mass of product particles
* @param[in] p_mask a mask that is 1 if binary collision has resulted in particle creation
* event, 0 otherwise.
* @param[in] products_np array storing the number of existing product particles in that tile
@@ -102,6 +104,7 @@ public:
ParticleTileType** AMREX_RESTRICT tile_products,
ParticleType* particle_ptr_1, ParticleType* particle_ptr_2,
const amrex::ParticleReal& m1, const amrex::ParticleReal& m2,
+ const amrex::Vector<amrex::ParticleReal>& products_mass,
const index_type* AMREX_RESTRICT p_mask,
const amrex::Vector<index_type>& products_np,
const SmartCopy* AMREX_RESTRICT copy_species1,
@@ -142,18 +145,24 @@ public:
#ifdef AMREX_USE_GPU
amrex::Gpu::DeviceVector<SoaData_type> device_soa_products(m_num_product_species);
amrex::Gpu::DeviceVector<index_type> device_products_np(m_num_product_species);
+ amrex::Gpu::DeviceVector<amrex::ParticleReal> device_products_mass(m_num_product_species);
amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, soa_products.begin(),
soa_products.end(),
device_soa_products.begin());
amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, products_np.begin(),
products_np.end(),
device_products_np.begin());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, products_mass.begin(),
+ products_mass.end(),
+ device_products_mass.begin());
amrex::Gpu::streamSynchronize();
SoaData_type* AMREX_RESTRICT soa_products_data = device_soa_products.data();
const index_type* AMREX_RESTRICT products_np_data = device_products_np.data();
+ const amrex::ParticleReal* AMREX_RESTRICT products_mass_data = device_products_mass.data();
#else
SoaData_type* AMREX_RESTRICT soa_products_data = soa_products.data();
const index_type* AMREX_RESTRICT products_np_data = products_np.data();
+ const amrex::ParticleReal* AMREX_RESTRICT products_mass_data = products_mass.data();
#endif
const int t_num_product_species = m_num_product_species;
@@ -216,6 +225,20 @@ public:
p_pair_indices_1[i], p_pair_indices_2[i],
product_start_index, m1, m2, engine);
}
+ else if (t_collision_type == CollisionType::DeuteriumTritiumFusion)
+ {
+ amrex::ParticleReal fusion_energy = 0.0_prt;
+ if (t_collision_type == CollisionType::DeuteriumTritiumFusion) {
+ fusion_energy = 17.5893e6_prt * PhysConst::q_e; // 17.6 MeV
+ }
+ TwoProductFusionInitializeMomentum(soa_1, soa_2,
+ soa_products_data[0], soa_products_data[1],
+ p_pair_indices_1[i], p_pair_indices_2[i],
+ products_np_data[0] + 2*p_offsets[i]*p_num_products_device[0],
+ products_np_data[1] + 2*p_offsets[i]*p_num_products_device[1],
+ m1, m2, products_mass_data[0], products_mass_data[1], fusion_energy, engine);
+ }
+
}
});
@@ -260,6 +283,7 @@ public:
ParticleTileType** /*tile_products*/,
ParticleType* /*particle_ptr_1*/, ParticleType* /*particle_ptr_2*/,
const amrex::ParticleReal& /*m1*/, const amrex::ParticleReal& /*m2*/,
+ const amrex::Vector<amrex::ParticleReal>& /*products_mass*/,
const index_type* /*p_mask*/, const amrex::Vector<index_type>& /*products_np*/,
const SmartCopy* /*copy_species1*/, const SmartCopy* /*copy_species2*/,
const index_type* /*p_pair_indices_1*/, const index_type* /*p_pair_indices_2*/,