Ipopt  3.11.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IpWsmpSolverInterface.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, 2010 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpWsmpSolverInterface.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2005-03-17
8 
9 
10 #ifndef __IPWSMPSOLVERINTERFACE_HPP__
11 #define __IPWSMPSOLVERINTERFACE_HPP__
12 
14 
15 //#define PARDISO_MATCHING_PREPROCESS
16 
17 namespace Ipopt
18 {
19 
25  {
26  public:
31 
33  virtual ~WsmpSolverInterface();
35 
37  bool InitializeImpl(const OptionsList& options,
38  const std::string& prefix);
39 
40 
44  virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
45  const Index *ia,
46  const Index *ja);
47 
50  virtual double* GetValuesArrayPtr();
51 
53  virtual ESymSolverStatus MultiSolve(bool new_matrix,
54  const Index* ia,
55  const Index* ja,
56  Index nrhs,
57  double* rhs_vals,
58  bool check_NegEVals,
59  Index numberOfNegEVals);
60 
64  virtual Index NumberOfNegEVals() const;
66 
67  //* @name Options of Linear solver */
69 
71  virtual bool IncreaseQuality();
72 
76  virtual bool ProvidesInertia() const
77  {
78  return true;
79  }
84  {
85  return CSR_Format_1_Offset;
86  }
88 
91  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
93 
96  virtual bool ProvidesDegeneracyDetection() const;
97 
101  const Index* ja,
102  std::list<Index>& c_deps);
103 
104  private:
115 
117  void operator=(const WsmpSolverInterface&);
119 
124 
127 
129  double* a_;
130 
131 #ifdef PARDISO_MATCHING_PREPROCESS
132 
135  ipfint* ia2;
136  ipfint* ja2;
137  double* a2_;
138  ipfint* perm2;
139  double* scale2;
141 
142 #endif
143 
145 
168 
171 
177 
197 
203  double* DPARM_;
211 
216  ESymSolverStatus SymbolicFactorization(const Index* ia, const Index* ja);
217 
219  ESymSolverStatus InternalSymFact(const Index* ia, const Index* ja,
220  Index numberOfNegEVals);
221 
225  const Index* ja,
226  bool check_NegEVals,
227  Index numberOfNegEVals);
228 
231  ESymSolverStatus Solve(const Index* ia,
232  const Index* ja,
233  Index nrhs,
234  double *rhs_vals);
236  };
237 
238 } // namespace Ipopt
239 #endif