diff --git a/src/coupledtimestepper.cc b/src/coupledtimestepper.cc index 17432aa14e5410baefa744b15b5f4ced29c35873..f76b47e18d000daa07303966102d3c2cae352a8f 100644 --- a/src/coupledtimestepper.cc +++ b/src/coupledtimestepper.cc @@ -2,8 +2,6 @@ #include "config.h" #endif -#include <dune/solvers/norms/energynorm.hh> - #include "coupledtimestepper.hh" #include "fixedpointiterator.hh" @@ -40,13 +38,11 @@ int CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater>::step( stateUpdater_->setup(tau); velocityUpdater_->setup(ell, tau, newRelativeTime, velocityRHS, velocityIterate, velocityMatrix); - EnergyNorm<Matrix, Vector> const velocityMatrixNorm(velocityMatrix); - FixedPointIterator<Factory, StateUpdater, VelocityUpdater> fixedPointIterator( factory_, parset_, globalFriction_); auto const iterations = fixedPointIterator.run(stateUpdater_, velocityUpdater_, velocityMatrix, - velocityMatrixNorm, velocityRHS, velocityIterate); + velocityRHS, velocityIterate); return iterations; } diff --git a/src/fixedpointiterator.cc b/src/fixedpointiterator.cc index 517db55bd67c00fbc73ed874d2e09009c04562a3..d868eee0a7705deac417e45c1c0060d55a094f8b 100644 --- a/src/fixedpointiterator.cc +++ b/src/fixedpointiterator.cc @@ -5,6 +5,7 @@ #include <dune/common/exceptions.hh> #include <dune/solvers/common/arithmetic.hh> +#include <dune/solvers/norms/energynorm.hh> #include <dune/solvers/solvers/loopsolver.hh> #include "enums.hh" @@ -30,14 +31,14 @@ template <class Factory, class StateUpdater, class VelocityUpdater> int FixedPointIterator<Factory, StateUpdater, VelocityUpdater>::run( std::shared_ptr<StateUpdater> stateUpdater, std::shared_ptr<VelocityUpdater> velocityUpdater, - Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm, - Vector const &velocityRHS, Vector &velocityIterate) { + Matrix const &velocityMatrix, Vector const &velocityRHS, + Vector &velocityIterate) { auto multigridStep = factory_.getSolver(); + EnergyNorm<Matrix, Vector> energyNorm(velocityMatrix); LoopSolver<Vector> velocityProblemSolver( - multigridStep, velocityMaxIterations_, velocityTolerance_, - &velocityMatrixNorm, verbosity_, false); // absolute error - + multigridStep, velocityMaxIterations_, velocityTolerance_, &energyNorm, + verbosity_, false); // absolute error Vector previousVelocityIterate = velocityIterate; size_t fixedPointIteration; @@ -62,7 +63,7 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater>::run( velocityProblemSolver.preprocess(); velocityProblemSolver.solve(); - if (velocityMatrixNorm.diff(previousVelocityIterate, velocityIterate) < + if (energyNorm.diff(previousVelocityIterate, velocityIterate) < fixedPointTolerance_) { fixedPointIteration++; break; diff --git a/src/fixedpointiterator.hh b/src/fixedpointiterator.hh index 70a03c97f003e1607b52e154f8e036d2b1ad8007..16b3eec5c3c58518e157ab13ace74c35131df917 100644 --- a/src/fixedpointiterator.hh +++ b/src/fixedpointiterator.hh @@ -23,8 +23,8 @@ class FixedPointIterator { int run(std::shared_ptr<StateUpdater> stateUpdater, std::shared_ptr<VelocityUpdater> velocityUpdater, - Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm, - Vector const &velocityRHS, Vector &velocityIterate); + Matrix const &velocityMatrix, Vector const &velocityRHS, + Vector &velocityIterate); private: Factory &factory_;