Fixed #1229 Handle reading of invalid summary file

This commit is contained in:
Magne Sjaastad 2017-02-16 11:09:21 +01:00
parent f323aa05e4
commit 3b4fec6196
2 changed files with 32 additions and 29 deletions

View File

@ -30,7 +30,7 @@
///
//--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary::RifReaderEclipseSummary()
: ecl_sum(NULL)
: m_ecl_sum(NULL)
{
}
@ -48,7 +48,7 @@ RifReaderEclipseSummary::~RifReaderEclipseSummary()
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseSummary::open(const std::string& headerFileName, const std::vector<std::string>& dataFileNames)
{
assert(ecl_sum == NULL);
assert(m_ecl_sum == NULL);
if (headerFileName.empty() || dataFileNames.size() == 0) return false;
@ -62,20 +62,17 @@ bool RifReaderEclipseSummary::open(const std::string& headerFileName, const std:
}
std::string itemSeparatorInVariableNames = ":";
ecl_sum = ecl_sum_fread_alloc(headerFileName.data(), dataFiles, itemSeparatorInVariableNames.data());
m_ecl_sum = ecl_sum_fread_alloc(headerFileName.data(), dataFiles, itemSeparatorInVariableNames.data());
stringlist_free(dataFiles);
if (ecl_sum)
if (m_ecl_sum)
{
eclSmSpec = ecl_sum_get_smspec(ecl_sum);
assert(eclSmSpec != NULL);
assert(ecl_sum != NULL);
m_ecl_SmSpec = ecl_sum_get_smspec(m_ecl_sum);
for ( int time_index = 0; time_index < timeStepCount(); time_index++ )
{
time_t sim_time = ecl_sum_iget_sim_time(ecl_sum, time_index);
time_t sim_time = ecl_sum_iget_sim_time(m_ecl_sum, time_index);
m_timeSteps.push_back(sim_time);
}
@ -90,10 +87,10 @@ bool RifReaderEclipseSummary::open(const std::string& headerFileName, const std:
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::close()
{
if (ecl_sum)
if (m_ecl_sum)
{
ecl_sum_free(ecl_sum);
ecl_sum = NULL;
ecl_sum_free(m_ecl_sum);
m_ecl_sum = NULL;
}
}
@ -248,7 +245,7 @@ const std::vector<RifEclipseSummaryAddress>& RifReaderEclipseSummary::allResultA
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseSummary::values(const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values)
{
assert(ecl_sum != NULL);
assert(m_ecl_sum != NULL);
int variableIndex = indexFromAddress(resultAddress);
@ -258,14 +255,16 @@ bool RifReaderEclipseSummary::values(const RifEclipseSummaryAddress& resultAddre
int tsCount = timeStepCount();
values->reserve(timeStepCount());
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, variableIndex);
int paramsIndex = smspec_node_get_params_index(ertSumVarNode);
for(int time_index = 0; time_index < tsCount; time_index++)
if (m_ecl_SmSpec)
{
double value = ecl_sum_iget(ecl_sum, time_index, paramsIndex);
values->push_back(value);
const smspec_node_type* ertSumVarNode = ecl_smspec_iget_node(m_ecl_SmSpec, variableIndex);
int paramsIndex = smspec_node_get_params_index(ertSumVarNode);
for(int time_index = 0; time_index < tsCount; time_index++)
{
double value = ecl_sum_iget(m_ecl_sum, time_index, paramsIndex);
values->push_back(value);
}
}
return true;
@ -276,9 +275,11 @@ bool RifReaderEclipseSummary::values(const RifEclipseSummaryAddress& resultAddre
//--------------------------------------------------------------------------------------------------
int RifReaderEclipseSummary::timeStepCount() const
{
assert(ecl_sum != NULL);
assert(m_ecl_sum != nullptr);
return ecl_sum_get_data_length(ecl_sum);
if (m_ecl_SmSpec == nullptr) return 0;
return ecl_sum_get_data_length(m_ecl_sum);
}
//--------------------------------------------------------------------------------------------------
@ -286,7 +287,7 @@ int RifReaderEclipseSummary::timeStepCount() const
//--------------------------------------------------------------------------------------------------
const std::vector<time_t>& RifReaderEclipseSummary::timeSteps() const
{
assert(ecl_sum != NULL);
assert(m_ecl_sum != NULL);
return m_timeSteps;
}
@ -328,12 +329,12 @@ int RifReaderEclipseSummary::indexFromAddress(const RifEclipseSummaryAddress& re
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::buildMetaData()
{
if(m_allResultAddresses.size() == 0)
if(m_allResultAddresses.size() == 0 && m_ecl_SmSpec)
{
int varCount = ecl_smspec_num_nodes(eclSmSpec);
int varCount = ecl_smspec_num_nodes(m_ecl_SmSpec);
for(int i = 0; i < varCount; i++)
{
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, i);
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(m_ecl_SmSpec, i);
RifEclipseSummaryAddress addr = addressFromErtSmSpecNode(ertSumVarNode);
m_allResultAddresses.push_back(addr);
m_resultAddressToErtNodeIdx[addr] = i;
@ -358,11 +359,13 @@ bool RifReaderEclipseSummary::hasAddress(const RifEclipseSummaryAddress& resultA
//--------------------------------------------------------------------------------------------------
std::string RifReaderEclipseSummary::unitName(const RifEclipseSummaryAddress& resultAddress)
{
if (!m_ecl_SmSpec) return "";
int variableIndex = indexFromAddress(resultAddress);
if(variableIndex < 0) return "";
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, variableIndex);
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(m_ecl_SmSpec, variableIndex);
return smspec_node_get_unit(ertSumVarNode);
}

View File

@ -64,8 +64,8 @@ private:
typedef struct ecl_sum_struct ecl_sum_type;
typedef struct ecl_smspec_struct ecl_smspec_type;
ecl_sum_type* ecl_sum;
const ecl_smspec_type * eclSmSpec;
ecl_sum_type* m_ecl_sum;
const ecl_smspec_type * m_ecl_SmSpec;
std::vector<time_t> m_timeSteps;
std::vector<RifEclipseSummaryAddress> m_allResultAddresses;