#5131 Update calculation curves when summary case is replaced.

This commit is contained in:
Kristian Bendiksen 2019-12-09 09:21:06 +01:00
parent 8e540efa37
commit 35df3cc9d3
22 changed files with 218 additions and 38 deletions

View File

@ -58,8 +58,7 @@ RimSummaryCaseMainCollection* RiaSummaryTools::summaryCaseMainCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Update the summary curves referencing this curve, as the curve is identified by the name /// Update the summary curves referencing this curve, as the curve is identified by the name
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiaSummaryTools::notifyCalculatedCurveNameHasChanged( const QString& previousCurveName, void RiaSummaryTools::notifyCalculatedCurveNameHasChanged( int calculationId, const QString& currentCurveName )
const QString& currentCurveName )
{ {
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
@ -68,17 +67,14 @@ void RiaSummaryTools::notifyCalculatedCurveNameHasChanged( const QString& previo
for ( RimSummaryCurve* curve : plot->summaryCurves() ) for ( RimSummaryCurve* curve : plot->summaryCurves() )
{ {
RifEclipseSummaryAddress adr = curve->summaryAddressY(); RifEclipseSummaryAddress adr = curve->summaryAddressY();
if ( adr.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED ) if ( adr.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED && adr.id() == calculationId )
{ {
if ( adr.quantityName() == previousCurveName.toStdString() ) RifEclipseSummaryAddress updatedAdr =
{ RifEclipseSummaryAddress::calculatedAddress( currentCurveName.toStdString(), calculationId );
RifEclipseSummaryAddress updatedAdr = RifEclipseSummaryAddress::calculatedAddress(
currentCurveName.toStdString() );
curve->setSummaryAddressYAndApplyInterpolation( updatedAdr ); curve->setSummaryAddressYAndApplyInterpolation( updatedAdr );
} }
} }
} }
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -39,7 +39,8 @@ class RiaSummaryTools
public: public:
static RimSummaryPlotCollection* summaryPlotCollection(); static RimSummaryPlotCollection* summaryPlotCollection();
static RimSummaryCaseMainCollection* summaryCaseMainCollection(); static RimSummaryCaseMainCollection* summaryCaseMainCollection();
static void notifyCalculatedCurveNameHasChanged( const QString& previousCurveName, const QString& currentCurveName );
static void notifyCalculatedCurveNameHasChanged( int calculationId, const QString& currentCurveName );
static RimSummaryPlot* parentSummaryPlot( caf::PdmObject* object ); static RimSummaryPlot* parentSummaryPlot( caf::PdmObject* object );
static RimSummaryPlotCollection* parentSummaryPlotCollection( caf::PdmObject* object ); static RimSummaryPlotCollection* parentSummaryPlotCollection( caf::PdmObject* object );

View File

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

View File

@ -18,15 +18,23 @@
#include "RicReplaceSummaryCaseFeature.h" #include "RicReplaceSummaryCaseFeature.h"
#include "RiaApplication.h"
#include "RiaLogging.h" #include "RiaLogging.h"
#include "RiaSummaryTools.h" #include "RiaSummaryTools.h"
#include "RicImportGeneralDataFeature.h" #include "RicImportGeneralDataFeature.h"
#include "RimCalculatedSummaryCase.h"
#include "RimFileSummaryCase.h" #include "RimFileSummaryCase.h"
#include "RimProject.h"
#include "RimSummaryAddress.h"
#include "RimSummaryCalculation.h"
#include "RimSummaryCalculationCollection.h"
#include "RimSummaryCalculationVariable.h"
#include "RimSummaryCase.h" #include "RimSummaryCase.h"
#include "RimSummaryCaseCollection.h" #include "RimSummaryCaseCollection.h"
#include "RimSummaryCaseMainCollection.h" #include "RimSummaryCaseMainCollection.h"
#include "RimSummaryCurve.h"
#include "RimSummaryPlot.h" #include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h" #include "RimSummaryPlotCollection.h"
@ -65,9 +73,44 @@ void RicReplaceSummaryCaseFeature::onActionTriggered( bool isChecked )
summaryCase->createRftReaderInterface(); summaryCase->createRftReaderInterface();
RiaLogging::info( QString( "Replaced summary data for %1" ).arg( oldSummaryHeaderFilename ) ); 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(); RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) 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() )
{
RifCalculatedSummaryCurveReader reader( calcColl );
RimSummaryCalculation* calculation = reader.findCalculationByName( summaryAddressY );
QString description = calculation->description();
RifEclipseSummaryAddress updatedAdr =
RifEclipseSummaryAddress::calculatedAddress( description.toStdString(), calculation->id() );
summaryCurve->setSummaryAddressYAndApplyInterpolation( updatedAdr );
summaryCurve->loadDataAndUpdate( true );
}
}
summaryPlot->loadDataAndUpdate(); summaryPlot->loadDataAndUpdate();
} }
} }
@ -80,3 +123,21 @@ void RicReplaceSummaryCaseFeature::setupActionLook( QAction* actionToSetup )
actionToSetup->setText( "Replace" ); actionToSetup->setText( "Replace" );
actionToSetup->setIcon( QIcon( ":/ReplaceCase16x16.png" ) ); 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" #include "cafCmdFeature.h"
class RimSummaryCalculation;
class RimFileSummaryCase;
class RicReplaceSummaryCaseFeature : public caf::CmdFeature class RicReplaceSummaryCaseFeature : public caf::CmdFeature
{ {
CAF_CMD_HEADER_INIT; CAF_CMD_HEADER_INIT;
@ -28,4 +31,7 @@ protected:
bool isCommandEnabled() override; bool isCommandEnabled() override;
void onActionTriggered( bool isChecked ) override; void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override; void setupActionLook( QAction* actionToSetup ) override;
bool checkIfCalculationNeedsUpdate( const RimSummaryCalculation* summaryCalculation,
const RimFileSummaryCase* summaryCase );
}; };

