#2233, #2236 Fix some timestep related issues in RFT/PLT plot

Missing first grid timestep in RFT, and missing previous closest timestep if all available are before observed timesteps.
This commit is contained in:
Jacob Støren 2017-12-07 16:24:28 +01:00
parent cbeb248f6e
commit f0ad02bc37
4 changed files with 28 additions and 11 deletions

View File

@ -485,6 +485,14 @@ std::set<QDateTime> RimWellPlotTools::findMatchingOrAdjacentTimeSteps(const std:
} }
} }
// The above will only work if there are at least one available timestep equal or after any of the basetimeline times.
// If no timesteps matched but we have some, add the last available because the above code missed it.
if (!resultTimeSteps.size() && baseTimeLine.size() && availableTimeSteps.size())
{
resultTimeSteps.insert(*availableTimeSteps.rbegin());
}
return resultTimeSteps; return resultTimeSteps;
} }
@ -492,7 +500,8 @@ std::set<QDateTime> RimWellPlotTools::findMatchingOrAdjacentTimeSteps(const std:
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::set<QDateTime> RimWellPlotTools::availableSimWellTimesteps(RimEclipseCase * eclCase, std::set<QDateTime> RimWellPlotTools::availableSimWellTimesteps(RimEclipseCase * eclCase,
const QString& simWellName) const QString& simWellName,
bool addFirstReportTimestep)
{ {
std::set<QDateTime> availebleTimeSteps; std::set<QDateTime> availebleTimeSteps;
@ -501,7 +510,7 @@ std::set<QDateTime> RimWellPlotTools::availableSimWellTimesteps(RimEclipseCase *
for ( size_t tsIdx = 0; tsIdx < allTimeSteps.size(); ++tsIdx ) for ( size_t tsIdx = 0; tsIdx < allTimeSteps.size(); ++tsIdx )
{ {
if ( simWell->hasWellResult(tsIdx) ) if ( simWell->hasWellResult(tsIdx) || (addFirstReportTimestep && tsIdx == 0) )
{ {
availebleTimeSteps.insert(allTimeSteps[tsIdx]); availebleTimeSteps.insert(allTimeSteps[tsIdx]);
} }
@ -609,7 +618,7 @@ bool RimWellPlotTools::tryMatchChannelName(const std::set<QString>& channelNames
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::set < RiaRftPltCurveDefinition > RimWellPlotTools::curveDefsFromTimesteps(const QString& simWellName, std::set < RiaRftPltCurveDefinition > RimWellPlotTools::curveDefsFromTimesteps(const QString& simWellName,
const std::vector<QDateTime>& selectedTimeSteps, const std::vector<QDateTime>& selectedTimeSteps,
const std::set<RifEclipseRftAddress::RftWellLogChannelType>& interestingRFTResults, bool firstSimWellTimeStepIsValid,
const std::vector<RifDataSourceForRftPlt>& selectedSourcesExpanded) const std::vector<RifDataSourceForRftPlt>& selectedSourcesExpanded)
{ {
std::set<RiaRftPltCurveDefinition> curveDefs; std::set<RiaRftPltCurveDefinition> curveDefs;
@ -633,7 +642,7 @@ std::set < RiaRftPltCurveDefinition > RimWellPlotTools::curveDefsFromTimesteps(c
} }
else if ( addr.sourceType() == RifDataSourceForRftPlt::GRID && addr.eclCase() ) else if ( addr.sourceType() == RifDataSourceForRftPlt::GRID && addr.eclCase() )
{ {
std::set<QDateTime> timeSteps = RimWellPlotTools::availableSimWellTimesteps(addr.eclCase(), simWellName); std::set<QDateTime> timeSteps = RimWellPlotTools::availableSimWellTimesteps(addr.eclCase(), simWellName, firstSimWellTimeStepIsValid);
for ( const QDateTime& time : timeSteps ) for ( const QDateTime& time : timeSteps )
{ {
@ -778,6 +787,9 @@ void RimWellPlotTools::calculateValueOptionsForTimeSteps(const QString& simWellN
QList<caf::PdmOptionItemInfo>& options) QList<caf::PdmOptionItemInfo>& options)
{ {
//std::vector<RifDataSourceForRftPlt> selSources = selectedSourcesExpanded(); //std::vector<RifDataSourceForRftPlt> selSources = selectedSourcesExpanded();
bool addFirstTimestep = (interestingRFTResults.count(RifEclipseRftAddress::PRESSURE) == 1);
bool hasObservedData = false; bool hasObservedData = false;
bool hasRftData = false; bool hasRftData = false;
bool hasGridData = false; bool hasGridData = false;
@ -836,7 +848,7 @@ void RimWellPlotTools::calculateValueOptionsForTimeSteps(const QString& simWellN
{ {
if ( source.sourceType() == RifDataSourceForRftPlt::GRID && source.eclCase() ) if ( source.sourceType() == RifDataSourceForRftPlt::GRID && source.eclCase() )
{ {
std::set<QDateTime> wellTimeSteps = RimWellPlotTools::availableSimWellTimesteps(source.eclCase(), simWellName); std::set<QDateTime> wellTimeSteps = RimWellPlotTools::availableSimWellTimesteps(source.eclCase(), simWellName, addFirstTimestep);
for ( const QDateTime& date: wellTimeSteps) for ( const QDateTime& date: wellTimeSteps)
{ {
@ -864,14 +876,21 @@ void RimWellPlotTools::calculateValueOptionsForTimeSteps(const QString& simWellN
{ {
std::set<QDateTime> baseTimeSteps; std::set<QDateTime> baseTimeSteps;
for (const auto& dateSourceSetPair: *timeBaseline) baseTimeSteps.insert(dateSourceSetPair.first); for (const auto& dateSourceSetPair: *timeBaseline) baseTimeSteps.insert(dateSourceSetPair.first);
std::set<QDateTime> rftTimeSteps; std::set<QDateTime> rftTimeSteps;
for (const auto& dateSourceSetPair: rftTimeStepsWithSources) rftTimeSteps.insert(dateSourceSetPair.first); for (const auto& dateSourceSetPair: rftTimeStepsWithSources) rftTimeSteps.insert(dateSourceSetPair.first);
std::set<QDateTime> gridTimeSteps; std::set<QDateTime> gridTimeSteps;
for (const auto& dateSourceSetPair: gridTimestepsWithSources) gridTimeSteps.insert(dateSourceSetPair.first); for (const auto& dateSourceSetPair: gridTimestepsWithSources) gridTimeSteps.insert(dateSourceSetPair.first);
std::set<QDateTime> filteredRftTimeSteps = RimWellPlotTools::findMatchingOrAdjacentTimeSteps(baseTimeSteps, rftTimeSteps); std::set<QDateTime> filteredRftTimeSteps = RimWellPlotTools::findMatchingOrAdjacentTimeSteps(baseTimeSteps, rftTimeSteps);
std::set<QDateTime> filteredGridTimeSteps = RimWellPlotTools::findMatchingOrAdjacentTimeSteps(baseTimeSteps, gridTimeSteps); std::set<QDateTime> filteredGridTimeSteps = RimWellPlotTools::findMatchingOrAdjacentTimeSteps(baseTimeSteps, gridTimeSteps);
if (addFirstTimestep && gridTimeSteps.size())
{
filteredGridTimeSteps.insert(*gridTimeSteps.begin());
}
// Fill final map // Fill final map
timestepsToShowWithSources = observedTimeStepsWithSources; timestepsToShowWithSources = observedTimeStepsWithSources;

View File

@ -91,7 +91,7 @@ public:
QList<caf::PdmOptionItemInfo>& options); QList<caf::PdmOptionItemInfo>& options);
static std::set < RiaRftPltCurveDefinition > curveDefsFromTimesteps(const QString& simWellName, static std::set < RiaRftPltCurveDefinition > curveDefsFromTimesteps(const QString& simWellName,
const std::vector<QDateTime>& selectedTimeStepVector, const std::vector<QDateTime>& selectedTimeStepVector,
const std::set<RifEclipseRftAddress::RftWellLogChannelType>& interestingRFTResults, bool firstReportTimeStepIsValid,
const std::vector<RifDataSourceForRftPlt>& selectedSourcesExpanded); const std::vector<RifDataSourceForRftPlt>& selectedSourcesExpanded);
static QString flowPlotAxisTitle(RimWellLogFile::WellFlowCondition condition, static QString flowPlotAxisTitle(RimWellLogFile::WellFlowCondition condition,
@ -123,7 +123,7 @@ private:
static bool isFlowChannel(RimWellLogFileChannel* channel); static bool isFlowChannel(RimWellLogFileChannel* channel);
static bool tryMatchChannelName(const std::set<QString>& channelNames, const QString& channelNameToMatch); static bool tryMatchChannelName(const std::set<QString>& channelNames, const QString& channelNameToMatch);
static std::set<QDateTime> findMatchingOrAdjacentTimeSteps(const std::set<QDateTime>& baseTimeLine, const std::set<QDateTime>& availableTimeSteps); static std::set<QDateTime> findMatchingOrAdjacentTimeSteps(const std::set<QDateTime>& baseTimeLine, const std::set<QDateTime>& availableTimeSteps);
static std::set<QDateTime> availableSimWellTimesteps(RimEclipseCase * eclCase, const QString& simWellName); static std::set<QDateTime> availableSimWellTimesteps(RimEclipseCase * eclCase, const QString& simWellName, bool addFirstReportTimeStep);
}; };

View File

@ -281,9 +281,7 @@ std::set < RiaRftPltCurveDefinition > RimWellPltPlot::selectedCurveDefs() const
{ {
return RimWellPlotTools::curveDefsFromTimesteps(RimWellPlotTools::simWellName(m_wellPathName), return RimWellPlotTools::curveDefsFromTimesteps(RimWellPlotTools::simWellName(m_wellPathName),
m_selectedTimeSteps.v(), m_selectedTimeSteps.v(),
{ RifEclipseRftAddress::ORAT, false,
RifEclipseRftAddress::WRAT,
RifEclipseRftAddress::GRAT },
selectedSourcesExpanded()); selectedSourcesExpanded());
} }

View File

@ -431,7 +431,7 @@ std::set < RiaRftPltCurveDefinition > RimWellRftPlot::selectedCurveDefs() const
{ {
return RimWellPlotTools::curveDefsFromTimesteps(associatedSimWellName(), return RimWellPlotTools::curveDefsFromTimesteps(associatedSimWellName(),
m_selectedTimeSteps.v(), m_selectedTimeSteps.v(),
{ RifEclipseRftAddress::PRESSURE }, true,
selectedSourcesExpanded()); selectedSourcesExpanded());
} }