|
rizer.cantera_ext
C++ Cantera 1-D plasma extension (custom Domain1D models and solvers)
|
#include <PlasmaChannelSolver.h>
Public Attributes | |
| std::vector< double > | t |
| < Recorded times [s], length nframes | |
| std::vector< double > | r |
| Gas temperature [K], row-major [nframes, npts]. | |
| std::vector< double > | Tg |
| Electron temperature [K], row-major [nframes, npts]. | |
| std::vector< double > | Te |
| Electron number density [1/m^3], row-major [nframes, npts]. | |
| std::vector< double > | ne |
| Species mass fractions [-], row-major [nframes, npts, nsp]. | |
| std::vector< double > | Y |
| Mass density [kg/m^3], row-major [nframes, npts]. | |
| std::vector< double > | rho |
| Total pressure [Pa], row-major [nframes, npts]. | |
| std::vector< double > | p |
| Radial velocity [m/s], row-major [nframes, npts]. | |
| std::vector< double > | u_r |
| Species names, length nsp (order matches the Y axis). | |
| std::vector< std::string > | species |
| double | boundary_mass_out = 0.0 |
| What the hydrodynamic sub-step moved across the domain boundary, accumulated over every half-step of the run, per unit axial length and per radian [kg/m/rad] and [J/m/rad] – the same convention as V_cell, which is what they are balanced against (see HydroStepResult::boundary_mass_out). | |
| std::vector< double > | boundary_species_mass_out |
| The same, per species [kg/m/rad], length nsp, with what species diffusion carries through the wall ghost face added: the hydro part exactly, the diffusion part trapezoidal in time, as boundary_diffusion_energy_out below. | |
| double | boundary_total_energy_out = 0.0 |
| double | boundary_electron_energy_out = 0.0 |
| double | pressure_work_electron = 0.0 |
| double | boundary_conduction_energy_out = 0.0 |
| What conduction (both pools) and species diffusion moved out through the wall ghost face over the run [J/m/rad], positive outward, same convention as the hydro terms above. | |
| double | boundary_diffusion_energy_out = 0.0 |
| std::vector< double > | solver_steps |
| Per-frame CVODE counters, length nframes; the t=0 entry is zero, since nothing has been integrated yet. | |
| std::vector< double > | solver_rhs_evals |
| std::vector< double > | solver_jac_evals |
| std::vector< double > | solver_err_test_fails |
| std::vector< double > | solver_nonlin_conv_fails |
| std::vector< double > | solver_last_order |
| std::vector< double > | solver_lin_rhs_evals |
| RHS calls made by the linear solver itself, forming the banded Jacobian by difference quotients. | |
| std::vector< double > | solver_lin_setups |
| std::vector< double > | Rp |
| Circuit history, length nframes when ChannelOptions::plasma_voltage is set and empty otherwise. | |
| std::vector< double > | Rp_state |
| Resistance of the recorded state [Ohm]. | |
| std::vector< double > | Vp |
| Plasma terminal voltage [V]. | |
| std::vector< double > | I |
| Total current V_p/R_p [A]. | |
| std::vector< double > | E |
| Field V_p/gap [V/m]. | |
| std::size_t | nframes = 0 |
| Number of recorded time frames [-]. | |
| std::size_t | npts = 0 |
| Number of radial grid points [-]. | |
| std::size_t | nsp = 0 |
| Number of species [-]. | |
Definition at line 162 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::boundary_conduction_energy_out = 0.0 |
What conduction (both pools) and species diffusion moved out through the wall ghost face over the run [J/m/rad], positive outward, same convention as the hydro terms above.
Zero when no transport term is enabled.
The hydro terms above miss these: the parabolic terms run inside the reaction sub-step, not the hydro one, and their wall face is a flux like any other. With them the total-energy identity reads change + boundary_total_energy_out + boundary_conduction_energy_out
Trapezoidal in time, not error-controlled. The outflow rate is sampled only at times the solve already stops at – each step's ends under hydrodynamics or a circuit, otherwise a dt grid – so recording it leaves CVODE's step sequence untouched. The price is a quadrature error second order in dt, outside CVODE's tolerance.
Definition at line 226 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::boundary_diffusion_energy_out = 0.0 |
Definition at line 227 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::boundary_electron_energy_out = 0.0 |
Definition at line 206 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::boundary_mass_out = 0.0 |
What the hydrodynamic sub-step moved across the domain boundary, accumulated over every half-step of the run, per unit axial length and per radian [kg/m/rad] and [J/m/rad] – the same convention as V_cell, which is what they are balanced against (see HydroStepResult::boundary_mass_out).
All zero when hydrodynamics is off, since no half-step runs.
NUMERICS.md section 10's identity is the two-term one the mass row uses, since the energy pair is an enthalpy flux and carries the compression work; section "Validation ladder"'s P4 row measures it. These are the terms that make the budget closable from the recorded history rather than only assertable as "roughly constant".
Definition at line 199 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::boundary_species_mass_out |
The same, per species [kg/m/rad], length nsp, with what species diffusion carries through the wall ghost face added: the hydro part exactly, the diffusion part trapezoidal in time, as boundary_diffusion_energy_out below.
Definition at line 204 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::boundary_total_energy_out = 0.0 |
Definition at line 205 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::E |
Field V_p/gap [V/m].
Definition at line 275 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::I |
Total current V_p/R_p [A].
Definition at line 274 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::ne |
Species mass fractions [-], row-major [nframes, npts, nsp].
Definition at line 173 of file PlasmaChannelSolver.h.
| std::size_t rizer::ChannelHistory::nframes = 0 |
Number of recorded time frames [-].
Definition at line 277 of file PlasmaChannelSolver.h.
| std::size_t rizer::ChannelHistory::npts = 0 |
Number of radial grid points [-].
Definition at line 278 of file PlasmaChannelSolver.h.
| std::size_t rizer::ChannelHistory::nsp = 0 |
Number of species [-].
Definition at line 279 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::p |
Radial velocity [m/s], row-major [nframes, npts].
Zero throughout unless the config asks for hydrodynamics
Definition at line 180 of file PlasmaChannelSolver.h.
| double rizer::ChannelHistory::pressure_work_electron = 0.0 |
Definition at line 207 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::r |
Gas temperature [K], row-major [nframes, npts].
Definition at line 167 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::rho |
Total pressure [Pa], row-major [nframes, npts].
[nframes, npts]. Derived from the two-temperature equation of state.
Definition at line 177 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Rp |
Circuit history, length nframes when ChannelOptions::plasma_voltage is set and empty otherwise.
Rp is the resistance the circuit was DRIVEN with over the step ending at that frame, which is what I was computed from and so what the entry has to go on meaning. Rp_state is the resistance OF the frame's own recorded fields, which is what a reader recomputing it from Tg, Te and Y gets. They agree only where the conductivity is not moving: across a breakdown knee it moves decades inside one step and the two differ by as much, so the second is recorded rather than left to be mis-derived from the first. At t=0 no step has run and both are the initial state's. Driven plasma resistance [Ohm]
Definition at line 271 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Rp_state |
Resistance of the recorded state [Ohm].
Definition at line 272 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_err_test_fails |
Definition at line 250 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_jac_evals |
Definition at line 249 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_last_order |
Definition at line 252 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_lin_rhs_evals |
RHS calls made by the linear solver itself, forming the banded Jacobian by difference quotients.
Disjoint from solver_rhs_evals, which counts only the nonlinear solver's own calls.
Definition at line 256 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_lin_setups |
Definition at line 257 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_nonlin_conv_fails |
Definition at line 251 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_rhs_evals |
Definition at line 248 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::solver_steps |
Per-frame CVODE counters, length nframes; the t=0 entry is zero, since nothing has been integrated yet.
Under hydrodynamics, where the Strang loop re-seeds the integrator at every split step and SUNDIALS resets its counters at each CVodeReInit, each entry is the sum over that frame's own split steps. Otherwise the integrator runs straight through and each entry is the running total since t=0. last_order is the BDF order the frame finished on: an order pinned near 1 is a restart the integrator never recovered from.
They do not mean the same thing under the two partitionings, so they are not comparable across them. The coupled form runs one system, and each entry is that system's count. independent_nodes runs one per node, and each entry is the SUM over all of them – 14420 against the coupled form's 1346 on a 21-node case is about 690 steps per node, not ten times the work. Divide by nPoints() before comparing. The one exception is last_order, aggregated as the MINIMUM over the nodes rather than a sum, since a mean would hide the single node that never climbed back after a restart – so it alone is already per-node.
Definition at line 247 of file PlasmaChannelSolver.h.
| std::vector<std::string> rizer::ChannelHistory::species |
Definition at line 185 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::t |
< Recorded times [s], length nframes
Radial grid [m], length npts
Definition at line 165 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Te |
Electron number density [1/m^3], row-major [nframes, npts].
Definition at line 171 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Tg |
Electron temperature [K], row-major [nframes, npts].
Definition at line 169 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::u_r |
Species names, length nsp (order matches the Y axis).
Definition at line 183 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Vp |
Plasma terminal voltage [V].
Definition at line 273 of file PlasmaChannelSolver.h.
| std::vector<double> rizer::ChannelHistory::Y |
Mass density [kg/m^3], row-major [nframes, npts].
Definition at line 175 of file PlasmaChannelSolver.h.