diff --git a/src/core/mpi/MPIManager.cpp b/src/core/mpi/MPIManager.cpp index 72861cbd109a91321099f9e95771c88376a8a28c..fe89748d401a00488e7081043643dbac16986709 100644 --- a/src/core/mpi/MPIManager.cpp +++ b/src/core/mpi/MPIManager.cpp @@ -103,6 +103,7 @@ void MPIManager::initializeMPI( int* argc, char*** argv, bool abortOnException ) MPI_Initialized( &mpiAlreadyInitialized ); if ( ! mpiAlreadyInitialized ) { MPI_Init( argc, argv ); + finalizeOnDestruction_ = true; } isMPIInitialized_ = true; @@ -122,7 +123,10 @@ void MPIManager::finalizeMPI() if( isMPIInitialized_ && !currentlyAborting_ ) { isMPIInitialized_ = false; - MPI_Finalize(); + if (finalizeOnDestruction_) + { + MPI_Finalize(); + } } } } diff --git a/src/core/mpi/MPIManager.h b/src/core/mpi/MPIManager.h index fdbc3e06eab704fa63f10156119a4a5e5eeeeafe..620d69a70898520db946a8f3110e67c5b541a76a 100644 --- a/src/core/mpi/MPIManager.h +++ b/src/core/mpi/MPIManager.h @@ -156,9 +156,12 @@ private: bool currentlyAborting_; + bool finalizeOnDestruction_; + // Singleton MPIManager() : worldRank_(0), rank_(-1), numProcesses_(1), comm_(MPI_COMM_NULL), - isMPIInitialized_(false), cartesianSetup_(false), currentlyAborting_(false) + isMPIInitialized_(false), cartesianSetup_(false), currentlyAborting_(false), + finalizeOnDestruction_(false) { WALBERLA_NON_MPI_SECTION() { rank_ = 0; } } }; // class MPIManager