View File

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

View File

@ -41,6 +41,7 @@ RifEclipseSummaryAddress::RifEclipseSummaryAddress( SummaryVarCategory
, m_cellK( -1 ) , m_cellK( -1 )
, m_aquiferNumber( -1 ) , m_aquiferNumber( -1 )
, m_isErrorResult( false ) , m_isErrorResult( false )
, m_id( -1 )
{ {
std::tuple<int32_t, int32_t, int32_t> ijkTuple; std::tuple<int32_t, int32_t, int32_t> ijkTuple;
std::pair<int16_t, int16_t> reg2regPair; std::pair<int16_t, int16_t> reg2regPair;
@ -98,6 +99,9 @@ RifEclipseSummaryAddress::RifEclipseSummaryAddress( SummaryVarCategory
case SUMMARY_AQUIFER: case SUMMARY_AQUIFER:
m_aquiferNumber = RiaStdStringTools::toInt( identifiers[INPUT_AQUIFER_NUMBER] ); m_aquiferNumber = RiaStdStringTools::toInt( identifiers[INPUT_AQUIFER_NUMBER] );
break; break;
case SUMMARY_CALCULATED:
m_id = RiaStdStringTools::toInt( identifiers[INPUT_ID] );
break;
} }
// Set quantity for all categories // Set quantity for all categories
@ -252,7 +256,7 @@ RifEclipseSummaryAddress RifEclipseSummaryAddress::fromEclipseTextAddress( const
break; break;
case SUMMARY_CALCULATED: case SUMMARY_CALCULATED:
address = calculatedAddress( quantityName ); address = calculatedAddress( quantityName, RiaStdStringTools::toInt( names[0].toStdString() ) );
break; break;
case SUMMARY_IMPORTED: case SUMMARY_IMPORTED:
@ -503,11 +507,12 @@ RifEclipseSummaryAddress RifEclipseSummaryAddress::blockLgrAddress( const std::s
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::calculatedAddress( const std::string& quantityName ) RifEclipseSummaryAddress RifEclipseSummaryAddress::calculatedAddress( const std::string& quantityName, int id )
{ {
RifEclipseSummaryAddress addr; RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_CALCULATED; addr.m_variableCategory = SUMMARY_CALCULATED;
addr.m_quantityName = quantityName; addr.m_quantityName = quantityName;
addr.m_id = id;
return addr; return addr;
} }
@ -646,6 +651,11 @@ std::string RifEclipseSummaryAddress::uiText() const
text += ":" + std::to_string( this->aquiferNumber() ); text += ":" + std::to_string( this->aquiferNumber() );
} }
break; break;
case SUMMARY_CALCULATED:
{
text += ":" + std::to_string( this->id() );
}
break;
} }
return text; return text;
@ -676,6 +686,8 @@ std::string RifEclipseSummaryAddress::uiText( RifEclipseSummaryAddress::SummaryI
return std::to_string( aquiferNumber() ); return std::to_string( aquiferNumber() );
case INPUT_VECTOR_NAME: case INPUT_VECTOR_NAME:
return quantityName(); return quantityName();
case INPUT_ID:
return std::to_string( id() );
} }
return ""; return "";
} }
@ -967,6 +979,11 @@ bool operator==( const RifEclipseSummaryAddress& first, const RifEclipseSummaryA
if ( first.aquiferNumber() != second.aquiferNumber() ) return false; if ( first.aquiferNumber() != second.aquiferNumber() ) return false;
} }
break; break;
case RifEclipseSummaryAddress::SUMMARY_CALCULATED:
{
if ( first.id() != second.id() ) return false;
}
break;
} }
if ( first.isErrorResult() != second.isErrorResult() ) return false; if ( first.isErrorResult() != second.isErrorResult() ) return false;
return true; return true;

