13#ifndef CD_ITOKMCPHYSICS_H
14#define CD_ITOKMCPHYSICS_H
22#include <RefCountedPtr.H>
37#include <CD_NamespaceHeader.H>
138 const Vector<RefCountedPtr<ItoSpecies>>&
145 const Vector<RefCountedPtr<CdrSpecies>>&
152 const Vector<RefCountedPtr<RtSpecies>>&
159 const Vector<DiffusionFunction>&
166 virtual Vector<std::
string>
181 const RealVect& a_pos,
182 const Vector<Real>& a_phi,
183 const Vector<RealVect>& a_gradPhi,
185 const Real a_kappa) const noexcept;
233 inline const std::map<
int, std::pair<
SpeciesType,
int>>&
249 initialSigma(const Real a_time, const RealVect& a_pos) const;
259 computeMobilities(const Real a_time, const RealVect& a_pos, const RealVect& a_E) const noexcept = 0;
293 Vector<Real>& a_cdrFluxes,
296 const Vector<Real>& a_cdrFluxesExtrap,
299 const RealVect& a_physicalCellCenter,
300 const RealVect& a_cellCentroid,
301 const RealVect& a_bndryCentroid,
302 const RealVect& a_bndryNormal,
303 const Real a_bndryArea,
306 const
bool a_isDielectric,
307 const
int a_matIndex) const noexcept = 0;
324 Vector<
FPR>& a_numNewPhotons,
326 const Vector<Real>& a_phi,
327 const Vector<RealVect>& a_gradPhi,
330 const RealVect a_pos,
332 const Real a_kappa) const;
353 const Vector<
FPR>& a_newNumParticles,
354 const Vector<
FPR>& a_oldNumParticles,
355 const RealVect a_electricField,
356 const RealVect a_cellPos,
357 const RealVect a_centroidPos,
360 const RealVect a_bndryCentroid,
361 const RealVect a_bndryNormal,
363 const Real a_kappa) const noexcept;
382 const Vector<
FPR>& a_numNewPhotons,
383 const RealVect a_cellPos,
384 const RealVect a_centroidPos,
387 const RealVect a_bndryCentroid,
388 const RealVect a_bndryNormal,
390 const Real a_kappa) const noexcept;
524 std::map<int, std::pair<std::discrete_distribution<int>, std::map<int, int>>>
m_photoPathways;
655 const RealVect a_pos,
656 const Vector<Real>& a_phi,
657 const Vector<RealVect>& a_gradPhi,
660 const Real a_kappa) const noexcept = 0;
693 const RealVect& a_electricField,
694 const RealVect& a_cellPos,
695 const Real& a_dx) const noexcept;
727#include <CD_NamespaceFooter.H>
Declaration of a class that passes information into CdrSolver (e.g., initial conditions).
Declaration of the Physics::ItoKMC::ItoKMCPhotoReaction class.
Implementation of CD_ItoKMCPhysics.H.
Real FPR
Floating-point type used to represent particle counts in the KMC state.
Definition CD_ItoKMCPhysics.H:45
SpeciesType
Tag for distinguishing species solved with an Ito diffusion or CDR fluid formalism.
Definition CD_ItoKMCPhysics.H:71
@ CDR
Convection-diffusion-reaction (fluid) solver.
Definition CD_ItoKMCPhysics.H:73
@ Ito
Ito stochastic drift-diffusion solver.
Definition CD_ItoKMCPhysics.H:72
std::function< RealVect(const ItoParticle &p, const Real &a_dt)> DiffusionFunction
Basic function for diffusing a particle.
Definition CD_ItoKMCPhysics.H:65
Declaration of a class that encapsulates a set of secondary emission reactions.
SoA payload for Ito diffusion particles (drifting Brownian walkers)
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 ParticleSoA, an arena-backed Struct-of-Arrays particle container.
SoA payload for Monte Carlo radiative-transfer photons.
Declaration of a class which supplies a user interface to radiative transfer code.
Reaction type for advancing a KMCDualState for Kinetic Monte Carlo.
Definition CD_KMCDualStateReaction.H:34
Declaration of a "dual state" for advancing with the Kinetic Monte Carlo module.
Definition CD_KMCDualState.H:32
Class for running Kinetic Monte-Carlo simulations.
Definition CD_KMCSolver.H:61
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655
Abstract base class coupling Kinetic Monte Carlo chemistry to Ito/CDR plasma solvers.
Definition CD_ItoKMCPhysics.H:84
int m_maxNewParticles
Maximum new number of particles generated by the chemistry advance.
Definition CD_ItoKMCPhysics.H:561
virtual Real computeEta(const Real a_E, const RealVect &a_x) const =0
Compute Townsend attachment coefficient.
int m_NSSA
Solver setting for the Cao et. al algorithm.
Definition CD_ItoKMCPhysics.H:579
bool m_incrementNewParticles
If true, increment onto existing particles rather than creating new ones.
Definition CD_ItoKMCPhysics.H:465
Vector< RefCountedPtr< RtSpecies > > m_rtSpecies
List of solver-tracked photon species.
Definition CD_ItoKMCPhysics.H:549
int m_downstreamSpecies
An internal integer describing which species is the "ionizing" species.
Definition CD_ItoKMCPhysics.H:556
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:921
Vector< DiffusionFunction > m_itoDiffusionFunctions
Diffusion functions for the various Ito species.
Definition CD_ItoKMCPhysics.H:534
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.
Real m_eps
Solver setting for the Cao et. al. algorithm.
Definition CD_ItoKMCPhysics.H:596
bool m_debug
Turn on/off debugging.
Definition CD_ItoKMCPhysics.H:455
virtual void secondaryEmissionEB(Vector< ParticleSoA< ItoParticle > > &a_secondaryParticles, Vector< Real > &a_cdrFluxes, Vector< ParticleSoA< Photon > > &a_secondaryPhotons, const Vector< ParticleSoA< ItoParticle > > &a_primaryParticles, const Vector< Real > &a_cdrFluxesExtrap, const Vector< ParticleSoA< 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.
std::vector< Real > m_reactiveDtFactors
List of reactions that are a part of the time step limitation.
Definition CD_ItoKMCPhysics.H:516
int m_maxNewPhotons
Maximum new number of photons generated by the chemistry advance.
Definition CD_ItoKMCPhysics.H:566
void reconcilePhotons(Vector< ParticleSoA< 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:820
void defineKMC() const noexcept
Define the KMC solver and state.
Definition CD_ItoKMCPhysicsImplem.H:110
RealVect isotropicDiffusion(const ItoParticle &a_particle, const Real a_dt) const noexcept
Isotropic diffusion function for a particle.
Definition CD_ItoKMCPhysicsImplem.H:909
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:346
std::string m_className
Class name. Used for options parsing.
Definition CD_ItoKMCPhysics.H:450
const Vector< DiffusionFunction > & getItoDiffusionFunctions() const noexcept
Get diffusion functions for all Ito species.
Definition CD_ItoKMCPhysicsImplem.H:310
std::vector< ItoKMCPhotoReaction > m_photoReactions
List of photoionization reactions.
Definition CD_ItoKMCPhysics.H:511
const Vector< RefCountedPtr< RtSpecies > > & getRtSpecies() const
Get all photon species.
Definition CD_ItoKMCPhysicsImplem.H:304
Vector< RefCountedPtr< ItoSpecies > > m_itoSpecies
List of solver-tracked particle drift-diffusion species.
Definition CD_ItoKMCPhysics.H:539
Vector< RefCountedPtr< CdrSpecies > > m_cdrSpecies
List of solver-tracked fluid drift-diffusion species.
Definition CD_ItoKMCPhysics.H:544
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:340
Real m_exitTol
Exit tolerance for implicit KMC-leaping algorithms.
Definition CD_ItoKMCPhysics.H:601
virtual ~ItoKMCPhysics() noexcept
Destructor. Does nothing.
Definition CD_ItoKMCPhysicsImplem.H:56
static thread_local KMCState m_kmcStateScratch
Perturbed KMC state used by the time step tail of advanceKMC.
Definition CD_ItoKMCPhysics.H:488
static thread_local KMCSolverType m_kmcSolver
Kinetic Monte Carlo solver used in advanceReactionNetwork.
Definition CD_ItoKMCPhysics.H:475
void defineSpeciesMap() noexcept
Build internal representation of how we distinguish the Ito and CDR solvers.
Definition CD_ItoKMCPhysicsImplem.H:92
const Vector< RefCountedPtr< ItoSpecies > > & getItoSpecies() const
Get all particle drift-diffusion species.
Definition CD_ItoKMCPhysicsImplem.H:292
Real m_SSAlim
Solver setting for the Cao et. al. algorithm.
Definition CD_ItoKMCPhysics.H:590
void parseAlgorithm() noexcept
Parse reaction algorithm.
Definition CD_ItoKMCPhysicsImplem.H:243
void removeParticles(ParticleSoA< ItoParticle > &a_particles, const long long a_numToRemove) const
Remove particles from the input list.
Definition CD_ItoKMCPhysicsImplem.H:757
int m_maxIter
Maximum number of iterations for implicit KMC-leaping algorithms.
Definition CD_ItoKMCPhysics.H:584
int m_Ncrit
Solver setting for the Cao et. al algorithm.
Definition CD_ItoKMCPhysics.H:573
const std::map< int, std::pair< SpeciesType, int > > & getSpeciesMap() const noexcept
Get the internal mapping from plasma-species index to solver type and solver index.
Definition CD_ItoKMCPhysicsImplem.H:203
virtual Real getNeutralDensity(const RealVect &a_pos) const noexcept=0
Get the neutral density at a position in space.
bool computeUpstreamPosition(RealVect &a_pos, RealVect &a_lo, RealVect &a_hi, const int &a_Z, const ParticleSoA< 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:706
virtual Real computeAlpha(const Real a_E, const RealVect &a_x) const =0
Compute Townsend ionization coefficient.
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:524
Algorithm
KMC time-stepping algorithms available for advancing the reaction network.
Definition CD_ItoKMCPhysics.H:409
@ HybridMidpoint
Hybrid SSA / midpoint (Cao et al.).
@ ImplicitEuler
Implicit tau-leaping with Euler steps.
@ SSA
Gillespie's Stochastic Simulation Algorithm (exact).
@ Midpoint
Explicit tau-leaping with midpoint (second-order) steps.
@ ExplicitEuler
Explicit tau-leaping with Euler steps.
@ HybridImplicitEuler
Hybrid SSA / implicit Euler (Cao et al.).
@ HybridPRC
Hybrid SSA / PRC (Cao et al.).
@ HybridExplicitEuler
Hybrid SSA / explicit Euler (Cao et al.).
@ PRC
Partially-rejected corrections tau-leaping.
virtual Vector< Real > computeMobilities(const Real a_time, const RealVect &a_pos, const RealVect &a_E) const noexcept=0
Compute the Ito solver mobilities.
Algorithm m_algorithm
Algorithm to use for KMC advance.
Definition CD_ItoKMCPhysics.H:435
virtual void parseRuntimeOptions() noexcept
Parse run-time options.
Definition CD_ItoKMCPhysicsImplem.H:211
ParticlePlacement
Strategies for placing secondary particles created during the KMC advance.
Definition CD_ItoKMCPhysics.H:425
@ Downstream
Place particles in the downstream region relative to the primary particle drift.
@ Parent
Place particles on an existing particle, drawn with probability proportional to its weight.
@ Random
Place particles at a uniformly random position within the cell.
@ Centroid
Place particles at the cell centroid.
void reconcileParticles(Vector< ParticleSoA< 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:520
const Vector< RefCountedPtr< CdrSpecies > > & getCdrSpecies() const
Get all fluid drift-diffusion species.
Definition CD_ItoKMCPhysicsImplem.H:298
static thread_local std::vector< std::shared_ptr< const KMCReaction > > m_kmcReactionsThreadLocal
Thread-local copies of KMC reactions used in advanceReactionNetwork.
Definition CD_ItoKMCPhysics.H:501
std::vector< KMCReaction > m_kmcReactions
List of reactions for the KMC solver.
Definition CD_ItoKMCPhysics.H:506
int getNumPhotonSpecies() const
Return number of RTE solvers.
Definition CD_ItoKMCPhysicsImplem.H:334
virtual Vector< std::string > getPlotVariableNames() const noexcept
Get plot variable names.
Definition CD_ItoKMCPhysics.cpp:30
ItoKMCSurfaceReactionSet m_surfaceReactions
Surface reactions.
Definition CD_ItoKMCPhysics.H:529
int getNumPlasmaSpecies() const
Return total number of plasma species.
Definition CD_ItoKMCPhysicsImplem.H:328
int getNumItoSpecies() const
Return number of Ito solvers.
Definition CD_ItoKMCPhysicsImplem.H:316
virtual int getNumberOfPlotVariables() const noexcept
Get number of extra plot variables contributed by this physics model.
Definition CD_ItoKMCPhysics.cpp:51
void define() noexcept
Define method – defines all the internal machinery.
Definition CD_ItoKMCPhysicsImplem.H:62
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:445
RealVect noDiffusion(const ItoParticle &a_particle, const Real a_dt) const noexcept
No diffusion function for a particle.
Definition CD_ItoKMCPhysicsImplem.H:903
void killKMC() const noexcept
Kill the KMC solver.
Definition CD_ItoKMCPhysicsImplem.H:133
void definePhotoPathways() noexcept
Define pathways for photo-reactions.
Definition CD_ItoKMCPhysicsImplem.H:150
void reconcilePhotoionization(Vector< ParticleSoA< ItoParticle > * > &a_itoParticles, Vector< ParticleSoA< NoPayload > * > &a_cdrParticles, const Vector< ParticleSoA< Photon > * > &a_absorbedPhotons) const noexcept
Reconcile photoionization reactions.
Definition CD_ItoKMCPhysicsImplem.H:857
void parsePPC() noexcept
Parse the maximum number of particles generated per cell.
Definition CD_ItoKMCPhysicsImplem.H:221
static thread_local bool m_hasKMCSolver
Is the KMC solver defined or not.
Definition CD_ItoKMCPhysics.H:470
int getNumCdrSpecies() const
Return number of CDR solvers.
Definition CD_ItoKMCPhysicsImplem.H:322
ParticlePlacement m_particlePlacement
Particle placement algorithm.
Definition CD_ItoKMCPhysics.H:440
void parseDebug() noexcept
Parse the maximum number of particles generated per cell.
Definition CD_ItoKMCPhysicsImplem.H:233
virtual bool needGradients() const noexcept
Return true if the physics model requires species density gradients.
Definition CD_ItoKMCPhysics.cpp:59
bool m_isDefined
Is defined or not.
Definition CD_ItoKMCPhysics.H:460
static thread_local std::vector< Real > m_kmcPropensityScratch
Propensity buffer used by the time step tail of advanceKMC.
Definition CD_ItoKMCPhysics.H:495
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:38
static thread_local KMCState m_kmcState
KMC state used in advanceReactionNetwork.
Definition CD_ItoKMCPhysics.H:480
ItoKMCPhysics() noexcept
Constructor. Does nothing.
Definition CD_ItoKMCPhysicsImplem.H:29
Class for holding a set of surface reactions.
Definition CD_ItoKMCSurfaceReactionSet.H:27
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
SoA payload for ItoSolver particles, i.e. drifting Brownian walkers.
Definition CD_ItoParticle.H:31
Empty payload: ParticleSoA<> is a position+weight+metadata point particle.
Definition CD_ParticleSoA.H:289
SoA payload for Monte Carlo radiative-transfer photons.
Definition CD_Photon.H:29