Skip to main content

SparseLu

Struct SparseLu 

Source
pub struct SparseLu { /* private fields */ }
Expand description

A sparse LU that analyzes a pattern once and refactors it on every solve, with its backend picked by a LuBackend.

Starts empty. analyze builds the symbolic factorization; the solves reuse it until reset. The same precondition as LinearSolver holds: every solve must present the pattern that was analyzed, in the same order.

Implementations§

Source§

impl SparseLu

Source

pub fn new(backend: LuBackend) -> Self

Source

pub fn backend(&self) -> LuBackend

Source

pub fn is_analyzed(&self) -> bool

Whether a symbolic factorization is cached.

Source

pub fn analyze(&mut self, n: usize, entries: &[(usize, usize, f64)]) -> bool

Analyzes entries’ pattern and factors it, replacing anything cached. false if the pattern is structurally invalid or the matrix singular, in which case nothing is cached.

Source

pub fn adopt_storage_order(&mut self) -> Option<Vec<usize>>

Asks the analyzed backend to take values in its own storage order from now on, so a caller that can write them that way spares it a copy per solve. Returns order, where order[k] is the index, in the entries analyze was given, of the value position k takes; the caller reorders its values to match, once, and every later factor_and_solve_values and factor_and_solve presents them so.

None, changing nothing, for a backend without one fixed layout (faer, PARDISO), for duplicate positions, or before analyze. The two KLUs say yes: copying the values into their column-compressed layout cost a tenth of a warm Newton solve.

Source

pub fn storage_order(&self) -> Option<&[usize]>

The order adopted by adopt_storage_order, if one is in force.

Source

pub fn reset(&mut self)

Discards the cached factorization, so the next solve needs a fresh analyze.

Source

pub fn factor_and_solve( &mut self, entries: &[(usize, usize, f64)], rhs: &[f64], ) -> Option<Vec<f64>>

See LinearSolver::factor_and_solve. None if nothing is analyzed.

Source

pub fn factor_and_solve_values( &mut self, values: &[f64], rhs: &[f64], ) -> Option<Vec<f64>>

See LinearSolver::factor_and_solve_values. None if nothing is analyzed.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V