From 6f61ef51523a2c57976ffc9030dda4bc15f4261b Mon Sep 17 00:00:00 2001 From: Jonathan Youett <youett@math.fu-berlin.de> Date: Fri, 2 Mar 2018 14:28:14 +0100 Subject: [PATCH] Create baseSolver and error on stack and let the solver take over ownership --- dune/gfe/riemanniantrsolver.cc | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 70414dd3..41f856ff 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -74,21 +74,15 @@ setup(const GridType& grid, #ifdef HAVE_IPOPT // First create an IPOpt base solver - auto baseSolver = std::make_shared<QuadraticIPOptSolver<MatrixType,CorrectionType> >(); - baseSolver->setVerbosity(NumProc::QUIET); - baseSolver->setTolerance(baseTolerance); + QuadraticIPOptSolver<MatrixType,CorrectionType> baseSolver; + baseSolver.setSolverParameter(baseTolerance, 100, NumProc::QUIET); #else - // First create a Gauss-seidel base solver - auto baseSolverStep = std::make_shared<TrustRegionGSStep<MatrixType, CorrectionType> >(); - // Hack: the two-norm may not scale all that well, but it is fast! - auto baseNorm = std::make_shared<TwoNorm<CorrectionType> >(); - - auto baseSolver = std::make_shared<::LoopSolver<CorrectionType> >(baseSolverStep, - baseIterations, - baseTolerance, - baseNorm, - Solver::QUIET); + ::LoopSolver<CorrectionType> baseSolver(TrustRegionGSStep<MatrixType, CorrectionType>{}, + baseIterations, + baseTolerance, + TwoNorm<CorrectionType>{}, + Solver::QUIET); #endif #if HAVE_MPI // Transfer all Dirichlet data to the master processor @@ -109,7 +103,7 @@ setup(const GridType& grid, mmgStep->setMGType(mu, nu1, nu2); mmgStep->ignoreNodes_ = globalDirichletNodes; - mmgStep->setBaseSolver(baseSolver); + mmgStep->setBaseSolver(std::move(baseSolver)); mmgStep->setSmoother(smoother); mmgStep->setObstacleRestrictor(std::make_shared<MandelObstacleRestrictor<CorrectionType> >()); mmgStep->setVerbosity(Solver::QUIET); -- GitLab