pub struct PowerFlowOptions {Show 13 fields
pub tol: f64,
pub max_iter: usize,
pub backend: JacobianBackend,
pub method: PowerFlowMethod,
pub init: PowerFlowInit,
pub enforce_q_limits: bool,
pub distribute_slack: Option<SlackDistribution>,
pub area_interchange: Option<AreaDefinition>,
pub control_taps: bool,
pub control_remote_voltage: bool,
pub tap_max_shift: i32,
pub max_outer_iter: usize,
pub dc: DcOptions,
}Expand description
Everything crate::run_power_flow needs to know.
The pre-existing entry points — solver::newton_raphson,
solver::newton_raphson_with_backend, solver::PersistentSolver::solve,
the outer-loop driver — keep their positional parameters
and are unaffected by this type. It exists so that adding a fifth or sixth
knob does not mean a fifth or sixth positional argument, following
se::nr::SeOptions.
Fields§
§tol: f64Convergence tolerance on the maximum P/Q mismatch. Newton only.
max_iter: usizeNewton only.
backend: JacobianBackendWhich sparse-LU backend solves the Jacobian. Newton only: the direct methods each own their factorization type.
method: PowerFlowMethod§init: PowerFlowInit§enforce_q_limits: boolAdds crate::outerloop::ReactiveLimits to the outer-loop list.
distribute_slack: Option<SlackDistribution>Adds crate::outerloop::DistributedSlack to the outer-loop list,
innermost, with these participation weights.
Mutually exclusive with area_interchange,
which subsumes it — configuring both would move the same schedules
twice, and run_power_flow refuses rather than doing so.
area_interchange: Option<AreaDefinition>Adds crate::outerloop::AreaInterchange in distributed slack’s place,
holding each control area’s net export at its scheduled value.
control_taps: boolAdds crate::outerloop::PhaseControl and
crate::outerloop::TransformerVoltageControl, outermost. Needs an
importer that retained tap tables and regulating controls; with none,
both loops are stable on their first check and cost one call each.
control_remote_voltage: boolAdds crate::outerloop::RemoteVoltageControl to the loop list, for
machines that regulate a bus other than their own.
Off by default, and the default is wrong rather than merely
conservative: without it a remote machine’s reactive power appears at the
bus it holds instead of at the machine, so the reactive flow between them
is missing. It is opt-in because turning it on changes answers, and
because it needs network data only CGMES supplies — see
crate::RemoteControlData.
tap_max_shift: i32Positions a tap controller may move in one outer pass. The sensitivity is exact only at the converged state, so a large step overshoots; capping trades passes for stability.
max_outer_iter: usizeCap on total outer-loop re-solves across every configured loop.
dc: DcOptionsSusceptance choice and transformer-ratio handling for
PowerFlowMethod::Dc and for PowerFlowInit::Dc.
Trait Implementations§
Source§impl Clone for PowerFlowOptions
impl Clone for PowerFlowOptions
Source§impl Debug for PowerFlowOptions
impl Debug for PowerFlowOptions
Auto Trait Implementations§
impl Freeze for PowerFlowOptions
impl RefUnwindSafe for PowerFlowOptions
impl Send for PowerFlowOptions
impl Sync for PowerFlowOptions
impl Unpin for PowerFlowOptions
impl UnsafeUnpin for PowerFlowOptions
impl UnwindSafe for PowerFlowOptions
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more