Merge pull request #2619 from hakonhagland/refactor_execute

Refactor `execute()` in `FlowMainEbos.hpp`
This commit is contained in:
Atgeirr Flø Rasmussen 2020-05-19 13:58:10 +02:00 committed by GitHub
commit 94ea40b253
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -256,43 +256,8 @@ namespace Opm
/// input.
int execute(int argc, char** argv, bool output_cout, bool output_to_files)
{
try {
// deal with some administrative boilerplate
int status = setupParameters_(argc, argv);
if (status)
return status;
setupParallelism();
setupEbosSimulator();
runDiagnostics(output_cout);
createSimulator();
// do the actual work
int retval = runSimulator(output_cout);
// clean up
mergeParallelLogFiles(output_to_files);
return retval;
}
catch (const std::exception& e) {
std::ostringstream message;
message << "Program threw an exception: " << e.what();
if (output_cout) {
// in some cases exceptions are thrown before the logging system is set
// up.
if (OpmLog::hasBackend("STREAMLOG")) {
OpmLog::error(message.str());
}
else {
std::cout << message.str() << "\n";
}
}
return EXIT_FAILURE;
}
return execute_(argc, argv, output_cout, output_to_files,
&FlowMainEbos::runSimulator, /*cleanup=*/true);
}
// Print an ASCII-art header to the PRT and DEBUG files.
@ -339,6 +304,53 @@ namespace Opm
OpmLog::note(ss.str());
}
}
private:
// called by execute() or executeInitStep()
int execute_(int argc, char** argv, bool output_cout, bool output_to_files,
int (FlowMainEbos::* runOrInitFunc)(bool), bool cleanup)
{
try {
// deal with some administrative boilerplate
int status = setupParameters_(argc, argv);
if (status)
return status;
setupParallelism();
setupEbosSimulator();
runDiagnostics(output_cout);
createSimulator();
// if run, do the actual work, else just initialize
int exitCode = (this->*runOrInitFunc)(output_cout);
if (cleanup) {
executeCleanup_(output_to_files);
}
return exitCode;
}
catch (const std::exception& e) {
std::ostringstream message;
message << "Program threw an exception: " << e.what();
if (output_cout) {
// in some cases exceptions are thrown before the logging system is set
// up.
if (OpmLog::hasBackend("STREAMLOG")) {
OpmLog::error(message.str());
}
else {
std::cout << message.str() << "\n";
}
}
return EXIT_FAILURE;
}
}
void executeCleanup_(bool output_to_files) {
// clean up
mergeParallelLogFiles(output_to_files);
}
protected:
void setupParallelism()