mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Refactor case difference calculation into a static method
To reuse in Analysis Plots
This commit is contained in:
parent
fd4cbc6c87
commit
95d0b5c8c8
@ -140,29 +140,49 @@ void RimDerivedSummaryCase::calculate( const RifEclipseSummaryAddress& address )
|
|||||||
|
|
||||||
RifSummaryReaderInterface* reader1 = m_summaryCase1 ? m_summaryCase1->summaryReader() : nullptr;
|
RifSummaryReaderInterface* reader1 = m_summaryCase1 ? m_summaryCase1->summaryReader() : nullptr;
|
||||||
RifSummaryReaderInterface* reader2 = m_summaryCase2 ? m_summaryCase2->summaryReader() : nullptr;
|
RifSummaryReaderInterface* reader2 = m_summaryCase2 ? m_summaryCase2->summaryReader() : nullptr;
|
||||||
if ( !reader1 || !reader2 ) return;
|
|
||||||
|
auto itAndIsInsertedPair =
|
||||||
|
m_dataCache.insert( std::make_pair( address, calculateDerivedValues( reader1, reader2, m_operator(), address ) ) );
|
||||||
|
|
||||||
|
// Check if we got any data. If not, erase the map entry to comply with previous behavior
|
||||||
|
|
||||||
|
if ( !itAndIsInsertedPair.first->second.first.size() )
|
||||||
|
{
|
||||||
|
m_dataCache.erase( itAndIsInsertedPair.first );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::pair<std::vector<time_t>, std::vector<double>>
|
||||||
|
RimDerivedSummaryCase::calculateDerivedValues( RifSummaryReaderInterface* reader1,
|
||||||
|
RifSummaryReaderInterface* reader2,
|
||||||
|
DerivedSummaryOperator m_operator,
|
||||||
|
const RifEclipseSummaryAddress& address )
|
||||||
|
{
|
||||||
|
using ResultPair = std::pair<std::vector<time_t>, std::vector<double>>;
|
||||||
|
|
||||||
|
if ( !reader1 || !reader2 ) return ResultPair();
|
||||||
|
|
||||||
if ( !reader1->hasAddress( address ) && !reader2->hasAddress( address ) )
|
if ( !reader1->hasAddress( address ) && !reader2->hasAddress( address ) )
|
||||||
{
|
{
|
||||||
return;
|
return ResultPair();
|
||||||
}
|
}
|
||||||
else if ( reader1->hasAddress( address ) && !reader2->hasAddress( address ) )
|
|
||||||
|
if ( reader1->hasAddress( address ) && !reader2->hasAddress( address ) )
|
||||||
{
|
{
|
||||||
std::vector<double> summaryValues;
|
std::vector<double> summaryValues;
|
||||||
reader1->values( address, &summaryValues );
|
reader1->values( address, &summaryValues );
|
||||||
|
|
||||||
auto& dataItem = m_dataCache[address];
|
return ResultPair( reader1->timeSteps( address ), summaryValues );
|
||||||
dataItem.first = reader1->timeSteps( address );
|
|
||||||
dataItem.second = summaryValues;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if ( !reader1->hasAddress( address ) && reader2->hasAddress( address ) )
|
else if ( !reader1->hasAddress( address ) && reader2->hasAddress( address ) )
|
||||||
{
|
{
|
||||||
std::vector<double> summaryValues;
|
std::vector<double> summaryValues;
|
||||||
reader2->values( address, &summaryValues );
|
reader2->values( address, &summaryValues );
|
||||||
|
|
||||||
if ( m_operator() == DerivedSummaryOperator::DERIVED_OPERATOR_SUB )
|
if ( m_operator == DerivedSummaryOperator::DERIVED_OPERATOR_SUB )
|
||||||
{
|
{
|
||||||
for ( auto& v : summaryValues )
|
for ( auto& v : summaryValues )
|
||||||
{
|
{
|
||||||
@ -170,11 +190,7 @@ void RimDerivedSummaryCase::calculate( const RifEclipseSummaryAddress& address )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& dataItem = m_dataCache[address];
|
return ResultPair( reader2->timeSteps( address ), summaryValues );
|
||||||
dataItem.first = reader2->timeSteps( address );
|
|
||||||
dataItem.second = summaryValues;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RiaTimeHistoryCurveMerger merger;
|
RiaTimeHistoryCurveMerger merger;
|
||||||
@ -191,24 +207,24 @@ void RimDerivedSummaryCase::calculate( const RifEclipseSummaryAddress& address )
|
|||||||
const std::vector<double>& allValues1 = merger.interpolatedYValuesForAllXValues( 0 );
|
const std::vector<double>& allValues1 = merger.interpolatedYValuesForAllXValues( 0 );
|
||||||
const std::vector<double>& allValues2 = merger.interpolatedYValuesForAllXValues( 1 );
|
const std::vector<double>& allValues2 = merger.interpolatedYValuesForAllXValues( 1 );
|
||||||
|
|
||||||
size_t sampleCount = merger.allXValues().size();
|
size_t sampleCount = merger.allXValues().size();
|
||||||
|
|
||||||
std::vector<double> calculatedValues;
|
std::vector<double> calculatedValues;
|
||||||
calculatedValues.reserve( sampleCount );
|
calculatedValues.reserve( sampleCount );
|
||||||
|
|
||||||
for ( size_t i = 0; i < sampleCount; i++ )
|
for ( size_t i = 0; i < sampleCount; i++ )
|
||||||
{
|
{
|
||||||
if ( m_operator() == DerivedSummaryOperator::DERIVED_OPERATOR_SUB )
|
if ( m_operator == DerivedSummaryOperator::DERIVED_OPERATOR_SUB )
|
||||||
{
|
{
|
||||||
calculatedValues.push_back( allValues1[i] - allValues2[i] );
|
calculatedValues.push_back( allValues1[i] - allValues2[i] );
|
||||||
}
|
}
|
||||||
else if ( m_operator() == DerivedSummaryOperator::DERIVED_OPERATOR_ADD )
|
else if ( m_operator == DerivedSummaryOperator::DERIVED_OPERATOR_ADD )
|
||||||
{
|
{
|
||||||
calculatedValues.push_back( allValues1[i] + allValues2[i] );
|
calculatedValues.push_back( allValues1[i] + allValues2[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& dataItem = m_dataCache[address];
|
return ResultPair( merger.allXValues(), calculatedValues );
|
||||||
dataItem.first = merger.allXValues();
|
|
||||||
dataItem.second = calculatedValues;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -60,6 +60,12 @@ public:
|
|||||||
|
|
||||||
void calculate( const RifEclipseSummaryAddress& address );
|
void calculate( const RifEclipseSummaryAddress& address );
|
||||||
|
|
||||||
|
static std::pair<std::vector<time_t>, std::vector<double>>
|
||||||
|
calculateDerivedValues( RifSummaryReaderInterface* reader1,
|
||||||
|
RifSummaryReaderInterface* reader2,
|
||||||
|
DerivedSummaryOperator m_operator,
|
||||||
|
const RifEclipseSummaryAddress& address );
|
||||||
|
|
||||||
void createSummaryReaderInterface() override;
|
void createSummaryReaderInterface() override;
|
||||||
RifSummaryReaderInterface* summaryReader() override;
|
RifSummaryReaderInterface* summaryReader() override;
|
||||||
void updateFilePathsFromProjectPath( const QString& newProjectPath, const QString& oldProjectPath ) override;
|
void updateFilePathsFromProjectPath( const QString& newProjectPath, const QString& oldProjectPath ) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user