From 99ff9adca52a9ec4efb354319b85f7327a6cffd5 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Fri, 15 Oct 2021 14:09:01 +0200 Subject: [PATCH] Filter out wells from WellTestState --- .../Schedule/Well/WellTestState.hpp | 2 +- .../Schedule/Well/WellTestState.cpp | 8 ++++++++ tests/BASE.UNRST | Bin 0 -> 39912 bytes tests/parser/WTEST.cpp | 8 ++++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/BASE.UNRST diff --git a/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp b/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp index ac4820080..dd0b8e114 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp @@ -195,7 +195,7 @@ public: std::vector test_wells(const WellTestConfig& config, double sim_time); - + void filter_wells(const std::vector& existing_wells); /* The purpose of this container is to manage explicitly *closed wells*, since the class has no relation to the set of of wells defined in the diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp index c3307f6ed..8a9d1b558 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp @@ -110,6 +110,14 @@ namespace Opm { } + void WellTestState::filter_wells(const std::vector& existing_wells) { + std::unordered_set well_set{ existing_wells.begin(), existing_wells.end() }; + for (auto& [wname, test_well] : this->wells) { + if (well_set.count(wname) == 0) + test_well.closed = false; + } + } + size_t WellTestState::num_closed_wells() const { return std::count_if(this->wells.begin(), this->wells.end(), [](const auto& well_pair) { return well_pair.second.closed; }); diff --git a/tests/BASE.UNRST b/tests/BASE.UNRST new file mode 100644 index 0000000000000000000000000000000000000000..7bdf08bdf9def09e4a7e70cda9015c82272d94cc GIT binary patch literal 39912 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 literal 0 HcmV?d00001 diff --git a/tests/parser/WTEST.cpp b/tests/parser/WTEST.cpp index eb82f29e7..4753dc5a5 100644 --- a/tests/parser/WTEST.cpp +++ b/tests/parser/WTEST.cpp @@ -90,6 +90,14 @@ BOOST_AUTO_TEST_CASE(WTEST_STATE) { st.close_well("WELLX", WellTestConfig::Reason::PHYSICAL, 100. * day); BOOST_CHECK_EQUAL(st.num_closed_wells(), 2U); + { + auto st2 = st; + st2.filter_wells(std::vector{"WELLX"}); + + BOOST_CHECK(!st2.well_is_closed("WELL_NAME")); // This well has been opened/removed by the filter_wells() call + BOOST_CHECK( st2.well_is_closed("WELLX")); + } + const UnitSystem us{}; WellTestConfig wc;