Collisions

src/physics/coulomb_logarithm.jl

Public

Runes2P.coulomb_logarithm — Method
coulomb_logarithm(collision, model, p, free_electron_density, temperature)

Coulomb logarithm for :electron_electron or :electron_ion collisions at momentum p (units of mₑc), the free-electron density free_electron_density [m⁻³] and the temperature temperature [eV]. model is :energy_dependent, :thermal or :relativistic (the constant relativistic value, DREAM's CONSTANT).

source
Runes2P.relativistic_coulomb_logarithm — Method
relativistic_coulomb_logarithm(free_electron_density, temperature)

Relativistic Coulomb logarithm 14.6 + ½ ln(T/(n/10²⁰)) (DREAM lnLambda_c) for the free-electron density free_electron_density (n) [m⁻³] and the temperature temperature (T) [eV], zero for a vanishing density.

source
Runes2P.thermal_coulomb_logarithm — Method
thermal_coulomb_logarithm(free_electron_density, temperature)

Thermal Coulomb logarithm 14.9 - ½ ln(n/10²⁰) + ln(T/keV) for the free-electron density free_electron_density (n) [m⁻³] and the temperature temperature (T) [eV], zero for a vanishing density.

source

src/physics/collision_frequencies.jl

Public

Runes2P.CollisionModel — Type
CollisionModel(plasma, settings; faces=nothing)

Collision frequencies for a background plasma. Radius-dependent quantities (free and bound electron densities, Bessel functions, atomic parameters of the charge states) are evaluated once; the frequencies are then evaluated at any momentum with slowing_down_frequency, deflection_frequency and parallel_diffusion_frequency. The Coulomb logarithm is evaluated in each call, since the energy-dependent model depends on the momentum.

With faces, one vector of momentum faces per radius in units of mₑc as set_fokker_planck_coefficients! gives them, the factors that depend on the momentum and the charge state alone are tabulated once per momentum grid, at its faces and cell centres: the bremsstrahlung cross section, and the Bethe stopping and the bound-electron scattering with their screening weights. The coefficient builders read them by the index of a face or a centre. A tabulated value is the number that the direct evaluation gives, so the coefficients are the same; the functions of a momentum evaluate directly. A faces list whose length differs from the number of radii throws a DimensionMismatch.

source
Runes2P.CollisionSettings — Type
CollisionSettings(; mode, screening, coulomb_logarithm, screened_diffusion, ion_size_table,
                  screening_window, screening_window_start, screening_window_end, bremsstrahlung,
                  bremsstrahlung_diffusion, bremsstrahlung_constant, bound_friction, ionization_threshold,
                  ionization_threshold_width, secondary_widths, secondary_spectrum, ionization_cross_section_form)

The defaults of mode, screening, coulomb_logarithm, screened_diffusion and bound_friction are those of DREAM's CollisionHandler. The defaults of ion_size_table, screening_window, bremsstrahlung, bremsstrahlung_diffusion and bremsstrahlung_constant depart from DREAM (see the docs page Comparison with DREAM). The remaining options have no counterpart in DREAM.

  • mode: :full (relativistic Maxwellian targets, adds energy diffusion), :superthermal (cold target electrons) or :ultra_relativistic.

  • screening: :partial (Hesslow et al. 2018), :complete or :none (DREAM's PARTIALLY_SCREENED, COMPLETELY_SCREENED, NON_SCREENED).

  • coulomb_logarithm: :thermal, :energy_dependent or :relativistic (see coulomb_logarithm).

  • screened_diffusion: energy diffusion from the full ν_s (:maxwellian) or from the free-electron part only (:zero).

  • ion_size_table: :hesslow uses Table 1 of Hesslow et al. 2018 as intended; :dream reproduces DREAM's lookup, whose charge list has one argon entry too few (affects Ar¹⁷⁺, Xe³⁺, Xe¹⁷⁺, W³⁺ and W⁶⁰⁺).

  • screening_window: momenta where partial screening applies. With :excitation_energy the bound-electron parts of charge state j (the Bethe term of ν_s, the g_j(p) of ν_D) are weighted by a smooth step in the kinetic energy (γ - 1) mₑc², 0 below screening_window_start · I_j and 1 above screening_window_end · I_j, with I_j the mean excitation energy. Below the window the frequencies are those of complete screening. The default factors 1 and 4 (a choice of this package; see the docs page Choices of this package) place the window of Ar⁺ and Ar²⁺ at p ≈ 0.03 to 0.06 (Hesslow et al. PRL 2017 and JPP 2019). :dream applies partial screening at all momenta, as DREAM does. The weight depends only on p and I_j, so it holds unchanged when the densities become unknowns.

  • bremsstrahlung: :stopping_power, the radiative energy loss of an electron on the nuclei of all charge states as a slowing down (DREAM's BREMSSTRAHLUNG_MODE_STOPPING_POWER): the non-screened formula 4BN of Koch and Motz (Rev. Mod. Phys. 31, 920, 1959), ν_s = n Z² α r₀² c φ_rad(p)/β per charge state (bremsstrahlung_cross_section), on the nuclei only, as in DREAM: there is no electron-electron bremsstrahlung, so the stopping lies below ESTAR for hydrogen by 1.21 at 212 keV and 1.55 at 1.11 MeV, tending to Z(Z + 1)/Z². It is the default (a choice of this package; see the docs page Choices of this package). :neglect leaves the loss out, as DREAM does by default.

  • bremsstrahlung_diffusion: whether the energy diffusion ν_∥ = Θγν_s of mode = :full with screened_diffusion = :maxwellian takes the radiative stopping of bremsstrahlung. :none (the default, a choice of this package; see the docs page Choices of this package): the radiative stopping is a pure drag, as in the model of M. Hoppe et al., Comput. Phys. Commun. 268, 108098 (2021), doi:10.1016/j.cpc.2021.108098, eqs. 8, 9, 14 and 15, so a Maxwellian at the temperature of the bulk loses its bremsstrahlung power, which tends to that of Gould's formula at low temperature (GOULD_BREMSSTRAHLUNG_PREFACTOR). :dream: the code of DREAM (src/Equations/ParallelDiffusionFrequency.cpp:59-66), whose ν_∥ rescales the whole ν_s, so the radiative drag gets a thermal energy diffusion, a Maxwellian at the temperature of the bulk radiates nothing, and a tail at Θ_eff loses 1 − Θ/Θ_eff of its bremsstrahlung. The DREAM comparisons with the stopping power on take :dream.

  • bremsstrahlung_constant: the constant term of the formula 4BN in the stopping power, :koch_motz (the default), 4/3 as in Koch and Motz, or :dream, 1 as DREAM's integer division writes it (src/Equations/SlowingDownFrequency.cpp:234), for the comparisons with DREAM that run with the stopping power on (bremsstrahlung_cross_section).

  • bound_friction: the slowing down on the bound electrons of each charge state with partial screening. :bethe (the default, DREAM's model) is the Bethe term of Hesslow et al. with the weight of screening_window. :ionization_split splits it into the energy loss of the ionization of the charge state, from the cross section of the kinetic ionization (ionization_cross_section), and the rest, the excitation, floored at zero:

    \[ν_j = e(p)\, ν_{\mathrm{ion},j} + \max\left(w_j(p)\, ν_{\mathrm{Bethe},j} − e(p)\, ν_{\mathrm{ion},j},\, 0\right), \qquad ν_{\mathrm{ion},j} = \frac{γ}{p^2} n_j σ_j(p) v \frac{I_j + ⟨E_s⟩_j}{m_e c^2},\]

    with the ionization energy I_j of NIST (ionization_energy), the mean energy of every secondary ⟨E_s⟩_j up to (E − I_j)/2 in the spectrum secondary_spectrum (no cut: every secondary joins the cold electrons) and the envelope e(p) of the hot region of the kinetic ionization. f then pays I_j + ⟨E_s⟩_j for each ionization it causes, also from the ionization potential up to the mean excitation energy, where the default screening_window gives no Bethe friction. Elements need a fit of the cross section, and with secondary_spectrum = :opal a width of the secondary spectrum (SECONDARY_SPECTRUM_WIDTHS, secondary_widths). With the momentum faces of each radius given to the model (CollisionModel(plasma, settings; faces), as set_fokker_planck_coefficients! does), the ionization part is tabulated once per momentum grid and charge state at the faces.

  • ionization_threshold: the factor of the thermal momentum p₀ = factor √(2T/mₑc²) at the threshold of the kinetic ionization, which the region of the KineticIonizationTerm of the system takes as well; 0 (the default) for a kinetic ionization over the whole grid. Below the threshold the ionization is that of the cold electrons, whose binding energy the cold electrons pay (RadiatedPowerTerm with kinetic_ionization), so f pays none there. The envelope e(p) of the faces is a cubic smooth step from (1 − ionization_threshold_width) p₀ to (1 + ionization_threshold_width) p₀, a numerical width that keeps the coefficients smooth when the threshold crosses a face. The default is 0.1 (a choice of this package; see the docs page Choices of this package); DREAM has no counterpart. With screened_diffusion = :maxwellian the energy diffusion Θγν_s takes the split as well, as it takes the Bethe term.

  • secondary_widths: widths Ē [eV] of the secondary spectrum per element, added to SECONDARY_SPECTRUM_WIDTHS for :ionization_split.

  • secondary_spectrum: the spectrum of the secondaries of ⟨E_s⟩_j: :beb (the default, a choice of this package; see the docs page Choices of this package), the binary-encounter-Bethe spectrum of Kim and Rudd with the ionization energy of each charge state as its binding energy (beb_mean_secondary_energy), which needs no width; :opal, Opal et al. with the width of the neutral element for every charge state (mean_secondary_energy).

  • ionization_cross_section_form: the form of ionization_cross_section in the friction of bound_friction = :ionization_split: :chianti (the default), :dream or :bethe. A system pairs it with the ionization_cross_section_form of its KineticIonizationTerm, so f pays for the ionizations that term counts.

source
Runes2P.bremsstrahlung_cross_section — Method
bremsstrahlung_cross_section(p; constant=:koch_motz)

The radiative energy-loss cross section of an electron of momentum p (units of mₑc) on a bare nucleus, in units of α r₀² Z²: the formula 4BN of H. W. Koch and J. W. Motz, Rev. Mod. Phys. 31, 920 (1959), doi:10.1103/RevModPhys.31.920, without screening, as DREAM's src/Equations/SlowingDownFrequency.cpp:194-237. It tends to 16/3 for p → 0 (H. Bethe and W. Heitler, Proc. R. Soc. Lond. A 146, 83 (1934), doi:10.1098/rspa.1934.0140) and to 4(ln 2γ − 1/3) for γ ≫ 1 (W. Heitler, The Quantum Theory of Radiation, 3rd ed., 1954).

DREAM's line 234 writes the constant 4/3 of the formula as an integer division, which is 1 in C++, so DREAM's stopping power is 6.3 to 6.5 % above this one for 0.1 ≤ p ≤ 1, 3.1 % at p = 10 and 1.7 % at p = 100. Runes2P keeps 4/3; constant = :dream gives DREAM's value from p ≈ 0.1, within about 0.02 %, for the comparisons with DREAM. Below it constant = :dream does not reproduce DREAM: DREAM takes the integral term ∫₀^X ln(1 + x)/x dx from a Steffen spline on 50 points in 0 ≤ X ≤ 10 (SlowingDownFrequency.cpp:66-80), and its stopping power is 3.2 % below that of constant = :dream at p = 0.001, 2.8 % above this one. DREAM returns 0 at p = 0; the limit is 16/3, and the slowing-down frequency is 0 there anyway.

source
Runes2P.deflection_frequency — Method
deflection_frequency(model, ir, p)

Pitch-angle scattering (deflection) frequency ν_D [s⁻¹] at radius index ir and momentum p (in units of mₑc); the collisional pitch diffusion is Dᵠᵠ = ν_D (1 - ξ²)/2.

source
Runes2P.ion_size — Method
ion_size(Z, Z0; table=:hesslow)

Effective ion size ā_j in units of the reduced Compton wavelength (2/α · a_j): DFT values from Hesslow et al. (2018) Table 1 where available, else their eq. 2.28.

source
Runes2P.mean_excitation_energy — Method
mean_excitation_energy(Z, Z0)

Mean excitation energy [eV] of charge state Z0 of element Z (DREAM SlowingDownFrequency::GetAtomicParameter). Up to Z = 18 the tabulated values of Sauer, Sabin and Oddershede (2018). For Z = 19 to 86 DREAM's extended table, a semi-empirical electron-density model (DREAM tools/Generate_MeanExcitationEnergy.py), which is not hydrogenic for one and two bound electrons: 5123.6 eV for K¹⁸⁺ against 14.99 Z² = 5411 eV. Beyond Z = 86 the analytic formula of Sauer, Sabin and Oddershede.

source
Runes2P.p3_slowing_down_frequency_at_zero — Method
p3_slowing_down_frequency_at_zero(model, ir)

lim_{p→0} p³ ν_s [s⁻¹, with p in units of mₑc], which sets the particle flux through p = 0. As DREAM's SlowingDownFrequency::GetP3NuSAtZero, the value uses the prefactor 4π r₀² c in every mode. In :ultra_relativistic mode, where ν_s ∝ 1/p and the analytic limit is 0, it therefore returns the :superthermal value. The friction of that mode is the constant drift Aᵖ = -4π r₀² c lnΛ n, which brings electrons to p = 0 in a finite time. With DREAM's value, on a grid that applies the flux through p = 0, they leave the grid at p = 0: the sink is 1/Δp₁² times the inflow through the first interior face at equal f, so the first cell absorbs. With the analytic limit the first cell would collect them without bound.

DREAM's hot-tail grid applies the flux and lets electrons leave at p = 0; its runaway grid does not (src/Settings/Equations/f_hot.cpp:96, src/Settings/Equations/f_re.cpp:87, src/Settings/Equations/distribution.cpp:234-237), so in the ultra-relativistic mode, which DREAM runs on a runaway grid from p = 0 (examples/init_f_re), the first cell collects the electrons the friction brings there. Runes2P applies the flux through p = 0 by default (p_zero_boundary = :outflow of AdvectionDiffusion), and p_zero_boundary = :zero_flux leaves it out, as DREAM's runaway grid.

source
Runes2P.parallel_diffusion_frequency — Method
parallel_diffusion_frequency(model, ir, p)

Parallel (energy) diffusion frequency ν_∥ [s⁻¹] at radius index ir and momentum p (in units of mₑc), Dᵖᵖ = ν_∥; nonzero only in :full mode. With screened_diffusion = :maxwellian it is Θγ times the collisional part of ν_s, and with bremsstrahlung_diffusion = :dream times the whole ν_s (CollisionSettings).

source
Runes2P.slowing_down_frequency — Method
slowing_down_frequency(model, ir, p)

Slowing-down frequency ν_s [s⁻¹] at radius index ir and momentum p (in units of mₑc); the collisional friction is Aᵖ = -p ν_s. With bremsstrahlung = :stopping_power it adds, per charge state of density n and nuclear charge Z, n Z² α r₀² c φ(p) γ/p with the cross section φ of bremsstrahlung_cross_section, as DREAM's src/Equations/SlowingDownFrequency.cpp:204-207 and :236 (where DREAM's φ differs by its integer division, see there).

source