6.3. Rate Coefficients

All atomic rate coefficients specify a calling signature that must be used for this rate, e.g. __call__(arg1, arg2, …). The calculations associated with this calling signature are actually implemented in a separate function called evaluate(arg1, arg2, …). No other information or data about the rate is specified in the core API, instead all other implementation details are deferred to the atomic data provider.

The reason for this design is that it allows rate objects to be used throughout all the Cherab emission models without knowing how this data will be provided or calculated. For example, some atomic data providers might use interpolated data while others could provide theoretical equations. Cherab emission models only need to know how to call them after they have been instantiated.

6.3.1. Photon Emissivity Coefficients

class cherab.core.atomic.rates.ImpactExcitationPEC

Impact excitation rate coefficient.

class cherab.core.atomic.rates.RecombinationPEC

Recombination rate coefficient.

class cherab.core.atomic.rates.ThermalCXPEC

Thermal charge exchange rate coefficient.

The ImpactExcitationPEC, RecombinationPEC and ThermalCXPEC classes all share the same call signatures.

__call__(density, temperature)

Returns a photon emissivity coefficient at the specified plasma conditions.

This function just wraps the cython evaluate() method.

evaluate(density, temperature)

Returns a photon emissivity coefficient at the specified plasma conditions.

This function needs to be implemented by the atomic data provider.

Parameters
  • temperature (float) – Receiver ion temperature in eV.

  • density (float) – Receiver ion density in m^-3

Returns

The effective PEC rate [Wm^3].

Some example code for requesting PEC objects and sampling them with the __call__() method.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from cherab.core.atomic import deuterium
>>> from cherab.openadas import OpenADAS
>>>
>>> # initialise the atomic data provider
>>> adas = OpenADAS()
>>>
>>> # request d-alpha instance of ImpactExcitationRate
>>> dalpha_excit = adas.impact_excitation_pec(deuterium, 0, (3, 2))
>>> # request d-alpha instance of RecombinationRate
>>> dalpha_recom = adas.recombination_pec(deuterium, 0, (3, 2))
>>>
>>> # evaluate D-alpha ImpactExcitationRate PEC at n_e = 1E19 m^-3 and t_e = 2 eV
>>> dalpha_excit(1E19, 2)
2.50352900-36
>>>
>>> # evaluate D-alpha ImpactExcitationRate PEC at n_e = 1E19 m^-3 and t_e = 2 eV
>>> dalpha_recom(1E19, 2)
1.09586154-38

6.3.2. Beam-Plasma Interaction Rates

class cherab.core.atomic.rates.BeamStoppingRate

\(S^{e, i}_{CR}\) [\(m^3.s^{-1}\)]

The effective collisional radiative stopping coefficient \(S^{e, i}_{CR}\) [\(m^3.s^{-1}\)] for neutral atom \(X^0\) in a mono-energetic beam by fully stripped ions \(Y^i\) and their electrons.

Equivalent to \(S^{e, i}_{CR}\) as defined in ADAS adf21.

class cherab.core.atomic.rates.BeamPopulationRate

\(bmp(X^0(m_i))\) [dimensionless]

Relative beam population of excited state \(m_i\) over ground state for atom \(X^0\), \(bmp(X^0(m_i))\).

The rate \(bmp(X^0(m_i))\) is equivalent to the \(BMP\) rate as defined in adf22 and is dimensionless.

class cherab.core.atomic.rates.BeamEmissionPEC

\(bme(X^0(m_i))\) [\(W.m^3\)]

The effective beam emission coefficient, \(bme(X^0(m_i))\).

The rate \(bme(X^0(m_i))\) is equivalent to the \(BME\) rate as defined in adf22.

The BeamStoppingRate, BeamPopulationRate and BeamEmissionPEC classes all share the same call signatures.

__call__(energy, density, temperature)

Returns the associated beam reaction rate at the specified plasma conditions.

This function just wraps the cython evaluate() method.

evaluate(energy, density, temperature)

Returns the beam coefficient for the supplied parameters.

Parameters
  • energy (float) – Interaction energy in eV/amu.

  • density (float) – Target electron density in m^-3

  • temperature (float) – Target temperature in eV.

Returns

The beam coefficient

Some example code for requesting beam rate objects and sampling them with the __call__() method.

>>> from cherab.core.atomic import deuterium, carbon
>>> from cherab.openadas import OpenADAS
>>>
>>> # initialise the atomic data provider
>>> adas = OpenADAS(permit_extrapolation=True)
>>>
>>> # Request beam stopping rate and sample
>>> bms = adas.beam_stopping_rate(deuterium, carbon, 6)
>>> bms(50000, 1E19, 1)
1.777336e-13
>>>
>>> # Sample the beam population rate
>>> bmp = adas.beam_population_rate(deuterium, 2, carbon, 6)
>>> bmp(50000, 1E19, 1)
7.599066e-4
>>>
>>> # Sample the beam emission rate
>>> bme = adas.beam_emission_pec(deuterium, deuterium, 1, (3, 2))
>>> bme(50000, 1E19, 1)
8.651598e-34
class cherab.core.atomic.rates.BeamCXPEC

