From 07ab821646c140dd547278b0ac479a49e50dd729 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 13 Sep 2019 13:17:07 +0200 Subject: [PATCH 1/5] #4716 Summary Case : Guard access to contained summary reader --- .../RicExportFractureCompletionsImpl.cpp | 2 +- .../RicSummaryPlotFeatureImpl.cpp | 5 ++++- .../Summary/RimSummaryCaseCollection.cpp | 2 +- .../Summary/RimSummaryCurve.cpp | 21 +++++++++++-------- .../Summary/RimSummaryPlotSourceStepping.cpp | 6 +++--- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp index 269eec1081..3c329ad7fb 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp @@ -427,7 +427,7 @@ void RicExportFractureCompletionsImpl::getWellPressuresAndInitialProductionTimeS { RimSummaryCase* summaryCase = mainCollection->findSummaryCaseFromEclipseResultCase(resultCase); - if (summaryCase) + if (summaryCase && summaryCase->summaryReader()) { std::vector values; if (summaryCase->summaryReader()->values(wbhpPressureAddress, &values)) diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp index 11811f7424..89b490fa0f 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp @@ -37,7 +37,7 @@ //-------------------------------------------------------------------------------------------------- RimSummaryCurve* RicSummaryPlotFeatureImpl::addDefaultCurveToPlot(RimSummaryPlot* plot, RimSummaryCase* summaryCase) { - if (plot) + if (plot && summaryCase && summaryCase->summaryReader()) { RifEclipseSummaryAddress defaultAddressToUse; @@ -88,6 +88,9 @@ std::vector RicSummaryPlotFeatureImpl::addDefaultCurvesToPlot( { std::vector defaultCurves; + if (!plot) return defaultCurves; + if (!summaryCase || !summaryCase->summaryReader()) return defaultCurves; + QString curvesTextFilter = RiaApplication::instance()->preferences()->defaultSummaryCurvesTextFilter; QStringList curveFilters = curvesTextFilter.split(";", QString::SkipEmptyParts); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index 95396885f6..280b34555f 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -276,7 +276,7 @@ std::set RimSummaryCaseCollection::ensembleSummaryAddr } } - if (maxAddrIndex >= 0) + if (maxAddrIndex >= 0 && m_cases[maxAddrIndex]->summaryReader()) { const std::set& addrs = m_cases[maxAddrIndex]->summaryReader()->allResultAddresses(); addresses.insert(addrs.begin(), addrs.end()); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index 9ae2c362b2..521de1c23e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -515,16 +515,19 @@ void RimSummaryCurve::onLoadDataAndUpdate(bool updateParentPlot) if (plot->timeAxisProperties()->timeMode() == RimSummaryTimeAxisProperties::DATE) { auto reader = summaryCaseY()->summaryReader(); - auto errAddress = reader->errorAddress(summaryAddressY()); - if (errAddress.isValid()) + if (reader) { - std::vector errValues; - reader->values(errAddress, &errValues); - m_qwtPlotCurve->setSamplesFromTimeTAndYValues(curveTimeStepsY, curveValuesY, errValues, isLogCurve); - } - else - { - m_qwtPlotCurve->setSamplesFromTimeTAndYValues(curveTimeStepsY, curveValuesY, isLogCurve); + auto errAddress = reader->errorAddress(summaryAddressY()); + if (errAddress.isValid()) + { + std::vector errValues; + reader->values(errAddress, &errValues); + m_qwtPlotCurve->setSamplesFromTimeTAndYValues(curveTimeStepsY, curveValuesY, errValues, isLogCurve); + } + else + { + m_qwtPlotCurve->setSamplesFromTimeTAndYValues(curveTimeStepsY, curveValuesY, isLogCurve); + } } } else diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 402f93bbf0..46be431e15 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -581,12 +581,12 @@ std::vector RimSummaryPlotSourceStepping::summaryRea { for (auto curve : curveCollection->curves()) { - if (isYAxisStepping() && curve->summaryCaseY()) + if (isYAxisStepping() && curve->summaryCaseY() && curve->summaryCaseY()->summaryReader()) { readers.push_back(curve->summaryCaseY()->summaryReader()); } - if (isXAxisStepping() && curve->summaryCaseX()) + if (isXAxisStepping() && curve->summaryCaseX() && curve->summaryCaseX()->summaryReader()) { readers.push_back(curve->summaryCaseX()->summaryReader()); } @@ -602,7 +602,7 @@ std::vector RimSummaryPlotSourceStepping::summaryRea { for (auto curve : curveSet->curves()) { - if (isYAxisStepping() && curve->summaryCaseY()) + if (isYAxisStepping() && curve->summaryCaseY() && curve->summaryCaseY()->summaryReader()) { readers.push_back(curve->summaryCaseY()->summaryReader()); } From da47acfc1c23bb426ae0ad1fe51f73974c011810 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 10 Sep 2019 10:41:10 +0200 Subject: [PATCH 2/5] #4644 Summary Plot: Fix missing update of plot title --- ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp index 35feb92961..27344f43cb 100644 --- a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp +++ b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp @@ -282,6 +282,9 @@ void RiaSummaryCurveAnalyzer::clear() m_wellCompletions.clear(); m_wellSegmentNumbers.clear(); m_blocks.clear(); + + m_quantitiesNoMatchingHistory.clear(); + m_quantitiesWithMatchingHistory.clear(); } //-------------------------------------------------------------------------------------------------- From b38904d158201e2652a17a8466595127b369a4fb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 11 Sep 2019 13:31:15 +0200 Subject: [PATCH 3/5] #4699 Guard use of TERNARY cell result in property filters --- .../RicEclipsePropertyFilterFeatureImpl.cpp | 8 +++- .../RimEclipseResultDefinition.cpp | 48 ++++++++++--------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp index 9c6a3b5ebd..514921eab0 100644 --- a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp +++ b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp @@ -118,8 +118,12 @@ void RicEclipsePropertyFilterFeatureImpl::setDefaults(RimEclipsePropertyFilter* RimEclipseView* reservoirView = nullptr; propertyFilter->firstAncestorOrThisOfTypeAsserted(reservoirView); - propertyFilter->resultDefinition()->setEclipseCase(reservoirView->eclipseCase()); - propertyFilter->resultDefinition()->simpleCopy(reservoirView->cellResult()); + propertyFilter->resultDefinition()->setEclipseCase( reservoirView->eclipseCase() ); + + if ( !RiaDefines::isPerCellFaceResult( reservoirView->cellResult()->resultVariable() ) ) + { + propertyFilter->resultDefinition()->simpleCopy( reservoirView->cellResult() ); + } propertyFilter->resultDefinition()->loadResult(); propertyFilter->setToDefaultValues(); diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 94f50131a4..d1551a13cb 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -1529,39 +1529,41 @@ QList optionList.push_back(caf::PdmOptionItemInfo(s, s)); } - // Ternary Result - if (ternaryEnabled) + if ( addPerCellFaceOptionItems ) { - bool hasAtLeastOneTernaryComponent = false; - if (cellCenterResultNames.contains("SOIL")) - hasAtLeastOneTernaryComponent = true; - else if (cellCenterResultNames.contains("SGAS")) - hasAtLeastOneTernaryComponent = true; - else if (cellCenterResultNames.contains("SWAT")) - hasAtLeastOneTernaryComponent = true; - - if (resultCatType == RiaDefines::DYNAMIC_NATIVE && hasAtLeastOneTernaryComponent) + for ( const QString& s : cellFaceResultNames ) { - optionList.push_front( - caf::PdmOptionItemInfo(RiaDefines::ternarySaturationResultName(), RiaDefines::ternarySaturationResultName())); - } - } - if (addPerCellFaceOptionItems) - { - for (const QString& s : cellFaceResultNames) - { - if (showDerivedResultsFirst) + if ( showDerivedResultsFirst ) { - optionList.push_front(caf::PdmOptionItemInfo(s, s)); + optionList.push_front( caf::PdmOptionItemInfo( s, s ) ); } else { - optionList.push_back(caf::PdmOptionItemInfo(s, s)); + optionList.push_back( caf::PdmOptionItemInfo( s, s ) ); + } + } + + // Ternary Result + if ( ternaryEnabled ) + { + bool hasAtLeastOneTernaryComponent = false; + if ( cellCenterResultNames.contains( "SOIL" ) ) + hasAtLeastOneTernaryComponent = true; + else if ( cellCenterResultNames.contains( "SGAS" ) ) + hasAtLeastOneTernaryComponent = true; + else if ( cellCenterResultNames.contains( "SWAT" ) ) + hasAtLeastOneTernaryComponent = true; + + if ( resultCatType == RiaDefines::DYNAMIC_NATIVE && hasAtLeastOneTernaryComponent ) + { + optionList.push_front( caf::PdmOptionItemInfo( RiaDefines::ternarySaturationResultName(), + RiaDefines::ternarySaturationResultName() ) ); } } } - optionList.push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), RiaDefines::undefinedResultName())); + optionList.push_front( + caf::PdmOptionItemInfo( RiaDefines::undefinedResultName(), RiaDefines::undefinedResultName() ) ); return optionList; } From 25c692d3dbc70c15f3d2595cac5d1e6513a16cc4 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Tue, 10 Sep 2019 09:18:40 +0200 Subject: [PATCH 4/5] #4668 Make contour time and case diff work --- .../RimEclipseContourMapProjection.cpp | 7 ++++-- .../RimEclipseResultDefinition.cpp | 20 ++++++++++++++++ .../RimEclipseResultDefinition.h | 23 +++++++++++-------- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseContourMapProjection.cpp b/ApplicationCode/ProjectDataModel/RimEclipseContourMapProjection.cpp index 9ee5933e0a..4038045578 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseContourMapProjection.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseContourMapProjection.cpp @@ -202,8 +202,11 @@ std::vector RimEclipseContourMapProjection::generateResults(int timeStep else if (!(cellColors->hasStaticResult() && timeStep > 0)) { m_currentResultName = cellColors->resultVariable(); - RigEclipseResultAddress resAddr(cellColors->resultType(), cellColors->resultVariable()); - if (resAddr.isValid() && resultData->hasResultEntry(resAddr)) + RigEclipseResultAddress resAddr( cellColors->resultType(), + cellColors->resultVariable(), + cellColors->timeLapseBaseTimeStep(), + cellColors->caseDiffIndex() ); + if ( resAddr.isValid() && resultData->hasResultEntry( resAddr ) ) { gridResultValues = resultData->cellScalarResults(resAddr, timeStep); } diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index d1551a13cb..506a3739b9 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -968,6 +968,26 @@ QString RimEclipseResultDefinition::diffResultUiShortNameHTML() const return diffResult.join("
"); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimEclipseResultDefinition::timeLapseBaseTimeStep() const +{ + return m_timeLapseBaseTimestep; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimEclipseResultDefinition::caseDiffIndex() const +{ + if ( m_differenceCase ) + { + return m_differenceCase->caseId(); + } + return -1; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h index 2f7dc83962..0d062cce1d 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h @@ -98,16 +98,19 @@ public: QString diffResultUiShortName() const; QString diffResultUiShortNameHTML() const; - void loadResult(); - RigEclipseResultAddress eclipseResultAddress() const; - void setFromEclipseResultAddress(const RigEclipseResultAddress& resultAddress); - bool hasStaticResult() const; - bool hasDynamicResult() const; - bool hasResult() const; - bool isTernarySaturationSelected() const; - bool isCompletionTypeSelected() const; - bool hasCategoryResult() const; - bool isFlowDiagOrInjectionFlooding() const; + int timeLapseBaseTimeStep() const; + int caseDiffIndex() const; + + void loadResult(); + RigEclipseResultAddress eclipseResultAddress() const; + void setFromEclipseResultAddress( const RigEclipseResultAddress& resultAddress ); + bool hasStaticResult() const; + bool hasDynamicResult() const; + bool hasResult() const; + bool isTernarySaturationSelected() const; + bool isCompletionTypeSelected() const; + bool hasCategoryResult() const; + bool isFlowDiagOrInjectionFlooding() const; RigCaseCellResultsData* currentGridCellResults() const; From 1cb17203273a829a2d573e0c02b7c4056efa02dd Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 13 Sep 2019 14:55:04 +0200 Subject: [PATCH 5/5] #4688 Contour plot : Changing Base Time Step has no effect --- .../RimEclipseResultDefinition.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 506a3739b9..7948395323 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -52,6 +52,8 @@ #include "RimReservoirCellResultsStorage.h" #include "RimViewLinker.h" #include "RimWellLogExtractionCurve.h" +#include "RimContourMapProjection.h" +#include "RimEclipseContourMapView.h" #include "cafPdmUiListEditor.h" #include "cafPdmUiToolButtonEditor.h" @@ -286,14 +288,28 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha loadDataAndUpdate(); } + RimEclipseContourMapView* contourMapView = nullptr; + this->firstAncestorOrThisOfType(contourMapView); + if (&m_differenceCase == changedField) { m_timeLapseBaseTimestep = RigEclipseResultAddress::noTimeLapseValue(); + + if (contourMapView) + { + contourMapView->contourMapProjection()->updatedWeightingResult(); + } + loadDataAndUpdate(); } if (&m_timeLapseBaseTimestep == changedField) { + if (contourMapView) + { + contourMapView->contourMapProjection()->updatedWeightingResult(); + } + loadDataAndUpdate(); }