pub enum JacobianBackend {
Scalar,
Block,
KluNative,
}Expand description
Selects which sparse-LU backend newton_raphson_with_backend uses to
solve the Jacobian system each iteration.
The default is KluNative: the KLU algorithm power
systems are usually solved with, in Rust, with no build requirement. It
solves the power-flow Jacobians gridoxide is benchmarked on about six
times faster than Scalar (case9241pegase: 15 ms against 87), within 15%
of SuiteSparse’s own KLU.
Variants§
Scalar
Scalar sparse triplets solved via faer (sparse::RealSparseSystem).
The default until KLU’s native port caught up with SuiteSparse’s.
Block
Experimental, opt-in: groups each bus’s own (angle, magnitude)
unknowns into one 2×2 block, mirroring power-grid-model’s
block-per-bus matrix structure (block_sparse::BlockLu). Every
non-slack bus gets a block — including PV buses, which have no
real Q-mismatch equation. Rather than varying block size per bus
(which block_sparse::BlockLu doesn’t support), a PV bus’s second
row is replaced with a dummy ΔVmag_i = 0 equation (coefficients
[0, 1], target 0) that pins its voltage-magnitude update to zero
every iteration — mathematically equivalent to the scalar backend’s
actual dimension reduction, since that row is fully decoupled from
every other unknown. See build_jacobian_blocks.
KluNative
The default: the same scalar Jacobian as Scalar, solved via a
from-scratch Rust port of the same KLU algorithm Klu links over FFI
— no C toolchain needed, always compiled (unlike Klu, no
feature gate). See klu_native’s module doc comment for scope: BTF,
AMD, row scaling, partial pivoting, Eisenstat-Liu pruning and refactor
are faithful translations.
Implementations§
Source§impl JacobianBackend
impl JacobianBackend
Sourcepub fn lu_backend(self) -> LuBackend
pub fn lu_backend(self) -> LuBackend
The sparse LU this backend factors with. Block has no general sparse
LU of its own, so wherever a Jacobian is not power flow’s block-per-bus
shape it falls back to faer, as Scalar does.
Trait Implementations§
Source§impl Clone for JacobianBackend
impl Clone for JacobianBackend
impl Copy for JacobianBackend
Source§impl Debug for JacobianBackend
impl Debug for JacobianBackend
Source§impl Default for JacobianBackend
impl Default for JacobianBackend
impl Eq for JacobianBackend
Source§impl PartialEq for JacobianBackend
impl PartialEq for JacobianBackend
impl StructuralPartialEq for JacobianBackend
Auto Trait Implementations§
impl Freeze for JacobianBackend
impl RefUnwindSafe for JacobianBackend
impl Send for JacobianBackend
impl Sync for JacobianBackend
impl Unpin for JacobianBackend
impl UnsafeUnpin for JacobianBackend
impl UnwindSafe for JacobianBackend
Blanket Implementations§
impl<T> Boilerplate for T
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