chombo-discharge
Loading...
Searching...
No Matches
CD_ItoKMCPhysics.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2021 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
12#ifndef CD_ItoKMCPhysics_H
13#define CD_ItoKMCPhysics_H
14
15// Std includes
16#include <memory>
17#include <vector>
18
19// Chombo includes
20#include <RealVect.H>
21#include <RefCountedPtr.H>
22#include <List.H>
23
24// Our includes
25#include <CD_ItoSpecies.H>
26#include <CD_CdrSpecies.H>
27#include <CD_RtSpecies.H>
28#include <CD_Photon.H>
29#include <CD_ItoParticle.H>
30#include <CD_PointParticle.H>
33#include <CD_KMCDualState.H>
35#include <CD_KMCSolver.H>
36#include <CD_NamespaceHeader.H>
37
38namespace Physics {
39 namespace ItoKMC {
40
44 using FPR = Real;
45
50
55
60
65
71 {
72 Ito,
73 CDR
74 };
75
82 {
83 public:
87 inline ItoKMCPhysics() noexcept;
88
92 inline virtual ~ItoKMCPhysics() noexcept;
93
97 inline void
98 defineKMC() const noexcept;
99
103 inline void
104 killKMC() const noexcept;
105
111 virtual Real
112 getNeutralDensity(const RealVect a_pos) const noexcept = 0;
113
120 virtual Real
121 computeAlpha(const Real a_E, const RealVect a_x) const = 0;
122
129 virtual Real
130 computeEta(const Real a_E, const RealVect a_x) const = 0;
131
137 getItoSpecies() const;
138
144 getCdrSpecies() const;
145
151 getRtSpecies() const;
152
158
162 virtual Vector<std::string>
164
181
185 virtual int
187
191 inline int
193
197 inline int
199
203 inline int
205
209 inline int
211
215 virtual bool
217
221 inline const std::map<int, std::pair<SpeciesType, int>>&
223
227 inline virtual void
229
237
247
257
280 virtual void
297
311 inline void
322
340 inline void
353
369 inline void
380
388 inline void
392
393 protected:
399 {
400 SSA,
401 ExplicitEuler,
402 Midpoint,
403 PRC,
404 ImplicitEuler,
405 HybridExplicitEuler,
406 HybridMidpoint,
407 HybridPRC,
408 HybridImplicitEuler
409 };
410
415 {
416 Random,
417 Centroid,
418 Downstream
419 };
420
425
430
435
440
445
450
455
459 static thread_local bool m_hasKMCSolver;
460
464 static thread_local KMCSolverType m_kmcSolver;
465
469 static thread_local KMCState m_kmcState;
470
477
482
487
492
500
505
510
515
520
525
532
537
542
548
554
559
565
571
576
580 inline void
582
587 inline void
589
593 inline void
595
599 inline void
601
605 inline void
607
611 inline void
613
626 virtual void
635
642 inline void
644
660 inline bool
662 RealVect& a_lo,
663 RealVect& a_hi,
664 const int& a_Z,
669
678
687
696 };
697 } // namespace ItoKMC
698} // namespace Physics
699
700#include <CD_NamespaceFooter.H>
701
703
704#endif
Declaration of a class that passes information into CdrSolver (e.g., initial conditions).
Declaration of a class for holding photoionization reaction types in ito_plasma physics.
Implementation of CD_ItoKMCPhysics.H.
Real FPR
Numerical representation of the KMC state. Can be floating-point or integer type.
Definition CD_ItoKMCPhysics.H:44
SpeciesType
Map to species type.
Definition CD_ItoKMCPhysics.H:71
std::function< RealVect(const ItoParticle &p, const Real &a_dt)> DiffusionFunction
Basic function for diffusing a particle.
Definition CD_ItoKMCPhysics.H:64
Declaration of a class that encapsulates a set of secondary emission reactions.
Declaration of a particle class for Ito diffusion.
Declaration of an ItoSpecies class that passes in names and initial data to ItoSolvers.
Declaration of a simple plasma reaction type for Kinetic Monte Carlo.
Declaration of a simple state vector for running Kinetic Monte Carlo for plasma problems.
Class for running Kinetic Monte Carlo functionality.
Declaration of a photon class for particle methods.
Declaration of a computational point particle.
Declaration of a class which supplies a user interface to radiative transfer code.
A particle class for use with ItoSolvers, i.e. drifting Brownian walkers.
Definition CD_ItoParticle.H:40
Reaction type for advancing a KMCDualState for Kinetic Monte Carlo.
Definition CD_KMCDualStateReaction.H:33
Particle class for usage with Monte Carlo radiative transfer.
Definition CD_Photon.H:29
Base class for interaction between Kinetic Monte Carlo and Ito-based plasma solvers.
Definition CD_ItoKMCPhysics.H:82
int m_maxNewParticles
Maximum new number of particles generated by the chemistry advance.
Definition CD_ItoKMCPhysics.H:536
void reconcilePhotons(Vector< List< Photon > * > &a_newPhotons, const Vector< FPR > &a_numNewPhotons, const RealVect a_cellPos, const RealVect a_centroidPos, const RealVect a_lo, const RealVect a_hi, const RealVect a_bndryCentroid, const RealVect a_bndryNormal, const Real a_dx, const Real a_kappa) const noexcept
Generate new photons.
Definition CD_ItoKMCPhysicsImplem.H:780
int m_NSSA
Solver setting for the Cao et. al algorithm.
Definition CD_ItoKMCPhysics.H:553
bool m_incrementNewParticles
If true, increment onto existing particles rather than creating new ones.
Definition CD_ItoKMCPhysics.H:454
Vector< RefCountedPtr< RtSpecies > > m_rtSpecies
List of solver-tracked photon species.
Definition CD_ItoKMCPhysics.H:524
int m_downstreamSpecies
An internal integer describing which species is the "ionizing" species.
Definition CD_ItoKMCPhysics.H:531
virtual void updateReactionRates(std::vector< std::shared_ptr< const KMCReaction > > &a_kmcReactions, const RealVect a_E, const RealVect a_pos, const Vector< Real > &a_phi, const Vector< RealVect > &a_gradPhi, const Real a_dt, const Real a_dx, const Real a_kappa) const noexcept=0
Update reaction rates.
RealVect forwardIsotropicDiffusion(const ItoParticle &a_particle, const Real a_dt) const noexcept
Quasi-isotropic diffusion function for a particle which does not permit backward diffusion.
Definition CD_ItoKMCPhysicsImplem.H:877
Vector< DiffusionFunction > m_itoDiffusionFunctions
Diffusion functions for the various Ito species.
Definition CD_ItoKMCPhysics.H:509
Real m_eps
Solver setting for the Cao et. al. algorithm.
Definition CD_ItoKMCPhysics.H:570
bool m_debug
Turn on/off debugging.
Definition CD_ItoKMCPhysics.H:444
void reconcilePhotoionization(Vector< List< ItoParticle > * > &a_itoParticles, Vector< List< PointParticle > * > &a_cdrParticles, const Vector< List< Photon > * > &a_absorbedPhotons) const noexcept
Reconcile photoionization reactions.
Definition CD_ItoKMCPhysicsImplem.H:813
std::vector< Real > m_reactiveDtFactors
List of reactions that are a part of the time step limitation.
Definition CD_ItoKMCPhysics.H:491
virtual Vector< Real > getPlotVariables(const RealVect a_E, const RealVect a_pos, const Vector< Real > &a_phi, const Vector< RealVect > &a_gradPhi, const Real a_dx, const Real a_kappa) const noexcept
Get plot variables.
Definition CD_ItoKMCPhysics.cpp:35
int m_maxNewPhotons
Maximum new number of photons generated by the chemistry advance.
Definition CD_ItoKMCPhysics.H:541
void defineKMC() const noexcept
Define the KMC solver and state.
Definition CD_ItoKMCPhysicsImplem.H:109
RealVect isotropicDiffusion(const ItoParticle &a_particle, const Real a_dt) const noexcept
Isotropic diffusion function for a particle.
Definition CD_ItoKMCPhysicsImplem.H:865
void advanceKMC(Vector< FPR > &a_numParticles, Vector< FPR > &a_numNewPhotons, Real &a_physicsDt, const Vector< Real > &a_phi, const Vector< RealVect > &a_gradPhi, const Real a_dt, const RealVect a_E, const RealVect a_pos, const Real a_dx, const Real a_kappa) const
Advance the reaction network using the KMC algorithm.
Definition CD_ItoKMCPhysicsImplem.H:339
std::string m_className
Class name. Used for options parsing.
Definition CD_ItoKMCPhysics.H:439
bool computeUpstreamPosition(RealVect &a_pos, RealVect &a_lo, RealVect &a_hi, const int &a_Z, const List< ItoParticle > &a_particles, const RealVect &a_electricField, const RealVect &a_cellPos, const Real &a_dx) const noexcept
Compute the upstream position in a grid cell. Returns false if an upstream position was undefinable.
Definition CD_ItoKMCPhysicsImplem.H:657
const Vector< DiffusionFunction > & getItoDiffusionFunctions() const noexcept
Get diffusion functions.
Definition CD_ItoKMCPhysicsImplem.H:303
std::vector< ItoKMCPhotoReaction > m_photoReactions
List of photoionization reactions.
Definition CD_ItoKMCPhysics.H:486
const Vector< RefCountedPtr< RtSpecies > > & getRtSpecies() const
Get all photon species.
Definition CD_ItoKMCPhysicsImplem.H:297
Vector< RefCountedPtr< ItoSpecies > > m_itoSpecies
List of solver-tracked particle drift-diffusion species.
Definition CD_ItoKMCPhysics.H:514
Vector< RefCountedPtr< CdrSpecies > > m_cdrSpecies
List of solver-tracked fluid drift-diffusion species.
Definition CD_ItoKMCPhysics.H:519
Real m_exitTol
Exit tolerance for implicit KMC-leaping algorithms.
Definition CD_ItoKMCPhysics.H:575
virtual ~ItoKMCPhysics() noexcept
Destructor. Does nothing.
Definition CD_ItoKMCPhysicsImplem.H:55
virtual Real computeAlpha(const Real a_E, const RealVect a_x) const =0
Compute Townsend ionization coefficient.
static thread_local KMCSolverType m_kmcSolver
Kinetic Monte Carlo solver used in advanceReactionNetwork.
Definition CD_ItoKMCPhysics.H:464
void defineSpeciesMap() noexcept
Build internal representation of how we distinguish the Ito and CDR solvers.
Definition CD_ItoKMCPhysicsImplem.H:91
const Vector< RefCountedPtr< ItoSpecies > > & getItoSpecies() const
Get all particle drift-diffusion species.
Definition CD_ItoKMCPhysicsImplem.H:285
Real m_SSAlim
Solver setting for the Cao et. al. algorithm.
Definition CD_ItoKMCPhysics.H:564
void parseAlgorithm() noexcept
Parse reaction algorithm.
Definition CD_ItoKMCPhysicsImplem.H:236
int m_maxIter
Maximum number of iterations for implicit KMC-leaping algorithms.
Definition CD_ItoKMCPhysics.H:558
int m_Ncrit
Solver setting for the Cao et. al algorithm.
Definition CD_ItoKMCPhysics.H:547
const std::map< int, std::pair< SpeciesType, int > > & getSpeciesMap() const noexcept
Get the internal mapping between plasma species and Ito solvers.
Definition CD_ItoKMCPhysicsImplem.H:196
virtual Vector< Real > computeMobilities(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept=0
Compute the Ito solver mobilities.
std::map< int, std::pair< std::discrete_distribution< int >, std::map< int, int > > > m_photoPathways
Random number generators for photoionization pathways.
Definition CD_ItoKMCPhysics.H:499
void reconcileParticles(Vector< List< ItoParticle > * > &a_particles, const Vector< FPR > &a_newNumParticles, const Vector< FPR > &a_oldNumParticles, const RealVect a_electricField, const RealVect a_cellPos, const RealVect a_centroidPos, const RealVect a_lo, const RealVect a_hi, const RealVect a_bndryCentroid, const RealVect a_bndryNormal, const Real a_dx, const Real a_kappa) const noexcept
Reconcile the number of particles.
Definition CD_ItoKMCPhysicsImplem.H:512
Algorithm
Enum for switching between KMC algorithms.
Definition CD_ItoKMCPhysics.H:399
Algorithm m_algorithm
Algorithm to use for KMC advance.
Definition CD_ItoKMCPhysics.H:424
virtual void parseRuntimeOptions() noexcept
Parse run-time options.
Definition CD_ItoKMCPhysicsImplem.H:204
ParticlePlacement
Enum for switching between various particle placement algorithms.
Definition CD_ItoKMCPhysics.H:415
void removeParticles(List< ItoParticle > &a_particles, const long long a_numToRemove) const
Remove particles from the input list.
Definition CD_ItoKMCPhysicsImplem.H:715
const Vector< RefCountedPtr< CdrSpecies > > & getCdrSpecies() const
Get all fluid drift-diffusion species.
Definition CD_ItoKMCPhysicsImplem.H:291
static thread_local std::vector< std::shared_ptr< const KMCReaction > > m_kmcReactionsThreadLocal
KMC reactions used in advanceReactionNetowkr.
Definition CD_ItoKMCPhysics.H:476
std::vector< KMCReaction > m_kmcReactions
List of reactions for the KMC solver.
Definition CD_ItoKMCPhysics.H:481
int getNumPhotonSpecies() const
Return number of RTE solvers.
Definition CD_ItoKMCPhysicsImplem.H:327
virtual Vector< Real > computeDiffusionCoefficients(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept=0
Compute the Ito solver diffusion coefficients.
virtual Vector< std::string > getPlotVariableNames() const noexcept
Get number of plot variables.
Definition CD_ItoKMCPhysics.cpp:27
ItoKMCSurfaceReactionSet m_surfaceReactions
Surface reactions.
Definition CD_ItoKMCPhysics.H:504
int getNumPlasmaSpecies() const
Return total number of plasma species.
Definition CD_ItoKMCPhysicsImplem.H:321
virtual void secondaryEmissionEB(Vector< List< ItoParticle > > &a_secondaryParticles, Vector< Real > &a_cdrFluxes, Vector< List< Photon > > &a_secondaryPhotons, const Vector< List< ItoParticle > > &a_primaryParticles, const Vector< Real > &a_cdrFluxesExtrap, const Vector< List< Photon > > &a_primaryPhotons, const RealVect &a_E, const RealVect &a_physicalCellCenter, const RealVect &a_cellCentroid, const RealVect &a_bndryCentroid, const RealVect &a_bndryNormal, const Real a_bndryArea, const Real a_dx, const Real a_dt, const bool a_isDielectric, const int a_matIndex) const noexcept=0
Resolve secondary emission at the EB.
int getNumItoSpecies() const
Return number of Ito solvers.
Definition CD_ItoKMCPhysicsImplem.H:309
virtual Real initialSigma(const Real a_time, const RealVect a_pos) const
Set initial surface charge. Default is 0, override if you want.
Definition CD_ItoKMCPhysicsImplem.H:333
virtual int getNumberOfPlotVariables() const noexcept
Get number of plot variables.
Definition CD_ItoKMCPhysics.cpp:48
void define() noexcept
Define method – defines all the internal machinery.
Definition CD_ItoKMCPhysicsImplem.H:61
std::map< int, std::pair< SpeciesType, int > > m_speciesMap
Map for associating a plasma species with an Ito solver or CDR solver.
Definition CD_ItoKMCPhysics.H:434
RealVect noDiffusion(const ItoParticle &a_particle, const Real a_dt) const noexcept
No diffusion function for a particle.
Definition CD_ItoKMCPhysicsImplem.H:859
void killKMC() const noexcept
Kill the KMC solver.
Definition CD_ItoKMCPhysicsImplem.H:129
void definePhotoPathways() noexcept
Define pathways for photo-reactions.
Definition CD_ItoKMCPhysicsImplem.H:143
virtual Real getNeutralDensity(const RealVect a_pos) const noexcept=0
Get the neutral density at a position in space.
void parsePPC() noexcept
Parse the maximum number of particles generated per cell.
Definition CD_ItoKMCPhysicsImplem.H:214
static thread_local bool m_hasKMCSolver
Is the KMC solver defined or not.
Definition CD_ItoKMCPhysics.H:459
int getNumCdrSpecies() const
Return number of CDR solvers.
Definition CD_ItoKMCPhysicsImplem.H:315
ParticlePlacement m_particlePlacement
Particle placement algorithm.
Definition CD_ItoKMCPhysics.H:429
void parseDebug() noexcept
Parse the maximum number of particles generated per cell.
Definition CD_ItoKMCPhysicsImplem.H:226
virtual bool needGradients() const noexcept
Return true/false if physics model needs species gradients.
Definition CD_ItoKMCPhysics.cpp:56
bool m_isDefined
Is defined or not.
Definition CD_ItoKMCPhysics.H:449
virtual Real computeEta(const Real a_E, const RealVect a_x) const =0
Compute Townsend attachment coefficient.
static thread_local KMCState m_kmcState
KMC state used in advanceReactionNetwork.
Definition CD_ItoKMCPhysics.H:469
ItoKMCPhysics() noexcept
Constructor. Does nothing.
Definition CD_ItoKMCPhysicsImplem.H:28
Class for holding a set of surface reactions.
Definition CD_ItoKMCSurfaceReactionSet.H:26
A particle class that only has a position and a weight.
Definition CD_PointParticle.H:29
Class for encapsulating random number generation. This class is MPI and OpenMP safe.
Definition CD_Random.H:36
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25
Name containing various physics models for running chombo-discharge code.
Definition CD_AdvectionDiffusion.H:15