9 #ifndef __IPCOMPOUNDMATRIX_HPP__
10 #define __IPCOMPOUNDMATRIX_HPP__
19 class CompoundMatrixSpace;
79 return Comp(irow, jcol);
118 const std::string& name,
120 const std::string& prefix)
const;
143 std::vector<std::vector<SmartPtr<Matrix> > >
comps_;
208 bool auto_allocate =
false);
bool Diagonal() const
True if the blocks lie on the diagonal - can make some operations faster.
virtual void MultVectorImpl(Number alpha, const Vector &x, Number beta, Vector &y) const
Matrix-vector multiply.
bool IsValid(const SmartPtr< U > &smart_ptr)
Number * x
Input: Starting point Output: Optimal solution.
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.
void SetCompNonConst(Index irow, Index jcol, Matrix &matrix)
Method to set a non-const Matrix entry.
bool diagonal_
true if the CompoundMatrixSpace only has Matrix spaces along the diagonal.
SmartPtr< const Matrix > GetComp(Index irow, Index jcol) const
Method for retrieving one block from the compound matrix as a const Matrix.
~CompoundMatrixSpace()
Destructor.
double Number
Type of all numbers.
This is the matrix space for CompoundMatrix.
void ObjectChanged()
Objects derived from TaggedObject MUST call this method every time their internal state changes to up...
SmartPtr< const MatrixSpace > GetCompSpace(Index irow, Index jcol) const
Obtain the component MatrixSpace in block row irow and block column jcol.
Index NComps_Rows() const
Number of block rows.
bool MatricesValid() const
Method to check whether or not the matrices are valid.
virtual void AddMSinvZImpl(Number alpha, const Vector &S, const Vector &Z, Vector &X) const
X = beta*X + alpha*(Matrix S^{-1} Z).
void SetCompSpace(Index irow, Index jcol, const MatrixSpace &mat_space, bool auto_allocate=false)
Set the component MatrixSpace.
EJournalLevel
Print Level Enum.
Matrix * Comp(Index irow, Index jcol)
bool matrices_valid_
boolean indicating if the compound matrix is in a "valid" state
CompoundMatrixSpace & operator=(const CompoundMatrixSpace &)
Overloaded Equals Operator.
Index GetBlockRows(Index irow) const
Get the number nrows of rows in row-block number irow.
void SetBlockRows(Index irow, Index nrows)
Set the number nrows of rows in row-block number irow.
void operator=(const CompoundMatrix &)
Overloaded Equals Operator.
CompoundMatrix()
Default Constructor.
Template class for Smart Pointers.
void CreateBlockFromSpace(Index irow, Index jcol)
Method to create a new matrix from the space for this block.
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.
void SetComp(Index irow, Index jcol, const Matrix &matrix)
Method for setting an individual component at position (irow, icol) in the compound matrix...
std::vector< std::vector< SmartPtr< Matrix > > > comps_
Matrix of matrix's containing the components.
bool dimensions_set_
Store whether or not the dimensions are valid.
U * GetRawPtr(const SmartPtr< U > &smart_ptr)
const Matrix * ConstComp(Index irow, Index jcol) const
virtual Matrix * MakeNew() const
Overloaded MakeNew method for the MatrixSpace base class.
std::vector< std::vector< bool > > allocate_block_
2-dim std::vector of booleans deciding whether to allocate a new matrix for the blocks automagically ...
virtual void ComputeColAMaxImpl(Vector &cols_norms, bool init) const
Compute the max-norm of the columns in the matrix.
SmartPtr< Matrix > GetCompNonConst(Index irow, Index jcol)
Method for retrieving one block from the compound matrix as a non-const Matrix.
MatrixSpace base class, corresponding to the Matrix base class.
virtual ~CompoundMatrix()
Destructor.
virtual void TransMultVectorImpl(Number alpha, const Vector &x, Number beta, Vector &y) const
Matrix(transpose) vector multiply.
CompoundMatrixSpace()
Default constructor.
int Index
Type of all indices of vectors, matrices etc.
Index NComps_Cols() const
Number of block columns.
std::vector< std::vector< SmartPtr< const Matrix > > > const_comps_
Matrix of const matrix's containing the components.
Index NComps_Rows() const
Number of block rows of this compound matrix.
void SetBlockCols(Index jcol, Index ncols)
Set the number ncols of columns in column-block number jcol.
Index NComps_Cols() const
Number of block colmuns of this compound matrix.
CompoundMatrix * MakeNewCompoundMatrix() const
Method for creating a new matrix of this specific type.
Class responsible for all message output.
std::vector< Index > block_rows_
Vector of the number of rows in each comp column.
const CompoundMatrixSpace * owner_space_
Copy of the owner_space ptr as a CompoundMatrixSpace instead of MatrixSpace.
std::vector< Index > block_cols_
Vector of the number of cols in each comp row.
virtual void ComputeRowAMaxImpl(Vector &rows_norms, bool init) const
Compute the max-norm of the rows in the matrix.
bool DimensionsSet() const
Auxilliary function for debugging to set if all block dimensions have been set.
Index ncomps_cols_
Number of block columns.
Class for Matrices consisting of other matrices.
EJournalCategory
Category Selection Enum.
Index GetBlockCols(Index jcol) const
Set the number ncols of columns in column-block number jcol.
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).
virtual bool HasValidNumbersImpl() const
Method for determining if all stored numbers are valid (i.e., no Inf or Nan).