Orion Events: Generate COMPORD for new wells

This commit is contained in:
Kristian Bendiksen committed 2026-08-20 11:02:55 +02:00
1 parent 0b7ce2252c
commit a362f868c3
4 files changed
+31

No files matched your search

@@ -211,6 +211,9 @@ QString RicScheduleDataGenerator::generateDateSection( const RimWellEventTimelin
if ( auto welspecs = generateWelspecsForWell( timeline, eclipseCase, *well, date ) ) if ( auto welspecs = generateWelspecsForWell( timeline, eclipseCase, *well, date ) )
{ {
mergeKeyword( keywordBlocks, "WELSPECS", std::move( *welspecs ) ); mergeKeyword( keywordBlocks, "WELSPECS", std::move( *welspecs ) );
mergeKeyword( keywordBlocks,
"COMPORD",
RimKeywordFactory::compordKeyword( well->completionSettings()->wellNameForExport().toStdString() ) );
} }
generateCompletionsForWell( timeline, eclipseCase, *well, date, keywordBlocks ); generateCompletionsForWell( timeline, eclipseCase, *well, date, keywordBlocks );
@@ -104,6 +104,22 @@ Opm::DeckKeyword welspecsKeyword( const std::string wellGrpName, RimEclipseCase*
return kw; return kw;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Opm::DeckKeyword compordKeyword( const std::string& wellName )
{
using C = Opm::ParserKeywords::COMPORD;
std::vector<Opm::DeckItem> items;
items.push_back( RifOpmDeckTools::item( C::WELL::itemName, wellName ) );
items.push_back( RifOpmDeckTools::item( C::ORDER_TYPE::itemName, "INPUT" ) );
Opm::DeckKeyword kw( ( C() ) );
kw.addRecord( Opm::DeckRecord{ std::move( items ) } );
return kw;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -56,6 +56,7 @@ namespace RimKeywordFactory
{ {
Opm::DeckKeyword welspecsKeyword( const std::string wellGrpName, RimEclipseCase* eCase, RimWellPath* wellPath ); Opm::DeckKeyword welspecsKeyword( const std::string wellGrpName, RimEclipseCase* eCase, RimWellPath* wellPath );
Opm::DeckKeyword compordKeyword( const std::string& wellName );
Opm::DeckKeyword compdatKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName ); Opm::DeckKeyword compdatKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName );
Opm::DeckKeyword wpimultKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName ); Opm::DeckKeyword wpimultKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName );
Opm::DeckKeyword complumpKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName ); Opm::DeckKeyword complumpKeyword( const std::vector<RigCompletionData>& compdata, const std::string wellName );
@@ -1874,6 +1874,17 @@ class TestScheduleGeneration:
f"Well {wp.name!r} missing from grouped WELSPECS block: {welspecs_block!r}" f"Well {wp.name!r} missing from grouped WELSPECS block: {welspecs_block!r}"
) )
assert schedule_text.count("COMPORD\n") == 1
compord_block = schedule_text.split("COMPORD\n", 1)[1].split("\n/\n", 1)[0]
assert compord_block.count("INPUT") == 2
for wp in well_paths[:2]:
assert wp.name.replace(" ", "") in compord_block.replace(" ", ""), (
f"Well {wp.name!r} missing from grouped COMPORD block: {compord_block!r}"
)
assert schedule_text.index("WELSPECS\n") < schedule_text.index("COMPORD\n")
assert schedule_text.index("COMPORD\n") < schedule_text.index("COMPDAT\n")
def test_per_well_keywords_sorted_by_well_name(self, project_with_case_and_well): def test_per_well_keywords_sorted_by_well_name(self, project_with_case_and_well):
"""Per-well keyword records are emitted in deck-name-sorted well order, so WELSPECS """Per-well keyword records are emitted in deck-name-sorted well order, so WELSPECS
and COMPDAT share the same ascending well order rather than an arbitrary one. and COMPDAT share the same ascending well order rather than an arbitrary one.