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.Gas — Type
struct GasA 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 indexM::Float64: Molar mass (grams/mol) or atomic mass unitsm::Float64: Mass of atom in kg
HallThruster.Gas — Method
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.
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.Species — Type
struct SpeciesRepresents 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 speciessymbol::Symbol: The symbol of the species, i.e.Symbol(Xe(+))forSpecies(Xenon, 1)Z::Int8: The charge state of the species, i.e. Z = 1 for a singly-charged speciesexcited_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*)HallThruster.Species — Method
Species(element::Gas, Z::Integer, excited_level::Integer = 0) -> SpeciesConstruct 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)
trueBuilt-in propellants
HallThruster provides Gas definitions and full sets of reaction rate coefficients for the following gases
XenonKrypton
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.Propellant — Type
struct PropellantDefines 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: AGas. 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 aLinearInterpolationover axial position. Scalar inputs are accepted and stored as constant interpolations. Default:150.0, or iftemperature_Kis 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 aLinearInterpolationover 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).