mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4281 Saturation pressure plots : Delay loading of EQUIL until required
This commit is contained in:
parent
733be4f539
commit
a812190af3
@ -112,16 +112,18 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered(bool isChecked)
|
|||||||
|
|
||||||
caf::PdmObject* objectToSelect = nullptr;
|
caf::PdmObject* objectToSelect = nullptr;
|
||||||
|
|
||||||
if (eclipseResultCase)
|
if (eclipseResultCase && eclipseResultCase->ensureReservoirCaseIsOpen())
|
||||||
{
|
{
|
||||||
eclipseResultCase->ensureReservoirCaseIsOpen();
|
eclipseResultCase->ensureDeckIsParsedForEquilData();
|
||||||
|
|
||||||
|
RigEclipseCaseData* eclipseCaseData = eclipseResultCase->eclipseCaseData();
|
||||||
|
|
||||||
bool requiredInputDataPresent = false;
|
bool requiredInputDataPresent = false;
|
||||||
if (!eclipseResultCase->eclipseCaseData()->equilData().empty())
|
if (!eclipseCaseData->equilData().empty())
|
||||||
{
|
{
|
||||||
if (eclipseResultCase->eclipseCaseData() && eclipseResultCase->eclipseCaseData()->results(RiaDefines::MATRIX_MODEL))
|
if (eclipseCaseData && eclipseCaseData->results(RiaDefines::MATRIX_MODEL))
|
||||||
{
|
{
|
||||||
RigCaseCellResultsData* resultData = eclipseResultCase->eclipseCaseData()->results(RiaDefines::MATRIX_MODEL);
|
RigCaseCellResultsData* resultData = eclipseCaseData->results(RiaDefines::MATRIX_MODEL);
|
||||||
|
|
||||||
if (resultData->hasResultEntry(RigEclipseResultAddress(RiaDefines::DYNAMIC_NATIVE, "PRESSURE")) &&
|
if (resultData->hasResultEntry(RigEclipseResultAddress(RiaDefines::DYNAMIC_NATIVE, "PRESSURE")) &&
|
||||||
resultData->hasResultEntry(RigEclipseResultAddress(RiaDefines::DYNAMIC_NATIVE, "PDEW")) &&
|
resultData->hasResultEntry(RigEclipseResultAddress(RiaDefines::DYNAMIC_NATIVE, "PDEW")) &&
|
||||||
|
@ -404,7 +404,7 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigEclipseCaseData* e
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto task = progress.task("Reading faults", 5);
|
auto task = progress.task("Reading faults", 10);
|
||||||
|
|
||||||
if (isFaultImportEnabled())
|
if (isFaultImportEnabled())
|
||||||
{
|
{
|
||||||
@ -417,12 +417,6 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigEclipseCaseData* e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
auto task = progress.task("Reading EQUIL", 5);
|
|
||||||
|
|
||||||
importEquilData(fileSet, eclipseCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_eclipseCase = eclipseCase;
|
m_eclipseCase = eclipseCase;
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -641,51 +635,39 @@ void RifReaderEclipseOutput::importFaults(const QStringList& fileSet, cvf::Colle
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RifReaderEclipseOutput::importEquilData(const QStringList& fileSet, RigEclipseCaseData* eclipseCase)
|
void RifReaderEclipseOutput::importEquilData(const QString& deckFileName,
|
||||||
|
const QString& includeStatementAbsolutePathPrefix,
|
||||||
|
RigEclipseCaseData* eclipseCase)
|
||||||
{
|
{
|
||||||
QString dataFileName;
|
QFile data(deckFileName);
|
||||||
|
if (data.open(QFile::ReadOnly))
|
||||||
for (const QString& fileName : fileSet)
|
|
||||||
{
|
{
|
||||||
if (fileName.endsWith(".DATA"))
|
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;
|
||||||
|
|
||||||
|
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively(keyword,
|
||||||
|
keywordToStopParsing,
|
||||||
|
data,
|
||||||
|
startPositionInFile,
|
||||||
|
pathAliasDefinitions,
|
||||||
|
&keywordContent,
|
||||||
|
&fileNamesContainingKeyword,
|
||||||
|
&isStopParsingKeywordDetected,
|
||||||
|
includeStatementAbsolutePathPrefix);
|
||||||
|
std::vector<RigEquil> equilItems;
|
||||||
|
for (const auto& s : keywordContent)
|
||||||
{
|
{
|
||||||
dataFileName = fileName;
|
RigEquil equilRec = RigEquil::parseString(s);
|
||||||
|
|
||||||
|
equilItems.push_back(equilRec);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!dataFileName.isEmpty())
|
eclipseCase->setEquilData(equilItems);
|
||||||
{
|
|
||||||
QFile data(dataFileName);
|
|
||||||
if (data.open(QFile::ReadOnly))
|
|
||||||
{
|
|
||||||
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 = faultIncludeFileAbsolutePathPrefix();
|
|
||||||
|
|
||||||
RifEclipseInputFileTools::readKeywordAndParseIncludeStatementsRecursively(keyword,
|
|
||||||
keywordToStopParsing,
|
|
||||||
data,
|
|
||||||
startPositionInFile,
|
|
||||||
pathAliasDefinitions,
|
|
||||||
&keywordContent,
|
|
||||||
&fileNamesContainingKeyword,
|
|
||||||
&isStopParsingKeywordDetected,
|
|
||||||
includeStatementAbsolutePathPrefix);
|
|
||||||
std::vector<RigEquil> equilItems;
|
|
||||||
for (const auto& s : keywordContent)
|
|
||||||
{
|
|
||||||
RigEquil equilRec = RigEquil::parseString(s);
|
|
||||||
|
|
||||||
equilItems.push_back(equilRec);
|
|
||||||
}
|
|
||||||
|
|
||||||
eclipseCase->setEquilData(equilItems);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +77,10 @@ public:
|
|||||||
|
|
||||||
static void transferCoarseningInfo(const ecl_grid_type* eclGrid, RigGridBase* grid);
|
static void transferCoarseningInfo(const ecl_grid_type* eclGrid, RigGridBase* grid);
|
||||||
|
|
||||||
|
static void importEquilData(const QString& deckFileName,
|
||||||
|
const QString& includeStatementAbsolutePathPrefix,
|
||||||
|
RigEclipseCaseData* eclipseCase);
|
||||||
|
|
||||||
std::set<RiaDefines::PhaseType> availablePhases() const override;
|
std::set<RiaDefines::PhaseType> availablePhases() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -89,7 +93,6 @@ private:
|
|||||||
RigWellResultPoint createWellResultPoint(const RigGridBase* grid, const well_conn_type* ert_connection, int ertBranchId, int ertSegmentId, const char* wellName);
|
RigWellResultPoint createWellResultPoint(const RigGridBase* grid, const well_conn_type* ert_connection, int ertBranchId, int ertSegmentId, const char* wellName);
|
||||||
|
|
||||||
void importFaults(const QStringList& fileSet, cvf::Collection<RigFault>* faults);
|
void importFaults(const QStringList& fileSet, cvf::Collection<RigFault>* faults);
|
||||||
void importEquilData(const QStringList& fileSet, RigEclipseCaseData* eclipseCase);
|
|
||||||
|
|
||||||
void openInitFile();
|
void openInitFile();
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
#include "RimSaturationPressurePlot.h"
|
#include "RimSaturationPressurePlot.h"
|
||||||
|
|
||||||
|
#include "RiaColorTables.h"
|
||||||
|
#include "RiaLogging.h"
|
||||||
|
|
||||||
#include "RigCaseCellResultsData.h"
|
#include "RigCaseCellResultsData.h"
|
||||||
#include "RigEclipseCaseData.h"
|
#include "RigEclipseCaseData.h"
|
||||||
#include "RigEquil.h"
|
#include "RigEquil.h"
|
||||||
@ -29,7 +32,6 @@
|
|||||||
#include "RimPlotAxisProperties.h"
|
#include "RimPlotAxisProperties.h"
|
||||||
|
|
||||||
#include "CellFilters/RimPlotCellPropertyFilter.h"
|
#include "CellFilters/RimPlotCellPropertyFilter.h"
|
||||||
#include "RiaColorTables.h"
|
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(RimSaturationPressurePlot, "RimSaturationPressurePlot");
|
CAF_PDM_SOURCE_INIT(RimSaturationPressurePlot, "RimSaturationPressurePlot");
|
||||||
|
|
||||||
@ -48,6 +50,15 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::Poros
|
|||||||
RimEclipseResultCase* eclipseResultCase,
|
RimEclipseResultCase* eclipseResultCase,
|
||||||
int zeroBasedEquilRegionIndex)
|
int zeroBasedEquilRegionIndex)
|
||||||
{
|
{
|
||||||
|
CVF_ASSERT(eclipseResultCase && eclipseResultCase->eclipseCaseData());
|
||||||
|
|
||||||
|
auto equilData = eclipseResultCase->eclipseCaseData()->equilData();
|
||||||
|
if (zeroBasedEquilRegionIndex >= equilData.size())
|
||||||
|
{
|
||||||
|
RiaLogging::error("Invalid equilibrium region index");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setShowInfoBox(false);
|
setShowInfoBox(false);
|
||||||
nameConfig()->addDataSetNames = false;
|
nameConfig()->addDataSetNames = false;
|
||||||
|
|
||||||
@ -56,8 +67,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::Poros
|
|||||||
|
|
||||||
nameConfig()->setCustomName(plotTitle);
|
nameConfig()->setCustomName(plotTitle);
|
||||||
|
|
||||||
auto equilData = eclipseResultCase->eclipseCaseData()->equilData();
|
auto eq = equilData[zeroBasedEquilRegionIndex];
|
||||||
auto eq = equilData[zeroBasedEquilRegionIndex];
|
|
||||||
|
|
||||||
double gasOilContactDepth = eq.gasOilContactDepth();
|
double gasOilContactDepth = eq.gasOilContactDepth();
|
||||||
double waterOilContactDepth = eq.waterOilContactDepth();
|
double waterOilContactDepth = eq.waterOilContactDepth();
|
||||||
|
@ -74,6 +74,7 @@ std::vector<RimSaturationPressurePlot*>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eclipseResultCase->ensureDeckIsParsedForEquilData();
|
||||||
std::vector<RigEquil> equilData = eclipseCaseData->equilData();
|
std::vector<RigEquil> equilData = eclipseCaseData->equilData();
|
||||||
for (size_t i = 0; i < equilData.size(); i++)
|
for (size_t i = 0; i < equilData.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#include "CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h"
|
#include "CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h"
|
||||||
|
|
||||||
|
#include "RifReaderSettings.h"
|
||||||
|
|
||||||
#include "RigActiveCellInfo.h"
|
#include "RigActiveCellInfo.h"
|
||||||
#include "RigCaseCellResultsData.h"
|
#include "RigCaseCellResultsData.h"
|
||||||
#include "RigEclipseCaseData.h"
|
#include "RigEclipseCaseData.h"
|
||||||
@ -63,6 +65,9 @@
|
|||||||
#include "cafPdmUiTreeOrdering.h"
|
#include "cafPdmUiTreeOrdering.h"
|
||||||
#include "cafProgressInfo.h"
|
#include "cafProgressInfo.h"
|
||||||
|
|
||||||
|
#include "cafUtils.h"
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimEclipseCase, "RimReservoir");
|
CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimEclipseCase, "RimReservoir");
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
@ -154,6 +159,33 @@ const RigEclipseCaseData* RimEclipseCase::eclipseCaseData() const
|
|||||||
return m_rigEclipseCase.p();
|
return m_rigEclipseCase.p();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimEclipseCase::ensureDeckIsParsedForEquilData()
|
||||||
|
{
|
||||||
|
if (m_rigEclipseCase.notNull())
|
||||||
|
{
|
||||||
|
QString includeFileAbsolutePathPrefix;
|
||||||
|
{
|
||||||
|
RiaPreferences* prefs = RiaApplication::instance()->preferences();
|
||||||
|
if (prefs->readerSettings())
|
||||||
|
{
|
||||||
|
includeFileAbsolutePathPrefix = prefs->readerSettings()->faultIncludeFileAbsolutePathPrefix();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString dataDeckFile;
|
||||||
|
{
|
||||||
|
QFileInfo fi(gridFileName());
|
||||||
|
|
||||||
|
dataDeckFile = caf::Utils::constructFullFileName(fi.absolutePath(), fi.baseName(), ".DATA");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_rigEclipseCase->ensureDeckIsParsedForEquilData(dataDeckFile, includeFileAbsolutePathPrefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -75,6 +75,7 @@ public:
|
|||||||
|
|
||||||
RigEclipseCaseData* eclipseCaseData();
|
RigEclipseCaseData* eclipseCaseData();
|
||||||
const RigEclipseCaseData* eclipseCaseData() const;
|
const RigEclipseCaseData* eclipseCaseData() const;
|
||||||
|
void ensureDeckIsParsedForEquilData();
|
||||||
cvf::Color3f defaultWellColor(const QString& wellName);
|
cvf::Color3f defaultWellColor(const QString& wellName);
|
||||||
|
|
||||||
const RigMainGrid* mainGrid() const;
|
const RigMainGrid* mainGrid() const;
|
||||||
|
@ -231,6 +231,8 @@ std::vector<RigEquil> RimPlotAxisAnnotation::equilItems() const
|
|||||||
{
|
{
|
||||||
if (m_sourceCase && m_sourceCase->eclipseCaseData())
|
if (m_sourceCase && m_sourceCase->eclipseCaseData())
|
||||||
{
|
{
|
||||||
|
m_sourceCase->ensureDeckIsParsedForEquilData();
|
||||||
|
|
||||||
return m_sourceCase->eclipseCaseData()->equilData();
|
return m_sourceCase->eclipseCaseData()->equilData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include "RiaApplication.h"
|
#include "RiaApplication.h"
|
||||||
|
|
||||||
|
#include "RifReaderEclipseOutput.h"
|
||||||
|
|
||||||
#include "RigActiveCellInfo.h"
|
#include "RigActiveCellInfo.h"
|
||||||
#include "RigCaseCellResultsData.h"
|
#include "RigCaseCellResultsData.h"
|
||||||
#include "RigEquil.h"
|
#include "RigEquil.h"
|
||||||
@ -44,6 +46,7 @@
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RigEclipseCaseData::RigEclipseCaseData(RimEclipseCase* ownerCase)
|
RigEclipseCaseData::RigEclipseCaseData(RimEclipseCase* ownerCase)
|
||||||
|
: m_hasParsedDeckForEquilData(false)
|
||||||
{
|
{
|
||||||
m_mainGrid = new RigMainGrid();
|
m_mainGrid = new RigMainGrid();
|
||||||
m_ownerCase = ownerCase;
|
m_ownerCase = ownerCase;
|
||||||
@ -550,6 +553,19 @@ const RigVirtualPerforationTransmissibilities* RigEclipseCaseData::virtualPerfor
|
|||||||
return m_virtualPerforationTransmissibilities.p();
|
return m_virtualPerforationTransmissibilities.p();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigEclipseCaseData::ensureDeckIsParsedForEquilData(const QString& dataDeckFile, const QString& includeFileAbsolutePathPrefix)
|
||||||
|
{
|
||||||
|
if (!m_hasParsedDeckForEquilData)
|
||||||
|
{
|
||||||
|
RifReaderEclipseOutput::importEquilData(dataDeckFile, includeFileAbsolutePathPrefix, this);
|
||||||
|
|
||||||
|
m_hasParsedDeckForEquilData = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -751,4 +767,3 @@ const std::vector<double>* RigEclipseCaseData::resultValues(RiaDefines::Porosity
|
|||||||
|
|
||||||
return swatResults;
|
return swatResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,6 +119,7 @@ public:
|
|||||||
|
|
||||||
void clearWellCellsInGridCache() { m_wellCellsInGrid.clear(); }
|
void clearWellCellsInGridCache() { m_wellCellsInGrid.clear(); }
|
||||||
|
|
||||||
|
void ensureDeckIsParsedForEquilData(const QString& dataDeckFile, const QString& includeFileAbsolutePathPrefix);
|
||||||
std::vector<RigEquil> equilData() const;
|
std::vector<RigEquil> equilData() const;
|
||||||
void setEquilData(const std::vector<RigEquil>& equilObjects);
|
void setEquilData(const std::vector<RigEquil>& equilObjects);
|
||||||
|
|
||||||
@ -145,6 +146,7 @@ private:
|
|||||||
|
|
||||||
RiaEclipseUnitTools::UnitSystem m_unitsType;
|
RiaEclipseUnitTools::UnitSystem m_unitsType;
|
||||||
|
|
||||||
|
bool m_hasParsedDeckForEquilData;
|
||||||
std::vector<RigEquil> m_equil;
|
std::vector<RigEquil> m_equil;
|
||||||
|
|
||||||
mutable std::map<std::tuple<QString, bool, bool>, cvf::Collection<RigWellPath>> m_simWellBranchCache;
|
mutable std::map<std::tuple<QString, bool, bool>, cvf::Collection<RigWellPath>> m_simWellBranchCache;
|
||||||
|
Loading…
Reference in New Issue
Block a user