diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 45b5ac1beaf0f06845da26c89079222a6aecbcd6..8364deb956851d52c9b275f92dc1d66b0875aa44 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()); }