85 static int setupParameters_(
int argc,
char**
argv, Parallel::Communication comm)
87 if (!Parameters::IsRegistrationOpen()) {
98 Parameters::Register<Parameters::OutputInterval>
99 (
"Specify the number of report steps between two consecutive writes of restart data");
100 Parameters::Register<Parameters::EnableLoggingFalloutWarning>
101 (
"Developer option to see whether logging was on non-root processors. "
102 "In that case it will be appended to the *.DBG or *.PRT files");
105 Simulator::registerParameters();
110 detail::hideUnusedParameters<Scalar>();
112 Parameters::endRegistration();
114 int mpiRank = comm.rank();
118 const_cast<const char**
>(
argv),
136 std::string
msg =
"Aborting simulation due to unknown "
137 "parameters. Please query \"flow --help\" for "
138 "supported command line parameters.";
139 if (OpmLog::hasBackend(
"STREAMLOG"))
144 std::cerr <<
msg << std::endl;
151 if (Parameters::Get<Parameters::PrintParameters>() == 1) {
153 Parameters::printValues(std::cout);
167 return execute_(&FlowMain::runSimulator,
true);
170 int executeInitStep()
172 return execute_(&FlowMain::runSimulatorInit,
false);
179 return simulator_->runStep(*simtimer_);
184 int executeStepsCleanup()
186 SimulatorReport report = simulator_->finalize();
187 runSimulatorAfterSim_(report);
188 return report.success.exit_status;
191 ModelSimulator* getSimulatorPtr()
193 return modelSimulator_.get();
196 SimulatorTimer* getSimTimer()
198 return simtimer_.get();
204 return simtimer_->stepLengthTaken();
212 std::ostringstream message;
215 if (this->output_cout_) {
218 if (OpmLog::hasBackend(
"STREAMLOG")) {
219 OpmLog::error(message.str());
222 std::cout << message.str() <<
"\n";
225 detail::checkAllMPIProcesses();
241 setupModelSimulator();
244 this->deck_read_time_ = modelSimulator_->vanguard().setupTime();
259 catch (
const std::exception&
e) {
260 auto exitCode =
logger(
e,
"Simulation aborted as program threw an unexpected exception: ");
266 void executeCleanup_() {
268 mergeParallelLogFiles();
272 void setupParallelism()
278 mpi_rank_ = comm.rank();
279 mpi_size_ = comm.size();
302 OpmLog::warning(
"Invalid value for OMP_NUM_THREADS environment variable.");
316 void mergeParallelLogFiles()
319 OpmLog::removeAllBackends();
326 Parameters::Get<Parameters::EclDeckFileName>(),
327 Parameters::Get<Parameters::EnableLoggingFalloutWarning>());
330 void setupModelSimulator()
333 modelSimulator_->executionTimer().start();
334 modelSimulator_->model().applyInitialSolution();
337 const EclipseState& eclState()
const
338 {
return modelSimulator_->vanguard().eclState(); }
340 EclipseState& eclState()
341 {
return modelSimulator_->vanguard().eclState(); }
344 {
return modelSimulator_->vanguard().schedule(); }
349 return runSimulatorInitOrRun_(&FlowMain::runSimulatorRunCallback_);
352 int runSimulatorInit()
354 return runSimulatorInitOrRun_(&FlowMain::runSimulatorInitCallback_);
359 int runSimulatorRunCallback_()
361 SimulatorReport report = simulator_->run(*simtimer_);
362 runSimulatorAfterSim_(report);
363 return report.success.exit_status;
367 int runSimulatorInitCallback_()
369 simulator_->init(*simtimer_);
374 void runSimulatorAfterSim_(SimulatorReport &report)
376 if (! this->output_cout_) {
381#if !defined(_OPENMP) || !_OPENMP
387 printFlowTrailer(mpi_size_,
threads, total_setup_time_, deck_read_time_, report, simulator_->model().localAccumulatedReports());
389 detail::handleExtraConvergenceOutput(report,
390 Parameters::Get<Parameters::OutputExtraConvergenceInfo>(),
391 R
"(OutputExtraConvergenceInfo (--output-extra-convergence-info))",
397 int runSimulatorInitOrRun_(
int (FlowMain::*
initOrRunFunc)())
400 const auto& schedule = this->schedule();
401 auto&
ioConfig = eclState().getIOConfig();
402 simtimer_ = std::make_unique<SimulatorTimer>();
405 const auto&
initConfig = eclState().getInitConfig();
406 simtimer_->init(schedule,
static_cast<std::size_t
>(
initConfig.getRestartStep()));
408 if (this->output_cout_) {
409 std::ostringstream
oss;
413 if (Parameters::printUnused(
oss)) {
414 std::cout <<
"----------------- Unrecognized parameters: -----------------\n";
415 std::cout <<
oss.str();
416 std::cout <<
"----------------------------------------------------------------" << std::endl;
421 if (this->output_cout_) {
423 msg =
"\n\n================ Starting main simulation loop ===============\n";
430 if (this->output_cout_) {
431 std::cout <<
"\n\n================ Simulation turned off ===============\n" << std::flush;
446 simulator_ = std::make_unique<Simulator>(*modelSimulator_);
450 {
return modelSimulator_->vanguard().grid(); }
453 std::unique_ptr<ModelSimulator> modelSimulator_;
456 std::any parallel_information_;
457 std::unique_ptr<Simulator> simulator_;
458 std::unique_ptr<SimulatorTimer> simtimer_;
463 double total_setup_time_ = 0.0;
464 double deck_read_time_ = 0.0;
Definition FlowMain.hpp:65
double getPreviousReportStepSize()
Get the size of the previous report step.
Definition FlowMain.hpp:202
int execute()
This is the main function of Flow.
Definition FlowMain.hpp:165
void createSimulator()
This is the main function of Flow.
Definition FlowMain.hpp:443