Base class for interfaces to symmetric indefinite linear solvers for generic matrices. More...
#include <IpGenKKTSolverInterface.hpp>
Public Member Functions  
virtual bool  InitializeImpl (const OptionsList &options, const std::string &prefix)=0 
Implementation of the initialization method that has to be overloaded by for each derived class.  
Constructor/Destructor  
GenKKTSolverInterface ()  
virtual  ~GenKKTSolverInterface () 
Methods for requesting solution of the linear system.  
virtual ESymSolverStatus  MultiSolve (bool new_matrix, Index n_x, Index n_c, Index n_d, SmartPtr< const SymMatrix > W, SmartPtr< const Matrix > Jac_c, SmartPtr< const Matrix > Jac_d, const Number *D_x, const Number *D_s, const Number *D_c, const Number *D_d, Number delta_x, Number delta_s, Number delta_c, Number delta_d, Index n_rhs, Number *rhssol, bool check_NegEVals, Index numberOfNegEVals)=0 
Solve operation for multiple right hand sides.  
virtual Index  NumberOfNegEVals () const =0 
Number of negative eigenvalues detected during last factorization.  
virtual bool  IncreaseQuality ()=0 
Request to increase quality of solution for next solve.  
virtual bool  ProvidesInertia () const =0 
Query whether inertia is computed by linear solver.  
Public Member Functions inherited from Ipopt::AlgorithmStrategyObject  
bool  Initialize (const Journalist &jnlst, IpoptNLP &ip_nlp, IpoptData &ip_data, IpoptCalculatedQuantities &ip_cq, const OptionsList &options, const std::string &prefix) 
This method is called every time the algorithm starts again  it is used to reset any internal state.  
bool  ReducedInitialize (const Journalist &jnlst, const OptionsList &options, const std::string &prefix) 
Reduced version of the Initialize method, which does not require special Ipopt information.  
AlgorithmStrategyObject ()  
Default Constructor.  
virtual  ~AlgorithmStrategyObject () 
Destructor.  
Public Member Functions inherited from Ipopt::ReferencedObject  
ReferencedObject ()  
virtual  ~ReferencedObject () 
Index  ReferenceCount () const 
void  AddRef (const Referencer *referencer) const 
void  ReleaseRef (const Referencer *referencer) const 
Additional Inherited Members  
Protected Member Functions inherited from Ipopt::AlgorithmStrategyObject  
const Journalist &  Jnlst () const 
IpoptNLP &  IpNLP () const 
IpoptData &  IpData () const 
IpoptCalculatedQuantities &  IpCq () const 
bool  HaveIpData () const 
Base class for interfaces to symmetric indefinite linear solvers for generic matrices.
Definition at line 18 of file IpGenKKTSolverInterface.hpp.

inline 
Definition at line 23 of file IpGenKKTSolverInterface.hpp.

inlinevirtual 
Definition at line 26 of file IpGenKKTSolverInterface.hpp.

pure virtual 
Implementation of the initialization method that has to be overloaded by for each derived class.
Implements Ipopt::AlgorithmStrategyObject.

pure virtual 
Solve operation for multiple right hand sides.
The linear system is of the form
\(\left[\begin{array}{cccc} W + D_x + \delta_xI & 0 & J_c^T & J_d^T\\ 0 & D_s + \delta_sI & 0 & I \\ J_c & 0 & D_c  \delta_cI & 0\\ J_d & I & 0 & D_d  \delta_dI \end{array}\right] \left(\begin{array}{c}sol_x\\sol_s\\sol_c\\sol_d\end{array}\right)= \left(\begin{array}{c}rhs_x\\rhs_s\\rhs_c\\rhs_d\end{array}\right)\)
(see also AugSystemSolver).
The return code is SYMSOLV_SUCCESS if the factorization and solves were successful, SYMSOLV_SINGULAR if the linear system is singular, and SYMSOLV_WRONG_INERTIA if check_NegEVals is true and the number of negative eigenvalues in the matrix does not match numberOfNegEVals. If SYMSOLV_CALL_AGAIN is returned, then the calling function will request the pointer for the array for storing a again (with GetValuesPtr), write the values of the nonzero elements into it, and call this MultiSolve method again with the same righthand sides. (This can be done, for example, if the linear solver realized it does not have sufficient memory and needs to redo the factorization; e.g., for MA27.)
The number of righthand sides is given by nrhs, the values of the righthand sides are given in rhs_vals (one full righthand side stored immediately after the other), and solutions are to be returned in the same array.
check_NegEVals will not be chosen true, if ProvidesInertia() returns false.
new_matrix  If this flag is false, the same matrix as in the most recent call is given to the solver again 
n_x  Dimension of D_x 
n_c  Dimension of D_s and D_c 
n_d  Dimension of D_d 
W  Hessian of Lagrangian (as given by NLP) 
Jac_c  Jacobian of equality constraints (as given by NLP) 
Jac_d  Jacobian of inequality constraints (as given by NLP) 
D_x  Array with the elements D_x (if NULL, assume all zero) 
D_s  Array with the elements D_s (if NULL, assume all zero) 
D_c  Array with the elements D_c (if NULL, assume all zero) 
D_d  Array with the elements D_d (if NULL, assume all zero) 
delta_x  \( \delta_x\) 
delta_s  \( \delta_s\) 
delta_c  \( \delta_c\) 
delta_d  \( \delta_d\) 
n_rhs  Number of right hand sides 
rhssol  On input, this contains the right hand sides, and on successful termination of the solver, the solutions are expected in there on return. At the moment, the order is x,d,c,s, but this can be made flexible and chosen according to an option. 
check_NegEVals  if true, we want to ensure that the inertia is correct 
numberOfNegEVals  Required number of negative eigenvalues if check_NegEVals is true 
Number of negative eigenvalues detected during last factorization.
This must not be called if the linear solver does not compute this quantities (see ProvidesInertia).
Request to increase quality of solution for next solve.
The calling class asks linear solver to increase quality of solution for the next solve (e.g. increase pivot tolerance).
Query whether inertia is computed by linear solver.