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; }