View File

@ -71,6 +71,7 @@ public:
INPUT_SEGMENT_NUMBER, INPUT_SEGMENT_NUMBER,
INPUT_AQUIFER_NUMBER, INPUT_AQUIFER_NUMBER,
INPUT_VECTOR_NAME, INPUT_VECTOR_NAME,
INPUT_ID
}; };
public: public:
@ -84,6 +85,7 @@ public:
, m_cellK( -1 ) , m_cellK( -1 )
, m_aquiferNumber( -1 ) , m_aquiferNumber( -1 )
, m_isErrorResult( false ) , m_isErrorResult( false )
, m_id( -1 )
{ {
} }
@ -99,7 +101,8 @@ public:
int32_t cellJ, int32_t cellJ,
int32_t cellK, int32_t cellK,
int16_t aquiferNumber, int16_t aquiferNumber,
bool isErrorResult ) bool isErrorResult,
int32_t id )
: m_variableCategory( category ) : m_variableCategory( category )
, m_quantityName( quantityName ) , m_quantityName( quantityName )
, m_regionNumber( regionNumber ) , m_regionNumber( regionNumber )
@ -113,6 +116,7 @@ public:
, m_cellK( cellK ) , m_cellK( cellK )
, m_aquiferNumber( aquiferNumber ) , m_aquiferNumber( aquiferNumber )
, m_isErrorResult( isErrorResult ) , m_isErrorResult( isErrorResult )
, m_id( id )
{ {
} }
@ -147,7 +151,7 @@ public:
static RifEclipseSummaryAddress blockAddress( const std::string& quantityName, int i, int j, int k ); static RifEclipseSummaryAddress blockAddress( const std::string& quantityName, int i, int j, int k );
static RifEclipseSummaryAddress static RifEclipseSummaryAddress
blockLgrAddress( const std::string& quantityName, const std::string& lgrName, int i, int j, int k ); blockLgrAddress( const std::string& quantityName, const std::string& lgrName, int i, int j, int k );
static RifEclipseSummaryAddress calculatedAddress( const std::string& quantityName ); static RifEclipseSummaryAddress calculatedAddress( const std::string& quantityName, int id );
static RifEclipseSummaryAddress importedAddress( const std::string& quantityName ); static RifEclipseSummaryAddress importedAddress( const std::string& quantityName );
static RifEclipseSummaryAddress ensembleStatisticsAddress( const std::string& quantityName, static RifEclipseSummaryAddress ensembleStatisticsAddress( const std::string& quantityName,
const std::string& dataQuantityName ); const std::string& dataQuantityName );
@ -207,6 +211,10 @@ public:
{ {
return m_aquiferNumber; return m_aquiferNumber;
} }
int id() const
{
return m_id;
}
std::string blockAsString() const; std::string blockAsString() const;
const std::string ensembleStatisticsQuantityName() const; const std::string ensembleStatisticsQuantityName() const;
@ -252,6 +260,12 @@ public:
{ {
return m_isErrorResult; return m_isErrorResult;
} }
void setId( int id )
{
m_id = id;
}
bool hasAccumulatedData() const; bool hasAccumulatedData() const;
private: private:
@ -274,6 +288,7 @@ private:
int16_t m_aquiferNumber; int16_t m_aquiferNumber;
SummaryVarCategory m_variableCategory; SummaryVarCategory m_variableCategory;
bool m_isErrorResult; bool m_isErrorResult;
int32_t m_id;
}; };
bool operator==( const RifEclipseSummaryAddress& first, const RifEclipseSummaryAddress& second ); bool operator==( const RifEclipseSummaryAddress& first, const RifEclipseSummaryAddress& second );

