aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/Collision
diff options
context:
space:
mode:
authorGravatar David Grote <grote1@llnl.gov> 2022-03-10 13:21:32 -0800
committerGravatar GitHub <noreply@github.com> 2022-03-10 13:21:32 -0800
commit96cefab7f9ad96159908f49bdf788ff8ad6f7ac3 (patch)
treeccb018ec45979b55e63e5f63a775360d36ed1eab /Source/Particles/Collision
parentda837aaffd1d2fbce14a6bea4a3a38331a56df72 (diff)
downloadWarpX-96cefab7f9ad96159908f49bdf788ff8ad6f7ac3.tar.gz
WarpX-96cefab7f9ad96159908f49bdf788ff8ad6f7ac3.tar.zst
WarpX-96cefab7f9ad96159908f49bdf788ff8ad6f7ac3.zip
Clean up the use of ndt for collisions (#2944)
* Clean up the use of ndt for collisions * Update BackgroundStopping to match changes
Diffstat (limited to 'Source/Particles/Collision')
-rw-r--r--Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.H3
-rw-r--r--Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.cpp9
-rw-r--r--Source/Particles/Collision/BackgroundStopping/BackgroundStopping.H3
-rw-r--r--Source/Particles/Collision/BackgroundStopping/BackgroundStopping.cpp7
-rw-r--r--Source/Particles/Collision/BinaryCollision/BinaryCollision.H16
-rw-r--r--Source/Particles/Collision/CollisionBase.H5
-rw-r--r--Source/Particles/Collision/CollisionHandler.H2
-rw-r--r--Source/Particles/Collision/CollisionHandler.cpp7
8 files changed, 24 insertions, 28 deletions
diff --git a/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.H b/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.H
index ff447c407..e4ad27d04 100644
--- a/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.H
+++ b/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.H
@@ -32,10 +32,11 @@ public:
/** Perform the collisions
*
* @param cur_time Current time
+ * @param dt Time step size
* @param mypc Container of species involved
*
*/
- void doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc) override;
+ void doCollisions (amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc) override;
/** Perform particle conserving MCC collisions within a tile
*
diff --git a/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.cpp b/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.cpp
index 615fb9418..a7cc00be5 100644
--- a/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.cpp
+++ b/Source/Particles/Collision/BackgroundMCC/BackgroundMCCCollision.cpp
@@ -181,14 +181,11 @@ BackgroundMCCCollision::get_nu_max(amrex::Vector<MCCProcess> const& mcc_processe
}
void
-BackgroundMCCCollision::doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc)
+BackgroundMCCCollision::doCollisions (amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc)
{
WARPX_PROFILE("BackgroundMCCCollision::doCollisions()");
using namespace amrex::literals;
- const amrex::Real dt = WarpX::GetInstance().getdt(0);
- if ( int(std::floor(cur_time/dt)) % m_ndt != 0 ) return;
-
auto& species1 = mypc->GetParticleContainerFromName(m_species_names[0]);
// this is a very ugly hack to have species2 be a reference and be
// defined in the scope of doCollisions
@@ -205,7 +202,7 @@ BackgroundMCCCollision::doCollisions (amrex::Real cur_time, MultiParticleContain
m_nu_max = get_nu_max(m_scattering_processes);
// calculate total collision probability
- auto coll_n = m_nu_max * m_ndt * dt;
+ auto coll_n = m_nu_max * dt;
m_total_collision_prob = 1.0_rt - std::exp(-coll_n);
// dt has to be small enough that a linear expansion of the collision
@@ -220,7 +217,7 @@ BackgroundMCCCollision::doCollisions (amrex::Real cur_time, MultiParticleContain
m_nu_max_ioniz = get_nu_max(m_ionization_processes);
// calculate total ionization probability
- auto coll_n_ioniz = m_nu_max_ioniz * m_ndt * dt;
+ auto coll_n_ioniz = m_nu_max_ioniz * dt;
m_total_collision_prob_ioniz = 1.0_rt - std::exp(-coll_n_ioniz);
WARPX_ALWAYS_ASSERT_WITH_MESSAGE(coll_n_ioniz < 0.1_rt,
diff --git a/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.H b/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.H
index 698943918..56538102f 100644
--- a/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.H
+++ b/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.H
@@ -31,10 +31,11 @@ public:
/** Perform the stopping calculation
*
* @param cur_time Current time
+ * @param dt Time step size
* @param mypc Container of species involved
*
*/
- void doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc) override;
+ void doCollisions (amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc) override;
/** Perform the stopping calculation within a tile for stopping on electrons
*
diff --git a/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.cpp b/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.cpp
index dd51a3d0d..a970c490f 100644
--- a/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.cpp
+++ b/Source/Particles/Collision/BackgroundStopping/BackgroundStopping.cpp
@@ -75,16 +75,11 @@ BackgroundStopping::BackgroundStopping (std::string const collision_name)
}
void
-BackgroundStopping::doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc)
+BackgroundStopping::doCollisions (amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc)
{
WARPX_PROFILE("BackgroundStopping::doCollisions()");
using namespace amrex::literals;
- // Note that the lowest level time step is used for all levels since the
- // collision operation will be done only once per step at the lowest level.
- const amrex::Real dt = WarpX::GetInstance().getdt(0) * m_ndt;
- if (int(std::floor(cur_time/dt)) % m_ndt != 0) return;
-
auto& species = mypc->GetParticleContainerFromName(m_species_names[0]);
amrex::Real species_mass = species.getMass();
amrex::Real species_charge = species.getCharge();
diff --git a/Source/Particles/Collision/BinaryCollision/BinaryCollision.H b/Source/Particles/Collision/BinaryCollision/BinaryCollision.H
index 217547cf9..fd33c0ff4 100644
--- a/Source/Particles/Collision/BinaryCollision/BinaryCollision.H
+++ b/Source/Particles/Collision/BinaryCollision/BinaryCollision.H
@@ -107,13 +107,12 @@ public:
/** Perform the collisions
*
* @param cur_time Current time
+ * @param dt Time step size
* @param mypc Container of species involved
*
*/
- void doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc) override
+ void doCollisions (amrex::Real /*cur_time*/, amrex::Real dt, MultiParticleContainer* mypc) override
{
- const amrex::Real dt = WarpX::GetInstance().getdt(0);
- if ( int(std::floor(cur_time/dt)) % m_ndt != 0 ) return;
auto& species1 = mypc->GetParticleContainerFromName(m_species_names[0]);
auto& species2 = mypc->GetParticleContainerFromName(m_species_names[1]);
@@ -178,7 +177,7 @@ public:
}
amrex::Real wt = amrex::second();
- doCollisionsWithinTile( lev, mfi, species1, species2, product_species_vector,
+ doCollisionsWithinTile( dt, lev, mfi, species1, species2, product_species_vector,
copy_species1_data, copy_species2_data);
if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers)
@@ -203,7 +202,7 @@ public:
*
*/
void doCollisionsWithinTile (
- int const lev, amrex::MFIter const& mfi,
+ amrex::Real dt, int const lev, amrex::MFIter const& mfi,
WarpXParticleContainer& species_1,
WarpXParticleContainer& species_2,
amrex::Vector<WarpXParticleContainer*> product_species_vector,
@@ -212,7 +211,6 @@ public:
using namespace ParticleUtils;
using namespace amrex::literals;
- int const ndt = m_ndt;
CollisionFunctorType binary_collision_functor = m_binary_collision_functor;
const bool have_product_species = m_have_product_species;
@@ -255,7 +253,6 @@ public:
ParticleType * AMREX_RESTRICT
particle_ptr_1 = ptile_1.GetArrayOfStructs()().data();
- const amrex::Real dt = WarpX::GetInstance().getdt(lev);
amrex::Geometry const& geom = WarpX::GetInstance().Geom(lev);
#if defined WARPX_DIM_1D_Z
auto dV = geom.CellSize(0);
@@ -350,7 +347,7 @@ public:
cell_half_1, cell_stop_1,
indices_1, indices_1,
soa_1, soa_1, get_position_1, get_position_1,
- q1, q1, m1, m1, dt*ndt, dV,
+ q1, q1, m1, m1, dt, dV,
cell_start_pair, p_mask, p_pair_indices_1, p_pair_indices_2,
p_pair_reaction_weight, engine );
}
@@ -406,7 +403,6 @@ public:
ParticleType * AMREX_RESTRICT
particle_ptr_2 = ptile_2.GetArrayOfStructs()().data();
- const amrex::Real dt = WarpX::GetInstance().getdt(lev);
amrex::Geometry const& geom = WarpX::GetInstance().Geom(lev);
#if defined WARPX_DIM_1D_Z
auto dV = geom.CellSize(0);
@@ -511,7 +507,7 @@ public:
cell_start_1, cell_stop_1, cell_start_2, cell_stop_2,
indices_1, indices_2,
soa_1, soa_2, get_position_1, get_position_2,
- q1, q2, m1, m2, dt*ndt, dV,
+ q1, q2, m1, m2, dt, dV,
cell_start_pair, p_mask, p_pair_indices_1, p_pair_indices_2,
p_pair_reaction_weight, engine );
}
diff --git a/Source/Particles/Collision/CollisionBase.H b/Source/Particles/Collision/CollisionBase.H
index 3d79857e0..517f5e414 100644
--- a/Source/Particles/Collision/CollisionBase.H
+++ b/Source/Particles/Collision/CollisionBase.H
@@ -20,13 +20,16 @@ public:
CollisionBase (std::string collision_name);
- virtual void doCollisions (amrex::Real /*cur_time*/, MultiParticleContainer* /*mypc*/ ){}
+ virtual void doCollisions (amrex::Real /*cur_time*/, amrex::Real /*dt*/, MultiParticleContainer* /*mypc*/ ){}
CollisionBase(CollisionBase const &) = delete;
CollisionBase(CollisionBase &&) = delete;
CollisionBase & operator=(CollisionBase const &) = delete;
virtual ~CollisionBase() = default;
+
+ int get_ndt() {return m_ndt;}
+
protected:
amrex::Vector<std::string> m_species_names;
diff --git a/Source/Particles/Collision/CollisionHandler.H b/Source/Particles/Collision/CollisionHandler.H
index 41a7a0696..7adc15dec 100644
--- a/Source/Particles/Collision/CollisionHandler.H
+++ b/Source/Particles/Collision/CollisionHandler.H
@@ -26,7 +26,7 @@ public:
CollisionHandler (MultiParticleContainer const * const mypc);
/* Perform all of the collisions */
- void doCollisions (amrex::Real cur_time, MultiParticleContainer* mypc);
+ void doCollisions (amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc);
private:
diff --git a/Source/Particles/Collision/CollisionHandler.cpp b/Source/Particles/Collision/CollisionHandler.cpp
index 0c5304823..cc8d8eb4a 100644
--- a/Source/Particles/Collision/CollisionHandler.cpp
+++ b/Source/Particles/Collision/CollisionHandler.cpp
@@ -71,11 +71,14 @@ CollisionHandler::CollisionHandler(MultiParticleContainer const * const mypc)
* @param mypc MultiParticleContainer calling this method
*
*/
-void CollisionHandler::doCollisions ( amrex::Real cur_time, MultiParticleContainer* mypc)
+void CollisionHandler::doCollisions ( amrex::Real cur_time, amrex::Real dt, MultiParticleContainer* mypc)
{
for (auto& collision : allcollisions) {
- collision->doCollisions(cur_time, mypc);
+ int const ndt = collision->get_ndt();
+ if ( int(std::floor(cur_time/dt)) % ndt == 0 ) {
+ collision->doCollisions(cur_time, dt*ndt, mypc);
+ }
}
}