#2610 Import case realization parameters and store those in summary case

This commit is contained in:
Bjørn Erik Jensen
2018-04-06 11:58:05 +02:00
parent 70f99d8da4
commit f7f09c0719
20 changed files with 520 additions and 294 deletions
@@ -17,6 +17,7 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RifEnsambleParametersReader.h"
#include "RifCaseRealizationParametersReader.h"
#include "RifFileParseTools.h"
#include "RiaLogging.h"
@@ -27,20 +28,12 @@
#include <QDir>
//--------------------------------------------------------------------------------------------------
/// Constants
//--------------------------------------------------------------------------------------------------
#define PARAMETERS_FILE_NAME "parameters.txt"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEnsambleParametersReader::RifEnsambleParametersReader(const QString& fileName)
RifEnsambleParametersReader::RifEnsambleParametersReader(const QString& modelDirectory)
{
m_fileName = fileName;
m_file = nullptr;
m_textStream = nullptr;
m_modelDirectory = modelDirectory;
}
//--------------------------------------------------------------------------------------------------
@@ -48,165 +41,16 @@ RifEnsambleParametersReader::RifEnsambleParametersReader(const QString& fileName
//--------------------------------------------------------------------------------------------------
RifEnsambleParametersReader::~RifEnsambleParametersReader()
{
if (m_textStream)
{
delete m_textStream;
}
closeFile();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifEnsambleParametersReader::parse()
RifEnsambleParametersPtr RifEnsambleParametersReader::import()
{
bool errors = false;
QTextStream* dataStream = openDataStream();
int lineNo = 0;
RifEnsambleParametersPtr parameters;
try
{
while (!dataStream->atEnd() && !errors)
{
QString line = dataStream->readLine();
lineNo++;
QStringList cols = RifFileParseTools::splitLineAndTrim(line, " ");
if (cols.size() != 2)
{
throw FileParseException(QString("RifEnsambleParametersReader: Invalid file format in line %1").arg(lineNo));
}
QString& name = cols[0];
QString& strValue = cols[1];
if (!RiaStdStringTools::isNumber(strValue.toStdString(), QLocale::c().decimalPoint().toAscii()))
{
throw FileParseException(QString("RifEnsambleParametersReader: Invalid number format in line %1").arg(lineNo));
}
bool parseOk = true;
double value = QLocale::c().toDouble(strValue, &parseOk);
if (!parseOk)
{
throw FileParseException(QString("RifEnsambleParametersReader: Invalid number format in line %1").arg(lineNo));
}
m_parameters.addParameter(name, value);
}
closeDataStream();
}
catch (...)
{
closeDataStream();
throw;
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QTextStream* RifEnsambleParametersReader::openDataStream()
{
if (!openFile()) return nullptr;
m_textStream = new QTextStream(m_file);
return m_textStream;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifEnsambleParametersReader::closeDataStream()
{
if (m_textStream)
{
delete m_textStream;
m_textStream = nullptr;
}
closeFile();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifEnsambleParametersReader::openFile()
{
if (!m_file)
{
m_file = new QFile(m_fileName);
if (!m_file->open(QIODevice::ReadOnly | QIODevice::Text))
{
RiaLogging::error(QString("Failed to open %1").arg(m_fileName));
delete m_file;
return false;
}
}
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifEnsambleParametersReader::closeFile()
{
if (m_file)
{
m_file->close();
delete m_file;
m_file = nullptr;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RifEnsambleParameters& RifEnsambleParametersReader::parameters() const
{
return m_parameters;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifEnsambleParameters::addParameter(const QString& name, double value)
{
m_parameters[name] = value;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<QString, double> RifEnsambleParameters::parameters() const
{
return m_parameters;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RifEnsambleParametersFileLocator::locate(const QString& modelPath)
{
int MAX_LEVELS_UP = 2;
int dirLevel = 0;
QDir qdir(modelPath);
do
{
QStringList files = qdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
for (const QString& file : files)
{
if (QString::compare(file, PARAMETERS_FILE_NAME, Qt::CaseInsensitive) == 0)
{
return file;
}
}
} while (dirLevel++ == MAX_LEVELS_UP);
return "";
}