diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 70414dd3a1e7f910f7a73beaa3c1cb74a604a34f..41f856ffb5f6e196d25b6a9938a938663bcb5691 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);