mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4763 Derived Ensemble: Allow matching of cases when parameters differs
This commit is contained in:
parent
7c9a09a40c
commit
226ff16063
@ -59,6 +59,8 @@ RimDerivedEnsembleCaseCollection::RimDerivedEnsembleCaseCollection()
|
|||||||
CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases", "", "", "" );
|
CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases", "", "", "" );
|
||||||
m_caseCount.uiCapability()->setUiReadOnly( true );
|
m_caseCount.uiCapability()->setUiReadOnly( true );
|
||||||
|
|
||||||
|
CAF_PDM_InitField( &m_matchOnParameters, "MatchOnParameters", false, "Match On Parameters", "", "", "" );
|
||||||
|
|
||||||
// Do not show child cases
|
// Do not show child cases
|
||||||
uiCapability()->setUiTreeChildrenHidden( true );
|
uiCapability()->setUiTreeChildrenHidden( true );
|
||||||
|
|
||||||
@ -136,11 +138,19 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
|
|||||||
auto crp = sumCase1->caseRealizationParameters();
|
auto crp = sumCase1->caseRealizationParameters();
|
||||||
if ( !crp ) continue;
|
if ( !crp ) continue;
|
||||||
|
|
||||||
const auto& sumCase2 = findCaseByParametersHash( cases2, crp->parametersHash() );
|
RimSummaryCase* summaryCase2 = nullptr;
|
||||||
if ( !sumCase2 ) continue;
|
if ( m_matchOnParameters )
|
||||||
|
{
|
||||||
|
summaryCase2 = findCaseByParametersHash( cases2, crp->parametersHash() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
summaryCase2 = findCaseByRealizationNumber( cases2, crp->realizationNumber() );
|
||||||
|
}
|
||||||
|
if ( !summaryCase2 ) continue;
|
||||||
|
|
||||||
auto derivedCase = firstCaseNotInUse();
|
auto derivedCase = firstCaseNotInUse();
|
||||||
derivedCase->setSummaryCases( sumCase1, sumCase2 );
|
derivedCase->setSummaryCases( sumCase1, summaryCase2 );
|
||||||
derivedCase->setOperator( m_operator() );
|
derivedCase->setOperator( m_operator() );
|
||||||
derivedCase->createSummaryReaderInterface();
|
derivedCase->createSummaryReaderInterface();
|
||||||
derivedCase->setCaseRealizationParameters( crp );
|
derivedCase->setCaseRealizationParameters( crp );
|
||||||
@ -220,6 +230,7 @@ void RimDerivedEnsembleCaseCollection::defineUiOrdering( QString uiConfigName, c
|
|||||||
uiOrdering.add( &m_operator );
|
uiOrdering.add( &m_operator );
|
||||||
uiOrdering.add( &m_ensemble2 );
|
uiOrdering.add( &m_ensemble2 );
|
||||||
uiOrdering.add( &m_swapEnsemblesButton );
|
uiOrdering.add( &m_swapEnsemblesButton );
|
||||||
|
uiOrdering.add( &m_matchOnParameters );
|
||||||
|
|
||||||
uiOrdering.skipRemainingFields( true );
|
uiOrdering.skipRemainingFields( true );
|
||||||
|
|
||||||
@ -238,7 +249,7 @@ void RimDerivedEnsembleCaseCollection::fieldChangedByUi( const caf::PdmFieldHand
|
|||||||
bool doUpdateCases = false;
|
bool doUpdateCases = false;
|
||||||
bool doShowDialog = false;
|
bool doShowDialog = false;
|
||||||
|
|
||||||
if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 )
|
if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 || m_matchOnParameters )
|
||||||
{
|
{
|
||||||
doUpdate = true;
|
doUpdate = true;
|
||||||
doUpdateCases = true;
|
doUpdateCases = true;
|
||||||
@ -408,6 +419,20 @@ RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByParametersHash( cons
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByRealizationNumber( const std::vector<RimSummaryCase*>& cases,
|
||||||
|
int realizationNumber ) const
|
||||||
|
{
|
||||||
|
for ( auto sumCase : cases )
|
||||||
|
{
|
||||||
|
auto ensembleParameters = sumCase->caseRealizationParameters();
|
||||||
|
if ( ensembleParameters && ensembleParameters->realizationNumber() == realizationNumber ) return sumCase;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -73,7 +73,10 @@ private:
|
|||||||
RimDerivedSummaryCase* firstCaseNotInUse();
|
RimDerivedSummaryCase* firstCaseNotInUse();
|
||||||
std::vector<RimDerivedSummaryCase*> allDerivedCases( bool activeOnly ) const;
|
std::vector<RimDerivedSummaryCase*> allDerivedCases( bool activeOnly ) const;
|
||||||
void updateAutoName();
|
void updateAutoName();
|
||||||
|
|
||||||
RimSummaryCase* findCaseByParametersHash( const std::vector<RimSummaryCase*>& cases, size_t hash ) const;
|
RimSummaryCase* findCaseByParametersHash( const std::vector<RimSummaryCase*>& cases, size_t hash ) const;
|
||||||
|
RimSummaryCase* findCaseByRealizationNumber( const std::vector<RimSummaryCase*>& cases, int realizationNumber ) const;
|
||||||
|
|
||||||
std::vector<RimDerivedEnsembleCaseCollection*> findReferringEnsembles() const;
|
std::vector<RimDerivedEnsembleCaseCollection*> findReferringEnsembles() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -85,4 +88,5 @@ private:
|
|||||||
caf::PdmField<caf::AppEnum<DerivedSummaryOperator>> m_operator;
|
caf::PdmField<caf::AppEnum<DerivedSummaryOperator>> m_operator;
|
||||||
caf::PdmField<bool> m_swapEnsemblesButton;
|
caf::PdmField<bool> m_swapEnsemblesButton;
|
||||||
caf::PdmField<QString> m_caseCount;
|
caf::PdmField<QString> m_caseCount;
|
||||||
|
caf::PdmField<bool> m_matchOnParameters;
|
||||||
};
|
};
|
||||||
|
@ -66,7 +66,7 @@ void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString
|
|||||||
|
|
||||||
int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile );
|
int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile );
|
||||||
parameters->setRealizationNumber( realizationNumber );
|
parameters->setRealizationNumber( realizationNumber );
|
||||||
parameters->addParameter( "REALIZATION_NUM", realizationNumber );
|
parameters->addParameter( "RI:REALIZATION_NUM", realizationNumber );
|
||||||
|
|
||||||
sumCase.setCaseRealizationParameters( parameters );
|
sumCase.setCaseRealizationParameters( parameters );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user