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

Composition-resolved electron-heavy momentum-transfer collision model. More...

#include <CollisionModel.h>

Classes

struct  SpeciesSpec
 Per-species spec, in species-index order. More...

Public Member Functions

 CollisionModel ()=default
 CollisionModel (const std::vector< SpeciesSpec > &specs, double Te_min, double Te_max, std::size_t Te_n, bool spitzer_correction=true)
 Build per-species Qbar(Te) tables on a log-spaced Te grid [Te_min, Te_max].
bool empty () const
void evaluate (double Te, double n_e, const double *n_k, std::size_t nsp, double &sigma, double &nu_E, double &cond_maxwell_2) const
 Composition-resolved electron transport.
double conductivity (double Te, double n_e, const double *n_k, std::size_t nsp) const
 Conductivity only [S/m].

Static Public Member Functions

static double electronElectronCollisionFrequency (double n_e, double Te)
 Electron-electron collision frequency \(\nu_{ee}\) [1/s] (Mitchner II-8.11e with Z=1), the closed-form ingredient of the first Maxwellian-distribution condition term \(C_1 = \nu_{ee}/m_e\) (Mitchner VIII-3.8).
static double meanCrossSection (const std::vector< double > &energy_J, const std::vector< double > &sigma_m2, double Te, double x_max=20.0, int N=1000)
 The Maxwellian momentum-transfer kernel Qbar(Te) [m^2] (single source of truth; also exposed to Python for validation).
static std::vector< double > meanCrossSectionTable (const std::vector< double > &energy_J, const std::vector< double > &sigma_m2, const std::vector< double > &Te, double x_max=20.0, int N=1000)
 Tabulated variant of meanCrossSection, evaluated at each Te in the input vector.

Detailed Description

Composition-resolved electron-heavy momentum-transfer collision model.

Ports rizer's Python collision physics (Mitchner & Kruger 1973, as implemented in rizer/plasma/momentum_transfer_cross_sections.py, rizer/plasma/collision_frequency.py, and rizer/plasma/equations.py, and assembled in PlasmaExtension.electrical_conductivity / plasma_power_elastic) to C++, so a 0D/1D plasma reactor can evaluate the electrical conductivity and the elastic energy-exchange frequency natively from the live composition every RHS, rather than from a frozen \(\nu_m(T_e)\) table.

Per-species kinds (mirrors get_momentum_transfer_cross_section_model):

  • Tabulated neutral: Maxwellian-averaged cross section, precomputed on a Te grid at build and linearly interpolated live (Mitchner II-6.30):

    \[ \overline{Q}_k(T_e) = \frac{2}{3} \int_0^{x_\text{max}} x^2 e^{-x} Q(k_B T_e x)\, dx. \]

  • Hard-sphere neutral: \(\overline{Q} = \frac{4}{3} \pi r^2\) (Te-independent).
  • Ion (Z>0): Coulomb closed form (Mitchner II-8.10), \(\nu_{ei} = n_i \, c_\text{st} \, T_e^{-1.5} \, \ln\Lambda\).
  • Electron: skipped in the heavy sums.

Conductivity (Mitchner II-13.7b):

\[ \sigma = \frac{n_e e^2}{m_e \nu_{eH}}, \]

\[ \nu_{eH} = \sum_\text{neutrals} n_k \overline{Q}_k(T_e) v_\text{th}(T_e) + \sum_\text{ions} \nu_{ei}, \]

with the Spitzer e-e correction (II-13.18) bridged smoothly from a factor of 1 to 1.98 via the ion collision fraction \(f_\text{ion} = \nu_\text{ions} / \nu_{eH}\). Elastic exchange (II-7.6 / VI-5.1):

\[ \nu_E = \sum_\text{heavy} \left(\frac{2 m_e}{m_h}\right) \nu_{eh}, \]

such that

\[ P_\text{el} = \nu_E \, n_e \, \frac{3}{2} k_B (T_e - T_g). \]

Definition at line 56 of file CollisionModel.h.

Constructor & Destructor Documentation

◆ CollisionModel() [1/2]

rizer::CollisionModel::CollisionModel ( )
default

◆ CollisionModel() [2/2]

rizer::CollisionModel::CollisionModel ( const std::vector< SpeciesSpec > & specs,
double Te_min,
double Te_max,
std::size_t Te_n,
bool spitzer_correction = true )

