From e660433d29290c054ecbe63933935d2e0fe62c96 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 14 Feb 2019 21:26:23 +0100 Subject: [PATCH] #4091 Reload case : Move reload of case into helper function --- .../RicDeleteTemporaryLgrsFeature.cpp | 20 ++- .../Commands/RicReloadCaseFeature.cpp | 7 +- .../ProjectDataModel/CMakeLists_files.cmake | 2 + .../ProjectDataModel/RimEclipseCase.cpp | 109 ++--------- .../ProjectDataModel/RimEclipseCase.h | 1 - .../ProjectDataModel/RimReloadCaseTools.cpp | 169 ++++++++++++++++++ .../ProjectDataModel/RimReloadCaseTools.h | 41 +++++ .../ProjectDataModel/RimTimeStepFilter.cpp | 4 +- 8 files changed, 246 insertions(+), 107 deletions(-) create mode 100644 ApplicationCode/ProjectDataModel/RimReloadCaseTools.cpp create mode 100644 ApplicationCode/ProjectDataModel/RimReloadCaseTools.h diff --git a/ApplicationCode/Commands/RicDeleteTemporaryLgrsFeature.cpp b/ApplicationCode/Commands/RicDeleteTemporaryLgrsFeature.cpp index 93c4c0bfa3..1ce1d215af 100644 --- a/ApplicationCode/Commands/RicDeleteTemporaryLgrsFeature.cpp +++ b/ApplicationCode/Commands/RicDeleteTemporaryLgrsFeature.cpp @@ -2,17 +2,17 @@ // // Copyright (C) 2015- Statoil ASA // Copyright (C) 2015- Ceetron Solutions AS -// +// // 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 +// +// See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,7 @@ #include "RimEclipseCase.h" #include "RimGridCollection.h" +#include "RimReloadCaseTools.h" #include "cafPdmObject.h" #include "cafSelectionManagerTools.h" @@ -38,11 +39,14 @@ void RicDeleteTemporaryLgrsFeature::deleteAllTemporaryLgrs(RimEclipseCase* eclip { RiaApplication::clearAllSelections(); - if (eclipseCase) eclipseCase->reloadDataAndUpdate(); + if (eclipseCase) + { + RimReloadCaseTools::reloadAllEclipseGridData(eclipseCase); + } } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- bool RicDeleteTemporaryLgrsFeature::isCommandEnabled() { @@ -56,7 +60,7 @@ bool RicDeleteTemporaryLgrsFeature::isCommandEnabled() } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- void RicDeleteTemporaryLgrsFeature::onActionTriggered(bool isChecked) { @@ -71,7 +75,7 @@ void RicDeleteTemporaryLgrsFeature::onActionTriggered(bool isChecked) } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- void RicDeleteTemporaryLgrsFeature::setupActionLook(QAction* actionToSetup) { diff --git a/ApplicationCode/Commands/RicReloadCaseFeature.cpp b/ApplicationCode/Commands/RicReloadCaseFeature.cpp index bfa6241773..42d5afaaba 100644 --- a/ApplicationCode/Commands/RicReloadCaseFeature.cpp +++ b/ApplicationCode/Commands/RicReloadCaseFeature.cpp @@ -22,6 +22,7 @@ #include "RiaApplication.h" #include "RimEclipseCase.h" +#include "RimReloadCaseTools.h" #include "RimTimeStepFilter.h" #include "Riu3dSelectionManager.h" @@ -63,14 +64,14 @@ void RicReloadCaseFeature::onActionTriggered(bool isChecked) for (RimEclipseCase* selectedCase : selectedEclipseCases) { - std::vector timeStepFilter;; + std::vector timeStepFilter; selectedCase->descendantsIncludingThisOfType(timeStepFilter); if (timeStepFilter.size() == 1) { timeStepFilter[0]->clearFilteredTimeSteps(); } - - selectedCase->reloadDataAndUpdate(); + + RimReloadCaseTools::reloadAllEclipseData(selectedCase); selectedCase->updateConnectedEditors(); } } diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index aff5ebb0f3..daa32a928b 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -126,6 +126,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimGeoMechContourMapView.h ${CMAKE_CURRENT_LIST_DIR}/RimGeoMechContourMapViewCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimViewNameConfig.h ${CMAKE_CURRENT_LIST_DIR}/RimScaleLegendConfig.h +${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.h ) @@ -256,6 +257,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimGeoMechContourMapView.cpp ${CMAKE_CURRENT_LIST_DIR}/RimGeoMechContourMapViewCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimViewNameConfig.cpp ${CMAKE_CURRENT_LIST_DIR}/RimScaleLegendConfig.cpp +${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationCode/ProjectDataModel/RimEclipseCase.cpp index d7796960dc..7e8a4c19e0 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseCase.cpp @@ -35,14 +35,14 @@ #include "RigSimWellData.h" #include "RigVirtualPerforationTransmissibilities.h" -#include "RimEclipseContourMapView.h" -#include "RimEclipseContourMapViewCollection.h" #include "Rim2dIntersectionView.h" #include "Rim2dIntersectionViewCollection.h" #include "RimCaseCollection.h" #include "RimCellEdgeColors.h" #include "RimCommandObject.h" #include "RimEclipseCellColors.h" +#include "RimEclipseContourMapView.h" +#include "RimEclipseContourMapViewCollection.h" #include "RimEclipsePropertyFilter.h" #include "RimEclipsePropertyFilterCollection.h" #include "RimEclipseStatisticsCase.h" @@ -57,6 +57,7 @@ #include "RimPerforationCollection.h" #include "RimProject.h" #include "RimRegularLegendConfig.h" +#include "RimReloadCaseTools.h" #include "RimReservoirCellResultsStorage.h" #include "RimStimPlanColors.h" #include "RimSummaryCase.h" @@ -414,7 +415,7 @@ void RimEclipseCase::fieldChangedByUi(const caf::PdmFieldHandle* changedField, c { if (changedField == &m_releaseResultMemory) { - reloadDataAndUpdate(); + RimReloadCaseTools::reloadAllEclipseGridData(this); m_releaseResultMemory = oldValue.toBool(); } @@ -691,7 +692,7 @@ bool RimEclipseCase::loadStaticResultsByName(const std::vector& resultN { for (const auto& resultName : resultNames) { - if (!cellResultsData->ensureKnownResultLoaded(RigEclipseResultAddress( RiaDefines::STATIC_NATIVE, resultName))) + if (!cellResultsData->ensureKnownResultLoaded(RigEclipseResultAddress(RiaDefines::STATIC_NATIVE, resultName))) { foundDataForAllResults = false; } @@ -762,7 +763,7 @@ void RimEclipseCase::setFilesContainingFaults(const std::vector& val) } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- bool RimEclipseCase::ensureReservoirCaseIsOpen() { @@ -802,28 +803,32 @@ bool RimEclipseCase::openReserviorCase() // After the placeholder result for combined transmissibility is created, // make sure the nnc transmissibilities can be addressed by this scalarResultIndex as well - RigEclipseResultAddress combinedTransmissibilityResAddr(RiaDefines::STATIC_NATIVE, RiaDefines::combinedTransmissibilityResultName()); + RigEclipseResultAddress combinedTransmissibilityResAddr(RiaDefines::STATIC_NATIVE, + RiaDefines::combinedTransmissibilityResultName()); if (results->hasResultEntry(combinedTransmissibilityResAddr)) { eclipseCaseData()->mainGrid()->nncData()->setEclResultAddress(RigNNCData::propertyNameCombTrans(), combinedTransmissibilityResAddr); } - - RigEclipseResultAddress combinedWaterFluxResAddr(RiaDefines::DYNAMIC_NATIVE, RiaDefines::combinedWaterFluxResultName()); + + RigEclipseResultAddress combinedWaterFluxResAddr(RiaDefines::DYNAMIC_NATIVE, + RiaDefines::combinedWaterFluxResultName()); if (results->hasResultEntry(combinedWaterFluxResAddr)) { eclipseCaseData()->mainGrid()->nncData()->setEclResultAddress(RigNNCData::propertyNameFluxWat(), combinedWaterFluxResAddr); } - RigEclipseResultAddress combinedOilFluxResAddr(RiaDefines::DYNAMIC_NATIVE, RiaDefines::combinedOilFluxResultName()); + RigEclipseResultAddress combinedOilFluxResAddr(RiaDefines::DYNAMIC_NATIVE, + RiaDefines::combinedOilFluxResultName()); if (results->hasResultEntry(combinedOilFluxResAddr)) { eclipseCaseData()->mainGrid()->nncData()->setEclResultAddress(RigNNCData::propertyNameFluxOil(), combinedOilFluxResAddr); } - RigEclipseResultAddress combinedGasFluxResAddr(RiaDefines::DYNAMIC_NATIVE, RiaDefines::combinedGasFluxResultName()); - + RigEclipseResultAddress combinedGasFluxResAddr(RiaDefines::DYNAMIC_NATIVE, + RiaDefines::combinedGasFluxResultName()); + if (results->hasResultEntry(combinedGasFluxResAddr)) { eclipseCaseData()->mainGrid()->nncData()->setEclResultAddress(RigNNCData::propertyNameFluxGas(), @@ -924,88 +929,6 @@ QString RimEclipseCase::timeStepName(int frameIdx) const return QString(""); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEclipseCase::reloadDataAndUpdate() -{ - if (this->eclipseCaseData()) - { - RigCaseCellResultsData* matrixModelResults = eclipseCaseData()->results(RiaDefines::MATRIX_MODEL); - if (matrixModelResults) - { - matrixModelResults->clearAllResults(); - } - - RigCaseCellResultsData* fractureModelResults = eclipseCaseData()->results(RiaDefines::FRACTURE_MODEL); - if (fractureModelResults) - { - fractureModelResults->clearAllResults(); - } - - reloadEclipseGridFile(); - - for (size_t i = 0; i < reservoirViews().size(); i++) - { - RimEclipseView* reservoirView = reservoirViews()[i]; - CVF_ASSERT(reservoirView); - reservoirView->loadDataAndUpdate(); - reservoirView->updateGridBoxData(); - reservoirView->updateAnnotationItems(); - } - - for (RimEclipseContourMapView* contourMap : m_contourMapCollection->views()) - { - CVF_ASSERT(contourMap); - contourMap->loadDataAndUpdate(); - contourMap->updateGridBoxData(); - contourMap->updateAnnotationItems(); - } - - for (Rim2dIntersectionView* view : intersectionViewCollection()->views()) - { - view->createDisplayModelAndRedraw(); - } - - RimProject* project = RiaApplication::instance()->project(); - if (project) - { - RimSummaryCaseMainCollection* sumCaseColl = - project->activeOilField() ? project->activeOilField()->summaryCaseMainCollection() : nullptr; - if (sumCaseColl) - { - sumCaseColl->loadAllSummaryCaseData(); - } - - if (project->mainPlotCollection()) - { - RimWellLogPlotCollection* wellPlotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - RimSummaryPlotCollection* summaryPlotCollection = project->mainPlotCollection()->summaryPlotCollection(); - RimFlowPlotCollection* flowPlotCollection = project->mainPlotCollection()->flowPlotCollection(); - - if (wellPlotCollection) - { - for (size_t i = 0; i < wellPlotCollection->wellLogPlots().size(); ++i) - { - wellPlotCollection->wellLogPlots()[i]->loadDataAndUpdate(); - } - } - if (summaryPlotCollection) - { - for (size_t i = 0; i < summaryPlotCollection->summaryPlots().size(); ++i) - { - summaryPlotCollection->summaryPlots()[i]->loadDataAndUpdate(); - } - } - if (flowPlotCollection) - { - flowPlotCollection->loadDataAndUpdate(); - } - } - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseCase.h b/ApplicationCode/ProjectDataModel/RimEclipseCase.h index ad33df9f73..014e2b8db9 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseCase.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseCase.h @@ -107,7 +107,6 @@ public: cvf::BoundingBox allCellsBoundingBox() const override; cvf::Vec3d displayModelOffset() const override; - void reloadDataAndUpdate(); virtual void reloadEclipseGridFile() = 0; diff --git a/ApplicationCode/ProjectDataModel/RimReloadCaseTools.cpp b/ApplicationCode/ProjectDataModel/RimReloadCaseTools.cpp new file mode 100644 index 0000000000..14c56687e4 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimReloadCaseTools.cpp @@ -0,0 +1,169 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- 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. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimReloadCaseTools.h" + +#include "RiaApplication.h" +#include "RiaFractureDefines.h" +#include "RiaSummaryTools.h" + +#include "RigCaseCellResultsData.h" +#include "RigEclipseCaseData.h" + +#include "Rim2dIntersectionView.h" +#include "Rim2dIntersectionViewCollection.h" +#include "RimEclipseCase.h" +#include "RimEclipseContourMapView.h" +#include "RimEclipseContourMapViewCollection.h" +#include "RimEclipseView.h" +#include "RimFlowPlotCollection.h" +#include "RimMainPlotCollection.h" +#include "RimProject.h" +#include "RimSummaryCaseMainCollection.h" +#include "RimSummaryPlot.h" +#include "RimSummaryPlotCollection.h" +#include "RimWellLogPlot.h" +#include "RimWellLogPlotCollection.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::reloadAllEclipseData(RimEclipseCase* eclipseCase) +{ + reloadAllEclipseData(eclipseCase, true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::reloadAllEclipseGridData(RimEclipseCase* eclipseCase) +{ + reloadAllEclipseData(eclipseCase, false); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::reloadAllEclipseData(RimEclipseCase* eclipseCase, bool reloadSummaryData) +{ + CVF_ASSERT(eclipseCase); + + RigEclipseCaseData* eclipseCaseData = eclipseCase->eclipseCaseData(); + if (!eclipseCaseData) return; + + clearAllGridData(eclipseCaseData); + + eclipseCase->reloadEclipseGridFile(); + + updateAll3dViews(eclipseCase); + + if (reloadSummaryData) + { + RimSummaryCaseMainCollection* sumCaseColl = RiaSummaryTools::summaryCaseMainCollection(); + if (sumCaseColl) + { + sumCaseColl->loadAllSummaryCaseData(); + } + } + + updateAllPlots(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::clearAllGridData(RigEclipseCaseData* eclipseCaseData) +{ + if (!eclipseCaseData) return; + + RigCaseCellResultsData* matrixModelResults = eclipseCaseData->results(RiaDefines::MATRIX_MODEL); + if (matrixModelResults) + { + matrixModelResults->clearAllResults(); + } + + RigCaseCellResultsData* fractureModelResults = eclipseCaseData->results(RiaDefines::FRACTURE_MODEL); + if (fractureModelResults) + { + fractureModelResults->clearAllResults(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::updateAll3dViews(RimEclipseCase* eclipseCase) +{ + if (!eclipseCase) return; + + for (RimEclipseView* reservoirView : eclipseCase->reservoirViews()) + { + CVF_ASSERT(reservoirView); + reservoirView->loadDataAndUpdate(); + reservoirView->updateGridBoxData(); + reservoirView->updateAnnotationItems(); + } + + for (RimEclipseContourMapView* contourMap : eclipseCase->contourMapCollection()->views()) + { + CVF_ASSERT(contourMap); + contourMap->loadDataAndUpdate(); + contourMap->updateGridBoxData(); + contourMap->updateAnnotationItems(); + } + + for (Rim2dIntersectionView* view : eclipseCase->intersectionViewCollection()->views()) + { + view->createDisplayModelAndRedraw(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReloadCaseTools::updateAllPlots() +{ + RimProject* project = RiaApplication::instance()->project(); + if (project && project->mainPlotCollection()) + { + RimWellLogPlotCollection* wellPlotCollection = project->mainPlotCollection()->wellLogPlotCollection(); + + if (wellPlotCollection) + { + for (RimWellLogPlot* wellLogPlot : wellPlotCollection->wellLogPlots()) + { + wellLogPlot->loadDataAndUpdate(); + } + } + + RimSummaryPlotCollection* summaryPlotCollection = project->mainPlotCollection()->summaryPlotCollection(); + if (summaryPlotCollection) + { + for (RimSummaryPlot* summaryPlot : summaryPlotCollection->summaryPlots()) + { + summaryPlot->loadDataAndUpdate(); + } + } + + RimFlowPlotCollection* flowPlotCollection = project->mainPlotCollection()->flowPlotCollection(); + if (flowPlotCollection) + { + flowPlotCollection->loadDataAndUpdate(); + } + } +} diff --git a/ApplicationCode/ProjectDataModel/RimReloadCaseTools.h b/ApplicationCode/ProjectDataModel/RimReloadCaseTools.h new file mode 100644 index 0000000000..b13b552011 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimReloadCaseTools.h @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- 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 + +class RimEclipseCase; +class RigEclipseCaseData; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RimReloadCaseTools +{ +public: + // Reload all eclipse data, both grid and summary + static void reloadAllEclipseData(RimEclipseCase* eclipseCase); + + // Reload grid data, but not summary + static void reloadAllEclipseGridData(RimEclipseCase* eclipseCase); + +private: + static void reloadAllEclipseData(RimEclipseCase* eclipseCase, bool reloadSummaryData); + static void clearAllGridData(RigEclipseCaseData* eclipseCaseData); + static void updateAll3dViews(RimEclipseCase* eclipseCase); + static void updateAllPlots(); +}; diff --git a/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp b/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp index 1e8c2d38fd..47b2397af5 100644 --- a/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimTimeStepFilter.cpp @@ -26,6 +26,7 @@ #include "RimEclipseResultCase.h" #include "RimGeoMechCase.h" +#include "RimReloadCaseTools.h" #include "RimReservoirCellResultsStorage.h" #include "RimTools.h" @@ -200,10 +201,9 @@ void RimTimeStepFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField { if (updateFilteredTimeStepsFromUi()) { - if (rimEclipseResultCase) { - rimEclipseResultCase->reloadDataAndUpdate(); + RimReloadCaseTools::reloadAllEclipseGridData(rimEclipseResultCase); } else if (rimGeoMechCase) {