Ipopt  3.12.12
 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
Index dim_
Number of rows and columns of the matrix.
virtual double * GetValuesArrayPtr()
Method returing an internal array into which the nonzero elements are to be stored.
ESymSolverStatus
Enum to report outcome of a linear solve.
Index matrix_file_number_
Counter for matrix file numbers.
virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, const Index *ia, const Index *ja)
Method for initializing internal stuctures.
FORTRAN_INTEGER_TYPE ipfint
Definition: IpTypes.hpp:26
Base class for interfaces to symmetric indefinite linear solvers for sparse matrices.
Index negevals_
Number of negative eigenvalues.
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.
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
bool wsmp_no_pivoting_
Flag indicating whether the positive definite version of WSMP should be used.
virtual bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
overloaded from AlgorithmStrategyObject
ESymSolverStatus InternalSymFact(const Index *ia, const Index *ja, Index numberOfNegEVals)
Call Wsmp to really do the analysis phase.
WsmpSolverInterface()
Constructor.
bool skip_inertia_check_
Flag indicating if the interia is always assumed to be correct.
Index factorizations_since_recomputed_ordering_
Counter indicating how many factorizations have been done sine the last recomputation of the ordering...
Compressed sparse row format for lower triangular part, with 1 offset.
bool pivtol_changed_
Flag indicating if the matrix has to be refactorized because the pivot tolerance has been changed...
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
virtual ESymSolverStatus MultiSolve(bool new_matrix, const Index *ia, const Index *ja, Index nrhs, double *rhs_vals, bool check_NegEVals, Index numberOfNegEVals)
Solve operation for multiple right hand sides.
This class stores a list of user set options.
virtual ~WsmpSolverInterface()
Destructor.
ESymSolverStatus SymbolicFactorization(const Index *ia, const Index *ja)
Call Wsmp to do the analysis phase.
virtual bool ProvidesDegeneracyDetection() const
Query whether the indices of linearly dependent rows/columns can be determined by this linear solver...
Index wsmp_num_threads_
Option that controls the matching strategy.
Number wsmp_pivtol_
Pivol tolerance.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
EMatrixFormat MatrixFormat() const
Query of requested matrix type that the linear solver understands.
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for IpoptType.
double * DPARM_
Double precision parameter array for WSSMP.
bool printed_num_threads_
Flag indicating if we already printed how many threads are used by WSMP.
virtual Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
EMatrixFormat
Enum to specify sparse matrix format.
virtual bool IncreaseQuality()
Request to increase quality of solution for next solve.
ipfint * MRP_
WSSMP&#39;s internal MRP array.
Index wsmp_scaling_
Indicating which of WSMP&#39;s scaling methods should be used.
ESymSolverStatus Factorization(const Index *ia, const Index *ja, bool check_NegEVals, Index numberOfNegEVals)
Call Wsmp to factorize the Matrix.
Number wsmp_singularity_threshold_
WSMP&#39;s singularity threshold.
Interface to the linear solver Wsmp, derived from SparseSymLinearSolverInterface. ...
void operator=(const WsmpSolverInterface &)
Overloaded Equals Operator.
bool have_symbolic_factorization_
Flag indicating whether symbolic factorization and order has already been performed.
ipfint * IPARM_
Integer parameter array for WSSMP.
Index nonzeros_
Number of nonzeros of the matrix in triplet representation.
Index wsmp_write_matrix_iteration_
iteration number in which matrices are to be written out
ESymSolverStatus Solve(const Index *ia, const Index *ja, Index nrhs, double *rhs_vals)
Call Wsmpx to do the Solve.
ipfint * INVP_
WSSMP&#39;s inverse permutation vector.
ipfint * PERM_
WSSMP&#39;s permutation vector.
Number wsmp_pivtolmax_
Maximal pivot tolerance.
double * a_
Array for storing the values of the matrix.