Skip to main content

Module block_aug_system_solver

Module block_aug_system_solver 

Source
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§

BlockAugSystemSolver

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 in decide.

Functions§

detect_blocks
Find a block-diagonal-plus-border partition in an assembled KKT, or None.