mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
use RAII for MPI initialization
This commit is contained in:
parent
d99f642dff
commit
1ef981f35c
@ -120,7 +120,7 @@ namespace Opm
|
|||||||
using FlowMainEbosType = FlowMainEbos<Properties::TTag::EclFlowProblem>;
|
using FlowMainEbosType = FlowMainEbos<Properties::TTag::EclFlowProblem>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Main(int argc, char** argv) : argc_(argc), argv_(argv) { }
|
Main(int argc, char** argv) : argc_(argc), argv_(argv) { initMPI(); }
|
||||||
|
|
||||||
Main(const std::string &filename)
|
Main(const std::string &filename)
|
||||||
{
|
{
|
||||||
@ -130,6 +130,7 @@ namespace Opm
|
|||||||
saveArgs_[0] = const_cast<char *>(flowProgName_.c_str());
|
saveArgs_[0] = const_cast<char *>(flowProgName_.c_str());
|
||||||
saveArgs_[1] = const_cast<char *>(deckFilename_.c_str());
|
saveArgs_[1] = const_cast<char *>(deckFilename_.c_str());
|
||||||
argv_ = saveArgs_;
|
argv_ = saveArgs_;
|
||||||
|
initMPI();
|
||||||
}
|
}
|
||||||
|
|
||||||
Main(int argc,
|
Main(int argc,
|
||||||
@ -145,16 +146,28 @@ namespace Opm
|
|||||||
, schedule_(std::move(schedule))
|
, schedule_(std::move(schedule))
|
||||||
, summaryConfig_(std::move(summaryConfig))
|
, summaryConfig_(std::move(summaryConfig))
|
||||||
{
|
{
|
||||||
|
initMPI();
|
||||||
}
|
}
|
||||||
|
|
||||||
~Main()
|
~Main()
|
||||||
{
|
{
|
||||||
#if HAVE_MPI && !HAVE_DUNE_FEM
|
|
||||||
EclGenericVanguard::setCommunication(nullptr);
|
EclGenericVanguard::setCommunication(nullptr);
|
||||||
|
|
||||||
|
#if HAVE_MPI && !HAVE_DUNE_FEM
|
||||||
MPI_Finalize();
|
MPI_Finalize();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initMPI()
|
||||||
|
{
|
||||||
|
#if HAVE_DUNE_FEM
|
||||||
|
Dune::Fem::MPIManager::initialize(argc_, argv_);
|
||||||
|
#elif HAVE_MPI
|
||||||
|
MPI_Init(&argc_, &argv_);
|
||||||
|
#endif
|
||||||
|
EclGenericVanguard::setCommunication(std::make_unique<EclGenericVanguard::CommunicationType>());
|
||||||
|
}
|
||||||
|
|
||||||
int runDynamic()
|
int runDynamic()
|
||||||
{
|
{
|
||||||
int exitCode = EXIT_SUCCESS;
|
int exitCode = EXIT_SUCCESS;
|
||||||
@ -359,15 +372,9 @@ namespace Opm
|
|||||||
externalSetupTimer.start();
|
externalSetupTimer.start();
|
||||||
|
|
||||||
handleVersionCmdLine_(argc_, argv_);
|
handleVersionCmdLine_(argc_, argv_);
|
||||||
// MPI setup.
|
|
||||||
#if HAVE_DUNE_FEM
|
#if HAVE_DUNE_FEM
|
||||||
Dune::Fem::MPIManager::initialize(argc_, argv_);
|
|
||||||
int mpiRank = Dune::Fem::MPIManager::rank();
|
int mpiRank = Dune::Fem::MPIManager::rank();
|
||||||
#else
|
#else
|
||||||
#if HAVE_MPI
|
|
||||||
MPI_Init(&argc_, &argv_);
|
|
||||||
#endif
|
|
||||||
EclGenericVanguard::setCommunication(std::make_unique<EclGenericVanguard::CommunicationType>());
|
|
||||||
int mpiRank = EclGenericVanguard::comm().rank();
|
int mpiRank = EclGenericVanguard::comm().rank();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -50,8 +50,12 @@ private:
|
|||||||
bool hasRunInit_ = false;
|
bool hasRunInit_ = false;
|
||||||
bool hasRunCleanup_ = false;
|
bool hasRunCleanup_ = false;
|
||||||
|
|
||||||
std::unique_ptr<Opm::FlowMainEbos<TypeTag>> mainEbos_;
|
// This *must* be declared before other pointers
|
||||||
|
// to simulator objects. This in order to deinitialize
|
||||||
|
// MPI at the correct time (ie after the other objects).
|
||||||
std::unique_ptr<Opm::Main> main_;
|
std::unique_ptr<Opm::Main> main_;
|
||||||
|
|
||||||
|
std::unique_ptr<Opm::FlowMainEbos<TypeTag>> mainEbos_;
|
||||||
Simulator *ebosSimulator_;
|
Simulator *ebosSimulator_;
|
||||||
std::unique_ptr<PyMaterialState<TypeTag>> materialState_;
|
std::unique_ptr<PyMaterialState<TypeTag>> materialState_;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user