From f8b4da83e8e3454a6ca92afdae6e9bd297afcdb5 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 13 Oct 2026 17:31:16 +0200 Subject: [PATCH] #13306: Fix local grid connection summary vectors (LCGFRU) missing for ESMRY Categorize LCGFRU/LCOFRU/LCWFRU as SUMMARY_WELL_CONNECTION_LGR and fix token count check when parsing LGR connection addresses. --- .../keyword-description/keywords_eclipse.json | 6 +++--- .../FileInterface/RifEclipseSummaryAddress.cpp | 2 +- .../UnitTests/RifEclipseSummaryAddress-Test.cpp | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ApplicationLibCode/Application/Resources/keyword-description/keywords_eclipse.json b/ApplicationLibCode/Application/Resources/keyword-description/keywords_eclipse.json index fa07c1d388..5e9883258c 100644 --- a/ApplicationLibCode/Application/Resources/keyword-description/keywords_eclipse.json +++ b/ApplicationLibCode/Application/Resources/keyword-description/keywords_eclipse.json @@ -4584,15 +4584,15 @@ "description": "Brine concentration interpolated at a defined coordinate within a local grid" }, "LCGFRU": { - "category": "SUMMARY_WELL_CONNECTION", + "category": "SUMMARY_WELL_CONNECTION_LGR", "description": "As CGFRU but for local grids" }, "LCOFRU": { - "category": "SUMMARY_WELL_CONNECTION", + "category": "SUMMARY_WELL_CONNECTION_LGR", "description": "As COFRU but for local grids" }, "LCWFRU": { - "category": "SUMMARY_WELL_CONNECTION", + "category": "SUMMARY_WELL_CONNECTION_LGR", "description": "As CWFRU but for local grids" }, "MLINEARS": { diff --git a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp index a5628caed8..97ff53a9d5 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp +++ b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp @@ -1264,7 +1264,7 @@ RifEclipseSummaryAddress RifEclipseSummaryAddress::fromTokens( const std::vector break; case SummaryCategory::SUMMARY_WELL_CONNECTION_LGR: - if ( tokens.size() > 2 ) + if ( tokens.size() > 3 ) { const auto& token3 = tokens[3]; const auto ijk = RiaStdStringTools::splitString( token3, ',' ); diff --git a/ApplicationLibCode/UnitTests/RifEclipseSummaryAddress-Test.cpp b/ApplicationLibCode/UnitTests/RifEclipseSummaryAddress-Test.cpp index 6eac97679c..1dde7ae60c 100644 --- a/ApplicationLibCode/UnitTests/RifEclipseSummaryAddress-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifEclipseSummaryAddress-Test.cpp @@ -188,6 +188,20 @@ TEST( RifEclipseSummaryAddressTest, TestEclipseAddressParsing_WellCompletionLgr EXPECT_FALSE( addr.isErrorResult() ); } +TEST( RifEclipseSummaryAddressTest, TestEclipseAddressParsing_WellCompletionLgr_Lcgfru ) +{ + auto addr = RifEclipseSummaryAddress::fromEclipseTextAddress( "LCGFRU:LGR1:B-1H:11,12,13" ); + + EXPECT_TRUE( addr.isValid() ); + EXPECT_EQ( RifEclipseSummaryAddressDefines::SummaryCategory::SUMMARY_WELL_CONNECTION_LGR, addr.category() ); + EXPECT_EQ( "LGR1", addr.lgrName() ); + EXPECT_EQ( "B-1H", addr.wellName() ); + EXPECT_EQ( 13, addr.cellK() ); + + // Too few tokens must not read out of bounds + EXPECT_FALSE( RifEclipseSummaryAddress::fromEclipseTextAddress( "LCGFRU:LGR1:B-1H" ).isValid() ); +} + TEST( RifEclipseSummaryAddressTest, TestEclipseAddressParsing_WellSegment ) { std::string addrString = "SOFR:B-5H:32";