13#ifndef CD_ITOKMCJSON_H
14#define CD_ITOKMCJSON_H
22#include <nlohmann/json.hpp>
28#include <CD_NamespaceHeader.H>
44 using FunctionXt = std::function<Real(
const RealVect& a_position,
const Real a_time)>;
54 using FunctionEN = std::function<Real(
const Real a_E,
const Real a_N)>;
61 using FunctionX = std::function<Real(
const RealVect& a_position)>;
68 using FunctionEX = std::function<Real(
const Real E,
const RealVect& x)>;
81 Real(
const Real E,
const Real V,
const Real dx,
const Real dt,
const RealVect& x,
const Vector<Real>& phi)>;
88 using FunctionDXP = std::function<Real(
const Real dx,
const Vector<Real>& phi)>;
94 using FunctionT = std::function<Real(
const Real a_T)>;
101 using FunctionTT = std::function<Real(
const Real a_T1,
const Real a_T2)>;
134 computeAlpha(const Real a_E, const RealVect& a_pos) const noexcept override;
143 computeEta(const Real a_E, const RealVect& a_pos) const noexcept override;
149 virtual Vector<std::
string>
164 const RealVect& a_pos,
165 const Vector<Real>& a_phi,
166 const Vector<RealVect>& a_gradPhi,
168 const Real a_kappa) const noexcept override;
192 computeMobilities(const Real a_time, const RealVect& a_pos, const RealVect& a_E) const noexcept override;
226 Vector<Real>& a_secondaryCDRFluxes,
229 const Vector<Real>& a_primaryCDRFluxes,
232 const RealVect& a_cellCenter,
233 const RealVect& a_cellCentroid,
234 const RealVect& a_bndryCentroid,
235 const RealVect& a_bndryNormal,
236 const Real a_bndryArea,
239 const
bool a_isDielectric,
240 const
int a_matIndex) const noexcept override;
459 trim(const std::
string& a_string) const noexcept;
541 isBracketed(const std::
string& a_str) const noexcept;
559 const std::vector<std::
string>& a_products,
560 const std::
string& a_reaction) const noexcept;
571 const std::vector<std::
string>& a_products,
572 const std::
string& a_reaction) const noexcept;
695 std::vector<std::
string>& a_products,
696 const std::
string& a_reaction) const noexcept;
711 std::list<
size_t>& a_plasmaReactants,
712 std::list<
size_t>& a_photonReactants,
713 std::list<
size_t>& a_backgroundProducts,
714 std::list<
size_t>& a_plasmaProducts,
715 std::list<
size_t>& a_photonProducts,
716 const std::vector<std::
string>& a_reactants,
717 const std::vector<std::
string>& a_products) const noexcept;
729 const std::list<
size_t>& a_backgroundReactants,
730 const std::list<
size_t>& a_plasmaReactants) const;
737 virtual std::pair<
bool, std::
string>
745 virtual std::pair<
bool, std::
string>
764 parseTableEByN(const nlohmann::json& a_tableEntry, const std::
string& a_dataID) const;
774 virtual std::vector<std::tuple<std::
string, std::vector<std::
string>, std::vector<std::
string>>>
776 const std::vector<std::
string>& a_products,
777 const nlohmann::json& a_reactionJSON) const noexcept;
793 const RealVect a_pos,
794 const Vector<Real>& a_phi,
795 const Vector<RealVect>& a_gradPhi,
798 const Real a_kappa) const noexcept override;
807 multinomial(const
size_t N, const std::discrete_distribution<
int>& a_distribution) const noexcept;
812#include <CD_NamespaceFooter.H>
Declaration of a background species class for usage with ItoKMCJSON.
Declaration of the Physics::ItoKMC::ItoKMCPhysics abstract base class.
SpeciesType
Tag for distinguishing species solved with an Ito diffusion or CDR fluid formalism.
Definition CD_ItoKMCPhysics.H:71
Declaration of a table for looking up coefficients etc.
Reaction type for advancing a KMCDualState for Kinetic Monte Carlo.
Definition CD_KMCDualStateReaction.H:34
Class for interpolation of f = f(x) data in one independent variable x.
Definition CD_LookupTable1D.H:32
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655
Encapsulation of a background species for usage with ItoKMCJSON.
Definition CD_ItoKMCBackgroundSpecies.H:32
Implementation of ItoKMCPhysics which parses input data from a JSON file.
Definition CD_ItoKMCJSON.H:37
virtual Real computeEta(const Real a_E, const RealVect &a_pos) const noexcept override
Compute Townsend attachment coefficient.
Definition CD_ItoKMCJSON.cpp:3436
virtual std::pair< bool, std::string > parsePlasmaReactionPlot(const nlohmann::json &a_reactionJSON) const
Parse whether or not a reaction rate should be plotted.
Definition CD_ItoKMCJSON.cpp:3140
virtual void initializeDiffusionCoefficients()
Initialize diffusion coefficients.
Definition CD_ItoKMCJSON.cpp:1523
std::vector< std::list< size_t > > m_plasmaReactionPhotonProducts
List of photon species on the right-hand side of a reaction.
Definition CD_ItoKMCJSON.H:391
FunctionEX m_alpha
Townsend ionization coefficient. Defined during parseAlpha.
Definition CD_ItoKMCJSON.H:431
virtual void secondaryEmissionEB(Vector< ParticleSoA< ItoParticle > > &a_secondaryParticles, Vector< Real > &a_secondaryCDRFluxes, Vector< ParticleSoA< Photon > > &a_secondaryPhotons, const Vector< ParticleSoA< ItoParticle > > &a_primaryParticles, const Vector< Real > &a_primaryCDRFluxes, const Vector< ParticleSoA< Photon > > &a_primaryPhotons, 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 override
Resolve secondary emission at the EB.
Definition CD_ItoKMCJSON.cpp:3530
virtual void initializeAutomaticTownsend(const std::string &a_coeff)
Initialize automatic Townsend coefficient (ionizatino or attachment) from the reaction rates.
Definition CD_ItoKMCJSON.cpp:876
std::vector< std::list< size_t > > m_plasmaReactionPlasmaProducts
List of plasma species on the right-hand side of a reaction.
Definition CD_ItoKMCJSON.H:386
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 override
Get plot variables.
Definition CD_ItoKMCJSON.cpp:3777
virtual void initializeTownsendCoefficient(const std::string &a_coeff)
Parse one of the Townsend coefficients.
Definition CD_ItoKMCJSON.cpp:712
FunctionEX m_eta
Townsend attachment coefficient. Defined during parseEta.
Definition CD_ItoKMCJSON.H:436
std::function< Real(const Real a_E, const Real a_N)> FunctionEN
Function for encapsulating operations f = f(E,N). field in Townsend units.
Definition CD_ItoKMCJSON.H:54
virtual bool isPlasmaSpecies(const std::string &a_name) const noexcept
Return true if species is a plasma species.
Definition CD_ItoKMCJSON.cpp:190
bool m_plotEta
Plot Townsend attachment coefficient.
Definition CD_ItoKMCJSON.H:261
virtual bool isBracketed(const std::string &a_str) const noexcept
Check if a string contains starts with '(' and ends with ')'.
Definition CD_ItoKMCJSON.cpp:235
virtual void initializeSurfaceEmission(const std::string &a_surface)
Initialize surface reactions.
Definition CD_ItoKMCJSON.cpp:2053
bool m_plotGas
Plot gas pressure, density, and temperature.
Definition CD_ItoKMCJSON.H:251
virtual void initializeGasLaw()
Initialize gas law.
Definition CD_ItoKMCJSON.cpp:307
virtual void sanctifyPhotoReaction(const std::vector< std::string > &a_reactants, const std::vector< std::string > &a_products, const std::string &a_reaction) const noexcept
Check that a photo-reaction makes sense. I.e. that all species are properly defined and that it conse...
Definition CD_ItoKMCJSON.cpp:2472
virtual void initializePhotonSpecies()
Initialize the photon species.
Definition CD_ItoKMCJSON.cpp:1708
FunctionX m_gasPressure
Background gas pressure.
Definition CD_ItoKMCJSON.H:441
std::vector< FunctionEVXTP > m_kmcReactionRates
Function-based plasma reaction rates. Same index as the actual reactions.
Definition CD_ItoKMCJSON.H:364
virtual LookupTable1D< Real, 1 > parseTableEByN(const nlohmann::json &a_tableEntry, const std::string &a_dataID) const
Parse a table which is stored in E/N format.
Definition CD_ItoKMCJSON.cpp:3249
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 override
Update reaction rates.
Definition CD_ItoKMCJSON.cpp:3482
virtual void initializeDensities()
Parse initial densities for CDR and Ito species.
Definition CD_ItoKMCJSON.cpp:1382
std::function< Real(const Real a_T)> FunctionT
Function for encapsulating a function f = f(T) where T is the temperature of some species.
Definition CD_ItoKMCJSON.H:94
std::pair< bool, std::string > m_autoAlpha
Flag if the user wants to compute the alpha coefficient from the reactions.
Definition CD_ItoKMCJSON.H:411
std::set< std::string > m_allSpecies
All species that have been defined.
Definition CD_ItoKMCJSON.H:297
virtual void previewFunctionEX(const nlohmann::json &a_json, const FunctionEX &a_function) const
Simple function for previewing a rate/coefficient defined as a function f = f(E,x)
Definition CD_ItoKMCJSON.cpp:1041
virtual Vector< std::string > getPlotVariableNames() const noexcept override
Get plot variable names.
Definition CD_ItoKMCJSON.cpp:3739
std::function< Real(const RealVect &a_position)> FunctionX
Function for encapsulating a function f = f(x) where x is the physical coordinates.
Definition CD_ItoKMCJSON.H:61
std::map< std::string, int > m_cdrSpeciesMap
Map for indexing from an ID to an Ito solver index.
Definition CD_ItoKMCJSON.H:334
virtual void initializePlasmaReactions()
Initialize plasma reactions.
Definition CD_ItoKMCJSON.cpp:1878
virtual bool containsBracket(const std::string &a_str) const noexcept
Check if a string contains standard brackets.
Definition CD_ItoKMCJSON.cpp:212
std::vector< std::pair< int, FunctionEN > > m_dielectricFieldEmission
List of dielectric field emission reactions.
Definition CD_ItoKMCJSON.H:421
virtual std::vector< std::tuple< std::string, std::vector< std::string >, std::vector< std::string > > > parseReactionWildcards(const std::vector< std::string > &a_reactants, const std::vector< std::string > &a_products, const nlohmann::json &a_reactionJSON) const noexcept
Make a reaction set into a superset. This parses wildcards '@' in reaction string.
Definition CD_ItoKMCJSON.cpp:3352
FunctionX m_gasNumberDensity
Background gas number density.
Definition CD_ItoKMCJSON.H:451
virtual Real getNeutralDensity(const RealVect &a_pos) const noexcept override
Get the neutral density at a position in space.
Definition CD_ItoKMCJSON.cpp:3416
virtual void sanctifyPlasmaReaction(const std::vector< std::string > &a_reactants, const std::vector< std::string > &a_products, const std::string &a_reaction) const noexcept
Check that a plasma reaction makes sense. I.e. that all species are properly defined and that it cons...
Definition CD_ItoKMCJSON.cpp:2354
virtual void throwParserWarning(const std::string &a_warning) const noexcept
Throw a parser warning.
Definition CD_ItoKMCJSON.cpp:142
ItoKMCJSON()
Default constructor.
Definition CD_ItoKMCJSON.cpp:29
bool m_previewRates
Preview rates or not.
Definition CD_ItoKMCJSON.H:271
bool m_skipReactions
A flag for skipping reactions completely.
Definition CD_ItoKMCJSON.H:266
virtual void initializePlasmaSpecies()
Initialize the plasma species.
Definition CD_ItoKMCJSON.cpp:578
std::function< Real(const Real E, const Real V, const Real dx, const Real dt, const RealVect &x, const Vector< Real > &phi)> FunctionEVXTP
Function for encapsulating a function f = f(E, V, x) where E is the electric field at physical coordi...
Definition CD_ItoKMCJSON.H:81
virtual void throwParserError(const std::string &a_error) const noexcept
Throw a parser error.
Definition CD_ItoKMCJSON.cpp:129
std::map< std::string, int > m_backgroundSpeciesMap
Map of string-int identifiers for background species.
Definition CD_ItoKMCJSON.H:302
virtual void initializeMobilities()
Initialize mobility functions.
Definition CD_ItoKMCJSON.cpp:1425
virtual void checkMolarFraction(const RealVect &a_position) const noexcept
Check that molar fraction is one. Throws a warning if it isn't.
Definition CD_ItoKMCJSON.cpp:241
virtual void initializeParticlePlacement()
Initialize the particle placement algorithm.
Definition CD_ItoKMCJSON.cpp:815
virtual void getReactionSpecies(std::list< size_t > &a_backgroundReactants, std::list< size_t > &a_plasmaReactants, std::list< size_t > &a_photonReactants, std::list< size_t > &a_backgroundProducts, std::list< size_t > &a_plasmaProducts, std::list< size_t > &a_photonProducts, const std::vector< std::string > &a_reactants, const std::vector< std::string > &a_products) const noexcept
Turn reactants and products strings into indices.
Definition CD_ItoKMCJSON.cpp:2617
virtual ~ItoKMCJSON() noexcept
Destructor.
Definition CD_ItoKMCJSON.cpp:89
std::map< std::string, int > m_photonIndexMap
Map for indexing a photon species name to a global index in the solver vectors.
Definition CD_ItoKMCJSON.H:344
std::vector< size_t > multinomial(const size_t N, const std::discrete_distribution< int > &a_distribution) const noexcept
Sample a multinomial distribution with N samples.
Definition CD_ItoKMCJSON.cpp:3823
std::map< int, std::string > m_backgroundSpeciesMapInverse
Map of int-string identifiers for background species.
Definition CD_ItoKMCJSON.H:307
std::vector< FunctionEX > m_fluidRates
Function-based plasma reaction rates as if they appeared in the reaction rate equation....
Definition CD_ItoKMCJSON.H:371
nlohmann::json m_json
Nohmanns implementation of JSON files.
Definition CD_ItoKMCJSON.H:286
virtual bool isBackgroundSpecies(const std::string &a_name) const noexcept
Return true if species is a background species.
Definition CD_ItoKMCJSON.cpp:179
FunctionX m_gasTemperature
Background gas temperature.
Definition CD_ItoKMCJSON.H:446
int m_numPlasmaSpecies
Total number of plasma species.
Definition CD_ItoKMCJSON.H:276
virtual void initializePhotoReactions()
Initialize photo-reactions.
Definition CD_ItoKMCJSON.cpp:1974
std::function< Real(const Real a_T1, const Real a_T2)> FunctionTT
Function for encapsulating a function f = f(T1, T2) where T1/T2 are temperatures of two species.
Definition CD_ItoKMCJSON.H:101
int m_numPhotonSpecies
Total number of photon species.
Definition CD_ItoKMCJSON.H:281
std::vector< bool > m_backgroundSpeciesPlot
Plot background species or not.
Definition CD_ItoKMCJSON.H:319
virtual Vector< Real > computeDiffusionCoefficients(const Real a_time, const RealVect &a_pos, const RealVect &a_E) const noexcept override
Compute the Ito solver diffusion coefficients.
Definition CD_ItoKMCJSON.cpp:3463
std::function< Real(const Real E, const RealVect &x)> FunctionEX
Function for encapsulating a function f = f(E, x) where E is the electric field at physical coordinat...
Definition CD_ItoKMCJSON.H:68
virtual void initializeBackgroundSpecies()
Initialize the background species.
Definition CD_ItoKMCJSON.cpp:370
std::vector< std::list< size_t > > m_plasmaReactionBackgroundReactants
List of background species involved in a reaction.
Definition CD_ItoKMCJSON.H:376
virtual Real parsePlasmaReactionDt(const nlohmann::json &a_reactionJSON) const
Parse whether or not a reaction should be a part of the time step calculation. Returns 1 if the react...
Definition CD_ItoKMCJSON.cpp:3225
virtual std::pair< bool, std::string > parsePlasmaReactionGradientCorrection(const nlohmann::json &a_reactionJSON) const
Parse whether or not a reaction uses a gradient correction for the rate.
Definition CD_ItoKMCJSON.cpp:3162
virtual bool needGradients() const noexcept override
Return true if the physics model requires species density gradients.
Definition CD_ItoKMCJSON.cpp:3683
std::vector< std::pair< int, FunctionEN > > m_electrodeFieldEmission
List of electrode field emission reactions.
Definition CD_ItoKMCJSON.H:426
virtual Real computeAlpha(const Real a_E, const RealVect &a_pos) const noexcept override
Compute Townsend ionization coefficient.
Definition CD_ItoKMCJSON.cpp:3426
std::string m_jsonFile
Input JSON file name.
Definition CD_ItoKMCJSON.H:291
virtual bool isPhotonSpecies(const std::string &a_name) const noexcept
Return true if species is a photon species.
Definition CD_ItoKMCJSON.cpp:201
virtual void initializeTemperatures()
Initialize the plasma species temperatures.
Definition CD_ItoKMCJSON.cpp:1620
std::vector< std::pair< bool, std::string > > m_kmcReactionGradientCorrections
Whether or not a reaction uses a gradient correction for the rate (Soloviev et. al....
Definition CD_ItoKMCJSON.H:396
virtual bool containsWildcard(const std::string &a_str) const noexcept
Check if a string contains the wildcard @ and return true if it does.
Definition CD_ItoKMCJSON.cpp:168
virtual void initializeFieldEmission()
Initialize field emission reactions.
Definition CD_ItoKMCJSON.cpp:2210
std::function< Real(const RealVect &a_position, const Real a_time)> FunctionXt
Function alias for e.g. initial data.
Definition CD_ItoKMCJSON.H:44
std::vector< FunctionEX > m_diffusionCoefficients
Diffusion coefficients for the various species.
Definition CD_ItoKMCJSON.H:354
std::map< std::string, SpeciesType > m_plasmaSpeciesTypes
Map for identifying a species name with a solver type.
Definition CD_ItoKMCJSON.H:324
virtual bool doesFileExist(const std::string &a_filename) const noexcept
Check if a file exists.
Definition CD_ItoKMCJSON.cpp:155
virtual std::pair< FunctionEVXTP, FunctionEX > parsePlasmaReactionRate(const nlohmann::json &a_reactionJSON, const std::list< size_t > &a_backgroundReactants, const std::list< size_t > &a_plasmaReactants) const
Parse a plasma reaction rate and turn it into a function.
Definition CD_ItoKMCJSON.cpp:2682
std::map< int, std::pair< bool, int > > m_plasmaReactionSolovievCorrection
Map of reactions that will be plotted.
Definition CD_ItoKMCJSON.H:406
std::vector< std::pair< bool, std::string > > m_kmcReactionRatePlots
Map of reactions that will be plotted.
Definition CD_ItoKMCJSON.H:401
std::vector< FunctionEX > m_mobilityFunctions
Mobilities for the various species.
Definition CD_ItoKMCJSON.H:349
std::vector< FunctionEX > m_plasmaTemperatures
Plasma species temperatures.
Definition CD_ItoKMCJSON.H:359
virtual Vector< Real > computeMobilities(const Real a_time, const RealVect &a_pos, const RealVect &a_E) const noexcept override
Compute the Ito solver mobilities.
Definition CD_ItoKMCJSON.cpp:3446
std::vector< std::list< size_t > > m_plasmaReactionPlasmaReactants
List of plasma species on the left-hand side of a reaction.
Definition CD_ItoKMCJSON.H:381
std::vector< ItoKMCBackgroundSpecies > m_backgroundSpecies
Map of background species.
Definition CD_ItoKMCJSON.H:313
std::map< std::string, int > m_itoSpeciesMap
Map for indexing from an ID to an Ito solver index.
Definition CD_ItoKMCJSON.H:329
std::pair< bool, std::string > m_autoEta
Flag if the user wants to compute the alpha coefficient from the reactions.
Definition CD_ItoKMCJSON.H:416
virtual void parseJSON()
Parse the JSON file.
Definition CD_ItoKMCJSON.cpp:272
bool m_verbose
Verbose or not.
Definition CD_ItoKMCJSON.H:246
virtual int getNumberOfPlotVariables() const noexcept override
Get number of extra diagnostic plot variables.
Definition CD_ItoKMCJSON.cpp:3702
virtual std::string trim(const std::string &a_string) const noexcept
Trim a string. This removes whitespace before/after.
Definition CD_ItoKMCJSON.cpp:106
virtual void printFluidRates() const noexcept
Print the fluid-representation of the reaction rates.
Definition CD_ItoKMCJSON.cpp:965
virtual void parseRuntimeOptions() noexcept override
Parse run-time options.
Definition CD_ItoKMCJSON.cpp:95
virtual void parseVerbose() noexcept
Parse chattiness.
Definition CD_ItoKMCJSON.cpp:259
virtual void initializeParticles()
Parse initial particles.
Definition CD_ItoKMCJSON.cpp:1120
bool m_plotAlpha
Plot Townsend ionization coefficient.
Definition CD_ItoKMCJSON.H:256
std::map< std::string, int > m_plasmaIndexMap
Map for indexing a plasma species name to a global index in the solver vectors.
Definition CD_ItoKMCJSON.H:339
virtual void parseReactionString(std::vector< std::string > &a_reactants, std::vector< std::string > &a_products, const std::string &a_reaction) const noexcept
Parses a reaction string into reactangs and products.
Definition CD_ItoKMCJSON.cpp:2578
std::function< Real(const Real dx, const Vector< Real > &phi)> FunctionDXP
Function alias for f = f(dx, phi) where dx is the grid resolution and phi is the plasma species densi...
Definition CD_ItoKMCJSON.H:88
Abstract base class coupling Kinetic Monte Carlo chemistry to Ito/CDR plasma solvers.
Definition CD_ItoKMCPhysics.H:84
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
SoA payload for Monte Carlo radiative-transfer photons.
Definition CD_Photon.H:29