View File

@ -183,6 +183,7 @@ RifEclipseSummaryAddress
int cellK = -1; int cellK = -1;
int aquiferNumber = -1; int aquiferNumber = -1;
bool isErrorResult = false; bool isErrorResult = false;
int id = -1;
switch ( category ) switch ( category )
{ {
@ -292,7 +293,8 @@ RifEclipseSummaryAddress
cellJ, cellJ,
cellK, cellK,
aquiferNumber, aquiferNumber,
isErrorResult ); isErrorResult,
id );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -168,7 +168,8 @@ bool RifKeywordVectorUserData::parse( const QString& data, const QString& custom
-1, -1,
-1, -1,
-1, -1,
false ); false,
-1 );
m_allResultAddresses.insert( addr ); m_allResultAddresses.insert( addr );

View File

@ -288,6 +288,7 @@ RifEclipseSummaryAddress addressFromErtSmSpecNode( const ecl::smspec_node& ertSu
int cellK( -1 ); int cellK( -1 );
int aquiferNumber( -1 ); int aquiferNumber( -1 );
bool isErrorResult( false ); bool isErrorResult( false );
int id( -1 );
quantityName = stringFromPointer( ertSumVarNode.get_keyword() ); quantityName = stringFromPointer( ertSumVarNode.get_keyword() );
@ -414,7 +415,8 @@ RifEclipseSummaryAddress addressFromErtSmSpecNode( const ecl::smspec_node& ertSu
cellJ, cellJ,
cellK, cellK,
aquiferNumber, aquiferNumber,
isErrorResult ); isErrorResult,
id );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -164,6 +164,7 @@ RifEclipseSummaryAddress RifReaderObservedData::address( const QString&
int cellK( -1 ); int cellK( -1 );
int aquiferNumber( -1 ); int aquiferNumber( -1 );
bool isErrorResult( false ); bool isErrorResult( false );
int id( -1 );
switch ( summaryCategory ) switch ( summaryCategory )
{ {
@ -192,7 +193,8 @@ RifEclipseSummaryAddress RifReaderObservedData::address( const QString&
cellJ, cellJ,
cellK, cellK,
aquiferNumber, aquiferNumber,
isErrorResult ); isErrorResult,
id );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -65,6 +65,7 @@
#include "RimRftPlotCollection.h" #include "RimRftPlotCollection.h"
#include "RimSaturationPressurePlotCollection.h" #include "RimSaturationPressurePlotCollection.h"
#include "RimScriptCollection.h" #include "RimScriptCollection.h"
#include "RimSummaryCalculation.h"
#include "RimSummaryCalculationCollection.h" #include "RimSummaryCalculationCollection.h"
#include "RimSummaryCaseMainCollection.h" #include "RimSummaryCaseMainCollection.h"
#include "RimSummaryCrossPlotCollection.h" #include "RimSummaryCrossPlotCollection.h"
@ -106,6 +107,7 @@ RimProject::RimProject( void )
, m_nextValidCaseGroupId( 0 ) , m_nextValidCaseGroupId( 0 )
, m_nextValidViewId( 1 ) , m_nextValidViewId( 1 )
, m_nextValidPlotId( 1 ) , m_nextValidPlotId( 1 )
, m_nextValidCalculationId( 1 )
{ {
CAF_PDM_InitObject( "Project", "", "", "" ); CAF_PDM_InitObject( "Project", "", "", "" );
@ -247,6 +249,7 @@ void RimProject::close()
m_nextValidCaseGroupId = 0; m_nextValidCaseGroupId = 0;
m_nextValidViewId = 1; m_nextValidViewId = 1;
m_nextValidPlotId = 1; m_nextValidPlotId = 1;
m_nextValidCalculationId = 1;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -539,6 +542,22 @@ void RimProject::assignPlotIdToPlotWindow( RimPlotWindow* plotWindow )
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::assignCalculationIdToCalculation( RimSummaryCalculation* calculation )
{
if ( calculation )
{
for ( RimSummaryCalculation* existingCalculation : calculationCollection->calculations() )
{
m_nextValidCalculationId = std::max( m_nextValidCalculationId, existingCalculation->id() + 1 );
}
calculation->setId( m_nextValidCalculationId++ );
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -39,6 +39,7 @@ class RimTextAnnotation;
class RimReachCircleAnnotation; class RimReachCircleAnnotation;
class RimPolylinesAnnotation; class RimPolylinesAnnotation;
class RimSummaryCalculationCollection; class RimSummaryCalculationCollection;
class RimSummaryCalculation;
class RimCase; class RimCase;
class RimCommandObject; class RimCommandObject;
class RimCommandObject; class RimCommandObject;
@ -119,6 +120,7 @@ public:
void assignIdToCaseGroup( RimIdenticalGridCaseGroup* caseGroup ); void assignIdToCaseGroup( RimIdenticalGridCaseGroup* caseGroup );
void assignViewIdToView( Rim3dView* view ); void assignViewIdToView( Rim3dView* view );
void assignPlotIdToPlotWindow( RimPlotWindow* plotWindow ); void assignPlotIdToPlotWindow( RimPlotWindow* plotWindow );
void assignCalculationIdToCalculation( RimSummaryCalculation* calculation );
void allCases( std::vector<RimCase*>& cases ) const; void allCases( std::vector<RimCase*>& cases ) const;
@ -207,6 +209,7 @@ private:
int m_nextValidCaseGroupId; int m_nextValidCaseGroupId;
int m_nextValidViewId; int m_nextValidViewId;
int m_nextValidPlotId; int m_nextValidPlotId;
int m_nextValidCalculationId;
caf::PdmChildArrayField<RimEclipseCase*> casesObsolete; // obsolete caf::PdmChildArrayField<RimEclipseCase*> casesObsolete; // obsolete
caf::PdmChildArrayField<RimIdenticalGridCaseGroup*> caseGroupsObsolete; // obsolete caf::PdmChildArrayField<RimIdenticalGridCaseGroup*> caseGroupsObsolete; // obsolete

View File

@ -64,6 +64,8 @@ RimSummaryCalculation::RimSummaryCalculation()
CAF_PDM_InitFieldNoDefault( &m_calculatedValues, "CalculatedValues", "Calculated Values", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_calculatedValues, "CalculatedValues", "Calculated Values", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_timesteps, "TimeSteps", "Time Steps", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_timesteps, "TimeSteps", "Time Steps", "", "", "" );
CAF_PDM_InitField( &m_id, "Id", -1, "Id", "", "", "" );
m_id.uiCapability()->setUiHidden( true );
m_exprContextMenuMgr = std::unique_ptr<RiuExpressionContextMenuManager>( new RiuExpressionContextMenuManager() ); m_exprContextMenuMgr = std::unique_ptr<RiuExpressionContextMenuManager>( new RiuExpressionContextMenuManager() );
@ -86,6 +88,22 @@ QString RimSummaryCalculation::description() const
return m_description; return m_description;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCalculation::setId( int id )
{
m_id = id;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimSummaryCalculation::id() const
{
return m_id;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -478,3 +496,15 @@ void RimSummaryCalculation::updateDependentCurvesAndPlots()
} }
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimSummaryCalculationVariable*> RimSummaryCalculation::allVariables() const
{
std::vector<RimSummaryCalculationVariable*> outVariables;
for ( RimSummaryCalculationVariable* v : m_variables )
outVariables.push_back( v );
return outVariables;
}

View File

@ -42,10 +42,15 @@ public:
void setDescription( const QString& description ); void setDescription( const QString& description );
QString description() const; QString description() const;
void setId( int id );
int id() const;
bool isDirty() const; bool isDirty() const;
caf::PdmChildArrayFieldHandle* variables(); caf::PdmChildArrayFieldHandle* variables();
std::vector<RimSummaryCalculationVariable*> allVariables() const;
const std::vector<double>& values() const; const std::vector<double>& values() const;
const std::vector<time_t>& timeSteps() const; const std::vector<time_t>& timeSteps() const;
@ -85,6 +90,7 @@ private:
caf::PdmField<std::vector<double>> m_calculatedValues; caf::PdmField<std::vector<double>> m_calculatedValues;
caf::PdmField<std::vector<time_t>> m_timesteps; caf::PdmField<std::vector<time_t>> m_timesteps;
caf::PdmField<int> m_id;
std::unique_ptr<RiuExpressionContextMenuManager> m_exprContextMenuMgr; std::unique_ptr<RiuExpressionContextMenuManager> m_exprContextMenuMgr;

View File

@ -18,7 +18,10 @@
#include "RimSummaryCalculationCollection.h" #include "RimSummaryCalculationCollection.h"
#include "RiaApplication.h"
#include "RimCalculatedSummaryCase.h" #include "RimCalculatedSummaryCase.h"
#include "RimProject.h"
#include "RimSummaryCalculation.h" #include "RimSummaryCalculation.h"
#include "cafPdmUiGroup.h" #include "cafPdmUiGroup.h"
@ -46,8 +49,9 @@ RimSummaryCalculationCollection::RimSummaryCalculationCollection()
RimSummaryCalculation* RimSummaryCalculationCollection::addCalculation() RimSummaryCalculation* RimSummaryCalculationCollection::addCalculation()
{ {
RimSummaryCalculation* calculation = new RimSummaryCalculation; RimSummaryCalculation* calculation = new RimSummaryCalculation;
RiaApplication::instance()->project()->assignCalculationIdToCalculation( calculation );
QString varName = QString( "Calculation_%1" ).arg( m_calcuations.size() + 1 ); QString varName = QString( "Calculation_%1" ).arg( calculation->id() );
calculation->setDescription( varName ); calculation->setDescription( varName );
calculation->setExpression( varName + " := x + y" ); calculation->setExpression( varName + " := x + y" );
calculation->parseExpression(); calculation->parseExpression();

View File

@ -85,7 +85,8 @@ void RifCalculatedSummaryCurveReader::buildMetaData()
for ( RimSummaryCalculation* calc : m_calculationCollection->calculations() ) for ( RimSummaryCalculation* calc : m_calculationCollection->calculations() )
{ {
m_allResultAddresses.insert( RifEclipseSummaryAddress::calculatedAddress( calc->description().toStdString() ) ); m_allResultAddresses.insert(
RifEclipseSummaryAddress::calculatedAddress( calc->description().toStdString(), calc->id() ) );
} }
} }
@ -97,11 +98,10 @@ RimSummaryCalculation*
{ {
if ( m_calculationCollection && resultAddress.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED ) if ( m_calculationCollection && resultAddress.category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED )
{ {
QString calculatedName = QString::fromStdString( resultAddress.quantityName() ); int id = resultAddress.id();
for ( RimSummaryCalculation* calc : m_calculationCollection->calculations() ) for ( RimSummaryCalculation* calc : m_calculationCollection->calculations() )
{ {
if ( calc->description() == calculatedName ) if ( calc->id() == id )
{ {
return calc; return calc;
} }

View File

@ -65,6 +65,7 @@ RimSummaryAddress::RimSummaryAddress()
CAF_PDM_InitFieldNoDefault( &m_cellK, "SummaryCellK", "K", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_cellK, "SummaryCellK", "K", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_aquiferNumber, "SummaryAquifer", "Aquifer", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_aquiferNumber, "SummaryAquifer", "Aquifer", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_isErrorResult, "IsErrorResult", "Is Error Result", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_isErrorResult, "IsErrorResult", "Is Error Result", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_calculationId, "CalculationId", "Calculation Id", "", "", "" );
m_category = RifEclipseSummaryAddress::SUMMARY_INVALID; m_category = RifEclipseSummaryAddress::SUMMARY_INVALID;
m_regionNumber = -1; m_regionNumber = -1;
@ -75,6 +76,7 @@ RimSummaryAddress::RimSummaryAddress()
m_cellK = -1; m_cellK = -1;
m_aquiferNumber = -1; m_aquiferNumber = -1;
m_isErrorResult = false; m_isErrorResult = false;
m_calculationId = -1;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -101,6 +103,7 @@ void RimSummaryAddress::setAddress( const RifEclipseSummaryAddress& addr )
m_cellI = addr.cellI(); m_cellI = addr.cellI();
m_cellJ = addr.cellJ(); m_cellJ = addr.cellJ();
m_cellK = addr.cellK(); m_cellK = addr.cellK();
m_calculationId = addr.id();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -120,5 +123,6 @@ RifEclipseSummaryAddress RimSummaryAddress::address()
m_cellJ(), m_cellJ(),
m_cellK(), m_cellK(),
m_aquiferNumber, m_aquiferNumber,
m_isErrorResult ); m_isErrorResult,
m_calculationId );
} }

View File

@ -62,4 +62,5 @@ private:
caf::PdmField<int> m_cellK; caf::PdmField<int> m_cellK;
caf::PdmField<int> m_aquiferNumber; caf::PdmField<int> m_aquiferNumber;
caf::PdmField<bool> m_isErrorResult; caf::PdmField<bool> m_isErrorResult;
caf::PdmField<int> m_calculationId;
}; };

View File

@ -569,7 +569,7 @@ TEST( RifColumnBasedRsmspecParserTest, TestTableValues )
userData.parse( data ); userData.parse( data );
RifEclipseSummaryAddress RifEclipseSummaryAddress
adr( RifEclipseSummaryAddress::SUMMARY_WELL, "WOPR", -1, -1, "", "P-15P", -1, "", -1, -1, -1, -1, false ); adr( RifEclipseSummaryAddress::SUMMARY_WELL, "WOPR", -1, -1, "", "P-15P", -1, "", -1, -1, -1, -1, false, -1 );
QDateTime firstTimeStep = RiaQDateTimeTools::addDays( RiaQDateTimeTools::epoch(), 1.0 ); QDateTime firstTimeStep = RiaQDateTimeTools::addDays( RiaQDateTimeTools::epoch(), 1.0 );
auto timeSteps = userData.timeSteps( adr ); auto timeSteps = userData.timeSteps( adr );

View File

@ -138,7 +138,8 @@ RiuSummaryCurveDefSelection::RiuSummaryCurveDefSelection()
{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_CELL_IJK )}, {new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_CELL_IJK )},
{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}}, {new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}},
{RifEclipseSummaryAddress::SUMMARY_CALCULATED, {RifEclipseSummaryAddress::SUMMARY_CALCULATED,
{{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}}, {{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_ID )},
{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}},
{RifEclipseSummaryAddress::SUMMARY_IMPORTED, {RifEclipseSummaryAddress::SUMMARY_IMPORTED,
{{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}}, {{new SummaryIdentifierAndField( RifEclipseSummaryAddress::INPUT_VECTOR_NAME )}}},
} ) } )
@ -350,6 +351,13 @@ RiuSummaryCurveDefSelection::RiuSummaryCurveDefSelection()
"" ); "" );
CAF_PDM_InitFieldNoDefault( m_identifierFieldsMap[RifEclipseSummaryAddress::SUMMARY_CALCULATED][0]->pdmField(), CAF_PDM_InitFieldNoDefault( m_identifierFieldsMap[RifEclipseSummaryAddress::SUMMARY_CALCULATED][0]->pdmField(),
"CalculatedVectorsId",
"Calculated Vectors Id",
"",
"",
"" );
CAF_PDM_InitFieldNoDefault( m_identifierFieldsMap[RifEclipseSummaryAddress::SUMMARY_CALCULATED][1]->pdmField(),
"CalculatedVectors", "CalculatedVectors",
"Calculated Vectors", "Calculated Vectors",
"", "",
@ -940,7 +948,7 @@ void RiuSummaryCurveDefSelection::defineUiOrdering( QString uiConfigName, caf::P
} }
else if ( sumCategory == RifEclipseSummaryAddress::SUMMARY_CALCULATED ) else if ( sumCategory == RifEclipseSummaryAddress::SUMMARY_CALCULATED )
{ {
summaryiesField = m_identifierFieldsMap[RifEclipseSummaryAddress::SUMMARY_CALCULATED][0]->pdmField(); summaryiesField = m_identifierFieldsMap[RifEclipseSummaryAddress::SUMMARY_CALCULATED][1]->pdmField();
} }
else if ( sumCategory == RifEclipseSummaryAddress::SUMMARY_IMPORTED ) else if ( sumCategory == RifEclipseSummaryAddress::SUMMARY_IMPORTED )
{ {