chombo-discharge
CD_ItoPlasmaPhysics.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_ItoPlasmaPhysics_H
13 #define CD_ItoPlasmaPhysics_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_RtSpecies.H>
27 #include <CD_Photon.H>
28 #include <CD_ItoParticle.H>
30 #include <CD_KMCDualState.H>
32 #include <CD_KMCSolver.H>
33 #include <CD_NamespaceHeader.H>
34 
35 namespace Physics {
36  namespace ItoPlasma {
37 
41  using FPR = Real;
42 
47 
52 
57 
64  {
65  public:
69  inline ItoPlasmaPhysics();
70 
74  inline virtual ~ItoPlasmaPhysics();
75 
83  inline virtual Real
84  computeDt(const RealVect a_E, const RealVect a_pos, const Vector<FPR> a_numParticles) const noexcept;
85 
91  virtual Real
92  computeAlpha(const RealVect a_E) const = 0;
93 
98  const Vector<RefCountedPtr<ItoSpecies>>&
99  getItoSpecies() const;
100 
105  const Vector<RefCountedPtr<RtSpecies>>&
106  getRtSpecies() const;
107 
111  inline int
112  getNumPlasmaSpecies() const;
113 
117  inline int
118  getNumPhotonSpecies() const;
119 
123  inline virtual void
124  parseRuntimeOptions() noexcept;
125 
131  inline virtual Real
132  initialSigma(const Real a_time, const RealVect a_pos) const;
133 
141  virtual Vector<Real>
142  computeItoMobilities(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept = 0;
143 
151  virtual Vector<Real>
152  computeItoDiffusion(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept = 0;
153 
174  virtual void
175  injectParticlesEB(Vector<List<ItoParticle>>& a_outgoingParticles,
176  Vector<List<Photon>>& a_outgoingPhotons,
177  const Vector<List<ItoParticle>>& a_incomingParticles,
178  const Vector<List<Photon>>& a_incomingPhotons,
179  const Vector<FPR>& a_newNumParticles,
180  const Vector<FPR>& a_oldNumParticles,
181  const RealVect& a_E,
182  const RealVect& a_cellCenter,
183  const RealVect& a_cellCentroid,
184  const RealVect& a_bndryCentroid,
185  const RealVect& a_bndryNormal,
186  const Real a_bndryArea,
187  const Real a_dx,
188  const Real a_dt,
189  const bool a_isDielectric,
190  const int a_matIndex) const noexcept = 0;
191 
201  inline void
202  advanceKMC(Vector<FPR>& a_numParticles,
203  Vector<FPR>& a_numNewPhotons,
204  const Real a_dt,
205  const RealVect a_E,
206  const Real a_dx,
207  const Real a_kappa) const;
208 
225  inline void
226  reconcileParticles(Vector<List<ItoParticle>*>& a_particles,
227  const Vector<FPR>& a_newNumParticles,
228  const Vector<FPR>& a_oldNumParticles,
229  const RealVect a_cellPos,
230  const RealVect a_centroidPos,
231  const RealVect a_lo,
232  const RealVect a_hi,
233  const RealVect a_bndryCentroid,
234  const RealVect a_bndryNormal,
235  const Real a_dx,
236  const Real a_kappa) const noexcept;
237 
253  inline void
254  reconcilePhotons(Vector<List<Photon>*>& a_newPhotons,
255  const Vector<FPR>& a_numNewPhotons,
256  const RealVect a_cellPos,
257  const RealVect a_centroidPos,
258  const RealVect a_lo,
259  const RealVect a_hi,
260  const RealVect a_bndryCentroid,
261  const RealVect a_bndryNormal,
262  const Real a_dx,
263  const Real a_kappa) const noexcept;
264 
271  inline void
272  reconcilePhotoionization(Vector<List<ItoParticle>*>& a_particles,
273  const Vector<List<Photon>*>& a_absorbedPhotons) const noexcept;
274 
275  protected:
280  enum class Algorithm
281  {
282  SSA,
283  Tau,
284  Hybrid
285  };
286 
290  enum class ParticlePlacement
291  {
292  Random,
293  Centroid
294  };
295 
300 
305 
309  std::string m_className;
310 
314  bool m_debug;
315 
320 
325 
329  std::vector<std::shared_ptr<const KMCReaction>> m_kmcReactions;
330 
334  std::vector<std::shared_ptr<const ItoPlasmaPhotoReaction>> m_photoReactions;
335 
339  Vector<RefCountedPtr<ItoSpecies>> m_plasmaSpecies;
340 
344  Vector<RefCountedPtr<RtSpecies>> m_rtSpecies;
345 
350 
355 
360  int m_Ncrit;
361 
366  int m_NSSA;
367 
372  Real m_SSAlim;
373 
378  Real m_eps;
379 
383  inline void
384  defineKMC() noexcept;
385 
389  inline void
390  parsePPC() noexcept;
391 
395  inline void
396  parseDebug() noexcept;
397 
401  inline void
402  parseAlgorithm() noexcept;
403 
411  virtual void
412  updateReactionRates(const RealVect a_E, const Real a_dx, const Real a_kappa) const noexcept = 0;
413 
420  inline void
421  removeParticles(List<ItoParticle>& a_particles, const long long a_numToRemove) const;
422  };
423  } // namespace ItoPlasma
424 } // namespace Physics
425 
426 #include <CD_NamespaceFooter.H>
427 
429 
430 #endif
Declaration of a particle class for Ito diffusion.
Declaration of a class for holding photoionization reaction types in ito_plasma physics.
Implementation of CD_ItoPlasmaPhysics.H.
Real FPR
Numerical representation of the KMC state. Can be floating-point or integer type.
Definition: CD_ItoPlasmaPhysics.H:41
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 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_ItoPlasmaPhysics.H:64
const Vector< RefCountedPtr< ItoSpecies > > & getItoSpecies() const
Get all particle species.
Definition: CD_ItoPlasmaPhysicsImplem.H:145
void defineKMC() noexcept
Define the KMC solver and state.
Definition: CD_ItoPlasmaPhysicsImplem.H:69
virtual Real computeDt(const RealVect a_E, const RealVect a_pos, const Vector< FPR > a_numParticles) const noexcept
Compute a time step to use.
Definition: CD_ItoPlasmaPhysicsImplem.H:61
KMCSolverType m_kmcSolver
Kinetic Monte Carlo solver.
Definition: CD_ItoPlasmaPhysics.H:324
std::string m_className
Class name. Used for options parsing.
Definition: CD_ItoPlasmaPhysics.H:309
void parseDebug() noexcept
Parse the maximum number of particles generated per cell.
Definition: CD_ItoPlasmaPhysicsImplem.H:106
ParticlePlacement
Enum for switching between various particle placement algorithms.
Definition: CD_ItoPlasmaPhysics.H:291
Real m_eps
Solver setting for the Cao et. al. algorithm.
Definition: CD_ItoPlasmaPhysics.H:378
Algorithm
Enum for switching between KMC algorithms.
Definition: CD_ItoPlasmaPhysics.H:281
bool m_debug
Turn on/off debugging.
Definition: CD_ItoPlasmaPhysics.H:314
virtual Vector< Real > computeItoMobilities(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept=0
Compute the Ito solver mobilities.
void removeParticles(List< ItoParticle > &a_particles, const long long a_numToRemove) const
Remove particles from the input list.
Definition: CD_ItoPlasmaPhysicsImplem.H:299
virtual Vector< Real > computeItoDiffusion(const Real a_time, const RealVect a_pos, const RealVect a_E) const noexcept=0
Compute the Ito solver diffusion coefficients.
std::vector< std::shared_ptr< const KMCReaction > > m_kmcReactions
List of reactions for the KMC solver.
Definition: CD_ItoPlasmaPhysics.H:329
KMCState m_kmcState
Kinetic Monte Carlo state.
Definition: CD_ItoPlasmaPhysics.H:319
int getNumPlasmaSpecies() const
Return number of ion equations.
Definition: CD_ItoPlasmaPhysicsImplem.H:157
virtual ~ItoPlasmaPhysics()
Destructor. Does nothing.
Definition: CD_ItoPlasmaPhysicsImplem.H:58
ParticlePlacement m_particlePlacement
Particle placement algorithm.
Definition: CD_ItoPlasmaPhysics.H:304
const Vector< RefCountedPtr< RtSpecies > > & getRtSpecies() const
Get all photon species.
Definition: CD_ItoPlasmaPhysicsImplem.H:151
void reconcileParticles(Vector< List< ItoParticle > * > &a_particles, const Vector< FPR > &a_newNumParticles, const Vector< FPR > &a_oldNumParticles, 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_ItoPlasmaPhysicsImplem.H:220
virtual void updateReactionRates(const RealVect a_E, const Real a_dx, const Real a_kappa) const noexcept=0
Update reaction rates.
void parsePPC() noexcept
Parse the maximum number of particles generated per cell.
Definition: CD_ItoPlasmaPhysicsImplem.H:95
int m_maxNewParticles
Maximum new number of particles generated by the chemistry advance.
Definition: CD_ItoPlasmaPhysics.H:349
Vector< RefCountedPtr< ItoSpecies > > m_plasmaSpecies
List of solver-tracked particle species.
Definition: CD_ItoPlasmaPhysics.H:339
Algorithm m_algorithm
Algorithm to use for KMC advance.
Definition: CD_ItoPlasmaPhysics.H:299
void parseAlgorithm() noexcept
Parse reaction algorithm.
Definition: CD_ItoPlasmaPhysicsImplem.H:116
virtual void injectParticlesEB(Vector< List< ItoParticle >> &a_outgoingParticles, Vector< List< Photon >> &a_outgoingPhotons, const Vector< List< ItoParticle >> &a_incomingParticles, const Vector< List< Photon >> &a_incomingPhotons, const Vector< FPR > &a_newNumParticles, const Vector< FPR > &a_oldNumParticles, const RealVect &a_E, const RealVect &a_cellCenter, 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 particle and photon injection at the EB.
virtual void parseRuntimeOptions() noexcept
Parse run-time options.
Definition: CD_ItoPlasmaPhysicsImplem.H:82
ItoPlasmaPhysics()
Constructor. Does nothing.
Definition: CD_ItoPlasmaPhysicsImplem.H:27
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_ItoPlasmaPhysicsImplem.H:363
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_ItoPlasmaPhysicsImplem.H:169
void advanceKMC(Vector< FPR > &a_numParticles, Vector< FPR > &a_numNewPhotons, const Real a_dt, const RealVect a_E, const Real a_dx, const Real a_kappa) const
Advance particles.
Definition: CD_ItoPlasmaPhysicsImplem.H:175
virtual Real computeAlpha(const RealVect a_E) const =0
Compute Townsend ionization coefficient.
Vector< RefCountedPtr< RtSpecies > > m_rtSpecies
List of solver-tracked photon species.
Definition: CD_ItoPlasmaPhysics.H:344
int getNumPhotonSpecies() const
Return number of RTE equations.
Definition: CD_ItoPlasmaPhysicsImplem.H:163
int m_Ncrit
Solver setting for the Cao et. al algorithm.
Definition: CD_ItoPlasmaPhysics.H:360
void reconcilePhotoionization(Vector< List< ItoParticle > * > &a_particles, const Vector< List< Photon > * > &a_absorbedPhotons) const noexcept
Reconcile photoionization reactions.
Definition: CD_ItoPlasmaPhysicsImplem.H:393
int m_NSSA
Solver setting for the Cao et. al algorithm.
Definition: CD_ItoPlasmaPhysics.H:366
int m_maxNewPhotons
Maximum new number of photons generated by the chemistry advance.
Definition: CD_ItoPlasmaPhysics.H:354
std::vector< std::shared_ptr< const ItoPlasmaPhotoReaction > > m_photoReactions
List of photoionization reactions.
Definition: CD_ItoPlasmaPhysics.H:334
Real m_SSAlim
Solver setting for the Cao et. al. algorithm.
Definition: CD_ItoPlasmaPhysics.H:372
Class for encapsulating random number generation.
Definition: CD_Random.H:35
Name containing various physics models for running chombo-discharge code.
Definition: CD_AdvectionDiffusion.H:15