# Ipopt::GenKKTSolverInterface Class Reference

Base class for interfaces to symmetric indefinite linear solvers for generic matrices. More...

`#include <IpGenKKTSolverInterface.hpp>`

Inheritance diagram for Ipopt::GenKKTSolverInterface:
[legend]

List of all members.

## Public Member Functions
virtual bool | InitializeImpl (const OptionsList &options, const std::string &prefix)=0
| overloaded from AlgorithmStrategyObject
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.

## Detailed Description

Base class for interfaces to symmetric indefinite linear solvers for generic matrices.

Definition at line 20 of file IpGenKKTSolverInterface.hpp.

## Constructor & Destructor Documentation

Ipopt::GenKKTSolverInterface::GenKKTSolverInterface | ( |  | ) | `[inline]`

Definition at line 25 of file IpGenKKTSolverInterface.hpp.

virtual Ipopt::GenKKTSolverInterface::~GenKKTSolverInterface | ( |  | ) | `[inline, virtual]`

Definition at line 28 of file IpGenKKTSolverInterface.hpp.

## Member Function Documentation

virtual bool Ipopt::GenKKTSolverInterface::InitializeImpl | ( | const OptionsList & | options,
|  | const std::string & | prefix |
| ) |  |  | `[pure virtual]`

overloaded from AlgorithmStrategyObject

Implements Ipopt::AlgorithmStrategyObject.

virtual ESymSolverStatus Ipopt::GenKKTSolverInterface::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 |
| ) |  |  | `[pure virtual]`

Solve operation for multiple right hand sides.

The linear system is of the form

(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 right-hand 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 right-hand sides is given by nrhs, the values of the right-hand sides are given in rhs_vals (one full right-hand 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.

Parameters:

  | 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_s |
  | delta_c |
  | delta_d |
  | n_rhs | Number of right hand sides
  | rhssol | On input, this containts 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

virtual Index Ipopt::GenKKTSolverInterface::NumberOfNegEVals | ( |  | ) | const`[pure virtual]`

Number of negative eigenvalues detected during last factorization.

Returns the number of negative eigenvalues of the most recent factorized matrix. This must not be called if the linear solver does not compute this quantities (see ProvidesInertia).

virtual bool Ipopt::GenKKTSolverInterface::IncreaseQuality | ( |  | ) | `[pure virtual]`

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). Returns false, if this is not possible (e.g. maximal pivot tolerance already used.)

virtual bool Ipopt::GenKKTSolverInterface::ProvidesInertia | ( |  | ) | const`[pure virtual]`

Query whether inertia is computed by linear solver.

Returns true, if linear solver provides inertia.

The documentation for this class was generated from the following file:

- src/Algorithm/LinearSolvers/IpGenKKTSolverInterface.hpp

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines