—
Plot electrical conductivity vs. temperature for a plasma of methane.#
The electrical conductivity of a plasma is the ability of the plasma to conduct an electric current. It is a key parameter in the study of plasmas, as it determines the behavior of the plasma in the presence of an electric field.
It assumed that the plasma is in local thermodynamic equilibrium (LTE), which means that all temperatures are equal.
Equilibrium composition#
The following species are considered in the mechanism:
H, H2, C, CH, CH2, CH3, CH4, C2, C2H, C2H2, C2H3, C2H4, C2H5, C2H6,
corresponding ions,
electrons,
no solid carbon species.
Data comes from the following sources:
[GRCDatabase] for neutral species, C+, C2+, CH+, H+ and H2+, and for electrons,
[Burcat] for the other ions.
The thermo data are given as NASA 9 polynomial coefficients (For details, see https://cantera.org/stable/reference/thermo/species-thermo.html#the-nasa-9-coefficient-polynomial-parameterization).
The temperature range is from 200 to 20000 K for atomic species, and from 200 to 6000 K for molecular species.
Then, to compute the equilibrium composition of the plasma, the Gibbs free energy minimization method is used.
Electrical conductivity computation#
The computation presented here is based on [Raizer1991] and on Chapter II, section 13 of [Mitchner1973].
The electrical conductivity is given by:
where:
\(n_e\) is the electron number density,
\(e\) is the elementary charge,
\(m_e\) is the electron mass,
\(\large \overline{\nu_{eH}} = \sum_k \overline{\nu_{ek}}\) is the average momentum transfer collision frequency of an electron with all heavy particles.
\(\large \overline{\nu_{ek}}\) is the energy-weighted average momentum transfer collision frequency between an electron and heavy particles of species k,
\(\large \overline{\nu_{eH}}\) can be computed as a sum of the collision frequencies with neutrals \(\large \overline{\nu_{eN}}\) and with ions \(\large \overline{\nu_{eI}}\):
\(\large \overline{\nu_{eH}} = \overline{\nu_{eN}} + \overline{\nu_{eI}}\).
In the special case where \(\large \overline{\nu_{eI}} >> \overline{\nu_{eN}}\), the plasma is said to be strongly ionized, and the electrical conductivity can be computed using the Spitzer formula:
where:
\(\sigma_{\text{strongly ionized}}\) is the strongly ionized electrical conductivity,
\(\text{Spitzer constant} = 1.53 \times 10^{-2} \, \Omega^{-1} \, \text{m}^{-1} \, \text{K}^{-3/2}\),
\(T_e\) is the electron temperature,
\(\log(\Lambda)\) is the Coulomb logarithm.
The energy-weighted average momentum transfer collision frequency between an electron and heavy particle k is:
where:
\(n_k\) is the number density of heavy particles of species k,
\(v_{th, e}\) is the electron thermal velocity,
\(\large \overline{Q_{ek}}\) is the average momentum-transfer cross section (as defined in Section 6 of chapter II of [Mitchner1973]).
Comparisons are made for the various models of cross-sections:
Hard sphere model: cross sections are computed assuming that species are hard spheres, with a specified effective radius.
Tabulated model CH4: The only species considered is methane, and the cross section is computed using tabulated data of cross sections vs. energy
Tabulated model all: When available, a tabulated cross section is used for species. If no tabulated data is available, a hard sphere model is used with a default effective radius of 1e-10 m. Ions cross sections are computed using the Rutherford model, with the Coulomb potential. The total collision frequency is computed as a sum of the collision frequencies with all species, including ions.
The differents electrical conductivities resulting from these models are compared to the data of [Niu2016].
Import the required libraries.#
import cantera as ct
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import rizer.misc.units as u
from rizer.io.thermo_transport_data_reader import ThermoTransportDataReader
from rizer.misc.utils import get_path_to_data
from rizer.plasma.collision_frequency import (
MomentumTransferCollisionFrequencyModel,
get_momentum_transfer_collision_frequency_model,
)
from rizer.plasma.momentum_transfer_cross_sections import (
HardSphereCrossSection,
MomentumTransferCrossSectionModel,
get_momentum_transfer_cross_section_model,
)
sns.set_theme("poster")
Define the thermo data files to load.#
mechanism = get_path_to_data("mechanisms", "Goutier2025", "CH4_to_C2H2.yaml")
# Load the gas phase.
gas = ct.Solution(
mechanism,
name="gas",
transport_model=None,
)
Define the temperature range and the pressure.#
temperatures = np.linspace(300, 30000, 1000, dtype=float) # K
pressure = ct.one_atm # Pa
Create the models for the elastic cross sections.#
# Hard sphere model.
effective_radius = 1e-10 # m
model_1 = HardSphereCrossSection(effective_radius)
effective_radius = 3.5e-10 # m
model_2 = HardSphereCrossSection(effective_radius)
# Tabulated model, based on CH4 data.
model_3 = get_momentum_transfer_cross_section_model(
species="CH4",
database_to_use="Morgan.txt",
)
# Tabulated model, based on all available data.
species_list = gas.species_names
ions_list = [species for species in species_list if gas.species(species).charge != 0]
species_list = [
"H",
"H2",
"C",
"CH4",
"C2H2",
"C2H4",
"C2H6",
"H+",
"H2+",
"C+",
"CH4+",
"C2H2+",
"C2H4+",
"C2H6+",
]
model_4 = [
get_momentum_transfer_collision_frequency_model(
species=species,
use_default_radius=True,
use_first_available=True,
default_radius=1e-10,
)
for species in species_list
]
models: list[MomentumTransferCrossSectionModel] = [
model_1,
model_2,
model_3,
]
Compute the electrical conductivity.#
electrical_conductivities = np.zeros((len(temperatures), len(models) + 1))
for i, T in enumerate(temperatures):
# Set the temperature and composition.
gas.TPX = T, pressure, "CH4:1"
# Equilibrate the gas.
gas.equilibrate("TP")
# Get the mole fraction dictionary.
mfd = gas.mole_fraction_dict()
# Get the total number density, assuming ideal gas behavior.
n_tot = pressure / (u.k_b * T) # m^-3
# Get the mole fractions of the electrons.
x_e = mfd["e-"]
# Compute the number density of electrons.
n_e = x_e * n_tot # m^-3
# Get the number density of the neutral species (CH4).
# It assumed to be the main species in the plasma.
n_CH4 = (1 - x_e) * n_tot # m^-3
for j, model in enumerate(models):
nu_model = MomentumTransferCollisionFrequencyModel(
name=model.name,
cross_section_model=model,
)
# Get the electron thermal velocity.
nu = nu_model.get_mean_momentum_transfer_collision_frequency(T, n_CH4, n_e=n_e)
# Compute the total electrical conductivity.
σ_total = u.e**2 * n_e / (u.m_e * nu) # S/m
electrical_conductivities[i, j] = σ_total
# For the last model, use a more complete model.
# Compute the total collision frequency.
nu_tot = 0.0
# Compute the total collision frequency for ions.
nu_tot_ions = 0.0
for k, species in enumerate(species_list):
if species == "e-":
# Skip electrons.
continue
if species not in mfd:
print(
f"Species {species} not found in mole fraction dictionary, at T={T} K."
)
continue
x_k = mfd[species]
n_k = x_k * n_tot # m^-3
nu = model_4[k].get_mean_momentum_transfer_collision_frequency(
T, n_h=n_k, n_e=n_e
)
nu_tot += nu
if species in ions_list:
nu_tot_ions += nu
# Compute the total electrical conductivity.
σ_total = u.e**2 * n_e / (u.m_e * nu_tot) # S/m
# If the number density of ions is greater than the number density of neutrals,
# we can assume that the plasma is strongly ionized.
nu_tot_neutrals = nu_tot - nu_tot_ions
if nu_tot_ions > 1 * nu_tot_neutrals:
σ_total *= 1.98 # Spitzer constant for strongly ionized plasma, see (II 13.18) of [Mitchner1973]_.
electrical_conductivities[i, len(models)] = σ_total
Load reference data.#
data_CH4_Wu2016_Niu2016 = ThermoTransportDataReader(
gas_name="CH4", pressure_atm=1, source="Wu2016_Niu2016", skip_missing_values=True
)
data_CH4_minplascalc = ThermoTransportDataReader(
gas_name="CH4", pressure_atm=1, source="minplascalc"
)
Plot the electrical conductivity vs. temperature.#
fig, ax = plt.subplots(figsize=(12, 8), layout="constrained")
for j, model in enumerate(models):
ax.plot(temperatures, electrical_conductivities[:, j], label=model.name)
ax.plot(
temperatures,
electrical_conductivities[:, len(models)],
label="All species",
color="black",
linewidth=2,
)
ax.plot(
data_CH4_Wu2016_Niu2016.temperature,
data_CH4_Wu2016_Niu2016.electrical_conductivity,
"--",
label="Wu2016_Niu2016",
)
ax.plot(
data_CH4_minplascalc.temperature,
data_CH4_minplascalc.electrical_conductivity,
":",
label="MinPlasCalc",
)
ax.set_xlabel("Temperature [K]")
ax.set_ylabel("Electrical conductivity [S/m]")
ax.set_title("Electrical conductivity of a plasma of methane")
ax.legend()
ax.set_yscale("log")
ax.set_ylim(1e-2, 1e6)
plt.show()

Total running time of the script: (0 minutes 1.380 seconds)