#1941 Observed Data : Add RiaDateTimeTools

This commit is contained in:
Magne Sjaastad 2017-09-28 08:04:27 +02:00
parent 00ef13094a
commit 9364efa4b7
6 changed files with 108 additions and 41 deletions

View File

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

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RiaDateTimeTools.h"
#include <ctime>
#include <QString>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
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);
}

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <qglobal.h>
#include <string>
//==================================================================================================
//
//==================================================================================================
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:
};

View File

@ -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<time_t>& timeSteps = m_timeSteps.back();
{
for (auto v : ci.values)

View File

@ -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<time_t> ts;
for (const auto& year : m_parser->keywordBasedVectors()[i].values)
{
std::vector<time_t> 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<QString, QString>&
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;
}

View File

@ -56,8 +56,6 @@ private:
static bool isVectorHeader(const std::map<QString, QString>& header);
static QString valueForKey(const std::map<QString, QString>& header, const QString& key);
static double secondsSinceEpochForYear(double year);
private:
std::unique_ptr<RifKeywordVectorParser> m_parser;