ColdElectronTemperature

The DREAM.Settings.Equations.ColdElectronTemperature.ColdElectronTemperature holds settings for the (cold) electron temperature. The unknown quantity is called T_cold and can be evolved either according to a prescribed function, or according to an energy balance equation.

The electron temperature and electron thermal energy are related through

\[W_{\rm cold} = \frac{3}{2}n_{\rm cold}T_{\rm cold}.\]

Prescribed evolution

The temperature can be prescribed in both space and time. The full syntax for prescribing the electron temperature is

ds.eqsys.T_cold.setPrescribedData(temperature=T_cold, radius=T_cold_r, times=T_cold_t)

where T_cold is an array of shape (nt, nr) specifying the cold electron temperature in space and time, T_cold_r is a vector with nr elements representing the radial grid on which the temperature is prescribed, and T_cold_t is a vector with nt elements representing the time grid on which the temperature is prescribed.

For convenience, it is possible to prescribe a constant and radially uniform temperature by only specifying it as a scalar:

ds.eqsys.T_cold.setPrescribedData(1000)

This will cause the temperature to be \(T_{\rm cold} = 1\,\mathrm{keV}\) at every radius, in every time step, during the simulation.

Self-consistent evolution

The temperature can be evolved self-consistently, i.e. by calculating the energy loss of the plasma through various processes. In its most general form, the energy balance equation solved by DREAM is

(1)\[\begin{split}\frac{\partial W_{\rm cold}}{\partial t} &= \frac{j_\Omega}{B}\left\langle \boldsymbol{E}\cdot\boldsymbol{B} \right\rangle - \left\langle n_{\rm cold} \right\rangle\sum_i\sum_{j=0}^{Z_i-1} n_i^{(j)}L_i^{(j)} + \left\langle Q_c \right\rangle +\\ &+ \frac{1}{V'}\frac{\partial}{\partial r}\left[ V'\frac{3\left\langle n_{\rm cold} \right\rangle}{2}\left( -A_WT_{\rm cold} + D_W\frac{\partial T_{\rm cold}}{\partial r} \right) \right]\end{split}\]

Here, the terms included in the most complete form of the energy balance equation are

  • \(\frac{j_\Omega}{B}\langle\boldsymbol{E}\cdot\boldsymbol{B}\rangle\): Ohmic heating (energy transferred to the plasma from the electric field).

  • \(\langle n_{\rm cold} \rangle\sum_i\sum_{j=0}^{Z_i-1} n_i^{(j)} L_i^{(j)}\): Energy loss by inelastic atomic processes. The rate coefficient \(L_i^{(j)}\) is given by \(L_i^{(j)} = L_{\rm line} + L_{\rm free} + \Delta W_i^{(j)}(I_i^{(j)} - R_i^{(j)})\), where \(L_{\rm line}\) is the radiated power by line emission, \(L_{\rm free}\) is the radiated power by recombination emission and bremsstrahlung, \(\Delta W_i^{(j)}\) is the ionization threshold (taken from NIST), and \(I_i^{(j)}\) and \(R_i^{(j)}\) are the rates of ionization and recombination for the given ion charge state. Unless otherwise specified, coefficients are taken from OpenADAS.

  • \(\langle Q_c \rangle\): Collisional heat transfer to the cold electrons, from hot and runaway electrons, as well as ions:

    \[\begin{split}\left\langle Q_c \right\rangle &= \int\mathrm{d}p \int_{-1}^1\mathrm{d}\xi_0 \frac{\mathcal{V}'}{V'}\Delta\dot{E}_{ee} f_{\rm hot/re} + \sum_i Q_{ei},\\ Q_{kl} &= \frac{\left\langle nZ^2 \right\rangle_k\left\langle nZ^2 \right\rangle_l e^4\ln\Lambda_{kl}}{\left(2\pi\right)^{3/2}\epsilon_0^2 m_k m_l} \frac{T_k - T_l}{\left(\frac{T_k}{m_k} + \frac{T_l}{m_l} \right)^{3/2}},\\ \Delta\dot{E}_ee &= 4\pi n_{\rm cold} r_0^2 \ln\Lambda_{ee}\frac{m_ec^4}{v},\end{split}\]
  • Radial transport of heat. DREAM uses and advection-diffusion heat transport model with either arbitrary coefficients \(A_W\) and \(D_W\), or a Rechester-Rosenbluth diffusion model requiring the magnetic perurbation level \(\delta B/B\) to be specified.

To solve for the electron temperature self-consistently, the user should call the method setType() with the argument TYPE_SELFCONSISTENT. Additionally, the temperature profile at \(t=0\) must be specified:

import DREAM.Settings.Equations.ColdElectronTemperature as Tcold

ds = DREAMSettings()
...
ds.eqsys.T_cold.setType(Tcold.TYPE_SELFCONSISTENT)
ds.eqsys.T_cold.setInitialProfile(temperature=T0, radius=T0_r)

If a uniform initial temperature profile is desired, the parameter temperature in the call to setInitialProfile() can be a scalar, in which case the parameter radius can also be omitted.

Recombination radiation

By default, radiation due to recombination is neglected in the energy balance equation (1) (i.e. the coefficient \(L_{\rm free}\) contains only the contribution from bremsstrahlung, and the coefficient \(R_i^{(j)}\) is dropped altogether). To account for radiation due to recombination, the user must call the method setRecombinationRadiation with the option RECOMBINATION_RADIATION_INCLUDED or True.

import DREAM.Settings.Equations.ColdElectronTemperature as Tcold

ds = DREAMSettings()
...
ds.eqsys.T_cold.setRecombinationRadiation(Tcold.RECOMBINATION_RADIATION_INCLUDED)
# or...
ds.eqsys.T_cold.setRecombinationRadiation(True)

Class documentation

class DREAM.Settings.Equations.ColdElectronTemperature.ColdElectronTemperature(settings, ttype=1, temperature=None, radius=0, times=0, recombination=False)

Bases: DREAM.Settings.Equations.PrescribedParameter.PrescribedParameter, DREAM.Settings.Equations.PrescribedInitialParameter.PrescribedInitialParameter, DREAM.Settings.Equations.UnknownQuantity.UnknownQuantity

__init__(settings, ttype=1, temperature=None, radius=0, times=0, recombination=False)

Constructor.

fromdict(data)
setInitialProfile(temperature, radius=0)

Sets the initial temperature profile T=T(r) for when the temperature is evolved self-consistently.

Parameters
  • temperature – Scalar or vector giving the initial temperature profile.

  • radius – If temperature is a vector, contains the corresponding radial grid on which temperature is defined.

setPrescribedData(temperature, radius=0, times=0)

Prescribes a temperature evolution in time and space.

Parameters
  • temperature – Scalar, vector or matrix giving the temperature throughout the simulation.

  • radius – If temperature is a function of radius, contains the radial grid on which it is defined.

  • times – If temperature is a function of time, contains the time grid on which it is defined.

setRecombinationRadiation(recombination=False)

Specify whether or not to include recombination radiation when evolving the temperature self-consistently.

setType(ttype)

Specifies whether to evolve the electron temperature according to a prescribed function, or self-consistently.

Parameters

ttype – Type of evolution. Can take one of the following values:

  • TYPE_PRESCRIBED: Evolve according to prescribed function.

  • TYPE_SELFCONSISTENT: Evolve self-consistently.

todict()

Returns a Python dictionary containing all settings of this ColdElectrons object.

verifySettings()

Verify that the settings of this unknown are correctly set.

verifySettingsPrescribedData()
verifySettingsPrescribedInitialData()