/* Copyright 2020 Equinor ASA. This file is part of the Open Porous Media project (OPM). OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OPM. If not, see . */ #ifndef OPM_PY_BLACKOIL_SIMULATOR_HEADER_INCLUDED #define OPM_PY_BLACKOIL_SIMULATOR_HEADER_INCLUDED #include #include #include #include #include #include #include #include #include #include namespace Opm::Pybind { class PyBlackOilSimulator { private: using TypeTag = Opm::Properties::TTag::FlowProblemTPFA; using Simulator = Opm::GetPropType; public: PyBlackOilSimulator( const std::string& deckFilename); PyBlackOilSimulator( std::shared_ptr deck, std::shared_ptr state, std::shared_ptr schedule, std::shared_ptr summary_config); void advance(int report_step); bool checkSimulationFinished(); int currentStep(); py::array_t getFluidStateVariable(const std::string &name) const; py::array_t getCellVolumes(); double getDT(); py::array_t getPorosity(); py::array_t getPrimaryVariable(const std::string &variable) const; py::array_t getPrimaryVarMeaning(const std::string &variable) const; std::map getPrimaryVarMeaningMap(const std::string &variable) const; int run(); void setPorosity( py::array_t array); void setPrimaryVariable( const std::string &idx_name, py::array_t array); void setupMpi(bool init_mpi, bool finalize_mpi); int step(); int stepCleanup(); int stepInit(); private: Opm::FlowMain& getFlowMain() const; PyFluidState& getFluidState() const; PyMaterialState& getMaterialState() const; const std::string deck_filename_; bool has_run_init_ = false; bool has_run_cleanup_ = false; bool mpi_init_ = true; bool mpi_finalize_ = true; //bool debug_ = false; // This *must* be declared before other pointers // to simulator objects. This in order to deinitialize // MPI at the correct time (ie after the other objects). std::unique_ptr main_; std::unique_ptr> flow_main_; Simulator* simulator_; std::unique_ptr> fluid_state_; std::unique_ptr> material_state_; std::shared_ptr deck_; std::shared_ptr eclipse_state_; std::shared_ptr schedule_; std::shared_ptr summary_config_; }; } // namespace Opm::Pybind #endif // OPM_PY_BLACKOIL_SIMULATOR_HEADER_INCLUDED