rizer.plasma.collision_frequency#

Define momentum transfer and energy collision frequency model used by [Mitchner1973].

Notes

  • \(\nu_{e h}^{(1)}\) is the momentum transfer collision frequency, in s^-1, between electrons and heavy particles (e.g. neutrals, ions), defined in equation (II 5.6) of [Mitchner1973].

  • \(\bar{\nu_{e h}}^{(1)}\) is the average momentum transfer collision frequency, in s^-1, between electrons and heavy particles (e.g. neutrals, ions), defined in equation (II 6.29) of [Mitchner1973].

  • \(\nu_{e h}^{E} = \frac{2 m_e}{m_h} \nu_{e h}^{(1)}\) is the energy exchange collision frequency, in s^-1, between electrons and heavy particles (e.g. neutrals, ions), defined in equation (II 7.6) of [Mitchner1973].

  • \(\bar{\nu_{e h}}^{E}\) is the average energy exchange collision frequency, in s^-1.

Attributes#

logger

DEFAULT_COLLISION_FREQUENCY_MODEL_PATH

Path to the repo-wide default per-species collision-frequency model mapping.

Classes#

Functions#

get_momentum_transfer_collision_frequency_model(...)

Get the momentum transfer collision frequency model for a given species.

unpack_momentum_transfer_models(→ tuple[list, list, ...)

Unpack a per-species momentum-transfer model list into the flat arrays.

Module Contents#

rizer.plasma.collision_frequency.logger#
rizer.plasma.collision_frequency.DEFAULT_COLLISION_FREQUENCY_MODEL_PATH#

Path to the repo-wide default per-species collision-frequency model mapping.

Loaded by rizer.misc.simulation.simulation.get_default_collision_frequency_model() (kept there, alongside rizer.misc.simulation.simulation.parse_convert_yaml(), so the same loose-YAML-number parsing is used); this module only owns the path so the data file can live next to the code that defines the model classes.

class rizer.plasma.collision_frequency.MomentumTransferCollisionFrequencyModel(name: str, cross_section_model: rizer.plasma.momentum_transfer_cross_sections.MomentumTransferCrossSectionModel)#
name#
cross_section_model#
get_mean_momentum_transfer_collision_frequency(T: float, n_h: float, n_e: float | None = None) float#

Get the mean momentum transfer collision frequency.

Parameters:
  • T (float) – Temperature in K.

  • n_h (float) – Heavy particle density in m^-3.

Returns:

Momentum transfer collision frequency in s^-1.

Return type:

float

Notes

The mean momentum transfer collision frequency is defined in equation (II 6.29) of [Mitchner1973] as:

\[\bar{\nu_{e h}}^{(1)} = n_h \bar{Q}_{12} v_{th}\]

where:

  • \(\bar{\nu_{e h}}^{(1)}\) is the average momentum transfer collision frequency,

  • \(n_h\) is the heavy particle density,

  • \(\bar{Q}_{12}\) is the mean momentum transfer cross section in m²,

  • \(v_{th}\) is the electron thermal velocity in m/s.

class rizer.plasma.collision_frequency.IonMomentumTransferCollisionFrequencyModel(name: str, Z: int = 1)#

Bases: MomentumTransferCollisionFrequencyModel

name#
Z = 1#
cst#
get_mean_momentum_transfer_collision_frequency(T: float, n_h: float, n_e: float | None = None) float#

Get the mean momentum transfer collision frequency.

It is defined in equation (II 8.10) of [Mitchner1973], and assumes that ions are only ionized once. For the case of multiply ionized ions, a factor of \(Z^2\) should be included in the collision frequency expression, where \(Z\) is the ion charge state. See eq. 3.33 in https://www-thphys.physics.ox.ac.uk/people/FelixParra/CollisionalPlasmaPhysics/notes/lecII_electronion.pdf

Parameters:
  • T (float) – Temperature in K.

  • n_h (float) – Ion density in m^-3.

  • m_h (float) – Heavy particle mass in kg.

  • n_e (float) – Electron density in m^-3.

  • model (str, optional) – Model to use for the collision frequency calculation. Default is “Mitchner”.

Notes

The mean momentum transfer collision frequency for collision between an electron and an ion is defined in equation (II 8.10) of [Mitchner1973] as:

\[\bar{v}_{e i} \equiv n_i \frac{4 \sqrt{2 \pi}}{3}\left(\frac{m_e}{k T}\right)^{3 / 2} \left(\frac{e^2}{4 \pi \epsilon_0 m_e}\right)^2 \ln \Lambda\]

where:

  • \(\bar{\nu_{e h}}^{(1)}\) is the average momentum transfer collision frequency,

  • \(n_h\) is the heavy particle density,

  • \(\bar{Q}_{12}\) is the mean momentum transfer cross section in m²,

  • \(v_{th}\) is the electron thermal velocity in m/s.

class rizer.plasma.collision_frequency.EnergyExchangeCollisionFrequencyModel(name: str, momentum_transfer_model: MomentumTransferCollisionFrequencyModel)#
name#
momentum_transfer_model#
get_mean_energy_exchange_collision_frequency(T: float, n_h: float, m_h: float, n_e: float | None = None) float#

Get the mean energy exchange collision frequency.

Parameters:
  • T (float) – Temperature in K.

  • n_h (float) – Heavy particle density in m^-3.

  • m_h (float) – Heavy particle mass in kg.

  • n_e (float, optional) – Electron density in m^-3. Required when the underlying momentum-transfer model describes a charged partner (ion or electron), whose Coulomb collision frequency depends on n_e. Ignored for neutral partners.

Returns:

Energy exchange collision frequency in s^-1.

Return type:

float

Notes

The mean energy exchange collision frequency is defined in equation (II 7.6) of [Mitchner1973] as:

\[\bar{\nu_{e h}}^{E} = \frac{2 m_e}{m_h} \bar{\nu_{e h}}^{(1)}\]

where:

  • \(\bar{\nu_{e h}}^{E}\) is the average energy exchange collision frequency,

  • \(\bar{\nu_{e h}}^{(1)}\) is the average momentum transfer collision frequency,

  • \(m_e\) is the electron mass,

  • \(m_h\) is the heavy particle mass.

The \(2 m_e / m_h\) factor is the fraction of energy an electron transfers per elastic collision, derived in the small mass-ratio limit \(m_e \ll m_h\). It is invalid for an electron partner (\(m_h \simeq m_e\)): elastic electron-electron collisions redistribute energy within the electron population but remove no net energy from it, so the exchange frequency is zero.

rizer.plasma.collision_frequency.get_momentum_transfer_collision_frequency_model(species: str, use_default_radius: bool = False, use_first_available: bool = False, database_to_use: str | None = None, default_radius: float = 1e-10) MomentumTransferCollisionFrequencyModel#

Get the momentum transfer collision frequency model for a given species.

Parameters:
  • species (str) – Name of the species (e.g. “CH4”, “Ar”, “N2”).

  • use_default_radius (bool, optional) – If True, use the default radius for the species if the cross section data is not found in the database.

  • use_first_available (bool, optional) – If True, use the first available cross section data file for the species if multiple files are found in the database. If False, raise an error if multiple files are found.

  • database_to_use (str, optional) – If specified, use this file for the cross section data. This is useful if you want to use a specific file from the database, regardless of the species name.

  • default_radius (float, optional) – Default radius in m to use if the cross section data is not found in the database. By default, it is set to 1e-10 m.

Returns:

The momentum transfer collision frequency model for the given species.

Return type:

MomentumTransferCollisionFrequencyModel

rizer.plasma.collision_frequency.unpack_momentum_transfer_models(mtcf: list[MomentumTransferCollisionFrequencyModel], n_species: int) tuple[list, list, numpy.ndarray, numpy.ndarray]#

Unpack a per-species momentum-transfer model list into the flat arrays.

The C++ CollisionModel pybind11 binding expects these flat arrays.

Parameters:
Returns:

(xsec_energy_J, xsec_sigma_m2, radius_m, ion_Z): the first two are per-species lists of 1D arrays (or None where not applicable), the last two are (n_species,) arrays (radius NaN / Z 0 where not applicable).

Return type:

tuple of list, list, numpy.ndarray, numpy.ndarray

Notes

Shared by rizer.plasma.constant_mass_reactor_cpp.build_reactor0d() and rizer.cantera_ext.plasma_channel.PlasmaChannel so both native solvers build the identical C++ collision model from the same mtcf.