#5545 Derived Summary Case : Make sure union of available addresses are used

This commit is contained in:
Magne Sjaastad 2020-02-13 11:43:21 +01:00
parent 54bb752682
commit d6a1f79135
3 changed files with 30 additions and 32 deletions

View File

@ -24,7 +24,8 @@
///
//--------------------------------------------------------------------------------------------------
RifDerivedEnsembleReader::RifDerivedEnsembleReader( RimDerivedSummaryCase* derivedCase,
RifSummaryReaderInterface* sourceSummaryReader1 )
RifSummaryReaderInterface* sourceSummaryReader1,
RifSummaryReaderInterface* sourceSummaryReader2 )
{
CVF_ASSERT( derivedCase );
@ -32,10 +33,20 @@ RifDerivedEnsembleReader::RifDerivedEnsembleReader( RimDerivedSummaryCase* d
if ( sourceSummaryReader1 )
{
// TODO: This is assuming that the addresses of both reader interfaces are equal
m_allResultAddresses = sourceSummaryReader1->allResultAddresses();
m_allErrorAddresses = sourceSummaryReader1->allErrorAddresses();
}
if ( sourceSummaryReader2 )
{
for ( auto a : sourceSummaryReader2->allResultAddresses() )
{
m_allResultAddresses.insert( a );
}
for ( auto a : sourceSummaryReader2->allErrorAddresses() )
{
m_allErrorAddresses.insert( a );
}
}
}
//--------------------------------------------------------------------------------------------------
@ -91,18 +102,3 @@ RiaEclipseUnitTools::UnitSystem RifDerivedEnsembleReader::unitSystem() const
{
return RiaEclipseUnitTools::UNITS_UNKNOWN;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifDerivedEnsembleReader::updateData( RimSummaryCase* sumCase1, RimSummaryCase* sumCase2 )
{
m_allErrorAddresses.clear();
m_allResultAddresses.clear();
if ( sumCase1 && sumCase1->summaryReader() )
{
m_allErrorAddresses = sumCase1->summaryReader()->allErrorAddresses();
m_allResultAddresses = sumCase1->summaryReader()->allResultAddresses();
}
}

View File

@ -30,15 +30,15 @@ class RimSummaryCase;
class RifDerivedEnsembleReader : public RifSummaryReaderInterface
{
public:
RifDerivedEnsembleReader( RimDerivedSummaryCase* derivedCase, RifSummaryReaderInterface* sourceSummaryReader1 );
RifDerivedEnsembleReader( RimDerivedSummaryCase* derivedCase,
RifSummaryReaderInterface* sourceSummaryReader1,
RifSummaryReaderInterface* sourceSummaryReader2 );
const std::vector<time_t>& timeSteps( const RifEclipseSummaryAddress& resultAddress ) const override;
bool values( const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values ) const override;
std::string unitName( const RifEclipseSummaryAddress& resultAddress ) const override;
RiaEclipseUnitTools::UnitSystem unitSystem() const override;
void updateData( RimSummaryCase* sumCase1, RimSummaryCase* sumCase2 );
private:
RimDerivedSummaryCase* m_derivedCase;
};

View File

@ -235,7 +235,8 @@ QString RimDerivedSummaryCase::caseName() const
//--------------------------------------------------------------------------------------------------
void RimDerivedSummaryCase::createSummaryReaderInterface()
{
RifSummaryReaderInterface* summaryCase1Reader = nullptr;
RifSummaryReaderInterface* summaryCase1Reader1 = nullptr;
RifSummaryReaderInterface* summaryCase1Reader2 = nullptr;
if ( m_summaryCase1 )
{
if ( !m_summaryCase1->summaryReader() )
@ -243,10 +244,19 @@ void RimDerivedSummaryCase::createSummaryReaderInterface()
m_summaryCase1->createSummaryReaderInterface();
}
summaryCase1Reader = m_summaryCase1->summaryReader();
summaryCase1Reader1 = m_summaryCase1->summaryReader();
}
if ( m_summaryCase2 )
{
if ( !m_summaryCase2->summaryReader() )
{
m_summaryCase2->createSummaryReaderInterface();
}
summaryCase1Reader2 = m_summaryCase2->summaryReader();
}
m_reader.reset( new RifDerivedEnsembleReader( this, summaryCase1Reader ) );
m_reader.reset( new RifDerivedEnsembleReader( this, summaryCase1Reader1, summaryCase1Reader2 ) );
}
//--------------------------------------------------------------------------------------------------
@ -329,15 +339,7 @@ void RimDerivedSummaryCase::fieldChangedByUi( const caf::PdmFieldHandle* changed
bool reloadData = false;
if ( changedField == &m_summaryCase2 || changedField == &m_summaryCase1 )
{
if ( !m_reader )
{
createSummaryReaderInterface();
}
if ( m_reader )
{
m_reader->updateData( m_summaryCase1(), m_summaryCase2() );
}
createSummaryReaderInterface();
reloadData = true;
}