1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#![cfg(not(feature = "complex"))]
// #![cfg(feature = "complex")]
// mod support;
// use approx::assert_abs_diff_eq;
// use kryst::algebra::prelude::*;
// use kryst::context::ksp_context::Workspace;
// use kryst::parallel::{NoComm, UniverseComm};
// use kryst::preconditioner::PcSide;
// use kryst::solver::MinresSolver;
// use support::complex_dense::hermitian_pos_def_system;
// const SEED: u64 = 0x51D3_DEAD_u64;
// const SHIFT: f64 = 1.5;
// #[test]
// fn minres_solves_random_hpd_system() {
// let n = 7;
// let (op, x_true, b) = hermitian_pos_def_system(n, SEED, SHIFT);
// let comm = UniverseComm::NoComm(NoComm);
// let mut solver = MinresSolver::new(1e-10, 250);
// let mut work = Workspace::new(n);
// let mut x = vec![S::zero(); n];
// let _stats = solver
// .solve_k(
// &op,
// None,
// &b,
// &mut x,
// PcSide::Left,
// &comm,
// None,
// Some(&mut work),
// )
// .expect("MINRES solve");
// let err = op.residual_norm(&x, &b);
// assert!(err < 1e-9, "MINRES residual too large: {err:e}");
// for (approx, exact) in x.iter().zip(x_true.iter()) {
// assert_abs_diff_eq!(approx.real(), exact.real(), epsilon = 1e-7);
// assert_abs_diff_eq!(approx.imag(), exact.imag(), epsilon = 1e-7);
// }
// }