From 7b72b517a8a474f7d929f4a40ad19ee09a5db9cf Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 23 Apr 2014 14:35:58 +0000
Subject: [PATCH] Implement distributed energy computation

[[Imported from SVN: r9710]]
---
 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 e40a4cf5..0f57b759 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -184,6 +184,8 @@ setup(const GridType& grid,
 template <class GridType, class TargetSpace>
 void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
 {
+    int rank = mpiHelper_.rank();
+
     MonotoneMGStep<MatrixType,CorrectionType>* mgStep = NULL;
 
     // if the inner solver is a monotone multigrid set up a max-norm trust-region
@@ -215,6 +217,8 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
     // /////////////////////////////////////////////////////
 
     double oldEnergy = assembler_->computeEnergy(x_);
+    oldEnergy = mpiHelper_.getCollectiveCommunication().sum(oldEnergy);
+
     bool recomputeGradientHessian = true;
     CorrectionType rhs;
 
@@ -225,7 +229,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
             std::cout << x_[j] << std::endl;*/
 
         Dune::Timer totalTimer;
-        if (this->verbosity_ == Solver::FULL) {
+        if (this->verbosity_ == Solver::FULL and rank==0) {
             std::cout << "----------------------------------------------------" << std::endl;
             std::cout << "      Trust-Region Step Number: " << i
                       << ",     radius: " << trustRegion.radius()
-- 
GitLab