From fbcebeb1c0044d6c3ea5b5c4bfc0c53e0778baaf Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Fri, 2 Oct 2015 12:34:10 +0200
Subject: [PATCH] LoopSolver: Restore precision

---
 dune/solvers/solvers/loopsolver.cc | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/dune/solvers/solvers/loopsolver.cc b/dune/solvers/solvers/loopsolver.cc
index 96ab9c1a..59e696c3 100644
--- a/dune/solvers/solvers/loopsolver.cc
+++ b/dune/solvers/solvers/loopsolver.cc
@@ -124,37 +124,39 @@ void ::LoopSolver<VectorType, BitVectorType>::solve()
 
         // Output
         if (this->verbosity_ == NumProc::FULL) {
+            std::streamsize const oldPrecision = std::cout.precision();
+            std::ios_base::fmtflags const oldFormatFlags = std::cout.flags();
+
             std::cout << std::setw(5) << i;
 
             if (this->useRelativeError_)
             {
-                std::cout << std::setiosflags(std::ios::scientific);
-                std::cout << std::setw(15) << std::setprecision(7) << error;
-                std::cout << std::resetiosflags(std::ios::scientific);
+                std::cout << std::scientific
+                          << std::setw(15) << std::setprecision(7) << error;
             }
 
             if (referenceSolution_)
             {
-                std::cout << std::setiosflags(std::ios::scientific);
-                std::cout << std::setw(15) << std::setprecision(7) << normOfError;
-                std::cout << std::resetiosflags(std::ios::scientific);
+                std::cout << std::scientific
+                          << std::setw(15) << std::setprecision(7) << normOfError;
             }
 
-            std::cout << std::setiosflags(std::ios::scientific);
-            std::cout << std::setw(15) << std::setprecision(7) << normOfCorrection;
-            std::cout << std::resetiosflags(std::ios::scientific);
+            std::cout << std::scientific
+                      << std::setw(15) << std::setprecision(7) << normOfCorrection;
 
-            std::cout << std::setiosflags(std::ios::fixed);
-            if (i==0)  // We can't estimate the convergence rate at the first iteration
+            if (i == 0)
+                // We can't estimate the convergence rate at the first iteration
                 std::cout << "         ";
             else
-                std::cout << std::setw(9) << std::setprecision(5) << convRate;
-            std::cout << std::resetiosflags(std::ios::fixed);
+                std::cout << std::fixed
+                          << std::setw(9) << std::setprecision(5) << convRate;
+
+            std::cout << std::setprecision(oldPrecision)
+                      << std::setiosflags(oldFormatFlags);
 
             std::cout << this->iterationStep_->getOutput();
             std::cout << std::endl;
         }
-
     }
 
 
-- 
GitLab