Merge pull request #5210 from OPM/fix-show-plot-on-calculated-curves-5140

Fix show plot on calculated curves 5140
This commit is contained in:
Magne Sjaastad
2019-12-13 11:05:25 +01:00
committed by GitHub
30 changed files with 421 additions and 68 deletions

View File

@@ -322,7 +322,8 @@ RimSummaryCurve* RicPlotProductionRateFeature::addSummaryCurve( RimSummaryPlot*
-1,
-1,
-1,
false );
false,
-1 );
if ( !gridSummaryCase->summaryReader()->hasAddress( addr ) )
{

View File

@@ -18,15 +18,25 @@
#include "RicReplaceSummaryCaseFeature.h"
#include "RiaApplication.h"
#include "RiaLogging.h"
#include "RiaSummaryTools.h"
#include "RicImportGeneralDataFeature.h"
#include "RimCalculatedSummaryCase.h"
#include "RimFileSummaryCase.h"
#include "RimProject.h"
#include "RimSummaryAddress.h"
#include "RimSummaryCalculation.h"
#include "RimSummaryCalculationCollection.h"
#include "RimSummaryCalculationVariable.h"
#include "RimSummaryCase.h"
#include "RimSummaryCaseCollection.h"
#include "RimSummaryCaseMainCollection.h"
#include "RimSummaryCrossPlot.h"
#include "RimSummaryCrossPlotCollection.h"
#include "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
@@ -65,9 +75,89 @@ void RicReplaceSummaryCaseFeature::onActionTriggered( bool isChecked )
summaryCase->createRftReaderInterface();
RiaLogging::info( QString( "Replaced summary data for %1" ).arg( oldSummaryHeaderFilename ) );
RimSummaryCalculationCollection* calcColl = RiaApplication::instance()->project()->calculationCollection();
// Find and update all changed calculations
std::set<int> ids;
for ( RimSummaryCalculation* summaryCalculation : calcColl->calculations() )
{
bool needsUpdate = checkIfCalculationNeedsUpdate( summaryCalculation, summaryCase );
if ( needsUpdate )
{
ids.insert( summaryCalculation->id() );
summaryCalculation->parseExpression();
summaryCalculation->calculate();
summaryCalculation->updateDependentCurvesAndPlots();
}
}
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots )
{
// Update summary curves on calculated data
std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves();
for ( RimSummaryCurve* summaryCurve : summaryCurves )
{
RifEclipseSummaryAddress summaryAddressY = summaryCurve->summaryAddressY();
if ( summaryAddressY.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED &&
ids.find( summaryAddressY.id() ) != ids.end() )
{
if ( calcColl )
{
RimSummaryCalculation* calculation = calcColl->findCalculationById( summaryAddressY.id() );
QString description = calculation->description();
RifEclipseSummaryAddress updatedAdr =
RifEclipseSummaryAddress::calculatedAddress( description.toStdString(), calculation->id() );
summaryCurve->setSummaryAddressYAndApplyInterpolation( updatedAdr );
summaryCurve->loadDataAndUpdate( true );
}
}
}
summaryPlot->loadDataAndUpdate();
}
RimSummaryCrossPlotCollection* summaryCrossPlotColl = RiaSummaryTools::summaryCrossPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryCrossPlotColl->summaryPlots() )
{
// Update summary curves on calculated data
std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves();
for ( RimSummaryCurve* summaryCurve : summaryCurves )
{
RifEclipseSummaryAddress summaryAddressX = summaryCurve->summaryAddressX();
if ( summaryAddressX.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED &&
ids.find( summaryAddressX.id() ) != ids.end() )
{
if ( calcColl )
{
RimSummaryCalculation* calculation = calcColl->findCalculationById( summaryAddressX.id() );
QString description = calculation->description();
RifEclipseSummaryAddress updatedAdr =
RifEclipseSummaryAddress::calculatedAddress( description.toStdString(), calculation->id() );
summaryCurve->setSummaryAddressX( updatedAdr );
summaryCurve->loadDataAndUpdate( true );
}
}
RifEclipseSummaryAddress summaryAddressY = summaryCurve->summaryAddressY();
if ( summaryAddressY.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED &&
ids.find( summaryAddressY.id() ) != ids.end() )
{
if ( calcColl )
{
RimSummaryCalculation* calculation = calcColl->findCalculationById( summaryAddressX.id() );
QString description = calculation->description();
RifEclipseSummaryAddress updatedAdr =
RifEclipseSummaryAddress::calculatedAddress( description.toStdString(), calculation->id() );
summaryCurve->setSummaryAddressYAndApplyInterpolation( updatedAdr );
summaryCurve->loadDataAndUpdate( true );
}
}
}
summaryPlot->loadDataAndUpdate();
}
}
@@ -80,3 +170,21 @@ void RicReplaceSummaryCaseFeature::setupActionLook( QAction* actionToSetup )
actionToSetup->setText( "Replace" );
actionToSetup->setIcon( QIcon( ":/ReplaceCase16x16.png" ) );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicReplaceSummaryCaseFeature::checkIfCalculationNeedsUpdate( const RimSummaryCalculation* summaryCalculation,
const RimFileSummaryCase* summaryCase )
{
std::vector<RimSummaryCalculationVariable*> variables = summaryCalculation->allVariables();
for ( RimSummaryCalculationVariable* variable : variables )
{
if ( variable->summaryCase() == summaryCase )
{
return true;
}
}
return false;
}

