WarpX
PairWiseCoulombCollisionFunc.H
Go to the documentation of this file.
1 /* Copyright 2021 Neil Zaim
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 
8 #ifndef WARPX_PAIRWISE_COULOMB_COLLISION_FUNC_H_
9 #define WARPX_PAIRWISE_COULOMB_COLLISION_FUNC_H_
10 
11 #include "ElasticCollisionPerez.H"
15 
16 #include <AMReX_DenseBins.H>
17 #include <AMReX_ParmParse.H>
18 #include <AMReX_Random.H>
19 #include <AMReX_REAL.H>
20 
21 
27 {
28  // Define shortcuts for frequently-used type names
35 
36 public:
41 
49  PairWiseCoulombCollisionFunc (const std::string& collision_name,
50  [[maybe_unused]] MultiParticleContainer const * const mypc,
51  const bool isSameSpecies):
52  m_isSameSpecies{isSameSpecies}
53  {
54  using namespace amrex::literals;
55  const amrex::ParmParse pp_collision_name(collision_name);
56  // default Coulomb log, if < 0, will be computed automatically
57  amrex::ParticleReal CoulombLog = -1.0_prt;
59  pp_collision_name, "CoulombLog", CoulombLog);
60  m_CoulombLog = CoulombLog;
61 
65  }
66 
67  struct Executor {
87  index_type const I1s, index_type const I1e,
88  index_type const I2s, index_type const I2e,
89  index_type const* AMREX_RESTRICT I1,
90  index_type const* AMREX_RESTRICT I2,
91  const SoaData_type& soa_1, const SoaData_type& soa_2,
92  GetParticlePosition<PIdx> /*get_position_1*/, GetParticlePosition<PIdx> /*get_position_2*/,
93  amrex::ParticleReal const n1, amrex::ParticleReal const n2,
94  amrex::ParticleReal const T1, amrex::ParticleReal const T2,
95  amrex::ParticleReal const q1, amrex::ParticleReal const q2,
96  amrex::ParticleReal const m1, amrex::ParticleReal const m2,
97  amrex::Real const dt, amrex::Real const dV, index_type coll_idx,
98  index_type const /*cell_start_pair*/, index_type* /*p_mask*/,
99  index_type* /*p_pair_indices_1*/, index_type* /*p_pair_indices_2*/,
100  amrex::ParticleReal* /*p_pair_reaction_weight*/,
101  amrex::RandomEngine const& engine) const
102  {
103  using namespace amrex::literals;
104 
106  I1s, I1e, I2s, I2e, I1, I2,
107  soa_1, soa_2, n1, n2, T1, T2,
108  q1, q2, m1, m2,
109  dt, m_CoulombLog, dV, engine, m_isSameSpecies, coll_idx);
110  }
111 
112  amrex::ParticleReal m_CoulombLog;
116  };
117 
118  [[nodiscard]] Executor const& executor () const { return m_exe; }
119 
120 private:
121  amrex::ParticleReal m_CoulombLog;
123 
125 };
126 
127 #endif // WARPX_PAIRWISE_COULOMB_COLLISION_FUNC_H_
#define AMREX_INLINE
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_INLINE void ElasticCollisionPerez(T_index const I1s, T_index const I1e, T_index const I2s, T_index const I2e, T_index const *AMREX_RESTRICT I1, T_index const *AMREX_RESTRICT I2, SoaData_type soa_1, SoaData_type soa_2, T_PR const n1, T_PR const n2, T_PR const T1, T_PR const T2, T_PR const q1, T_PR const q2, T_PR const m1, T_PR const m2, T_R const dt, T_PR const L, T_R const dV, amrex::RandomEngine const &engine, bool const isSameSpecies, T_index coll_idx)
Definition: ElasticCollisionPerez.H:41
Definition: MultiParticleContainer.H:66
This functor performs pairwise Coulomb collision on a single cell by calling the function ElasticColl...
Definition: PairWiseCoulombCollisionFunc.H:27
PairWiseCoulombCollisionFunc()=default
Default constructor of the PairWiseCoulombCollisionFunc class.
Executor m_exe
Definition: PairWiseCoulombCollisionFunc.H:124
amrex::ParticleReal m_CoulombLog
Definition: PairWiseCoulombCollisionFunc.H:121
ParticleBins::index_type index_type
Definition: PairWiseCoulombCollisionFunc.H:33
WarpXParticleContainer::ParticleType ParticleType
Definition: PairWiseCoulombCollisionFunc.H:29
Executor const & executor() const
Definition: PairWiseCoulombCollisionFunc.H:118
PairWiseCoulombCollisionFunc(const std::string &collision_name, [[maybe_unused]] MultiParticleContainer const *const mypc, const bool isSameSpecies)
Constructor of the PairWiseCoulombCollisionFunc class.
Definition: PairWiseCoulombCollisionFunc.H:49
bool m_isSameSpecies
Definition: PairWiseCoulombCollisionFunc.H:122
ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
float dt
Definition: stencil.py:442
int queryWithParser(const amrex::ParmParse &a_pp, char const *const str, T &val)
Definition: ParserUtils.H:137
Definition: PairWiseCoulombCollisionFunc.H:67
bool m_isSameSpecies
Definition: PairWiseCoulombCollisionFunc.H:115
amrex::ParticleReal m_CoulombLog
Definition: PairWiseCoulombCollisionFunc.H:112
bool m_computeSpeciesDensities
Definition: PairWiseCoulombCollisionFunc.H:113
bool m_computeSpeciesTemperatures
Definition: PairWiseCoulombCollisionFunc.H:114
AMREX_GPU_HOST_DEVICE AMREX_INLINE void operator()(index_type const I1s, index_type const I1e, index_type const I2s, index_type const I2e, index_type const *AMREX_RESTRICT I1, index_type const *AMREX_RESTRICT I2, const SoaData_type &soa_1, const SoaData_type &soa_2, GetParticlePosition< PIdx >, GetParticlePosition< PIdx >, amrex::ParticleReal const n1, amrex::ParticleReal const n2, amrex::ParticleReal const T1, amrex::ParticleReal const T2, amrex::ParticleReal const q1, amrex::ParticleReal const q2, amrex::ParticleReal const m1, amrex::ParticleReal const m2, amrex::Real const dt, amrex::Real const dV, index_type coll_idx, index_type const, index_type *, index_type *, index_type *, amrex::ParticleReal *, amrex::RandomEngine const &engine) const
Executor of the PairWiseCoulombCollisionFunc class. Performs Coulomb collisions at the cell level by ...
Definition: PairWiseCoulombCollisionFunc.H:86
ParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ParticleTileDataType