From 66b3ebf1506ac7c5a24286db65e0a2fee04b1939 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Tue, 14 Aug 2007 13:48:08 +0000
Subject: [PATCH] don't hardwire trust-region solver tolerance

[[Imported from SVN: r1510]]
---
 src/rodsolver.cc | 10 +++-------
 src/rodsolver.hh |  4 ++++
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/rodsolver.cc b/src/rodsolver.cc
index 869f4549..5654066e 100644
--- a/src/rodsolver.cc
+++ b/src/rodsolver.cc
@@ -49,6 +49,7 @@ template <class GridType>
 void RodSolver<GridType>::setup(const GridType& grid,
                                 const RodAssembler<GridType>* rodAssembler,
                                 const SolutionType& x,
+                                double tolerance,
                                 int maxTrustRegionSteps,
                                 double initialTrustRegionRadius,
                                 int multigridIterations,
@@ -65,6 +66,7 @@ void RodSolver<GridType>::setup(const GridType& grid,
     grid_ = &grid;
     rodAssembler_             = rodAssembler;
     x_                        = x;
+    tolerance_                = tolerance;
     maxTrustRegionSteps_      = maxTrustRegionSteps;
     initialTrustRegionRadius_ = initialTrustRegionRadius;
     multigridIterations_      = multigridIterations;
@@ -322,7 +324,7 @@ void RodSolver<GridType>::solve()
 
 
         printf("infinity norm of the correction: %g\n", corr.infinity_norm());
-        if (corr.infinity_norm() < 1e-5) {
+        if (corr.infinity_norm() < tolerance_) {
             std::cout << "CORRECTION IS SMALL ENOUGH" << std::endl;
             break;
         }
@@ -344,12 +346,6 @@ void RodSolver<GridType>::solve()
             
         }
         
-#if 0
-        std::cout << "newIterate: \n";
-        for (int j=0; j<newIterate.size(); j++)
-            std::cout << newIterate[j] << std::endl;
-#endif     
-        
         /** \todo Don't always recompute oldEnergy */
         double oldEnergy = rodAssembler_->computeEnergy(x_);
         double energy    = rodAssembler_->computeEnergy(newIterate); 
diff --git a/src/rodsolver.hh b/src/rodsolver.hh
index 4b8dcc49..ffe9b6b7 100644
--- a/src/rodsolver.hh
+++ b/src/rodsolver.hh
@@ -35,6 +35,7 @@ public:
     void setup(const GridType& grid, 
                const RodAssembler<GridType>* rodAssembler,
                const SolutionType& x,
+               double tolerance,
                int maxTrustRegionSteps,
                double initialTrustRegionRadius,
                int multigridIterations,
@@ -65,6 +66,9 @@ protected:
     /** \brief The initial trust-region radius in the maximum-norm */
     double initialTrustRegionRadius_;
 
+    /** \brief Tolerance of the trust-region solver */
+    double tolerance_;
+
     /** \brief Maximum number of trust-region steps */
     int maxTrustRegionSteps_;
 
-- 
GitLab