pub trait DenseKernel<T: Real> {
// Required methods
fn potrf(&self, a: &mut DenseBlock<T>) -> Result<(), DenseError>;
fn sytrf(
&self,
a: &mut DenseBlock<T>,
perm: &mut Perm,
pivot_2x2: &mut Vec<bool>,
) -> Result<Inertia, DenseError>;
fn trsm_lower(
&self,
l: &DenseBlock<T>,
b: &mut DenseBlock<T>,
transpose: bool,
);
fn gemm_sub(
&self,
a: &DenseBlock<T>,
b: &DenseBlock<T>,
c: &mut DenseBlock<T>,
);
fn syrk_sub(&self, a: &DenseBlock<T>, c: &mut DenseBlock<T>);
fn name(&self) -> &'static str;
}Expand description
The kernels a supernodal factorization needs (BLAS-3 names kept for recognizability). Square blocks are read and written in their lower triangle (invariant (D3)).
Required Methods§
Sourcefn potrf(&self, a: &mut DenseBlock<T>) -> Result<(), DenseError>
fn potrf(&self, a: &mut DenseBlock<T>) -> Result<(), DenseError>
In-place Cholesky A = L Lᵀ of a square block (Algorithm P).
Sourcefn sytrf(
&self,
a: &mut DenseBlock<T>,
perm: &mut Perm,
pivot_2x2: &mut Vec<bool>,
) -> Result<Inertia, DenseError>
fn sytrf( &self, a: &mut DenseBlock<T>, perm: &mut Perm, pivot_2x2: &mut Vec<bool>, ) -> Result<Inertia, DenseError>
In-place P A Pᵀ = L B Lᵀ with 1×1/2×2 pivots (Bunch–Kaufman,
Algorithm B); returns the inertia and writes the permutation into
perm and the 2×2 marks into pivot_2x2 (both resized to n).
Sourcefn trsm_lower(&self, l: &DenseBlock<T>, b: &mut DenseBlock<T>, transpose: bool)
fn trsm_lower(&self, l: &DenseBlock<T>, b: &mut DenseBlock<T>, transpose: bool)
B ← B L⁻ᵀ (transpose = true) or B ← L⁻¹ B (false), L
square, non-unit lower triangular.
§Panics
If the dimensions do not agree.
Sourcefn gemm_sub(&self, a: &DenseBlock<T>, b: &DenseBlock<T>, c: &mut DenseBlock<T>)
fn gemm_sub(&self, a: &DenseBlock<T>, b: &DenseBlock<T>, c: &mut DenseBlock<T>)
Sourcefn syrk_sub(&self, a: &DenseBlock<T>, c: &mut DenseBlock<T>)
fn syrk_sub(&self, a: &DenseBlock<T>, c: &mut DenseBlock<T>)
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".