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
-
inline HydrogenChargeExchange(std::string name, Options &alloptions, Solver*)
-
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?