#4143 First implementation of export sector model

This commit is contained in:
Gaute Lindkvist
2019-03-18 12:52:01 +01:00
parent 136f13e145
commit f09f487635
19 changed files with 1060 additions and 147 deletions

View File

@@ -1,3 +1,4 @@
// Test data directory used by unit tests
#define TEST_DATA_DIR "${CMAKE_CURRENT_LIST_DIR}/TestData"
#define TEST_MODEL_DIR "${CMAKE_CURRENT_LIST_DIR}/../../TestModels"

View File

@@ -25,27 +25,91 @@
#include <ert/ecl/ecl_file.h>
#include "ert/ecl/ecl_kw_magic.h"
#include "RiaStringEncodingTools.h"
#include "RiaTestDataDirectory.h"
#include "RifReaderEclipseOutput.h"
#include "RifEclipseOutputFileTools.h"
#include "RigEclipseCaseData.h"
#include "RigCaseCellResultsData.h"
#include "RifEclipseUnifiedRestartFileAccess.h"
#include "RifReaderSettings.h"
#include "RimEclipseResultCase.h"
#include <QDebug>
#include <QDir>
#include <memory>
using namespace RiaDefines;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RigReservoirTest, BasicTest)
TEST(RigReservoirTest, BasicTest10k)
{
QDir baseFolder(TEST_MODEL_DIR);
bool subFolderExists = baseFolder.cd("TEST10K_FLT_LGR_NNC");
EXPECT_TRUE(subFolderExists);
QString filename("TEST10K_FLT_LGR_NNC.EGRID");
QString filePath = baseFolder.absoluteFilePath(filename);
EXPECT_TRUE(QFile::exists(filePath));
std::unique_ptr<RimEclipseResultCase> resultCase(new RimEclipseResultCase);
cvf::ref<RigEclipseCaseData> reservoir = new RigEclipseCaseData(resultCase.get());
{
RigCaseCellResultsData* cellData = reservoir->results(MATRIX_MODEL);
QStringList staticResults = cellData->resultNames(STATIC_NATIVE);
EXPECT_EQ(0, staticResults.size());
//qDebug() << "Static results\n" << staticResults;
QStringList dynamicResults = cellData->resultNames(DYNAMIC_NATIVE);
EXPECT_EQ(0, dynamicResults.size());
//qDebug() << "Dynamic results\n" << dynamicResults;
int numTimeSteps = static_cast<int>(cellData->maxTimeStepCount());
EXPECT_EQ(0, numTimeSteps);
}
{
cvf::ref<RifReaderEclipseOutput> readerInterfaceEcl = new RifReaderEclipseOutput;
bool result = readerInterfaceEcl->open(filePath, reservoir.p());
EXPECT_TRUE(result);
int numTimeSteps = static_cast<int>(readerInterfaceEcl->allTimeSteps().size());
EXPECT_EQ(9, numTimeSteps);
}
{
RigCaseCellResultsData* cellData = reservoir->results(MATRIX_MODEL);
QStringList staticResults = cellData->resultNames(STATIC_NATIVE);
EXPECT_EQ(44, staticResults.size());
//qDebug() << "Static results\n" << staticResults;
QStringList dynamicResults = cellData->resultNames(DYNAMIC_NATIVE);
EXPECT_EQ(23, dynamicResults.size());
//qDebug() << "Dynamic results\n" << dynamicResults;
int numTimeSteps = static_cast<int>(cellData->maxTimeStepCount());
EXPECT_EQ(9, numTimeSteps);
}
}
TEST(RigReservoirTest, BasicTest10kRestart)
{
RifEclipseUnifiedRestartFileAccess unrstAccess;
/*
QStringList filenames;
//filenames << "d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST";
filenames << "d:/Models/MRST/simple/SIMPLE.UNRST";
QDir baseFolder(TEST_MODEL_DIR);
bool subFolderExists = baseFolder.cd("TEST10K_FLT_LGR_NNC");
EXPECT_TRUE(subFolderExists);
QString filename("TEST10K_FLT_LGR_NNC.UNRST");
QString filePath = baseFolder.absoluteFilePath(filename);
EXPECT_TRUE(QFile::exists(filePath));
QStringList filenames;
filenames << filePath;
unrstAccess.setRestartFiles(filenames);
@@ -54,70 +118,98 @@ TEST(RigReservoirTest, BasicTest)
unrstAccess.resultNames(&resultNames, &dataItemCount);
for (size_t i = 0; i < resultNames.size(); i++)
EXPECT_EQ(resultNames.size(), dataItemCount.size());
EXPECT_EQ(83, resultNames.size());
/* for (int i = 0; i < resultNames.size(); i++)
{
qDebug() << resultNames[i] << "\t" << dataItemCount[i];
}
} */
auto reportNums = unrstAccess.reportNumbers();
for (auto reportNum : reportNums)
EXPECT_EQ((size_t) 9, reportNums.size());
/* for (auto reportNum : reportNums)
{
qDebug() << reportNum;
}
*/
} */
}
/*
cvf::ref<RifReaderEclipseOutput> readerInterfaceEcl = new RifReaderEclipseOutput;
cvf::ref<RigCaseData> reservoir = new RigCaseData;
// Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells
#ifdef WIN32
TEST(RigReservoirTest, BasicTest10k_NativeECL)
{
QDir baseFolder(TEST_MODEL_DIR);
bool subFolderExists = baseFolder.cd("TEST10K_FLT_LGR_NNC");
EXPECT_TRUE(subFolderExists);
QString filename("TEST10K_FLT_LGR_NNC.EGRID");
#else
QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID");
QString filePath = baseFolder.absoluteFilePath(filename);
EXPECT_TRUE(QFile::exists(filePath));
ecl_grid_type* grid = ecl_grid_alloc(RiaStringEncodingTools::toNativeEncoded(filePath).data());
EXPECT_TRUE(grid);
QString subDir("RifReaderEclipseOutput");
QDir dataDir(TEST_DATA_DIR);
dataDir.mkdir(subDir);
dataDir.cd(subDir);
QString outFilePath = dataDir.absoluteFilePath("TEST10K_FLT_LGR_NNC_OUT.GRDECL");
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning(disable : 4996)
#endif
FILE* filePtr = fopen(RiaStringEncodingTools::toNativeEncoded(outFilePath).data(), "w");
EXPECT_TRUE(filePtr != nullptr);
ecl_grid_fprintf_grdecl(grid, filePtr);
fclose(filePtr);
EXPECT_TRUE(QFile::exists(outFilePath));
bool result = readerInterfaceEcl->open(filename, reservoir.p());
EXPECT_TRUE(result);
{
QStringList staticResults = readerInterfaceEcl->staticResults();
EXPECT_EQ(42, staticResults.size());
qDebug() << "Static results\n" << staticResults;
QStringList dynamicResults = readerInterfaceEcl->dynamicResults();
EXPECT_EQ(23, dynamicResults.size());
qDebug() << "Dynamic results\n" << dynamicResults;
int numTimeSteps = static_cast<int>(readerInterfaceEcl->numTimeSteps());
EXPECT_EQ(9, numTimeSteps);
QStringList timeStepText = readerInterfaceEcl->timeStepText();
EXPECT_EQ(numTimeSteps, timeStepText.size());
qDebug() << "Time step texts\n" << timeStepText;
}
readerInterfaceEcl->close();
{
QStringList staticResults = readerInterfaceEcl->staticResults();
EXPECT_EQ(0, staticResults.size());
QStringList dynamicResults = readerInterfaceEcl->dynamicResults();
EXPECT_EQ(0, dynamicResults.size());
int numTimeSteps = static_cast<int>(readerInterfaceEcl->numTimeSteps());
EXPECT_EQ(0, numTimeSteps);
QStringList timeStepText = readerInterfaceEcl->timeStepText();
EXPECT_EQ(numTimeSteps, timeStepText.size());
}
*/
QString expectedMd5("\xE9\x93\xB8Q@V\x8F\x13\xF4\xC3\x84\x96\x04p\n\x0F");
QByteArray generatedMd5 = RifEclipseOutputFileTools::md5sum(outFilePath);
EXPECT_TRUE(generatedMd5 == expectedMd5);
#ifdef _MSC_VER
#pragma warning(pop)
#endif
}
TEST(RigReservoirTest, Test10k_ReadThenWriteToECL)
{
QDir baseFolder(TEST_MODEL_DIR);
bool subFolderExists = baseFolder.cd("TEST10K_FLT_LGR_NNC");
EXPECT_TRUE(subFolderExists);
QString filename("TEST10K_FLT_LGR_NNC.EGRID");
QString filePath = baseFolder.absoluteFilePath(filename);
EXPECT_TRUE(QFile::exists(filePath));
std::unique_ptr<RimEclipseResultCase> resultCase(new RimEclipseResultCase);
resultCase->setGridFileName(filePath);
resultCase->importGridAndResultMetaData(false);
QString subDir("RifReaderEclipseOutput");
QDir dataDir(TEST_DATA_DIR);
dataDir.mkdir(subDir);
dataDir.cd(subDir);
QString outFilePath = dataDir.absoluteFilePath("TEST10K_FLT_LGR_NNC_OUT_FROM_RES.GRDECL");
bool worked = RifReaderEclipseOutput::saveEclipseGrid(outFilePath, resultCase->eclipseCaseData());
EXPECT_TRUE(worked);
EXPECT_TRUE(QFile::exists(outFilePath));
QString dataFilePath = dataDir.absoluteFilePath("TEST10K_FLT_LGR_NNC_OUT_FROM_RES.VARS");
QStringList allStaticResults = resultCase->eclipseCaseData()->results(MATRIX_MODEL)->resultNames(RiaDefines::STATIC_NATIVE);
std::vector<QString> keywords;
for (QString keyword : allStaticResults)
{
keywords.push_back(keyword);
}
worked = RifReaderEclipseOutput::saveEclipseResults(dataFilePath, resultCase->eclipseCaseData(), keywords);
EXPECT_TRUE(worked);
EXPECT_TRUE(QFile::exists(dataFilePath));
}
#if 0

View File

@@ -0,0 +1,2 @@
RifReaderEclipseOutput/TEST10K_FLT_LGR_NNC_OUT.GRDECL
RifReaderEclipseOutput/TEST10K_FLT_LGR_NNC_OUT_FROM_RES.GRDECL