mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge pull request #6428 from OPM/elastic-properties-reader-fixes
Elastic properties reader fixes
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "RimElasticProperties.h"
|
||||
#include "RimFractureModel.h"
|
||||
|
||||
#include "RifCsvUserDataParser.h"
|
||||
#include "RifElasticPropertiesReader.h"
|
||||
#include "RifFileParseTools.h"
|
||||
|
||||
@@ -37,6 +38,9 @@
|
||||
void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QString& filePath,
|
||||
RimFractureModel* fractureModel )
|
||||
{
|
||||
RifCsvUserDataFileParser csvParser( filePath );
|
||||
QString separator = csvParser.tryDetermineCellSeparator();
|
||||
|
||||
typedef std::tuple<QString, QString, QString> FaciesKey;
|
||||
|
||||
// Read the facies properties from file
|
||||
@@ -45,7 +49,7 @@ void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QSt
|
||||
{
|
||||
QStringList filePaths;
|
||||
filePaths << filePath;
|
||||
RifElasticPropertiesReader::readElasticProperties( rifElasticProperties, filePaths );
|
||||
RifElasticPropertiesReader::readElasticProperties( rifElasticProperties, filePaths, separator );
|
||||
}
|
||||
catch ( FileParseException& exception )
|
||||
{
|
||||
|
||||
@@ -27,13 +27,14 @@
|
||||
///
|
||||
//==================================================================================================
|
||||
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||
const QStringList& filePaths )
|
||||
const QStringList& filePaths,
|
||||
const QString& separator )
|
||||
{
|
||||
for ( const QString& filePath : filePaths )
|
||||
{
|
||||
try
|
||||
{
|
||||
readElasticProperties( elasticProperties, filePath );
|
||||
readElasticProperties( elasticProperties, filePath, separator );
|
||||
}
|
||||
catch ( FileParseException& )
|
||||
{
|
||||
@@ -48,7 +49,8 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||
const QString& filePath )
|
||||
const QString& filePath,
|
||||
const QString& separator )
|
||||
{
|
||||
QFile file( filePath );
|
||||
if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
||||
@@ -63,7 +65,7 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
||||
QString line = in.readLine();
|
||||
if ( !isEmptyLine( line ) && !isCommentLine( line ) )
|
||||
{
|
||||
RifElasticProperties faciesProp = parseElasticProperties( line, lineNumber, filePath );
|
||||
RifElasticProperties faciesProp = parseElasticProperties( line, lineNumber, filePath, separator );
|
||||
elasticProperties.push_back( faciesProp );
|
||||
}
|
||||
|
||||
@@ -74,12 +76,16 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifElasticProperties
|
||||
RifElasticPropertiesReader::parseElasticProperties( const QString& line, int lineNumber, const QString& filePath )
|
||||
RifElasticProperties RifElasticPropertiesReader::parseElasticProperties( const QString& line,
|
||||
int lineNumber,
|
||||
const QString& filePath,
|
||||
const QString& separator )
|
||||
{
|
||||
QStringList tokens = tokenize( line, "," );
|
||||
QStringList tokens = tokenize( line, separator );
|
||||
|
||||
if ( tokens.size() != 13 )
|
||||
// Plus one to allow trailing separator
|
||||
const int expectedTokens = 13;
|
||||
if ( !( tokens.size() == expectedTokens || tokens.size() == expectedTokens + 1 ) )
|
||||
{
|
||||
throw FileParseException( QString( "Incomplete data on line %1: %2" ).arg( lineNumber ).arg( filePath ) );
|
||||
}
|
||||
|
||||
@@ -45,11 +45,16 @@ struct RifElasticProperties
|
||||
class RifElasticPropertiesReader
|
||||
{
|
||||
public:
|
||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties, const QStringList& filePaths );
|
||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||
const QStringList& filePaths,
|
||||
const QString& separator = "," );
|
||||
|
||||
private:
|
||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties, const QString& filePath );
|
||||
static RifElasticProperties parseElasticProperties( const QString& line, int lineNumber, const QString& filePath );
|
||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||
const QString& filePath,
|
||||
const QString& separator );
|
||||
static RifElasticProperties
|
||||
parseElasticProperties( const QString& line, int lineNumber, const QString& filePath, const QString& separator );
|
||||
static QStringList tokenize( const QString& line, const QString& separator );
|
||||
static void verifyNonEmptyTokens( const QStringList& tokens,
|
||||
const QStringList& nameOfNonEmptyTokens,
|
||||
|
||||
@@ -77,6 +77,52 @@ TEST( RifElasticPropertiesReaderTest, ReadCorrectInputFile )
|
||||
ASSERT_DOUBLE_EQ( 0.55, elasticProperties[1].immobileFluidSaturation );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RifElasticPropertiesReaderTest, ReadCorrectInputFileWithTrailingSeparator )
|
||||
{
|
||||
QTemporaryFile file;
|
||||
EXPECT_TRUE( file.open() );
|
||||
|
||||
{
|
||||
QTextStream out( &file );
|
||||
out << "Norne,Not,Sand,0.00,25,0.25,2000,0.2,0.3,0.4,0.5,0.6,0.4,\n"
|
||||
<< "Norne,Not,Sand,0.10,19,0.27,2099,0.3,0.4,0.5,0.2,0.5,0.55,\n";
|
||||
}
|
||||
|
||||
QStringList filePaths;
|
||||
filePaths.append( file.fileName() );
|
||||
|
||||
std::vector<RifElasticProperties> elasticProperties;
|
||||
RifElasticPropertiesReader::readElasticProperties( elasticProperties, filePaths );
|
||||
|
||||
ASSERT_EQ( 2u, elasticProperties.size() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RifElasticPropertiesReaderTest, ReadCorrectInputFileWithCustomSeparator )
|
||||
{
|
||||
QTemporaryFile file;
|
||||
EXPECT_TRUE( file.open() );
|
||||
|
||||
{
|
||||
QTextStream out( &file );
|
||||
out << "Norne;Not;Sand;0.00;25;0.25;2000;0.2;0.3;0.4;0.5;0.6;0.4;\n"
|
||||
<< "Norne;Not;Sand;0.10;19;0.27;2099;0.3;0.4;0.5;0.2;0.5;0.55;\n";
|
||||
}
|
||||
|
||||
QStringList filePaths;
|
||||
filePaths.append( file.fileName() );
|
||||
|
||||
std::vector<RifElasticProperties> elasticProperties;
|
||||
RifElasticPropertiesReader::readElasticProperties( elasticProperties, filePaths, ";" );
|
||||
|
||||
ASSERT_EQ( 2u, elasticProperties.size() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Helper to check exception messages when reading invalid files
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user