diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index 932195dcd..4f4a771e7 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -47,7 +47,7 @@ if(ENABLE_ECL_INPUT) src/opm/parser/eclipse/Deck/DeckKeyword.cpp src/opm/parser/eclipse/Deck/DeckRecord.cpp src/opm/parser/eclipse/Deck/DeckOutput.cpp - src/opm/parser/eclipse/Deck/Section.cpp + src/opm/parser/eclipse/Deck/DeckSection.cpp src/opm/parser/eclipse/Deck/UDAValue.cpp src/opm/parser/eclipse/Python/Python.cpp src/opm/parser/eclipse/EclipseState/AquiferCT.cpp @@ -665,7 +665,7 @@ if(ENABLE_ECL_INPUT) opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp opm/parser/eclipse/Deck/DeckItem.hpp opm/parser/eclipse/Deck/Deck.hpp - opm/parser/eclipse/Deck/Section.hpp + opm/parser/eclipse/Deck/DeckSection.hpp opm/parser/eclipse/Deck/DeckOutput.hpp opm/parser/eclipse/Deck/DeckValue.hpp opm/parser/eclipse/Deck/DeckKeyword.hpp diff --git a/opm/parser/eclipse/Deck/Section.hpp b/opm/parser/eclipse/Deck/DeckSection.hpp similarity index 54% rename from opm/parser/eclipse/Deck/Section.hpp rename to opm/parser/eclipse/Deck/DeckSection.hpp index 9054bab00..a626ff0d7 100644 --- a/opm/parser/eclipse/Deck/Section.hpp +++ b/opm/parser/eclipse/Deck/DeckSection.hpp @@ -26,14 +26,26 @@ namespace Opm { +enum class Section { + RUNSPEC, + GRID, + EDIT, + PROPS, + REGIONS, + SOLUTION, + SUMMARY, + SCHEDULE +}; + class UnitSystem; class Parser; -class Section : public DeckView { + +class DeckSection : public DeckView { public: using DeckView::const_iterator; - Section( const Deck& deck, const std::string& startKeyword ); + DeckSection( const Deck& deck, const std::string& startKeyword ); const std::string& name() const; const UnitSystem& unitSystem() const; @@ -58,52 +70,52 @@ class Section : public DeckView { }; - class RUNSPECSection : public Section { + class RUNSPECSection : public DeckSection { public: - using Section::const_iterator; - explicit RUNSPECSection(const Deck& deck) : Section(deck, "RUNSPEC") {} + using DeckSection::const_iterator; + explicit RUNSPECSection(const Deck& deck) : DeckSection(deck, "RUNSPEC") {} }; - class GRIDSection : public Section { + class GRIDSection : public DeckSection { public: - using Section::const_iterator; - explicit GRIDSection(const Deck& deck) : Section(deck, "GRID") {} + using DeckSection::const_iterator; + explicit GRIDSection(const Deck& deck) : DeckSection(deck, "GRID") {} }; - class EDITSection : public Section { + class EDITSection : public DeckSection { public: - using Section::const_iterator; - explicit EDITSection(const Deck& deck) : Section(deck, "EDIT") {} + using DeckSection::const_iterator; + explicit EDITSection(const Deck& deck) : DeckSection(deck, "EDIT") {} }; - class PROPSSection : public Section { + class PROPSSection : public DeckSection { public: - using Section::const_iterator; - explicit PROPSSection(const Deck& deck) : Section(deck, "PROPS") {} + using DeckSection::const_iterator; + explicit PROPSSection(const Deck& deck) : DeckSection(deck, "PROPS") {} }; - class REGIONSSection : public Section { + class REGIONSSection : public DeckSection { public: - using Section::const_iterator; - explicit REGIONSSection(const Deck& deck) : Section(deck, "REGIONS") {} + using DeckSection::const_iterator; + explicit REGIONSSection(const Deck& deck) : DeckSection(deck, "REGIONS") {} }; - class SOLUTIONSection : public Section { + class SOLUTIONSection : public DeckSection { public: - using Section::const_iterator; - explicit SOLUTIONSection(const Deck& deck) : Section(deck, "SOLUTION") {} + using DeckSection::const_iterator; + explicit SOLUTIONSection(const Deck& deck) : DeckSection(deck, "SOLUTION") {} }; - class SUMMARYSection : public Section { + class SUMMARYSection : public DeckSection { public: - using Section::const_iterator; - explicit SUMMARYSection(const Deck& deck) : Section(deck, "SUMMARY") {} + using DeckSection::const_iterator; + explicit SUMMARYSection(const Deck& deck) : DeckSection(deck, "SUMMARY") {} }; - class SCHEDULESection : public Section { + class SCHEDULESection : public DeckSection { public: - using Section::const_iterator; - explicit SCHEDULESection(const Deck& deck) : Section(deck, "SCHEDULE") {} + using DeckSection::const_iterator; + explicit SCHEDULESection(const Deck& deck) : DeckSection(deck, "SCHEDULE") {} }; } diff --git a/opm/parser/eclipse/EclipseState/Eclipse3DProperties.hpp b/opm/parser/eclipse/EclipseState/Eclipse3DProperties.hpp index 13d7090f2..d86d38655 100644 --- a/opm/parser/eclipse/EclipseState/Eclipse3DProperties.hpp +++ b/opm/parser/eclipse/EclipseState/Eclipse3DProperties.hpp @@ -39,7 +39,7 @@ namespace Opm { class DeckKeyword; class DeckRecord; class EclipseGrid; - class Section; + class DeckSection; class TableManager; class UnitSystem; @@ -76,7 +76,7 @@ namespace Opm { void processGridProperties(const Deck& deck, const EclipseGrid& eclipseGrid); - void scanSection(const Section& section, + void scanSection(const DeckSection& section, const EclipseGrid& eclipseGrid, bool edit_section); diff --git a/opm/parser/eclipse/EclipseState/EclipseState.hpp b/opm/parser/eclipse/EclipseState/EclipseState.hpp index 42928033d..e0c9eb39c 100644 --- a/opm/parser/eclipse/EclipseState/EclipseState.hpp +++ b/opm/parser/eclipse/EclipseState/EclipseState.hpp @@ -55,7 +55,7 @@ namespace Opm { class IOConfig; class ParseContext; class RestartConfig; - class Section; + class DeckSection; class SimulationConfig; class TableManager; class UnitSystem; @@ -120,7 +120,7 @@ namespace Opm { void initTransMult(); void initFaults(const Deck& deck); - void setMULTFLT(const Opm::Section& section); + void setMULTFLT(const Opm::DeckSection& section); void complainAboutAmbiguousKeyword(const Deck& deck, const std::string& keywordName); diff --git a/opm/parser/eclipse/EclipseState/Grid/GridProperties.hpp b/opm/parser/eclipse/EclipseState/Grid/GridProperties.hpp index 4582e516e..db3c147c6 100644 --- a/opm/parser/eclipse/EclipseState/Grid/GridProperties.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/GridProperties.hpp @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include diff --git a/src/opm/parser/eclipse/Deck/Deck.cpp b/src/opm/parser/eclipse/Deck/Deck.cpp index c14d7c7f0..cb0aa4e5c 100644 --- a/src/opm/parser/eclipse/Deck/Deck.cpp +++ b/src/opm/parser/eclipse/Deck/Deck.cpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include namespace Opm { diff --git a/src/opm/parser/eclipse/Deck/Section.cpp b/src/opm/parser/eclipse/Deck/DeckSection.cpp similarity index 69% rename from src/opm/parser/eclipse/Deck/Section.cpp rename to src/opm/parser/eclipse/Deck/DeckSection.cpp index e1aa3113d..c185c0fa2 100644 --- a/src/opm/parser/eclipse/Deck/Section.cpp +++ b/src/opm/parser/eclipse/Deck/DeckSection.cpp @@ -26,7 +26,7 @@ #include #include -#include +#include namespace Opm { @@ -59,27 +59,27 @@ namespace Opm { return { first, last }; } - Section::Section( const Deck& deck, const std::string& section ) + DeckSection::DeckSection( const Deck& deck, const std::string& section ) : DeckView( find_section( deck, section ) ), section_name( section ), units( deck.getActiveUnitSystem() ) {} - const std::string& Section::name() const { + const std::string& DeckSection::name() const { return this->section_name; } - const UnitSystem& Section::unitSystem() const { + const UnitSystem& DeckSection::unitSystem() const { return this->units; } - bool Section::hasRUNSPEC(const Deck& deck) { return deck.hasKeyword( "RUNSPEC" ); } - bool Section::hasGRID(const Deck& deck) { return deck.hasKeyword( "GRID" ); } - bool Section::hasEDIT(const Deck& deck) { return deck.hasKeyword( "EDIT" ); } - bool Section::hasPROPS(const Deck& deck) { return deck.hasKeyword( "PROPS" ); } - bool Section::hasREGIONS(const Deck& deck) { return deck.hasKeyword( "REGIONS" ); } - bool Section::hasSOLUTION(const Deck& deck) { return deck.hasKeyword( "SOLUTION" ); } - bool Section::hasSUMMARY(const Deck& deck) { return deck.hasKeyword( "SUMMARY" ); } - bool Section::hasSCHEDULE(const Deck& deck) { return deck.hasKeyword( "SCHEDULE" ); } + bool DeckSection::hasRUNSPEC(const Deck& deck) { return deck.hasKeyword( "RUNSPEC" ); } + bool DeckSection::hasGRID(const Deck& deck) { return deck.hasKeyword( "GRID" ); } + bool DeckSection::hasEDIT(const Deck& deck) { return deck.hasKeyword( "EDIT" ); } + bool DeckSection::hasPROPS(const Deck& deck) { return deck.hasKeyword( "PROPS" ); } + bool DeckSection::hasREGIONS(const Deck& deck) { return deck.hasKeyword( "REGIONS" ); } + bool DeckSection::hasSOLUTION(const Deck& deck) { return deck.hasKeyword( "SOLUTION" ); } + bool DeckSection::hasSUMMARY(const Deck& deck) { return deck.hasKeyword( "SUMMARY" ); } + bool DeckSection::hasSCHEDULE(const Deck& deck) { return deck.hasKeyword( "SCHEDULE" ); } } diff --git a/src/opm/parser/eclipse/EclipseState/Eclipse3DProperties.cpp b/src/opm/parser/eclipse/EclipseState/Eclipse3DProperties.cpp index 7db039408..b23fae22e 100644 --- a/src/opm/parser/eclipse/EclipseState/Eclipse3DProperties.cpp +++ b/src/opm/parser/eclipse/EclipseState/Eclipse3DProperties.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include #include @@ -768,25 +768,25 @@ namespace Opm { void Eclipse3DProperties::processGridProperties( const Deck& deck, const EclipseGrid& eclipseGrid) { - if (Section::hasGRID(deck)) + if (DeckSection::hasGRID(deck)) scanSection(GRIDSection(deck), eclipseGrid, false); - if (Section::hasREGIONS(deck)) + if (DeckSection::hasREGIONS(deck)) scanSection(REGIONSSection(deck), eclipseGrid, false); - if (Section::hasEDIT(deck)) + if (DeckSection::hasEDIT(deck)) scanSection(EDITSection(deck), eclipseGrid, true); - if (Section::hasPROPS(deck)) + if (DeckSection::hasPROPS(deck)) scanSection(PROPSSection(deck), eclipseGrid, false); - if (Section::hasSOLUTION(deck)) + if (DeckSection::hasSOLUTION(deck)) scanSection(SOLUTIONSection(deck), eclipseGrid, false); } - void Eclipse3DProperties::scanSection(const Section& section, + void Eclipse3DProperties::scanSection(const DeckSection& section, const EclipseGrid& eclipseGrid, bool edit_section) { BoxManager boxManager(eclipseGrid); diff --git a/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp b/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp index e73484f2c..3aa1edf81 100644 --- a/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/EclipseState.cpp b/src/opm/parser/eclipse/EclipseState/EclipseState.cpp index 1cf069d63..03aa715a1 100644 --- a/src/opm/parser/eclipse/EclipseState/EclipseState.cpp +++ b/src/opm/parser/eclipse/EclipseState/EclipseState.cpp @@ -23,7 +23,7 @@ #include -#include +#include #include #include #include @@ -320,7 +320,7 @@ void assert_field_properties(const EclipseGrid& grid, const FieldPropsManager& f } void EclipseState::initFaults(const Deck& deck) { - if (!Section::hasGRID(deck)) + if (!DeckSection::hasGRID(deck)) return; const GRIDSection gridSection ( deck ); @@ -328,7 +328,7 @@ void assert_field_properties(const EclipseGrid& grid, const FieldPropsManager& f m_faults = FaultCollection(gridSection, m_inputGrid); setMULTFLT(gridSection); - if (Section::hasEDIT(deck)) { + if (DeckSection::hasEDIT(deck)) { setMULTFLT(EDITSection ( deck )); } @@ -337,7 +337,7 @@ void assert_field_properties(const EclipseGrid& grid, const FieldPropsManager& f - void EclipseState::setMULTFLT(const Section& section) { + void EclipseState::setMULTFLT(const DeckSection& section) { for (size_t index=0; index < section.count("MULTFLT"); index++) { const auto& faultsKeyword = section.getKeyword("MULTFLT" , index); for (auto iter = faultsKeyword.begin(); iter != faultsKeyword.end(); ++iter) { diff --git a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp index ab1f315fa..ccbba1a3f 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp b/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp index 2feb6c17f..ec311a6d7 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp index 063606a17..ff645eecf 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp @@ -65,6 +65,8 @@ static const std::map unit_string = {{"PERMX", "Permea {"THCGAS", "Energy/AnsoluteTemperature*Length*Time"}, {"THCWATER", "Energy/AnsoluteTemperature*Length*Time"}}; +static const std::set multiplier_keywords = {"MULTX", "MULTX-", "MULTY-", "MULTY", "MULTZ", "MULTZ-"}; + static const std::set oper_keywords = {"ADD", "EQUALS", "MAXVALUE", "MINVALUE", "MULTIPLY", "OPERATE"}; static const std::set region_oper_keywords = {"ADDREG", "EQUALREG", "OPERATER"}; static const std::set box_keywords = {"BOX", "ENDBOX"}; @@ -229,19 +231,21 @@ std::string default_region_keyword(const Deck& deck) { return "FLUXNUM"; } +template +void verify_deck_data(const DeckKeyword& keyword, const std::vector& deck_data, const Box& box) { + if (box.size() != deck_data.size()) { + const auto& location = keyword.location(); + std::string msg = "Fundamental error with keyword: " + keyword.name() + + " at: " + location.filename + ", line: " + std::to_string(location.lineno) + + " got " + std::to_string(deck_data.size()) + " elements - expected : " + std::to_string(box.size()); + throw std::invalid_argument(msg); + } +} template void assign_deck(const DeckKeyword& keyword, FieldProps::FieldData& field_data, const std::vector& deck_data, const std::vector& deck_status, const Box& box) { - if (box.size() != deck_data.size()) { - const auto& location = keyword.location(); - std::string msg = "Fundamental error with keyword: " + keyword.name() + - " at: " + location.filename + ", line: " + std::to_string(location.lineno) + - " got " + std::to_string(deck_data.size()) + " elements - expected : " + std::to_string(box.size()); - throw std::invalid_argument(msg); - } - - + verify_deck_data(keyword, deck_data, box); for (const auto& cell_index : box.index_list()) { auto active_index = cell_index.active_index; auto data_index = cell_index.data_index; @@ -255,6 +259,22 @@ void assign_deck(const DeckKeyword& keyword, FieldProps::FieldData& field_dat } } + +template +void multiply_deck(const DeckKeyword& keyword, FieldProps::FieldData& field_data, const std::vector& deck_data, const std::vector& deck_status, const Box& box) { + verify_deck_data(keyword, deck_data, box); + for (const auto& cell_index : box.index_list()) { + auto active_index = cell_index.active_index; + auto data_index = cell_index.data_index; + + if (value::has_value(deck_status[data_index]) && value::has_value(field_data.value_status[active_index])) { + field_data.data[active_index] *= deck_data[data_index]; + field_data.value_status[active_index] = deck_status[data_index]; + } + } +} + + template void distribute_toplayer(const EclipseGrid& grid, FieldProps::FieldData& field_data, const std::vector& deck_data, const Box& box) { const std::size_t layer_size = grid.getNX() * grid.getNY(); @@ -421,19 +441,19 @@ FieldProps::FieldProps(const Deck& deck, const EclipseGrid& grid, const TableMan } - if (Section::hasGRID(deck)) + if (DeckSection::hasGRID(deck)) this->scanGRIDSection(GRIDSection(deck)); - if (Section::hasEDIT(deck)) + if (DeckSection::hasEDIT(deck)) this->scanEDITSection(EDITSection(deck)); - if (Section::hasREGIONS(deck)) + if (DeckSection::hasREGIONS(deck)) this->scanREGIONSSection(REGIONSSection(deck)); - if (Section::hasPROPS(deck)) + if (DeckSection::hasPROPS(deck)) this->scanPROPSSection(PROPSSection(deck)); - if (Section::hasSOLUTION(deck)) + if (DeckSection::hasSOLUTION(deck)) this->scanSOLUTIONSection(SOLUTIONSection(deck)); } @@ -705,24 +725,24 @@ void FieldProps::handle_int_keyword(const DeckKeyword& keyword, const Box& box) } -void FieldProps::handle_double_keyword(const DeckKeyword& keyword, const Box& box) { +void FieldProps::handle_double_keyword(Section section, const DeckKeyword& keyword, const Box& box) { auto& field_data = this->init_get(keyword.name()); const auto& deck_data = keyword.getSIDoubleData(); const auto& deck_status = keyword.getValueStatus(); - assign_deck(keyword, field_data, deck_data, deck_status, box); -} + + if (section == Section::EDIT && keywords::multiplier_keywords.count(keyword.name()) == 1) + multiply_deck(keyword, field_data, deck_data, deck_status, box); + else + assign_deck(keyword, field_data, deck_data, deck_status, box); -void FieldProps::handle_grid_section_double_keyword(const DeckKeyword& keyword, const Box& box) { - auto& field_data = this->init_get(keyword.name()); - const auto& deck_data = keyword.getSIDoubleData(); - const auto& deck_status = keyword.getValueStatus(); - assign_deck(keyword, field_data, deck_data, deck_status, box); - if (field_data.valid()) - return; + if (section == Section::GRID) { + if (field_data.valid()) + return; - if (keywords::GRID::top_keywords.count(keyword.name()) == 1) - this->distribute_toplayer(field_data, deck_data, box); + if (keywords::GRID::top_keywords.count(keyword.name()) == 1) + this->distribute_toplayer(field_data, deck_data, box); + } } @@ -997,7 +1017,7 @@ void FieldProps::scanGRIDSection(const GRIDSection& grid_section) { const std::string& name = keyword.name(); if (keywords::GRID::double_keywords.count(name) == 1) { - this->handle_grid_section_double_keyword(keyword, box); + this->handle_double_keyword(Section::GRID, keyword, box); continue; } @@ -1015,7 +1035,7 @@ void FieldProps::scanEDITSection(const EDITSection& edit_section) { for (const auto& keyword : edit_section) { const std::string& name = keyword.name(); if (keywords::EDIT::double_keywords.count(name) == 1) { - this->handle_double_keyword(keyword, box); + this->handle_double_keyword(Section::EDIT, keyword, box); continue; } @@ -1065,12 +1085,12 @@ void FieldProps::scanPROPSSection(const PROPSSection& props_section) { for (const auto& keyword : props_section) { const std::string& name = keyword.name(); if (keywords::PROPS::satfunc.count(name) == 1) { - this->handle_double_keyword(keyword, box); + this->handle_double_keyword(Section::PROPS, keyword, box); continue; } if (keywords::PROPS::double_keywords.count(name) == 1) { - this->handle_double_keyword(keyword, box); + this->handle_double_keyword(Section::PROPS, keyword, box); continue; } @@ -1104,7 +1124,7 @@ void FieldProps::scanSOLUTIONSection(const SOLUTIONSection& solution_section) { for (const auto& keyword : solution_section) { const std::string& name = keyword.name(); if (keywords::SOLUTION::double_keywords.count(name) == 1) { - this->handle_double_keyword(keyword, box); + this->handle_double_keyword(Section::SOLUTION, keyword, box); continue; } @@ -1117,7 +1137,7 @@ void FieldProps::scanSCHEDULESection(const SCHEDULESection& schedule_section) { for (const auto& keyword : schedule_section) { const std::string& name = keyword.name(); if (keywords::SCHEDULE::double_keywords.count(name) == 1) { - this->handle_double_keyword(keyword, box); + this->handle_double_keyword(Section::SCHEDULE, keyword, box); continue; } diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp index 5cb746792..116102c9d 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include @@ -345,8 +345,7 @@ private: void distribute_toplayer(FieldProps::FieldData& field_data, const std::vector& deck_data, const Box& box); void handle_keyword(const DeckKeyword& keyword, Box& box); - void handle_grid_section_double_keyword(const DeckKeyword& keyword, const Box& box); - void handle_double_keyword(const DeckKeyword& keyword, const Box& box); + void handle_double_keyword(Section section, const DeckKeyword& keyword, const Box& box); void handle_int_keyword(const DeckKeyword& keyword, const Box& box); void init_satfunc(const std::string& keyword, FieldData& satfunc); void init_porv(FieldData& porv); diff --git a/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp b/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp index d080a7ba6..7c88958a3 100644 --- a/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp b/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp index a1958fc9c..06855ed5b 100644 --- a/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp b/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp index 6798ab002..9082c67a7 100644 --- a/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp index e48cf0e9f..d7ece3824 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include #include @@ -150,7 +150,7 @@ namespace { handleMESSAGES(keyword, 0); } - if (Section::hasSCHEDULE(deck)) + if (DeckSection::hasSCHEDULE(deck)) iterateScheduleSection( parseContext, errors, SCHEDULESection( deck ), grid, fp, eclipseProperties ); } diff --git a/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp b/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp index 98dabbd63..3df244a88 100644 --- a/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include #include @@ -63,7 +63,7 @@ namespace Opm { m_VAPOIL(false), m_isThermal(false) { - if (Section::hasRUNSPEC(deck)) { + if (DeckSection::hasRUNSPEC(deck)) { const RUNSPECSection runspec(deck); if (runspec.hasKeyword()) { const auto& cpr = runspec.getKeyword(); diff --git a/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp b/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp index ecb5515a3..bbdcdb91f 100644 --- a/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp +++ b/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include @@ -45,7 +45,7 @@ namespace Opm { m_restart(restart) { - if( !Section::hasRUNSPEC( deck ) || (!Section::hasSOLUTION( deck ) && !Section::hasGRID( deck )) ) + if( !DeckSection::hasRUNSPEC( deck ) || (!DeckSection::hasSOLUTION( deck ) && !DeckSection::hasGRID( deck )) ) return; RUNSPECSection runspecSection( deck ); diff --git a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp index 1f502dae0..786f58c75 100644 --- a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/opm/parser/eclipse/EclipseState/checkDeck.cpp b/src/opm/parser/eclipse/EclipseState/checkDeck.cpp index 38f534e8b..034dcaee9 100644 --- a/src/opm/parser/eclipse/EclipseState/checkDeck.cpp +++ b/src/opm/parser/eclipse/EclipseState/checkDeck.cpp @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include #include @@ -48,7 +48,7 @@ bool checkDeck( const Deck& deck, const Parser& parser, const ParseContext& pars // make sure all mandatory sections are present and that their order is correct if (enabledChecks & SectionTopology) { bool ensureKeywordSection = enabledChecks & KeywordSection; - deckValid = deckValid && Section::checkSectionTopology(deck, parser, ensureKeywordSection); + deckValid = deckValid && DeckSection::checkSectionTopology(deck, parser, ensureKeywordSection); } const std::string& deckUnitSystem = boost::to_upper_copy(deck.getActiveUnitSystem().getName()); diff --git a/src/opm/parser/eclipse/Parser/Parser.cpp b/src/opm/parser/eclipse/Parser/Parser.cpp index 5b04d4098..67a4c2f39 100644 --- a/src/opm/parser/eclipse/Parser/Parser.cpp +++ b/src/opm/parser/eclipse/Parser/Parser.cpp @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -1195,9 +1195,9 @@ std::vector Parser::getAllDeckNames () const { return false; } - bool Section::checkSectionTopology(const Deck& deck, - const Parser& parser, - bool ensureKeywordSectionAffiliation) + bool DeckSection::checkSectionTopology(const Deck& deck, + const Parser& parser, + bool ensureKeywordSectionAffiliation) { if( deck.size() == 0 ) { std::string msg = "empty decks are invalid\n"; diff --git a/tests/parser/ADDREGTests.cpp b/tests/parser/ADDREGTests.cpp index fce718900..6208f3b0b 100644 --- a/tests/parser/ADDREGTests.cpp +++ b/tests/parser/ADDREGTests.cpp @@ -30,7 +30,6 @@ #include -#include #include #include diff --git a/tests/parser/CopyRegTests.cpp b/tests/parser/CopyRegTests.cpp index c61ff2c66..8e67a5373 100644 --- a/tests/parser/CopyRegTests.cpp +++ b/tests/parser/CopyRegTests.cpp @@ -29,7 +29,7 @@ #include -#include +#include #include #include diff --git a/tests/parser/EclipseGridTests.cpp b/tests/parser/EclipseGridTests.cpp index 983cae109..a2b77d885 100644 --- a/tests/parser/EclipseGridTests.cpp +++ b/tests/parser/EclipseGridTests.cpp @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include diff --git a/tests/parser/EqualRegTests.cpp b/tests/parser/EqualRegTests.cpp index 4d82fd853..96ba5fd30 100644 --- a/tests/parser/EqualRegTests.cpp +++ b/tests/parser/EqualRegTests.cpp @@ -29,7 +29,7 @@ #include -#include +#include #include #include diff --git a/tests/parser/FieldPropsTests.cpp b/tests/parser/FieldPropsTests.cpp index 530ea7db9..6304a2d01 100644 --- a/tests/parser/FieldPropsTests.cpp +++ b/tests/parser/FieldPropsTests.cpp @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include #include @@ -555,3 +555,33 @@ RTEMPVD BOOST_CHECK_CLOSE( tempi[0], 0 + celcius_offset , 1e-6); BOOST_CHECK_CLOSE( tempi[1], 100 + celcius_offset , 1e-6); } + +BOOST_AUTO_TEST_CASE(GridAndEdit) { + const std::string deck_string = R"( +RUNSPEC + +GRID +MULTZ + 125*2 / +MULTX + 125*2 / +MULTX + 125*2 / +PORO + 125*0.15 / +EDIT +MULTZ + 125*2 / +)"; + + Opm::Parser parser; + Opm::Deck deck = parser.parseString(deck_string); + Opm::EclipseGrid grid(5,5,5); + Opm::TableManager tm(deck); + FieldPropsManager fpm(deck, grid, tm); + + const auto& multz = fpm.get("MULTZ"); + const auto& multx = fpm.get("MULTX"); + BOOST_CHECK_EQUAL( multz[0], 4 ); + BOOST_CHECK_EQUAL( multx[0], 2 ); +} diff --git a/tests/parser/GridPropertyTests.cpp b/tests/parser/GridPropertyTests.cpp index 5e0f605bb..fe482cc24 100644 --- a/tests/parser/GridPropertyTests.cpp +++ b/tests/parser/GridPropertyTests.cpp @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include diff --git a/tests/parser/MULTREGTScannerTests.cpp b/tests/parser/MULTREGTScannerTests.cpp index 765b585ff..17d49e326 100644 --- a/tests/parser/MULTREGTScannerTests.cpp +++ b/tests/parser/MULTREGTScannerTests.cpp @@ -27,7 +27,7 @@ #include -#include +#include #include #include diff --git a/tests/parser/MultiRegTests.cpp b/tests/parser/MultiRegTests.cpp index 9c0aaf630..55158c850 100644 --- a/tests/parser/MultiRegTests.cpp +++ b/tests/parser/MultiRegTests.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include #include diff --git a/tests/parser/PORVTests.cpp b/tests/parser/PORVTests.cpp index 91e4c7777..1cdde753c 100644 --- a/tests/parser/PORVTests.cpp +++ b/tests/parser/PORVTests.cpp @@ -28,7 +28,7 @@ #include -#include +#include #include #include #include diff --git a/tests/parser/ResinsightTest.cpp b/tests/parser/ResinsightTest.cpp index 6cb27715f..75136dbc8 100644 --- a/tests/parser/ResinsightTest.cpp +++ b/tests/parser/ResinsightTest.cpp @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include #include diff --git a/tests/parser/SectionTests.cpp b/tests/parser/SectionTests.cpp index 53f4a0fa2..58f6c35b3 100644 --- a/tests/parser/SectionTests.cpp +++ b/tests/parser/SectionTests.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include @@ -44,8 +44,8 @@ BOOST_AUTO_TEST_CASE(SectionTest) { deck.addKeyword( DeckKeyword(parser.getKeyword("SCHEDULE"))); deck.addKeyword( DeckKeyword(parser.getKeyword("WELSPECS"))); - Section runspecSection(deck, "RUNSPEC"); - Section gridSection(deck, "GRID"); + DeckSection runspecSection(deck, "RUNSPEC"); + DeckSection gridSection(deck, "GRID"); BOOST_CHECK(runspecSection.hasKeyword("WELLDIMS")); BOOST_CHECK(gridSection.hasKeyword("PORO")); @@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE(IteratorTest) { deck.addKeyword( DeckKeyword(parser.getKeyword("WELLDIMS"))); deck.addKeyword( DeckKeyword(parser.getKeyword("TABDIMS"))); deck.addKeyword( DeckKeyword(parser.getKeyword("GRID"))); - Section section(deck, "RUNSPEC"); + DeckSection section(deck, "RUNSPEC"); int numberOfItems = 0; for (auto iter=section.begin(); iter != section.end(); ++iter) { @@ -209,8 +209,8 @@ BOOST_AUTO_TEST_CASE(SCHEDULESection_NotTerminated) { BOOST_CHECK_EQUAL(true, section.hasKeyword("COMPDAT")); BOOST_CHECK_EQUAL(true, section.hasKeyword("WCONHIST")); - BOOST_CHECK( Section::hasSCHEDULE(deck )); - BOOST_CHECK( !Section::hasREGIONS(deck )); + BOOST_CHECK( DeckSection::hasSCHEDULE(deck )); + BOOST_CHECK( !DeckSection::hasREGIONS(deck )); } BOOST_AUTO_TEST_CASE(Section_ValidDecks) { @@ -230,7 +230,7 @@ BOOST_AUTO_TEST_CASE(Section_ValidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK( Opm::Section::checkSectionTopology( parser.parseString( minimal, mode, errors ), parser) ); + BOOST_CHECK( Opm::DeckSection::checkSectionTopology( parser.parseString( minimal, mode, errors ), parser) ); const std::string with_opt = "RUNSPEC\n" "TEST1\n" @@ -249,7 +249,7 @@ BOOST_AUTO_TEST_CASE(Section_ValidDecks) { "SCHEDULE\n" "TEST8\n"; - BOOST_CHECK(Opm::Section::checkSectionTopology( parser.parseString( with_opt, mode, errors ), parser)); + BOOST_CHECK(Opm::DeckSection::checkSectionTopology( parser.parseString( with_opt, mode, errors ), parser)); } BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { @@ -271,7 +271,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( keyword_before_RUNSPEC, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( keyword_before_RUNSPEC, mode, errors ), parser)); const std::string wrong_order = "RUNSPEC\n" "TEST1\n" @@ -290,7 +290,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST8\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( wrong_order, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( wrong_order, mode, errors ), parser)); const std::string duplicate = "RUNSPEC\n" "TEST1\n" @@ -311,7 +311,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST8\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( duplicate, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( duplicate, mode, errors ), parser)); const std::string section_after_SCHEDULE = "RUNSPEC\n" "TEST1\n" @@ -330,7 +330,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "EDIT\n" "TEST3\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( section_after_SCHEDULE, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( section_after_SCHEDULE, mode, errors ), parser)); const std::string missing_runspec = "GRID\n" "TEST2\n" @@ -341,7 +341,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( missing_runspec, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_runspec, mode, errors ), parser)); const std::string missing_GRID = "RUNSPEC\n" @@ -353,7 +353,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( missing_GRID, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_GRID, mode, errors ), parser)); const std::string missing_PROPS = "RUNSPEC\n" "TEST1\n" @@ -364,7 +364,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( missing_PROPS, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_PROPS, mode, errors ), parser)); const std::string missing_SOLUTION = "RUNSPEC\n" "TEST1\n" @@ -375,7 +375,7 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SCHEDULE\n" "TEST5\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( missing_SOLUTION, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_SOLUTION, mode, errors ), parser)); const std::string missing_SCHEDULE = "RUNSPEC\n" "TEST1\n" @@ -386,5 +386,5 @@ BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { "SOLUTION\n" "TEST4\n"; - BOOST_CHECK(!Opm::Section::checkSectionTopology( parser.parseString( missing_SCHEDULE, mode, errors ), parser)); + BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_SCHEDULE, mode, errors ), parser)); } diff --git a/tests/parser/SimulationConfigTest.cpp b/tests/parser/SimulationConfigTest.cpp index 415738fa5..c321f3600 100644 --- a/tests/parser/SimulationConfigTest.cpp +++ b/tests/parser/SimulationConfigTest.cpp @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include #include diff --git a/tests/parser/integration/EclipseGridCreateFromDeck.cpp b/tests/parser/integration/EclipseGridCreateFromDeck.cpp index ba330ce1e..13d58a8cd 100644 --- a/tests/parser/integration/EclipseGridCreateFromDeck.cpp +++ b/tests/parser/integration/EclipseGridCreateFromDeck.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include #include