mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Support multiple timesteps per day using opm_common reader (#11908)
* Fix progress window hiding time step filter dlg * Clean up reader preferences
This commit is contained in:
@@ -89,7 +89,7 @@ RiaPreferencesGrid::RiaPreferencesGrid()
|
||||
CAF_PDM_InitField( &m_loadAndShowSoil, "loadAndShowSoil", true, "Load and Show SOIL" );
|
||||
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_loadAndShowSoil );
|
||||
|
||||
CAF_PDM_InitField( &m_onlyLoadActiveCells, "onlyLoadActiveCells", false, "Only Load Active Cell Geometry (Experimental)" );
|
||||
CAF_PDM_InitField( &m_onlyLoadActiveCells, "onlyLoadActiveCells", false, "Only Load Active Cell Geometry" );
|
||||
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_onlyLoadActiveCells );
|
||||
|
||||
CAF_PDM_InitField( &m_invalidateLongThinCells, "invalidateLongThinCells", false, "Skip Long, Thin Cells" );
|
||||
@@ -128,17 +128,20 @@ void RiaPreferencesGrid::appendItems( caf::PdmUiOrdering& uiOrdering )
|
||||
wellGrp->add( &m_skipWellData );
|
||||
wellGrp->add( &m_importAdvancedMswData );
|
||||
|
||||
auto egridGrp = uiOrdering.addNewGroup( "EGRID Settings" );
|
||||
|
||||
if ( m_gridModelReaderOverride == RiaDefines::GridModelReader::NOT_SET )
|
||||
{
|
||||
auto egridGrp = uiOrdering.addNewGroup( "EGRID Settings" );
|
||||
egridGrp->add( &m_gridModelReader );
|
||||
}
|
||||
|
||||
auto resdataGrp = uiOrdering.addNewGroup( "ResData Reader Settings" );
|
||||
resdataGrp->add( &m_useResultIndexFile );
|
||||
|
||||
auto opmcGrp = uiOrdering.addNewGroup( "OPM Common Reader Settings" );
|
||||
opmcGrp->add( &m_onlyLoadActiveCells );
|
||||
if ( gridModelReader() == RiaDefines::GridModelReader::OPM_COMMON )
|
||||
{
|
||||
egridGrp->add( &m_onlyLoadActiveCells );
|
||||
}
|
||||
if ( gridModelReader() == RiaDefines::GridModelReader::RESDATA )
|
||||
{
|
||||
egridGrp->add( &m_useResultIndexFile );
|
||||
}
|
||||
|
||||
const bool setFaultImportSettingsReadOnly = !importFaults();
|
||||
|
||||
|
@@ -45,7 +45,6 @@
|
||||
#include "cvfMath.h"
|
||||
|
||||
#include <QCryptographicHash>
|
||||
#include <QDebug>
|
||||
#include <QFileInfo>
|
||||
|
||||
#include <algorithm>
|
||||
|
@@ -763,21 +763,54 @@ std::vector<RigEclipseTimeStepInfo> RifReaderOpmCommon::createFilteredTimeStepIn
|
||||
|
||||
auto timeStepsOnFile = readTimeSteps();
|
||||
|
||||
if ( timeStepsOnFile.size() == 0 ) return timeStepInfos;
|
||||
|
||||
auto startDayOffset = timeStepsOnFile[0].simulationTimeFromStart;
|
||||
QDate startDate( timeStepsOnFile[0].year, timeStepsOnFile[0].month, timeStepsOnFile[0].day );
|
||||
|
||||
for ( size_t i = 0; i < timeStepsOnFile.size(); i++ )
|
||||
{
|
||||
if ( isTimeStepIncludedByFilter( i ) )
|
||||
{
|
||||
QDate date( timeStepsOnFile[i].year, timeStepsOnFile[i].month, timeStepsOnFile[i].day );
|
||||
auto datetime = RiaQDateTimeTools::createDateTime( date, Qt::TimeSpec::UTC );
|
||||
auto dateTime = dateTimeFromTimeStepOnFile( timeStepsOnFile[i], startDate, startDayOffset );
|
||||
|
||||
timeStepInfos.push_back(
|
||||
RigEclipseTimeStepInfo( datetime, timeStepsOnFile[i].sequenceNumber, timeStepsOnFile[i].simulationTimeFromStart ) );
|
||||
RigEclipseTimeStepInfo( dateTime, timeStepsOnFile[i].sequenceNumber, timeStepsOnFile[i].simulationTimeFromStart ) );
|
||||
}
|
||||
}
|
||||
|
||||
return timeStepInfos;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QDateTime RifReaderOpmCommon::dateTimeFromTimeStepOnFile( RifReaderOpmCommon::TimeDataFile timeOnFile, QDate startDate, double startDayOffset )
|
||||
{
|
||||
QDateTime dateTime;
|
||||
if ( timeOnFile.simulationTimeFromStart == 0 )
|
||||
{
|
||||
QDate date( timeOnFile.year, timeOnFile.month, timeOnFile.day );
|
||||
dateTime = RiaQDateTimeTools::createDateTime( date, Qt::TimeSpec::UTC );
|
||||
}
|
||||
else
|
||||
{
|
||||
dateTime = RiaQDateTimeTools::createDateTime( startDate, Qt::TimeSpec::UTC );
|
||||
|
||||
double dayDoubleValue = timeOnFile.simulationTimeFromStart;
|
||||
int dayValue = cvf::Math::floor( dayDoubleValue );
|
||||
const int adjustedDayValue = dayValue - startDayOffset;
|
||||
dateTime = dateTime.addDays( adjustedDayValue );
|
||||
|
||||
double dayFraction = dayDoubleValue - dayValue;
|
||||
double milliseconds = dayFraction * 24.0 * 60.0 * 60.0 * 1000.0;
|
||||
|
||||
dateTime = dateTime.addMSecs( milliseconds );
|
||||
}
|
||||
|
||||
return dateTime;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -785,7 +818,6 @@ void RifReaderOpmCommon::buildMetaData( RigEclipseCaseData* eclipseCaseData, caf
|
||||
{
|
||||
setupInitAndRestartAccess();
|
||||
|
||||
std::vector<QDateTime> timeSteps;
|
||||
std::vector<RigEclipseTimeStepInfo> filteredTimeStepInfos;
|
||||
|
||||
RigEclipseTimeStepInfo firstTimeStepInfo{ QDateTime(), 0, 0.0 };
|
||||
@@ -984,14 +1016,15 @@ std::vector<QDateTime> RifReaderOpmCommon::timeStepsOnFile( QString gridFileName
|
||||
|
||||
if ( m_restartFile == nullptr ) return {};
|
||||
|
||||
auto timeStepsFromFile = readTimeSteps();
|
||||
auto timeStepsOnFile = readTimeSteps();
|
||||
auto startDayOffset = timeStepsOnFile[0].simulationTimeFromStart;
|
||||
QDate startDate( timeStepsOnFile[0].year, timeStepsOnFile[0].month, timeStepsOnFile[0].day );
|
||||
|
||||
std::vector<QDateTime> dateTimes;
|
||||
|
||||
for ( const auto& timeStep : timeStepsFromFile )
|
||||
for ( const auto& timeStep : timeStepsOnFile )
|
||||
{
|
||||
QDate date( timeStep.year, timeStep.month, timeStep.day );
|
||||
QDateTime dateTime = RiaQDateTimeTools::createDateTime( date, Qt::UTC );
|
||||
auto dateTime = dateTimeFromTimeStepOnFile( timeStep, startDate, startDayOffset );
|
||||
dateTimes.push_back( dateTime );
|
||||
}
|
||||
|
||||
|
@@ -24,6 +24,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <QDateTime>
|
||||
|
||||
namespace Opm::EclIO
|
||||
{
|
||||
class EInit;
|
||||
@@ -101,6 +103,7 @@ private:
|
||||
};
|
||||
|
||||
std::vector<TimeDataFile> readTimeSteps();
|
||||
QDateTime dateTimeFromTimeStepOnFile( RifReaderOpmCommon::TimeDataFile timeOnFile, QDate startDate, double startDayOffset );
|
||||
|
||||
protected:
|
||||
enum class ActiveType
|
||||
|
@@ -142,11 +142,6 @@ bool RimEclipseResultCase::importGridAndResultMetaData( bool showTimeStepFilter
|
||||
// dialog triggers a redraw with incomplete geometry data and causes a crash
|
||||
if ( m_gridAndWellDataIsReadFromFile ) return true;
|
||||
|
||||
caf::ProgressInfo progInfo( 50, "Reading Eclipse Grid File" );
|
||||
|
||||
progInfo.setProgressDescription( "Open Grid File" );
|
||||
progInfo.setNextProgressIncrement( 48 );
|
||||
|
||||
cvf::ref<RifReaderInterface> readerInterface;
|
||||
|
||||
if ( gridFileName().contains( "Result Mock Debug Model" ) )
|
||||
@@ -213,6 +208,11 @@ bool RimEclipseResultCase::importGridAndResultMetaData( bool showTimeStepFilter
|
||||
readerInterface->setTimeStepFilter( m_timeStepFilter->filteredTimeSteps() );
|
||||
}
|
||||
|
||||
// delay showing progress until we get here, to not have progress show up on top of time step selection
|
||||
caf::ProgressInfo progInfo( 50, "Reading Eclipse Grid File" );
|
||||
progInfo.setProgressDescription( "Open Grid File" );
|
||||
progInfo.setNextProgressIncrement( 48 );
|
||||
|
||||
readerInterface->setFilenamesWithFaults( filesContainingFaults() );
|
||||
readerInterface->setReaderSettings( m_readerSettings );
|
||||
|
||||
@@ -230,41 +230,43 @@ bool RimEclipseResultCase::importGridAndResultMetaData( bool showTimeStepFilter
|
||||
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->setReaderInterface( readerInterface.p() );
|
||||
results( RiaDefines::PorosityModelType::FRACTURE_MODEL )->setReaderInterface( readerInterface.p() );
|
||||
|
||||
progInfo.incrementProgress();
|
||||
|
||||
m_flowDagSolverInterface = new RigFlowDiagSolverInterface( this );
|
||||
|
||||
CVF_ASSERT( eclipseCaseData() );
|
||||
CVF_ASSERT( readerInterface.notNull() );
|
||||
|
||||
progInfo.setProgressDescription( "Computing Case Cache" );
|
||||
computeCachedData();
|
||||
loadAndSynchronizeInputProperties( false );
|
||||
|
||||
m_gridAndWellDataIsReadFromFile = true;
|
||||
m_activeCellInfoIsReadFromFile = true;
|
||||
|
||||
ensureRftDataIsImported();
|
||||
|
||||
if ( m_flowDiagSolutions.empty() )
|
||||
{
|
||||
m_flowDiagSolutions.push_back( new RimFlowDiagSolution() );
|
||||
caf::ProgressInfo progInfo( 50, "Reading Eclipse Grid File", false /*do not delay*/ );
|
||||
progInfo.setNextProgressIncrement( 49 );
|
||||
|
||||
m_flowDagSolverInterface = new RigFlowDiagSolverInterface( this );
|
||||
|
||||
CVF_ASSERT( eclipseCaseData() );
|
||||
CVF_ASSERT( readerInterface.notNull() );
|
||||
|
||||
progInfo.setProgressDescription( "Computing Case Cache" );
|
||||
computeCachedData();
|
||||
loadAndSynchronizeInputProperties( false );
|
||||
|
||||
m_gridAndWellDataIsReadFromFile = true;
|
||||
m_activeCellInfoIsReadFromFile = true;
|
||||
|
||||
ensureRftDataIsImported();
|
||||
|
||||
if ( m_flowDiagSolutions.empty() )
|
||||
{
|
||||
m_flowDiagSolutions.push_back( new RimFlowDiagSolution() );
|
||||
}
|
||||
|
||||
if ( !m_sourSimFileName().path().isEmpty() )
|
||||
{
|
||||
auto* outReader = dynamic_cast<RifReaderEclipseOutput*>( readerInterface.p() );
|
||||
outReader->setHdf5FileName( m_sourSimFileName().path() );
|
||||
}
|
||||
|
||||
if ( RiaPreferencesGrid::current()->autoComputeDepthRelatedProperties() )
|
||||
{
|
||||
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->computeDepthRelatedResults();
|
||||
results( RiaDefines::PorosityModelType::FRACTURE_MODEL )->computeDepthRelatedResults();
|
||||
}
|
||||
|
||||
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->computeCellVolumes();
|
||||
}
|
||||
|
||||
if ( !m_sourSimFileName().path().isEmpty() )
|
||||
{
|
||||
auto* outReader = dynamic_cast<RifReaderEclipseOutput*>( readerInterface.p() );
|
||||
outReader->setHdf5FileName( m_sourSimFileName().path() );
|
||||
}
|
||||
|
||||
if ( RiaPreferencesGrid::current()->autoComputeDepthRelatedProperties() )
|
||||
{
|
||||
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->computeDepthRelatedResults();
|
||||
results( RiaDefines::PorosityModelType::FRACTURE_MODEL )->computeDepthRelatedResults();
|
||||
}
|
||||
|
||||
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->computeCellVolumes();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user