#2153 Curve Creator : Clear results before trying to assign values from curve merging

This commit is contained in:
Magne Sjaastad 2017-11-21 09:19:39 +01:00
parent 9d5bf4ce5e
commit 4d6d48dc18
2 changed files with 39 additions and 10 deletions

View File

@ -291,21 +291,27 @@ bool RimSummaryCalculation::calculate()
if (evaluatedOk)
{
size_t firstValidTimeStep = timeHistoryCurveMerger.validIntervalsForAllTimeSteps().front().first;
size_t lastValidTimeStep = timeHistoryCurveMerger.validIntervalsForAllTimeSteps().back().second + 1;
m_timesteps.v().clear();
m_calculatedValues.v().clear();
if (lastValidTimeStep > firstValidTimeStep &&
lastValidTimeStep <= timeHistoryCurveMerger.allTimeSteps().size())
if (timeHistoryCurveMerger.validIntervalsForAllTimeSteps().size() > 0)
{
std::vector<time_t> validTimeSteps(timeHistoryCurveMerger.allTimeSteps().begin() + firstValidTimeStep,
timeHistoryCurveMerger.allTimeSteps().begin() + lastValidTimeStep);
size_t firstValidTimeStep = timeHistoryCurveMerger.validIntervalsForAllTimeSteps().front().first;
size_t lastValidTimeStep = timeHistoryCurveMerger.validIntervalsForAllTimeSteps().back().second + 1;
if (lastValidTimeStep > firstValidTimeStep &&
lastValidTimeStep <= timeHistoryCurveMerger.allTimeSteps().size())
{
std::vector<time_t> validTimeSteps(timeHistoryCurveMerger.allTimeSteps().begin() + firstValidTimeStep,
timeHistoryCurveMerger.allTimeSteps().begin() + lastValidTimeStep);
std::vector<double> validValues(resultValues.begin() + firstValidTimeStep,
resultValues.begin() + lastValidTimeStep);
std::vector<double> validValues(resultValues.begin() + firstValidTimeStep,
resultValues.begin() + lastValidTimeStep);
m_timesteps = validTimeSteps;
m_calculatedValues = validValues;
m_timesteps = validTimeSteps;
m_calculatedValues = validValues;
}
}
m_isDirty = false;

View File

@ -185,3 +185,26 @@ TEST(RigTimeHistoryCurveMergerTest, RobustUse)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RigTimeHistoryCurveMergerTest, NoTimeStepOverlap)
{
std::vector<double> valuesA{ 1, 2, 3, 4, 5 };
std::vector<double> valuesB{ 10, 20, 30 };
std::vector<time_t> timeStepsA{ 0, 10, 11, 15, 20 };
std::vector<time_t> timeStepsB{ 100, 200, 300 };
{
RigTimeHistoryCurveMerger curveMerger;
curveMerger.addCurveData(valuesA, timeStepsA);
curveMerger.addCurveData(valuesB, timeStepsB);
// Execute interpolation twice is allowed
curveMerger.computeInterpolatedValues();
EXPECT_EQ(8, static_cast<int>(curveMerger.allTimeSteps().size()));
EXPECT_EQ(0, static_cast<int>(curveMerger.validIntervalsForAllTimeSteps().size()));
}
}