diff --git a/dune/common/parallel/mpihelper.hh b/dune/common/parallel/mpihelper.hh index 228f02e8a4e581e831d5067f99481837e3f49a04..02830b697c881c8f4b1926f6b3a0e4db1665b048 100644 --- a/dune/common/parallel/mpihelper.hh +++ b/dune/common/parallel/mpihelper.hh @@ -233,10 +233,12 @@ namespace Dune private: int rank_; int size_; + bool initializedHere_; void prevent_warning(int){} //! \brief calls MPI_Init with argc and argv as parameters MPIHelper(int& argc, char**& argv) + : initializedHere_(false) { int wasInitialized = -1; MPI_Initialized( &wasInitialized ); @@ -246,6 +248,7 @@ namespace Dune size_ = -1; static int is_initialized = MPI_Init(&argc, &argv); prevent_warning(is_initialized); + initializedHere_ = true; } MPI_Comm_rank(MPI_COMM_WORLD,&rank_); @@ -261,10 +264,11 @@ namespace Dune { int wasFinalized = -1; MPI_Finalized( &wasFinalized ); - if(!wasFinalized) { - MPI_Finalize(); - dverb << "Called MPI_Finalize on p=" << rank_ << "!" <<std::endl; - } + if(!wasFinalized && initializedHere_) + { + MPI_Finalize(); + dverb << "Called MPI_Finalize on p=" << rank_ << "!" <<std::endl; + } } MPIHelper(const MPIHelper&);