#13064 Crash when computing delta ensemble curves for ongoing simulation

When creating delta for an ongoing simulation, the length of time and value vectors can differ. Resize these vectors to make sure they have the same length to avoid crash.
This commit is contained in:
Magne Sjaastad committed 2025-11-10 14:58:55 +01:00
1 parent 6d0bc0b753
commit 529f0ecf27
1 file changed
+21 -4
@@ -308,8 +308,25 @@ std::pair<std::vector<time_t>, std::vector<double>> RimDeltaSummaryCase::calcula
return ResultPair( reader2->timeSteps( address ), summaryValues );
}
auto [isOk1, values1] = reader1->values( address );
auto [isOk2, values2] = reader2->values( address );
auto getValidatedTimeAndValues = []( RifSummaryReaderInterface* reader,
const RifEclipseSummaryAddress& addr ) -> std::pair<std::vector<time_t>, std::vector<double>>
{
auto timeSteps = reader->timeSteps( addr );
auto [isOk, values] = reader->values( addr );
// Ensure that timeSteps and values have the same size. Different sizes can occur for ongoing simulations.
size_t minSize = std::min( timeSteps.size(), values.size() );
if ( timeSteps.size() != values.size() )
{
timeSteps.resize( minSize );
values.resize( minSize );
}
return { timeSteps, values };
};
const auto [timeSteps1, values1] = getValidatedTimeAndValues( reader1, address );
const auto [timeSteps2, values2] = getValidatedTimeAndValues( reader2, address );
if ( values1.empty() && values2.empty() )
{
@@ -319,8 +336,8 @@ std::pair<std::vector<time_t>, std::vector<double>> RimDeltaSummaryCase::calcula
auto interpolationMethod = address.hasAccumulatedData() ? RiaCurveDefines::InterpolationMethod::LINEAR
: RiaCurveDefines::InterpolationMethod::STEP_RIGHT;
RiaTimeHistoryCurveMerger merger( interpolationMethod );
merger.addCurveData( reader1->timeSteps( address ), values1 );
merger.addCurveData( reader2->timeSteps( address ), values2 );
merger.addCurveData( timeSteps1, values1 );
merger.addCurveData( timeSteps2, values2 );
merger.computeInterpolatedValues( includeIncompleteCurves );
if ( merger.curveCount() < 2 )
{