From 15657dd7e34e2e7a48b019e0f320fa1b417be378 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Sun, 7 Sep 2014 21:22:36 +0000
Subject: [PATCH] [bugfix] Distribute norm of correction to all processors for
 the stopping criterion

[[Imported from SVN: r9881]]
---
 dune/gfe/riemanniantrsolver.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 1767d62c..3ef37109 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -378,6 +378,10 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
 
         corr = vectorComm.scatter(corr_global);
 
+        // Make infinity norm of corr_global known on all processors
+        double corrNorm = corr.infinity_norm();
+        double corrGlobalInfinityNorm = mpiHelper.getCollectiveCommunication().max(corrNorm);
+
         if (instrumented_) {
 
             fprintf(fp, "Trust-region step: %d, trust-region radius: %g\n",
@@ -449,7 +453,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
         if (this->verbosity_ == NumProc::FULL)
             std::cout << "Infinity norm of the correction: " << corr.infinity_norm() << std::endl;
 
-        if (corr_global.infinity_norm() < this->tolerance_) {
+        if (corrGlobalInfinityNorm < this->tolerance_) {
             if (this->verbosity_ == NumProc::FULL and rank==0)
                 std::cout << "CORRECTION IS SMALL ENOUGH" << std::endl;
 
-- 
GitLab