mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-20 11:48:35 -06:00
Improved parsing of fault face text strings
See https://github.com/OPM/ResInsight/issues/263
This commit is contained in:
parent
fe84daefc5
commit
053a9c4d78
@ -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
|
||||
)
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
|
@ -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);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user