rizer.cantera_ext
C++ Cantera 1-D plasma extension (custom Domain1D models and solvers)
Loading...
Searching...
No Matches
ReactorRHS.h
Go to the documentation of this file.
1
16
17#ifndef RIZER_REACTOR_RHS_H
18#define RIZER_REACTOR_RHS_H
19
20#ifndef NOMINMAX
21#define NOMINMAX
22#endif
24#include "PropertyTable.h"
25#include "CollisionModel.h"
26
27#include <memory>
28#include <string>
29#include <vector>
30
31namespace rizer {
32
34public:
43 struct Diagnostics {
44 double P_elastic = 0.0;
45 double P_inelastic = 0.0;
46 double P_chemical = 0.0;
47 double P_chemical_e = 0.0;
48 double P_Joule = 0.0;
49 double cond_maxwell_1 = 0.0;
50 double cond_maxwell_2 = 0.0;
51 };
52
53 // Exactly one of the two closures below is active per instance: if `collision` is
54 // non-empty (i.e. CollisionModel::empty() is false) it is used exclusively for
55 // sigma/nu_E and the sigma_T/sigma_v/nu_m_T/nu_m_v/nu_m/nu_E fallback fields are
56 // ignored; otherwise the legacy tabulated/scalar closure is used. See
57 // ReactorRHS::transport() in ReactorRHS.cpp for the selection logic.
58 struct Config {
61 bool reacting = true;
64 // Fallbacks used only when collision.empty():
67 std::vector<double> sigma_T;
70 std::vector<double> sigma_v;
73 std::vector<double> nu_m_T;
76 std::vector<double> nu_m_v;
79 double nu_m = 0.0;
82 double nu_E = 0.0;
83 };
84
90 ReactorRHS(std::shared_ptr<Cantera::Solution> sol, Config cfg);
91
92 std::size_t nSpecies() const { return m_nsp; }
93 std::size_t electronIndex() const { return m_ie; }
94 const std::vector<double>& molecularWeights() const { return m_wt; }
97 std::string speciesName(std::size_t k) const;
98 const std::shared_ptr<Cantera::Solution>& solution() const { return m_sol; }
99
114 const std::vector<double>& speciesCp() const { return m_cp_mass; }
115
133 void rates(double Tg, double Te, const double* Y, double rho, double E, double& dTg,
134 double& dTe, double* dY, double& lhs_Tg, double& lhs_Te,
135 Diagnostics* diag = nullptr) const;
136
142 double conductivity(double Tg, double Te, const double* Y, double rho) const;
148 double electronDensity(double Tg, double Te, const double* Y, double rho) const;
149
150private:
162 void setState(double Tg, double Te, const double* Y, double rho, double& P,
163 double& Xe, double& Tmean, double& n_e) const;
175 void transport(double Te, double n_e, double P, double Tmean, double& sigma,
176 double& nu_E, double& cond_maxwell_2) const;
177
178 std::shared_ptr<Cantera::Solution> m_sol;
179 std::size_t m_nsp;
180 std::size_t m_ie;
181 bool m_reacting;
182 CollisionModel m_collision;
183 PropertyTable m_sigma;
184 PropertyTable m_nu_m_tab;
185 double m_nu_m;
186 double m_nu_E;
187 std::vector<double> m_wt;
188 std::vector<char> m_is_electron_rxn;
189 mutable std::vector<double> m_Yc, m_wdot, m_uk, m_cpR, m_dU, m_rop, m_X, m_nk;
191 mutable std::vector<double> m_cp_mass;
192};
193
194} // namespace rizer
195
196#endif
Composition-resolved electron-heavy momentum-transfer collision model.
double conductivity(double Tg, double Te, const double *Y, double rho) const
Electrical conductivity [S/m] at a node state.
std::string speciesName(std::size_t k) const
Name of species k in the mechanism.
ReactorRHS(std::shared_ptr< Cantera::Solution > sol, Config cfg)
Construct a ReactorRHS for a given plasma Solution and configuration.
double electronDensity(double Tg, double Te, const double *Y, double rho) const
Electron number density [1/m^3], .
void rates(double Tg, double Te, const double *Y, double rho, double E, double &dTg, double &dTe, double *dY, double &lhs_Tg, double &lhs_Te, Diagnostics *diag=nullptr) const
Single-cell RHS (no transport, no volume work).
std::size_t nSpecies() const
Definition ReactorRHS.h:92
const std::shared_ptr< Cantera::Solution > & solution() const
Definition ReactorRHS.h:98
std::size_t electronIndex() const
Definition ReactorRHS.h:93
const std::vector< double > & speciesCp() const
Mass-basis species heat capacity at constant pressure c_p,k [J/kg/K], length nSpecies(),...
Definition ReactorRHS.h:114
const std::vector< double > & molecularWeights() const
Definition ReactorRHS.h:94
bool reacting
Include finite-rate chemistry source terms (true) or freeze composition (false) [-].
Definition ReactorRHS.h:61
std::vector< double > sigma_v
sigma(Te) table: electrical conductivity values at sigma_T [S/m]
Definition ReactorRHS.h:70
CollisionModel collision
Composition-resolved sigma/nu_E (preferred).
Definition ReactorRHS.h:63
std::vector< double > nu_m_T
nu_m(Te) table: electron-temperature grid points [K], strictly increasing
Definition ReactorRHS.h:73
double nu_m
Scalar electron momentum-transfer frequency, used when nu_m_T/nu_m_v are empty [1/s].
Definition ReactorRHS.h:79
std::vector< double > nu_m_v
nu_m(Te) table: electron momentum-transfer frequency values at nu_m_T [1/s]
Definition ReactorRHS.h:76
double nu_E
Scalar elastic electron-heavy energy-exchange frequency, used when collision is empty [1/s].
Definition ReactorRHS.h:82
std::vector< double > sigma_T
sigma(Te) table: electron-temperature grid points [K], strictly increasing
Definition ReactorRHS.h:67
Optional power / Maxwellian-condition breakdown filled by rates() when a non-null pointer is passed.
Definition ReactorRHS.h:43
double cond_maxwell_1
nu_ee/m_e [1/kg/s] (Mitchner VIII-3.8, term 1)
Definition ReactorRHS.h:49
double P_Joule
Joule heating power [W/m^3].
Definition ReactorRHS.h:48
double P_chemical_e
Electron chemical power [W/m^3].
Definition ReactorRHS.h:47
double P_chemical
Heavy-species chemical power [W/m^3].
Definition ReactorRHS.h:46
double P_inelastic
Inelastic electron-impact-reaction power [W/m^3].
Definition ReactorRHS.h:45
double P_elastic
Elastic electron-heavy exchange power [W/m^3].
Definition ReactorRHS.h:44
double cond_maxwell_2
sum_h nu_eh/m_h [1/kg/s] (Mitchner VIII-3.8, term 2)
Definition ReactorRHS.h:50