Expand description
§rmumps
A pure Rust multifrontal sparse symmetric indefinite (LDL^T) solver.
rmumps factorizes sparse symmetric matrices using a multifrontal method with Bunch-Kaufman pivoting, providing inertia detection (counts of positive, negative, and zero eigenvalues in the D factor). It is designed for solving KKT systems arising in interior point methods for nonlinear optimization.
§Features
- Multifrontal factorization: organizes sparse LDL^T into dense operations on frontal matrices for better cache utilization than simplicial methods
- Bunch-Kaufman pivoting: 1x1 and 2x2 pivots for symmetric indefinite matrices
- Inertia detection: counts positive/negative/zero eigenvalues from D factor
- AMD ordering: approximate minimum degree fill-reducing permutation
- Supernodal elimination tree: groups columns into supernodes for efficiency
- Iterative refinement: configurable refinement steps for improved accuracy
- Cached symbolic analysis: analyze once, refactor with new values (same pattern)
- Parallel level-set factorization: independent supernodes factored via rayon
§Usage
use rmumps::coo::CooMatrix;
use rmumps::solver::{Solver, SolverOptions};
// Create a 3x3 symmetric positive definite matrix (upper triangle, COO format)
let coo = CooMatrix::new(3,
vec![0, 1, 2, 0, 1], // rows
vec![0, 1, 2, 1, 2], // cols (col >= row)
vec![4.0, 5.0, 6.0, 1.0, 2.0], // values
).unwrap();
let mut solver = Solver::new(SolverOptions::default());
let inertia = solver.analyze_and_factor(&coo).unwrap();
assert_eq!(inertia.positive, 3);
let rhs = vec![1.0, 2.0, 3.0];
let mut solution = vec![0.0; 3];
solver.solve(&rhs, &mut solution).unwrap();§Architecture
The solver follows a three-phase approach:
- Symbolic analysis (
symbolic.rs): computes elimination tree, supernodes, and frontal matrix structure from the sparsity pattern - Numeric factorization (
numeric.rs): assembles and partially factors frontal matrices bottom-up through the elimination tree - Solve (
solve.rs): forward/backward substitution through the supernodal factorization, with optional iterative refinement
Key modules:
coo: COO (triplet) sparse matrix formatcsc: CSC (compressed sparse column) format with COO conversionordering: fill-reducing orderings (AMD, natural)etree: elimination tree construction (Liu 1990)symbolic: supernodal symbolic factorizationfrontal: frontal matrix assembly and partial factorizationdense: column-major dense matrix with BLAS-like operationspivot: Bunch-Kaufman pivoting for dense symmetric indefinite matricesnumeric: multifrontal numeric factorization with inertia trackingsolve: triangular solve with iterative refinementsolver: high-level API combining all phases
Modules§
- coo
- Sparse symmetric matrix in COO (triplet) format.
- csc
- Sparse symmetric matrix in CSC (compressed sparse column) format.
- dense
- Column-major dense matrix with BLAS-like operations.
- etree
- Elimination tree construction from sparse matrix structure.
- frontal
- Frontal matrix assembly and partial factorization.
- incomplete
- Incomplete LDL^T factorization for preconditioning. Incomplete LDL^T factorization for preconditioning.
- minres
- MINRES iterative solver for symmetric systems. Preconditioned MINRES iterative solver for symmetric (possibly indefinite) systems.
- numeric
- Multifrontal numeric factorization with inertia tracking.
- ordering
- Fill-reducing orderings (AMD, natural).
- pivot
- Bunch-Kaufman pivoting for dense symmetric indefinite matrices.
- precond
- Preconditioner trait and basic implementations. Preconditioner trait and basic implementations for iterative solvers.
- scaling
- Matrix scaling (diagonal equilibration, Ruiz) for improved pivot quality.
- solve
- Triangular solve with iterative refinement.
- solver
- High-level solver API combining symbolic analysis, numeric factorization, and solve.
- symbolic
- Supernodal symbolic factorization from sparsity pattern.
Structs§
- Inertia
- Inertia of a symmetric matrix after LDL^T factorization. Counts the signs of diagonal entries in D.
Enums§
- Solver
Error - Error from the solver.