#include "config.h" #include #include #include #include #define FLOW_BLACKOIL_ONLY #include #include #include #include // NOTE: EXIT_SUCCESS, EXIT_FAILURE is defined in cstdlib #include #include #include #include namespace py = pybind11; namespace Opm::Pybind { BlackOilSimulator::BlackOilSimulator( const std::string &deckFilename) : deckFilename_(deckFilename), hasRunInit_(false) { } int BlackOilSimulator::run() { auto mainObject = Opm::Main( deckFilename_ ); return mainObject.runDynamic(); } int BlackOilSimulator::step() { if (!hasRunInit_) { throw std::logic_error("step() called before step_init()"); } return mainEbos_->executeStep(); } int BlackOilSimulator::step_init() { if (hasRunInit_) { // Running step_init() multiple times is not implemented yet, // currently we just do nothing and return return EXIT_SUCCESS; } main_ = std::make_unique( deckFilename_ ); int exitCode = EXIT_SUCCESS; mainEbos_ = main_->initFlowEbosBlackoil(exitCode); if (mainEbos_) { int result = mainEbos_->executeInitStep(); hasRunInit_ = true; return result; } else { return exitCode; } } } // namespace Opm::Python PYBIND11_MODULE(simulators, m) { py::class_(m, "BlackOilSimulator") .def(py::init< const std::string& >()) .def("run", &Opm::Pybind::BlackOilSimulator::run) .def("step", &Opm::Pybind::BlackOilSimulator::step) .def("step_init", &Opm::Pybind::BlackOilSimulator::step_init); }