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:
jonjenssen
2024-11-21 12:42:13 +01:00
committed by GitHub
parent 065528ffba
commit f716b4e964
5 changed files with 95 additions and 55 deletions

View File

@@ -45,7 +45,6 @@
#include "cvfMath.h"
#include <QCryptographicHash>
#include <QDebug>
#include <QFileInfo>
#include <algorithm>

View File

@@ -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 );
}

View File

@@ -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