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;
|
||||
if (!m_ensemble1 || !m_ensemble2) return addresses;
|
||||
|
||||
addresses = m_ensemble1->calculateUnionOfSummaryAddresses();
|
||||
auto addrs2 = m_ensemble2->calculateUnionOfSummaryAddresses();
|
||||
addresses = m_ensemble1->ensembleSummaryAddresses();
|
||||
auto addrs2 = m_ensemble2->ensembleSummaryAddresses();
|
||||
addresses.insert(addrs2.begin(), addrs2.end());
|
||||
return addresses;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
void setEnsemble2(RimSummaryCaseCollection* ensemble);
|
||||
|
||||
virtual std::vector<RimSummaryCase*> allSummaryCases() const override;
|
||||
virtual std::set<RifEclipseSummaryAddress> calculateUnionOfSummaryAddresses() const override;
|
||||
virtual std::set<RifEclipseSummaryAddress> ensembleSummaryAddresses() const override;
|
||||
void updateDerivedEnsembleCases();
|
||||
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();
|
||||
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();
|
||||
addressUnion.insert(readerAddresses.begin(), readerAddresses.end());
|
||||
|
||||
// We assume that all cases have the same addresses when they have equal number of addresses.
|
||||
// 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 addressUnion;
|
||||
if (maxAddrIndex >= 0)
|
||||
{
|
||||
const std::set<RifEclipseSummaryAddress>& addrs = m_cases[maxAddrIndex]->summaryReader()->allResultAddresses();
|
||||
addresses.insert(addrs.begin(), addrs.end());
|
||||
}
|
||||
return addresses;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -72,7 +72,7 @@ public:
|
||||
QString name() const;
|
||||
bool isEnsemble() const;
|
||||
void setAsEnsemble(bool isEnsemble);
|
||||
virtual std::set<RifEclipseSummaryAddress> calculateUnionOfSummaryAddresses() const;
|
||||
virtual std::set<RifEclipseSummaryAddress> ensembleSummaryAddresses() const;
|
||||
EnsembleParameter ensembleParameter(const QString& paramName) const;
|
||||
void calculateEnsembleParametersIntersectionHash();
|
||||
void clearEnsembleParametersHashes();
|
||||
|
@ -273,7 +273,7 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelection::allCurveDefi
|
||||
// Build case list
|
||||
if (ensemble)
|
||||
{
|
||||
auto addresses = ensemble->calculateUnionOfSummaryAddresses();
|
||||
auto addresses = ensemble->ensembleSummaryAddresses();
|
||||
addressesFromSource.insert(addresses.begin(), addresses.end());
|
||||
auto ensembleCases = ensemble->allSummaryCases();
|
||||
casesFromSource.insert(casesFromSource.end(), ensembleCases.begin(), ensembleCases.end());
|
||||
@ -324,7 +324,7 @@ std::vector<RiaCurveSetDefinition> RiuSummaryCurveDefSelection::allCurveSetDefin
|
||||
std::set<RifEclipseSummaryAddress> addressesFromSource;
|
||||
|
||||
// Build case list
|
||||
auto addresses = ensemble->calculateUnionOfSummaryAddresses();
|
||||
auto addresses = ensemble->ensembleSummaryAddresses();
|
||||
addressesFromSource.insert(addresses.begin(), addresses.end());
|
||||
|
||||
for (const auto& addressFromSource : addressesFromSource)
|
||||
@ -354,7 +354,7 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelection::selection()
|
||||
|
||||
if (ensemble)
|
||||
{
|
||||
std::set<RifEclipseSummaryAddress> addressUnion = ensemble->calculateUnionOfSummaryAddresses();
|
||||
std::set<RifEclipseSummaryAddress> addressUnion = ensemble->ensembleSummaryAddresses();
|
||||
for ( const auto& addr : selectedAddressesFromUi)
|
||||
{
|
||||
if (addressUnion.count(addr))
|
||||
@ -978,7 +978,7 @@ std::set<RifEclipseSummaryAddress> RiuSummaryCurveDefSelection::findPossibleSumm
|
||||
}
|
||||
else if (currEnsemble)
|
||||
{
|
||||
allAddresses = currEnsemble->calculateUnionOfSummaryAddresses();
|
||||
allAddresses = currEnsemble->ensembleSummaryAddresses();
|
||||
}
|
||||
|
||||
bool applySelections = identifierAndField == nullptr || (!isVectorField && controllingIdentifierAndField != nullptr);
|
||||
|
Loading…
Reference in New Issue
Block a user