From 52fa1b79aea15656bb4e75889bfb79af328c0fa6 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Tue, 12 Aug 2025 19:20:46 +0200 Subject: [PATCH] Work in progress --- ...ellPathExportCompletionDataFeatureImpl.cpp | 8 ++++ ...cWellPathExportCompletionDataFeatureImpl.h | 2 + .../CompletionData/CMakeLists_files.cmake | 2 +- .../CompletionData/RimCompdatData.cpp | 2 + .../CompletionData/RimCompdatData.h | 3 ++ .../CompletionData/RimCompletionData.cpp | 46 +++++++++++++++++++ .../CompletionData/RimCompletionData.h | 3 ++ .../WellPath/RimModeledWellPath.cpp | 13 +++++- .../RimcWellPathCollection.cpp | 4 +- .../Completions/RigCompletionData.cpp | 45 ++++++++++++++++++ .../Completions/RigCompletionData.h | 10 ++-- .../wells_and_fractures/completion_data.py | 4 +- 12 files changed, 134 insertions(+), 8 deletions(-) diff --git a/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp b/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp index 7df47b891a..4bf2a5a7ce 100644 --- a/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp @@ -1678,3 +1678,11 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCarfinForTemporaryLgrs( c RicExportLgrFeature::exportLgrs( folder, lgrInfoForWell.first, lgrInfoForWell.second ); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicWellPathExportCompletionDataFeatureImpl::completionDataForWellPath( RimWellPath* wellPath ) +{ + return {}; +} \ No newline at end of file diff --git a/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h b/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h index 45bc91dfda..fd7e4e4b65 100644 --- a/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h +++ b/ApplicationLibCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h @@ -123,6 +123,8 @@ public: static std::vector computeDynamicCompletionsForWellPath( RimWellPath* wellPath, RimEclipseCase* eclipseCase, size_t timeStepIndex ); + static std::vector completionDataForWellPath( RimWellPath* wellPath ); + private: static std::vector generatePerforationsCompdatValues( gsl::not_null wellPath, const std::vector& intervals, diff --git a/ApplicationLibCode/ProjectDataModel/CompletionData/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/CompletionData/CMakeLists_files.cmake index f1adc572ba..fc5e81cf2c 100644 --- a/ApplicationLibCode/ProjectDataModel/CompletionData/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/CompletionData/CMakeLists_files.cmake @@ -11,4 +11,4 @@ set(SOURCE_GROUP_SOURCE_FILES ) list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) -list(APPEND CODE_SOURCE_FILES ${SOURCE_GROUP_SOURCE_FILES}) +list(APPEND CODE_SOURCE_FILES ${SOURCE_GROUP_SOURCE_FILES}) \ No newline at end of file diff --git a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.cpp b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.cpp index dd9c8c31cf..ee8489560a 100644 --- a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.cpp +++ b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.cpp @@ -42,6 +42,8 @@ RimCompdatData::RimCompdatData() CAF_PDM_InitScriptableFieldNoDefault( &m_skinFactor, "SkinFactor", "Skin Factor" ); CAF_PDM_InitScriptableFieldNoDefault( &m_dFactor, "DFactor", "D Factor" ); CAF_PDM_InitScriptableFieldNoDefault( &m_direction, "Direction", "Direction" ); + CAF_PDM_InitScriptableFieldNoDefault( &m_startMD, "StartMd", "Start MD" ); + CAF_PDM_InitScriptableFieldNoDefault( &m_endMD, "EndMd", "End MD" ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.h b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.h index 5d358fe31d..db521b1166 100644 --- a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.h +++ b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompdatData.h @@ -51,4 +51,7 @@ public: caf::PdmField> m_skinFactor; caf::PdmField> m_dFactor; caf::PdmField> m_direction; + caf::PdmField> m_startMD; + caf::PdmField> m_endMD; + caf::PdmField m_comment; }; diff --git a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.cpp b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.cpp index 8d64dd590c..ff02e69ba0 100644 --- a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.cpp +++ b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.cpp @@ -18,6 +18,8 @@ #include "RimCompletionData.h" +#include "RigCompletionData.h" + #include "RimCompdatData.h" #include "RimWelspecsData.h" @@ -42,4 +44,48 @@ RimCompletionData::RimCompletionData() //-------------------------------------------------------------------------------------------------- RimCompletionData::~RimCompletionData() { +} + +void RimCompletionData::addCompletionData( RigCompletionData* completionData ) +{ + if ( !completionData ) + { + return; + } + + RimCompdatData* compdatData = new RimCompdatData(); + compdatData->m_wellname = completionData->wellName(); + compdatData->m_I = (int)completionData->completionDataGridCell().localCellIndexI(); + compdatData->m_J = (int)completionData->completionDataGridCell().localCellIndexJ(); + compdatData->m_upperK = (int)completionData->completionDataGridCell().localCellIndexK(); + compdatData->m_lowerK = (int)completionData->completionDataGridCell().localCellIndexK(); + compdatData->m_openShutFlag = "OPEN"; + + if ( !RigCompletionData::isDefaultValue( completionData->transmissibility() ) ) + { + compdatData->m_transmissibility = completionData->transmissibility(); + } + if ( !RigCompletionData::isDefaultValue( completionData->diameter() ) ) + { + compdatData->m_diameter = completionData->diameter(); + } + if ( !RigCompletionData::isDefaultValue( completionData->kh() ) ) + { + compdatData->m_kh = completionData->kh(); + } + if ( !RigCompletionData::isDefaultValue( completionData->skinFactor() ) ) + { + compdatData->m_skinFactor = completionData->skinFactor(); + } + if ( !RigCompletionData::isDefaultValue( completionData->dFactor() ) ) + { + compdatData->m_dFactor = completionData->dFactor(); + } + + compdatData->m_direction = completionData->directionString(); + compdatData->m_startMD = completionData->startMD(); + compdatData->m_endMD = completionData->endMD(); + compdatData->m_comment = completionData->metaDataString(); + + m_compdat.push_back( compdatData ); } \ No newline at end of file diff --git a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.h b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.h index d2379d372b..9387c8ccf4 100644 --- a/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.h +++ b/ApplicationLibCode/ProjectDataModel/CompletionData/RimCompletionData.h @@ -23,6 +23,7 @@ class RimWelspecsData; class RimCompdatData; +class RigCompletionData; //================================================================================================== /// @@ -36,6 +37,8 @@ public: RimCompletionData(); ~RimCompletionData() override; + void addCompletionData( RigCompletionData* completionData ); + private: caf::PdmChildArrayField m_welspecs; caf::PdmChildArrayField m_compdat; diff --git a/ApplicationLibCode/ProjectDataModel/WellPath/RimModeledWellPath.cpp b/ApplicationLibCode/ProjectDataModel/WellPath/RimModeledWellPath.cpp index 3aa507214b..88598daede 100644 --- a/ApplicationLibCode/ProjectDataModel/WellPath/RimModeledWellPath.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellPath/RimModeledWellPath.cpp @@ -22,6 +22,8 @@ #include "RicfCommandObject.h" #include "RifTextDataTableFormatter.h" +#include "CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h" + #include "Well/RigWellPath.h" #include "Well/RigWellPathGeometryTools.h" @@ -293,5 +295,14 @@ void RimModeledWellPath::updateReferencePoint() //-------------------------------------------------------------------------------------------------- RimCompletionData* RimModeledWellPath::completionData() { - return new RimCompletionData(); + auto retData = new RimCompletionData(); + + auto compdata = RicWellPathExportCompletionDataFeatureImpl::completionDataForWellPath( this ); + + for ( auto& cd : compdata ) + { + retData->addCompletionData( &cd ); + } + + return retData; } diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcWellPathCollection.cpp b/ApplicationLibCode/ProjectDataModelCommands/RimcWellPathCollection.cpp index 4b0bee3cce..8c0c7f3636 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcWellPathCollection.cpp +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcWellPathCollection.cpp @@ -18,7 +18,7 @@ #include "RimcWellPathCollection.h" -#include "CompletioNData/RimCompletionData.h" +#include "CompletionData/RimCompletionData.h" #include "RimModeledWellPath.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" @@ -122,7 +122,7 @@ std::expected RimcWellPathCollection_wellComplet } } } - return std::unexpected( QString( "Well path with name '%1' does not exist. Cannot get completion data." ).arg( m_wellName ) ); + return std::unexpected( QString( "Modeled Well path with name '%1' does not exist. Cannot get completion data." ).arg( m_wellName ) ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.cpp b/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.cpp index 502321c30d..087d465422 100644 --- a/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.cpp @@ -365,6 +365,51 @@ double RigCompletionData::dFactor() const return m_dFactor; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::optional RigCompletionData::startMD() const +{ + return m_startMD; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::optional RigCompletionData::endMD() const +{ + return m_endMD; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RigCompletionData::directionString() const +{ + switch ( m_direction ) + { + case CellDirection::DIR_I: + return "I"; + case CellDirection::DIR_J: + return "J"; + case CellDirection::DIR_K: + return "K"; + case CellDirection::DIR_UNDEF: + default: + return "Undefined"; + } +} + +QString RigCompletionData::metaDataString() const +{ + QStringList metadataList; + for ( const auto& meta : m_metadata ) + { + metadataList.append( meta.name + ": " + meta.comment ); + } + return metadataList.join( "\n" ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.h b/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.h index 2ce62a6116..33b1abfeed 100644 --- a/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.h +++ b/ApplicationLibCode/ReservoirDataModel/Completions/RigCompletionData.h @@ -139,6 +139,10 @@ public: double wpimult() const; CompletionType completionType() const; bool isMainBore() const; + std::optional startMD() const; + std::optional endMD() const; + QString directionString() const; + QString metaDataString() const; double firstOrderingValue() const; double secondOrderingValue() const; @@ -153,12 +157,12 @@ public: private: QString m_wellName; RigCompletionDataGridCell m_cellIndex; - double m_saturation; + double m_saturation; double m_transmissibility; double m_diameter; - double m_kh; + double m_kh; double m_skinFactor; - double m_dFactor; + double m_dFactor; CellDirection m_direction; std::optional m_startMD; // start MD in completion cell diff --git a/GrpcInterface/Python/rips/PythonExamples/wells_and_fractures/completion_data.py b/GrpcInterface/Python/rips/PythonExamples/wells_and_fractures/completion_data.py index 88b4be0d73..0449359dae 100644 --- a/GrpcInterface/Python/rips/PythonExamples/wells_and_fractures/completion_data.py +++ b/GrpcInterface/Python/rips/PythonExamples/wells_and_fractures/completion_data.py @@ -18,4 +18,6 @@ if resinsight is not None: print("Well name: " + well.name) if len(wells) > 0: - comp_data = wells.completion_data(wells[0].name) + well_path_coll = resinsight.project.well_path_collection() + + comp_data = well_path_coll.well_completions(wells[0].name)