pub struct Factors {
pub n: usize,
pub l: Vec<f64>,
pub d_diag: Vec<f64>,
pub d_subdiag: Vec<f64>,
pub perm: Vec<usize>,
pub perm_inv: Vec<usize>,
pub d_eq: Vec<f64>,
pub needs_refinement: bool,
pub zero_tol: f64,
pub zero_tol_2x2: f64,
}Expand description
Factorization result: P·L·D_bk·Lᵀ·Pᵀ = D_eq·A·D_eq.
Fields§
§n: usize§l: Vec<f64>Unit lower triangular L in full n×n column-major storage. Diagonal entries are 1.0 (stored explicitly).
d_diag: Vec<f64>D_bk diagonal entries in pivot order. Length n.
d_subdiag: Vec<f64>D_bk sub-diagonal entries. Length n. Zero for 1×1 pivots.
perm: Vec<usize>BK pivot permutation (forward). Length n. perm[i] = j means original row j was moved to pivot position i.
perm_inv: Vec<usize>Inverse permutation. perm_inv[perm[i]] == i for all i.
d_eq: Vec<f64>Equilibration scaling diagonal D_eq. Length n.
needs_refinement: boolTrue when the factor is approximate and a residual check / iterative
refinement is advised. Set by any of: a ForceAccept’d zero pivot,
a PerturbToEps perturbation, an F-01 rank-deficiency band pivot
(sign-fallback), an MA57-style static-pivot floor perturbation, or
growth flagging (|L_ij| > L_GROWTH_THRESHOLD). (D9,
repo-review-2026-06-09.md: previously documented as ForceAccept-only.)
zero_tol: f641×1 pivot threshold copied from BunchKaufmanParams at factor time.
solve consults this to decide whether to divide by d_diag[k]:
pivots |d| <= zero_tol were force-accepted as numerically zero
during factorization and must be skipped (left as-is) by the
D-block solve. Otherwise dividing by a tiny pivot produces
catastrophic error. See dev/plans/threshold-mismatch-fix.md.
zero_tol_2x2: f642×2 pivot block threshold (matches BunchKaufmanParams::zero_tol_2x2).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Factors
impl RefUnwindSafe for Factors
impl Send for Factors
impl Sync for Factors
impl Unpin for Factors
impl UnsafeUnpin for Factors
impl UnwindSafe for Factors
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
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