Ipopt Documentation  
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 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
6 
7 #ifndef __IPCOMPOUNDMATRIX_HPP__
8 #define __IPCOMPOUNDMATRIX_HPP__
9 
10 #include "IpUtils.hpp"
11 #include "IpMatrix.hpp"
12 
13 namespace Ipopt
14 {
15 
16 /* forward declarations */
17 class CompoundMatrixSpace;
18 
35 {
36 public:
37 
49  const CompoundMatrixSpace* owner_space
50  );
51 
53  virtual ~CompoundMatrix();
55 
61  void SetComp(
62  Index irow,
63  Index jcol,
64  const Matrix& matrix
65  );
66 
69  Index irow,
70  Index jcol,
71  Matrix& matrix
72  );
73 
76  Index irow,
77  Index jcol
78  );
79 
84  Index irow,
85  Index jcol
86  ) const
87  {
88  return ConstComp(irow, jcol);
89  }
90 
99  Index irow,
100  Index jcol
101  )
102  {
103  ObjectChanged();
104  return Comp(irow, jcol);
105  }
106 
108  inline Index NComps_Rows() const;
109 
111  inline Index NComps_Cols() const;
112 
113 protected:
116  virtual void MultVectorImpl(
117  Number alpha,
118  const Vector& x,
119  Number beta,
120  Vector& y
121  ) const;
122 
123  virtual void TransMultVectorImpl(
124  Number alpha,
125  const Vector& x,
126  Number beta,
127  Vector& y
128  ) const;
129 
130  virtual void AddMSinvZImpl(
131  Number alpha,
132  const Vector& S,
133  const Vector& Z,
134  Vector& X
135  ) const;
136 
137  virtual void SinvBlrmZMTdBrImpl(
138  Number alpha,
139  const Vector& S,
140  const Vector& R,
141  const Vector& Z,
142  const Vector& D,
143  Vector& X
144  ) const;
145 
146  virtual bool HasValidNumbersImpl() const;
147 
148  virtual void ComputeRowAMaxImpl(
149  Vector& rows_norms,
150  bool init
151  ) const;
152 
153  virtual void ComputeColAMaxImpl(
154  Vector& cols_norms,
155  bool init
156  ) const;
157 
158  virtual void PrintImpl(
159  const Journalist& jnlst,
160  EJournalLevel level,
161  EJournalCategory category,
162  const std::string& name,
163  Index indent,
164  const std::string& prefix
165  ) const;
167 
168 private:
179 
182  const CompoundMatrix&);
183 
185  void operator=(
186  const CompoundMatrix&);
188 
190  std::vector<std::vector<SmartPtr<Matrix> > > comps_;
191 
193  std::vector<std::vector<SmartPtr<const Matrix> > > const_comps_;
194 
199 
201  mutable bool matrices_valid_;
202 
204  bool MatricesValid() const;
205 
206  inline const Matrix* ConstComp(
207  Index irow,
208  Index jcol
209  ) const;
210 
211  inline Matrix* Comp(
212  Index irow,
213  Index jcol
214  );
215 };
216 
223 {
224 public:
231  Index ncomps_rows,
232  Index ncomps_cols,
233  Index total_nRows,
234  Index total_nCols
235  );
236 
239  { }
241 
246  Index irow,
247  Index nrows
248  );
249 
252  Index jcol,
253  Index ncols
254  );
255 
258  Index irow
259  ) const;
260 
263  Index jcol
264  ) const;
265 
275  Index irow,
276  Index jcol,
277  const MatrixSpace& mat_space,
278  bool auto_allocate = false
279  );
281 
286  Index irow,
287  Index jcol
288  ) const
289  {
290  DBG_ASSERT(irow < NComps_Rows());
291  DBG_ASSERT(jcol < NComps_Cols());
292  return comp_spaces_[irow][jcol];
293  }
294 
299  {
300  return ncomps_rows_;
301  }
302 
305  {
306  return ncomps_cols_;
307  }
308 
310  bool Diagonal() const
311  {
312  return diagonal_;
313  }
315 
318 
319  virtual Matrix* MakeNew() const
320  {
321  return MakeNewCompoundMatrix();
322  }
323 
324 private:
335 
338  const CompoundMatrixSpace&);
339 
342  const CompoundMatrixSpace&
343  );
345 
348 
351 
353  mutable bool dimensions_set_;
354 
356  std::vector<std::vector<SmartPtr<const MatrixSpace> > > comp_spaces_;
357 
361  std::vector<std::vector<bool> > allocate_block_;
362 
364  std::vector<Index> block_rows_;
365 
367  std::vector<Index> block_cols_;
368 
374  bool diagonal_;
375 
379  bool DimensionsSet() const;
380 };
381 
382 /* inline methods */
384 {
385  return owner_space_->NComps_Rows();
386 }
387 
389 {
390  return owner_space_->NComps_Cols();
391 }
392 
394  Index irow,
395  Index jcol
396 ) const
397 {
398  DBG_ASSERT(irow < NComps_Rows());
399  DBG_ASSERT(jcol < NComps_Cols());
400  if( IsValid(comps_[irow][jcol]) )
401  {
402  return GetRawPtr(comps_[irow][jcol]);
403  }
404  else if( IsValid(const_comps_[irow][jcol]) )
405  {
406  return GetRawPtr(const_comps_[irow][jcol]);
407  }
408 
409  return NULL;
410 }
411 
413  Index irow,
414  Index jcol
415 )
416 {
417  DBG_ASSERT(irow < NComps_Rows());
418  DBG_ASSERT(jcol < NComps_Cols());
419  return GetRawPtr(comps_[irow][jcol]);
420 }
421 
422 } // namespace Ipopt
423 #endif
#define DBG_ASSERT(test)
Definition: IpDebug.hpp:28
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.
std::vector< std::vector< bool > > allocate_block_
2-dim std::vector of booleans deciding whether to allocate a new matrix for the blocks automagically
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.
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.
CompoundMatrix * MakeNewCompoundMatrix() const
Method for creating a new matrix of this specific type.
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...
CompoundMatrixSpace & operator=(const CompoundMatrixSpace &)
Default Assignment Operator.
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.
SmartPtr< const MatrixSpace > GetCompSpace(Index irow, Index jcol) const
Obtain the component MatrixSpace in block row irow and block column jcol.
void SetBlockCols(Index jcol, Index ncols)
Set the number ncols of columns in column-block number jcol.
virtual Matrix * MakeNew() const
Pure virtual method for creating a new Matrix of the corresponding type.
bool DimensionsSet() const
Auxiliary 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 &)
Default Assignment Operator.
SmartPtr< Matrix > GetCompNonConst(Index irow, Index jcol)
Method for retrieving one block from the compound matrix as a non-const Matrix.
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.
void SetCompNonConst(Index irow, Index jcol, Matrix &matrix)
Method to set a non-const Matrix entry.
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.
SmartPtr< const Matrix > GetComp(Index irow, Index jcol) const
Method for retrieving one block from the compound matrix as a const Matrix.
virtual void AddMSinvZImpl(Number alpha, const Vector &S, const Vector &Z, Vector &X) const
X = 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:327
Matrix Base Class.
Definition: IpMatrix.hpp:28
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
Vector Base Class.
Definition: IpVector.hpp:48
#define IPOPTLIB_EXPORT
This file contains a base class for all exceptions and a set of macros to help with exceptions.
bool IsValid(const SmartPtr< U > &smart_ptr)
Definition: IpSmartPtr.hpp:674
U * GetRawPtr(const SmartPtr< U > &smart_ptr)
Definition: IpSmartPtr.hpp:651
EJournalCategory
Category Selection Enum.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:17
EJournalLevel
Print Level Enum.
double Number
Type of all numbers.
Definition: IpTypes.hpp:15