kryst 3.2.1

Krylov subspace and preconditioned iterative solvers for dense and sparse linear systems, with shared and distributed memory parallelism.
use crate::algebra::prelude::*;
use crate::matrix::sparse::CsrMatrix;
use crate::preconditioner::amg::coarsen::{
    AggAlgo, AggOpts, build_aggregates, lift_node_aggregates_to_dofs,
};
use crate::preconditioner::amg::strength_nodal::strength_nodal;
use crate::preconditioner::amg::util::DofLayout;

#[test]
fn nodal_aggregates_group_dofs() {
    // 4 DOFs, block_size=2 -> 2 nodes
    let a = CsrMatrix::identity(4);
    let layout = DofLayout::new(4, 2);
    let zero = R::default();
    let s = strength_nodal(&a, &layout, zero, true);
    let (agg_node, is_c_node) = build_aggregates(
        &s,
        AggAlgo::RSGreedy,
        &AggOpts {
            mis_k: 1,
            cap_per_row: None,
        },
    );
    let (agg, is_c) = lift_node_aggregates_to_dofs(&agg_node, &is_c_node, &layout);
    assert_eq!(agg, vec![0, 0, 1, 1]);
    assert_eq!(is_c, vec![true, true, true, true]);
}