From 4ded1ceeb0703bf208afe112327338bb7d68820f Mon Sep 17 00:00:00 2001 From: Daniel Richtmann Date: Thu, 8 Feb 2018 15:29:44 +0100 Subject: [PATCH] Make GMRES solvers perform no more than MaxIterations steps I noticed that it was possible to overrun this number. --- .../CommunicationAvoidingGeneralisedMinimalResidual.h | 6 ++++-- ...lexibleCommunicationAvoidingGeneralisedMinimalResidual.h | 6 ++++-- .../iterative/FlexibleGeneralisedMinimalResidual.h | 6 ++++-- lib/algorithms/iterative/GeneralisedMinimalResidual.h | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/algorithms/iterative/CommunicationAvoidingGeneralisedMinimalResidual.h b/lib/algorithms/iterative/CommunicationAvoidingGeneralisedMinimalResidual.h index 3bf19131..b56c8afc 100644 --- a/lib/algorithms/iterative/CommunicationAvoidingGeneralisedMinimalResidual.h +++ b/lib/algorithms/iterative/CommunicationAvoidingGeneralisedMinimalResidual.h @@ -97,7 +97,9 @@ class CommunicationAvoidingGeneralisedMinimalResidual : public OperatorFunction< SolverTimer.Start(); IterationCount = 0; - for (int k=0; k { SolverTimer.Start(); IterationCount = 0; - for (int k=0; k { std::cout << GridLogIterative << "FlexibleGeneralisedMinimalResidual: Iteration " << IterationCount << " residual " << cp << " target " << rsq << std::endl; - if ((i == RestartLength - 1) || (cp <= rsq)) { + if ((i == RestartLength - 1) || (IterationCount == MaxIterations) || (cp <= rsq)) { computeSolution(v, psi, i); diff --git a/lib/algorithms/iterative/GeneralisedMinimalResidual.h b/lib/algorithms/iterative/GeneralisedMinimalResidual.h index 78dbf5ca..e9d54a53 100644 --- a/lib/algorithms/iterative/GeneralisedMinimalResidual.h +++ b/lib/algorithms/iterative/GeneralisedMinimalResidual.h @@ -97,7 +97,9 @@ class GeneralisedMinimalResidual : public OperatorFunction { SolverTimer.Start(); IterationCount = 0; - for (int k=0; k { std::cout << GridLogIterative << "GeneralisedMinimalResidual: Iteration " << IterationCount << " residual " << cp << " target " << rsq << std::endl; - if ((i == RestartLength - 1) || (cp <= rsq)) { + if ((i == RestartLength - 1) || (IterationCount == MaxIterations) || (cp <= rsq)) { computeSolution(v, psi, i);