#1765 Fix of mapping between well timesteps and result timesteps, handling holes in both well and result timesteps.

This commit is contained in:
Jacob Støren 2017-08-15 14:51:18 +02:00
parent 0674d13e02
commit 6912ee0081

View File

@ -37,12 +37,12 @@ const RigWellResultFrame& RigSingleWellResultsData::wellResultFrame(size_t resul
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigSingleWellResultsData::computeMappingFromResultTimeIndicesToWellTimeIndices(const std::vector<QDateTime>& resultTimes) void RigSingleWellResultsData::computeMappingFromResultTimeIndicesToWellTimeIndices(const std::vector<QDateTime>& simulationTimeSteps)
{ {
m_resultTimeStepIndexToWellTimeStepIndex.clear(); m_resultTimeStepIndexToWellTimeStepIndex.clear();
if (m_wellCellsTimeSteps.size() == 0) return; if (m_wellCellsTimeSteps.size() == 0) return;
m_resultTimeStepIndexToWellTimeStepIndex.resize(resultTimes.size(), cvf::UNDEFINED_SIZE_T); m_resultTimeStepIndexToWellTimeStepIndex.resize(simulationTimeSteps.size(), cvf::UNDEFINED_SIZE_T);
if (false) if (false)
{ {
@ -54,28 +54,30 @@ void RigSingleWellResultsData::computeMappingFromResultTimeIndicesToWellTimeIndi
} }
qDebug() << "Result TimeStamps"; qDebug() << "Result TimeStamps";
for (size_t i = 0; i < resultTimes.size(); i++) for (size_t i = 0; i < simulationTimeSteps.size(); i++)
{ {
qDebug() << resultTimes[i].toString(); qDebug() << simulationTimeSteps[i].toString();
} }
} }
int resultIdx = 0; size_t wellTimeStepIndex = 0;
size_t wellIdx = 0; for (size_t resultTimeStepIndex = 0; resultTimeStepIndex < simulationTimeSteps.size(); resultTimeStepIndex++)
size_t activeWellIdx = cvf::UNDEFINED_SIZE_T;
while (wellIdx <= m_wellCellsTimeSteps.size() && resultIdx < static_cast<int>(resultTimes.size()))
{ {
if (wellIdx < m_wellCellsTimeSteps.size() && m_wellCellsTimeSteps[wellIdx].m_timestamp <= resultTimes[resultIdx]) while ( wellTimeStepIndex < m_wellCellsTimeSteps.size() &&
m_wellCellsTimeSteps[wellTimeStepIndex].m_timestamp < simulationTimeSteps[resultTimeStepIndex])
{ {
activeWellIdx = wellIdx; wellTimeStepIndex++;
wellIdx++;
} }
CVF_ASSERT(resultIdx < static_cast<int>(m_resultTimeStepIndexToWellTimeStepIndex.size())); if ( wellTimeStepIndex < m_wellCellsTimeSteps.size()
m_resultTimeStepIndexToWellTimeStepIndex[resultIdx] = activeWellIdx; && m_wellCellsTimeSteps[wellTimeStepIndex].m_timestamp == simulationTimeSteps[resultTimeStepIndex])
{
resultIdx++; m_resultTimeStepIndexToWellTimeStepIndex[resultTimeStepIndex] = wellTimeStepIndex;
}
else
{
m_resultTimeStepIndexToWellTimeStepIndex[resultTimeStepIndex] = cvf::UNDEFINED_SIZE_T;
}
} }
} }