# 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)


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.

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()
...
# or...


## 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()