Main Page
Namespaces
Classes
Files
File List
File Members
var
build
temp
tmp.niCloInx4p
4.0-0-0
coinor-ipopt
coinor-ipopt-3.10.2
Ipopt
src
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 on Mon Mar 17 2014 19:49:13 by
1.8.1.2