Ionization

The ionization package extends RIOT to partially ionized plasmas with a two-temperature (2T) description in which the ions and free electrons carry separate temperatures and internal energies. Each material must supply a separate electron equation of state.

Enabling ionization does two distinct things, and the organization of this chapter follows that split. First, it establishes the 2T plasma state: the mean ionization state \(\bar{Z}\), the free-electron number density \(n_e\), and a separate electron energy and temperature \(T_e\) alongside the ion temperature \(T_i\). No other package produces these quantities. Second, it provides a family of optional transport processes defined on that state — electron–ion energy exchange, electron and ion thermal conduction, and ion viscosity. These share a common character: each is an independent physical process with its own governing equation, but each closes on the same plasma variables (\(n_e\), \(T_e\), \(T_i\), \(\bar{Z}\)), which is why they live in one package and one input block rather than in separate packages. Each is turned on by its own switch in the <ionization> block and, having no plasma state to act on otherwise, requires ionization to be enabled.

The subsections below treat the state-defining physics first (energy/pressure splitting and the mean ionization state), then each transport process in turn, each with the specific equation it solves.

Governing Equations

Energy and Pressure Splitting

Ionization is a per-material property closed on a shared electron temperature. Each material \(m\) carries its own mean ionization state \(\bar{Z}_m\), electron internal energy \(u_{e,m}\), and electron pressure \(p_{e,m}\); these aggregate to bulk electron quantities that split the bulk energy and pressure,

\[E = u_i + u_e + \tfrac{1}{2}\rho|\vec{v}|^2, \qquad p = p_i + p_e .\]

Here \(u_i\), \(u_e\) are the bulk ion and electron internal-energy densities and \(p_i\), \(p_e\) the corresponding bulk pressures. Following the aggregation rules of Section Per-Material and Bulk Quantities, the bulk electron energy is a cell-averaged sum of per-material electron energy densities while the bulk electron pressure is a volume-fraction-weighted sum,

\[u_e = \sum_m \bar\rho_m\,e_{e,m}(\rho_m, T_e), \qquad p_e = \sum_m f_m\,p_{e,m}(\rho_m, T_e),\]

with each material’s electron specific energy \(e_{e,m}\) and pressure \(p_{e,m}\) supplied by its own electron equation of state.

Crucially, the electron temperature \(T_e\) is a single bulk quantity shared by all materials: it is found by a root solve enforcing that the per-material electron energies sum to the transported bulk electron energy,

\[u_e = \sum_m \bar\rho_m\,e_{e,m}(\rho_m, T_e),\]

which is the electron-side analogue of the PTE temperature equilibrium.

Electron Energy Transport

By default the electron internal energy is advected with the flow and does \(p\,\mathrm{d}V\) work against the electron pressure,

\[\frac{\partial u_e}{\partial t} + \nabla\!\cdot\!\left(u_e\vec{v}\right) = -\,p_e\,\nabla\!\cdot\!\vec{v} .\]

Alternatively the package can instead advance a conserved electron entropy density \(s_e\) (which assumes an ideal electron gas and avoids the volumetric work source),

\[\frac{\partial s_e}{\partial t} + \nabla\!\cdot\!\left(s_e\vec{v}\right) = 0 ,\]

converting between \(s_e\) and \(u_e\) as needed. The choice is controlled by advect_electron_entropy.

Electron–Ion Energy Exchange

When electron_ion_coupling is enabled, the (bulk) electron and ion temperatures relax toward a common value on a coupling time scale \(\tau_{ei}\),

\[\begin{split}\rho c_{v,i}\,\frac{\partial T_i}{\partial t} &= \frac{T_e - T_i}{\tau_{ei}}, \\ \rho c_{v,e}\,\frac{\partial T_e}{\partial t} &= \frac{T_i - T_e}{\tau_{ei}} ,\end{split}\]

integrated with a first-order exponential (analytic) update so the equilibrium \(T_e = T_i\) is recovered stably for any step size. In a mixed cell the heat capacities \(\rho c_{v,i}\), \(\rho c_{v,e}\) and the coupling rate are formed as volume-fraction-weighted sums over the per-material contributions (evaluated at \(T_e\), \(T_i\) and each material’s \(\rho_m\), \(\bar{Z}_m\)), so a single bulk relaxation represents the whole cell. The coupling time may be a user-supplied constant (tau_ei) or the Landau–Spitzer form (Blancard et al., High Energy Density Phys. 9, 247, 2013),

\[\tau_{ei} = \frac{3\,m_e m_i}{8\sqrt{2\pi}\,n_i \bar{Z}^2 e^4}\, \frac{\left(k_B T_e/m_e + k_B T_i/m_i\right)^{3/2}}{\ln\Lambda} ,\]

