diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index e6223d01fbf1a607519df0f760281e361ed7cb03..0d65e6d5f4a5547f1334934c8ac8d1865300fc6a 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -118,13 +118,17 @@ setup(const GridType& grid, LaplaceAssembler<GridType, typename BasisType::LocalFiniteElement, typename BasisType::LocalFiniteElement> laplaceStiffness; typedef Dune::BCRSMatrix<Dune::FieldMatrix<double,1,1> > ScalarMatrixType; - ScalarMatrixType* A = new ScalarMatrixType; + ScalarMatrixType localA; - operatorAssembler.assemble(laplaceStiffness, *A); + operatorAssembler.assemble(laplaceStiffness, localA); if (h1SemiNorm_) delete h1SemiNorm_; + + MatrixCommunicator<GUIndex, ScalarMatrixType> matrixComm(*guIndex_, 0); + ScalarMatrixType* A = new ScalarMatrixType(matrixComm.reduceAdd(localA)); + h1SemiNorm_ = new H1SemiNorm<CorrectionType>(*A); innerSolver_ = std::shared_ptr<LoopSolver<CorrectionType> >(new ::LoopSolver<CorrectionType>(mmgStep,