View File

@@ -20,6 +20,9 @@
#include "cafCmdFeature.h"
class RimSummaryCalculation;
class RimFileSummaryCase;
class RicReplaceSummaryCaseFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
@@ -28,4 +31,7 @@ protected:
bool isCommandEnabled() override;
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
bool checkIfCalculationNeedsUpdate( const RimSummaryCalculation* summaryCalculation,
const RimFileSummaryCase* summaryCase );
};

View File

@@ -26,7 +26,6 @@
#include "RifEclipseSummaryAddress.h"
#include "RimCalculatedSummaryCurveReader.h"
#include "RimProject.h"
#include "RimSummaryCalculation.h"
#include "RimSummaryCalculationCollection.h"
@@ -64,10 +63,13 @@ void RicEditSummaryCurveCalculationFeature::onActionTriggered( bool isChecked )
{
RifEclipseSummaryAddress selectedAddress = selectedCurves.front()->summaryAddressY();
RimProject* proj = RiaApplication::instance()->project();
RifCalculatedSummaryCurveReader* reader = dynamic_cast<RifCalculatedSummaryCurveReader*>(
proj->calculationCollection->calculationSummaryCase()->summaryReader() );
calculation = reader != nullptr ? reader->findCalculationByName( selectedAddress ) : nullptr;
RimProject* proj = RiaApplication::instance()->project();
RimSummaryCalculationCollection* calculationColl = proj->calculationCollection();
if ( calculationColl )
{
calculation = calculationColl->findCalculationById( selectedAddress.id() );
}
}
RicSummaryCurveCalculatorDialog* dialog = RicShowSummaryCurveCalculatorFeature::curveCalculatorDialog();

View File

@@ -101,7 +101,7 @@ bool RicSummaryCurveCalculator::parseExpression() const
QString currentCurveName = m_currentCalculation->description();
if ( previousCurveName != currentCurveName )
{
RiaSummaryTools::notifyCalculatedCurveNameHasChanged( previousCurveName, currentCurveName );
RiaSummaryTools::notifyCalculatedCurveNameHasChanged( m_currentCalculation()->id(), currentCurveName );
}
m_currentCalculation()->updateDependentCurvesAndPlots();
@@ -121,8 +121,7 @@ void RicSummaryCurveCalculator::fieldChangedByUi( const caf::PdmFieldHandle* cha
{
m_newCalculation = false;
RimSummaryCalculation* rimCalc = calculationCollection()->addCalculation();
m_currentCalculation = rimCalc;
m_currentCalculation = calculationCollection()->addCalculation();
this->updateConnectedEditors();
}
@@ -246,7 +245,7 @@ bool RicSummaryCurveCalculator::calculate() const
QString currentCurveName = m_currentCalculation->description();
if ( previousCurveName != currentCurveName )
{
RiaSummaryTools::notifyCalculatedCurveNameHasChanged( previousCurveName, currentCurveName );
RiaSummaryTools::notifyCalculatedCurveNameHasChanged( m_currentCalculation()->id(), currentCurveName );
}
if ( !m_currentCalculation()->calculate() )