mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5612 Saturation Pressure Plots : Add support for user defined time step
This commit is contained in:
parent
a612da649c
commit
1187a2e551
@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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";
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -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();
|
||||||
|
@ -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 );
|
||||||
|
@ -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;
|
||||||
|
@ -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 );
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user