mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2659 Ensemble statistics. Interpolate values when resampling for end of period calculation
This commit is contained in:
parent
280656ca26
commit
4c25ba8c7d
@ -146,7 +146,7 @@ void RiaTimeHistoryCurveResampler::computeWeightedMeanValues(DateTimePeriod peri
|
|||||||
void RiaTimeHistoryCurveResampler::computePeriodEndValues(DateTimePeriod period)
|
void RiaTimeHistoryCurveResampler::computePeriodEndValues(DateTimePeriod period)
|
||||||
{
|
{
|
||||||
size_t origDataSize = m_originalValues.second.size();
|
size_t origDataSize = m_originalValues.second.size();
|
||||||
size_t origIndex = 0;
|
size_t oi = 0;
|
||||||
auto& origTimeSteps = m_originalValues.second;
|
auto& origTimeSteps = m_originalValues.second;
|
||||||
auto& origValues = m_originalValues.first;
|
auto& origValues = m_originalValues.first;
|
||||||
|
|
||||||
@ -155,8 +155,19 @@ void RiaTimeHistoryCurveResampler::computePeriodEndValues(DateTimePeriod period)
|
|||||||
m_values.reserve(m_timeSteps.size());
|
m_values.reserve(m_timeSteps.size());
|
||||||
for (size_t i = 0; i < m_timeSteps.size(); i++)
|
for (size_t i = 0; i < m_timeSteps.size(); i++)
|
||||||
{
|
{
|
||||||
while (origIndex < origDataSize && origTimeSteps[origIndex] < m_timeSteps[i]) origIndex++;
|
while (oi < origDataSize && origTimeSteps[oi] < m_timeSteps[i]) oi++;
|
||||||
m_values.push_back(origValues[origIndex]);
|
|
||||||
|
double value;
|
||||||
|
if (oi > 0)
|
||||||
|
{
|
||||||
|
value = interpolatedValue(m_timeSteps[i], origTimeSteps[oi - 1], origValues[oi - 1], origTimeSteps[oi], origValues[oi]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = origValues[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
m_values.push_back(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,3 +211,16 @@ QDateTime RiaTimeHistoryCurveResampler::firstResampledTimeStep(const QDateTime&
|
|||||||
if (QDT::lessThan(truncatedTime, firstTimeStep)) return QDT::addPeriod(truncatedTime, period);
|
if (QDT::lessThan(truncatedTime, firstTimeStep)) return QDT::addPeriod(truncatedTime, period);
|
||||||
return truncatedTime;
|
return truncatedTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RiaTimeHistoryCurveResampler::interpolatedValue(time_t t, time_t t1, double v1, time_t t2, double v2)
|
||||||
|
{
|
||||||
|
CVF_ASSERT(t2 >= t1);
|
||||||
|
|
||||||
|
if (t <= t1) return v1;
|
||||||
|
if (t >= t2) return v2;
|
||||||
|
|
||||||
|
return (v2 - v1) * (double)(t - t1) / (double)(t2 - t1) + v1;
|
||||||
|
}
|
||||||
|
@ -49,6 +49,7 @@ private:
|
|||||||
void clearData();
|
void clearData();
|
||||||
void computeResampledTimeSteps(DateTimePeriod period);
|
void computeResampledTimeSteps(DateTimePeriod period);
|
||||||
QDateTime firstResampledTimeStep(const QDateTime& firstTimestep, DateTimePeriod period);
|
QDateTime firstResampledTimeStep(const QDateTime& firstTimestep, DateTimePeriod period);
|
||||||
|
inline double interpolatedValue(time_t t, time_t t1, double v1, time_t t2, double v2);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::pair<std::vector<double>, std::vector<time_t>> m_originalValues;
|
std::pair<std::vector<double>, std::vector<time_t>> m_originalValues;
|
||||||
|
Loading…
Reference in New Issue
Block a user