Skip to content

Commit

Permalink
Optionally apply a grid calculation on all grids
Browse files Browse the repository at this point in the history
  • Loading branch information
magnesj committed Nov 7, 2023
1 parent 3bf81b4 commit 7eb3e98
Show file tree
Hide file tree
Showing 8 changed files with 214 additions and 96 deletions.
5 changes: 5 additions & 0 deletions ApplicationLibCode/Commands/RicUserDefinedCalculatorUi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,11 @@ bool RicUserDefinedCalculatorUi::calculate() const
notifyCalculatedNameChanged( m_currentCalculation()->id(), currentCurveName );
}

if ( !m_currentCalculation()->preCalculate() )
{
return false;
}

if ( !m_currentCalculation()->calculate() )
{
return false;
Expand Down
268 changes: 183 additions & 85 deletions ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions ApplicationLibCode/ProjectDataModel/RimGridCalculation.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,13 @@ class RimGridCalculation : public RimUserDefinedCalculation

RimGridCalculation();

bool preCalculate() const override;
bool calculate() override;
void updateDependentObjects() override;
void removeDependentObjects() override;

RimEclipseCase* outputEclipseCase() const;
RigEclipseResultAddress outputAddress() const;
std::vector<RimEclipseCase*> outputEclipseCases() const;
RigEclipseResultAddress outputAddress() const;

std::vector<RimEclipseCase*> inputCases() const;

Expand Down Expand Up @@ -96,11 +97,14 @@ class RimGridCalculation : public RimUserDefinedCalculation

private:
void onVariableUpdated( const SignalEmitter* emitter );
bool allSourceCasesAreEqualToDestinationCase() const;

private:
caf::PdmPtrField<RimGridView*> m_cellFilterView;
caf::PdmField<caf::AppEnum<DefaultValueType>> m_defaultValueType;
caf::PdmField<double> m_defaultValue;
caf::PdmPtrField<RimEclipseCase*> m_destinationCase;
caf::PdmField<int> m_defaultPropertyVariableIndex;
caf::PdmField<bool> m_allCases;

caf::PdmField<int> m_defaultPropertyVariableIndex;
};
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ std::vector<RimGridCalculation*> RimGridCalculationCollection::sortedGridCalcula
// Check if source calculation is depending on other. Will check one level dependency.
auto isSourceDependingOnOther = []( const RimGridCalculation* source, const RimGridCalculation* other ) -> bool
{
auto outputCase = source->outputEclipseCase();
auto outputAdr = source->outputAddress();
auto outputCases = source->outputEclipseCases();
auto outputAdr = source->outputAddress();

for ( auto v : other->allVariables() )
{
auto gridVariable = dynamic_cast<RimGridCalculationVariable*>( v );
if ( gridVariable->eclipseCase() == outputCase && outputAdr.resultCatType() == gridVariable->resultCategoryType() &&
outputAdr.resultName() == gridVariable->resultVariable() )
if ( std::find( outputCases.begin(), outputCases.end(), gridVariable->eclipseCase() ) != outputCases.end() &&
outputAdr.resultCatType() == gridVariable->resultCategoryType() && outputAdr.resultName() == gridVariable->resultVariable() )
{
return true;
}
Expand Down
3 changes: 1 addition & 2 deletions ApplicationLibCode/ProjectDataModel/RimResultSelectionUi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ QList<caf::PdmOptionItemInfo> RimResultSelectionUi::calculateValueOptions( const

if ( fieldNeedingOptions == &m_eclipseCase )
{
auto cases = RimEclipseCaseTools::eclipseCases();
for ( auto* c : cases )
for ( auto* c : RimEclipseCaseTools::allEclipseGridCases() )
{
options.push_back( caf::PdmOptionItemInfo( c->caseUserDescription(), c, false, c->uiIconProvider() ) );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,14 @@ bool RimUserDefinedCalculation::parseExpression()
return true;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimUserDefinedCalculation::preCalculate() const
{
return true;
}

//--------------------------------------------------------------------------------------------------
/// Find the last assignment using := and interpret the text before the := as LHS
//--------------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class RimUserDefinedCalculation : public caf::PdmObject
QString unitName() const;

bool parseExpression();
virtual bool preCalculate() const;
virtual bool calculate() = 0;
virtual void updateDependentObjects() = 0;
virtual void removeDependentObjects() = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2626,8 +2626,11 @@ void RigCaseCellResultsData::computeCompletionTypeForTimeStep( size_t timeStep )
{
for ( auto userCalculation : RimProject::current()->gridCalculationCollection()->calculations() )
{
auto gridCalculation = dynamic_cast<RimGridCalculation*>( userCalculation );
if ( gridCalculation && gridCalculation->outputEclipseCase() != eclipseCase ) continue;
if ( auto gridCalculation = dynamic_cast<RimGridCalculation*>( userCalculation ) )
{
auto outputCases = gridCalculation->outputEclipseCases();
if ( std::find( outputCases.begin(), outputCases.end(), eclipseCase ) == outputCases.end() ) continue;
}

QString generatedPropertyName = RimUserDefinedCalculation::findLeftHandSide( userCalculation->expression() );
if ( generatedPropertyName == propertyName )
Expand Down

0 comments on commit 7eb3e98

Please sign in to comment.