mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 15:10:22 -05:00
Improve radial grid import
* Remove unused includes * Use designated initializers struct members * Add warning for active cell opm grid reader * Moves radial grid import to file readers * Adapts cell range filter labels for radial grids
This commit is contained in:
1 parent
d56722782a
commit
b07e49258e
28 files changed
+234
-132
No files matched your search
@@ -24,7 +24,6 @@
|
||||
#include "cvfObject.h"
|
||||
|
||||
#include "RiaDefines.h"
|
||||
#include "RifReaderInterface.h"
|
||||
#include "RigFault.h"
|
||||
|
||||
#include "ert/ecl/ecl_kw.h"
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include "ert/ecl_well/well_info.hpp"
|
||||
|
||||
#include "RifEclipseReportKeywords.h"
|
||||
#include "RifReaderInterface.h"
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RifReaderInterface.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class RifEclipseKeywordContent;
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@ bool RifEclipseUnifiedRestartFileAccess::openFile()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifEclipseUnifiedRestartFileAccess::useResultIndexFile() const
|
||||
{
|
||||
// Refactoring note: Consider using RifReaderSettings instead of RiaPreferencesGrid directly
|
||||
RiaPreferencesGrid* prefs = RiaPreferencesGrid::current();
|
||||
return prefs->useResultIndexFile();
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "RifEclipseRestartDataAccess.h"
|
||||
#include "RifEdfmTools.h"
|
||||
#include "RifHdf5ReaderInterface.h"
|
||||
#include "RifOpmRadialGridTools.h"
|
||||
#include "RifReaderEclipseWell.h"
|
||||
|
||||
#ifdef USE_HDF5
|
||||
@@ -427,6 +428,33 @@ bool RifReaderEclipseOutput::open( const QString& fileName, RigEclipseCaseData*
|
||||
buildMetaData( mainEclGrid );
|
||||
}
|
||||
|
||||
if ( readerSettings().useCylindricalCoordinates )
|
||||
{
|
||||
// Check if min J coordinate is close to 0.0 and max is close to 360. This is a workaround for import of simulation cases that
|
||||
// has an invalid header and is not possible to import using opm-common
|
||||
RigMainGrid* mainGrid = eclipseCaseData->mainGrid();
|
||||
|
||||
if ( !mainGrid->boundingBox().isValid() )
|
||||
{
|
||||
mainGrid->computeBoundingBox();
|
||||
}
|
||||
|
||||
auto bb = mainGrid->boundingBox();
|
||||
const double epsilon = 1.0;
|
||||
if ( bb.isValid() && ( std::abs( bb.min().y() ) < epsilon ) && ( std::abs( bb.max().y() - 360.0 ) < epsilon ) )
|
||||
{
|
||||
m_isRadialGrid = true;
|
||||
|
||||
size_t minimumAngularCellCount = static_cast<size_t>( readerSettings().minimumAngularCellCount );
|
||||
if ( mainGrid->cellCountJ() < minimumAngularCellCount )
|
||||
{
|
||||
auto angularRefinement = ( minimumAngularCellCount / mainGrid->cellCountJ() ) + 1;
|
||||
|
||||
RifOpmRadialGridTools::createAngularGridRefinement( eclipseCaseData, angularRefinement );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto task = progress.task( "Handling NCC data", 20 );
|
||||
if ( isNNCsEnabled() )
|
||||
@@ -1120,6 +1148,14 @@ void RifReaderEclipseOutput::updateFromGridCount( size_t gridCount )
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifReaderEclipseOutput::isRadialGrid() const
|
||||
{
|
||||
return m_isRadialGrid;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -88,6 +88,8 @@ public:
|
||||
|
||||
void updateFromGridCount( size_t gridCount ) override;
|
||||
|
||||
bool isRadialGrid() const override;
|
||||
|
||||
private:
|
||||
bool readActiveCellInfo();
|
||||
|
||||
@@ -124,4 +126,5 @@ private:
|
||||
mutable cvf::ref<RifEclipseRestartDataAccess> m_dynamicResultsAccess; // File access to dynamic results
|
||||
|
||||
std::unique_ptr<RifHdf5ReaderInterface> m_hdfReaderInterface;
|
||||
bool m_isRadialGrid = false;
|
||||
};
|
||||
@@ -113,6 +113,14 @@ std::set<RiaDefines::PhaseType> RifReaderInterface::availablePhases() const
|
||||
return std::set<RiaDefines::PhaseType>();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifReaderInterface::isRadialGrid() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -199,3 +207,11 @@ void RifReaderInterface::importFaults( const QStringList& fileSet, cvf::Collecti
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifReaderSettings RifReaderInterface::readerSettings() const
|
||||
{
|
||||
return m_readerSettings;
|
||||
}
|
||||
@@ -79,10 +79,13 @@ public:
|
||||
|
||||
virtual void updateFromGridCount( size_t gridCount ) {};
|
||||
|
||||
virtual bool isRadialGrid() const;
|
||||
|
||||
protected:
|
||||
bool isTimeStepIncludedByFilter( size_t timeStepIndex ) const;
|
||||
size_t timeStepIndexOnFile( size_t timeStepIndex ) const;
|
||||
void importFaults( const QStringList& fileSet, cvf::Collection<RigFault>* faults );
|
||||
bool isTimeStepIncludedByFilter( size_t timeStepIndex ) const;
|
||||
size_t timeStepIndexOnFile( size_t timeStepIndex ) const;
|
||||
void importFaults( const QStringList& fileSet, cvf::Collection<RigFault>* faults );
|
||||
RifReaderSettings readerSettings() const;
|
||||
|
||||
private:
|
||||
std::vector<QString> m_filenamesWithFaults;
|
||||
|
||||
@@ -118,6 +118,16 @@ bool RifReaderOpmCommon::open( const QString& fileName, RigEclipseCaseData* ecli
|
||||
buildMetaData( eclipseCaseData, progress );
|
||||
}
|
||||
|
||||
if ( readerSettings().useCylindricalCoordinates && m_radialGridDetected )
|
||||
{
|
||||
auto task = progress.task( "Check for Radial Grid", 25 );
|
||||
bool isLgrCreated = RifOpmRadialGridTools::importCylindricalCoordinates( fileName.toStdString(), m_eclipseCaseData );
|
||||
if ( isLgrCreated )
|
||||
{
|
||||
m_eclipseCaseData->clearWellCellsInGridCache();
|
||||
}
|
||||
}
|
||||
|
||||
if ( isNNCsEnabled() )
|
||||
{
|
||||
auto task = progress.task( "Handling NCC Result data", 25 );
|
||||
@@ -158,6 +168,8 @@ bool RifReaderOpmCommon::importGrid( RigMainGrid* mainGrid, RigEclipseCaseData*
|
||||
|
||||
Opm::EclIO::EGrid opmGrid( m_gridFileName );
|
||||
|
||||
m_radialGridDetected = opmGrid.is_radial();
|
||||
|
||||
const auto& dims = opmGrid.dimension();
|
||||
mainGrid->setCellCounts( cvf::Vec3st( dims[0], dims[1], dims[2] ) );
|
||||
mainGrid->setGridName( "Main grid" );
|
||||
@@ -1048,6 +1060,14 @@ std::vector<QDateTime> RifReaderOpmCommon::timeStepsOnFile( QString gridFileName
|
||||
return dateTimes;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifReaderOpmCommon::isRadialGrid() const
|
||||
{
|
||||
return m_radialGridDetected;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -61,6 +61,8 @@ public:
|
||||
|
||||
std::vector<QDateTime> timeStepsOnFile( QString gridFileName );
|
||||
|
||||
bool isRadialGrid() const override;
|
||||
|
||||
protected:
|
||||
virtual bool importGrid( RigMainGrid* mainGrid, RigEclipseCaseData* caseData );
|
||||
|
||||
@@ -123,4 +125,5 @@ private:
|
||||
std::string m_restartFileName;
|
||||
std::unique_ptr<Opm::EclIO::ERst> m_restartFile;
|
||||
std::unique_ptr<Opm::EclIO::EInit> m_initFile;
|
||||
bool m_radialGridDetected = false;
|
||||
};
|
||||
@@ -62,6 +62,15 @@ bool RifReaderOpmCommonActive::importGrid( RigMainGrid* /* mainGrid*/, RigEclips
|
||||
|
||||
Opm::EclIO::EGrid opmGrid( m_gridFileName );
|
||||
|
||||
if ( opmGrid.is_radial() )
|
||||
{
|
||||
QString txt = QString( "Radial grid detected in file '%1'. This grid reader (opm-common with only active cells) does not support "
|
||||
"radial grids. Adjust grid reader in Preferences. The grid is imported as estimated Cartesian grid." )
|
||||
.arg( QString::fromStdString( m_gridFileName ) );
|
||||
|
||||
RiaLogging::warning( txt );
|
||||
}
|
||||
|
||||
const auto& dims = opmGrid.dimension();
|
||||
activeGrid->setCellCounts( cvf::Vec3st( dims[0], dims[1], dims[2] ) );
|
||||
activeGrid->setGridName( "Main grid" );
|
||||
|
||||
@@ -27,14 +27,15 @@
|
||||
//==================================================================================================
|
||||
struct RifReaderSettings
|
||||
{
|
||||
bool importFaults;
|
||||
bool importNNCs;
|
||||
bool includeInactiveCellsInFaultGeometry;
|
||||
bool importAdvancedMswData;
|
||||
bool useResultIndexFile;
|
||||
bool skipWellData;
|
||||
bool importSummaryData;
|
||||
QString includeFileAbsolutePathPrefix;
|
||||
bool onlyLoadActiveCells;
|
||||
bool invalidateLongThinCells;
|
||||
bool importFaults = false;
|
||||
bool importNNCs = false;
|
||||
bool includeInactiveCellsInFaultGeometry = false;
|
||||
bool importAdvancedMswData = false;
|
||||
bool skipWellData = true;
|
||||
bool importSummaryData = false;
|
||||
QString includeFileAbsolutePathPrefix = "";
|
||||
bool onlyLoadActiveCells = false;
|
||||
bool invalidateLongThinCells = true;
|
||||
bool useCylindricalCoordinates = false;
|
||||
int minimumAngularCellCount = 20;
|
||||
};
|
||||
Reference in new issue
Block a user