Ipopt
3.11.8
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
LinAlg
IpCompoundMatrix.hpp
Go to the documentation of this file.
1
// Copyright (C) 2004, 2009 International Business Machines and others.
2
// All Rights Reserved.
3
// This code is published under the Eclipse Public License.
4
//
5
// $Id: IpCompoundMatrix.hpp 1861 2010-12-21 21:34:47Z andreasw $
6
//
7
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8
9
#ifndef __IPCOMPOUNDMATRIX_HPP__
10
#define __IPCOMPOUNDMATRIX_HPP__
11
12
#include "
IpUtils.hpp
"
13
#include "
IpMatrix.hpp
"
14
15
namespace
Ipopt
16
{
17
18
/* forward declarations */
19
class
CompoundMatrixSpace;
20
34
class
CompoundMatrix
:
public
Matrix
35
{
36
public
:
37
40
47
CompoundMatrix
(
const
CompoundMatrixSpace
* owner_space);
48
50
virtual
~CompoundMatrix
();
52
56
void
SetComp
(
Index
irow,
Index
jcol,
const
Matrix
& matrix);
57
59
void
SetCompNonConst
(
Index
irow,
Index
jcol,
Matrix
& matrix);
60
62
void
CreateBlockFromSpace
(
Index
irow,
Index
jcol);
63
67
SmartPtr<const Matrix>
GetComp
(
Index
irow,
Index
jcol)
const
68
{
69
return
ConstComp
(irow, jcol);
70
}
71
76
SmartPtr<Matrix>
GetCompNonConst
(
Index
irow,
Index
jcol)
77
{
78
ObjectChanged
();
79
return
Comp
(irow, jcol);
80
}
81
83
inline
Index
NComps_Rows
()
const
;
85
inline
Index
NComps_Cols
()
const
;
86
87
protected
:
90
virtual
void
MultVectorImpl
(
Number
alpha,
const
Vector
&
x
,
91
Number
beta,
Vector
& y)
const
;
92
93
virtual
void
TransMultVectorImpl
(
Number
alpha,
const
Vector
&
x
,
94
Number
beta,
Vector
& y)
const
;
95
98
virtual
void
AddMSinvZImpl
(
Number
alpha,
const
Vector
& S,
const
Vector
& Z,
99
Vector
& X)
const
;
100
103
virtual
void
SinvBlrmZMTdBrImpl
(
Number
alpha,
const
Vector
& S,
104
const
Vector
& R,
const
Vector
& Z,
105
const
Vector
& D,
Vector
& X)
const
;
106
109
virtual
bool
HasValidNumbersImpl
()
const
;
110
111
virtual
void
ComputeRowAMaxImpl
(
Vector
& rows_norms,
bool
init)
const
;
112
113
virtual
void
ComputeColAMaxImpl
(
Vector
& cols_norms,
bool
init)
const
;
114
115
virtual
void
PrintImpl
(
const
Journalist
& jnlst,
116
EJournalLevel
level,
117
EJournalCategory
category,
118
const
std::string& name,
119
Index
indent,
120
const
std::string& prefix)
const
;
122
123
private
:
133
CompoundMatrix
();
134
136
CompoundMatrix
(
const
CompoundMatrix
&);
137
139
void
operator=
(
const
CompoundMatrix
&);
141
143
std::vector<std::vector<SmartPtr<Matrix> > >
comps_
;
144
146
std::vector<std::vector<SmartPtr<const Matrix> > >
const_comps_
;
147
150
const
CompoundMatrixSpace
*
owner_space_
;
151
153
mutable
bool
matrices_valid_
;
154
156
bool
MatricesValid
()
const
;
157
158
inline
const
Matrix
*
ConstComp
(
Index
irow,
Index
jcol)
const
;
159
160
inline
Matrix
*
Comp
(
Index
irow,
Index
jcol);
161
};
162
168
class
CompoundMatrixSpace
:
public
MatrixSpace
169
{
170
public
:
176
CompoundMatrixSpace
(
Index
ncomps_rows,
177
Index
ncomps_cols,
178
Index
total_nRows,
179
Index
total_nCols);
180
182
~CompoundMatrixSpace
()
183
{}
185
189
void
SetBlockRows
(
Index
irow,
Index
nrows);
190
192
void
SetBlockCols
(
Index
jcol,
Index
ncols);
193
195
Index
GetBlockRows
(
Index
irow)
const
;
196
198
Index
GetBlockCols
(
Index
jcol)
const
;
199
206
void
SetCompSpace
(
Index
irow,
Index
jcol,
207
const
MatrixSpace
& mat_space,
208
bool
auto_allocate =
false
);
210
214
SmartPtr<const MatrixSpace>
GetCompSpace
(
Index
irow,
Index
jcol)
const
215
{
216
DBG_ASSERT
(irow<
NComps_Rows
());
217
DBG_ASSERT
(jcol<
NComps_Cols
());
218
return
comp_spaces_
[irow][jcol];
219
}
220
224
Index
NComps_Rows
()
const
225
{
226
return
ncomps_rows_
;
227
}
229
Index
NComps_Cols
()
const
230
{
231
return
ncomps_cols_
;
232
}
233
235
bool
Diagonal
()
const
236
{
237
return
diagonal_
;
238
}
240
242
CompoundMatrix
*
MakeNewCompoundMatrix
()
const
;
243
246
virtual
Matrix
*
MakeNew
()
const
247
{
248
return
MakeNewCompoundMatrix
();
249
}
250
251
private
:
261
CompoundMatrixSpace
();
262
264
CompoundMatrixSpace
(
const
CompoundMatrixSpace
&);
265
267
CompoundMatrixSpace
&
operator=
(
const
CompoundMatrixSpace
&);
269
271
Index
ncomps_rows_
;
272
274
Index
ncomps_cols_
;
275
277
mutable
bool
dimensions_set_
;
278
280
std::vector<std::vector<SmartPtr<const MatrixSpace> > >
comp_spaces_
;
281
284
std::vector<std::vector< bool > >
allocate_block_
;
285
287
std::vector<Index>
block_rows_
;
288
290
std::vector<Index>
block_cols_
;
291
296
bool
diagonal_
;
297
300
bool
DimensionsSet
()
const
;
301
};
302
303
/* inline methods */
304
inline
305
Index
CompoundMatrix::NComps_Rows
()
const
306
{
307
return
owner_space_
->
NComps_Rows
();
308
}
309
310
inline
311
Index
CompoundMatrix::NComps_Cols
()
const
312
{
313
return
owner_space_
->
NComps_Cols
();
314
}
315
316
inline
317
const
Matrix
*
CompoundMatrix::ConstComp
(
Index
irow,
Index
jcol)
const
318
{
319
DBG_ASSERT
(irow <
NComps_Rows
());
320
DBG_ASSERT
(jcol <
NComps_Cols
());
321
if
(
IsValid
(
comps_
[irow][jcol])) {
322
return
GetRawPtr
(
comps_
[irow][jcol]);
323
}
324
else
if
(
IsValid
(
const_comps_
[irow][jcol])) {
325
return
GetRawPtr
(
const_comps_
[irow][jcol]);
326
}
327
328
return
NULL;
329
}
330
331
inline
332
Matrix
*
CompoundMatrix::Comp
(
Index
irow,
Index
jcol)
333
{
334
DBG_ASSERT
(irow <
NComps_Rows
());
335
DBG_ASSERT
(jcol <
NComps_Cols
());
336
return
GetRawPtr
(
comps_
[irow][jcol]);
337
}
338
339
}
// namespace Ipopt
340
#endif
Generated by
1.8.3.1