mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1691 Map from filtered time step indices to well result indices
This commit is contained in:
parent
68e52e1838
commit
8f3a7a5867
@ -657,23 +657,7 @@ void RifReaderEclipseOutput::buildMetaData()
|
||||
|
||||
progInfo.incrementProgress();
|
||||
|
||||
// Get time steps
|
||||
{
|
||||
std::vector<QDateTime> timeStepsOnFile;
|
||||
std::vector<double> daysSinceSimulationStartOnFile;
|
||||
std::vector<int> reportNumbersOnFile;
|
||||
|
||||
m_dynamicResultsAccess->timeSteps(&timeStepsOnFile, &daysSinceSimulationStartOnFile);
|
||||
reportNumbersOnFile = m_dynamicResultsAccess->reportNumbers();
|
||||
|
||||
for (size_t i = 0; i < timeStepsOnFile.size(); i++)
|
||||
{
|
||||
if (this->isTimeStepIncludedByFilter(i))
|
||||
{
|
||||
timeStepInfos.push_back(RigTimeStepInfo(timeStepsOnFile[i], reportNumbersOnFile[i], daysSinceSimulationStartOnFile[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
timeStepInfos = createFilteredTimeStepInfos();
|
||||
|
||||
QStringList resultNames;
|
||||
std::vector<size_t> resultNamesDataItemCounts;
|
||||
@ -1653,7 +1637,16 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid, boo
|
||||
}
|
||||
|
||||
|
||||
wellResults->computeMappingFromResultTimeIndicesToWellTimeIndices(timeSteps);
|
||||
std::vector<QDateTime> filteredTimeSteps;
|
||||
{
|
||||
std::vector<RigTimeStepInfo> filteredTimeStepInfos = createFilteredTimeStepInfos();
|
||||
for (auto a : filteredTimeStepInfos)
|
||||
{
|
||||
filteredTimeSteps.push_back(a.m_date);
|
||||
}
|
||||
}
|
||||
|
||||
wellResults->computeMappingFromResultTimeIndicesToWellTimeIndices(filteredTimeSteps);
|
||||
|
||||
wells.push_back(wellResults.p());
|
||||
|
||||
@ -1769,6 +1762,34 @@ QStringList RifReaderEclipseOutput::validKeywordsForPorosityModel(const QStringL
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RigTimeStepInfo> RifReaderEclipseOutput::createFilteredTimeStepInfos()
|
||||
{
|
||||
std::vector<RigTimeStepInfo> timeStepInfos;
|
||||
|
||||
if (m_dynamicResultsAccess.notNull())
|
||||
{
|
||||
std::vector<QDateTime> timeStepsOnFile;
|
||||
std::vector<double> daysSinceSimulationStartOnFile;
|
||||
std::vector<int> reportNumbersOnFile;
|
||||
|
||||
m_dynamicResultsAccess->timeSteps(&timeStepsOnFile, &daysSinceSimulationStartOnFile);
|
||||
reportNumbersOnFile = m_dynamicResultsAccess->reportNumbers();
|
||||
|
||||
for (size_t i = 0; i < timeStepsOnFile.size(); i++)
|
||||
{
|
||||
if (this->isTimeStepIncludedByFilter(i))
|
||||
{
|
||||
timeStepInfos.push_back(RigTimeStepInfo(timeStepsOnFile[i], reportNumbersOnFile[i], daysSinceSimulationStartOnFile[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return timeStepInfos;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -30,6 +30,7 @@ class RigGridBase;
|
||||
class RigMainGrid;
|
||||
class RigActiveCellInfo;
|
||||
class RigFault;
|
||||
class RigTimeStepInfo;
|
||||
|
||||
struct RigWellResultPoint;
|
||||
|
||||
@ -79,6 +80,8 @@ private:
|
||||
RifEclipseRestartDataAccess* createDynamicResultsAccess();
|
||||
|
||||
QStringList validKeywordsForPorosityModel(const QStringList& keywords, const std::vector<size_t>& keywordDataItemCounts, const RigActiveCellInfo* activeCellInfo, const RigActiveCellInfo* fractureActiveCellInfo, RiaPorosityModel::PorosityModelType matrixOrFracture, size_t timeStepCount) const;
|
||||
|
||||
std::vector<RigTimeStepInfo> createFilteredTimeStepInfos();
|
||||
|
||||
private:
|
||||
QString m_fileName; // Name of file used to start accessing Eclipse output files
|
||||
|
@ -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();
|
||||
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)
|
||||
{
|
||||
@ -54,29 +54,23 @@ void RigSingleWellResultsData::computeMappingFromResultTimeIndicesToWellTimeIndi
|
||||
}
|
||||
|
||||
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 wellIdx = 0;
|
||||
size_t activeWellIdx = cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
while (wellIdx <= m_wellCellsTimeSteps.size() && resultIdx < static_cast<int>(resultTimes.size()))
|
||||
for (size_t resultTimeStepIndex = 0; resultTimeStepIndex< simulationTimeSteps.size(); resultTimeStepIndex++)
|
||||
{
|
||||
if (wellIdx < m_wellCellsTimeSteps.size() && m_wellCellsTimeSteps[wellIdx].m_timestamp <= resultTimes[resultIdx])
|
||||
size_t wellTimeStepIndex = 0;
|
||||
|
||||
while (wellTimeStepIndex < m_wellCellsTimeSteps.size() &&
|
||||
m_wellCellsTimeSteps[wellTimeStepIndex].m_timestamp < simulationTimeSteps[resultTimeStepIndex])
|
||||
{
|
||||
activeWellIdx = wellIdx;
|
||||
wellIdx++;
|
||||
wellTimeStepIndex++;
|
||||
}
|
||||
|
||||
CVF_ASSERT(resultIdx < static_cast<int>(m_resultTimeStepIndexToWellTimeStepIndex.size()));
|
||||
m_resultTimeStepIndexToWellTimeStepIndex[resultIdx] = activeWellIdx;
|
||||
|
||||
resultIdx++;
|
||||
m_resultTimeStepIndexToWellTimeStepIndex[resultTimeStepIndex] = wellTimeStepIndex;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user