Main Page
Namespaces
Classes
Files
File List
File Members
build
buildd
coinor-ipopt-3.10.2
Ipopt
src
Algorithm
Inexact
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
14
#include "
IpSparseSymLinearSolverInterface.hpp
"
15
#include "
IpInexactCq.hpp
"
16
#include "
IpIterativeSolverTerminationTester.hpp
"
17
18
namespace
Ipopt
19
{
20
25
class
IterativePardisoSolverInterface
:
public
SparseSymLinearSolverInterface
26
{
27
public
:
31
IterativePardisoSolverInterface
(
IterativeSolverTerminationTester
& normal_tester,
32
IterativeSolverTerminationTester
& pd_tester);
33
35
virtual
~IterativePardisoSolverInterface
();
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
}
85
EMatrixFormat
MatrixFormat
()
const
86
{
87
return
CSR_Format_1_Offset
;
88
}
90
93
static
void
RegisterOptions
(
SmartPtr<RegisteredOptions>
roptions);
95
96
private
:
106
IterativePardisoSolverInterface
();
107
109
IterativePardisoSolverInterface
(
const
IterativePardisoSolverInterface
&);
110
112
void
operator=
(
const
IterativePardisoSolverInterface
&);
114
118
Index
dim_
;
119
121
Index
nonzeros_
;
122
124
double
*
a_
;
126
130
Index
negevals_
;
132
136
enum
PardisoMatchingStrategy
137
{
138
COMPLETE
,
139
COMPLETE2x2
,
140
CONSTRAINT
141
};
143
PardisoMatchingStrategy
match_strat_
;
146
bool
have_symbolic_factorization_
;
149
bool
pardiso_redo_symbolic_fact_only_if_inertia_wrong_
;
153
bool
pardiso_repeated_perturbation_means_singular_
;
156
bool
skip_inertia_check_
;
158
Index
pardiso_max_droptol_corrections_
;
160
163
Index
pardiso_max_iter_
;
164
Number
pardiso_iter_relative_tol_
;
165
Index
pardiso_iter_coarse_size_
;
166
Index
pardiso_iter_max_levels_
;
167
Number
pardiso_iter_dropping_factor_
;
168
Number
pardiso_iter_dropping_schur_
;
169
Index
pardiso_iter_max_row_fill_
;
170
Number
pardiso_iter_inverse_norm_factor_
;
171
172
Index
normal_pardiso_max_iter_
;
173
Number
normal_pardiso_iter_relative_tol_
;
174
Index
normal_pardiso_iter_coarse_size_
;
175
Index
normal_pardiso_iter_max_levels_
;
176
Number
normal_pardiso_iter_dropping_factor_
;
177
Number
normal_pardiso_iter_dropping_schur_
;
178
Index
normal_pardiso_iter_max_row_fill_
;
179
Number
normal_pardiso_iter_inverse_norm_factor_
;
181
183
Number
decr_factor_
;
184
187
Number
pardiso_iter_dropping_factor_used_
;
188
Number
pardiso_iter_dropping_schur_used_
;
189
Number
normal_pardiso_iter_dropping_factor_used_
;
190
Number
normal_pardiso_iter_dropping_schur_used_
;
192
197
bool
initialized_
;
199
203
void
**
PT_
;
206
ipfint
MAXFCT_
;
208
ipfint
MNUM_
;
210
ipfint
MTYPE_
;
212
ipfint
*
IPARM_
;
214
double
*
DPARM_
;
216
ipfint
MSGLVL_
;
218
221
Index
debug_last_iter_
;
222
Index
debug_cnt_
;
224
229
ESymSolverStatus
SymbolicFactorization
(
const
Index
* ia,
230
const
Index
* ja);
231
234
ESymSolverStatus
Factorization
(
const
Index
* ia,
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
248
InexactData
&
InexData
()
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
257
InexactCq
&
InexCq
()
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
266
SmartPtr<IterativeSolverTerminationTester>
normal_tester_
;
267
269
SmartPtr<IterativeSolverTerminationTester>
pd_tester_
;
270
271
};
272
273
}
// namespace Ipopt
274
#endif
Generated on Fri Jun 29 2012 06:35:12 by
1.8.1.1