From 8e8c168405bcb6d14cffa698ed3df25bd02fb2b0 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 12 Mar 2018 11:07:46 +0100 Subject: [PATCH] #2546 Well Connection Factors : Several changes related to data access Moved rig classes from command feature into ReservoirDataModel\Completions\ --- ApplicationCode/CMakeLists.txt | 2 + .../CMakeLists_files.cmake | 12 -- ...ellPathExportCompletionDataFeatureImpl.cpp | 141 ++++++++++++++++++ ...cWellPathExportCompletionDataFeatureImpl.h | 4 + .../ModelVisualization/RivWellPathPartMgr.cpp | 24 +++ .../ModelVisualization/RivWellPathPartMgr.h | 4 + .../ProjectDataModel/CMakeLists_files.cmake | 2 + .../ProjectDataModel/RimEclipseView.cpp | 7 + .../ProjectDataModel/RimEclipseView.h | 2 + .../RimVirtualPerforationResults.cpp | 84 +++++++++++ .../RimVirtualPerforationResults.h | 53 +++++++ .../Completions/CMakeLists_files.cmake | 31 ++++ .../Completions}/RigCompletionData.cpp | 0 .../Completions}/RigCompletionData.h | 0 .../RigCompletionDataGridCell.cpp | 0 .../Completions}/RigCompletionDataGridCell.h | 0 ...StimPlanCellTransmissibilityCalculator.cpp | 0 ...ToStimPlanCellTransmissibilityCalculator.h | 0 .../RigFractureTransmissibilityEquations.cpp | 0 .../RigFractureTransmissibilityEquations.h | 0 .../RigTransmissibilityCondenser.cpp | 0 .../RigTransmissibilityCondenser.h | 0 ...igVirtualPerforationTransmissibilities.cpp | 107 +++++++++++++ .../RigVirtualPerforationTransmissibilities.h | 67 +++++++++ .../RigWellPathStimplanIntersector.cpp | 0 .../RigWellPathStimplanIntersector.h | 0 .../ReservoirDataModel/RigEclipseCaseData.cpp | 17 +++ .../ReservoirDataModel/RigEclipseCaseData.h | 6 + .../UnitTests/RigCellGeometryTools-Test.cpp | 2 +- .../RigTransmissibilityCondenser-Test.cpp | 2 +- 30 files changed, 553 insertions(+), 14 deletions(-) create mode 100644 ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.cpp create mode 100644 ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.h create mode 100644 ApplicationCode/ReservoirDataModel/Completions/CMakeLists_files.cmake rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigCompletionData.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigCompletionData.h (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigCompletionDataGridCell.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigCompletionDataGridCell.h (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigEclipseToStimPlanCellTransmissibilityCalculator.h (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigFractureTransmissibilityEquations.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigFractureTransmissibilityEquations.h (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigTransmissibilityCondenser.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigTransmissibilityCondenser.h (100%) create mode 100644 ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.cpp create mode 100644 ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.h rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigWellPathStimplanIntersector.cpp (100%) rename ApplicationCode/{Commands/CompletionExportCommands => ReservoirDataModel/Completions}/RigWellPathStimplanIntersector.h (100%) diff --git a/ApplicationCode/CMakeLists.txt b/ApplicationCode/CMakeLists.txt index 4de30e6ff2..c0cf5a83f4 100644 --- a/ApplicationCode/CMakeLists.txt +++ b/ApplicationCode/CMakeLists.txt @@ -41,6 +41,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/ResultStatisticsCache ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel + ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/Completions ${CMAKE_CURRENT_SOURCE_DIR}/WellPathImportSsihub ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/OdbReader ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/GeoMechDataModel @@ -80,6 +81,7 @@ list( APPEND REFERENCED_CMAKE_FILES ReservoirDataModel/CMakeLists_files.cmake ReservoirDataModel/CMakeLists_filesNotToUnitTest.cmake + ReservoirDataModel/Completions/CMakeLists_files.cmake FileInterface/CMakeLists_files.cmake ProjectDataModel/CMakeLists_files.cmake diff --git a/ApplicationCode/Commands/CompletionExportCommands/CMakeLists_files.cmake b/ApplicationCode/Commands/CompletionExportCommands/CMakeLists_files.cmake index ae0798daf2..01b1fc3696 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/CMakeLists_files.cmake +++ b/ApplicationCode/Commands/CompletionExportCommands/CMakeLists_files.cmake @@ -4,15 +4,9 @@ ${CMAKE_CURRENT_LIST_DIR}/RicExportCompletionDataSettingsUi.h ${CMAKE_CURRENT_LIST_DIR}/RicWellPathExportCompletionDataFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicWellPathExportCompletionDataFeatureImpl.h ${CMAKE_CURRENT_LIST_DIR}/RicFishbonesTransmissibilityCalculationFeatureImp.h -${CMAKE_CURRENT_LIST_DIR}/RigCompletionData.h -${CMAKE_CURRENT_LIST_DIR}/RigCompletionDataGridCell.h ${CMAKE_CURRENT_LIST_DIR}/RicExportFishbonesWellSegmentsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicCaseAndFileExportSettingsUi.h ${CMAKE_CURRENT_LIST_DIR}/RicExportFractureCompletionsImpl.h -${CMAKE_CURRENT_LIST_DIR}/RigEclipseToStimPlanCellTransmissibilityCalculator.h -${CMAKE_CURRENT_LIST_DIR}/RigTransmissibilityCondenser.h -${CMAKE_CURRENT_LIST_DIR}/RigFractureTransmissibilityEquations.h -${CMAKE_CURRENT_LIST_DIR}/RigWellPathStimplanIntersector.h ) @@ -21,15 +15,9 @@ ${CMAKE_CURRENT_LIST_DIR}/RicExportCompletionDataSettingsUi.cpp ${CMAKE_CURRENT_LIST_DIR}/RicWellPathExportCompletionDataFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicWellPathExportCompletionDataFeatureImpl.cpp ${CMAKE_CURRENT_LIST_DIR}/RicFishbonesTransmissibilityCalculationFeatureImp.cpp -${CMAKE_CURRENT_LIST_DIR}/RigCompletionData.cpp -${CMAKE_CURRENT_LIST_DIR}/RigCompletionDataGridCell.cpp ${CMAKE_CURRENT_LIST_DIR}/RicExportFishbonesWellSegmentsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicCaseAndFileExportSettingsUi.cpp ${CMAKE_CURRENT_LIST_DIR}/RicExportFractureCompletionsImpl.cpp -${CMAKE_CURRENT_LIST_DIR}/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp -${CMAKE_CURRENT_LIST_DIR}/RigTransmissibilityCondenser.cpp -${CMAKE_CURRENT_LIST_DIR}/RigFractureTransmissibilityEquations.cpp -${CMAKE_CURRENT_LIST_DIR}/RigWellPathStimplanIntersector.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp index 895d7d1f67..94491ce1ca 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp @@ -57,6 +57,7 @@ #include "cvfPlane.h" +#include "RigVirtualPerforationTransmissibilities.h" #include //-------------------------------------------------------------------------------------------------- @@ -315,6 +316,146 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +/* +void RicWellPathExportCompletionDataFeatureImpl::computeVirtualPerfTrans( + RigVirtualPerforationTransmissibilities* virtualPerfTrans, + RimEclipseCase* eclipseCase, + const std::vector& inputWellPaths) +{ + CVF_ASSERT(eclipseCase); + + std::vector usedWellPaths; + + { + for (RimWellPath* wellPath : inputWellPaths) + { + if (wellPath->unitSystem() == eclipseCase->eclipseCaseData()->unitsType()) + { + usedWellPaths.push_back(wellPath); + } + else + { + RiaLogging::error("Well path unit systems must match unit system of chosen eclipse case."); + } + } + } + + RicExportCompletionDataSettingsUi exportSettings; + exportSettings.caseToApply = eclipseCase; + exportSettings.includeFishbones = true; + exportSettings.includePerforations = true; + exportSettings.includeFractures = true; + + bool anyPerforationsPresent = false; + for (const auto& w : usedWellPaths) + { + if (!w->perforationIntervalCollection()->perforations().empty()) + { + anyPerforationsPresent = true; + } + } + + for (auto wellPath : usedWellPaths) + { + std::vector completionsPerEclipseCell; + + // Compute completions that do not change between time steps + + if (exportSettings.includeFishbones) + { + std::vector completionData = + RicFishbonesTransmissibilityCalculationFeatureImp::generateFishboneCompdatValuesUsingAdjustedCellVolume( + wellPath, exportSettings); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + if (exportSettings.includeFractures()) + { + std::vector completionData = + RicExportFractureCompletionsImpl::generateCompdatValuesForWellPath(wellPath, exportSettings, nullptr); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + if (!anyPerforationsPresent) + { + virtualPerfTrans->appendCompletionDataForWellPath(wellPath, completionsPerEclipseCell); + } + else + { + for (size_t i = 0; i < eclipseCase->timeStepDates().size(); i++) + { + // Update time step in export settings + exportSettings.timeStep = static_cast(i); + + if (exportSettings.includePerforations) + { + std::vector completionData = generatePerforationsCompdatValues(wellPath, exportSettings); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + //virtualPerfTrans->appendCompletionDataForWellPath(wellPath, completionsPerEclipseCell); + } + } + } +} +*/ + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicWellPathExportCompletionDataFeatureImpl::computeCompletionsForWellPath( + RimWellPath* wellPath, + const RicExportCompletionDataSettingsUi& exportSettings) +{ + std::vector completionsPerEclipseCell; + { + // Compute completions that do not change between time steps + + if (exportSettings.includeFishbones) + { + std::vector completionData = + RicFishbonesTransmissibilityCalculationFeatureImp::generateFishboneCompdatValuesUsingAdjustedCellVolume( + wellPath, exportSettings); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + if (exportSettings.includeFractures()) + { + std::vector completionData = + RicExportFractureCompletionsImpl::generateCompdatValuesForWellPath(wellPath, exportSettings, nullptr); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + { +/* + for (size_t i = 0; i < exportSettings.caseToApply()->timeStepDates().size(); i++) + { + // Update time step in export settings + exportSettings.timeStep = static_cast(i); + + if (exportSettings.includePerforations) + { + std::vector completionData = generatePerforationsCompdatValues(wellPath, exportSettings); + + std::copy(completionData.begin(), completionData.end(), std::back_inserter(completionsPerEclipseCell)); + } + + // virtualPerfTrans->appendCompletionDataForWellPath(wellPath, completionsPerEclipseCell); + } +*/ + } + } + return completionsPerEclipseCell; +} + //================================================================================================== /// //================================================================================================== diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h index fa576949d9..81c102675a 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h @@ -35,6 +35,7 @@ class RimFishbonesMultipleSubs; class RimSimWellInView; class RimWellPath; class RifEclipseDataTableFormatter; +class RigVirtualPerforationTransmissibilities; //================================================================================================== /// @@ -145,6 +146,9 @@ public: const std::vector& simWells, const RicExportCompletionDataSettingsUi& exportSettings); + static std::vector computeCompletionsForWellPath(RimWellPath* wellPath, + const RicExportCompletionDataSettingsUi& exportSettings); + private: static double calculateTransmissibilityAsEclipseDoes(RimEclipseCase* eclipseCase, double skinFactor, diff --git a/ApplicationCode/ModelVisualization/RivWellPathPartMgr.cpp b/ApplicationCode/ModelVisualization/RivWellPathPartMgr.cpp index dc358782e0..760c38bc02 100644 --- a/ApplicationCode/ModelVisualization/RivWellPathPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivWellPathPartMgr.cpp @@ -23,7 +23,9 @@ #include "RiaApplication.h" +#include "RigEclipseCaseData.h" #include "RigMainGrid.h" +#include "RigVirtualPerforationTransmissibilities.h" #include "RigWellPath.h" #include "RimEclipseCase.h" @@ -203,6 +205,28 @@ void RivWellPathPartMgr::appendPerforationsToModel(const QDateTime& currentViewD } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RivWellPathPartMgr::appendVirtualTransmissibilitiesToModel(cvf::ModelBasicList* model, + const caf::DisplayCoordTransform* displayCoordTransform, + double characteristicCellSize) +{ + RimEclipseCase* eclipseCase = nullptr; + + m_rimView->firstAncestorOrThisOfType(eclipseCase); + if (!eclipseCase) return; + if (!eclipseCase->eclipseCaseData()) return; + + RigEclipseCaseData* eclipseCaseData = eclipseCase->eclipseCaseData(); + + const RigVirtualPerforationTransmissibilities* trans = eclipseCaseData->virtualPerforationTransmissibilities(); + if (trans) + { + + } +} + //-------------------------------------------------------------------------------------------------- /// The pipe geometry needs to be rebuilt on scale change to keep the pipes round //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ModelVisualization/RivWellPathPartMgr.h b/ApplicationCode/ModelVisualization/RivWellPathPartMgr.h index b39d4c3a19..c5e3c1cc75 100644 --- a/ApplicationCode/ModelVisualization/RivWellPathPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivWellPathPartMgr.h @@ -87,6 +87,10 @@ private: const caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize); + void appendVirtualTransmissibilitiesToModel(cvf::ModelBasicList* model, + const caf::DisplayCoordTransform* displayCoordTransform, + double characteristicCellSize); + void buildWellPathParts(const caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize, diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index 1484e33117..72cedbe3d8 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -99,6 +99,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationVariable.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanLegendConfig.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanColors.h ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogCurve.h +${CMAKE_CURRENT_LIST_DIR}/RimVirtualPerforationResults.h ) @@ -202,6 +203,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationVariable.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanLegendConfig.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanColors.cpp ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogCurve.cpp +${CMAKE_CURRENT_LIST_DIR}/RimVirtualPerforationResults.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 227e4b9117..b4293a6cdc 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -59,6 +59,7 @@ #include "RimTernaryLegendConfig.h" #include "RimViewController.h" #include "RimViewLinker.h" +#include "RimVirtualPerforationResults.h" #include "RimWellPathCollection.h" #include "RiuMainWindow.h" @@ -125,6 +126,10 @@ RimEclipseView::RimEclipseView() m_fractureColors = new RimStimPlanColors(); m_fractureColors.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&m_virtualPerforationResult, "VirtualPerforationResult", "Virtual Perforation Result", "", "", ""); + m_virtualPerforationResult = new RimVirtualPerforationResults(); + m_virtualPerforationResult.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&m_wellCollection, "WellCollection", "Simulation Wells", "", "", ""); m_wellCollection = new RimSimWellInViewCollection; m_wellCollection.uiCapability()->setUiHidden(true); @@ -1414,6 +1419,8 @@ void RimEclipseView::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering } } + uiTreeOrdering.add(m_virtualPerforationResult); + uiTreeOrdering.add(faultCollection()); uiTreeOrdering.add(crossSectionCollection()); diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.h b/ApplicationCode/ProjectDataModel/RimEclipseView.h index f91fec8c20..caa206d14e 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.h @@ -54,6 +54,7 @@ class RimReservoirCellResultsStorage; class RimReservoirCellResultsStorage; class RimSimWellInViewCollection; class RimStimPlanColors; +class RimVirtualPerforationResults; class RiuViewer; class RivReservoirSimWellsPartMgr; class RivIntersectionPartMgr; @@ -176,6 +177,7 @@ private: caf::PdmChildField m_cellEdgeResult; caf::PdmChildField m_faultResultSettings; caf::PdmChildField m_fractureColors; + caf::PdmChildField m_virtualPerforationResult; caf::PdmChildField m_wellCollection; caf::PdmChildField m_faultCollection; diff --git a/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.cpp b/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.cpp new file mode 100644 index 0000000000..695a4bfb08 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.cpp @@ -0,0 +1,84 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018 Statoil 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 "RimVirtualPerforationResults.h" + +#include "RimLegendConfig.h" + + + +CAF_PDM_SOURCE_INIT(RimVirtualPerforationResults, "RimVirtualPerforationResults"); + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimVirtualPerforationResults::RimVirtualPerforationResults() +{ + CAF_PDM_InitObject("Virtual Perforation Results", ":/CellResult.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&legendConfig, "LegendDefinition", "Legend Definition", "", "", ""); + this->legendConfig = new RimLegendConfig(); + legendConfig.uiCapability()->setUiHidden(true); + + CAF_PDM_InitField(&m_showTensors, "ShowTensors", true, "", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimVirtualPerforationResults::~RimVirtualPerforationResults() +{ + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimVirtualPerforationResults::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) +{ + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimVirtualPerforationResults::objectToggleField() +{ + return &m_showTensors; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimVirtualPerforationResults::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) +{ + QList options; + *useOptionsOnly = true; + + return options; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimVirtualPerforationResults::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + uiOrdering.skipRemainingFields(true); +} + diff --git a/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.h b/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.h new file mode 100644 index 0000000000..f8c1e4b6b7 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimVirtualPerforationResults.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018 Statoil 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 "cafPdmChildField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" + + +#include + +class RimLegendConfig; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimVirtualPerforationResults : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + + +public: + RimVirtualPerforationResults(); + virtual ~RimVirtualPerforationResults(); + +private: + virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + virtual caf::PdmFieldHandle* objectToggleField() override; + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; + virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + +private: + caf::PdmField m_showTensors; + + caf::PdmChildField legendConfig; +}; diff --git a/ApplicationCode/ReservoirDataModel/Completions/CMakeLists_files.cmake b/ApplicationCode/ReservoirDataModel/Completions/CMakeLists_files.cmake new file mode 100644 index 0000000000..02d025e364 --- /dev/null +++ b/ApplicationCode/ReservoirDataModel/Completions/CMakeLists_files.cmake @@ -0,0 +1,31 @@ + +set (SOURCE_GROUP_HEADER_FILES +${CMAKE_CURRENT_LIST_DIR}/RigCompletionData.h +${CMAKE_CURRENT_LIST_DIR}/RigCompletionDataGridCell.h +${CMAKE_CURRENT_LIST_DIR}/RigEclipseToStimPlanCellTransmissibilityCalculator.h +${CMAKE_CURRENT_LIST_DIR}/RigTransmissibilityCondenser.h +${CMAKE_CURRENT_LIST_DIR}/RigFractureTransmissibilityEquations.h +${CMAKE_CURRENT_LIST_DIR}/RigWellPathStimplanIntersector.h +${CMAKE_CURRENT_LIST_DIR}/RigVirtualPerforationTransmissibilities.h +) + + +set (SOURCE_GROUP_SOURCE_FILES +${CMAKE_CURRENT_LIST_DIR}/RigCompletionData.cpp +${CMAKE_CURRENT_LIST_DIR}/RigCompletionDataGridCell.cpp +${CMAKE_CURRENT_LIST_DIR}/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp +${CMAKE_CURRENT_LIST_DIR}/RigTransmissibilityCondenser.cpp +${CMAKE_CURRENT_LIST_DIR}/RigFractureTransmissibilityEquations.cpp +${CMAKE_CURRENT_LIST_DIR}/RigWellPathStimplanIntersector.cpp +${CMAKE_CURRENT_LIST_DIR}/RigVirtualPerforationTransmissibilities.cpp +) + +list(APPEND CODE_HEADER_FILES +${SOURCE_GROUP_HEADER_FILES} +) + +list(APPEND CODE_SOURCE_FILES +${SOURCE_GROUP_SOURCE_FILES} +) + +source_group( "ReservoirDataModel\\Completions" FILES ${SOURCE_GROUP_HEADER_FILES} ${SOURCE_GROUP_SOURCE_FILES} ${CMAKE_CURRENT_LIST_DIR}/CMakeLists_files.cmake ) diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigCompletionData.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionData.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigCompletionData.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigCompletionData.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigCompletionData.h b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionData.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigCompletionData.h rename to ApplicationCode/ReservoirDataModel/Completions/RigCompletionData.h diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigCompletionDataGridCell.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigCompletionDataGridCell.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigCompletionDataGridCell.h b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigCompletionDataGridCell.h rename to ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.h diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigEclipseToStimPlanCellTransmissibilityCalculator.h b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigEclipseToStimPlanCellTransmissibilityCalculator.h rename to ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigFractureTransmissibilityEquations.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigFractureTransmissibilityEquations.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigFractureTransmissibilityEquations.h b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigFractureTransmissibilityEquations.h rename to ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigTransmissibilityCondenser.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigTransmissibilityCondenser.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigTransmissibilityCondenser.h b/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigTransmissibilityCondenser.h rename to ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.h diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.cpp new file mode 100644 index 0000000000..5b017151c6 --- /dev/null +++ b/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.cpp @@ -0,0 +1,107 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Statoil 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 "RigVirtualPerforationTransmissibilities.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +CompletionDataFrame::CompletionDataFrame() {} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void CompletionDataFrame::setCompletionData(const std::vector& completions) +{ + for (auto& completion : completions) + { + auto it = m_multipleCompletionsPerEclipseCell.find(completion.completionDataGridCell()); + if (it != m_multipleCompletionsPerEclipseCell.end()) + { + it->second.push_back(completion); + } + else + { + m_multipleCompletionsPerEclipseCell.insert(std::pair>( + completion.completionDataGridCell(), std::vector{completion})); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::map>& CompletionDataFrame::multipleCompletionsPerEclipseCell() const +{ + return m_multipleCompletionsPerEclipseCell; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigVirtualPerforationTransmissibilities::RigVirtualPerforationTransmissibilities() {} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigVirtualPerforationTransmissibilities::~RigVirtualPerforationTransmissibilities() {} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigVirtualPerforationTransmissibilities::appendCompletionDataForWellPath( + RimWellPath* wellPath, + const std::vector& completions) +{ +/* + auto item = m_mapFromWellToCompletionData.find(wellPath); + if (item != m_mapFromWellToCompletionData.end()) + { + item->second.setCompletionData + } + + auto it = m_multipleCompletionsPerEclipseCell.find(completion.completionDataGridCell()); + if (it != m_multipleCompletionsPerEclipseCell.end()) + { + it->second.push_back(completion); + } + else + { + m_multipleCompletionsPerEclipseCell.insert(std::pair>( + completion.completionDataGridCell(), std::vector{completion})); + } +*/ + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::map>& + RigVirtualPerforationTransmissibilities::multipleCompletionsPerEclipseCell(RimWellPath* wellPath, size_t timeStepIndex) const +{ + static std::map> dummy; + + auto item = m_mapFromWellToCompletionData.find(wellPath); + if (item != m_mapFromWellToCompletionData.end()) + { + return item->second[timeStepIndex].multipleCompletionsPerEclipseCell(); + } + + return dummy; +} diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.h b/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.h new file mode 100644 index 0000000000..ac8968b725 --- /dev/null +++ b/ApplicationCode/ReservoirDataModel/Completions/RigVirtualPerforationTransmissibilities.h @@ -0,0 +1,67 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Statoil 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 "RigCompletionData.h" + +#include "cvfBase.h" +#include "cvfObject.h" + +#include +#include + +class RigCompletionData; +class RigCompletionDataGridCell; +class RimWellPath; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class CompletionDataFrame +{ +public: + CompletionDataFrame(); + + void setCompletionData(const std::vector& completions); + + const std::map>& + multipleCompletionsPerEclipseCell() const; + +private: + std::map> m_multipleCompletionsPerEclipseCell; +}; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RigVirtualPerforationTransmissibilities : public cvf::Object +{ +public: + RigVirtualPerforationTransmissibilities(); + ~RigVirtualPerforationTransmissibilities(); + + void appendCompletionDataForWellPath(RimWellPath* wellPath, + const std::vector& completions); + + const std::map>& + multipleCompletionsPerEclipseCell(RimWellPath* wellPath, size_t timeStepIndex) const; + +private: + std::map> m_mapFromWellToCompletionData; +}; diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigWellPathStimplanIntersector.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigWellPathStimplanIntersector.cpp rename to ApplicationCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp diff --git a/ApplicationCode/Commands/CompletionExportCommands/RigWellPathStimplanIntersector.h b/ApplicationCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h similarity index 100% rename from ApplicationCode/Commands/CompletionExportCommands/RigWellPathStimplanIntersector.h rename to ApplicationCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h diff --git a/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.cpp b/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.cpp index 2bbe793d56..12aedfc108 100644 --- a/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.cpp @@ -30,6 +30,7 @@ #include "RigSimWellData.h" #include "RigSimulationWellCenterLineCalculator.h" #include "RigSimulationWellCoordsAndMD.h" +#include "RigVirtualPerforationTransmissibilities.h" #include "RigWellPath.h" #include "RimFlowPlotCollection.h" @@ -519,6 +520,22 @@ std::vector RigEclipseCaseData::simulationWellBranches(const return branches; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigEclipseCaseData::setVirtualPerforationTransmissibilities(RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities) +{ + m_virtualPerforationTransmissibilities = virtualPerforationTransmissibilities; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const RigVirtualPerforationTransmissibilities* RigEclipseCaseData::virtualPerforationTransmissibilities() const +{ + return m_virtualPerforationTransmissibilities; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.h b/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.h index 7c59f2fea1..15820eda53 100644 --- a/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.h +++ b/ApplicationCode/ReservoirDataModel/RigEclipseCaseData.h @@ -47,6 +47,7 @@ class RigSimWellData; class RigCell; class RigWellPath; class RimEclipseCase; +class RigVirtualPerforationTransmissibilities; struct RigWellResultPoint; @@ -110,6 +111,9 @@ public: bool includeAllCellCenters, bool useAutoDetectionOfBranches) const; + void setVirtualPerforationTransmissibilities(RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities); + const RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities() const; + private: void computeActiveCellIJKBBox(); void computeWellCellsPrGrid(); @@ -127,6 +131,8 @@ private: cvf::ref m_activeFormationNamesData; + RigVirtualPerforationTransmissibilities* m_virtualPerforationTransmissibilities; + cvf::Collection m_simWellData; //< A WellResults object for each well in the reservoir cvf::Collection m_wellCellsInGrid; //< A bool array pr grid with one bool pr cell telling whether the cell is a well cell or not cvf::Collection m_gridCellToResultWellIndex; //< Array pr grid with index to well pr cell telling which well a cell is in diff --git a/ApplicationCode/UnitTests/RigCellGeometryTools-Test.cpp b/ApplicationCode/UnitTests/RigCellGeometryTools-Test.cpp index 18009f2c1a..faa0fcf4ba 100644 --- a/ApplicationCode/UnitTests/RigCellGeometryTools-Test.cpp +++ b/ApplicationCode/UnitTests/RigCellGeometryTools-Test.cpp @@ -295,7 +295,7 @@ TEST(RigCellGeometryTools, polylinePolygonIntersectionTest2) } -#include "CompletionExportCommands/RigWellPathStimplanIntersector.h" +#include "Completions/RigWellPathStimplanIntersector.h" //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationCode/UnitTests/RigTransmissibilityCondenser-Test.cpp b/ApplicationCode/UnitTests/RigTransmissibilityCondenser-Test.cpp index 32e6283a51..db0c5949d5 100644 --- a/ApplicationCode/UnitTests/RigTransmissibilityCondenser-Test.cpp +++ b/ApplicationCode/UnitTests/RigTransmissibilityCondenser-Test.cpp @@ -18,7 +18,7 @@ #include "gtest/gtest.h" -#include "CompletionExportCommands/RigTransmissibilityCondenser.h" +#include "Completions/RigTransmissibilityCondenser.h" //-------------------------------------------------------------------------------------------------- ///