From 004c4983a6edbd9b8a9bcda0e579c0b91d696a79 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 20 Feb 2026 15:14:34 +0100 Subject: [PATCH 1/3] Add createRecord() to RifOpmDeckTools for typed one-liner DeckRecord construction Adds NamedValue struct (variant over string/int/double with constructors for common types) and createRecord(initializer_list) that dispatches to existing item() overloads via std::visit. Rewrites complumpKeyword inner loop as a call-site demonstration. --- .../FileInterface/RifOpmDeckTools.cpp | 15 +++++++++++++++ .../FileInterface/RifOpmDeckTools.h | 18 ++++++++++++++++++ .../Jobs/RimKeywordFactory.cpp | 15 +++++++-------- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifOpmDeckTools.cpp b/ApplicationLibCode/FileInterface/RifOpmDeckTools.cpp index 5cbd77a6e79..df1a3723250 100644 --- a/ApplicationLibCode/FileInterface/RifOpmDeckTools.cpp +++ b/ApplicationLibCode/FileInterface/RifOpmDeckTools.cpp @@ -19,6 +19,7 @@ #include "RifOpmDeckTools.h" #include "opm/input/eclipse/Deck/DeckItem.hpp" +#include "opm/input/eclipse/Deck/DeckRecord.hpp" #include "opm/input/eclipse/Units/Dimension.hpp" namespace RifOpmDeckTools @@ -135,4 +136,18 @@ Opm::DeckItem optionalItem( std::string name, std::optional value ) return defaultItem( name ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +Opm::DeckRecord createRecord( std::initializer_list namedValues ) +{ + std::vector items; + items.reserve( namedValues.size() ); + for ( const auto& nv : namedValues ) + { + items.push_back( std::visit( [&nv]( const auto& val ) { return RifOpmDeckTools::item( nv.name, val ); }, nv.value ) ); + } + return Opm::DeckRecord{ std::move( items ) }; +} + } // namespace RifOpmDeckTools diff --git a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h index 30dd9b2c00e..e6f97b48846 100644 --- a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h +++ b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h @@ -18,12 +18,15 @@ #pragma once +#include #include #include +#include namespace Opm { class DeckItem; +class DeckRecord; } // namespace Opm namespace RifOpmDeckTools @@ -39,4 +42,19 @@ Opm::DeckItem optionalItem( std::string name, std::optional value ); Opm::DeckItem optionalItem( std::string name, std::optional value ); Opm::DeckItem defaultItem( std::string name ); +struct NamedValue +{ + std::string name; + std::variant value; + + NamedValue( std::string n, std::string v ) : name( std::move( n ) ), value( std::move( v ) ) {} + NamedValue( std::string n, const char* v ) : name( std::move( n ) ), value( std::string( v ) ) {} + NamedValue( std::string n, int v ) : name( std::move( n ) ), value( v ) {} + NamedValue( std::string n, size_t v ) : name( std::move( n ) ), value( (int)v ) {} + NamedValue( std::string n, double v ) : name( std::move( n ) ), value( v ) {} + NamedValue( std::string n, float v ) : name( std::move( n ) ), value( (double)v ) {} +}; + +Opm::DeckRecord createRecord( std::initializer_list items ); + } // namespace RifOpmDeckTools diff --git a/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp b/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp index 97bc35138d4..ac075c54bfa 100644 --- a/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp +++ b/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp @@ -209,14 +209,13 @@ Opm::DeckKeyword complumpKeyword( const std::vector& compdata { continue; } - std::vector items; - items.push_back( RifOpmDeckTools::item( C::WELL::itemName, wellName ) ); - items.push_back( RifOpmDeckTools::item( C::I::itemName, cd.completionDataGridCell().localCellIndexI() + 1 ) ); - items.push_back( RifOpmDeckTools::item( C::J::itemName, cd.completionDataGridCell().localCellIndexJ() + 1 ) ); - items.push_back( RifOpmDeckTools::item( C::K1::itemName, cd.completionDataGridCell().localCellIndexK() + 1 ) ); - items.push_back( RifOpmDeckTools::item( C::K2::itemName, cd.completionDataGridCell().localCellIndexK() + 1 ) ); - items.push_back( RifOpmDeckTools::item( C::N::itemName, cd.completionNumber().value() ) ); - kw.addRecord( Opm::DeckRecord{ std::move( items ) } ); + kw.addRecord( RifOpmDeckTools::createRecord( { + { C::WELL::itemName, wellName }, + { C::I::itemName, cd.completionDataGridCell().localCellIndexI() + 1 }, + { C::J::itemName, cd.completionDataGridCell().localCellIndexJ() + 1 }, + { C::K1::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, + { C::K2::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, + { C::N::itemName, cd.completionNumber().value() } } ) ); } return kw; } From 5c938161b01fff9a344fc2e0e15eb4a51deb19a9 Mon Sep 17 00:00:00 2001 From: magnesj <1793152+magnesj@users.noreply.github.com> Date: Fri, 20 Feb 2026 14:15:45 +0000 Subject: [PATCH 2/3] Fixes by clang-format --- .../FileInterface/RifOpmDeckTools.h | 36 +++++++++++++++---- .../Jobs/RimKeywordFactory.cpp | 13 ++++--- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h index e6f97b48846..02144f1d39f 100644 --- a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h +++ b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h @@ -47,12 +47,36 @@ struct NamedValue std::string name; std::variant value; - NamedValue( std::string n, std::string v ) : name( std::move( n ) ), value( std::move( v ) ) {} - NamedValue( std::string n, const char* v ) : name( std::move( n ) ), value( std::string( v ) ) {} - NamedValue( std::string n, int v ) : name( std::move( n ) ), value( v ) {} - NamedValue( std::string n, size_t v ) : name( std::move( n ) ), value( (int)v ) {} - NamedValue( std::string n, double v ) : name( std::move( n ) ), value( v ) {} - NamedValue( std::string n, float v ) : name( std::move( n ) ), value( (double)v ) {} + NamedValue( std::string n, std::string v ) + : name( std::move( n ) ) + , value( std::move( v ) ) + { + } + NamedValue( std::string n, const char* v ) + : name( std::move( n ) ) + , value( std::string( v ) ) + { + } + NamedValue( std::string n, int v ) + : name( std::move( n ) ) + , value( v ) + { + } + NamedValue( std::string n, size_t v ) + : name( std::move( n ) ) + , value( (int)v ) + { + } + NamedValue( std::string n, double v ) + : name( std::move( n ) ) + , value( v ) + { + } + NamedValue( std::string n, float v ) + : name( std::move( n ) ) + , value( (double)v ) + { + } }; Opm::DeckRecord createRecord( std::initializer_list items ); diff --git a/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp b/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp index ac075c54bfa..f0ffa53c05b 100644 --- a/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp +++ b/ApplicationLibCode/ProjectDataModel/Jobs/RimKeywordFactory.cpp @@ -209,13 +209,12 @@ Opm::DeckKeyword complumpKeyword( const std::vector& compdata { continue; } - kw.addRecord( RifOpmDeckTools::createRecord( { - { C::WELL::itemName, wellName }, - { C::I::itemName, cd.completionDataGridCell().localCellIndexI() + 1 }, - { C::J::itemName, cd.completionDataGridCell().localCellIndexJ() + 1 }, - { C::K1::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, - { C::K2::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, - { C::N::itemName, cd.completionNumber().value() } } ) ); + kw.addRecord( RifOpmDeckTools::createRecord( { { C::WELL::itemName, wellName }, + { C::I::itemName, cd.completionDataGridCell().localCellIndexI() + 1 }, + { C::J::itemName, cd.completionDataGridCell().localCellIndexJ() + 1 }, + { C::K1::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, + { C::K2::itemName, cd.completionDataGridCell().localCellIndexK() + 1 }, + { C::N::itemName, cd.completionNumber().value() } } ) ); } return kw; } From 6cbb231d5011726a440bd7d639a434a07c2fb81c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 20 Feb 2026 15:18:04 +0100 Subject: [PATCH 3/3] sadf --- ApplicationLibCode/FileInterface/RifOpmDeckTools.h | 1 + 1 file changed, 1 insertion(+) diff --git a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h index 02144f1d39f..2d57415b3e0 100644 --- a/ApplicationLibCode/FileInterface/RifOpmDeckTools.h +++ b/ApplicationLibCode/FileInterface/RifOpmDeckTools.h @@ -44,6 +44,7 @@ Opm::DeckItem defaultItem( std::string name ); struct NamedValue { + // Test std::string name; std::variant value;