mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Constructor overloaded to accept either filename or complete set of parsed objects.
This commit is contained in:
committed by
Håkon Hægland
parent
b2a8ae0f31
commit
9f5a13fcfb
@@ -17,6 +17,8 @@
|
|||||||
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
||||||
#include <opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
|
#include <opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
|
||||||
|
|
||||||
|
#include <opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp>
|
||||||
|
|
||||||
#if HAVE_DUNE_FEM
|
#if HAVE_DUNE_FEM
|
||||||
#include <dune/fem/misc/mpimanager.hh>
|
#include <dune/fem/misc/mpimanager.hh>
|
||||||
#else
|
#else
|
||||||
@@ -24,6 +26,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pybind11/pybind11.h>
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/embed.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@@ -131,7 +134,6 @@ FileOutputMode setupLogging(int mpi_rank_, const std::string& deck_filename, con
|
|||||||
std::string output_dir = cmdline_output_dir;
|
std::string output_dir = cmdline_output_dir;
|
||||||
if (output_dir.empty()) {
|
if (output_dir.empty()) {
|
||||||
output_dir = absolute(path(baseName).parent_path()).string();
|
output_dir = absolute(path(baseName).parent_path()).string();
|
||||||
std::cout << "Output dir = " << output_dir << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logFileStream << output_dir << "/" << baseName;
|
logFileStream << output_dir << "/" << baseName;
|
||||||
@@ -209,9 +211,10 @@ void setupMessageLimiter(const Opm::MessageLimits msgLimits, const std::string&
|
|||||||
class BlackOilSimulator
|
class BlackOilSimulator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BlackOilSimulator()
|
BlackOilSimulator( const std::string& filename )
|
||||||
{
|
{
|
||||||
setupCmdLineArgs();
|
setupCmdLineArgs();
|
||||||
|
std::strcpy(argv_[1], filename.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
BlackOilSimulator( const Opm::Deck& deck,
|
BlackOilSimulator( const Opm::Deck& deck,
|
||||||
@@ -316,13 +319,37 @@ public:
|
|||||||
if (mpiRank == 0)
|
if (mpiRank == 0)
|
||||||
outputCout = EWOMS_GET_PARAM(PreTypeTag, bool, EnableTerminalOutput);
|
outputCout = EWOMS_GET_PARAM(PreTypeTag, bool, EnableTerminalOutput);
|
||||||
|
|
||||||
std::string deckFilename = eclipseState_->getIOConfig().fullBasePath();
|
std::string deckFilename;
|
||||||
std::string outputDir = eclipseState_->getIOConfig().getOutputDir();
|
std::string outputDir;
|
||||||
|
if ( eclipseState_ )
|
||||||
|
{
|
||||||
|
deckFilename = eclipseState_->getIOConfig().fullBasePath();
|
||||||
|
outputDir = eclipseState_->getIOConfig().getOutputDir();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deckFilename = EWOMS_GET_PARAM(PreTypeTag, std::string, EclDeckFileName);
|
||||||
|
typedef typename GET_PROP_TYPE(PreTypeTag, Vanguard) PreVanguard;
|
||||||
|
try {
|
||||||
|
deckFilename = PreVanguard::canonicalDeckPath(deckFilename).string();
|
||||||
|
}
|
||||||
|
catch (const std::exception& e) {
|
||||||
|
if ( mpiRank == 0 )
|
||||||
|
std::cerr << "Exception received: " << e.what() << ". Try '--help' for a usage description.\n";
|
||||||
|
#if HAVE_MPI
|
||||||
|
MPI_Finalize();
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (outputCout) {
|
if (outputCout) {
|
||||||
Opm::FlowMainEbos<PreTypeTag>::printBanner();
|
Opm::FlowMainEbos<PreTypeTag>::printBanner();
|
||||||
}
|
}
|
||||||
Opm::ErrorGuard errorGuard;
|
|
||||||
|
// Create Deck, EclipseState, Schedule and SummaryConfig if they don't exist
|
||||||
|
if ( deck_ && eclipseState_ && schedule_ && summaryConfig_ )
|
||||||
|
{
|
||||||
outputMode = setupLogging(mpiRank,
|
outputMode = setupLogging(mpiRank,
|
||||||
deckFilename,
|
deckFilename,
|
||||||
outputDir,
|
outputDir,
|
||||||
@@ -332,6 +359,47 @@ public:
|
|||||||
if (mpiRank == 0) {
|
if (mpiRank == 0) {
|
||||||
setupMessageLimiter(schedule_->getMessageLimits(), "STDOUT_LOGGER");
|
setupMessageLimiter(schedule_->getMessageLimits(), "STDOUT_LOGGER");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Opm::Parser parser;
|
||||||
|
Opm::ParseContext parseContext({{Opm::ParseContext::PARSE_RANDOM_SLASH, Opm::InputError::IGNORE},
|
||||||
|
{Opm::ParseContext::PARSE_MISSING_DIMS_KEYWORD, Opm::InputError::WARN},
|
||||||
|
{Opm::ParseContext::SUMMARY_UNKNOWN_WELL, Opm::InputError::WARN},
|
||||||
|
{Opm::ParseContext::SUMMARY_UNKNOWN_GROUP, Opm::InputError::WARN}});
|
||||||
|
Opm::ErrorGuard errorGuard;
|
||||||
|
outputMode = setupLogging(mpiRank,
|
||||||
|
deckFilename,
|
||||||
|
EWOMS_GET_PARAM(PreTypeTag, std::string, OutputDir),
|
||||||
|
EWOMS_GET_PARAM(PreTypeTag, std::string, OutputMode),
|
||||||
|
outputCout, "STDOUT_LOGGER");
|
||||||
|
|
||||||
|
if (EWOMS_GET_PARAM(PreTypeTag, bool, EclStrictParsing))
|
||||||
|
parseContext.update( Opm::InputError::DELAYED_EXIT1);
|
||||||
|
|
||||||
|
Opm::FlowMainEbos<PreTypeTag>::printPRTHeader(outputCout);
|
||||||
|
|
||||||
|
deck_.reset( new Opm::Deck( parser.parseFile(deckFilename , parseContext, errorGuard)));
|
||||||
|
Opm::MissingFeatures::checkKeywords(*deck_, parseContext, errorGuard);
|
||||||
|
if ( outputCout )
|
||||||
|
Opm::checkDeck(*deck_, parser, parseContext, errorGuard);
|
||||||
|
|
||||||
|
eclipseState_.reset( new Opm::EclipseState(*deck_, parseContext, errorGuard ));
|
||||||
|
schedule_.reset(new Opm::Schedule(*deck_, *eclipseState_, parseContext, errorGuard));
|
||||||
|
summaryConfig_.reset( new Opm::SummaryConfig(*deck_, *schedule_, eclipseState_->getTableManager(), parseContext, errorGuard));
|
||||||
|
if (mpiRank == 0) {
|
||||||
|
setupMessageLimiter(schedule_->getMessageLimits(), "STDOUT_LOGGER");
|
||||||
|
}
|
||||||
|
|
||||||
|
Opm::checkConsistentArrayDimensions(*eclipseState_, *schedule_, parseContext, errorGuard);
|
||||||
|
|
||||||
|
if (errorGuard) {
|
||||||
|
errorGuard.dump();
|
||||||
|
errorGuard.clear();
|
||||||
|
|
||||||
|
throw std::runtime_error("Unrecoverable errors were encountered while loading input.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const auto& phases = Opm::Runspec(*deck_).phases();
|
const auto& phases = Opm::Runspec(*deck_).phases();
|
||||||
bool outputFiles = (outputMode != FileOutputMode::OUTPUT_NONE);
|
bool outputFiles = (outputMode != FileOutputMode::OUTPUT_NONE);
|
||||||
@@ -364,7 +432,7 @@ private:
|
|||||||
PYBIND11_MODULE(simulators, m)
|
PYBIND11_MODULE(simulators, m)
|
||||||
{
|
{
|
||||||
py::class_<BlackOilSimulator>(m, "BlackOilSimulator")
|
py::class_<BlackOilSimulator>(m, "BlackOilSimulator")
|
||||||
.def(py::init<>())
|
.def(py::init< const std::string& >())
|
||||||
.def(py::init< const Opm::Deck&, const Opm::EclipseState&, const Opm::Schedule&, const Opm::SummaryConfig& >())
|
.def(py::init< const Opm::Deck&, const Opm::EclipseState&, const Opm::Schedule&, const Opm::SummaryConfig& >())
|
||||||
.def("run", &BlackOilSimulator::run)
|
.def("run", &BlackOilSimulator::run)
|
||||||
.def("setDeck", &BlackOilSimulator::setDeck)
|
.def("setDeck", &BlackOilSimulator::setDeck)
|
||||||
|
|||||||
Reference in New Issue
Block a user