RFT: Support device and annulus branches (#9168)

* Add unit test used to read data from WSEGLINK
* Add segment branch type
* Add detection of device branches
* Add data source stepping on branch type
* parse wseglink data
* add RFT case as child of RimFileSummaryCase
This commit is contained in:
Magne Sjaastad
2022-08-16 12:40:25 +02:00
committed by GitHub
parent e6af123094
commit 1f2e9babe6
25 changed files with 952 additions and 261 deletions

View File

@@ -0,0 +1,22 @@
-- WSEGLINK
-- well-name segment-no-1 segment-no-2
-- If item #2 and #3 are undefined, all segment links for the well are removed.
-- If either item #2 or #3 is undefined, all segment links are removed for the well and segment given.
--
WSEGLINK
PROD 22 30 /
PROD2 25 37 /
/
WSEGLINK
PROD_A 20 30 /
/
WSEGLINK
PROD_A 20 /
/
WSEGLINK
PROD_A /
/

View File

@@ -3,13 +3,14 @@
#include "gtest/gtest.h"
#include "opm/input/eclipse/Parser/ParseContext.hpp"
#include "opm/input/eclipse/Parser/ParseContext.hpp"
#include "opm/input/eclipse/Schedule/VFPInjTable.hpp"
#include "opm/input/eclipse/Schedule/VFPProdTable.hpp"
#include "opm/input/eclipse/Parser/Parser.hpp"
#include "opm/input/eclipse/Deck/Deck.hpp"
#include <opm/input/eclipse/Parser/ParserKeywords/V.hpp>
#include "opm/input/eclipse/Parser/ParserKeywords/W.hpp"
#include "OpmTestDataDirectory.h"
@@ -24,9 +25,9 @@ TEST(OpmParserTest, ReadFromFile)
{
Parser parser(false);
const ::Opm::ParserKeywords::VFPPROD kw1;
const ::Opm::ParserKeywords::VFPPROD kw1;
parser.addParserKeyword(kw1);
parser.addParserKeyword(kw1);
std::stringstream ss;
ss << TEST_DATA_DIR << "/B1BH.Ecl";
@@ -50,12 +51,12 @@ TEST(OpmParserTest, ReadFromFile)
}
}
{
Parser parser(false);
const ::Opm::ParserKeywords::VFPINJ kw1;
const ::Opm::ParserKeywords::VFPIDIMS kw2;
Parser parser(false);
const ::Opm::ParserKeywords::VFPINJ kw1;
const ::Opm::ParserKeywords::VFPIDIMS kw2;
parser.addParserKeyword(kw1);
parser.addParserKeyword(kw2);
parser.addParserKeyword(kw1);
parser.addParserKeyword(kw2);
std::stringstream ss;
ss << TEST_DATA_DIR << "/C1H.Ecl";
@@ -80,6 +81,59 @@ TEST(OpmParserTest, ReadFromFile)
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(OpmParserTest, ReadAndParseWSEGLINK)
{
Parser parser(false);
const ::Opm::ParserKeywords::WSEGLINK kw1;
parser.addParserKeyword(kw1);
std::stringstream ss;
ss << TEST_DATA_DIR << "/test_wseglink.DATA";
std::string testFile = ss.str();
auto deck = parser.parseFile(testFile);
std::string myKeyword = "WSEGLINK";
auto keywordList = deck.getKeywordList(myKeyword);
for (auto kw : keywordList)
{
auto name = kw->name();
for (size_t i = 0; i < kw->size(); i++)
{
auto deckRecord = kw->getRecord(i);
std::string wellName;
int segment1 = -1;
int segment2 = -1;
{
auto itemName = ::Opm::ParserKeywords::WSEGLINK::WELL::itemName;
if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0))
{
wellName = deckRecord.getItem(itemName).getTrimmedString(0);
}
}
{
auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT1::itemName;
if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0))
{
segment1 = deckRecord.getItem(itemName).get<int>(0);
}
}
{
auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT2::itemName;
if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0))
{
segment2 = deckRecord.getItem(itemName).get<int>(0);
}
}
std::cout << wellName << " " << segment1 << " " << segment2 << std::endl;
}
}
}