Ipopt  3.12.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IpMumpsSolverInterface.hpp
Go to the documentation of this file.
1 // Copyright (C) 2006, 2007 Damien Hocking, KBC Advanced Technologies
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors: Damien Hocking KBC 2006-03-20
6 // (included his original contribution into Ipopt package on 2006-03-25)
7 // Andreas Waechter IBM 2006-03-25
8 // (minor changes and corrections)
9 // Scott Turnberg CMU 2006-05-12
10 // (major revision)
11 // (incorporated by AW on 2006-11-11 into Ipopt package)
12 
13 
14 #ifndef __IPMUMPSSOLVERINTERFACE_HPP__
15 #define __IPMUMPSSOLVERINTERFACE_HPP__
16 
18 
19 namespace Ipopt
20 {
21 
27  {
28  public:
33 
35  virtual ~MumpsSolverInterface();
37 
39  bool InitializeImpl(const OptionsList& options,
40  const std::string& prefix);
41 
49  virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
50  const Index *airn,
51  const Index *ajcn);
52 
58  virtual double* GetValuesArrayPtr();
59 
63  virtual ESymSolverStatus MultiSolve(bool new_matrix,
64  const Index* airn,
65  const Index* ajcn,
66  Index nrhs,
67  double* rhs_vals,
68  bool check_NegEVals,
69  Index numberOfNegEVals);
70 
77  virtual Index NumberOfNegEVals() const;
79 
80  //* @name Options of Linear solver */
82 
87  virtual bool IncreaseQuality();
88 
92  virtual bool ProvidesInertia() const
93  {
94  return true;
95  }
100  {
101  return Triplet_Format;
102  }
104 
107  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
109 
112  virtual bool ProvidesDegeneracyDetection() const;
113 
117  const Index* ja,
118  std::list<Index>& c_deps);
119 
120  private:
131 
133  void operator=(const MumpsSolverInterface&);
135 
139  void* mumps_ptr_;
141 
147 
164  static int instancecount_mpi;
166 
171 
174 
177 
180 
183 
186 
190 
195 
199 
206 
211  ESymSolverStatus Factorization(bool check_NegEVals,
212  Index numberOfNegEVals);
213 
216  ESymSolverStatus Solve(Index nrhs, double *rhs_vals);
218  };
219 
220 } // namespace Ipopt
221 #endif
ESymSolverStatus Factorization(bool check_NegEVals, Index numberOfNegEVals)
Call MUMPS (job=2) to factorize the Matrix.
ESymSolverStatus
Enum to report outcome of a linear solve.
virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, const Index *airn, const Index *ajcn)
Method for initializing internal stuctures.
Base class for interfaces to symmetric indefinite linear solvers for sparse matrices.
virtual bool IncreaseQuality()
Request to increase quality of solution for next solve.
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
Index mumps_scaling_
Scaling in MUMPS.
ESymSolverStatus Solve(Index nrhs, double *rhs_vals)
Call MUMPS (job=3) to do the solve.
bool initialized_
Flag indicating if internal data is initialized.
virtual ESymSolverStatus DetermineDependentRows(const Index *ia, const Index *ja, std::list< Index > &c_deps)
This method determines the list of row indices of the linearly dependent rows.
virtual bool ProvidesDegeneracyDetection() const
Query whether the indices of linearly dependent rows/columns can be determined by this linear solver...
virtual ~MumpsSolverInterface()
Destructor.
Index mumps_pivot_order_
Pivot order in MUMPS.
Index negevals_
Number of negative eigenvalues.
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
This class stores a list of user set options.
MumpsSolverInterface()
Constructor.
Index mumps_permuting_scaling_
Permution and scaling method in MUMPS.
void * mumps_ptr_
Primary MUMP data structure.
Number pivtolmax_
Maximal pivot tolerance.
bool have_symbolic_factorization_
Flag indicating if symbolic factorization has already been called.
bool warm_start_same_structure_
Flag indicating whether the TNLP with identical structure has already been solved before...
Number mumps_dep_tol_
Threshold in MUMPS to stay that a constraint is linearly dependent.
EMatrixFormat MatrixFormat() const
Query of requested matrix type that the linear solver understands.
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
overloaded from AlgorithmStrategyObject
virtual Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
Index mem_percent_
Percent increase in memory.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
EMatrixFormat
Enum to specify sparse matrix format.
static int instancecount_mpi
Counter on number of alive Mumps interface objects, if we have called MPI_Initialize.
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for IpoptType.
virtual bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
virtual double * GetValuesArrayPtr()
Method returing an internal array into which the nonzero elements (in the same order as airn and ajcn...
bool refactorize_
Flag that is true if we just requested the values of the matrix again (SYMSOLVER_CALL_AGAIN) and have...
ESymSolverStatus SymbolicFactorization()
Call MUMPS (job=1) to perform symbolic manipulations, and reserve memory.
void operator=(const MumpsSolverInterface &)
Overloaded Equals Operator.
virtual ESymSolverStatus MultiSolve(bool new_matrix, const Index *airn, const Index *ajcn, Index nrhs, double *rhs_vals, bool check_NegEVals, Index numberOfNegEVals)
Solve operation for multiple right hand sides.
bool pivtol_changed_
Flag indicating if the matrix has to be refactorized because the pivot tolerance has been changed...
Interface to the linear solver Mumps, derived from SparseSymLinearSolverInterface.