From a18b37f45dd09103c75aa86efd310833bfb1b3f6 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 9 Jul 2014 09:39:31 +0000
Subject: [PATCH] Adapt to changes in dune-solvers

The hasObstacle_ and obstacles_ fields are now single arrays.
The corresponding fields for the entire grid hierarchy is assembled
within dune-solvers now.

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

diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 0d65e6d5..22b83532 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -106,7 +106,6 @@ setup(const GridType& grid,
     mmgStep->basesolver_        = baseSolver;
     mmgStep->setSmoother(presmoother, postsmoother);
     mmgStep->obstacleRestrictor_= new MandelObstacleRestrictor<CorrectionType>();
-    mmgStep->hasObstacle_       = &hasObstacle_;
     mmgStep->verbosity_         = Solver::QUIET;
 
     // //////////////////////////////////////////////////////////////////////////////////////
@@ -226,13 +225,10 @@ setup(const GridType& grid,
 
     if (rank==0)
     {
-        hasObstacle_.resize(numLevels);
-        hasObstacle_.back().resize(guIndex_->nGlobalEntity(), true);
-
-        // If there is more than one level use the transfer operators to determine the correct coarse level system sizes
-        for (int i=0; i<hasObstacle_.size()-1; i++)
-            hasObstacle_[i].resize(dynamic_cast<TruncatedCompressedMGTransfer<CorrectionType>* >(mmgStep->mgTransfer_[i])->getMatrix().M(),true);
+        hasObstacle_.resize(guIndex_->nGlobalEntity(), true);
+        mmgStep->hasObstacle_ = &hasObstacle_;
     }
+
 }
 
 
@@ -336,7 +332,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
             mgStep->setProblem(stiffnessMatrix, corr_global, rhs_global);
 
             trustRegionObstacles.back() = trustRegion.obstacles();
-            mgStep->obstacles_ = &trustRegionObstacles;
+            mgStep->obstacles_ = &trustRegionObstacles.back();
 
             innerSolver_->preprocess();
 
diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh
index b87c29c7..7454702c 100644
--- a/dune/gfe/riemanniantrsolver.hh
+++ b/dune/gfe/riemanniantrsolver.hh
@@ -127,9 +127,8 @@ protected:
     /** \brief The solver for the quadratic inner problems */
     std::shared_ptr<Solver> innerSolver_;
 
-    /** \brief Dummy fields containing 'true' everywhere.  The multigrid step
-        expects them :-( */
-    std::vector<Dune::BitSetVector<1> > hasObstacle_;
+    /** \brief Contains 'true' everywhere -- the trust-region is bounded */
+    Dune::BitSetVector<1> hasObstacle_;
 
     /** \brief The Dirichlet nodes */
     const Dune::BitSetVector<blocksize>* ignoreNodes_;
-- 
GitLab