Anomalous transport
HallThruster has a few anomalous transport models built in and allows users to define their own. This page describes these models and the process by which algebraic and multi-equation transport models can be added by the user.
Built-in Models
HallThruster.NoAnom — Type
NoAnom <: AnomalousTransportModelNo anomalous collision frequency included in simulation
HallThruster.Bohm — Type
Bohm(c) <: AnomalousTransportModelModel where the anomalous collision frequency scales with the electron cyclotron frequency as νan = c * ωce.
Fields
c::Float64: Nonnegative inverse Hall parameter.
HallThruster.TwoZoneBohm — Type
TwoZoneBohm(c1, c2) <: AnomalousTransportModelModel where the anomalous collision frequency has two values: c1 * ωce inside the channel and c2 * ωce outside it. The transition between these values is smoothed over params.transition_length.
Fields
c1::Float64: Nonnegative inverse Hall parameter inside the channel.c2::Float64: Nonnegative inverse Hall parameter outside the channel.
HallThruster.ScaledGaussianBohm — Type
ScaledGaussianBohm(anom_scale, barrier_scale, width, center) <: AnomalousTransportModelModel in which the anomalous collision frequency is Bohm-like (νan ~ ω_ce), except in a Gaussian-shaped region defined centered on z = center, where the collision frequency is lower. Reparameterized version of the GaussianBohm model to make parameters non-dimensional and closer to O(1)
Fields
anom_scale::Float64: The maximum inverse hall parameter. Must be positive.barrier_scale::Float64: The factor by which transport is reduced by the baseline value at the center of the trough, must be in [0,1].width::Float64: The standard deviation of the Gaussian trough, in channel lengths. Must be positive.center::Float64: The axial position of the mean of the Gaussian trough, in channel lengths. Must be positive.
HallThruster.GaussianBohm — Type
GaussianBohm(hall_min, hall_max, center, width) <: AnomalousTransportModelModel in which the anomalous collision frequency is Bohm-like (νan ~ ωce), with a Gaussian trough centered at center. The inverse Hall parameter is hall_max far from the trough and hall_min * hall_max at its center.
Fields
hall_min::Float64: Fraction ofhall_maxretained at the trough center; must be in [0, 1].hall_max::Float64: Inverse Hall parameter far from the trough; must be positive.center::Float64: Finite axial position of the center of the Gaussian trough, in meters.width::Float64: Positive standard deviation of the Gaussian trough, in meters.
HallThruster.MultiLogBohm — Type
MultiLogBohm(zs, cs) <: AnomalousTransportModelModel similar to that employed in Hall2De, where the anomalous collision frequency is Bohm-like (i.e. νan(z) = c(z) * ωce(z)) and z is in meters.
The function c(z) is defined by a sequence of nodes (z, c) provided by the user. At z = z[1], c(z) = c[1], and so forth.
At z[i] < z < z[i+1], log(c) is defined by linearly interpolating between log(c[i]) and log(c[i+1]).
For z < z[1], c = c[1] and for z > z[end], c(z) = c[end].
The zs values must be finite and strictly increasing. The cs values must be finite and positive because their logarithms are interpolated. Both arrays must be nonempty and have the same length.
Fields
zs::Vector{Float64}: Finite, strictly increasing axial node positions in meters.cs::Vector{Float64}: Positive inverse Hall parameters at the axial nodes.
HallThruster.SimpleLogisticShift — Type
SimpleLogisticShift(model, shift_length, midpoint_pressure, slope)A wrapper model that allows a transport profile to shift axially in response to changes in background pressure. As with LogisticPressureShift, the displacement/shift of the transport profile follows a logistic curve. However, the parameterization is different, so that the shift is zero when the background pressure is zero. As such, it does not have a z0 parameter.
Fields
model::HallThruster.AnomalousTransportModel: An AnomalousTransportModel
shift_length::Float64: Scale of the upstream displacement in response to increasing pressure, relative to the discharge channel length. The asymptotic displacement magnitude isshift_length / (1 + exp(-slope)). Must be positive.
midpoint_pressure::Float64: The pressure at the midpoint of the shift, in Torr. Defaults to 25e-6 Torr, which gives good fits for the H9 and SPT-100.
slope::Float64: The slope of the pressure response curve. Defaults to 2, which gives good fits for the H9 and SPT-100.
HallThruster.LogisticPressureShift — Type
LogisticPressureShift(model, z0, dz, pstar, alpha)A wrapper model that allows a transport profile to shift axially in response to changes in background pressure. The displacement/shift of the transport profile follows a logistic curve.
Fields
model::HallThruster.AnomalousTransportModel: An anomalous transport model
z0::Float64: Dimensionless shift offset, scaled by the channel length. Must be finite.
dz::Float64: The shift amplitude, scaled by the channel length. Must be finite.
pstar::Float64: The positive pressure scale in Torr.
alpha::Float64: Shape parameter for the pressure-displacement response curve; must be greater than 1.
The AnomalousTransportModel interface
Users defining their own transport model will need first define a model that subtypes AnomalousTransportModel. They will then need to provide definitions for the following methods
HallThruster.num_anom_variables — Function
num_anom_variables(::AnomalousTransportModel)::IntThe number of variable arrays that should be allocated for the provided anomalous transport model. These arrays are used to save state beyond the anomalous collision frequency, and are useful for defining more complex anomalous transport models. If not defined by the user, this defaults to zero.
Additionally, they will need to define a function that allows the model to be called with the following arguments.
# replace <:AnomalousTransportModel with ::MyModel, where MyModel is the name of your model.
(model<:AnomalousTransportModel)(nu_an, params, config)This function should operate in-place on nu_an. See Adding an anomalous transport model for a guide on implementing new models.