From 208fa5c0cdf4dd4f2cf6992a42fddf1df045f9c5 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Fri, 11 May 2018 11:15:05 +0200
Subject: [PATCH] Store mgStep in a non-smart pointer

The interface of Solvers::IterativeSolver used to make its
iterationStep_ member publicly available.  This has changed,
and the iteration step can now only be accessed by a getter
method (which is good).  However, that getter returns a
reference, but not the full smart pointer.

See the discussion at

  https://git.imp.fu-berlin.de/agnumpde/dune-solvers/merge_requests/23
---
 dune/gfe/riemanniantrsolver.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 45b5ac1b..8364deb9 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -295,12 +295,12 @@ void RiemannianTrustRegionSolver<Basis,TargetSpace>::solve()
 {
     int rank = grid_->comm().rank();
 
-    std::shared_ptr<MonotoneMGStep<MatrixType,CorrectionType> > mgStep;
+    MonotoneMGStep<MatrixType,CorrectionType>* mgStep;  // Non-shared pointer -- the innerSolver keeps the ownership
 
     // if the inner solver is a monotone multigrid set up a max-norm trust-region
     if (dynamic_cast<LoopSolver<CorrectionType>*>(innerSolver_.get())) {
         auto loopSolver = std::dynamic_pointer_cast<LoopSolver<CorrectionType> >(innerSolver_);
-        mgStep = std::dynamic_pointer_cast<MonotoneMGStep<MatrixType,CorrectionType> >(loopSolver->iterationStep_);
+        mgStep = dynamic_cast<MonotoneMGStep<MatrixType,CorrectionType>*>(&loopSolver->getIterationStep());
 
     }
 
-- 
GitLab