10#ifndef __IPMA77SOLVERINTERFACE_HPP__
11#define __IPMA77SOLVERINTERFACE_HPP__
28#define IPOPT_DECL_MA77_DEFAULT_CONTROL(x) void (x)( \
29 struct ma77_control* control \
33#define IPOPT_DECL_MA77_OPEN_NELT(x) void (x)( \
40 const struct ma77_control* control,\
41 struct ma77_info* info, \
46#define IPOPT_DECL_MA77_OPEN(x) void (x)( \
53 const struct ma77_control* control,\
54 struct ma77_info* info \
58#define IPOPT_DECL_MA77_INPUT_VARS(x) void (x)( \
63 const struct ma77_control* control,\
64 struct ma77_info* info \
68#define IPOPT_DECL_MA77_INPUT_REALS(x) void (x)( \
71 const ipnumber reals[],\
73 const struct ma77_control* control,\
74 struct ma77_info* info \
78#define IPOPT_DECL_MA77_ANALYSE(x) void (x)( \
81 const struct ma77_control* control, \
82 struct ma77_info* info \
86#define IPOPT_DECL_MA77_FACTOR(x) void (x)( \
89 const struct ma77_control* control,\
90 struct ma77_info* info, \
91 const ipnumber* scale \
95#define IPOPT_DECL_MA77_FACTOR_SOLVE(x) void (x)( \
98 const struct ma77_control* control,\
99 struct ma77_info* info, \
100 const ipnumber* scale, \
107#define IPOPT_DECL_MA77_SOLVE(x) void (x)( \
113 const struct ma77_control* control,\
114 struct ma77_info* info, \
115 const ipnumber* scale \
119#define IPOPT_DECL_MA77_RESID(x) void (x)( \
122 const ipnumber xx[], \
126 const struct ma77_control* control, \
127 struct ma77_info* info, \
132#define IPOPT_DECL_MA77_SCALE(x) void (x)( \
135 const struct ma77_control* control, \
136 struct ma77_info* info, \
141#define IPOPT_DECL_MA77_ENQUIRE_POSDEF(x) void (x)( \
144 const struct ma77_control* control,\
145 struct ma77_info* info \
149#define IPOPT_DECL_MA77_ENQUIRE_INDEF(x) void (x)( \
153 const struct ma77_control* control, \
154 struct ma77_info* info \
158#define IPOPT_DECL_MA77_ALTER(x) void (x)( \
159 const ipnumber d[], \
161 const struct ma77_control* control, \
162 struct ma77_info* info \
166#define IPOPT_DECL_MA77_RESTART(x) void (x)( \
167 const char* restart_file, \
168 const char* fname1, \
169 const char* fname2, \
170 const char* fname3, \
171 const char* fname4, \
173 const struct ma77_control* control, \
174 struct ma77_info* info \
178#define IPOPT_DECL_MA77_FINALISE(x) void (x)( \
180 const struct ma77_control* control,\
181 struct ma77_info* info \
185#define IPOPT_DECL_MC68_DEFAULT_CONTROL(x) void (x)( \
186 struct mc68_control* control \
190#define IPOPT_DECL_MC68_ORDER(x) void (x)( \
196 const struct mc68_control* control,\
197 struct mc68_info* info \
307 const std::string& prefix
331 Index numberOfNegEVals
#define IPOPT_DECL_MC68_ORDER(x)
#define IPOPT_DECL_MA77_ANALYSE(x)
#define IPOPT_DECL_MC68_DEFAULT_CONTROL(x)
#define IPOPT_DECL_MA77_RESID(x)
#define IPOPT_DECL_MA77_INPUT_REALS(x)
#define IPOPT_DECL_MA77_RESTART(x)
#define IPOPT_DECL_MA77_FACTOR_SOLVE(x)
#define IPOPT_DECL_MA77_ENQUIRE_INDEF(x)
#define IPOPT_DECL_MA77_ALTER(x)
#define IPOPT_DECL_MA77_DEFAULT_CONTROL(x)
#define IPOPT_DECL_MA77_INPUT_VARS(x)
#define IPOPT_DECL_MA77_SOLVE(x)
#define IPOPT_DECL_MA77_FINALISE(x)
#define IPOPT_DECL_MA77_SCALE(x)
#define IPOPT_DECL_MA77_ENQUIRE_POSDEF(x)
#define IPOPT_DECL_MA77_FACTOR(x)
#define IPOPT_DECL_MA77_OPEN(x)
#define IPOPT_DECL_MA77_OPEN_NELT(x)
IPOPT_DECL_MA77_DEFAULT_CONTROL * ma77_default_control
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_MA77_INPUT_VARS * ma77_input_vars
IPOPT_DECL_MA77_SOLVE * ma77_solve
IPOPT_DECL_MA77_FINALISE * ma77_finalise
static void SetFunctions(IPOPT_DECL_MA77_DEFAULT_CONTROL(*ma77_default_control), IPOPT_DECL_MA77_OPEN_NELT(*ma77_open_nelt), IPOPT_DECL_MA77_OPEN(*ma77_open), IPOPT_DECL_MA77_INPUT_VARS(*ma77_input_vars), IPOPT_DECL_MA77_INPUT_REALS(*ma77_input_reals), IPOPT_DECL_MA77_ANALYSE(*ma77_analyse), IPOPT_DECL_MA77_FACTOR(*ma77_factor), IPOPT_DECL_MA77_FACTOR_SOLVE(*ma77_factor_solve), IPOPT_DECL_MA77_SOLVE(*ma77_solve), IPOPT_DECL_MA77_RESID(*ma77_resid), IPOPT_DECL_MA77_SCALE(*ma77_scale), IPOPT_DECL_MA77_ENQUIRE_POSDEF(*ma77_enquire_posdef), IPOPT_DECL_MA77_ENQUIRE_INDEF(*ma77_enquire_indef), IPOPT_DECL_MA77_ALTER(*ma77_alter), IPOPT_DECL_MA77_RESTART(*ma77_restart), IPOPT_DECL_MA77_FINALISE(*ma77_finalise), IPOPT_DECL_MC68_DEFAULT_CONTROL(*mc68_default_control),)
set MA77 and MC68 functions to use for every instantiation of this class
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.
ESymSolverStatus DetermineDependentRows(const Index *, const Index *, std::list< Index > &)
This method determines the list of row indices of the linearly dependent rows.
bool pivtol_changed_
indicates if pivtol has been changed
struct ma77_control control_
EMatrixFormat MatrixFormat() const
Query of requested matrix type that the linear solver understands.
Number * val_
Storage for variables.
IPOPT_DECL_MA77_FACTOR * ma77_factor
Ma77SolverInterface(SmartPtr< LibraryLoader > hslloader_)
IPOPT_DECL_MA77_FACTOR_SOLVE * ma77_factor_solve
void * keep_
Stores pointer to factors (only understood by Fortran code!)
IPOPT_DECL_MC68_DEFAULT_CONTROL * mc68_default_control
IPOPT_DECL_MA77_ENQUIRE_POSDEF * ma77_enquire_posdef
IPOPT_DECL_MA77_RESTART * ma77_restart
IPOPT_DECL_MA77_ALTER * ma77_alter
bool ProvidesDegeneracyDetection() const
Query whether the indices of linearly dependent rows/columns can be determined by this linear solver.
IPOPT_DECL_MA77_OPEN_NELT * ma77_open_nelt
IPOPT_DECL_MA77_SCALE * ma77_scale
IPOPT_DECL_MA77_ANALYSE * ma77_analyse
IPOPT_DECL_MA77_OPEN * ma77_open
ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, const Index *ia, const Index *ja)
Method for initializing internal structures.
bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
IPOPT_DECL_MA77_RESID * ma77_resid
SmartPtr< LibraryLoader > hslloader
Number * GetValuesArrayPtr()
Method returning an internal array into which the nonzero elements (in the same order as ja) will be ...
Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
int numneg_
Number of negative pivots in last factorization.
IPOPT_DECL_MC68_ORDER * mc68_order
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
bool IncreaseQuality()
Request to increase quality of solution for next solve.
IPOPT_DECL_MA77_INPUT_REALS * ma77_input_reals
IPOPT_DECL_MA77_ENQUIRE_INDEF * ma77_enquire_indef
int ndim_
Number of dimensions.
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_Full_Format_1_Offset
Compressed sparse row format for both lower and upper parts, 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.