Ipopt 3.11.9
Loading...
Searching...
No Matches
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
15namespace Ipopt
16{
17
18 /* forward declarations */
19 class CompoundMatrixSpace;
20
34 class CompoundMatrix : public Matrix
35 {
36 public:
37
40
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
63
68 {
69 return ConstComp(irow, jcol);
70 }
71
77 {
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:
134
137
141
143 std::vector<std::vector<SmartPtr<Matrix> > > comps_;
144
146 std::vector<std::vector<SmartPtr<const Matrix> > > const_comps_;
147
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
169 {
170 public:
177 Index ncomps_cols,
178 Index total_nRows,
179 Index total_nCols);
180
185
189 void SetBlockRows(Index irow, Index nrows);
190
192 void SetBlockCols(Index jcol, Index ncols);
193
196
199
206 void SetCompSpace(Index irow, Index jcol,
207 const MatrixSpace& mat_space,
208 bool auto_allocate = false);
210
215 {
216 DBG_ASSERT(irow<NComps_Rows());
217 DBG_ASSERT(jcol<NComps_Cols());
218 return comp_spaces_[irow][jcol];
219 }
220
225 {
226 return ncomps_rows_;
227 }
230 {
231 return ncomps_cols_;
232 }
233
235 bool Diagonal() const
236 {
237 return diagonal_;
238 }
240
243
246 virtual Matrix* MakeNew() const
247 {
248 return MakeNewCompoundMatrix();
249 }
250
251 private:
262
265
269
272
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
297
300 bool DimensionsSet() const;
301 };
302
303 /* inline methods */
304 inline
306 {
307 return owner_space_->NComps_Rows();
308 }
309
310 inline
312 {
313 return owner_space_->NComps_Cols();
314 }
315
316 inline
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
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
#define DBG_ASSERT(test)
Definition IpDebug.hpp:38
Number * x
Input: Starting point Output: Optimal solution.
This is the matrix space for CompoundMatrix.
bool Diagonal() const
True if the blocks lie on the diagonal - can make some operations faster.
Index NComps_Rows() const
Number of block rows.
CompoundMatrixSpace()
Default constructor.
Index ncomps_cols_
Number of block columns.
Index GetBlockRows(Index irow) const
Get the number nrows of rows in row-block number irow.
CompoundMatrixSpace & operator=(const CompoundMatrixSpace &)
Overloaded Equals Operator.
std::vector< std::vector< bool > > allocate_block_
2-dim std::vector of booleans deciding whether to allocate a new matrix for the blocks automagically
Index NComps_Cols() const
Number of block columns.
void SetBlockRows(Index irow, Index nrows)
Set the number nrows of rows in row-block number irow.
void SetCompSpace(Index irow, Index jcol, const MatrixSpace &mat_space, bool auto_allocate=false)
Set the component MatrixSpace.
Index GetBlockCols(Index jcol) const
Set the number ncols of columns in column-block number jcol.
virtual Matrix * MakeNew() const
Overloaded MakeNew method for the MatrixSpace base class.
CompoundMatrixSpace(Index ncomps_rows, Index ncomps_cols, Index total_nRows, Index total_nCols)
Constructor, given the number of row and columns blocks, as well as the totel number of rows and colu...
SmartPtr< const MatrixSpace > GetCompSpace(Index irow, Index jcol) const
Obtain the component MatrixSpace in block row irow and block column jcol.
std::vector< Index > block_cols_
Vector of the number of cols in each comp row.
CompoundMatrixSpace(const CompoundMatrixSpace &)
Copy Constructor.
std::vector< Index > block_rows_
Vector of the number of rows in each comp column.
bool diagonal_
true if the CompoundMatrixSpace only has Matrix spaces along the diagonal.
std::vector< std::vector< SmartPtr< const MatrixSpace > > > comp_spaces_
2-dim std::vector of matrix spaces for the components
Index ncomps_rows_
Number of block rows.
CompoundMatrix * MakeNewCompoundMatrix() const
Method for creating a new matrix of this specific type.
void SetBlockCols(Index jcol, Index ncols)
Set the number ncols of columns in column-block number jcol.
bool DimensionsSet() const
Auxilliary function for debugging to set if all block dimensions have been set.
bool dimensions_set_
Store whether or not the dimensions are valid.
Class for Matrices consisting of other matrices.
void CreateBlockFromSpace(Index irow, Index jcol)
Method to create a new matrix from the space for this block.
virtual void TransMultVectorImpl(Number alpha, const Vector &x, Number beta, Vector &y) const
Matrix(transpose) vector multiply.
virtual void ComputeRowAMaxImpl(Vector &rows_norms, bool init) const
Compute the max-norm of the rows in the matrix.
void operator=(const CompoundMatrix &)
Overloaded Equals Operator.
void SetComp(Index irow, Index jcol, const Matrix &matrix)
Method for setting an individual component at position (irow, icol) in the compound matrix.
virtual ~CompoundMatrix()
Destructor.
SmartPtr< Matrix > GetCompNonConst(Index irow, Index jcol)
Method for retrieving one block from the compound matrix as a non-const Matrix.
void SetCompNonConst(Index irow, Index jcol, Matrix &matrix)
Method to set a non-const Matrix entry.
SmartPtr< const Matrix > GetComp(Index irow, Index jcol) const
Method for retrieving one block from the compound matrix as a const Matrix.
const Matrix * ConstComp(Index irow, Index jcol) const
const CompoundMatrixSpace * owner_space_
Copy of the owner_space ptr as a CompoundMatrixSpace instead of MatrixSpace.
std::vector< std::vector< SmartPtr< const Matrix > > > const_comps_
Matrix of const matrix's containing the components.
virtual void SinvBlrmZMTdBrImpl(Number alpha, const Vector &S, const Vector &R, const Vector &Z, const Vector &D, Vector &X) const
X = S^{-1} (r + alpha*Z*M^Td).
bool MatricesValid() const
Method to check whether or not the matrices are valid.
Index NComps_Rows() const
Number of block rows of this compound matrix.
virtual void ComputeColAMaxImpl(Vector &cols_norms, bool init) const
Compute the max-norm of the columns in the matrix.
virtual void AddMSinvZImpl(Number alpha, const Vector &S, const Vector &Z, Vector &X) const
X = beta*X + alpha*(Matrix S^{-1} Z).
CompoundMatrix(const CompoundMatrixSpace *owner_space)
Constructor, taking the owner_space.
CompoundMatrix()
Default Constructor.
virtual void MultVectorImpl(Number alpha, const Vector &x, Number beta, Vector &y) const
Matrix-vector multiply.
std::vector< std::vector< SmartPtr< Matrix > > > comps_
Matrix of matrix's containing the components.
Index NComps_Cols() const
Number of block colmuns of this compound matrix.
Matrix * Comp(Index irow, Index jcol)
bool matrices_valid_
boolean indicating if the compound matrix is in a "valid" state
CompoundMatrix(const CompoundMatrix &)
Copy Constructor.
virtual bool HasValidNumbersImpl() const
Method for determining if all stored numbers are valid (i.e., no Inf or Nan).
virtual void PrintImpl(const Journalist &jnlst, EJournalLevel level, EJournalCategory category, const std::string &name, Index indent, const std::string &prefix) const
Print detailed information about the matrix.
Class responsible for all message output.
MatrixSpace base class, corresponding to the Matrix base class.
Definition IpMatrix.hpp:240
Matrix Base Class.
Definition IpMatrix.hpp:28
Template class for Smart Pointers.
void ObjectChanged()
Objects derived from TaggedObject MUST call this method every time their internal state changes to up...
Vector Base Class.
Definition IpVector.hpp:48
bool IsValid(const SmartPtr< U > &smart_ptr)
U * GetRawPtr(const SmartPtr< U > &smart_ptr)
EJournalCategory
Category Selection Enum.
int Index
Type of all indices of vectors, matrices etc.
Definition IpTypes.hpp:19
EJournalLevel
Print Level Enum.
double Number
Type of all numbers.
Definition IpTypes.hpp:17