pub struct StdAugSystemSolver { /* private fields */ }Expand description
Standard augmented-system solver.
Implementations§
Source§impl StdAugSystemSolver
impl StdAugSystemSolver
Sourcepub fn new(linsol: TSymLinearSolver) -> Self
pub fn new(linsol: TSymLinearSolver) -> Self
Build a solver around a configured TSymLinearSolver.
Trait Implementations§
Source§impl AugSystemSolver for StdAugSystemSolver
impl AugSystemSolver for StdAugSystemSolver
Source§fn provides_inertia(&self) -> bool
fn provides_inertia(&self) -> bool
Whether the underlying linear solver reports inertia.
Source§fn number_of_neg_evals(&self) -> Index
fn number_of_neg_evals(&self) -> Index
Number of negative eigenvalues observed in the most recent
factorization. Caller checks
provides_inertia() first.Source§fn increase_quality(&mut self) -> bool
fn increase_quality(&mut self) -> bool
Ask the underlying solver for higher-quality pivoting.
Source§fn last_solve_status(&self) -> ESymSolverStatus
fn last_solve_status(&self) -> ESymSolverStatus
Status of the most recent
solve call.Source§fn solve(
&mut self,
coeffs: &AugSysCoeffs<'_>,
rhs: &AugSysRhs<'_>,
sol: &mut AugSysSol<'_>,
check_neg_evals: bool,
num_neg_evals: Index,
) -> ESymSolverStatus
fn solve( &mut self, coeffs: &AugSysCoeffs<'_>, rhs: &AugSysRhs<'_>, sol: &mut AugSysSol<'_>, check_neg_evals: bool, num_neg_evals: Index, ) -> ESymSolverStatus
One factor + back-substitution for the full 4×4 block system.
check_neg_evals=true asks the linsol to verify that the
observed inertia equals num_neg_evals; on mismatch the
status is WrongInertia and the solution is left untouched.Source§fn resolve(
&mut self,
coeffs: &AugSysCoeffs<'_>,
rhs: &AugSysRhs<'_>,
sol: &mut AugSysSol<'_>,
) -> ESymSolverStatus
fn resolve( &mut self, coeffs: &AugSysCoeffs<'_>, rhs: &AugSysRhs<'_>, sol: &mut AugSysSol<'_>, ) -> ESymSolverStatus
Back-substitution only, reusing the factorization from the most
recent successful
solve. Caller must guarantee the augmented
matrix is byte-identical to that solve (same W, J_c, J_d, all
diagonals, all perturbations, same pivot tolerance). Used by
PdFullSpaceSolver’s iterative-refinement loop and same-matrix
fast path to avoid the per-iter MA57BD refactor that dominates
pounce-ma57 wall time on long-iter problems (e.g. cont5_2_4_l
drops from 97s → ~30s once refactor-per-refinement is gone). Read moreSource§fn set_diagnostics(&mut self, diag: Rc<DiagnosticsState>)
fn set_diagnostics(&mut self, diag: Rc<DiagnosticsState>)
Install the shared per-solve diagnostics state so KKT-dump
sites can consult per-iter gating. Default impl is a no-op
(diagnostics disabled); the standard solver overrides to wire
in the dump path.
Source§fn set_timing_stats(&mut self, timing: Rc<TimingStatistics>)
fn set_timing_stats(&mut self, timing: Rc<TimingStatistics>)
Install the shared per-solve
TimingStatistics so the
linear-system factor/back-solve calls are attributed to
linear_system_factorization / linear_system_back_solve.
Default impl is a no-op (timing disabled); the standard
solver overrides to record both fields, and composite solvers
(LowRank) forward to their inner solver.Source§fn try_resolve_many_flat(
&mut self,
_coeffs: &AugSysCoeffs<'_>,
packed_rhs: &mut [Number],
nrhs: usize,
) -> Option<ESymSolverStatus>
fn try_resolve_many_flat( &mut self, _coeffs: &AugSysCoeffs<'_>, packed_rhs: &mut [Number], nrhs: usize, ) -> Option<ESymSolverStatus>
Back-substitution only against the cached factor for
nrhs right-hand sides, packed in column-major layout in
packed_rhs. Each column has length dim = n_x + n_s + n_y_c + n_y_d (the aug-system dim — z/v blocks are not part of this
path; callers expand them via expand_bound_multipliers after
the fact). Solutions overwrite packed_rhs in place. Read moreSource§fn multi_solve(
&mut self,
coeffs: &AugSysCoeffs<'_>,
rhs_list: &[&AugSysRhs<'_>],
sol_list: &mut [&mut AugSysSol<'_>],
check_neg_evals: bool,
num_neg_evals: Index,
) -> ESymSolverStatus
fn multi_solve( &mut self, coeffs: &AugSysCoeffs<'_>, rhs_list: &[&AugSysRhs<'_>], sol_list: &mut [&mut AugSysSol<'_>], check_neg_evals: bool, num_neg_evals: Index, ) -> ESymSolverStatus
Solve the same KKT system for
nrhs right-hand sides. Default
impl loops [solve]; concrete backends override only when they
can amortize factorization across calls. Mirrors upstream’s
AugSystemSolver::MultiSolve (IpAugSystemSolver.hpp:113-150). Read moreAuto Trait Implementations§
impl Freeze for StdAugSystemSolver
impl !RefUnwindSafe for StdAugSystemSolver
impl !Send for StdAugSystemSolver
impl !Sync for StdAugSystemSolver
impl Unpin for StdAugSystemSolver
impl UnsafeUnpin for StdAugSystemSolver
impl !UnwindSafe for StdAugSystemSolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more