From 367dcf2df1148f7d545af9643715c2805cd1ffb4 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Mon, 27 Oct 2014 15:48:25 +0000
Subject: [PATCH] Use the GlobalP1Mapper instead of a GlobalIndexSet where
 appropriate

[[Imported from SVN: r9936]]
---
 dune/gfe/riemanniantrsolver.cc | 21 +++++++++++++++++----
 dune/gfe/riemanniantrsolver.hh |  5 +++--
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 5003a786..133193b3 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 5f469c44..3319ea27 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:
-- 
GitLab