mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
(#282) Added basic data structures to compute and cache unique integer values
This commit is contained in:
@@ -137,6 +137,22 @@ void RigFemNativeStatCalc::addDataToHistogramCalculator(size_t timeStepIndex, Ri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigFemNativeStatCalc::uniqueValues(size_t timeStepIndex, std::set<int>& values)
|
||||||
|
{
|
||||||
|
for (int pIdx = 0; pIdx < m_resultsData->partCount(); ++pIdx)
|
||||||
|
{
|
||||||
|
const std::vector<float>& floatValues = m_resultsData->resultValues(m_resVarAddr, pIdx, (int)timeStepIndex);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < floatValues.size(); i++)
|
||||||
|
{
|
||||||
|
values.insert(static_cast<int>(std::floor(floatValues[i])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ public:
|
|||||||
|
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -82,6 +82,16 @@ void RigFemNativeVisibleCellsStatCalc::addDataToHistogramCalculator(size_t timeS
|
|||||||
traverseElementNodes(histogramCalculator, timeStepIndex);
|
traverseElementNodes(histogramCalculator, timeStepIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigFemNativeVisibleCellsStatCalc::uniqueValues(size_t timeStepIndex, std::set<int>& values)
|
||||||
|
{
|
||||||
|
UniqueValueAccumulator acc;
|
||||||
|
traverseElementNodes(acc, timeStepIndex);
|
||||||
|
values = acc.uniqueValues;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public:
|
|||||||
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
||||||
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -127,6 +127,22 @@ void RigCaseCellResultsData::meanCellScalarValues(size_t scalarResultIndex, size
|
|||||||
m_statisticsDataCache[scalarResultIndex]->meanCellScalarValues(timeStepIndex, meanValue);
|
m_statisticsDataCache[scalarResultIndex]->meanCellScalarValues(timeStepIndex, meanValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const std::set<int>& RigCaseCellResultsData::uniqueCellScalarValues(size_t scalarResultIndex)
|
||||||
|
{
|
||||||
|
return m_statisticsDataCache[scalarResultIndex]->uniqueCellScalarValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const std::set<int>& RigCaseCellResultsData::uniqueCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex)
|
||||||
|
{
|
||||||
|
return m_statisticsDataCache[scalarResultIndex]->uniqueCellScalarValues(timeStepIndex);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ public:
|
|||||||
void p10p90CellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& p10, double& p90);
|
void p10p90CellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& p10, double& p90);
|
||||||
void meanCellScalarValues(size_t scalarResultIndex, double& meanValue);
|
void meanCellScalarValues(size_t scalarResultIndex, double& meanValue);
|
||||||
void meanCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& meanValue);
|
void meanCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& meanValue);
|
||||||
|
const std::set<int>& uniqueCellScalarValues(size_t scalarResultIndex);
|
||||||
|
const std::set<int>& uniqueCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex);
|
||||||
void sumCellScalarValues(size_t scalarResultIndex, double& sumValue);
|
void sumCellScalarValues(size_t scalarResultIndex, double& sumValue);
|
||||||
void sumCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& sumValue);
|
void sumCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& sumValue);
|
||||||
|
|
||||||
|
|||||||
@@ -97,6 +97,20 @@ void RigEclipseMultiPropertyStatCalc::addDataToHistogramCalculator(size_t timeSt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigEclipseMultiPropertyStatCalc::uniqueValues(size_t timeStepIndex, std::set<int>& values)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_nativeStatisticsCalculators.size(); i++)
|
||||||
|
{
|
||||||
|
if (m_nativeStatisticsCalculators.at(i))
|
||||||
|
{
|
||||||
|
m_nativeStatisticsCalculators.at(i)->uniqueValues(timeStepIndex, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ public:
|
|||||||
|
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -83,6 +83,19 @@ void RigEclipseNativeStatCalc::addDataToHistogramCalculator(size_t timeStepIndex
|
|||||||
histogramCalculator.addData(values);
|
histogramCalculator.addData(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigEclipseNativeStatCalc::uniqueValues(size_t timeStepIndex, std::set<int>& values)
|
||||||
|
{
|
||||||
|
std::vector<double>& doubleValues = m_resultsData->cellScalarResults(m_scalarResultIndex, timeStepIndex);
|
||||||
|
|
||||||
|
for (size_t cIdx = 0; cIdx < doubleValues.size(); ++cIdx)
|
||||||
|
{
|
||||||
|
values.insert(std::floor(doubleValues[cIdx]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ public:
|
|||||||
|
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -80,6 +80,16 @@ void RigEclipseNativeVisibleCellsStatCalc::addDataToHistogramCalculator(size_t t
|
|||||||
traverseCells(histogramCalculator, timeStepIndex);
|
traverseCells(histogramCalculator, timeStepIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigEclipseNativeVisibleCellsStatCalc::uniqueValues(size_t timeStepIndex, std::set<int>& values)
|
||||||
|
{
|
||||||
|
UniqueValueAccumulator acc;
|
||||||
|
traverseCells(acc, timeStepIndex);
|
||||||
|
values = acc.uniqueValues;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public:
|
|||||||
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
||||||
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ public:
|
|||||||
void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator) = 0;
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator) = 0;
|
||||||
|
|
||||||
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values) = 0;
|
||||||
|
|
||||||
virtual size_t timeStepCount() = 0;
|
virtual size_t timeStepCount() = 0;
|
||||||
|
|
||||||
static void posNegClosestToZero(const std::vector<double>& values, double& pos, double& neg);
|
static void posNegClosestToZero(const std::vector<double>& values, double& pos, double& neg);
|
||||||
|
|||||||
@@ -255,6 +255,26 @@ const std::vector<size_t>& RigStatisticsDataCache::cellScalarValuesHistogram(siz
|
|||||||
return m_statsPrTs[timeStepIndex].m_histogram;
|
return m_statsPrTs[timeStepIndex].m_histogram;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const std::set<int>& RigStatisticsDataCache::uniqueCellScalarValues()
|
||||||
|
{
|
||||||
|
computeUniqueValuesIfNeeded();
|
||||||
|
|
||||||
|
return m_statsAllTimesteps.m_uniqueValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const std::set<int>& RigStatisticsDataCache::uniqueCellScalarValues(size_t timeStepIndex)
|
||||||
|
{
|
||||||
|
computeUniqueValuesIfNeeded(timeStepIndex);
|
||||||
|
|
||||||
|
return m_statsPrTs[timeStepIndex].m_uniqueValues;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -319,3 +339,35 @@ void RigStatisticsDataCache::computeHistogramStatisticsIfNeeded(size_t timeStepI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsDataCache::computeUniqueValuesIfNeeded(size_t timeStepIndex)
|
||||||
|
{
|
||||||
|
if (timeStepIndex >= m_statsPrTs.size())
|
||||||
|
{
|
||||||
|
m_statsPrTs.resize(timeStepIndex + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_statsPrTs[timeStepIndex].m_uniqueValues.size() == 0)
|
||||||
|
{
|
||||||
|
m_statisticsCalculator->uniqueValues(timeStepIndex, m_statsPrTs[timeStepIndex].m_uniqueValues);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsDataCache::computeUniqueValuesIfNeeded()
|
||||||
|
{
|
||||||
|
if (m_statsAllTimesteps.m_uniqueValues.size() == 0)
|
||||||
|
{
|
||||||
|
for (size_t tIdx = 0; tIdx < m_statisticsCalculator->timeStepCount(); tIdx++)
|
||||||
|
{
|
||||||
|
computeUniqueValuesIfNeeded(tIdx);
|
||||||
|
|
||||||
|
m_statsAllTimesteps.m_uniqueValues.insert(m_statsPrTs[tIdx].m_uniqueValues.begin(), m_statsPrTs[tIdx].m_uniqueValues.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,10 +55,16 @@ public:
|
|||||||
const std::vector<size_t>& cellScalarValuesHistogram();
|
const std::vector<size_t>& cellScalarValuesHistogram();
|
||||||
const std::vector<size_t>& cellScalarValuesHistogram(size_t timeStepIndex);
|
const std::vector<size_t>& cellScalarValuesHistogram(size_t timeStepIndex);
|
||||||
|
|
||||||
|
const std::set<int>& uniqueCellScalarValues();
|
||||||
|
const std::set<int>& uniqueCellScalarValues(size_t timeStepIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void computeHistogramStatisticsIfNeeded();
|
void computeHistogramStatisticsIfNeeded();
|
||||||
void computeHistogramStatisticsIfNeeded(size_t timeStepIndex);
|
void computeHistogramStatisticsIfNeeded(size_t timeStepIndex);
|
||||||
|
|
||||||
|
void computeUniqueValuesIfNeeded();
|
||||||
|
void computeUniqueValuesIfNeeded(size_t timeStepIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct StatisticsValues
|
struct StatisticsValues
|
||||||
{
|
{
|
||||||
@@ -96,6 +102,7 @@ private:
|
|||||||
bool m_isValueSumCalculated;
|
bool m_isValueSumCalculated;
|
||||||
|
|
||||||
std::vector<size_t> m_histogram;
|
std::vector<size_t> m_histogram;
|
||||||
|
std::set<int> m_uniqueValues;
|
||||||
};
|
};
|
||||||
|
|
||||||
StatisticsValues m_statsAllTimesteps;
|
StatisticsValues m_statsAllTimesteps;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <set>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
@@ -131,3 +132,18 @@ public:
|
|||||||
double valueSum;
|
double valueSum;
|
||||||
size_t sampleCount;
|
size_t sampleCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class UniqueValueAccumulator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UniqueValueAccumulator()
|
||||||
|
{}
|
||||||
|
|
||||||
|
void addValue(double value)
|
||||||
|
{
|
||||||
|
uniqueValues.insert(static_cast<int>(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::set<int> uniqueValues;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user