diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 8feb344f72223c699bc0ad7ca13b35801efaaf1c..927e7b14a5ebec554e31222def80e91427a58600 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -78,12 +78,17 @@ setup(const GridType& grid, 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! - ::LoopSolver<CorrectionType> baseSolver(TrustRegionGSStep<MatrixType, CorrectionType>{}, - baseIterations, - baseTolerance, - TwoNorm<CorrectionType>{}, - Solver::QUIET); + auto baseNorm = std::make_shared<TwoNorm<CorrectionType>>(); + + auto baseSolver = std::make_shared<::LoopSolver<CorrectionType>>(baseSolverStep, + baseIterations, + baseTolerance, + baseNorm, + Solver::QUIET); #endif #if HAVE_MPI // Transfer all Dirichlet data to the master processor