File hydrogen_charge_exchange.hxx

Defines

HYDROGEN_CHARGE_EXCHANGE_H
struct HydrogenChargeExchange : public Component
#include <hydrogen_charge_exchange.hxx>

Hydrogen charge exchange total rate coefficient

p + H(1s) -> H(1s) + p

Reaction 3.1.8 from Amjuel (p43)

Scaled to different isotope masses and finite neutral particle temperatures by using the effective temperature (Amjuel p43)

T_eff = (M/M_1)T_1 + (M/M_2)T_2

Important: If this is included then ion_neutral collisions should probably be disabled in the collisions component, to avoid double-counting.

Subclassed by HydrogenChargeExchangeIsotope< Isotope1, Isotope2 >

Public Functions

inline HydrogenChargeExchange(std::string name, Options &alloptions, Solver*)
Parameters:

alloptions – Settings, which should include:

  • units

    • eV

    • inv_meters_cubed

    • seconds

Protected Functions

void calculate_rates(Options &atom1, Options &ion1, Options &atom2, Options &ion2, Field3D &R, Field3D &atom_mom, Field3D &ion_mom, Field3D &atom_energy, Field3D &ion_energy, Field3D &atom_rate, Field3D &ion_rate, BoutReal &rate_multiplier, bool &no_neutral_cx_mom_gain)

Calculate the charge exchange cross-section

atom1 + ion1 -> atom2 + ion2

and transfer of mass, momentum and energy from:

atom1 -> ion2, ion1 -> atom2

Assumes that both atom1 and ion1 have:

  • AA

  • density

  • velocity

  • temperature

Sets in all species:

  • density_source [If atom1 != atom2 or ion1 != ion2]

  • momentum_source

  • energy_source

Modifies collision_frequency for atom1 and ion1

Diagnostic output R Reaction rate, transfer of particles in case of different isotopes atom_mom Momentum removed from atom1, added to ion2 ion_mom Momentum removed from ion1, added to atom2 atom_energy Energy removed from atom1, added to ion2 ion_energy Energy removed from ion1, added to atom2

Protected Attributes

BoutReal Tnorm
BoutReal Nnorm
BoutReal FreqNorm

Normalisations.

template<char Isotope1, char Isotope2>
struct HydrogenChargeExchangeIsotope : public HydrogenChargeExchange
#include <hydrogen_charge_exchange.hxx>

Hydrogen charge exchange Templated on a char to allow ‘h’, ‘d’ and ‘t’ species to be treated with the same code

atom + ion -> ion + atom Isotope1 + Isotope2+ -> Isotope1+ + Isotope2

Diagnostics

If diagnose = true is set in the options, then the following diagnostics are saved:

  • F<Isotope1><Isotope2>+_cx (e.g. Fhd+_cx) the momentum added to Isotope1 atoms due due to charge exchange with Isotope2 ions. There is a corresponding loss of momentum for the Isotope1 ions d/dt(NVh) = … + Fhd+_cx // Atom momentum source d/dt(NVh+) = … - Fhd+_cx // Ion momentum sink

  • E<Isotope1><Isotope2>+_cx Energy added to Isotope1 atoms due to charge exchange with Isotope2 ions. This contributes to two pressure equations d/dt(3/2 Ph) = … + Ehd+_cx d/dt(3/2 Ph+) = … - Ehd+_cx

If Isotope1 != Isotope2 then there is also the source of energy for Isotope2 atoms and a source of particles:

  • F<Isotope2>+<Isotope1>_cx Source of momentum for Isotope2 ions, sink for Isotope2 atoms

  • E<Isotope2>+<Isotope1>_cx Source of energy for Isotope2 ions, sink for Isotope2 atoms

  • S<Isotope1><Isotope2>+_cx Source of Isotope1 atoms due to charge exchange with Isotope2 ions Note: S<Isotope2><Isotope1>+_cx = -S<Isotope1><Isotope2>+_cx For example Shd+_cx contributes to four density equations: d/dt(Nh) = …

    • Shd+_cx d/dt(Nh+) = … - Shd+_cx d/dt(Nd) = … - Shd+_cx d/dt(Nd+) = … + Shd+_cx

Template Parameters:
  • Isotope1 – The isotope (‘h’, ‘d’ or ‘t’) of the initial atom

  • Isotope2 – The isotope (‘h’, ‘d’ or ‘t’) of the initial ion

Public Functions

inline HydrogenChargeExchangeIsotope(std::string name, Options &alloptions, Solver *solver)
inline virtual void transform(Options &state) override

Modify the given simulation state All components must implement this function

inline virtual void outputVars(Options &state) override

Add extra fields for output, or set attributes e.g docstrings.

Private Members

bool diagnose

Outputting diagnostics?

BoutReal rate_multiplier

Multiply rate by arbitrary user set factor.

Field3D S

Particle exchange, used if Isotope1 != Isotope2.

Field3D F
Field3D F2

Momentum exchange.

Field3D E
Field3D E2

Energy exchange.

Field3D atom_rate
Field3D ion_rate

Collision rates in s^-1.

bool no_neutral_cx_mom_gain

Make CX behave as in diffusive neutrals?