From 9364efa4b70bbe62e3e7bc382b2f30a225fd711c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 28 Sep 2017 08:04:27 +0200 Subject: [PATCH] #1941 Observed Data : Add RiaDateTimeTools --- .../Application/Tools/CMakeLists_files.cmake | 2 + .../Application/Tools/RiaDateTimeTools.cpp | 50 +++++++++++++++++++ .../Application/Tools/RiaDateTimeTools.h | 42 ++++++++++++++++ .../FileInterface/RifColumnBasedUserData.cpp | 14 +----- .../RifKeywordVectorUserData.cpp | 39 +++++---------- .../FileInterface/RifKeywordVectorUserData.h | 2 - 6 files changed, 108 insertions(+), 41 deletions(-) create mode 100644 ApplicationCode/Application/Tools/RiaDateTimeTools.cpp create mode 100644 ApplicationCode/Application/Tools/RiaDateTimeTools.h diff --git a/ApplicationCode/Application/Tools/CMakeLists_files.cmake b/ApplicationCode/Application/Tools/CMakeLists_files.cmake index 94ea080398..c8e39ff978 100644 --- a/ApplicationCode/Application/Tools/CMakeLists_files.cmake +++ b/ApplicationCode/Application/Tools/CMakeLists_files.cmake @@ -15,6 +15,7 @@ ${CEE_CURRENT_LIST_DIR}RiaLogging.h ${CEE_CURRENT_LIST_DIR}RiaProjectModifier.h ${CEE_CURRENT_LIST_DIR}RiaRegressionTest.h ${CEE_CURRENT_LIST_DIR}RiaImportEclipseCaseTools.h +${CEE_CURRENT_LIST_DIR}RiaDateTimeTools.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -27,6 +28,7 @@ ${CEE_CURRENT_LIST_DIR}RiaLogging.cpp ${CEE_CURRENT_LIST_DIR}RiaProjectModifier.cpp ${CEE_CURRENT_LIST_DIR}RiaRegressionTest.cpp ${CEE_CURRENT_LIST_DIR}RiaImportEclipseCaseTools.cpp +${CEE_CURRENT_LIST_DIR}RiaDateTimeTools.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Application/Tools/RiaDateTimeTools.cpp b/ApplicationCode/Application/Tools/RiaDateTimeTools.cpp new file mode 100644 index 0000000000..ee9f08bf0d --- /dev/null +++ b/ApplicationCode/Application/Tools/RiaDateTimeTools.cpp @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiaDateTimeTools.h" + +#include + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +quint64 RiaDateTimeTools::secondsFromUnit(const std::string& unit) +{ + QString str = QString::fromStdString(unit).trimmed().toUpper(); + + if (str == "DAYS") + { + return RiaDateTimeTools::secondsInDay(); + } + else if (str == "YEARS") + { + return RiaDateTimeTools::secondsInYear(); + } + + return 1; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +time_t RiaDateTimeTools::createFromSecondsSinceEpoch(quint64 secondsSinceEpoch) +{ + return time_t(secondsSinceEpoch); +} diff --git a/ApplicationCode/Application/Tools/RiaDateTimeTools.h b/ApplicationCode/Application/Tools/RiaDateTimeTools.h new file mode 100644 index 0000000000..5970f9baaf --- /dev/null +++ b/ApplicationCode/Application/Tools/RiaDateTimeTools.h @@ -0,0 +1,42 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +#include + +//================================================================================================== +// +//================================================================================================== +class RiaDateTimeTools +{ +public: + static quint64 secondsInMinute() { return 60; } + static quint64 secondsInHour() { return 60 * 60; } + static quint64 secondsInDay() { return 60 * 60 * 24; } + static quint64 secondsInYear() { return 60 * 60 * 24 * 365; } + + static quint64 secondsFromUnit(const std::string& unit); + + static time_t createFromSecondsSinceEpoch(quint64 secondsSinceEpoch); + +private: +}; + diff --git a/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp b/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp index 15c43e9476..c093def06c 100644 --- a/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp +++ b/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp @@ -18,6 +18,7 @@ #include "RifColumnBasedUserData.h" +#include "RiaDateTimeTools.h" #include "RiaLogging.h" #include "RifColumnBasedUserDataParser.h" @@ -89,18 +90,7 @@ bool RifColumnBasedUserData::parse(const QString& data) m_timeSteps.resize(m_timeSteps.size() + 1); - double scaleFactor = 1.0; - - QString unitText = QString::fromStdString(ci.unitName); - if (unitText.compare("DAYS", Qt::CaseInsensitive) == 0) - { - scaleFactor = 60.0 * 60.0 * 24.0; - } - else if (unitText.compare("YEARS", Qt::CaseInsensitive) == 0) - { - scaleFactor = 60.0 * 60.0 * 24.0 * 365.0; - } - + quint64 scaleFactor = RiaDateTimeTools::secondsFromUnit(ci.unitName); std::vector& timeSteps = m_timeSteps.back(); { for (auto v : ci.values) diff --git a/ApplicationCode/FileInterface/RifKeywordVectorUserData.cpp b/ApplicationCode/FileInterface/RifKeywordVectorUserData.cpp index b504d8524f..0e861f1adf 100644 --- a/ApplicationCode/FileInterface/RifKeywordVectorUserData.cpp +++ b/ApplicationCode/FileInterface/RifKeywordVectorUserData.cpp @@ -18,6 +18,7 @@ #include "RifKeywordVectorUserData.h" +#include "RiaDateTimeTools.h" #include "RiaLogging.h" #include "RifEclipseSummaryAddress.h" @@ -93,21 +94,19 @@ bool RifKeywordVectorUserData::parse(const QString& data) if (isTimeHeader(keyValuePairs)) { QString unitText = valueForKey(keyValuePairs, "UNITS"); - if (unitText.compare("YEAR", Qt::CaseInsensitive) == 0) + quint64 scaleFactor = RiaDateTimeTools::secondsFromUnit(unitText.toStdString()); + + std::vector ts; + for (const auto& year : m_parser->keywordBasedVectors()[i].values) { - std::vector ts; - - for (const auto& year : m_parser->keywordBasedVectors()[i].values) - { - ts.push_back(secondsSinceEpochForYear(year)); - } - - m_timeSteps.push_back(ts); - - QString originText = valueForKey(keyValuePairs, "ORIGIN"); - - m_mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1; + ts.push_back(scaleFactor * year); } + + m_timeSteps.push_back(ts); + + QString originText = valueForKey(keyValuePairs, "ORIGIN"); + + m_mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1; } } @@ -238,17 +237,3 @@ QString RifKeywordVectorUserData::valueForKey(const std::map& return ""; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -double RifKeywordVectorUserData::secondsSinceEpochForYear(double year) -{ - static double secondsPerDay = 60.0 * 60.0* 24.0; - static double secondsPerYear = secondsPerDay * 365.0; - - double yearsSinceEphoch = year - 1970.0; - double secondsSinceEpoch = yearsSinceEphoch * secondsPerYear; - - return secondsSinceEpoch; -} - diff --git a/ApplicationCode/FileInterface/RifKeywordVectorUserData.h b/ApplicationCode/FileInterface/RifKeywordVectorUserData.h index 098a1d9f1a..e02e616f48 100644 --- a/ApplicationCode/FileInterface/RifKeywordVectorUserData.h +++ b/ApplicationCode/FileInterface/RifKeywordVectorUserData.h @@ -56,8 +56,6 @@ private: static bool isVectorHeader(const std::map& header); static QString valueForKey(const std::map& header, const QString& key); - static double secondsSinceEpochForYear(double year); - private: std::unique_ptr m_parser;