Files
ResInsight/ApplicationLibCode/UnitTests/RifEclipseInputFileTools-Test.cpp
T

362 lines
16 KiB
C++
Raw Normal View History

2015-01-09 07:42:49 +01:00
#include "gtest/gtest.h"
#include "RiaTestDataDirectory.h"
2015-01-09 07:42:49 +01:00
#include "RifEclipseInputFileTools.h"
#include "RigEclipseCaseData.h"
#include "RigEquil.h"
2015-01-09 07:42:49 +01:00
#include <QDebug>
#include <QFile>
2015-01-09 07:42:49 +01:00
//--------------------------------------------------------------------------------------------------
2019-03-05 11:43:03 +01:00
///
2015-01-09 07:42:49 +01:00
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, FaultFaces )
2015-01-09 07:42:49 +01:00
{
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "X" << "X+" << "I" << "I+" << "x" << "x+" << "i" << "i+";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::POS_I, faceType );
2015-01-09 07:42:49 +01:00
}
}
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "X-" << "I-" << "x-" << "i-";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::NEG_I, faceType );
2015-01-09 07:42:49 +01:00
}
}
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "Y" << "Y+" << "J" << "J+" << "y" << "y+" << "j" << "j+";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::POS_J, faceType );
2015-01-09 07:42:49 +01:00
}
}
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "Y-" << "J-" << "y-" << "j-";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::NEG_J, faceType );
2015-01-09 07:42:49 +01:00
}
}
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "Z" << "Z+" << "K" << "k+" << "z" << "z+" << "k" << "k+";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::POS_K, faceType );
2015-01-09 07:42:49 +01:00
}
}
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "Z-" << "K-" << "z-" << "k-";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::NEG_K, faceType );
2015-01-09 07:42:49 +01:00
}
}
2017-11-22 07:33:58 +01:00
// Improved parsing handling some special cases
2015-01-09 07:42:49 +01:00
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "Z--" << "z--" << "z/" << " y /";
2017-11-22 07:33:58 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2017-11-22 07:33:58 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_NE( cvf::StructGridInterface::NO_FACE, faceType );
2017-11-22 07:33:58 +01:00
}
}
2019-03-05 11:43:03 +01:00
// Invalid faces
2017-11-22 07:33:58 +01:00
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << "-k-" << " -k " << " +k- ";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::NO_FACE, faceType );
2015-01-09 07:42:49 +01:00
}
}
// Valid cases with whitespace
{
QStringList faceTexts;
2025-04-11 18:34:32 +02:00
faceTexts << " X" << " X+ " << " I " << " i+ ";
2015-01-09 07:42:49 +01:00
cvf::StructGridInterface::FaceEnum faceType;
2024-10-28 13:09:18 +01:00
for ( const QString& text : faceTexts )
2015-01-09 07:42:49 +01:00
{
faceType = RifEclipseInputFileTools::faceEnumFromText( text );
EXPECT_EQ( cvf::StructGridInterface::POS_I, faceType );
2015-01-09 07:42:49 +01:00
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, EquilData )
{
static const QString testDataRootFolder = QString( "%1/ParsingOfDataKeywords/" ).arg( TEST_DATA_DIR );
{
QString fileName = testDataRootFolder + "simulation/MY_CASE.DATA";
QFile data( fileName );
if ( !data.open( QFile::ReadOnly ) )
{
return;
}
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
RifEclipseInputFileTools::parseAndReadPathAliasKeyword( fileName, &pathAliasDefinitions );
const QString keyword( "EQUIL" );
const QString keywordToStopParsing;
const qint64 startPositionInFile = 0;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
EXPECT_EQ( (int)10, keywordContent.size() );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, FaultData )
{
static const QString testDataRootFolder = QString( "%1/ParsingOfDataKeywords/" ).arg( TEST_DATA_DIR );
{
QString fileName = testDataRootFolder + "simulation/MY_CASE.DATA";
QFile data( fileName );
if ( !data.open( QFile::ReadOnly ) )
{
return;
}
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
RifEclipseInputFileTools::parseAndReadPathAliasKeyword( fileName, &pathAliasDefinitions );
const QString keyword( "FAULTS" );
const QString keywordToStopParsing;
const qint64 startPositionInFile = 0;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
2019-03-05 11:43:03 +01:00
2020-02-28 09:59:16 +01:00
EXPECT_EQ( (int)977, keywordContent.size() );
2019-03-05 11:43:03 +01:00
/*
for (const auto& s : keywordContent)
{
qDebug() << s;
}
*/
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, FaultDataPflotran )
{
static const QString testDataRootFolder = QString( "%1/RifEclipseInputFileTools/pflotran" ).arg( TEST_DATA_DIR );
{
QString fileName = testDataRootFolder + "/model/P_FLT_TEST_NO-KH.in";
cvf::Collection<RigFault> faults;
RifEclipseInputFileTools::parsePflotranInputFile( fileName, &faults );
EXPECT_EQ( (size_t)4, faults.size() );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, StopAtKeyword )
{
static const QString testDataRootFolder = QString( "%1/ParsingOfDataKeywords/" ).arg( TEST_DATA_DIR );
QString fileName = testDataRootFolder + "simulation/MY_CASE_2.DATA";
QFile data( fileName );
if ( !data.open( QFile::ReadOnly ) )
{
return;
}
{
const QString keyword( "FAULTS" );
const QString keywordToStopParsing( "EDIT" );
const qint64 startPositionInFile = 0;
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
EXPECT_TRUE( isStopParsingKeywordDetected );
EXPECT_TRUE( keywordContent.isEmpty() );
}
{
const QString keyword( "EQUIL" );
const QString keywordToStopParsing( "SCHEDULE" );
const qint64 startPositionInFile = 0;
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
EXPECT_TRUE( isStopParsingKeywordDetected );
EXPECT_TRUE( keywordContent.isEmpty() );
}
}
2020-03-22 15:26:48 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifEclipseInputFileToolsTest, DISABLED_FindFilesWithVfp )
{
QString fileName = "d:/gitroot-ceesol/ResInsight-regression-test/ModelData/norne/NORNE_ATW2013.DATA";
{
QFile data( fileName );
if ( !data.open( QFile::ReadOnly ) )
{
return;
}
const QString keyword( "VFPPROD" );
const QString keywordToStopParsing;
const qint64 startPositionInFile = 0;
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
2020-03-22 15:26:48 +01:00
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
2020-03-22 15:26:48 +01:00
// EXPECT_TRUE( isStopParsingKeywordDetected );
// EXPECT_TRUE( keywordContent.isEmpty() );
}
{
QFile data( fileName );
if ( !data.open( QFile::ReadOnly ) )
{
return;
}
const QString keyword( "VFPINJ" );
const QString keywordToStopParsing;
const qint64 startPositionInFile = 0;
std::vector<std::pair<QString, QString>> pathAliasDefinitions;
QStringList keywordContent;
std::vector<QString> fileNamesContainingKeyword;
bool isStopParsingKeywordDetected = false;
const QString includeStatementAbsolutePathPrefix;
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively( keyword,
keywordToStopParsing,
pathAliasDefinitions,
includeStatementAbsolutePathPrefix,
2020-03-22 15:26:48 +01:00
data,
startPositionInFile,
keywordContent,
fileNamesContainingKeyword,
isStopParsingKeywordDetected );
2020-03-22 15:26:48 +01:00
// EXPECT_TRUE( isStopParsingKeywordDetected );
// EXPECT_TRUE( keywordContent.isEmpty() );
}
}