diff --git a/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp b/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp index 7758f824e..7e59ba071 100644 --- a/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp +++ b/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp @@ -20,6 +20,8 @@ #ifndef OPM_FOAMCONFIG_HPP #define OPM_FOAMCONFIG_HPP +#include + #include #include @@ -63,13 +65,23 @@ private: class FoamConfig { public: + enum class MobilityModel { + INVALID, + TAB + }; + FoamConfig() = default; explicit FoamConfig(const Deck&); - FoamConfig(const std::vector& data); + FoamConfig(const std::vector& data, + Phase transport_phase, + MobilityModel mobility_model); const FoamData& getRecord(std::size_t index) const; const std::vector& records() const; + Opm::Phase getTransportPhase() const; + MobilityModel getMobilityModel() const; + std::size_t size() const; bool empty() const; @@ -81,6 +93,8 @@ public: private: std::vector data_; + Phase transport_phase_ = Phase::GAS; + MobilityModel mobility_model_ = MobilityModel::INVALID; }; } // end namespace Opm diff --git a/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp b/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp index 64748e705..15ded8df1 100644 --- a/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp @@ -131,11 +131,9 @@ FoamConfig::FoamConfig(const Deck& deck) // setup for foam at this point, so we detect and deal with it here even though we // do not store any data related to it. const auto& kw_foamopts = deck.getKeyword(); - if (kw_foamopts.getRecord(0).getItem(0).get(0) != "GAS") { - throw std::runtime_error("In FOAMOPTS, only the GAS transport phase is supported."); - } - if (kw_foamopts.getRecord(0).getItem(1).get(0) != "TAB") { - throw std::runtime_error("In FOAMOPTS, only the TAB gas mobility reduction model is supported."); + transport_phase_ = get_phase(kw_foamopts.getRecord(0).getItem(0).get(0)); + if (kw_foamopts.getRecord(0).getItem(1).get(0) == "TAB") { + mobility_model_ = MobilityModel::TAB; } } if (deck.hasKeyword()) { @@ -161,8 +159,12 @@ FoamConfig::FoamConfig(const Deck& deck) } } -FoamConfig::FoamConfig(const std::vector& data) +FoamConfig::FoamConfig(const std::vector& data, + Phase transport_phase, + MobilityModel mobility_model) : data_(data) + , transport_phase_(transport_phase) + , mobility_model_(mobility_model) { } @@ -202,10 +204,24 @@ FoamConfig::end() const return this->data_.end(); } +Phase +FoamConfig::getTransportPhase() const +{ + return this->transport_phase_; +} + +FoamConfig::MobilityModel +FoamConfig::getMobilityModel() const +{ + return this->mobility_model_; +} + bool FoamConfig::operator==(const FoamConfig& data) const { - return data_ == data.data_; + return transport_phase_ == data.transport_phase_ && + mobility_model_ == data.mobility_model_ && + data_ == data.data_; } } // namespace Opm