From a3d234b842dccc1523a31cf82ee883019e76e455 Mon Sep 17 00:00:00 2001
From: Christian Engwer <christi@dune-project.org>
Date: Fri, 23 Sep 2011 21:14:45 +0000
Subject: [PATCH] [solvers] remeber default reduction when apply is called with
 an explicit reduction

[[Imported from SVN: r1498]]
---
 dune/istl/solvers.hh | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/dune/istl/solvers.hh b/dune/istl/solvers.hh
index 17388ec05..8c8981594 100644
--- a/dune/istl/solvers.hh
+++ b/dune/istl/solvers.hh
@@ -326,8 +326,9 @@ namespace Dune {
     //! \copydoc InverseOperator::apply(X&,Y&,double,InverseOperatorResult&)
     virtual void apply (X& x, X& b, double reduction, InverseOperatorResult& res)
     {
-      _reduction = reduction;
+      std::swap(_reduction,reduction);
       (*this).apply(x,b,res);
+      std::swap(_reduction,reduction);
     }
 
   private:
@@ -456,8 +457,9 @@ namespace Dune {
      */
     virtual void apply (X& x, X& b, double reduction, InverseOperatorResult& res)
     {
-      _reduction = reduction;
+      std::swap(_reduction,reduction);
       (*this).apply(x,b,res);
+      std::swap(_reduction,reduction);
     }
 
   private:
@@ -620,8 +622,9 @@ namespace Dune {
     virtual void apply (X& x, X& b, double reduction,
                         InverseOperatorResult& res)
     {
-      _reduction = reduction;
+      std::swap(_reduction,reduction);
       (*this).apply(x,b,res);
+      std::swap(_reduction,reduction);
     }
 
   private:
@@ -880,8 +883,9 @@ namespace Dune {
      */
     virtual void apply (X& x, X& b, double reduction, InverseOperatorResult& res)
     {
-      _reduction = reduction;
+      std::swap(_reduction,reduction);
       (*this).apply(x,b,res);
+      std::swap(_reduction,reduction);
     }
 
   private:
@@ -1128,8 +1132,9 @@ namespace Dune {
      */
     virtual void apply (X& x, X& b, double reduction, InverseOperatorResult& res)
     {
-      _reduction = reduction;
+      std::swap(_reduction,reduction);
       (*this).apply(x,b,res);
+      std::swap(_reduction,reduction);
     }
 
   private:
-- 
GitLab