Esempio n. 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;
        }
      }
    }
  }
Esempio n. 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;
  }