mod dense;
use ndarray::prelude::*;
use crate::traits::ModelSpec;
pub use dense::Dense;
pub trait LProblem<M>
where
M: ModelSpec,
{
fn setup<S1, S2, S3>(
&mut self,
y: ArrayBase<S1, Ix1>,
yp: ArrayBase<S2, Ix1>,
r: ArrayBase<S3, Ix1>,
) where
S1: ndarray::Data<Elem = M::Scalar>,
S2: ndarray::Data<Elem = M::Scalar>,
S3: ndarray::Data<Elem = M::Scalar>;
fn solve<S1, S2>(
&mut self,
b: ArrayBase<S1, Ix1>,
weight: ArrayBase<S2, Ix1>,
ycur: ArrayBase<S1, Ix1>,
ypcur: ArrayBase<S1, Ix1>,
rescur: ArrayBase<S1, Ix1>,
) where
S1: ndarray::Data<Elem = M::Scalar>,
S2: ndarray::Data<Elem = M::Scalar>;
}
#[derive(Debug)]
pub enum LSolverType {
Direct,
Iterative,
MatrixIterative,
}
pub trait LSolver<Scalar>
where
Scalar: num_traits::Zero,
{
fn new(size: usize) -> Self;
fn get_type(&self) -> LSolverType;
fn set_scaling_vectors<S1, S2>(&mut self, _s1: ArrayBase<S1, Ix1>, _s2: ArrayBase<S2, Ix1>)
where
S1: ndarray::Data<Elem = Scalar>,
S2: ndarray::Data<Elem = Scalar>,
{
}
fn setup<S1>(&mut self, mat_a: ArrayBase<S1, Ix2>) -> Result<(), failure::Error>
where
S1: ndarray::DataMut<Elem = Scalar>;
fn solve<S1, S2, S3>(
&self,
mat_a: ArrayBase<S1, Ix2>,
x: ArrayBase<S2, Ix1>,
b: ArrayBase<S3, Ix1>,
tol: Scalar,
) -> Result<(), failure::Error>
where
S1: ndarray::Data<Elem = Scalar>,
S2: ndarray::DataMut<Elem = Scalar>,
S3: ndarray::Data<Elem = Scalar>;
fn num_iters(&self) -> usize {
0
}
fn res_norm(&self) -> Scalar {
Scalar::zero()
}
}