rizer.cantera_ext
C++ Cantera 1-D plasma extension (custom Domain1D models and solvers)
Loading...
Searching...
No Matches
rizer::ChannelHistory Struct Reference

#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 [-].

Detailed Description

Definition at line 162 of file PlasmaChannelSolver.h.

Member Data Documentation

◆ boundary_conduction_energy_out

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

  • boundary_diffusion_energy_out = 0, up to the scheme's interior error.

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.

◆ boundary_diffusion_energy_out

double rizer::ChannelHistory::boundary_diffusion_energy_out = 0.0

Definition at line 227 of file PlasmaChannelSolver.h.

◆ boundary_electron_energy_out

double rizer::ChannelHistory::boundary_electron_energy_out = 0.0

Definition at line 206 of file PlasmaChannelSolver.h.

◆ boundary_mass_out

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.

◆ boundary_species_mass_out

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.

◆ boundary_total_energy_out

double rizer::ChannelHistory::boundary_total_energy_out = 0.0

Definition at line 205 of file PlasmaChannelSolver.h.

◆ E

std::vector<double> rizer::ChannelHistory::E

Field V_p/gap [V/m].

Definition at line 275 of file PlasmaChannelSolver.h.

◆ I

std::vector<double> rizer::ChannelHistory::I

Total current V_p/R_p [A].

Definition at line 274 of file PlasmaChannelSolver.h.

◆ ne

std::vector<double> rizer::ChannelHistory::ne

Species mass fractions [-], row-major [nframes, npts, nsp].

Definition at line 173 of file PlasmaChannelSolver.h.

◆ nframes

std::size_t rizer::ChannelHistory::nframes = 0

Number of recorded time frames [-].

Definition at line 277 of file PlasmaChannelSolver.h.

◆ npts

std::size_t rizer::ChannelHistory::npts = 0

Number of radial grid points [-].

Definition at line 278 of file PlasmaChannelSolver.h.

◆ nsp

std::size_t rizer::ChannelHistory::nsp = 0

Number of species [-].

Definition at line 279 of file PlasmaChannelSolver.h.

◆ p

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.

◆ pressure_work_electron

double rizer::ChannelHistory::pressure_work_electron = 0.0

Definition at line 207 of file PlasmaChannelSolver.h.

◆ r

std::vector<double> rizer::ChannelHistory::r

Gas temperature [K], row-major [nframes, npts].

Definition at line 167 of file PlasmaChannelSolver.h.

◆ rho

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.

◆ Rp

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.

◆ Rp_state

std::vector<double> rizer::ChannelHistory::Rp_state

Resistance of the recorded state [Ohm].

Definition at line 272 of file PlasmaChannelSolver.h.

◆ solver_err_test_fails

std::vector<double> rizer::ChannelHistory::solver_err_test_fails

Definition at line 250 of file PlasmaChannelSolver.h.

◆ solver_jac_evals

std::vector<double> rizer::ChannelHistory::solver_jac_evals

Definition at line 249 of file PlasmaChannelSolver.h.

◆ solver_last_order

std::vector<double> rizer::ChannelHistory::solver_last_order

Definition at line 252 of file PlasmaChannelSolver.h.

◆ solver_lin_rhs_evals

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.

◆ solver_lin_setups

std::vector<double> rizer::ChannelHistory::solver_lin_setups

Definition at line 257 of file PlasmaChannelSolver.h.

◆ solver_nonlin_conv_fails

std::vector<double> rizer::ChannelHistory::solver_nonlin_conv_fails

Definition at line 251 of file PlasmaChannelSolver.h.

◆ solver_rhs_evals

std::vector<double> rizer::ChannelHistory::solver_rhs_evals

Definition at line 248 of file PlasmaChannelSolver.h.

◆ solver_steps

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.

◆ species

std::vector<std::string> rizer::ChannelHistory::species

Definition at line 185 of file PlasmaChannelSolver.h.

◆ t

std::vector<double> rizer::ChannelHistory::t

< Recorded times [s], length nframes

Radial grid [m], length npts

Definition at line 165 of file PlasmaChannelSolver.h.

◆ Te

std::vector<double> rizer::ChannelHistory::Te

Electron number density [1/m^3], row-major [nframes, npts].

Definition at line 171 of file PlasmaChannelSolver.h.

◆ Tg

std::vector<double> rizer::ChannelHistory::Tg

Electron temperature [K], row-major [nframes, npts].

Definition at line 169 of file PlasmaChannelSolver.h.

◆ u_r

std::vector<double> rizer::ChannelHistory::u_r

Species names, length nsp (order matches the Y axis).

Definition at line 183 of file PlasmaChannelSolver.h.

◆ Vp

std::vector<double> rizer::ChannelHistory::Vp

Plasma terminal voltage [V].

Definition at line 273 of file PlasmaChannelSolver.h.

◆ Y

std::vector<double> rizer::ChannelHistory::Y

Mass density [kg/m^3], row-major [nframes, npts].

Definition at line 175 of file PlasmaChannelSolver.h.


The documentation for this struct was generated from the following file: