Ipopt Documentation  
 
Loading...
Searching...
No Matches
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// Authors: Carl Laird, Andreas Waechter IBM 2005-03-17
6
7#ifndef __IPWSMPSOLVERINTERFACE_HPP__
8#define __IPWSMPSOLVERINTERFACE_HPP__
9
11#include "IpPardisoSolverInterface.hpp" // for IPOPT_DECL_SMAT_REORDERING_PARDISO_WSMP
12#include "IpTypes.h"
13
14namespace Ipopt
15{
16
21{
22public:
25
27#ifdef PARDISO_MATCHING_PREPROCESS
28 SmartPtr<LibraryLoader> pardisoloader_
29#endif
30 );
31
35
37 const OptionsList& options,
38 const std::string& prefix
39 );
40
44 Index dim,
45 Index nonzeros,
46 const Index* ia,
47 const Index* ja
48 );
49
50 virtual double* GetValuesArrayPtr();
51
53 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 );
61
62 virtual Index NumberOfNegEVals() const;
64
65 //* @name Options of Linear solver */
67 virtual bool IncreaseQuality();
68
69 virtual bool ProvidesInertia() const
70 {
71 return true;
72 }
73
75 {
77 }
79
81 static void RegisterOptions(
83 );
84
86 static void GetVersion(
87 int& V,
88 int& R,
89 int& M
90 );
92
93 virtual bool ProvidesDegeneracyDetection() const;
94
96 const Index* ia,
97 const Index* ja,
98 std::list<Index>& c_deps
99 );
100
101private:
110
113 );
114
118 );
120
123
125
128
130 double* a_;
131
132#ifdef PARDISO_MATCHING_PREPROCESS
135 Index* ia2;
136 Index* ja2;
137 double* a2_;
138 Index* perm2;
139 double* scale2;
141#endif
142
144
147
167
170
173
176
179
200
203
206 double* DPARM_;
214
218#ifdef PARDISO_MATCHING_PREPROCESS
219 SmartPtr<LibraryLoader> pardisoloader;
220 IPOPT_DECL_SMAT_REORDERING_PARDISO_WSMP(*smat_reordering_pardiso_wsmp);
221#endif
226
228 const Index* ia,
229 const Index* ja
230 );
231
234 const Index* ia,
235 const Index* ja,
236 Index numberOfNegEVals
237 );
238
241 const Index* ia,
242 const Index* ja,
243 bool check_NegEVals,
244 Index numberOfNegEVals
245 );
246
249 const Index* ia,
250 const Index* ja,
251 Index nrhs,
252 double* rhs_vals
253 );
255};
256
257} // namespace Ipopt
258#endif
#define IPOPT_DECL_SMAT_REORDERING_PARDISO_WSMP(x)
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.
@ CSR_Format_1_Offset
Compressed sparse row format for upper triangular part, with 1 offset.
Interface to the linear solver Wsmp, derived from SparseSymLinearSolverInterface.
Index matrix_file_number_
Counter for matrix file numbers.
void operator=(const WsmpSolverInterface &)
Default Assignment Operator.
WsmpSolverInterface(const WsmpSolverInterface &)
Copy Constructor.
bool have_symbolic_factorization_
Flag indicating whether symbolic factorization and order has already been performed.
virtual ESymSolverStatus InitializeStructure(Index dim, Index nonzeros, const Index *ia, const Index *ja)
Method for initializing internal structures.
ESymSolverStatus SymbolicFactorization(const Index *ia, const Index *ja)
Call Wsmp to do the analysis phase.
static void GetVersion(int &V, int &R, int &M)
give WSMP version
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.
virtual bool ProvidesDegeneracyDetection() const
Query whether the indices of linearly dependent rows/columns can be determined by this linear solver.
virtual ~WsmpSolverInterface()
Destructor.
virtual bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
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.
Index dim_
Number of rows and columns of the matrix.
Index * INVP_
WSSMP's inverse permutation vector.
Index wsmp_num_threads_
Option that controls the matching strategy.
bool wsmp_no_pivoting_
Flag indicating whether the positive definite version of WSMP should be used.
bool initialized_
Flag indicating if internal data is initialized.
ESymSolverStatus Factorization(const Index *ia, const Index *ja, bool check_NegEVals, Index numberOfNegEVals)
Call Wsmp to factorize the Matrix.
ESymSolverStatus Solve(const Index *ia, const Index *ja, Index nrhs, double *rhs_vals)
Call Wsmp to do the Solve.
Index factorizations_since_recomputed_ordering_
Counter indicating how many factorizations have been done sine the last recomputation of the ordering...
Index nonzeros_
Number of nonzeros of the matrix in triplet representation.
Index * MRP_
WSSMP's internal MRP array.
virtual Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last factorization.
Index wsmp_write_matrix_iteration_
iteration number in which matrices are to be written out
bool skip_inertia_check_
Flag indicating if the inertia is always assumed to be correct.
bool pivtol_changed_
Flag indicating if the matrix has to be refactorized because the pivot tolerance has been changed,...
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
Implementation of the initialization method that has to be overloaded by for each derived class.
Number wsmp_singularity_threshold_
WSMP's singularity threshold.
EMatrixFormat MatrixFormat() const
Query of requested matrix type that the linear solver understands.
bool printed_num_threads_
Flag indicating if we already printed how many threads are used by WSMP.
double * a_
Array for storing the values of the matrix.
Index negevals_
Number of negative eigenvalues.
Index wsmp_scaling_
Indicating which of WSMP's scaling methods should be used.
virtual bool IncreaseQuality()
Request to increase quality of solution for next solve.
Index * IPARM_
Integer parameter array for WSSMP.
WsmpSolverInterface()
Constructor.
Number wsmp_pivtolmax_
Maximal pivot tolerance.
double * DPARM_
Double precision parameter array for WSSMP.
Number wsmp_pivtol_
Pivot tolerance.
virtual double * GetValuesArrayPtr()
Method returning an internal array into which the nonzero elements (in the same order as ja) will be ...
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Index * PERM_
WSSMP's permutation vector.
ESymSolverStatus InternalSymFact(const Index *ia, const Index *ja, Index numberOfNegEVals)
Call Wsmp to really do the analysis phase.
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.
ipindex Index
Type of all indices of vectors, matrices etc.
Definition IpTypes.hpp:20
ipnumber Number
Type of all numbers.
Definition IpTypes.hpp:17