Build per-species Qbar(Te) tables on a log-spaced Te grid [Te_min, Te_max].

Parameters
specsPer-species collision specs, in species-index order
Te_minLower bound of the precomputed Qbar(Te) grid [K]
Te_maxUpper bound of the precomputed Qbar(Te) grid [K]
Te_nNumber of log-spaced points in the Qbar(Te) grid
spitzer_correctiontrue: apply the Spitzer e-e correction (II-13.18); false: Lorentz gas only

Definition at line 120 of file CollisionModel.cpp.

Member Function Documentation

◆ conductivity()

double rizer::CollisionModel::conductivity ( double Te,
double n_e,
const double * n_k,
std::size_t nsp ) const

Conductivity only [S/m].

Parameters
TeElectron temperature [K]
n_eElectron number density [m^-3]
n_kPer-species number density array, length nsp [m^-3]
nspNumber of species / length of n_k

Definition at line 242 of file CollisionModel.cpp.

◆ electronElectronCollisionFrequency()

double rizer::CollisionModel::electronElectronCollisionFrequency ( double n_e,
double Te )
static

Electron-electron collision frequency \(\nu_{ee}\) [1/s] (Mitchner II-8.11e with Z=1), the closed-form ingredient of the first Maxwellian-distribution condition term \(C_1 = \nu_{ee}/m_e\) (Mitchner VIII-3.8).

Depends only on n_e, Te (no per-species composition), so this is a static function rather than an instance method.

Parameters
n_eElectron number density [m^-3]
TeElectron temperature [K]

Definition at line 250 of file CollisionModel.cpp.

◆ empty()

bool rizer::CollisionModel::empty ( ) const
inline

Definition at line 80 of file CollisionModel.h.

◆ evaluate()

void rizer::CollisionModel::evaluate ( double Te,
double n_e,
const double * n_k,
std::size_t nsp,
double & sigma,
double & nu_E,
double & cond_maxwell_2 ) const

Composition-resolved electron transport.

Parameters
TeElectron temperature [K]
n_eElectron number density [m^-3]
n_kPer-species number density [m^-3] (length nsp)
nspNumber of species (length of n_k)
[out]sigmaElectrical conductivity [S/m]
[out]nu_EElastic energy-exchange frequency [1/s]
[out]cond_maxwell_2\(\sum_h \bar\nu_{eh}/m_h\) [1/kg/s], the second Maxwellian-distribution condition term (Mitchner VIII-3.8); see PlasmaExtension.conditions_for_maxwellian_distribution.

Definition at line 172 of file CollisionModel.cpp.

◆ meanCrossSection()

double rizer::CollisionModel::meanCrossSection ( const std::vector< double > & energy_J,
const std::vector< double > & sigma_m2,
double Te,
double x_max = 20.0,
int N = 1000 )
static

The Maxwellian momentum-transfer kernel Qbar(Te) [m^2] (single source of truth; also exposed to Python for validation).

Q interpolated from (energy_J, sigma_m2), zero outside the tabulated range.

Parameters
energy_JTabulated cross-section energy abscissa [J]
sigma_m2Tabulated momentum-transfer cross section [m^2]
TeElectron temperature at which to evaluate Qbar [K]
x_maxUpper limit of the reduced-energy integration variable \(x = E / (k_B T_e)\)
NNumber of trapezoid points spanning [0, x_max]

Definition at line 74 of file CollisionModel.cpp.

◆ meanCrossSectionTable()

std::vector< double > rizer::CollisionModel::meanCrossSectionTable ( const std::vector< double > & energy_J,
const std::vector< double > & sigma_m2,
const std::vector< double > & Te,
double x_max = 20.0,
int N = 1000 )
static

Tabulated variant of meanCrossSection, evaluated at each Te in the input vector.

Parameters
energy_JTabulated cross-section energy abscissa [J]
sigma_m2Tabulated momentum-transfer cross section [m^2]
TeElectron temperatures at which to evaluate Qbar, one per output entry [K]
x_maxUpper limit of the reduced-energy integration variable \(x = E / (k_B T_e)\)
NNumber of trapezoid points spanning [0, x_max]

Definition at line 109 of file CollisionModel.cpp.


The documentation for this class was generated from the following files: