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
Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
Number * GetValuesArrayPtr()
Method returning an internal array into which the nonzero elements (in the same order as ja) will be ...
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.