use rmumps::coo::CooMatrix;
use rmumps::solver::{Solver, SolverOptions};
fn main() {
let coo = CooMatrix::new(
3,
vec![0, 1, 2, 0, 1], vec![0, 1, 2, 1, 2], vec![4.0, 5.0, 6.0, 1.0, 2.0], )
.unwrap();
let mut solver = Solver::new(SolverOptions::default());
let inertia = solver.analyze_and_factor(&coo).unwrap();
println!("Inertia: {}", inertia);
assert_eq!(inertia.positive, 3);
let b = vec![1.0, 2.0, 3.0];
let mut x = vec![0.0; 3];
solver.solve(&b, &mut x).unwrap();
println!("Solution: {:?}", x);
let mut ax = vec![0.0; 3];
coo.matvec(&x, &mut ax).unwrap();
let residual: f64 = ax
.iter()
.zip(&b)
.map(|(a, b)| (a - b).abs())
.fold(0.0, f64::max);
println!("Max residual: {:.2e}", residual);
assert!(residual < 1e-14);
}