\(q^{eff}_{n\rightarrow n'}\) [\(W.m^{3}\)]

Effective emission coefficient (or rate) for a charge-exchange line corresponding to a transition \(n\rightarrow n'\) of ion \(Z^{(\alpha+1)+}\) with electron donor \(H^0\) in metastable state \(m_{i}\). Equivalent to \(q^{eff}_{n\rightarrow n'}\) in adf12 <http://open.adas.ac.uk/adf12>_.

__call__()

Evaluates the Beam CX rate at the given plasma conditions.

This function just wraps the cython evaluate() method.

evaluate(energy, temperature, density, z_effective, b_field)

Evaluates the Beam CX rate at the given plasma conditions.

Parameters
  • energy (float) – Interaction energy in eV/amu.

  • temperature (float) – Receiver ion temperature in eV.

  • density (float) – Receiver ion density in m^-3

  • z_effective (float) – Plasma Z-effective.

  • b_field (float) – Magnetic field magnitude in Tesla.

Returns

The effective rate

Some example code for requesting beam CX rate object and sampling it with the __call__() method.

>>> from cherab.core.atomic import deuterium, carbon
>>> from cherab.openadas import OpenADAS
>>>
>>> # initialise the atomic data provider
>>> adas = OpenADAS(permit_extrapolation=True)
>>>
>>> cxr = adas.beam_cx_pec(deuterium, carbon, 6, (8, 7))
>>> cxr_n1, cxr_n2 = cxr
>>> cxr_n1(50000, 100, 1E19, 1, 1)
5.826619e-33
>>> cxr_n2(50000, 100, 1E19, 1, 1)
1.203986e-32

6.3.3. Abundances

class cherab.core.atomic.rates.FractionalAbundance

Rate provider for fractional abundances in thermodynamic equilibrium.

__call__(electron_density, electron_temperature)

Evaluate the fractional abundance of this ionisation stage at the given plasma conditions.

This function just wraps the cython evaluate() method.

Parameters
  • electron_density (float) – electron density in m^-3

  • electron_temperature (float) – electron temperature in eV

>>> from cherab.core.atomic import neon
>>> from cherab.adas import ADAS
>>>
>>> atomic_data = ADAS()
>>>
>>> ne0_frac = atomic_data.fractional_abundance(neon, 0)
>>> ne0_frac(1E19, 1.0)
0.999899505093943

6.3.4. Radiated Power

class cherab.core.atomic.rates.RadiatedPower

Total radiated power for a given species and radiation type.

Radiation type can be: - ‘total’ (line + recombination + bremsstrahlung + charge exchange) - ‘line’ radiation - ‘continuum’ (recombination + bremsstrahlung) - ‘cx’ charge exchange

__call__(electron_density, electron_temperature)

Evaluate the total radiated power of this species at the given plasma conditions.

This function just wraps the cython evaluate() method.

Parameters
  • electron_density (float) – electron density in m^-3

  • electron_temperature (float) – electron temperature in eV

>>> from cherab.core.atomic import neon
>>> from cherab.adas import ADAS
>>>
>>> atomic_data = ADAS()
>>>
>>> ne_total_rad = atomic_data.radiated_power_rate(neon, 'total')
>>> ne_total_rad(1E19, 10) * 1E19
9.2261136594e-08
>>>
>>> ne_continuum_rad = atomic_data.radiated_power_rate(neon, 'continuum')
>>> ne_continuum_rad(1E19, 10) * 1E19
3.4387672228e-10
class cherab.core.atomic.rates.StageResolvedLineRadiation

Total ionisation state resolved line radiated power rate.

Parameters
  • element (Element) – the radiating element

  • ionisation (int) – the integer charge state for this ionisation stage

  • name (str) – optional label identifying this rate

__call__(electron_density, electron_temperature)

Evaluate the total radiated power of this species at the given plasma conditions.

This function just wraps the cython evaluate() method.

Parameters
  • electron_density (float) – electron density in m^-3

  • electron_temperature (float) – electron temperature in eV

>>> from cherab.core.atomic import neon
>>> from cherab.adas import ADAS
>>>
>>> atomic_data = ADAS()
>>>
>>> ne0_line_rad = atomic_data.stage_resolved_line_radiation_rate(neon, 0)
>>> ne0_line_rad(1E19, 10) * 1E19
6.1448254527e-16
>>>
>>> ne1_line_rad = atomic_data.stage_resolved_line_radiation_rate(neon, 1)
>>> ne1_line_rad(1E19, 10) * 1E19
1.7723122151e-11