Propellants

HallThruster implements several common Hall thruster propellants, and makes it easy to implement your own. Propellants in HallThruster are instances of the Gas struct, which contains information about the atomic and thermodynamic properties of a gaseous substance. Many of these properties are functions of the others, so HallThruster provides a convenience constructor Gas(formula; γ, M) which will compute the rest of the properties automatically.

HallThruster.GasType
struct Gas

A chemical element in the gaseous state. Container for element properties used in fluid computations.

Fields

  • formula::Symbol: Atomic symbol or molecular formula

  • γ::Float64: Specific heat ratio / adiabatic index

  • M::Float64: Molar mass (grams/mol) or atomic mass units

  • m::Float64: Mass of atom in kg

source
HallThruster.GasMethod
Gas(formula; γ, M)

Construct a gas from a chemical formula For monatomic and diatomic species, the specific heat ratio is inferred For triatomic and up, it must be provided Unless provided, the full name will be determined from the short name provided.

source

HallThruster.jl will parse the gas formula automatically to determine the mass and number of atoms. For monatomic and diatomic species, $\gamma$ does not need to be specified. For triatomic and larger gases, the code will error if $\gamma$ is not provided.

Gases can become ionized to produce Species, which are structs containing a Gas and a charge state, Z. HallThruster uses the max_charge field of each Propellant (see Configuration) to construct a list of Species, which it then uses to load reactions from the default directory and from any user-provided directories.

HallThruster.SpeciesType
struct Species

Represents a gas with a specific charge state and electronic excitation level. In a plasma, different ionization states of the same gas may coexist, so we need to be able to differentiate between these. Excited states are likewise distinguished so they can be tracked as their own fluids.

Fields

  • element::HallThruster.Gas: The gas that forms the base of the species

  • symbol::Symbol: The symbol of the species, i.e. Symbol(Xe(+)) for Species(Xenon, 1)

  • Z::Int8: The charge state of the species, i.e. Z = 1 for a singly-charged species

  • excited_level::Int8: The excitation level of the species; zero denotes the ground state

julia> Species(Xenon, 0)
Xe

julia> Species(Xenon, 1)
Xe(+)

julia> Species(Xenon, 3)
Xe(3+)

julia> Species(Xenon, 0, 1)
Xe(*)

julia> Species(Xenon, 0, 2)
Xe(2*)
source
HallThruster.SpeciesMethod
Species(element::Gas, Z::Integer, excited_level::Integer = 0) -> Species

Construct a Species from a gas, charge state, and optional excitation level. An excited_level of zero represents the ground state.

Call the gas directly with gas(Z) or gas(Z, excited_level) as a convenience:

julia> Xenon(0) == Species(Xenon, 0)
true

julia> Xenon(0, 1) == Species(Xenon, 0, 1)
true
source

Built-in propellants

HallThruster provides Gas definitions and full sets of reaction rate coefficients for the following gases

  • Xenon
  • Krypton

Gas definitions and partial rate coefficients are available for these gases.

  • Argon: Single, double, and triple ionization from neutral argon. No excitation or momentum transfer collisions.
  • MolecularNitrogen: Single ionization and momentum transfer collisions. No dissociation or excitation.

Users wishing to implement their own propellant should read Adding a new propellant.

Propellant

When specifying the propellant to use in a simulation, you use the Propellant struct. This takes both a Gas and a flow rate, as well as the neutral gas temperature and/or velocity at the anode.

Neutral velocity and temperature may be scalars or axial profiles. Profile coordinates are in meters, values outside the supplied coordinate range clamp to the nearest endpoint, and the profiles are sampled onto the simulation grid during setup.

velocity = LinearInterpolation([0.0, 0.04, 0.08], [150.0, 225.0, 300.0])
temperature = LinearInterpolation([0.0, 0.08], [500.0, 800.0])

propellant = Propellant(
    Xenon, 5.0e-6;
    velocity_m_s = velocity,
    temperature_K = temperature,
)

The equivalent JSON fields accept either their traditional scalar values or profile objects such as {"xs": [0.0, 0.08], "ys": [150.0, 300.0]}. Propellant TOML files accept the same shape as an inline table.

HallThruster.PropellantType
struct Propellant

Defines a propellant flowing through the thruster anode. In addition to the neutral gas being used, the user specifies the anode mass flow rate and (optionally) the maximum charge state and temperature/velocity of the gas.

Fields

  • gas::HallThruster.Gas: A Gas. See Propellants for more. Default: Xenon.
  • flow_rate_kg_s::Float64: The mass flow rate of neutral atoms through the anode, in kg/s.
  • velocity_m_s::HallThruster.LinearInterpolation{Vector{Float64}, Vector{Float64}}: Neutral velocity in m/s as a LinearInterpolation over axial position. Scalar inputs are accepted and stored as constant interpolations. Default: 150.0, or if temperature_K is set, that parameter is used to compute the velocity using a one-sided Maxwellian flux approximation.
  • temperature_K::HallThruster.LinearInterpolation{Vector{Float64}, Vector{Float64}}: Neutral temperature in Kelvins as a LinearInterpolation over axial position. Scalar inputs are accepted and stored as constant interpolations. Default: 500.0.
  • ion_temperature_K::Float64: Ion temperature in Kelvins for this propellant. Default: 1000.0
  • allowed_charges::Vector{Int64}: Allowed charges of ion states. Default: [1, 2, ..., max_charge].
  • excited_levels::Vector{Int64}: Excitation levels tracked as their own neutral fluids (Xe(*), Xe(2*), ...), usable in reaction equations. Default: [] (excitation is lumped into an energy loss).
  • excited_ion_levels::Dict{Int64, Vector{Int64}}: Excited levels tracked per ion charge state as their own fluids (Xe(1+,1*), ...), keyed by charge. Default: empty (no excited ions).
source