fn main() {
use pardiso_wrapper::*;
let n: i32 = 4; let m: i32 = 3;
let a = vec![1.0, -2.0, 3.0, 5.0, 1.0, 2.0, 4.0, -7.0, 5.0];
let ia = vec![1, 4, 7, 9, 10];
let ja = vec![1, 3, 4, 2, 3, 4, 3, 4, 4];
let mut b: Vec<f64> = (0..(n * m)).map(|x| x as f64).collect();
let mut x = vec![0.0; (n * m) as usize];
let mut ps = MKLPardisoSolver::new().unwrap();
ps.set_matrix_type(MatrixType::RealSymmetricIndefinite);
ps.pardisoinit().unwrap();
ps.set_message_level(MessageLevel::On);
ps.set_phase(Phase::Analysis);
ps.pardiso(&a, &ia, &ja, &mut [], &mut [], n, 1).unwrap();
ps.set_phase(Phase::NumFact);
ps.pardiso(&a, &ia, &ja, &mut b, &mut x, n, m).unwrap();
ps.set_phase(Phase::SolveIterativeRefine);
ps.pardiso(&a, &ia, &ja, &mut b, &mut x, n, m).unwrap();
ps.set_phase(Phase::ReleaseAll);
ps.pardiso(&a, &ia, &ja, &mut b, &mut x, n, m).unwrap();
}