From 77a151be83ce2010643bb5d868bef75aafa9c3e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20H=C3=A6gland?= Date: Wed, 26 Feb 2020 22:45:52 +0100 Subject: [PATCH] Refactor execute() Currently, execute() calls runSimulator() to run the simulation. When the Python step_init() is implemented (see a later commit), it will instead call an executeStepInit() that will need to do the same initialization as in execute() except that it should call a runSimulatorInit() instead of runSimulator(). In order to avoid code duplication for execute() and executeStepInit(), execute() is here refactored into an execute_() method. --- opm/simulators/flow/FlowMainEbos.hpp | 88 ++++++++++++++++------------ 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/opm/simulators/flow/FlowMainEbos.hpp b/opm/simulators/flow/FlowMainEbos.hpp index f110c6bc6..c494acf84 100644 --- a/opm/simulators/flow/FlowMainEbos.hpp +++ b/opm/simulators/flow/FlowMainEbos.hpp @@ -245,45 +245,11 @@ 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(output_cout); - runDiagnostics(output_cout); - createSimulator(); - - // do the actual work - runSimulator(output_cout); - - // clean up - mergeParallelLogFiles(output_to_files); - - return EXIT_SUCCESS; - } - 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. // \return Whether unkown keywords were seen during parsing. static void printPRTHeader(bool output_cout) @@ -328,6 +294,54 @@ namespace Opm } } + private: + // called by execute() or executeInitStep() + int execute_(int argc, char** argv, bool output_cout, bool output_to_files, + void (FlowMainEbos::* runOrInitFunc)(bool), bool cleanup) + { + try { + // deal with some administrative boilerplate + + int status = setupParameters_(argc, argv); + if (status) + return status; + + setupParallelism(); + setupEbosSimulator(output_cout); + runDiagnostics(output_cout); + createSimulator(); + + // if run, do the actual work, else just initialize + (this->*runOrInitFunc)(output_cout); + if (cleanup) { + executeCleanup_(output_to_files); + } + return EXIT_SUCCESS; + } + 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() {