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