#5612 Saturation Pressure Plots : Add support for user defined time step

This commit is contained in:
Magne Sjaastad 2020-02-28 11:40:23 +01:00
parent a612da649c
commit 1187a2e551
11 changed files with 55 additions and 17 deletions

View File

@ -83,7 +83,8 @@ RicfCommandResponse RicfCreateSaturationPressurePlots::execute()
{ {
if ( c->caseId == caseId ) if ( c->caseId == caseId )
{ {
RicCreateSaturationPressurePlotsFeature::createPlots( eclipseResultCase ); int timeStep = 0;
RicCreateSaturationPressurePlotsFeature::createPlots( eclipseResultCase, timeStep );
} }
} }
} }

View File

@ -49,7 +49,7 @@ CAF_CMD_SOURCE_INIT( RicCreateSaturationPressurePlotsFeature, "RicCreateSaturati
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimSaturationPressurePlot*> std::vector<RimSaturationPressurePlot*>
RicCreateSaturationPressurePlotsFeature::createPlots( RimEclipseResultCase* eclipseResultCase ) RicCreateSaturationPressurePlotsFeature::createPlots( RimEclipseResultCase* eclipseResultCase, int timeStep )
{ {
std::vector<RimSaturationPressurePlot*> plots; std::vector<RimSaturationPressurePlot*> plots;
@ -99,7 +99,7 @@ std::vector<RimSaturationPressurePlot*>
} }
} }
plots = collection->createSaturationPressurePlots( eclipseResultCase ); plots = collection->createSaturationPressurePlots( eclipseResultCase, timeStep );
for ( auto plot : plots ) for ( auto plot : plots )
{ {
plot->loadDataAndUpdate(); plot->loadDataAndUpdate();
@ -143,6 +143,7 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked
} }
RimEclipseResultCase* eclipseResultCase = nullptr; RimEclipseResultCase* eclipseResultCase = nullptr;
int timeStep = 0;
if ( !eclipseCases.empty() ) if ( !eclipseCases.empty() )
{ {
@ -150,7 +151,8 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked
{ {
eclipseResultCase = eclipseCases[0]; eclipseResultCase = eclipseCases[0];
} }
else
if ( !eclipseResultCase || eclipseResultCase->timeStepDates().size() > 1 )
{ {
RicSaturationPressureUi saturationPressureUi; RicSaturationPressureUi saturationPressureUi;
saturationPressureUi.setSelectedCase( eclipseCases[0] ); saturationPressureUi.setSelectedCase( eclipseCases[0] );
@ -165,13 +167,14 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked
if ( propertyDialog.exec() == QDialog::Accepted ) if ( propertyDialog.exec() == QDialog::Accepted )
{ {
eclipseResultCase = dynamic_cast<RimEclipseResultCase*>( saturationPressureUi.selectedCase() ); eclipseResultCase = dynamic_cast<RimEclipseResultCase*>( saturationPressureUi.selectedCase() );
timeStep = saturationPressureUi.selectedTimeStep();
} }
} }
} }
caf::PdmObject* objectToSelect = nullptr; caf::PdmObject* objectToSelect = nullptr;
std::vector<RimSaturationPressurePlot*> plots = createPlots( eclipseResultCase ); std::vector<RimSaturationPressurePlot*> plots = createPlots( eclipseResultCase, timeStep );
if ( plots.empty() ) if ( plots.empty() )
{ {
QString text = "No plots generated.\n\n"; QString text = "No plots generated.\n\n";

View File

@ -31,7 +31,7 @@ class RicCreateSaturationPressurePlotsFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT; CAF_CMD_HEADER_INIT;
public: public:
static std::vector<RimSaturationPressurePlot*> createPlots( RimEclipseResultCase* eclipseCase ); static std::vector<RimSaturationPressurePlot*> createPlots( RimEclipseResultCase* eclipseCase, int timeStep );
protected: protected:
bool isCommandEnabled() override; bool isCommandEnabled() override;

View File

@ -32,6 +32,7 @@ RicSaturationPressureUi::RicSaturationPressureUi()
CAF_PDM_InitObject( "RicSaturationPressureUi", "", "", "" ); CAF_PDM_InitObject( "RicSaturationPressureUi", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_caseToApply, "CaseToApply", "Case to Apply", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_caseToApply, "CaseToApply", "Case to Apply", "", "", "" );
CAF_PDM_InitField( &m_timeStep, "TimeStep", 0, "Time Step", "", "", "" );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -50,6 +51,14 @@ RimEclipseCase* RicSaturationPressureUi::selectedCase() const
return m_caseToApply(); return m_caseToApply();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RicSaturationPressureUi::selectedTimeStep() const
{
return m_timeStep();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -62,6 +71,19 @@ QList<caf::PdmOptionItemInfo>
{ {
RimTools::caseOptionItems( &options ); RimTools::caseOptionItems( &options );
} }
else if ( fieldNeedingOptions == &m_timeStep )
{
QStringList timeStepNames;
if ( m_caseToApply )
{
timeStepNames = m_caseToApply->timeStepStrings();
}
for ( int i = 0; i < timeStepNames.size(); i++ )
{
options.push_back( caf::PdmOptionItemInfo( timeStepNames[i], i ) );
}
}
return options; return options;
} }

View File

@ -37,6 +37,7 @@ public:
void setSelectedCase( RimEclipseCase* eclipseCase ); void setSelectedCase( RimEclipseCase* eclipseCase );
RimEclipseCase* selectedCase() const; RimEclipseCase* selectedCase() const;
int selectedTimeStep() const;
protected: protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions,
@ -44,4 +45,5 @@ protected:
private: private:
caf::PdmPtrField<RimEclipseCase*> m_caseToApply; caf::PdmPtrField<RimEclipseCase*> m_caseToApply;
caf::PdmField<int> m_timeStep;
}; };

