From 9e957e8965be2a08fd36ae7f877570a26a66f4b6 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Wed, 16 Jul 2014 09:11:06 +0000 Subject: [PATCH] Use the TwoNorm to monitor convergence of the Gauss-Seidel base solver Previously the energy norm was used, but as we are solving non-convex problems the Hessians may be indefinite, and then the EnergyNorm is not a norm. [[Imported from SVN: r9835]] --- dune/gfe/riemanniantrsolver.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 1403c64a..a0806ccb 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -22,7 +22,7 @@ #include <dune/solvers/solvers/iterativesolver.hh> #include "maxnormtrustregion.hh" -#include <dune/solvers/norms/energynorm.hh> +#include <dune/solvers/norms/twonorm.hh> #include <dune/solvers/norms/h1seminorm.hh> #include <dune/gfe/parallel/matrixcommunicator.hh> @@ -81,12 +81,13 @@ setup(const GridType& grid, // First create a Gauss-seidel base solver TrustRegionGSStep<MatrixType, CorrectionType>* baseSolverStep = new TrustRegionGSStep<MatrixType, CorrectionType>; - EnergyNorm<MatrixType, CorrectionType>* baseEnergyNorm = new EnergyNorm<MatrixType, CorrectionType>(*baseSolverStep,1e-3); + // Hack: the two-norm may not scale all that well, but it is fast! + TwoNorm<CorrectionType>* baseNorm = new TwoNorm<CorrectionType>; ::LoopSolver<CorrectionType>* baseSolver = new ::LoopSolver<CorrectionType>(baseSolverStep, baseIterations, baseTolerance, - baseEnergyNorm, + baseNorm, Solver::QUIET); #endif -- GitLab