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#
Path to the repo-wide default per-species collision-frequency model mapping. |
Classes#
Functions#
Get the momentum transfer collision frequency model for a given species. |
|
|
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, alongsiderizer.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:
- Returns:
Momentum transfer collision frequency in s^-1.
- Return type:
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:
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 onn_e. Ignored for neutral partners.
- Returns:
Energy exchange collision frequency in s^-1.
- Return type:
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:
- 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++
CollisionModelpybind11 binding expects these flat arrays.- Parameters:
mtcf (
listofMomentumTransferCollisionFrequencyModel) – Per-species models, in species-index order (as built byget_momentum_transfer_collision_frequency_model()/get_momentum_transfer_collision_frequencies_list).n_species (
int) – Number of species (len(mtcf)).
- Returns:
(xsec_energy_J, xsec_sigma_m2, radius_m, ion_Z): the first two are per-species lists of 1D arrays (orNonewhere not applicable), the last two are(n_species,)arrays (radius NaN / Z 0 where not applicable).- Return type:
tupleoflist,list,numpy.ndarray,numpy.ndarray
Notes
Shared by
rizer.plasma.constant_mass_reactor_cpp.build_reactor0d()andrizer.cantera_ext.plasma_channel.PlasmaChannelso both native solvers build the identical C++ collision model from the samemtcf.