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)
|
||||
{
|
||||
size_t origDataSize = m_originalValues.second.size();
|
||||
size_t origIndex = 0;
|
||||
size_t oi = 0;
|
||||
auto& origTimeSteps = m_originalValues.second;
|
||||
auto& origValues = m_originalValues.first;
|
||||
|
||||
@ -155,8 +155,19 @@ void RiaTimeHistoryCurveResampler::computePeriodEndValues(DateTimePeriod period)
|
||||
m_values.reserve(m_timeSteps.size());
|
||||
for (size_t i = 0; i < m_timeSteps.size(); i++)
|
||||
{
|
||||
while (origIndex < origDataSize && origTimeSteps[origIndex] < m_timeSteps[i]) origIndex++;
|
||||
m_values.push_back(origValues[origIndex]);
|
||||
while (oi < origDataSize && origTimeSteps[oi] < m_timeSteps[i]) oi++;
|
||||
|
||||
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);
|
||||
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 computeResampledTimeSteps(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:
|
||||
std::pair<std::vector<double>, std::vector<time_t>> m_originalValues;
|
||||
|
Loading…
Reference in New Issue
Block a user