pounce-linsol
Symmetric linear-solver trait layer for POUNCE. Port of Ipopt's
Algorithm/LinearSolvers/. Defines the contracts that concrete
backends (FERAL, MA57, future MUMPS) implement; contains no FFI of its
own.
The two-level trait stack
| Trait | Operates on | Mirrors |
|---|---|---|
SymLinearSolver |
SymMatrix (compound) |
IpSymLinearSolver.hpp |
SparseSymLinearSolverInterface |
triplet/CSC slices | IpSparseSymLinearSolverInterface.hpp |
The wrapper TSymLinearSolver (port of IpTSymLinearSolver.{hpp,cpp})
adapts the second to the first, handling the triplet-to-CSR conversion
and scaling pipeline so backends only have to implement the low-level
trait.
Return states live in ESymSolverStatus (Success, Singular,
WrongInertia, CallAgain, FatalError). The CallAgain /
pivtol_changed protocol is preserved verbatim from MA57 because the
IPM's PdFullSpaceSolver depends on it.
Where backends live
pounce-feral— pure-Rust FERAL backend (default). No external dependencies.pounce-hsl— MA57 vialibcoinhsl(optional, behind thema57feature onpounce-cli/pounce-algorithm).- MUMPS — slotted for v1.1.
Scaling
TSymScalingMethod is the scaling-strategy trait (port of
IpTSymScalingMethod.hpp). Three implementations ship:
IdentityScalingMethod— null scaling, the default.RuizTSymScalingMethod(this crate) — symmetric Ruiz ∞-norm equilibration. Pure Rust. Selected bylinear_system_scaling = ruiz.Mc19TSymScalingMethod(inpounce-hsl) — HSL MC19 (Curtis-Reid) vialibcoinhsl. Selected bylinear_system_scaling = mc19.
License
EPL-2.0.