mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5095 Summary Statistics : Guard vector acces when calculating statistics curves
This commit is contained in:
parent
b758854463
commit
6264eb49c8
@ -133,18 +133,18 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
|
|||||||
const RifEclipseSummaryAddress& inputAddress )
|
const RifEclipseSummaryAddress& inputAddress )
|
||||||
{
|
{
|
||||||
std::vector<time_t> allTimeSteps;
|
std::vector<time_t> allTimeSteps;
|
||||||
std::vector<std::vector<double>> allValues;
|
std::vector<std::vector<double>> caseAndTimeStepValues;
|
||||||
|
|
||||||
if ( !inputAddress.isValid() ) return;
|
if ( !inputAddress.isValid() ) return;
|
||||||
|
|
||||||
allValues.reserve( sumCases.size() );
|
caseAndTimeStepValues.reserve( sumCases.size() );
|
||||||
for ( const auto& sumCase : sumCases )
|
for ( const auto& sumCase : sumCases )
|
||||||
{
|
{
|
||||||
const auto& reader = sumCase->summaryReader();
|
const auto& reader = sumCase->summaryReader();
|
||||||
if ( reader )
|
if ( reader )
|
||||||
{
|
{
|
||||||
std::vector<time_t> timeSteps = reader->timeSteps( inputAddress );
|
const std::vector<time_t>& timeSteps = reader->timeSteps( inputAddress );
|
||||||
std::vector<double> values;
|
std::vector<double> values;
|
||||||
reader->values( inputAddress, &values );
|
reader->values( inputAddress, &values );
|
||||||
|
|
||||||
if ( timeSteps.size() != values.size() ) continue;
|
if ( timeSteps.size() != values.size() ) continue;
|
||||||
@ -157,7 +157,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
|
|||||||
resampler.resampleAndComputeWeightedMeanValues( DateTimePeriod::DAY );
|
resampler.resampleAndComputeWeightedMeanValues( DateTimePeriod::DAY );
|
||||||
|
|
||||||
if ( allTimeSteps.empty() ) allTimeSteps = resampler.resampledTimeSteps();
|
if ( allTimeSteps.empty() ) allTimeSteps = resampler.resampledTimeSteps();
|
||||||
allValues.push_back(
|
caseAndTimeStepValues.push_back(
|
||||||
std::vector<double>( resampler.resampledValues().begin(), resampler.resampledValues().end() ) );
|
std::vector<double>( resampler.resampledValues().begin(), resampler.resampledValues().end() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,14 +165,17 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
|
|||||||
clearData();
|
clearData();
|
||||||
m_timeSteps = allTimeSteps;
|
m_timeSteps = allTimeSteps;
|
||||||
|
|
||||||
for ( int t = 0; t < (int)allTimeSteps.size(); t++ )
|
for ( size_t timeStepIndex = 0; timeStepIndex < allTimeSteps.size(); timeStepIndex++ )
|
||||||
{
|
{
|
||||||
std::vector<double> valuesAtTimeStep;
|
std::vector<double> valuesAtTimeStep;
|
||||||
valuesAtTimeStep.reserve( sumCases.size() );
|
valuesAtTimeStep.reserve( sumCases.size() );
|
||||||
|
|
||||||
for ( int c = 0; c < (int)sumCases.size(); c++ )
|
for ( const std::vector<double>& caseValues : caseAndTimeStepValues )
|
||||||
{
|
{
|
||||||
valuesAtTimeStep.push_back( allValues[c][t] );
|
if ( timeStepIndex < caseValues.size() )
|
||||||
|
{
|
||||||
|
valuesAtTimeStep.push_back( caseValues[timeStepIndex] );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double p10, p50, p90, mean;
|
double p10, p50, p90, mean;
|
||||||
|
Loading…
Reference in New Issue
Block a user