From d1dbb897575bdefc632dbd44389db724e7735720 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 30 Aug 2017 07:11:09 +0200 Subject: [PATCH] #1831 SourSimRL: Missing hour minute information from HDF file Read days as a double value, multiply by seconds in a day and use addSeconds to get corret time (including seconds) from HDF --- .../FileInterface/RifHdf5Reader.cpp | 8 +++++--- .../FileInterface/RifReaderEclipseOutput.cpp | 18 ++++++++++++------ .../FileInterface/RifReaderEclipseOutput.h | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ApplicationCode/FileInterface/RifHdf5Reader.cpp b/ApplicationCode/FileInterface/RifHdf5Reader.cpp index c26641f790..077ead9baf 100644 --- a/ApplicationCode/FileInterface/RifHdf5Reader.cpp +++ b/ApplicationCode/FileInterface/RifHdf5Reader.cpp @@ -117,9 +117,10 @@ std::vector RifHdf5Reader::timeSteps() const std::string dateString = getStringAttribute(mainFile, "/KaseStudy/TransientSections", "initial_date"); - QDateTime dtInitial = sourSimDateTimeToQDateTime(dateString); + int secondsPerDay = 60 * 60 * 24; + for (size_t i = 0; i < m_timeStepFileNames.size(); i++) { std::string fileName = m_timeStepFileNames[i]; @@ -128,11 +129,12 @@ std::vector RifHdf5Reader::timeSteps() const H5::H5File file(fileName.c_str(), H5F_ACC_RDONLY); double timeStepValue = getDoubleAttribute(file, timeStepGroup, "timestep"); // Assumes only one time step per file - int timeStepDays = cvf::Math::floor(timeStepValue); // NB: open question: unit of SourSimRL time step values, days? + int seconds = timeStepValue * secondsPerDay; QDateTime dt = dtInitial; + dt = dt.addSecs(seconds); - times.push_back(dt.addDays(timeStepDays)); // NB: open question: unit of SourSimRL time step values, days? + times.push_back(dt); } } diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp index e1353ec5a9..106b9e68c8 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp @@ -499,14 +499,14 @@ void RifReaderEclipseOutput::setHdf5FileName(const QString& fileName) for (size_t i = 0; i < timeStepInfos.size(); i++) { size_t indexOnFile = timeStepIndexOnFile(i); - QString dateStr("yyyy.MMM.ddd hh:mm"); + QString dateStr("yyyy.MMM.ddd hh:mm:ss"); if (!isEclipseAndSoursimTimeStepsEqual(hdfTimeSteps[indexOnFile], timeStepInfos[i].m_date)) { RiaLogging::error("HDF: Time steps does not match"); RiaLogging::error(QString("HDF: Eclipse date %1").arg(timeStepInfos[i].m_date.toString(dateStr))); - RiaLogging::error(QString("HDF: HDF date %1").arg(hdfTimeSteps[i].toString(dateStr))); + RiaLogging::error(QString("HDF: HDF date %1").arg(hdfTimeSteps[indexOnFile].toString(dateStr))); isTimeStampsEqual = false; } @@ -1973,12 +1973,18 @@ std::vector RifReaderEclipseOutput::createFilteredTimeSt //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifReaderEclipseOutput::isEclipseAndSoursimTimeStepsEqual(const QDateTime& dt1, const QDateTime& dt2) +bool RifReaderEclipseOutput::isEclipseAndSoursimTimeStepsEqual(const QDateTime& eclipseDateTime, const QDateTime& sourSimDateTime) { - // Currently, HDF files do not contain hours and minutes - // Only compare date, and skip hour/minutes + // Compare date down to and including seconds + // Compare of complete date time objects will often result in differences - return dt1.date() == dt2.date(); + if (eclipseDateTime.date() != sourSimDateTime.date()) return false; + + if (eclipseDateTime.time().hour() != sourSimDateTime.time().hour()) return false; + if (eclipseDateTime.time().minute() != sourSimDateTime.time().minute()) return false; + if (eclipseDateTime.time().second() != sourSimDateTime.time().second()) return false; + + return true; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.h b/ApplicationCode/FileInterface/RifReaderEclipseOutput.h index 54bc0155a8..79241c014a 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.h +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.h @@ -91,7 +91,7 @@ private: std::vector createFilteredTimeStepInfos(); - static bool isEclipseAndSoursimTimeStepsEqual(const QDateTime& dt1, const QDateTime& dt2); + static bool isEclipseAndSoursimTimeStepsEqual(const QDateTime& eclipseDateTime, const QDateTime& sourSimDateTime); private: QString m_fileName; // Name of file used to start accessing Eclipse output files