IpIterativePardisoSolverInterface.hpp
Go to the documentation of this file.
1 // Copyright (C) 2008 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpIterativePardisoSolverInterface.hpp 2073 2012-02-12 15:54:34Z stefan $
6 //
7 // Authors: Andreas Waechter IBM 2008-09-18
8 // based on IpPardisoSolverInterface.hpp rev 1119
9 
10 
11 #ifndef __IPITERATIVEPARDISOSOLVERINTERFACE_HPP__
12 #define __IPITERATIVEPARDISOSOLVERINTERFACE_HPP__
13 
15 #include "IpInexactCq.hpp"
17 
18 namespace Ipopt
19 {
20 
26  {
27  public:
33 
37 
39  bool InitializeImpl(const OptionsList& options,
40  const std::string& prefix);
41 
42 
46  virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros,
47  const Index *ia,
48  const Index *ja);
49 
52  virtual double* GetValuesArrayPtr();
53 
55  virtual ESymSolverStatus MultiSolve(bool new_matrix,
56  const Index* ia,
57  const Index* ja,
58  Index nrhs,
59  double* rhs_vals,
60  bool check_NegEVals,
61  Index numberOfNegEVals);
62 
66  virtual Index NumberOfNegEVals() const;
68 
69  //* @name Options of Linear solver */
71 
73  virtual bool IncreaseQuality();
74 
78  virtual bool ProvidesInertia() const
79  {
80  return true;
81  }
86  {
87  return CSR_Format_1_Offset;
88  }
90 
93  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
95 
96  private:
107 
110 
114 
119 
122 
124  double* a_;
126 
132 
137  {
141  };
160 
171 
181 
184 
192 
199 
203  void** PT_;
214  double* DPARM_;
218 
224 
230  const Index* ja);
231 
235  const Index* ja,
236  bool check_NegEVals,
237  Index numberOfNegEVals);
238 
241  ESymSolverStatus Solve(const Index* ia,
242  const Index* ja,
243  Index nrhs,
244  double *rhs_vals);
246 
249  {
250  InexactData& inexact_data =
251  static_cast<InexactData&>(IpData().AdditionalData());
252  DBG_ASSERT(dynamic_cast<InexactData*>(&IpData().AdditionalData()));
253  return inexact_data;
254  }
255 
258  {
259  InexactCq& inexact_cq =
260  static_cast<InexactCq&>(IpCq().AdditionalCq());
261  DBG_ASSERT(dynamic_cast<InexactCq*>(&IpCq().AdditionalCq()));
262  return inexact_cq;
263  }
264 
267 
270 
271  };
272 
273 } // namespace Ipopt
274 #endif