Merge pull request #1891 from joakim-hove/summary-region

Add basic support for xxx_REG summary keywords
This commit is contained in:
Joakim Hove
2020-09-10 09:23:33 +02:00
committed by GitHub
9 changed files with 142 additions and 48 deletions

View File

@@ -21,6 +21,7 @@
#include <boost/test/unit_test.hpp>
#include <opm/io/eclipse/SummaryNode.hpp>
#include <opm/parser/eclipse/Python/Python.hpp>
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
@@ -96,6 +97,8 @@ static Deck createDeck( const std::string& summary ) {
"REGIONS\n"
"FIPNUM\n"
"200*1 300*2 500*3 /\n"
"FIPREG\n"
"200*10 300*20 500*30 /\n"
"SCHEDULE\n"
"WELSPECS\n"
" \'W_1\' \'OP\' 1 1 3.33 \'OIL\' 7* / \n"
@@ -1037,3 +1040,30 @@ RUNSUM
BOOST_CHECK( summary_config2.createRunSummary());
BOOST_CHECK(!summary_config2.hasKeyword("RUNSUM"));
}
BOOST_AUTO_TEST_CASE(FIPREG) {
std::string deck_string = R"(
RPR__REG
/
ROPT_REG
/
)";
const auto& summary_config = createSummary(deck_string);
BOOST_CHECK(summary_config.hasKeyword("RPR__REG"));
BOOST_CHECK(summary_config.hasKeyword("ROPT_REG"));
BOOST_CHECK(!summary_config.hasKeyword("RPR"));
BOOST_CHECK(!summary_config.match("BPR*"));
BOOST_CHECK(summary_config.match("RPR*"));
for (const auto& node : summary_config) {
if (node.category() == EclIO::SummaryNode::Category::Region)
BOOST_CHECK_EQUAL( node.fip_region(), "FIPREG" );
}
const auto& fip_regions = summary_config.fip_regions();
BOOST_CHECK_EQUAL(fip_regions.size(), 1);
auto reg_iter = fip_regions.find("FIPREG");
BOOST_CHECK( reg_iter != fip_regions.end() );
}

View File

@@ -35,14 +35,14 @@ BOOST_AUTO_TEST_CASE(UniqueKey) {
using Category = Opm::EclIO::SummaryNode::Category;
using Type = Opm::EclIO::SummaryNode::Type;
expect_key( { "KEYW", Category::Well, Type::Rate, "NORA", 1 }, "KEYW:NORA" );
expect_key( { "KEYW", Category::Group, Type::Rate, "NORA", 2 }, "KEYW:NORA" );
expect_key( { "KEYW", Category::Field, Type::Rate, "NORA", 3 }, "KEYW" );
expect_key( { "KEYW", Category::Region, Type::Rate, "NORA", 4 }, "KEYW:4" );
expect_key( { "KEYW", Category::Block, Type::Rate, "NORA", 5 }, "KEYW:5" );
expect_key( { "KEYW", Category::Connection, Type::Rate, "NORA", 6 }, "KEYW:NORA:6" );
expect_key( { "KEYW", Category::Segment, Type::Rate, "NORA", 7 }, "KEYW:NORA:7" );
expect_key( { "KEYW", Category::Miscellaneous, Type::Rate, "NORA", 8 }, "KEYW" );
expect_key( { "KEYW", Category::Well, Type::Rate, "NORA", 1 ,""}, "KEYW:NORA" );
expect_key( { "KEYW", Category::Group, Type::Rate, "NORA", 2 ,""}, "KEYW:NORA" );
expect_key( { "KEYW", Category::Field, Type::Rate, "NORA", 3 ,""}, "KEYW" );
expect_key( { "KEYW", Category::Region, Type::Rate, "NORA", 4 ,""}, "KEYW:4" );
expect_key( { "KEYW", Category::Block, Type::Rate, "NORA", 5 ,""}, "KEYW:5" );
expect_key( { "KEYW", Category::Connection, Type::Rate, "NORA", 6 ,""}, "KEYW:NORA:6" );
expect_key( { "KEYW", Category::Segment, Type::Rate, "NORA", 7 ,""}, "KEYW:NORA:7" );
expect_key( { "KEYW", Category::Miscellaneous, Type::Rate, "NORA", 8 ,""}, "KEYW" );
}
BOOST_AUTO_TEST_CASE(InjectedNumberRenderer) {
@@ -54,7 +54,8 @@ BOOST_AUTO_TEST_CASE(InjectedNumberRenderer) {
Category::Region,
Type::Undefined,
"-",
2
2,
""
};
Opm::EclIO::SummaryNode negativeNode {
@@ -62,7 +63,8 @@ BOOST_AUTO_TEST_CASE(InjectedNumberRenderer) {
Category::Region,
Type::Undefined,
"-",
-2
-2,
""
};
auto chooseSign = [](const Opm::EclIO::SummaryNode& node) -> std::string {
@@ -74,7 +76,7 @@ BOOST_AUTO_TEST_CASE(InjectedNumberRenderer) {
}
BOOST_AUTO_TEST_CASE(user_defined) {
auto summary_node = Opm::EclIO::SummaryNode{"FU_VAR1", Opm::EclIO::SummaryNode::Category::Field, Opm::EclIO::SummaryNode::Type::Undefined, "", -1 };
auto summary_node = Opm::EclIO::SummaryNode{"FU_VAR1", Opm::EclIO::SummaryNode::Category::Field, Opm::EclIO::SummaryNode::Type::Undefined, "", -1 , ""};
BOOST_CHECK( summary_node.is_user_defined() );
}

View File

@@ -46,14 +46,14 @@ BOOST_AUTO_TEST_CASE(create) {
EclipseState es(deck);
const EclipseGrid& grid = es.getInputGrid();
Schedule schedule( deck, es, python);
out::RegionCache rc(es.fieldProps().get_int("FIPNUM"), grid, schedule);
out::RegionCache rc({"FIPNUM"}, es.fieldProps(), grid, schedule);
{
const auto& empty = rc.connections( 4 );
const auto& empty = rc.connections( "FIPNUM", 4 );
BOOST_CHECK_EQUAL( empty.size() , 0 );
}
{
const auto& top_layer = rc.connections( 1 );
const auto& top_layer = rc.connections( "FIPNUM", 1 );
BOOST_CHECK_EQUAL( top_layer.size() , 3 );
{
auto pair = top_layer[0];