Improved parsing of fault face text strings

See https://github.com/OPM/ResInsight/issues/263
This commit is contained in:
Magne Sjaastad 2015-01-09 07:42:49 +01:00
parent fe84daefc5
commit 053a9c4d78
4 changed files with 129 additions and 9 deletions

View File

@ -55,6 +55,7 @@ source_group( "Headers" FILES ${CODE_HEADER_FILES} )
set( UNIT_TEST_CPP_SOURCES
main.cpp
RifReaderEclipseOutput-Test.cpp
RifEclipseInputFileTools-Test.cpp
Ert-Test.cpp
)

View File

@ -0,0 +1,113 @@
#include "gtest/gtest.h"
#include "RigCaseData.h"
#include "RifEclipseInputFileTools.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RifEclipseInputFileToolsTest, FaultFaces)
{
{
QStringList faceTexts;
faceTexts << "X" << "X+" << "I" << "I+" << "x" << "x+" << "i" << "i+";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::POS_I, faceType);
}
}
{
QStringList faceTexts;
faceTexts << "X-" << "I-" << "x-" << "i-";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::NEG_I, faceType);
}
}
{
QStringList faceTexts;
faceTexts << "Y" << "Y+" << "J" << "J+" << "y" << "y+" << "j" << "j+";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::POS_J, faceType);
}
}
{
QStringList faceTexts;
faceTexts << "Y-" << "J-" << "y-" << "j-";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::NEG_J, faceType);
}
}
{
QStringList faceTexts;
faceTexts << "Z" << "Z+" << "K" << "k+" << "z" << "z+" << "k" << "k+";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::POS_K, faceType);
}
}
{
QStringList faceTexts;
faceTexts << "Z-" << "K-" << "z-" << "k-";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::NEG_K, faceType);
}
}
// Invalid faces
{
QStringList faceTexts;
faceTexts << "Z--" << "z--" << "-k-" << " -k " << " +k- ";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::NO_FACE, faceType);
}
}
// Valid cases with whitespace
{
QStringList faceTexts;
faceTexts << " X" << " X+ " << " I " << " i+ ";
cvf::StructGridInterface::FaceEnum faceType;
for each (QString text in faceTexts)
{
faceType = RifEclipseInputFileTools::faceEnumFromText(text);
EXPECT_EQ(cvf::StructGridInterface::POS_I, faceType);
}
}
}

View File

@ -848,14 +848,20 @@ bool RifEclipseInputFileTools::readFaultsAndParseIncludeStatementsRecursively(QF
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::StructGridInterface::FaceEnum RifEclipseInputFileTools::faceEnumFromText(const QString& faceString)
{
if (faceString == "X" || faceString == "I" ) return cvf::StructGridInterface::POS_I;
if (faceString == "X-" || faceString == "I-") return cvf::StructGridInterface::NEG_I;
if (faceString == "Y" || faceString == "J" ) return cvf::StructGridInterface::POS_J;
if (faceString == "Y-" || faceString == "J-") return cvf::StructGridInterface::NEG_J;
if (faceString == "Z" || faceString == "K" ) return cvf::StructGridInterface::POS_K;
if (faceString == "Z-" || faceString == "K-") return cvf::StructGridInterface::NEG_K;
QString upperCaseText = faceString.toUpper().trimmed();
if (upperCaseText == "X" || upperCaseText == "X+" || upperCaseText == "I" || upperCaseText == "I+") return cvf::StructGridInterface::POS_I;
if (upperCaseText == "Y" || upperCaseText == "Y+" || upperCaseText == "J" || upperCaseText == "J+") return cvf::StructGridInterface::POS_J;
if (upperCaseText == "Z" || upperCaseText == "Z+" || upperCaseText == "K" || upperCaseText == "K+") return cvf::StructGridInterface::POS_K;
if (upperCaseText == "X-" || upperCaseText == "I-") return cvf::StructGridInterface::NEG_I;
if (upperCaseText == "Y-" || upperCaseText == "J-") return cvf::StructGridInterface::NEG_J;
if (upperCaseText == "Z-" || upperCaseText == "K-") return cvf::StructGridInterface::NEG_K;
return cvf::StructGridInterface::NO_FACE;
}
@ -906,7 +912,7 @@ void RifEclipseInputFileTools::readFaults(QFile &data, qint64 filePos, cvf::Coll
// Replace tab with space to be able to split the string using space as splitter
line.replace("\t", " ");
// Replace character ' used to mark start and end of fault name
// Remove character ' used to mark start and end of fault name, possibly also around face definition; 'I+'
line.remove("'");
QStringList entries = line.split(" ", QString::SkipEmptyParts);

View File

@ -76,6 +76,8 @@ public:
static bool readFaultsAndParseIncludeStatementsRecursively(QFile& file, qint64 startPos, cvf::Collection<RigFault>& faults, std::vector<QString>& filenamesWithFaults, bool* isEditKeywordDetected);
static cvf::StructGridInterface::FaceEnum faceEnumFromText(const QString& faceString);
private:
static void writeDataToTextFile(QFile* file, const QString& eclipseKeyWord, const std::vector<double>& resultData);
static void findGridKeywordPositions(const std::vector< RifKeywordAndFilePos >& keywords, qint64* coordPos, qint64* zcornPos, qint64* specgridPos, qint64* actnumPos, qint64* mapaxesPos);
@ -83,6 +85,4 @@ private:
static size_t findFaultByName(const cvf::Collection<RigFault>& faults, const QString& name);
static qint64 findKeyword(const QString& keyword, QFile& file, qint64 startPos);
static cvf::StructGridInterface::FaceEnum faceEnumFromText(const QString& faceString);
};