pounce-hsl 0.6.0

HSL linear-solver backend for POUNCE: MA57 via libcoinhsl.dylib (port of Ipopt's IpMa57TSolverInterface). Implements pounce-linsol's SparseSymLinearSolverInterface.
Documentation

pounce-hsl

HSL MA57 backend for POUNCE. Port of Ipopt's IpMa57TSolverInterface.{hpp,cpp}. Implements SparseSymLinearSolverInterface by linking against libcoinhsl at runtime.

Off by default. Enable with --features ma57 on pounce-cli or pounce-algorithm; the option linear_solver = ma57 then resolves to this backend instead of falling back to FERAL.

Prerequisites

  1. A CoinHSL install — build from HSL for IPOPT or use a precompiled drop. Its lib/ must contain libcoinhsl.{dylib,a}.

  2. Set COINHSL_DIR to that install when building with --features ma57:

    COINHSL_DIR=/path/to/CoinHSL cargo build -p pounce-cli --release --features ma57
    

build.rs reads COINHSL_DIR, adds its lib/ to the link search path, and embeds an -rpath so libcoinhsl and its transitive dependencies (libopenblas, libmetis, libgfortran, libgomp) resolve at runtime. That -rpath covers pounce-hsl's own test and bench binaries only; to run a downstream binary such as the pounce CLI, also put libcoinhsl's lib/ on DYLD_LIBRARY_PATH (macOS) or LD_LIBRARY_PATH (Linux). The links = "coinhsl" declaration in Cargo.toml prevents accidental double-link.

Why MA57?

MA57 is the canonical sparse symmetric indefinite Bunch-Kaufman factorization used by Ipopt for its KKT solves. It handles the indefiniteness inherent to the augmented system, reports inertia, and supports the increase_quality / pivtol escalation that the IPM needs when the system is nearly singular. FERAL provides the same contract in pure Rust; MA57 is generally faster on large problems.

License

EPL-2.0 for the wrapper. The HSL routines themselves are governed by their own HSL license; this crate does not bundle them.