/* 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_BASE_SIMULATOR_HEADER_INCLUDED #define OPM_PY_BASE_SIMULATOR_HEADER_INCLUDED #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Opm::Pybind { template class PyBaseSimulator { private: using Simulator = Opm::GetPropType; public: PyBaseSimulator(const std::string& deckFilename, const std::vector& args); PyBaseSimulator(std::shared_ptr deck, std::shared_ptr state, std::shared_ptr schedule, std::shared_ptr summary_config, const std::vector& args); 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(); protected: 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; // NOTE: the main_ pointer *must* be declared before the flow_main_ pointer // to ensure that it is destroyed before the main object since the main object // destructor will call MPI_Finalize() and flow_main_ object destructor will call // MPI_Comm_free(). 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_; std::vector args_; }; // class PyBaseSimulator } // namespace Opm::Pybind #include #endif // OPM_PY_BASE_SIMULATOR_HEADER_INCLUDED