mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
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:
22
ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA
vendored
Normal file
22
ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA
vendored
Normal 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 /
|
||||
/
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user