mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#782 Avoid creating curves for none existing data.
This commit is contained in:
parent
833de65df6
commit
5c09935ac5
@ -230,16 +230,7 @@ RifEclipseSummaryAddress addressFromErtSmSpecNode(const smspec_node_type * ertSu
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::vector<RifEclipseSummaryAddress>& RifReaderEclipseSummary::allResultAddresses()
|
||||
{
|
||||
if (m_allResultAddresses.size() == 0)
|
||||
{
|
||||
int varCount = ecl_smspec_num_nodes( eclSmSpec);
|
||||
for(int i = 0; i < varCount; i++)
|
||||
{
|
||||
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, i);
|
||||
|
||||
m_allResultAddresses.push_back(addressFromErtSmSpecNode(ertSumVarNode));
|
||||
}
|
||||
}
|
||||
buildMetaData();
|
||||
|
||||
return m_allResultAddresses;
|
||||
}
|
||||
@ -318,17 +309,47 @@ std::vector<QDateTime> RifReaderEclipseSummary::fromTimeT(const std::vector<time
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int RifReaderEclipseSummary::indexFromAddress(const RifEclipseSummaryAddress& resultAddress)
|
||||
{
|
||||
// For now, a slow linear search
|
||||
int resIndex = -1;
|
||||
int addrCount = static_cast<int>(this->allResultAddresses().size());
|
||||
for (int idx = 0; idx < addrCount; ++idx)
|
||||
{
|
||||
if (m_allResultAddresses[idx] == resultAddress) return idx;
|
||||
}
|
||||
this->buildMetaData();
|
||||
|
||||
auto it = m_resultAddressToErtNodeIdx.find(resultAddress);
|
||||
if (it != m_resultAddressToErtNodeIdx.end())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifReaderEclipseSummary::buildMetaData()
|
||||
{
|
||||
if(m_allResultAddresses.size() == 0)
|
||||
{
|
||||
int varCount = ecl_smspec_num_nodes(eclSmSpec);
|
||||
for(int i = 0; i < varCount; i++)
|
||||
{
|
||||
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, i);
|
||||
RifEclipseSummaryAddress addr = addressFromErtSmSpecNode(ertSumVarNode);
|
||||
m_allResultAddresses.push_back(addr);
|
||||
m_resultAddressToErtNodeIdx[addr] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifReaderEclipseSummary::hasAddress(const RifEclipseSummaryAddress& resultAddress)
|
||||
{
|
||||
this->buildMetaData();
|
||||
|
||||
auto it = m_resultAddressToErtNodeIdx.find(resultAddress);
|
||||
|
||||
return (it != m_resultAddressToErtNodeIdx.end());
|
||||
}
|
||||
|
||||
#if 0
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#include "cvfObject.h"
|
||||
|
||||
@ -42,6 +43,7 @@ public:
|
||||
bool open(const std::string& headerFileName, const std::vector<std::string>& dataFileNames);
|
||||
void close();
|
||||
|
||||
bool hasAddress(const RifEclipseSummaryAddress& resultAddress);
|
||||
const std::vector<RifEclipseSummaryAddress>& allResultAddresses();
|
||||
std::vector<time_t> timeSteps() const;
|
||||
|
||||
@ -55,6 +57,7 @@ private:
|
||||
int timeStepCount() const;
|
||||
int indexFromAddress(const RifEclipseSummaryAddress& resultAddress);
|
||||
|
||||
void buildMetaData();
|
||||
private:
|
||||
// Taken from ecl_sum.h
|
||||
typedef struct ecl_sum_struct ecl_sum_type;
|
||||
@ -64,5 +67,7 @@ private:
|
||||
const ecl_smspec_type * eclSmSpec;
|
||||
|
||||
std::vector<RifEclipseSummaryAddress> m_allResultAddresses;
|
||||
std::map<RifEclipseSummaryAddress, int> m_resultAddressToErtNodeIdx;
|
||||
|
||||
};
|
||||
|
||||
|
@ -242,12 +242,19 @@ void RimSummaryCurveFilter::syncCurvesFromUiSelection()
|
||||
|
||||
for (RimSummaryCase* currentCase: m_selectedSummaryCases)
|
||||
{
|
||||
if (!currentCase || !currentCase->caseData() || !currentCase->caseData()->summaryReader()) continue;
|
||||
|
||||
RifReaderEclipseSummary* reader = currentCase->caseData()->summaryReader();
|
||||
|
||||
for(const RifEclipseSummaryAddress& addr: m_uiFilterResultMultiSelection.v())
|
||||
{
|
||||
if(!reader->hasAddress(addr)) continue;
|
||||
|
||||
newCurveDefinitions.insert(std::make_pair(currentCase, addr));
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Delete all existing curves that is not matching
|
||||
// Remove the entries in the search set that we already have
|
||||
for(RimSummaryCurve* curve: m_curves)
|
||||
@ -263,6 +270,10 @@ void RimSummaryCurveFilter::syncCurvesFromUiSelection()
|
||||
}
|
||||
}
|
||||
m_curves.removeChildObject(nullptr);
|
||||
#else
|
||||
m_curves.deleteAllChildObjects();
|
||||
#endif
|
||||
|
||||
|
||||
// Create all new curves that is missing
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user