WarpX
Loading...
Searching...
No Matches
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
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
34 using SoaData_type = WarpXParticleContainer::ParticleTileType::ParticleTileDataType;
35
36public:
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
58 pp_collision_name, "use_global_debye_length", m_use_global_debye_length);
59
60 // default Coulomb log, if < 0, will be computed automatically
61 amrex::ParticleReal CoulombLog = -1.0_prt;
63 pp_collision_name, "CoulombLog", CoulombLog);
64 m_CoulombLog = CoulombLog;
65 m_exe.m_CoulombLog = m_CoulombLog;
66
68 m_exe.m_computeSpeciesTemperatures = true;
69 }
70
71 m_exe.m_isSameSpecies = m_isSameSpecies;
72
73 }
74
75 struct Executor {
96 index_type const I1s, index_type const I1e,
97 index_type const I2s, index_type const I2e,
98 index_type const* AMREX_RESTRICT I1,
99 index_type const* AMREX_RESTRICT I2,
100 const SoaData_type& soa_1, const SoaData_type& soa_2,
101 GetParticlePosition<PIdx> /*get_position_1*/, GetParticlePosition<PIdx> /*get_position_2*/,
102 amrex::ParticleReal const n1, amrex::ParticleReal const n2,
103 amrex::ParticleReal const T1, amrex::ParticleReal const T2,
104 amrex::Real const global_lamdb,
105 amrex::ParticleReal const q1, amrex::ParticleReal const q2,
106 amrex::ParticleReal const m1, amrex::ParticleReal const m2,
107 amrex::Real const dt, amrex::Real const dV, index_type coll_idx,
108 index_type const /*cell_start_pair*/, index_type* /*p_mask*/,
109 index_type* /*p_pair_indices_1*/, index_type* /*p_pair_indices_2*/,
110 amrex::ParticleReal* /*p_pair_reaction_weight*/,
111 amrex::ParticleReal* /*p_product_data*/,
112 amrex::RandomEngine const& engine) const
113 {
114 using namespace amrex::literals;
115
117 I1s, I1e, I2s, I2e, I1, I2,
118 soa_1, soa_2, n1, n2, T1, T2,
119 q1, q2, m1, m2,
120 dt, global_lamdb, m_CoulombLog, dV, engine, m_isSameSpecies, coll_idx);
121 }
122
123 amrex::ParticleReal m_CoulombLog;
128 };
129
130 [[nodiscard]] Executor const& executor () const { return m_exe; }
131
133
134private:
135 amrex::ParticleReal m_CoulombLog;
137
139
141
142};
143
144#endif // WARPX_PAIRWISE_COULOMB_COLLISION_FUNC_H_
#define AMREX_RESTRICT
#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_R const global_lamdb, T_PR const L, T_R const dV, amrex::RandomEngine const &engine, bool const isSameSpecies, T_index coll_idx)
Definition ElasticCollisionPerez.H:44
Definition MultiParticleContainer.H:68
PairWiseCoulombCollisionFunc()=default
Default constructor of the PairWiseCoulombCollisionFunc class.
Executor m_exe
Definition PairWiseCoulombCollisionFunc.H:138
WarpXParticleContainer::ParticleTileType ParticleTileType
Definition PairWiseCoulombCollisionFunc.H:30
amrex::ParticleReal m_CoulombLog
Definition PairWiseCoulombCollisionFunc.H:135
ParticleTileType::ParticleTileDataType ParticleTileDataType
Definition PairWiseCoulombCollisionFunc.H:31
ParticleBins::index_type index_type
Definition PairWiseCoulombCollisionFunc.H:33
WarpXParticleContainer::ParticleTileType::ParticleTileDataType SoaData_type
Definition PairWiseCoulombCollisionFunc.H:34
Executor const & executor() const
Definition PairWiseCoulombCollisionFunc.H:130
amrex::DenseBins< ParticleTileDataType > ParticleBins
Definition PairWiseCoulombCollisionFunc.H:32
WarpXParticleContainer::ParticleType ParticleType
Definition PairWiseCoulombCollisionFunc.H:29
bool m_use_global_debye_length
Definition PairWiseCoulombCollisionFunc.H:140
bool use_global_debye_length()
Definition PairWiseCoulombCollisionFunc.H:132
bool m_isSameSpecies
Definition PairWiseCoulombCollisionFunc.H:136
PairWiseCoulombCollisionFunc(const std::string &collision_name, MultiParticleContainer const *const mypc, const bool isSameSpecies)
Constructor of the PairWiseCoulombCollisionFunc class.
Definition PairWiseCoulombCollisionFunc.H:49
int queryWithParser(const amrex::ParmParse &a_pp, char const *const str, T &val)
Definition ParserUtils.H:102
Functor that can be used to extract the positions of the macroparticles inside a ParallelFor kernel.
Definition GetAndSetPosition.H:75
Definition PairWiseCoulombCollisionFunc.H:75
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::Real const global_lamdb, 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::ParticleReal *, amrex::RandomEngine const &engine) const
Executor of the PairWiseCoulombCollisionFunc class. Performs Coulomb collisions at the cell level by ...
Definition PairWiseCoulombCollisionFunc.H:95
bool m_need_product_data
Definition PairWiseCoulombCollisionFunc.H:126
bool m_isSameSpecies
Definition PairWiseCoulombCollisionFunc.H:127
amrex::ParticleReal m_CoulombLog
Definition PairWiseCoulombCollisionFunc.H:123
bool m_computeSpeciesDensities
Definition PairWiseCoulombCollisionFunc.H:124
bool m_computeSpeciesTemperatures
Definition PairWiseCoulombCollisionFunc.H:125
ParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ParticleTileDataType