Expand description
Block-parallel augmented-system solver (structured-KKT Phase 5b).
Wraps StdAugSystemSolver — reusing its KKT assembly and RHS packing —
but routes the solve through a FeralBlockSolver over a caller-supplied
partition of the KKT indices into blocks plus a shared border. Every block
factorizes independently and in parallel; the border’s Schur complement
carries the coupling; inertia comes from Haynsworth additivity.
Why. An arrowhead KKT (scenarios, contingencies, or any blocks sharing
a few global columns) is already well ordered by a generic method, but its
factorization is per-supernode-overhead bound, so feral’s tree parallelism
reaches ~1.2×. As coarse block tasks the same factorization is ~10× faster
and a whole KKT solve ~4–6×. Measured in dev-notes/kkt-scaling-phase0b.md.
Fallback is first-class, as in crate::kkt::SchurAugSystemSolver:
a partition that does not match the matrix (an entry joining two blocks),
a singular block, or any backend error routes the rest of the solve through
the monolithic path, which regularizes the full system correctly. The
solve report’s linear_solver.blocks is present only when the block path
actually factored, so a silent fallback is visible.
Structs§
Constants§
- DEFAULT_
MIN_ BLOCK_ SIZE - Default for
BlockAugSystemSolver::with_min_block_size: the next power of two above the measured crossover (~250 columns per block), below which the block path is slower than the monolithic one. The numbers are indecide.
Functions§
- detect_
blocks - Find a block-diagonal-plus-border partition in an assembled KKT, or
None.