#4218 Read units from Eclipse input grids

This commit is contained in:
Gaute Lindkvist
2019-03-22 15:26:03 +01:00
parent ec525e8774
commit 49c66d0a5f
2 changed files with 70 additions and 25 deletions

View File

@@ -79,8 +79,9 @@ bool RifEclipseInputFileTools::openGridFile(const QString& fileName, RigEclipseC
qint64 specgridPos = -1;
qint64 actnumPos = -1;
qint64 mapaxesPos = -1;
qint64 gridunitPos = -1;
findGridKeywordPositions(keywordsAndFilePos, &coordPos, &zcornPos, &specgridPos, &actnumPos, &mapaxesPos);
findGridKeywordPositions(keywordsAndFilePos, &coordPos, &zcornPos, &specgridPos, &actnumPos, &mapaxesPos, &gridunitPos);
if (coordPos < 0 || zcornPos < 0 || specgridPos < 0)
{
@@ -106,6 +107,20 @@ bool RifEclipseInputFileTools::openGridFile(const QString& fileName, RigEclipseC
return false;
}
if (gridunitPos >= 0)
{
QFile gridFile(fileName);
if (gridFile.open(QFile::ReadOnly))
{
RiaEclipseUnitTools::UnitSystem units = readUnitSystem(gridFile, gridunitPos);
if (units != RiaEclipseUnitTools::UNITS_UNKNOWN)
{
eclipseCase->setUnitsType(units);
}
}
}
FILE* gridFilePointer = util_fopen(fileName.toLatin1().data(), "r");
if (!gridFilePointer) return false;
@@ -178,7 +193,7 @@ bool RifEclipseInputFileTools::openGridFile(const QString& fileName, RigEclipseC
int nz = ecl_kw_iget_int(specGridKw, 2);
ecl_grid_type* inputGrid = ecl_grid_alloc_GRDECL_kw(nx, ny, nz, zCornKw, coordKw, actNumKw, mapAxesKw);
progress.setProgress(6);
RifReaderEclipseOutput::transferGeometry(inputGrid, eclipseCase);
@@ -899,37 +914,42 @@ const std::vector<QString>& RifEclipseInputFileTools::invalidPropertyDataKeyword
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifEclipseInputFileTools::findGridKeywordPositions(const std::vector<RifKeywordAndFilePos>& keywordsAndFilePos,
qint64* coordPos,
qint64* zcornPos,
qint64* specgridPos,
qint64* actnumPos,
qint64* mapaxesPos)
void RifEclipseInputFileTools::findGridKeywordPositions(const std::vector< RifKeywordAndFilePos >& keywords,
qint64* coordPos,
qint64* zcornPos,
qint64* specgridPos,
qint64* actnumPos,
qint64* mapaxesPos,
qint64* gridunitPos)
{
CVF_ASSERT(coordPos && zcornPos && specgridPos && actnumPos && mapaxesPos);
CVF_ASSERT(coordPos && zcornPos && specgridPos && actnumPos && mapaxesPos && gridunitPos);
size_t i;
for (i = 0; i < keywordsAndFilePos.size(); i++)
for (i = 0; i < keywords.size(); i++)
{
if (keywordsAndFilePos[i].keyword == "COORD")
if (keywords[i].keyword == "COORD")
{
*coordPos = keywordsAndFilePos[i].filePos;
*coordPos = keywords[i].filePos;
}
else if (keywordsAndFilePos[i].keyword == "ZCORN")
else if (keywords[i].keyword == "ZCORN")
{
*zcornPos = keywordsAndFilePos[i].filePos;
*zcornPos = keywords[i].filePos;
}
else if (keywordsAndFilePos[i].keyword == "SPECGRID")
else if (keywords[i].keyword == "SPECGRID")
{
*specgridPos = keywordsAndFilePos[i].filePos;
*specgridPos = keywords[i].filePos;
}
else if (keywordsAndFilePos[i].keyword == "ACTNUM")
else if (keywords[i].keyword == "ACTNUM")
{
*actnumPos = keywordsAndFilePos[i].filePos;
*actnumPos = keywords[i].filePos;
}
else if (keywordsAndFilePos[i].keyword == "MAPAXES")
else if (keywords[i].keyword == "MAPAXES")
{
*mapaxesPos = keywordsAndFilePos[i].filePos;
*mapaxesPos = keywords[i].filePos;
}
else if (keywords[i].keyword == "GRIDUNIT")
{
*gridunitPos = keywords[i].filePos;
}
}
}
@@ -1440,6 +1460,32 @@ void RifEclipseInputFileTools::readKeywordDataContent(QFile& data,
} while (!data.atEnd());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaEclipseUnitTools::UnitSystem RifEclipseInputFileTools::readUnitSystem(QFile& file, qint64 gridunitPos)
{
bool stopParsing = false;
QStringList unitText;
readKeywordDataContent(file, gridunitPos, &unitText, &stopParsing);
for (QString unitString : unitText)
{
if (unitString.contains("FEET", Qt::CaseInsensitive))
{
return RiaEclipseUnitTools::UNITS_FIELD;
}
else if (unitString.contains("CM", Qt::CaseInsensitive))
{
return RiaEclipseUnitTools::UNITS_LAB;
}
else if (unitString.contains("MET", Qt::CaseInsensitive))
{
return RiaEclipseUnitTools::UNITS_METRIC;
}
}
return RiaEclipseUnitTools::UNITS_UNKNOWN;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------