diff --git a/src/core/mpi/MPIManager.cpp b/src/core/mpi/MPIManager.cpp index 2a2ac24824c86659a405508cb098e6419f44b772..a334bc16c4878cea58a1452cd083fba31d9d3c7e 100644 --- a/src/core/mpi/MPIManager.cpp +++ b/src/core/mpi/MPIManager.cpp @@ -32,6 +32,9 @@ #include <stdexcept> #include <string> #include <vector> +#ifdef __APPLE__ +#include <thread> +#endif namespace walberla { @@ -94,6 +97,12 @@ void MPIManager::initializeMPI(int* argc, char*** argv, bool abortOnException) MPI_Initialized(&mpiAlreadyInitialized); if (!mpiAlreadyInitialized) { +#ifdef __APPLE__ + /* Work around a race condition on macOS. + If a process started by mpiexec finishes too quickly, it sometimes doesn't start all processes. + */ + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); +#endif MPI_Init(argc, argv); finalizeOnDestruction_ = true; }