pub struct SolveContext<'a> {
pub buses: &'a mut [Bus],
pub lines: &'a [Line],
pub transformers: &'a mut [Transformer],
pub shunts: &'a [ShuntAdm],
pub tap_changers: &'a mut [Option<TapChanger>],
pub regulation: &'a [TapRegulation],
pub ybus: &'a mut YBusSparse,
}Expand description
The network a solve runs against.
Constructed once by the caller and passed to solve_with_loops. The
branch and tap fields are optional in the sense that a caller with no tap
control simply never supplies them — SolveContext::new leaves them
empty, and only Invalidates::Admittances loops read them.
Fields§
§buses: &'a mut [Bus]§lines: &'a [Line]§transformers: &'a mut [Transformer]§shunts: &'a [ShuntAdm]§tap_changers: &'a mut [Option<TapChanger>]Parallel to transformers. Empty when the importer retained no tap
tables, which is what makes tap control silently inapplicable rather
than an error.
regulation: &'a [TapRegulation]The regulating controls read from the network document.
ybus: &'a mut YBusSparseImplementations§
Source§impl<'a> SolveContext<'a>
impl<'a> SolveContext<'a>
Sourcepub fn new(buses: &'a mut [Bus], ybus: &'a mut YBusSparse) -> Self
pub fn new(buses: &'a mut [Bus], ybus: &'a mut YBusSparse) -> Self
Buses and a Y-bus: everything a loop that never moves a tap needs.
Sourcepub fn with_branches(
self,
lines: &'a [Line],
transformers: &'a mut [Transformer],
shunts: &'a [ShuntAdm],
) -> Self
pub fn with_branches( self, lines: &'a [Line], transformers: &'a mut [Transformer], shunts: &'a [ShuntAdm], ) -> Self
The branch data the Y-bus is built from. Required before any tap loop can restamp it.
Sourcepub fn with_taps(
self,
tap_changers: &'a mut [Option<TapChanger>],
regulation: &'a [TapRegulation],
) -> Self
pub fn with_taps( self, tap_changers: &'a mut [Option<TapChanger>], regulation: &'a [TapRegulation], ) -> Self
The tap tables and the regulating controls that act on them.
Sourcepub fn restamp_ybus(&mut self)
pub fn restamp_ybus(&mut self)
Rebuild the Y-bus from the current branch data.
Called by the driver after an Invalidates::Admittances loop moved a
tap. A tap change alters admittance values and not the sparsity
pattern, so this produces a structurally identical matrix and the
symbolic factorization stays valid.
Does nothing when the caller supplied no branch data, since there is then nothing to rebuild from — a tap loop cannot be configured in that case either, so this is unreachable rather than lossy.
Auto Trait Implementations§
impl<'a> !UnwindSafe for SolveContext<'a>
impl<'a> Freeze for SolveContext<'a>
impl<'a> RefUnwindSafe for SolveContext<'a>
impl<'a> Send for SolveContext<'a>
impl<'a> Sync for SolveContext<'a>
impl<'a> Unpin for SolveContext<'a>
impl<'a> UnsafeUnpin for SolveContext<'a>
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> 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