From 8e0d749350d7b2ed055443a08f6c2b5e2677d183 Mon Sep 17 00:00:00 2001 From: Peter Gottschling <peter.gottschling@simunova.com> Date: Tue, 5 May 2009 07:10:47 +0000 Subject: [PATCH] Unterschiedliche Blockgroessen. --- AMDiS/src/SolverMatrix.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/AMDiS/src/SolverMatrix.h b/AMDiS/src/SolverMatrix.h index 0c4d23b8..91c72d93 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; } -- GitLab