diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 5003a786f7472b1cd44d7d4b73ced3284ab81cee..133193b361bb6a05a55fdb3991fb6ef14865227a 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -247,12 +247,25 @@ setup(const GridType& grid, // If we are on more than 1 processors, join all local transfer matrices on rank 0, // and construct a single global transfer operator there. - typedef Dune::GlobalIndexSet<typename GridType::LevelGridView, gridDim> LevelGUIndex; - LevelGUIndex fineGUIndex(grid_->levelGridView(i+1)); - LevelGUIndex coarseGUIndex(grid_->levelGridView(i)); + typedef Dune::GlobalIndexSet<typename GridType::LevelGridView> LevelGUIndex; + LevelGUIndex fineGUIndex(grid_->levelGridView(i+1), gridDim); + LevelGUIndex coarseGUIndex(grid_->levelGridView(i), gridDim); + + typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LevelGridView, Dune::MCMGVertexLayout> LevelLocalMapper; + LevelLocalMapper fineLevelLocalMapper(grid_->levelGridView(i+1)); + LevelLocalMapper coarseLevelLocalMapper(grid_->levelGridView(i)); typedef typename TruncatedCompressedMGTransfer<CorrectionType>::TransferOperatorType TransferOperatorType; - MatrixCommunicator<LevelGUIndex, TransferOperatorType> matrixComm(fineGUIndex, coarseGUIndex, 0); + MatrixCommunicator<LevelGUIndex, + typename GridType::LevelGridView, + TransferOperatorType, + LevelLocalMapper, + LevelLocalMapper> matrixComm(fineGUIndex, + coarseGUIndex, + grid_->levelGridView(i), + fineLevelLocalMapper, + coarseLevelLocalMapper, + 0); mmgStep->mgTransfer_[i] = new TruncatedCompressedMGTransfer<CorrectionType>; Dune::shared_ptr<TransferOperatorType> transferOperatorMatrix = Dune::make_shared<TransferOperatorType>(matrixComm.reduceCopy(newTransferOp->getMatrix())); diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh index 5f469c44b07ef0b98ae446a3094c074d1f441b9a..3319ea27e4eee1590fb298a0b5025a0cb39968fd 100644 --- a/dune/gfe/riemanniantrsolver.hh +++ b/dune/gfe/riemanniantrsolver.hh @@ -19,6 +19,7 @@ #include "geodesicfeassembler.hh" #include <dune/grid/utility/globalindexset.hh> +#include <dune/gfe/parallel/globalp1mapper.hh> #include <dune/gfe/parallel/globalp2mapper.hh> /** \brief Riemannian trust-region solver for geodesic finite-element problems */ @@ -44,7 +45,7 @@ class RiemannianTrustRegionSolver #elif defined SECOND_ORDER typedef Dune::GlobalP2Mapper<typename GridType::LeafGridView> GUIndex; #else - typedef GlobalUniqueIndex<typename GridType::LeafGridView, gridDim> GUIndex; + typedef Dune::GlobalP1Mapper<typename GridType::LeafGridView> GUIndex; #endif #ifdef THIRD_ORDER @@ -54,7 +55,7 @@ class RiemannianTrustRegionSolver typedef P2BasisMapper<typename GridType::LeafGridView> LocalMapper; #else typedef P1NodalBasis<typename GridType::LeafGridView,double> BasisType; - typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LeafGridView, Dune::VertexLayout> LocalMapper; + typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LeafGridView, Dune::MCMGVertexLayout> LocalMapper; #endif public: