11#ifndef __IPMA97SOLVERINTERFACE_HPP__
12#define __IPMA97SOLVERINTERFACE_HPP__
28#define IPOPT_DECL_MA97_DEFAULT_CONTROL(x) void (x)( \
29 struct ma97_control* control \
33#define IPOPT_DECL_MA97_ANALYSE(x) void (x)( \
40 const struct ma97_control* control,\
41 struct ma97_info* info, \
46#define IPOPT_DECL_MA97_FACTOR(x) void (x)( \
50 const ipnumber val[], \
53 const struct ma97_control* control, \
54 struct ma97_info* info, \
59#define IPOPT_DECL_MA97_FACTOR_SOLVE(x) void (x)( \
63 const ipnumber val[], \
69 const struct ma97_control* control, \
70 struct ma97_info* info, \
75#define IPOPT_DECL_MA97_SOLVE(x) void (x)( \
82 const struct ma97_control* control, \
83 struct ma97_info* info \
87#define IPOPT_DECL_MA97_FINALISE(x) void (x)( \
93#define IPOPT_DECL_MA97_FREE_AKEEP(x) void (x)( \
205 const std::string& prefix
229 Index numberOfNegEVals
273 const std::string& name
#define IPOPT_DECL_MA97_FREE_AKEEP(x)
#define IPOPT_DECL_MA97_FINALISE(x)
#define IPOPT_DECL_MA97_SOLVE(x)
#define IPOPT_DECL_MA97_DEFAULT_CONTROL(x)
#define IPOPT_DECL_MA97_FACTOR_SOLVE(x)
#define IPOPT_DECL_MA97_ANALYSE(x)
#define IPOPT_DECL_MA97_FACTOR(x)
IPOPT_DECL_MA97_FACTOR_SOLVE * ma97_factor_solve
void * fkeep_
Stores pointer to factors (only understood Fortran code!)
static void SetFunctions(IPOPT_DECL_MA97_DEFAULT_CONTROL(*ma97_default_control), IPOPT_DECL_MA97_ANALYSE(*ma97_analyse), IPOPT_DECL_MA97_FACTOR(*ma97_factor), IPOPT_DECL_MA97_FACTOR_SOLVE(*ma97_factor_solve), IPOPT_DECL_MA97_SOLVE(*ma97_solve), IPOPT_DECL_MA97_FINALISE(*ma97_finalise),)
set MA97 functions to use for every instantiation of this class
Number * scaling_
Store scaling for reuse if doing dynamic scaling.
bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
void * akeep_
Stores pointer to factors (only understood Fortran code!)
Number * GetValuesArrayPtr()
Method returning an internal array into which the nonzero elements (in the same order as ja) will be ...
IPOPT_DECL_MA97_FINALISE * ma97_finalise
ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, const Index *ia, const Index *ja)
Method for initializing internal structures.
ESymSolverStatus MultiSolve(bool new_matrix, const Index *ia, const Index *ja, Index nrhs, Number *rhs_vals, bool check_NegEVals, Index numberOfNegEVals)
Solve operation for multiple right hand sides.
IPOPT_DECL_MA97_SOLVE * ma97_solve
enum scale_opts switch_[3]
IPOPT_DECL_MA97_ANALYSE * ma97_analyse
bool IncreaseQuality()
Request to increase quality of solution for next solve.
int numneg_
Number of negative pivots in last factorization.
Ma97SolverInterface(SmartPtr< LibraryLoader > hslloader_)
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
int ndim_
Number of dimensions.
static int ScaleNameToNum(const std::string &name)
converts a scaling option name to its ma97 option number
IPOPT_DECL_MA97_FREE_AKEEP * ma97_free_akeep
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
Implementation of the initialization method that has to be overloaded by for each derived class.
IPOPT_DECL_MA97_FACTOR * ma97_factor
bool rescale_
Indicates if we should rescale next factorization.
ESymSolverStatus DetermineDependentRows(const Index *, const Index *, std::list< Index > &)
This method determines the list of row indices of the linearly dependent rows.
int fctidx_
Current factorization number to dump to.
int numdelay_
Number of delayed pivots last time we scaled.
bool ProvidesDegeneracyDetection() const
Query whether the indices of linearly dependent rows/columns can be determined by this linear solver.
Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
SmartPtr< LibraryLoader > hslloader
EMatrixFormat MatrixFormat() const
Query of requested matrix type that the linear solver understands.
bool pivtol_changed_
indicates if pivtol has been changed
struct ma97_control control_
Number * val_
Storage for variables.
IPOPT_DECL_MA97_DEFAULT_CONTROL * ma97_default_control
This class stores a list of user set options.
Template class for Smart Pointers.
Base class for interfaces to symmetric indefinite linear solvers for sparse matrices.
EMatrixFormat
Enum to specify sparse matrix format.
@ CSR_Format_1_Offset
Compressed sparse row format for upper triangular part, with 1 offset.
This file contains a base class for all exceptions and a set of macros to help with exceptions.
ESymSolverStatus
Enum to report outcome of a linear solve.
@ SYMSOLVER_FATAL_ERROR
Unrecoverable error in linear solver occurred.
ipindex Index
Type of all indices of vectors, matrices etc.
ipnumber Number
Type of all numbers.