Example #1
0
  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;
        }
      }
    }
  }
Example #2
0
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;
  }