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