View File

@ -1185,7 +1185,8 @@ bool RimGridCrossPlotDataSet::isYAxisLogarithmic() const
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridCrossPlotDataSet::configureForPressureSaturationCurves( RimEclipseResultCase* eclipseCase, void RimGridCrossPlotDataSet::configureForPressureSaturationCurves( RimEclipseResultCase* eclipseCase,
const QString& dynamicResultName ) const QString& dynamicResultName,
int timeStep )
{ {
m_case = eclipseCase; m_case = eclipseCase;
@ -1206,7 +1207,7 @@ void RimGridCrossPlotDataSet::configureForPressureSaturationCurves( RimEclipseRe
m_nameConfig->addTimestep = false; m_nameConfig->addTimestep = false;
m_nameConfig->addGrouping = false; m_nameConfig->addGrouping = false;
m_timeStep = 0; m_timeStep = timeStep;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -132,7 +132,9 @@ public:
bool isXAxisLogarithmic() const; bool isXAxisLogarithmic() const;
bool isYAxisLogarithmic() const; bool isYAxisLogarithmic() const;
void configureForPressureSaturationCurves( RimEclipseResultCase* eclipseResultCase, const QString& dynamicResultName ); void configureForPressureSaturationCurves( RimEclipseResultCase* eclipseResultCase,
const QString& dynamicResultName,
int timeStep );
void addCellFilter( RimPlotCellFilter* cellFilter ); void addCellFilter( RimPlotCellFilter* cellFilter );
void setCustomColor( const cvf::Color3f color ); void setCustomColor( const cvf::Color3f color );
void destroyCurves(); void destroyCurves();

View File

@ -48,7 +48,8 @@ RimSaturationPressurePlot::RimSaturationPressurePlot()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::PorosityModelType porosityModel, void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::PorosityModelType porosityModel,
RimEclipseResultCase* eclipseResultCase, RimEclipseResultCase* eclipseResultCase,
int zeroBasedEquilRegionIndex ) int zeroBasedEquilRegionIndex,
int timeStep )
{ {
CVF_ASSERT( eclipseResultCase && eclipseResultCase->eclipseCaseData() ); CVF_ASSERT( eclipseResultCase && eclipseResultCase->eclipseCaseData() );
@ -76,7 +77,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::Poro
// Blue PRESSURE curve with data for specified EQLNUM value // Blue PRESSURE curve with data for specified EQLNUM value
RimGridCrossPlotDataSet* curveSet = createDataSet(); RimGridCrossPlotDataSet* curveSet = createDataSet();
curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PRESSURE" ); curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PRESSURE", timeStep );
cvf::Color3f curveColor = RiaColorTables::summaryCurveBluePaletteColors().cycledColor3f( 0 ); cvf::Color3f curveColor = RiaColorTables::summaryCurveBluePaletteColors().cycledColor3f( 0 );
curveSet->setCustomColor( curveColor ); curveSet->setCustomColor( curveColor );
@ -91,7 +92,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::Poro
// Red dew pressure (PDEW) curve with data for specified EQLNUM value, filtered on depth by gasOilContact // Red dew pressure (PDEW) curve with data for specified EQLNUM value, filtered on depth by gasOilContact
RimGridCrossPlotDataSet* curveSet = createDataSet(); RimGridCrossPlotDataSet* curveSet = createDataSet();
curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PDEW" ); curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PDEW", timeStep );
cvf::Color3f curveColor = RiaColorTables::summaryCurveRedPaletteColors().cycledColor3f( 0 ); cvf::Color3f curveColor = RiaColorTables::summaryCurveRedPaletteColors().cycledColor3f( 0 );
curveSet->setCustomColor( curveColor ); curveSet->setCustomColor( curveColor );
@ -125,7 +126,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::Poro
// gasOilContact and waterOilContactDepth // gasOilContact and waterOilContactDepth
RimGridCrossPlotDataSet* curveSet = createDataSet(); RimGridCrossPlotDataSet* curveSet = createDataSet();
curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PBUB" ); curveSet->configureForPressureSaturationCurves( eclipseResultCase, "PBUB", timeStep );
cvf::Color3f curveColor = RiaColorTables::summaryCurveGreenPaletteColors().cycledColor3f( 0 ); cvf::Color3f curveColor = RiaColorTables::summaryCurveGreenPaletteColors().cycledColor3f( 0 );
curveSet->setCustomColor( curveColor ); curveSet->setCustomColor( curveColor );

View File

@ -37,7 +37,8 @@ public:
void assignCaseAndEquilibriumRegion( RiaDefines::PorosityModelType porosityModel, void assignCaseAndEquilibriumRegion( RiaDefines::PorosityModelType porosityModel,
RimEclipseResultCase* eclipseResultCase, RimEclipseResultCase* eclipseResultCase,
int zeroBasedEquilRegionIndex ); int zeroBasedEquilRegionIndex,
int timeStep );
protected: protected:
void initAfterRead() override; void initAfterRead() override;

View File

@ -53,7 +53,8 @@ RimSaturationPressurePlotCollection::~RimSaturationPressurePlotCollection()
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimSaturationPressurePlot*> std::vector<RimSaturationPressurePlot*>
RimSaturationPressurePlotCollection::createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase ) RimSaturationPressurePlotCollection::createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase,
int timeStep )
{ {
std::vector<RimSaturationPressurePlot*> generatedPlots; std::vector<RimSaturationPressurePlot*> generatedPlots;
@ -92,7 +93,10 @@ std::vector<RimSaturationPressurePlot*>
// As discussed with Liv Merete, it is not any use for creation of different plots for matrix/fracture. For // As discussed with Liv Merete, it is not any use for creation of different plots for matrix/fracture. For
// now, use hardcoded value for MATRIX // now, use hardcoded value for MATRIX
plot->assignCaseAndEquilibriumRegion( RiaDefines::MATRIX_MODEL, eclipseResultCase, zeroBasedEquilibriumRegion ); plot->assignCaseAndEquilibriumRegion( RiaDefines::MATRIX_MODEL,
eclipseResultCase,
zeroBasedEquilibriumRegion,
timeStep );
m_saturationPressurePlots.push_back( plot ); m_saturationPressurePlots.push_back( plot );

View File

@ -35,7 +35,8 @@ public:
RimSaturationPressurePlotCollection(); RimSaturationPressurePlotCollection();
~RimSaturationPressurePlotCollection() override; ~RimSaturationPressurePlotCollection() override;
std::vector<RimSaturationPressurePlot*> createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase ); std::vector<RimSaturationPressurePlot*> createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase,
int timeStep );
std::vector<RimSaturationPressurePlot*> plots(); std::vector<RimSaturationPressurePlot*> plots();
void deleteAllChildObjects(); void deleteAllChildObjects();