Energy transfer between the distributions

src/system/energy_transfer_terms.jl

Public

Runes2P.FRICTION_TRANSFER_SETTINGS — Constant
FRICTION_TRANSFER_SETTINGS

The collision settings of FrictionEnergyTransferTerm: mode = :superthermal, screening = :complete, coulomb_logarithm = :energy_dependent, bremsstrahlung = :neglect, the settings that DREAM's CollisionalEnergyTransferKineticTerm fixes for its slowing-down frequency (src/Equations/Fluid/CollisionalEnergyTransferKineticTerm.cpp:20-27, DREAM v26.5): the mode, the screening and the logarithm set there, and no bremsstrahlung as its comment states, which is DREAM's default.

source
Runes2P.FrictionEnergyTransferTerm — Type
FrictionEnergyTransferTerm(kinetic, grid, plasma; settings=FRICTION_TRANSFER_SETTINGS,
                           coefficient=1)

coefficient times the power [W/m³] that the electrons of the kinetic unknown kinetic on grid give to the free cold electrons by friction, for the row of the temperature of the cold electrons, as the moment

\[P = \frac{1}{V'} \sum_{ij} m_e c\, v_i\, p_i\, ν_s(p_i)\, f_{ij}\, 𝒱'_{ij} Δp_i Δξ_j,\]

with v and p at the momentum cell centres and the slowing-down frequency ν_s (slowing_down_frequency) of settings and of plasma, a PlasmaState, a function of time that returns one, or a PlasmaSource such as PlasmaFromUnknowns. This is DREAM's CollisionalEnergyTransferKineticTerm (src/Equations/Fluid/CollisionalEnergyTransferKineticTerm.cpp, DREAM v26.5), the heating of the cold electrons by f_hot in a run without the full collision frequencies (src/Settings/Equations/T_cold.cpp:318-340) and by f_re in every run (lines 341-354), for which free_electron_energy_transfer_term is Runes2P's default. The default settings, FRICTION_TRANSFER_SETTINGS, are those DREAM fixes for it: the superthermal frequencies with complete screening, so that the electrons collide with the cold electrons alone, the energy-dependent Coulomb logarithm and no bremsstrahlung.

The moment reads the distribution at the cell centres, so it holds whatever scheme the operator of f takes, and it counts the energy of an electron until it leaves the grid, also through p = 0 where the friction of the superthermal frequencies carries it out under p_zero_boundary = :outflow (compare KineticEnergyLossTerm, the energy change of the electron-electron operator itself). The term is linear in f. With a plasma of unknowns its Jacobian holds the columns of the temperature, the density and, when the plasma reads them, the ion charge states, as DREAM's. The weights of the moment are kept until the plasma values change. A PlasmaState given as plasma is read once, so a change made to it in place afterwards is not seen.

source
Runes2P.InterfaceEnergyFluxTerm — Type
InterfaceEnergyFluxTerm(interface::MomentumInterfaceTerm; coefficient=-1)

coefficient times the kinetic energy that electrons carry through the momentum interface from the lower grid to the upper one, per volume and second [W/m³]: mₑc²(γ − 1) of the last momentum cell of the lower grid times interface_flux. The interface takes the electrons from that cell, so this is the energy that the discrete energy moment of the lower grid loses (the energy at the interface itself differs by about Δp/(2p)). With the default coefficient = −1 in the row of the temperature it is the energy that leaves the total energy of the electrons on the hot-tail grid for the runaway grid (total_energy_equation), so the electrons that cross take their energy with them and do not heat the cold ones. When the flux follows the plasma unknowns of the Fokker-Planck term of the interface, the row has their columns (has_plasma_columns). The row reads the cells of both grids at the face, so the term assembles it itself (jacobian_assembly) and the coloring of the automatic Jacobian does not see it.

source
Runes2P.InterfaceParticleFluxTerm — Type
InterfaceParticleFluxTerm(interface::MomentumInterfaceTerm; coefficient=1)

coefficient times the particle flux interface_flux through the momentum interface from the lower grid to the upper one, per volume and second [m⁻³ s⁻¹], in a radial row. With the default coefficient = 1 in the row of the runaway density it is the influx of DREAM's n_re from the hot-tail grid (src/Settings/Equations/n_re.cpp:125-128, PXiExternalKineticKinetic with TYPE_DENSITY, DREAM v26.5). When the flux follows the plasma unknowns of the Fokker-Planck term of the interface, the row has their columns (has_plasma_columns). The row reads the cells of both grids at the face, so the term assembles it itself (jacobian_assembly) and the coloring of the automatic Jacobian does not see it.

source
Runes2P.KineticEnergyLossTerm — Type
KineticEnergyLossTerm(source::FokkerPlanckTerm; part=:free_electrons, region=nothing,
                      coefficient=part === :free_electrons ? 1 : -1)

coefficient times the power [W/m³] that the electrons of the kinetic unknown of source lose through a part of their collisions, for the row of the temperature of the cold electrons:

\[L = −\frac{1}{V'} \sum_{ij} w_i\, m_e c^2 (γ_i − 1)\, [C_a f − C_b f]_{ij}\, 𝒱'_{ij} Δp_i Δξ_j,\]

with the envelope w of region (1 without one, MomentumRegion) and the operators of the plasma, collision settings, scheme and boundaries of source:

  • part = :free_electrons: C_a the electron-electron part (electron_electron_operator), C_b = 0: the energy that the electrons give to the free cold electrons, the friction and, in the fully kinetic mode, the energy diffusion. For a superthermal electron it is the ∫ v F_s f of DREAM's CollisionalEnergyTransferKineticTerm as the energy change of the operator, without the energy that the friction carries out through p = 0; that term itself, as a moment, is FrictionEnergyTransferTerm. With coefficient = 1 it is the channel of the runaway grid into the total energy of the electrons on the hot-tail grid (total_energy_equation).
  • part = :sinks: C_a the collisions of source without the field, C_b their electron-electron part: the energy that leaves the electrons by the friction on bound electrons (excitation and ionization), bremsstrahlung and synchrotron radiation. With coefficient = −1 and the hot region of the total energy as region it is the loss of that total, so the cold electrons receive exactly the free-electron part of what the hot electrons lose. Both operators are applied, since the weights of exponential fitting depend on all coefficients of an operator. With bound_friction = :ionization_split of CollisionSettings the friction on bound electrons holds the energy of the kinetic ionization (KineticIonizationTerm) up to the discretization and the width of the threshold (see there): the ionization potentials, which the ions store and release at recombination, and the energy of the secondaries, which SecondaryHeatingTerm gives back to the cold electrons (ionization_energy_flows). With DREAM's :bethe it holds that energy only on average and only where the screening window is open: from the ionization potential up to the mean excitation energy it takes none.

The term takes the plasma of source in the same treatment: implicit, with the columns of the temperature and density unknowns, or lagged at the state of the start of the step. A region whose limit follows the temperature adds the column of its envelope.

A lagged plasma (lagged = :all of source) is that of the last prepare_step! of the term, which residual! and the right-hand side of the system call before every evaluation, and which the system calls with its initial state for a term never prepared when it builds the prototype of its Jacobian. A term evaluated on its own reads the plasma of its last preparation, by whatever system or call made it, and a term never prepared throws an ArgumentError. Lagged ion densities alone are those of the last prepare_step! of source, or those of the state when source was never prepared.

source