pub struct Ict<I, T> { /* private fields */ }Expand description
Numeric ICT factor of a Hermitian positive-definite CSC matrix A.
Stores the lower-triangular factor L (diagonal first per column) such that
L L^H ~= A. Apply uses the same two triangular solves as crate::Ic0.
Implementations§
Source§impl<I: Index, T: ComplexField> Ict<I, T>
impl<I: Index, T: ComplexField> Ict<I, T>
Sourcepub fn try_new(a: SparseColMatRef<'_, I, T>) -> Result<Self, IctError>
pub fn try_new(a: SparseColMatRef<'_, I, T>) -> Result<Self, IctError>
Build an ICT factor with the default parameters.
Sourcepub fn try_new_with_params(
a: SparseColMatRef<'_, I, T>,
params: IctParams,
) -> Result<Self, IctError>
pub fn try_new_with_params( a: SparseColMatRef<'_, I, T>, params: IctParams, ) -> Result<Self, IctError>
Build an ICT factor with explicit parameters.
Only the lower triangle of A is read.
§Errors
IctError::NonSquareMatrixifAis not square.IctError::InvalidDropTol/IctError::InvalidFillControlfor bad parameters.IctError::NotPositiveDefiniteif a non-positive pivot appears.
Sourcepub fn refactorize(
&mut self,
a: SparseColMatRef<'_, I, T>,
) -> Result<(), IctError>
pub fn refactorize( &mut self, a: SparseColMatRef<'_, I, T>, ) -> Result<(), IctError>
Refactorise against a new matrix with the same dimension.
Reuses the existing buffer capacity but, because the pattern is value- dependent, recomputes it from scratch — this is not allocation-free in the strict sense (it may grow the buffers).
§Errors
As Ict::try_new_with_params, plus IctError::PatternMismatch if
a’s dimension differs.
Sourcepub fn l_view(&self) -> SparseColMatRef<'_, I, T>
pub fn l_view(&self) -> SparseColMatRef<'_, I, T>
View over the lower-triangular factor L (diagonal first per column).
Trait Implementations§
Source§impl<I, T> BiLinOp<T> for Ict<I, T>
impl<I, T> BiLinOp<T> for Ict<I, T>
Source§fn transpose_apply_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
fn transpose_apply_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
computes the workspace layout required to apply the transpose or adjoint
o
self to a matrix with rhs_ncols columnsSource§impl<I, T> BiPrecond<T> for Ict<I, T>
impl<I, T> BiPrecond<T> for Ict<I, T>
Source§fn transpose_apply_in_place_scratch(
&self,
_rhs_ncols: usize,
_par: Par,
) -> StackReq
fn transpose_apply_in_place_scratch( &self, _rhs_ncols: usize, _par: Par, ) -> StackReq
computes the workspace layout required to apply the transpose or adjoint
of
self to a matrix with rhs_ncols columns in placeSource§impl<I, T> LinOp<T> for Ict<I, T>
impl<I, T> LinOp<T> for Ict<I, T>
Source§fn apply_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
fn apply_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
computes the workspace layout required to apply
self or the conjugate
o self to a matrix with rhs_ncols columnsSource§impl<I, T> Precond<T> for Ict<I, T>
impl<I, T> Precond<T> for Ict<I, T>
Source§fn apply_in_place_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
fn apply_in_place_scratch(&self, _rhs_ncols: usize, _par: Par) -> StackReq
computes the workspace layout required to apply
self or the conjugate
of self to a matrix with rhs_ncols columns in placeAuto Trait Implementations§
impl<I, T> Freeze for Ict<I, T>
impl<I, T> RefUnwindSafe for Ict<I, T>where
I: RefUnwindSafe,
T: RefUnwindSafe,
impl<I, T> Send for Ict<I, T>
impl<I, T> Sync for Ict<I, T>
impl<I, T> Unpin for Ict<I, T>
impl<I, T> UnsafeUnpin for Ict<I, T>
impl<I, T> UnwindSafe for Ict<I, T>where
I: UnwindSafe,
T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
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 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>
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