From ab8f0c59b3a7931a7998e4ccffa7fb507d344080 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Tue, 13 May 2014 13:20:19 +0000
Subject: [PATCH] Do not have mpiHelper_ as a member of
 RiemannianTrustRegionSolver after all

Christian Engwer told me a trick how to get the mpiHelper instance without
known argc and argv.

[[Imported from SVN: r9720]]
---
 cosserat-continuum.cc          | 2 +-
 dune/gfe/riemanniantrsolver.cc | 8 ++++++--
 dune/gfe/riemanniantrsolver.hh | 5 +----
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/cosserat-continuum.cc b/cosserat-continuum.cc
index dccd3aba..44752746 100644
--- a/cosserat-continuum.cc
+++ b/cosserat-continuum.cc
@@ -314,7 +314,7 @@ int main (int argc, char *argv[]) try
     //   Create a Riemannian trust-region solver
     // /////////////////////////////////////////////////
 
-    RiemannianTrustRegionSolver<GridType,TargetSpace> solver(mpiHelper);
+    RiemannianTrustRegionSolver<GridType,TargetSpace> solver;
     solver.setup(*grid,
                  &assembler,
                  x,
diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 0f57b759..3853e7eb 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -2,6 +2,7 @@
 
 #include <dune/common/bitsetvector.hh>
 #include <dune/common/timer.hh>
+#include <dune/common/parallel/mpihelper.hh>
 
 #include <dune/istl/io.hh>
 
@@ -184,7 +185,10 @@ setup(const GridType& grid,
 template <class GridType, class TargetSpace>
 void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
 {
-    int rank = mpiHelper_.rank();
+    int argc = 0;
+    char** argv;
+    Dune::MPIHelper& mpiHelper = Dune::MPIHelper::instance(argc,argv);
+    int rank = mpiHelper.rank();
 
     MonotoneMGStep<MatrixType,CorrectionType>* mgStep = NULL;
 
@@ -217,7 +221,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
     // /////////////////////////////////////////////////////
 
     double oldEnergy = assembler_->computeEnergy(x_);
-    oldEnergy = mpiHelper_.getCollectiveCommunication().sum(oldEnergy);
+    oldEnergy = mpiHelper.getCollectiveCommunication().sum(oldEnergy);
 
     bool recomputeGradientHessian = true;
     CorrectionType rhs;
diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh
index 347b126f..88ff62fb 100644
--- a/dune/gfe/riemanniantrsolver.hh
+++ b/dune/gfe/riemanniantrsolver.hh
@@ -47,9 +47,8 @@ class RiemannianTrustRegionSolver
 
 public:
 
-    RiemannianTrustRegionSolver(Dune::MPIHelper& mpiHelper)
+    RiemannianTrustRegionSolver()
         : IterativeSolver<std::vector<TargetSpace>, Dune::BitSetVector<blocksize> >(0,100,NumProc::FULL),
-          mpiHelper_(mpiHelper),
           hessianMatrix_(std::auto_ptr<MatrixType>(NULL)), h1SemiNorm_(NULL)
     {}
 
@@ -92,8 +91,6 @@ public:
 
 protected:
 
-    /** \brief Gateway to MPI, for the case that we are working in parallel */
-    Dune::MPIHelper& mpiHelper_;
 
     /** \brief The grid */
     const GridType* grid_;
-- 
GitLab