kryst 3.2.1

Krylov subspace and preconditioned iterative solvers for dense and sparse linear systems, with shared and distributed memory parallelism.
use super::*;
use crate::matrix::DistCsrOp;
use crate::matrix::sparse::CsrMatrix;
use crate::parallel::{NoComm, UniverseComm};

#[test]
#[cfg(not(feature = "complex"))]
fn jacobi_setup_with_dist_csr_local_block() {
    let local = CsrMatrix::from_csr(2, 2, vec![0, 1, 2], vec![0, 1], vec![2.0, 4.0]);
    let part_prefix = vec![0, 2];
    let comm = UniverseComm::NoComm(NoComm);
    let dist = DistCsrOp::from_local_rows(2, 0, &local, &part_prefix, comm)
        .expect("dist csr");

    let mut pc = Jacobi::new();
    pc.setup(&dist).expect("jacobi setup");

    let rhs = [S::from_real(2.0), S::from_real(8.0)];
    let mut out = [S::zero(); 2];
    pc.apply(PcSide::Left, &rhs, &mut out)
        .expect("jacobi apply");

    assert!((out[0] - S::from_real(1.0)).abs() < 1e-12);
    assert!((out[1] - S::from_real(2.0)).abs() < 1e-12);
}