mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5707 Delta Ensemble Case : Add user option to select time step
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RiaApplication.h"
|
||||
#include "RiaQDateTimeTools.h"
|
||||
|
||||
#include "SummaryPlotCommands/RicNewDerivedEnsembleFeature.h"
|
||||
|
||||
@@ -28,10 +29,27 @@
|
||||
|
||||
#include "RifSummaryReaderInterface.h"
|
||||
|
||||
#include <cafPdmUiPushButtonEditor.h>
|
||||
#include "cafPdmUiPushButtonEditor.h"
|
||||
#include "cafPdmUiTreeSelectionEditor.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace caf
|
||||
{
|
||||
template <>
|
||||
void caf::AppEnum<RimDerivedEnsembleCaseCollection::FixedTimeStepMode>::setUp()
|
||||
{
|
||||
addItem( RimDerivedEnsembleCaseCollection::FixedTimeStepMode::FIXED_TIME_STEP_NONE, "FIXED_TIME_STEP_NONE", "None" );
|
||||
addItem( RimDerivedEnsembleCaseCollection::FixedTimeStepMode::FIXED_TIME_STEP_CASE_1,
|
||||
"FIXED_TIME_STEP_CASE_1",
|
||||
"Ensemble 1" );
|
||||
addItem( RimDerivedEnsembleCaseCollection::FixedTimeStepMode::FIXED_TIME_STEP_CASE_2,
|
||||
"FIXED_TIME_STEP_CASE_2",
|
||||
"Ensemble 2" );
|
||||
setDefault( RimDerivedEnsembleCaseCollection::FixedTimeStepMode::FIXED_TIME_STEP_NONE );
|
||||
}
|
||||
} // namespace caf
|
||||
|
||||
CAF_PDM_SOURCE_INIT( RimDerivedEnsembleCaseCollection, "RimDerivedEnsembleCaseCollection" );
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -61,6 +79,11 @@ RimDerivedEnsembleCaseCollection::RimDerivedEnsembleCaseCollection()
|
||||
|
||||
CAF_PDM_InitField( &m_matchOnParameters, "MatchOnParameters", false, "Match On Parameters", "", "", "" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_useFixedTimeStep, "UseFixedTimeStep", "Use Fixed Time Step", "", "", "" );
|
||||
CAF_PDM_InitField( &m_fixedTimeStepIndex, "FixedTimeStepIndex", 0, "Time Step", "", "", "" );
|
||||
m_fixedTimeStepIndex.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
|
||||
m_fixedTimeStepIndex.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
|
||||
|
||||
// Do not show child cases
|
||||
uiCapability()->setUiTreeChildrenHidden( true );
|
||||
|
||||
@@ -152,6 +175,19 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
|
||||
auto derivedCase = firstCaseNotInUse();
|
||||
derivedCase->setSummaryCases( sumCase1, summaryCase2 );
|
||||
derivedCase->setOperator( m_operator() );
|
||||
|
||||
int fixedTimeStepCase1 = -1;
|
||||
int fixedTimeStepCase2 = -1;
|
||||
if ( m_useFixedTimeStep == FixedTimeStepMode::FIXED_TIME_STEP_CASE_1 )
|
||||
{
|
||||
fixedTimeStepCase1 = m_fixedTimeStepIndex;
|
||||
}
|
||||
else if ( m_useFixedTimeStep == FixedTimeStepMode::FIXED_TIME_STEP_CASE_2 )
|
||||
{
|
||||
fixedTimeStepCase2 = m_fixedTimeStepIndex;
|
||||
}
|
||||
|
||||
derivedCase->setFixedTimeSteps( fixedTimeStepCase1, fixedTimeStepCase2 );
|
||||
derivedCase->createSummaryReaderInterface();
|
||||
derivedCase->setCaseRealizationParameters( crp );
|
||||
derivedCase->setInUse( true );
|
||||
@@ -215,6 +251,30 @@ QList<caf::PdmOptionItemInfo>
|
||||
|
||||
m_caseCount = QString( "%1 / %2" ).arg( (int)m_cases.size() ).arg( std::max( caseCount1, caseCount2 ) );
|
||||
}
|
||||
|
||||
if ( fieldNeedingOptions == &m_fixedTimeStepIndex )
|
||||
{
|
||||
RimSummaryCaseCollection* sourceEnsemble = nullptr;
|
||||
if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_1 )
|
||||
{
|
||||
sourceEnsemble = m_ensemble1;
|
||||
}
|
||||
else if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_2 )
|
||||
{
|
||||
sourceEnsemble = m_ensemble2;
|
||||
}
|
||||
|
||||
if ( sourceEnsemble && !sourceEnsemble->allSummaryCases().empty() )
|
||||
{
|
||||
auto firstCase = sourceEnsemble->allSummaryCases().front();
|
||||
auto summaryReader = firstCase->summaryReader();
|
||||
|
||||
const std::vector<time_t>& timeSteps = summaryReader->timeSteps( RifEclipseSummaryAddress() );
|
||||
|
||||
options = RiaQDateTimeTools::createOptionItems( timeSteps );
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
@@ -232,6 +292,12 @@ void RimDerivedEnsembleCaseCollection::defineUiOrdering( QString uiConfigName, c
|
||||
uiOrdering.add( &m_swapEnsemblesButton );
|
||||
uiOrdering.add( &m_matchOnParameters );
|
||||
|
||||
uiOrdering.add( &m_useFixedTimeStep );
|
||||
if ( m_useFixedTimeStep() != RimDerivedEnsembleCaseCollection::FixedTimeStepMode::FIXED_TIME_STEP_NONE )
|
||||
{
|
||||
uiOrdering.add( &m_fixedTimeStepIndex );
|
||||
}
|
||||
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
|
||||
updateAutoName();
|
||||
@@ -255,7 +321,7 @@ void RimDerivedEnsembleCaseCollection::fieldChangedByUi( const caf::PdmFieldHand
|
||||
doUpdateCases = true;
|
||||
doShowDialog = true;
|
||||
}
|
||||
else if ( changedField == &m_operator )
|
||||
else if ( changedField == &m_operator || changedField == &m_useFixedTimeStep || changedField == &m_fixedTimeStepIndex )
|
||||
{
|
||||
doUpdate = true;
|
||||
doUpdateCases = true;
|
||||
@@ -313,6 +379,15 @@ void RimDerivedEnsembleCaseCollection::defineEditorAttribute( const caf::PdmFiel
|
||||
attrib->m_buttonText = "Swap Ensembles";
|
||||
}
|
||||
}
|
||||
if ( &m_fixedTimeStepIndex == field )
|
||||
{
|
||||
auto a = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute );
|
||||
if ( a )
|
||||
{
|
||||
a->singleSelectionMode = true;
|
||||
a->showTextFilter = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -385,16 +460,59 @@ std::vector<RimDerivedSummaryCase*> RimDerivedEnsembleCaseCollection::allDerived
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimDerivedEnsembleCaseCollection::updateAutoName()
|
||||
{
|
||||
QString op = caf::AppEnum<DerivedSummaryOperator>::uiText( m_operator() );
|
||||
QString timeStepString;
|
||||
{
|
||||
RimSummaryCaseCollection* sourceEnsemble = nullptr;
|
||||
if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_1 )
|
||||
{
|
||||
sourceEnsemble = m_ensemble1;
|
||||
}
|
||||
else if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_2 )
|
||||
{
|
||||
sourceEnsemble = m_ensemble2;
|
||||
}
|
||||
|
||||
auto derivedEnsemble1 = dynamic_cast<RimDerivedEnsembleCaseCollection*>( m_ensemble1() );
|
||||
auto derivedEnsemble2 = dynamic_cast<RimDerivedEnsembleCaseCollection*>( m_ensemble2() );
|
||||
bool isDerived1 = derivedEnsemble1 != nullptr;
|
||||
bool isDerived2 = derivedEnsemble2 != nullptr;
|
||||
if ( sourceEnsemble && !sourceEnsemble->allSummaryCases().empty() )
|
||||
{
|
||||
auto firstCase = sourceEnsemble->allSummaryCases().front();
|
||||
auto summaryReader = firstCase->summaryReader();
|
||||
if ( summaryReader )
|
||||
{
|
||||
const std::vector<time_t>& timeSteps = summaryReader->timeSteps( RifEclipseSummaryAddress() );
|
||||
if ( m_fixedTimeStepIndex >= 0 && m_fixedTimeStepIndex < timeSteps.size() )
|
||||
{
|
||||
time_t selectedTime = timeSteps[m_fixedTimeStepIndex];
|
||||
QDateTime dt = RiaQDateTimeTools::fromTime_t( selectedTime );
|
||||
QString formatString = RiaQDateTimeTools::createTimeFormatStringFromDates( {dt} );
|
||||
|
||||
QString name = ( isDerived1 ? "(" : "" ) + ( m_ensemble1 ? m_ensemble1->name() : "" ) + ( isDerived1 ? ")" : "" ) +
|
||||
" " + op + " " + ( isDerived2 ? "(" : "" ) + ( m_ensemble2 ? m_ensemble2->name() : "" ) +
|
||||
( isDerived2 ? ")" : "" );
|
||||
timeStepString = RiaQDateTimeTools::toStringUsingApplicationLocale( dt, formatString );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString nameCase1 = "None";
|
||||
|
||||
if ( m_ensemble1 )
|
||||
{
|
||||
nameCase1 = m_ensemble1->name();
|
||||
if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_1 ) nameCase1 += "@" + timeStepString;
|
||||
}
|
||||
|
||||
QString nameCase2 = "None";
|
||||
if ( m_ensemble2 )
|
||||
{
|
||||
nameCase2 = m_ensemble2->name();
|
||||
if ( m_useFixedTimeStep() == FixedTimeStepMode::FIXED_TIME_STEP_CASE_2 ) nameCase2 += "@" + timeStepString;
|
||||
}
|
||||
|
||||
QString operatorText;
|
||||
if ( m_operator() == DerivedSummaryOperator::DERIVED_OPERATOR_SUB )
|
||||
operatorText = "Delta";
|
||||
else if ( m_operator() == DerivedSummaryOperator::DERIVED_OPERATOR_ADD )
|
||||
operatorText = "Sum";
|
||||
|
||||
QString name = operatorText + QString( "(%1 , %2)" ).arg( nameCase1, nameCase2 );
|
||||
setName( name );
|
||||
|
||||
// If other derived ensembles are referring to this ensemble, update theirs name as well
|
||||
|
||||
Reference in New Issue
Block a user