mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5140 Fix incorrect values for "Show Plot Data" action on calculated summary curves.
Fixed by checking if all the variables in a calculated expression is based on accumulated data.
This commit is contained in:
@@ -25,13 +25,17 @@
|
|||||||
#include "RimMainPlotCollection.h"
|
#include "RimMainPlotCollection.h"
|
||||||
#include "RimOilField.h"
|
#include "RimOilField.h"
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
|
#include "RimSummaryAddress.h"
|
||||||
|
#include "RimSummaryCalculation.h"
|
||||||
|
#include "RimSummaryCalculationCollection.h"
|
||||||
|
#include "RimSummaryCalculationVariable.h"
|
||||||
#include "RimSummaryCaseMainCollection.h"
|
#include "RimSummaryCaseMainCollection.h"
|
||||||
#include "RimSummaryCrossPlot.h"
|
#include "RimSummaryCrossPlot.h"
|
||||||
|
#include "RimSummaryCrossPlotCollection.h"
|
||||||
#include "RimSummaryCurve.h"
|
#include "RimSummaryCurve.h"
|
||||||
#include "RimSummaryPlot.h"
|
#include "RimSummaryPlot.h"
|
||||||
#include "RimSummaryPlotCollection.h"
|
#include "RimSummaryPlotCollection.h"
|
||||||
|
|
||||||
#include "RimSummaryCrossPlotCollection.h"
|
|
||||||
#include "cafPdmObject.h"
|
#include "cafPdmObject.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -159,3 +163,47 @@ bool RiaSummaryTools::isSummaryCrossPlot( const RimSummaryPlot* plot )
|
|||||||
{
|
{
|
||||||
return dynamic_cast<const RimSummaryCrossPlot*>( plot );
|
return dynamic_cast<const RimSummaryCrossPlot*>( plot );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RiaSummaryTools::hasAccumulatedData( const RifEclipseSummaryAddress& address )
|
||||||
|
{
|
||||||
|
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED )
|
||||||
|
{
|
||||||
|
std::vector<RimSummaryCase*> cases;
|
||||||
|
std::vector<RifEclipseSummaryAddress> addresses;
|
||||||
|
|
||||||
|
getSummaryCasesAndAddressesForCalculation( address.id(), cases, addresses );
|
||||||
|
for ( const RifEclipseSummaryAddress& variableAddress : addresses )
|
||||||
|
{
|
||||||
|
if ( !variableAddress.hasAccumulatedData() )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// All the variables are accumulated
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return address.hasAccumulatedData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RiaSummaryTools::getSummaryCasesAndAddressesForCalculation( int id,
|
||||||
|
std::vector<RimSummaryCase*>& cases,
|
||||||
|
std::vector<RifEclipseSummaryAddress>& addresses )
|
||||||
|
{
|
||||||
|
RimProject* proj = RiaApplication::instance()->project();
|
||||||
|
|
||||||
|
RimSummaryCalculationCollection* calculationColl = proj->calculationCollection();
|
||||||
|
if ( !calculationColl ) return;
|
||||||
|
|
||||||
|
RimSummaryCalculation* calculation = calculationColl->findCalculationById( id );
|
||||||
|
if ( !calculation ) return;
|
||||||
|
|
||||||
|
for ( RimSummaryCalculationVariable* v : calculation->allVariables() )
|
||||||
|
{
|
||||||
|
cases.push_back( v->summaryCase() );
|
||||||
|
addresses.push_back( v->summaryAddress()->address() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,11 +18,16 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class RimSummaryPlotCollection;
|
class RimSummaryPlotCollection;
|
||||||
class RimSummaryPlot;
|
class RimSummaryPlot;
|
||||||
class RimSummaryCrossPlot;
|
class RimSummaryCrossPlot;
|
||||||
class RimSummaryCrossPlotCollection;
|
class RimSummaryCrossPlotCollection;
|
||||||
class RimSummaryCaseMainCollection;
|
class RimSummaryCaseMainCollection;
|
||||||
|
class RimSummaryCase;
|
||||||
|
|
||||||
|
class RifEclipseSummaryAddress;
|
||||||
|
|
||||||
class QString;
|
class QString;
|
||||||
|
|
||||||
@@ -49,4 +54,9 @@ public:
|
|||||||
static RimSummaryCrossPlot* parentCrossPlot( caf::PdmObject* object );
|
static RimSummaryCrossPlot* parentCrossPlot( caf::PdmObject* object );
|
||||||
static RimSummaryCrossPlotCollection* parentCrossPlotCollection( caf::PdmObject* object );
|
static RimSummaryCrossPlotCollection* parentCrossPlotCollection( caf::PdmObject* object );
|
||||||
static bool isSummaryCrossPlot( const RimSummaryPlot* plot );
|
static bool isSummaryCrossPlot( const RimSummaryPlot* plot );
|
||||||
|
|
||||||
|
static bool hasAccumulatedData( const RifEclipseSummaryAddress& address );
|
||||||
|
static void getSummaryCasesAndAddressesForCalculation( int id,
|
||||||
|
std::vector<RimSummaryCase*>& cases,
|
||||||
|
std::vector<RifEclipseSummaryAddress>& addresses );
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,7 +20,9 @@
|
|||||||
|
|
||||||
#include "RifEnsembleStatisticsReader.h"
|
#include "RifEnsembleStatisticsReader.h"
|
||||||
|
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
#include "RiaTimeHistoryCurveResampler.h"
|
#include "RiaTimeHistoryCurveResampler.h"
|
||||||
|
|
||||||
#include "RigStatisticsMath.h"
|
#include "RigStatisticsMath.h"
|
||||||
|
|
||||||
#include "RimEnsembleCurveSet.h"
|
#include "RimEnsembleCurveSet.h"
|
||||||
@@ -158,7 +160,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
|
|||||||
|
|
||||||
RiaTimeHistoryCurveResampler resampler;
|
RiaTimeHistoryCurveResampler resampler;
|
||||||
resampler.setCurveData( values, timeSteps );
|
resampler.setCurveData( values, timeSteps );
|
||||||
if ( inputAddress.hasAccumulatedData() )
|
if ( RiaSummaryTools::hasAccumulatedData( inputAddress ) )
|
||||||
resampler.resampleAndComputePeriodEndValues( DateTimePeriod::DAY );
|
resampler.resampleAndComputePeriodEndValues( DateTimePeriod::DAY );
|
||||||
else
|
else
|
||||||
resampler.resampleAndComputeWeightedMeanValues( DateTimePeriod::DAY );
|
resampler.resampleAndComputeWeightedMeanValues( DateTimePeriod::DAY );
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "RiaGuiApplication.h"
|
#include "RiaGuiApplication.h"
|
||||||
#include "RiaPreferences.h"
|
#include "RiaPreferences.h"
|
||||||
#include "RiaStatisticsTools.h"
|
#include "RiaStatisticsTools.h"
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
|
|
||||||
#include "RifReaderEclipseSummary.h"
|
#include "RifReaderEclipseSummary.h"
|
||||||
|
|
||||||
@@ -1125,7 +1126,7 @@ void RimSummaryCurve::calculateCurveInterpolationFromAddress()
|
|||||||
if ( m_yValuesSummaryAddress() )
|
if ( m_yValuesSummaryAddress() )
|
||||||
{
|
{
|
||||||
auto address = m_yValuesSummaryAddress()->address();
|
auto address = m_yValuesSummaryAddress()->address();
|
||||||
if ( address.hasAccumulatedData() )
|
if ( RiaSummaryTools::hasAccumulatedData( address ) )
|
||||||
{
|
{
|
||||||
m_curveInterpolation = RiuQwtPlotCurve::INTERPOLATION_POINT_TO_POINT;
|
m_curveInterpolation = RiuQwtPlotCurve::INTERPOLATION_POINT_TO_POINT;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "RiaFieldHandleTools.h"
|
#include "RiaFieldHandleTools.h"
|
||||||
#include "RiaSummaryCurveAnalyzer.h"
|
#include "RiaSummaryCurveAnalyzer.h"
|
||||||
#include "RiaSummaryCurveDefinition.h"
|
#include "RiaSummaryCurveDefinition.h"
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
#include "RiaTimeHistoryCurveResampler.h"
|
#include "RiaTimeHistoryCurveResampler.h"
|
||||||
|
|
||||||
#include "SummaryPlotCommands/RicSummaryCurveCreator.h"
|
#include "SummaryPlotCommands/RicSummaryCurveCreator.h"
|
||||||
@@ -1785,22 +1786,9 @@ void RimSummaryPlot::updateNameHelperWithCurveData( RimSummaryPlotNameHelper* na
|
|||||||
{
|
{
|
||||||
if ( curve->summaryAddressY().category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED )
|
if ( curve->summaryAddressY().category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED )
|
||||||
{
|
{
|
||||||
RimProject* proj = RiaApplication::instance()->project();
|
RiaSummaryTools::getSummaryCasesAndAddressesForCalculation( curve->summaryAddressY().id(),
|
||||||
RimSummaryCalculationCollection* calculationColl = proj->calculationCollection();
|
sumCases,
|
||||||
|
addresses );
|
||||||
if ( calculationColl )
|
|
||||||
{
|
|
||||||
RimSummaryCalculation* calculation = calculationColl->findCalculationById(
|
|
||||||
curve->summaryAddressY().id() );
|
|
||||||
if ( calculation )
|
|
||||||
{
|
|
||||||
for ( RimSummaryCalculationVariable* v : calculation->allVariables() )
|
|
||||||
{
|
|
||||||
sumCases.push_back( v->summaryCase() );
|
|
||||||
addresses.push_back( v->summaryAddress()->address() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2233,7 +2221,8 @@ void prepareCaseCurvesForExport( DateTimePeriod period,
|
|||||||
{
|
{
|
||||||
resampler.setCurveData( curveDataItem.values, caseTimeSteps );
|
resampler.setCurveData( curveDataItem.values, caseTimeSteps );
|
||||||
|
|
||||||
if ( curveDataItem.address.hasAccumulatedData() || algorithm == ResampleAlgorithm::PERIOD_END )
|
if ( RiaSummaryTools::hasAccumulatedData( curveDataItem.address ) ||
|
||||||
|
algorithm == ResampleAlgorithm::PERIOD_END )
|
||||||
{
|
{
|
||||||
resampler.resampleAndComputePeriodEndValues( period );
|
resampler.resampleAndComputePeriodEndValues( period );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user