diff --git a/AMDiS/src/SolverMatrix.h b/AMDiS/src/SolverMatrix.h index 0c4d23b8dcee6b43e6aec9b64a5221178670f093..91c72d93fa1566f09ebc3e7dbbb77fa528dbbf4f 100644 --- a/AMDiS/src/SolverMatrix.h +++ b/AMDiS/src/SolverMatrix.h @@ -67,14 +67,18 @@ namespace AMDiS { public : void setMatrix(const Matrix<DOFMatrix*>& A) { - int ns = A.getSize(), size = A[0][0]->getFESpace()->getAdmin()->getUsedSize(), - new_size = ns * size; - matrix.change_dim(new_size, new_size); + int ns= A.getSize(); + std::vector<int> block_starts(ns+1); + block_starts[0]= 0; + for (int i= 0; i < ns; ++i) + block_starts[i+1]= block_starts[i] + A[i][i]->getFESpace()->getAdmin()->getUsedSize(); + + matrix.change_dim(block_starts[ns], block_starts[ns]); DOFMatrix::inserter_type ins(matrix); for (int rb= 0; rb < ns; ++rb) for (int cb= 0; cb < ns; ++cb) if (A[rb][cb]) - ins[rb * size][cb * size] << A[rb][cb]->getBaseMatrix(); + ins[block_starts[rb]][block_starts[cb]] << A[rb][cb]->getBaseMatrix(); } const DOFMatrix::base_matrix_type& getMatrix() const { return matrix; }