From acb06b1f539a105a11a6ba98311d56cf629a44d8 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 9 Feb 2024 14:11:19 +0100 Subject: [PATCH] Grid Ensemble: add pdm object. --- .../ProjectDataModel/CMakeLists_files.cmake | 2 + .../RimEclipseCaseCollection.cpp | 4 + .../RimEclipseCaseCollection.h | 2 + .../RimEclipseCaseEnsemble.cpp | 93 +++++++++++++++++++ .../ProjectDataModel/RimEclipseCaseEnsemble.h | 49 ++++++++++ 5 files changed, 150 insertions(+) create mode 100644 ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.cpp create mode 100644 ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.h diff --git a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake index b132ac136d..2c0f181ea4 100644 --- a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake @@ -135,6 +135,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimPlotRectAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimEmCase.h ${CMAKE_CURRENT_LIST_DIR}/RimEclipseViewCollection.h + ${CMAKE_CURRENT_LIST_DIR}/RimEclipseCaseEnsemble.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -270,6 +271,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimEmCase.cpp ${CMAKE_CURRENT_LIST_DIR}/RimPolylinePickerInterface.cpp ${CMAKE_CURRENT_LIST_DIR}/RimEclipseViewCollection.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimEclipseCaseEnsemble.cpp ) if(RESINSIGHT_USE_QT_CHARTS) diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp index 7d770d090f..d46966ca09 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp @@ -31,6 +31,7 @@ #include "RimCaseCollection.h" #include "RimEclipseCase.h" +#include "RimEclipseCaseEnsemble.h" #include "RimEclipseStatisticsCase.h" #include "RimIdenticalGridCaseGroup.h" #include "RimProject.h" @@ -47,6 +48,8 @@ RimEclipseCaseCollection::RimEclipseCaseCollection() CAF_PDM_InitFieldNoDefault( &caseGroups, "CaseGroups", "" ); + CAF_PDM_InitFieldNoDefault( &caseEnsembles, "CaseEnsembles", "" ); + m_gridCollection = new RigGridManager; } @@ -67,6 +70,7 @@ void RimEclipseCaseCollection::close() cases.deleteChildren(); caseGroups.deleteChildren(); + caseEnsembles.deleteChildren(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.h b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.h index f70144b8e5..e204d454d3 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.h @@ -33,6 +33,7 @@ class RigMainGrid; class RimEclipseCase; class RimIdenticalGridCaseGroup; class RimWellPathCollection; +class RimEclipseCaseEnsemble; //================================================================================================== /// @@ -48,6 +49,7 @@ public: caf::PdmChildArrayField cases; caf::PdmChildArrayField caseGroups; + caf::PdmChildArrayField caseEnsembles; void close(); diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.cpp new file mode 100644 index 0000000000..fe6e8f80b2 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.cpp @@ -0,0 +1,93 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2024- Eqinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimEclipseCaseEnsemble.h" + +#include "RimCaseCollection.h" +#include "RimEclipseCase.h" +#include "RimEclipseCellColors.h" +#include "RimEclipseResultCase.h" + +#include "cafPdmFieldScriptingCapability.h" +#include "cafPdmObjectScriptingCapability.h" + +CAF_PDM_SOURCE_INIT( RimEclipseCaseEnsemble, "RimEclipseCaseEnsemble" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimEclipseCaseEnsemble::RimEclipseCaseEnsemble() +{ + CAF_PDM_InitScriptableObjectWithNameAndComment( "Grid Ensemble", ":/GridCaseGroup16x16.png", "", "", "EclipseCaseEnsemble", "Grid Ensemble" ); + + CAF_PDM_InitScriptableField( &m_groupId, "Id", -1, "Id" ); + m_groupId.uiCapability()->setUiReadOnly( true ); + m_groupId.capability()->setIOWriteable( false ); + + CAF_PDM_InitFieldNoDefault( &m_caseCollection, "CaseCollection", "Ensemble Cases" ); + + m_caseCollection = new RimCaseCollection; + m_caseCollection->uiCapability()->setUiName( "Cases" ); + m_caseCollection->uiCapability()->setUiIconFromResourceString( ":/Cases16x16.png" ); + + setDeletable( true ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimEclipseCaseEnsemble::~RimEclipseCaseEnsemble() +{ + delete m_caseCollection; + m_caseCollection = nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseCaseEnsemble::addCase( RimEclipseCase* reservoir ) +{ + CVF_ASSERT( reservoir ); + + m_caseCollection()->reservoirs().push_back( reservoir ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseCaseEnsemble::removeCase( RimEclipseCase* reservoir ) +{ + if ( m_caseCollection()->reservoirs().count( reservoir ) == 0 ) return; + + m_caseCollection()->reservoirs().removeChild( reservoir ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimEclipseCaseEnsemble::contains( RimEclipseCase* reservoir ) const +{ + CVF_ASSERT( reservoir ); + + for ( RimEclipseCase* rimReservoir : cases() ) + { + if ( reservoir->gridFileName() == rimReservoir->gridFileName() ) return true; + } + + return false; +} diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.h b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.h new file mode 100644 index 0000000000..6239dc0a63 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseEnsemble.h @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2024- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RimNamedObject.h" + +#include "cafPdmChildField.h" +#include "cafPdmField.h" + +class RimCaseCollection; +class RimEclipseCase; + +//================================================================================================== +// +// +// +//================================================================================================== +class RimEclipseCaseEnsemble : public RimNamedObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimEclipseCaseEnsemble(); + ~RimEclipseCaseEnsemble() override; + + void addCase( RimEclipseCase* reservoir ); + void removeCase( RimEclipseCase* reservoir ); + bool contains( RimEclipseCase* reservoir ) const; + +private: + caf::PdmField m_groupId; + caf::PdmChildField m_caseCollection; +};