with the Coulomb logarithm \(\ln\Lambda\) selected by coulomb_logarithm.

Mean Ionization State

The mean ionization state is computed per material: for each material \(m\), \(\bar{Z}_m\) is evaluated from the Thomas–Fermi statistical model with the fit of More (UCRL-84991, 1981; see Salzmann, Atomic Physics in Hot Plasmas, 1998), using that material’s atomic number \(Z_{\text{nuc},m}\), atomic mass, and material-averaged density \(\rho_m\), evaluated at the shared bulk electron temperature \(T_e\),

\[\bar{Z}_m = Z_{\text{nuc},m}\,f(x_m), \qquad x_m = \alpha\,Q_m^{\beta}.\]

The per-material ionization states set the free-electron number density \(n_e = \sum_m \bar\rho_m\,\bar{Z}_m/m_{\text{nuc},m}\). Setting fully_ionized forces \(\bar{Z}_m = Z_{\text{nuc},m}\).

Thermal Conduction

Optionally, electron and/or ion heat conduction are solved as implicit diffusion equations on the shared bulk temperature,

\[\rho c_v\,\frac{\partial T}{\partial t} = \nabla\!\cdot\!\left(\kappa\,\nabla T\right) ,\]

using a BiCGSTAB linear solve. In a mixed cell the effective conductivity is a volume-fraction average (arithmetic or harmonic, selectable) of the per-material conductivities \(\kappa_m\), each evaluated at the shared bulk temperature with that material’s \(\rho_m\) and \(\bar{Z}_m\). The per-material electron conductivity \(\kappa_{e,m}\) defaults to the Spitzer–Härm form (Molvig, Simakov & Vold, Phys. Plasmas 21, 092709, 2014),

\[\kappa_{e,m} = \frac{\alpha(\bar{Z}_m)}{\bar{Z}_m}\,\frac{8}{\pi^{3/2}}\, \frac{k_B^{7/2}}{e^4\sqrt{m_e}}\,\frac{T_e^{5/2}}{\ln\Lambda}, \qquad \alpha(\bar{Z}_m) = \frac{1}{1 + 3.3/\bar{Z}_m},\]

and the per-material ion conductivity \(\kappa_{i,m}\) to the Braginskii form. Either may instead be set to a constant.

Plasma Viscosity

Optionally (plasma_viscosity), an ion viscous stress \(\mathsf{\sigma}_{\text{visc}}\) is added to the bulk momentum and total-energy equations of Chapter Hydrodynamics as a divergence source,

\[\begin{split}\frac{\partial \left(\rho\vec{v}\right)}{\partial t} + \nabla\!\cdot\!\left(\rho\vec{v}\otimes\vec{v}+ p\,\mathsf{I}\right) &= \nabla\!\cdot\!\mathsf{\sigma}_{\text{visc}}, \\[2pt] \frac{\partial E}{\partial t} + \nabla\!\cdot\!\left[\left(E + p\right)\vec{v}\right] &= \nabla\!\cdot\!\left(\mathsf{\sigma}_{\text{visc}}\!\cdot\!\vec{v}\right),\end{split}\]

so momentum diffuses and the associated viscous dissipation heats the fluid. The stress is Newtonian in the (bulk) strain rate \(\mathsf{e}\) (Chapter Material Strength),

\[\mathsf{\sigma}_{\text{visc}} = 2\eta\,\mathsf{e} + \left(\eta_b - \tfrac{2}{3}\eta\right)(\nabla\!\cdot\!\vec{v})\,\mathsf{I},\]

with \(\eta\) the shear viscosity and \(\eta_b\) the bulk viscosity. The shear viscosity is set by ion_viscosity_model: either a user-supplied constant (ion_shear_viscosity, ion_bulk_viscosity), or the Fokker–Planck–Landau plasma model (Arnault, High Energy Density Phys. 9, 711, 2013; Vold et al., Phys. Plasmas 24, 042702, 2017),

\[\eta = \sum_i \frac{\alpha_{ij}\,n_i\,k_B T_i}{\sum_j \nu_{ij}},\]

where the ion–ion momentum-exchange rates \(\nu_{ij}\) are summed over the ion species in the cell, \(n_i\) is the ion number density, and \(T_i\) the ion temperature. This is a bulk (whole-cell) transport coefficient built from the per-material ion states, in the same spirit as the conductivities above.

Input Parameters

Ionization is enabled with the ionization toggle in the <physics> block (Section Enabling Physics: the <physics> Block). When it is on, every material must provide an electron_eos block (Chapter Materials and Equations of State). The remaining controls live in the <ionization> block.

