mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3391 Ensemble curves. Use vector addresses from the case having the highest number of vectors
This commit is contained in:
parent
e0d7352c1b
commit
fce06c0057
@ -120,13 +120,13 @@ std::vector<RimSummaryCase*> RimDerivedEnsembleCaseCollection::allSummaryCases()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::set<RifEclipseSummaryAddress> RimDerivedEnsembleCaseCollection::calculateUnionOfSummaryAddresses() const
|
std::set<RifEclipseSummaryAddress> RimDerivedEnsembleCaseCollection::ensembleSummaryAddresses() const
|
||||||
{
|
{
|
||||||
std::set<RifEclipseSummaryAddress> addresses;
|
std::set<RifEclipseSummaryAddress> addresses;
|
||||||
if (!m_ensemble1 || !m_ensemble2) return addresses;
|
if (!m_ensemble1 || !m_ensemble2) return addresses;
|
||||||
|
|
||||||
addresses = m_ensemble1->calculateUnionOfSummaryAddresses();
|
addresses = m_ensemble1->ensembleSummaryAddresses();
|
||||||
auto addrs2 = m_ensemble2->calculateUnionOfSummaryAddresses();
|
auto addrs2 = m_ensemble2->ensembleSummaryAddresses();
|
||||||
addresses.insert(addrs2.begin(), addrs2.end());
|
addresses.insert(addrs2.begin(), addrs2.end());
|
||||||
return addresses;
|
return addresses;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public:
|
|||||||
void setEnsemble2(RimSummaryCaseCollection* ensemble);
|
void setEnsemble2(RimSummaryCaseCollection* ensemble);
|
||||||
|
|
||||||
virtual std::vector<RimSummaryCase*> allSummaryCases() const override;
|
virtual std::vector<RimSummaryCase*> allSummaryCases() const override;
|
||||||
virtual std::set<RifEclipseSummaryAddress> calculateUnionOfSummaryAddresses() const override;
|
virtual std::set<RifEclipseSummaryAddress> ensembleSummaryAddresses() const override;
|
||||||
void updateDerivedEnsembleCases();
|
void updateDerivedEnsembleCases();
|
||||||
bool hasCaseReference(const RimSummaryCase* sumCase) const;
|
bool hasCaseReference(const RimSummaryCase* sumCase) const;
|
||||||
|
|
||||||
|
@ -170,26 +170,34 @@ void RimSummaryCaseCollection::setAsEnsemble(bool isEnsemble)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::set<RifEclipseSummaryAddress> RimSummaryCaseCollection::calculateUnionOfSummaryAddresses() const
|
std::set<RifEclipseSummaryAddress> RimSummaryCaseCollection::ensembleSummaryAddresses() const
|
||||||
{
|
{
|
||||||
std::set<RifEclipseSummaryAddress> addressUnion;
|
std::set<RifEclipseSummaryAddress> addresses;
|
||||||
|
size_t maxAddrCount = 0;
|
||||||
|
int maxAddrIndex = -1;
|
||||||
|
|
||||||
for (RimSummaryCase* currCase: m_cases)
|
for (int i = 0; i < (int)m_cases.size(); i++)
|
||||||
{
|
{
|
||||||
if ( !currCase ) continue;
|
RimSummaryCase* currCase = m_cases[i];
|
||||||
|
if (!currCase) continue;
|
||||||
|
|
||||||
RifSummaryReaderInterface* reader = currCase->summaryReader();
|
RifSummaryReaderInterface* reader = currCase->summaryReader();
|
||||||
|
if (!reader) continue;
|
||||||
|
|
||||||
if ( !reader ) continue;
|
size_t addrCount = reader->allResultAddresses().size();
|
||||||
|
if (addrCount > maxAddrCount)
|
||||||
|
{
|
||||||
|
maxAddrCount = addrCount;
|
||||||
|
maxAddrIndex = (int)i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::set<RifEclipseSummaryAddress>& readerAddresses = reader->allResultAddresses();
|
if (maxAddrIndex >= 0)
|
||||||
addressUnion.insert(readerAddresses.begin(), readerAddresses.end());
|
{
|
||||||
|
const std::set<RifEclipseSummaryAddress>& addrs = m_cases[maxAddrIndex]->summaryReader()->allResultAddresses();
|
||||||
// We assume that all cases have the same addresses when they have equal number of addresses.
|
addresses.insert(addrs.begin(), addrs.end());
|
||||||
// In that case there is no need to calculate the union, we only use the addresses from the first case
|
}
|
||||||
if (m_commonAddressCount > 0) break;
|
return addresses;
|
||||||
}
|
|
||||||
return addressUnion;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
QString name() const;
|
QString name() const;
|
||||||
bool isEnsemble() const;
|
bool isEnsemble() const;
|
||||||
void setAsEnsemble(bool isEnsemble);
|
void setAsEnsemble(bool isEnsemble);
|
||||||
virtual std::set<RifEclipseSummaryAddress> calculateUnionOfSummaryAddresses() const;
|
virtual std::set<RifEclipseSummaryAddress> ensembleSummaryAddresses() const;
|
||||||
EnsembleParameter ensembleParameter(const QString& paramName) const;
|
EnsembleParameter ensembleParameter(const QString& paramName) const;
|
||||||
void calculateEnsembleParametersIntersectionHash();
|
void calculateEnsembleParametersIntersectionHash();
|
||||||
void clearEnsembleParametersHashes();
|
void clearEnsembleParametersHashes();
|
||||||
|
@ -273,7 +273,7 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelection::allCurveDefi
|
|||||||
// Build case list
|
// Build case list
|
||||||
if (ensemble)
|
if (ensemble)
|
||||||
{
|
{
|
||||||
auto addresses = ensemble->calculateUnionOfSummaryAddresses();
|
auto addresses = ensemble->ensembleSummaryAddresses();
|
||||||
addressesFromSource.insert(addresses.begin(), addresses.end());
|
addressesFromSource.insert(addresses.begin(), addresses.end());
|
||||||
auto ensembleCases = ensemble->allSummaryCases();
|
auto ensembleCases = ensemble->allSummaryCases();
|
||||||
casesFromSource.insert(casesFromSource.end(), ensembleCases.begin(), ensembleCases.end());
|
casesFromSource.insert(casesFromSource.end(), ensembleCases.begin(), ensembleCases.end());
|
||||||
@ -324,7 +324,7 @@ std::vector<RiaCurveSetDefinition> RiuSummaryCurveDefSelection::allCurveSetDefin
|
|||||||
std::set<RifEclipseSummaryAddress> addressesFromSource;
|
std::set<RifEclipseSummaryAddress> addressesFromSource;
|
||||||
|
|
||||||
// Build case list
|
// Build case list
|
||||||
auto addresses = ensemble->calculateUnionOfSummaryAddresses();
|
auto addresses = ensemble->ensembleSummaryAddresses();
|
||||||
addressesFromSource.insert(addresses.begin(), addresses.end());
|
addressesFromSource.insert(addresses.begin(), addresses.end());
|
||||||
|
|
||||||
for (const auto& addressFromSource : addressesFromSource)
|
for (const auto& addressFromSource : addressesFromSource)
|
||||||
@ -354,7 +354,7 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelection::selection()
|
|||||||
|
|
||||||
if (ensemble)
|
if (ensemble)
|
||||||
{
|
{
|
||||||
std::set<RifEclipseSummaryAddress> addressUnion = ensemble->calculateUnionOfSummaryAddresses();
|
std::set<RifEclipseSummaryAddress> addressUnion = ensemble->ensembleSummaryAddresses();
|
||||||
for ( const auto& addr : selectedAddressesFromUi)
|
for ( const auto& addr : selectedAddressesFromUi)
|
||||||
{
|
{
|
||||||
if (addressUnion.count(addr))
|
if (addressUnion.count(addr))
|
||||||
@ -978,7 +978,7 @@ std::set<RifEclipseSummaryAddress> RiuSummaryCurveDefSelection::findPossibleSumm
|
|||||||
}
|
}
|
||||||
else if (currEnsemble)
|
else if (currEnsemble)
|
||||||
{
|
{
|
||||||
allAddresses = currEnsemble->calculateUnionOfSummaryAddresses();
|
allAddresses = currEnsemble->ensembleSummaryAddresses();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool applySelections = identifierAndField == nullptr || (!isVectorField && controllingIdentifierAndField != nullptr);
|
bool applySelections = identifierAndField == nullptr || (!isVectorField && controllingIdentifierAndField != nullptr);
|
||||||
|
Loading…
Reference in New Issue
Block a user