void CompoundMatrixSpace::SetCompSpace(Index irow, Index jcol, const MatrixSpace& mat_space, bool auto_allocate /*=false*/) { if (!dimensions_set_) { dimensions_set_ = DimensionsSet(); } DBG_ASSERT(dimensions_set_); DBG_ASSERT(irow<ncomps_rows_); DBG_ASSERT(jcol<ncomps_cols_); DBG_ASSERT(IsNull(comp_spaces_[irow][jcol])); DBG_ASSERT(block_cols_[jcol] != -1 && block_cols_[jcol] == mat_space.NCols()); DBG_ASSERT(block_rows_[irow] != -1 && block_rows_[irow] == mat_space.NRows()); comp_spaces_[irow][jcol] = &mat_space; allocate_block_[irow][jcol] = auto_allocate; diagonal_ = true; for (Index i=0; i < NComps_Rows(); i++) { for (Index j=0; j < NComps_Cols(); j++) { if ( (i == j && IsNull(GetCompSpace(i,j))) || (i != j && IsValid(GetCompSpace(i,j)))) { diagonal_ = false; break; } } } }
void CompoundSymMatrixSpace::SetCompSpace( Index irow, Index jcol, const MatrixSpace& mat_space, bool auto_allocate /*=false*/ ) { if( !dimensions_set_ ) { dimensions_set_ = DimensionsSet(); } DBG_ASSERT(dimensions_set_); DBG_ASSERT(irow < ncomp_spaces_); DBG_ASSERT(jcol <= irow); DBG_ASSERT(IsNull(comp_spaces_[irow][jcol])); DBG_ASSERT(irow != jcol || dynamic_cast<const SymMatrixSpace*> (&mat_space)); DBG_ASSERT(block_dim_[jcol] != -1 && block_dim_[jcol] == mat_space.NCols()); DBG_ASSERT(block_dim_[irow] != -1 && block_dim_[irow] == mat_space.NRows()); comp_spaces_[irow][jcol] = &mat_space; allocate_block_[irow][jcol] = auto_allocate; }
CompoundSymMatrix* CompoundSymMatrixSpace::MakeNewCompoundSymMatrix() const { if (!dimensions_set_) { dimensions_set_ = DimensionsSet(); } DBG_ASSERT(dimensions_set_); CompoundSymMatrix* mat = new CompoundSymMatrix(this); for(Index i=0; i<NComps_Dim(); i++) { for (Index j=0; j<=i; j++) { if (allocate_block_[i][j]) { mat->SetCompNonConst(i, j, *GetCompSpace(i, j)->MakeNew()); } } } return mat; }