Parameters in the <ionization> block.

Parameter

Type

Default

Description

fully_ionized

bool

false

Force \(\bar{Z} = Z_{\text{nuc}}\) (fully ionized).

root_tol

Real

1e-20

Root-find tolerance for the electron temperature.

advect_electron_entropy

bool

false

Advect electron entropy density instead of solving the electron energy with a \(p\,\mathrm{d}V\) source.

electron_ion_coupling

bool

false

Relax \(T_e\) and \(T_i\) toward equilibrium.

electron_ion_coupling_model

string

landau_spitzer

Coupling model: constant or landau_spitzer.

tau_ei

Real

0.0

Constant coupling time (used when model is constant).

coulomb_logarithm

string

brysk

\(\ln\Lambda\) model: basic, brysk, lee_moore, or bps.

electron_thermal_conduction

bool

false

Solve electron heat conduction.

electron_conductivity_model

string

spitzer_volume_average_arithmetic

Electron conductivity model (Spitzer variants or constant).

electron_conductivity

Real

0.0

Constant electron conductivity (if selected).

ion_thermal_conduction

bool

false

Solve ion heat conduction.

ion_conductivity_model

string

braginskii

Ion conductivity model: braginskii or constant.

ion_conductivity

Real

0.0

Constant ion conductivity (if selected).

plasma_viscosity

bool

false

Add the ion viscous stress to the momentum and energy equations.

ion_viscosity_model

string

fokker_planck_landau

Viscosity model: fokker_planck_landau or constant.

ion_shear_viscosity

Real

1.0

Constant shear viscosity \(\eta\) (if model is constant).

ion_bulk_viscosity

Real

0.0

Constant bulk viscosity \(\eta_b\) (if model is constant).

timestep_control

string

relative

Conduction step control: explicit or relative.

T_scale_floor

Real

1.0

Temperature-scale floor for relative step control.

fractional_change_scale

Real

0.1

Allowed fractional \(T_e\) change per conduction step.

zbar_floor

Real

1e-6

Floor on \(\bar{Z}\) in microphysics evaluations.

ion_number_density_floor

Real

1e11

Floor on ion number density (cm\(^{-3}\)).

Registered Fields

The ionization package registers the bulk electron fields in the table below, and (through the materials package) the per-material \(\bar{Z}\) and electron-energy fields. The transported electron quantity is either electron_internal_energy (the default) or, when advect_electron_entropy is set, electron_entropy; the remaining bulk electron fields are derived. The implicit conduction solve additionally allocates operator-split auxiliary fields (diffusion coefficients, temperature deltas) that are internal to the solver and omitted here.

Principal fields registered by the ionization package.

Field

Symbol

Components

Metadata / description

ccbulk::electron_internal_energy

\(u_e\)

1

Cell, Independent, Intensive, FillGhost, Advected, WithFluxes; electron energy density (default transported quantity).

ccbulk::electron_entropy

\(s_e\)

1

Cell, Independent, Intensive, FillGhost, Advected, WithFluxes, Conserved; electron entropy density (when advect_electron_entropy).

ccbulk::electron_temperature

\(T_e\)

1

Cell, Intensive, Derived, OneCopy; electron temperature.

ccbulk::electron_pressure

\(p_e\)

1

Cell, Intensive, Derived, OneCopy; electron pressure.

ccbulk::electron_number_density

\(n_e\)

1

Cell, Intensive, Derived, OneCopy; free-electron number density.

ccbulk::electron_bulk_modulus

\(B_e\)

1

Cell, Intensive, Derived, OneCopy; electron bulk modulus.

ccbulk::electron_gruneisen_parameter

\(\Gamma_e\)

1

Cell, Intensive, Derived, OneCopy; electron Grüneisen parameter.

ccbulk::ion_shear_viscosity

\(\eta\)

1

Cell, Intensive, Derived, OneCopy; ion shear viscosity (when plasma_viscosity).

cm::ionization_zbar

\(\bar{Z}\)

1

Cell, Sparse, Derived, OneCopy, FillGhost; per-material mean ionization state.

Example

A single ionized material with electron–ion coupling and electron conduction:

riot.input("physics", ionization=True)
riot.input("ionization",
           electron_ion_coupling=True,
           electron_ion_coupling_model="landau_spitzer",
           coulomb_logarithm="brysk",
           electron_thermal_conduction=True)
riot.input("material0", label="plasma",
           eos_type="IdealGas", Gamma=1.66667, Cv=1.0e12,
           electron_eos="plasma_electrons")
riot.input("plasma_electrons", eos_type="IdealElectrons")