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
— TypeNoAnom <: AnomalousTransportModel
No anomalous collision frequency included in simulation
HallThruster.Bohm
— TypeBohm(c) <: AnomalousTransportModel
Model where the anomalous collision frequency scales with the electron cyclotron frequency ωce times some scaling factor c
Fields
c::Float64
HallThruster.TwoZoneBohm
— TypeTwoZoneBohm(c1, c2) <: AnomalousTransportModel
Model where the anomalous collision frequency has two values: c1 * ωce inside the channel and c2 * ωce outside of the channel. Takes two arguments: c1 and c2. The transition between these values is smoothed over config.transition_length
.
Fields
c1::Float64
c2::Float64
HallThruster.ScaledGaussianBohm
— TypeScaledGaussianBohm(anom_scale, barrier_scale, width, center) <: AnomalousTransportModel
Model 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, should be in [0, 1]barrier_scale::Float64
: the factor by which transport is reduced by the baseline value at the center of the trough, should be in [0,1].width::Float64
: the standard deviation of the Gaussian trough, in channel lengthscenter::Float64
: the axial position of the mean of the Gaussian trough, in channel lengths
HallThruster.GaussianBohm
— TypeGaussianBohm(hall_min, hall_max, center, width) <: AnomalousTransportModel
Model 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.
Fields
hall_min::Float64
: the minimum inverse Hall parameterhall_max::Float64
: the maximum inverse Hall parametercenter::Float64
: the axial position (in meters) of the mean of the Gaussian troughwidth::Float64
: the standard deviation (in meters) of the Gaussian trough
HallThruster.MultiLogBohm
— TypeMultiLogBohm(zs, cs) <: AnomalousTransportModel
Model similar to that employed in Hall2De, where the mobility 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 user may also provide a single array of [z[1], z[2], ..., z[end], c[1], c[2], ..., c[end]]. The number of z values must be equal to the number of c values.
Fields
zs::Vector{Float64}
cs::Vector{Float64}
HallThruster.SimpleLogisticShift
— TypeSimpleLogisticShift(model, z0, dz, pstar, alpha)
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
: The maximum displacement in response to increasing pressure, scaled by the discharge channel length. This should 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
— TypeLogisticPressureShift(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
: the center of the shift at 0 background pressure
dz::Float64
: the total pressure shift across (0, Inf) background pressure
pstar::Float64
: the "turning point" pressure
alpha::Float64
: the slope of the pressure-displacement response curve
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
— Functionnum_anom_variables(::AnomalousTransportModel)::Int
The 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.