mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Fix for dates before 1970
This commit is contained in:
parent
cff0313519
commit
619b7a211a
@ -26,9 +26,12 @@
|
||||
#include "ecl_grid.h"
|
||||
#include "ecl_rsthead.h"
|
||||
|
||||
#include "cafProgressInfo.h"
|
||||
|
||||
#include <QFileInfo>
|
||||
#include <QDebug>
|
||||
#include "cafProgressInfo.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -46,6 +49,16 @@ RifEclipseOutputFileTools::~RifEclipseOutputFileTools()
|
||||
{
|
||||
}
|
||||
|
||||
void getDayMonthYear(const ecl_kw_type* intehead_kw, int* day, int* month, int* year)
|
||||
{
|
||||
assert(day && month && year);
|
||||
|
||||
*day = ecl_kw_iget_int(intehead_kw, INTEHEAD_DAY_INDEX);
|
||||
*month = ecl_kw_iget_int(intehead_kw, INTEHEAD_MONTH_INDEX);
|
||||
*year = ecl_kw_iget_int(intehead_kw, INTEHEAD_YEAR_INDEX);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Get list of time step texts (dates)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -94,9 +107,12 @@ void RifEclipseOutputFileTools::timeSteps(ecl_file_type* ecl_file, std::vector<Q
|
||||
ecl_kw_type* kwINTEHEAD = ecl_file_iget_named_kw(ecl_file, INTEHEAD_KW, 0);
|
||||
if (kwINTEHEAD)
|
||||
{
|
||||
time_t ertTimeStamp = ecl_rsthead_date(kwINTEHEAD);
|
||||
QDateTime simulationStart = QDateTime::fromTime_t(ertTimeStamp);
|
||||
|
||||
int day = 0;
|
||||
int month = 0;
|
||||
int year = 0;
|
||||
getDayMonthYear(kwINTEHEAD, &day, &month, &year);
|
||||
|
||||
QDateTime simulationStart(QDate(year, month, day));
|
||||
for (int i = 0; i < days.size(); i++)
|
||||
{
|
||||
QDateTime reportDateTime(simulationStart);
|
||||
@ -127,8 +143,15 @@ void RifEclipseOutputFileTools::timeSteps(ecl_file_type* ecl_file, std::vector<Q
|
||||
ecl_kw_type* kwINTEHEAD = ecl_file_iget_named_kw(ecl_file, INTEHEAD_KW, i);
|
||||
if (kwINTEHEAD)
|
||||
{
|
||||
time_t ertTimeStamp = ecl_rsthead_date(kwINTEHEAD);
|
||||
QDateTime reportDateTime = QDateTime::fromTime_t(ertTimeStamp);
|
||||
int day = 0;
|
||||
int month = 0;
|
||||
int year = 0;
|
||||
getDayMonthYear(kwINTEHEAD, &day, &month, &year);
|
||||
|
||||
QDateTime reportDateTime(QDate(year, month, day));
|
||||
QTime time(0, 0);
|
||||
reportDateTime.setTime(time);
|
||||
|
||||
CVF_ASSERT(reportDateTime.isValid());
|
||||
|
||||
if (std::find(timeStepsFound.begin(), timeStepsFound.end(), reportDateTime) == timeStepsFound.end())
|
||||
|
@ -51,6 +51,7 @@ public:
|
||||
virtual void setTimeSteps(const std::vector<QDateTime>& timeSteps) {};
|
||||
virtual size_t timeStepCount() = 0;
|
||||
virtual std::vector<QDateTime> timeSteps() = 0;
|
||||
virtual std::vector<int> reportNumbers() = 0;
|
||||
|
||||
virtual void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts) = 0;
|
||||
virtual bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values) = 0;
|
||||
|
@ -258,3 +258,23 @@ int RifEclipseRestartFilesetAccess::readUnitsType()
|
||||
return RifEclipseOutputFileTools::readUnitsType(ecl_file);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<int> RifEclipseRestartFilesetAccess::reportNumbers()
|
||||
{
|
||||
std::vector<int> reportNr;
|
||||
|
||||
for (size_t i = 0; i < m_ecl_files.size(); i++)
|
||||
{
|
||||
const char* fileName = ecl_file_get_src_file(m_ecl_files[i]);
|
||||
int reportNumber = ecl_util_filename_report_nr(fileName);
|
||||
if (reportNumber != -1)
|
||||
{
|
||||
reportNr.push_back(reportNumber);
|
||||
}
|
||||
}
|
||||
|
||||
return reportNr;
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
void setTimeSteps(const std::vector<QDateTime>& timeSteps);
|
||||
size_t timeStepCount();
|
||||
std::vector<QDateTime> timeSteps();
|
||||
std::vector<int> reportNumbers();
|
||||
|
||||
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
||||
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
||||
@ -54,6 +55,7 @@ public:
|
||||
private:
|
||||
void openTimeStep(size_t timeStep);
|
||||
|
||||
|
||||
private:
|
||||
QStringList m_fileNames;
|
||||
std::vector<QDateTime> m_timeSteps;
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "RifEclipseUnifiedRestartFileAccess.h"
|
||||
#include "RifEclipseOutputFileTools.h"
|
||||
|
||||
#include "ecl_kw_magic.h"
|
||||
#include <well_state.h>
|
||||
#include <well_info.h>
|
||||
#include <well_conn.h>
|
||||
@ -175,3 +176,31 @@ int RifEclipseUnifiedRestartFileAccess::readUnitsType()
|
||||
return RifEclipseOutputFileTools::readUnitsType(m_ecl_file);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<int> RifEclipseUnifiedRestartFileAccess::reportNumbers()
|
||||
{
|
||||
std::vector<int> reportNr;
|
||||
|
||||
// Taken from well_info_add_UNRST_wells
|
||||
|
||||
int num_blocks = ecl_file_get_num_named_kw(m_ecl_file, SEQNUM_KW);
|
||||
int block_nr;
|
||||
for (block_nr = 0; block_nr < num_blocks; block_nr++) {
|
||||
ecl_file_push_block(m_ecl_file); // <-------------------------------------------------------
|
||||
{ //
|
||||
ecl_file_subselect_block(m_ecl_file, SEQNUM_KW, block_nr); // Ensure that the status
|
||||
{ // is not changed as a side
|
||||
const ecl_kw_type * seqnum_kw = ecl_file_iget_named_kw(m_ecl_file, SEQNUM_KW, 0); // effect.
|
||||
int report_nr = ecl_kw_iget_int(seqnum_kw, 0); //
|
||||
|
||||
reportNr.push_back(report_nr);
|
||||
} //
|
||||
} //
|
||||
ecl_file_pop_block(m_ecl_file); // <-------------------------------------------------------
|
||||
}
|
||||
|
||||
return reportNr;
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,7 @@ public:
|
||||
|
||||
size_t timeStepCount();
|
||||
std::vector<QDateTime> timeSteps();
|
||||
std::vector<int> reportNumbers();
|
||||
|
||||
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
||||
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
||||
@ -55,6 +56,7 @@ public:
|
||||
private:
|
||||
bool openFile();
|
||||
|
||||
|
||||
private:
|
||||
QString m_filename;
|
||||
ecl_file_type* m_ecl_file;
|
||||
|
@ -1066,6 +1066,14 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid, boo
|
||||
|
||||
m_dynamicResultsAccess->readWellData(ert_well_info, importCompleteMswData);
|
||||
|
||||
std::vector<QDateTime> timeSteps = m_dynamicResultsAccess->timeSteps();
|
||||
std::vector<int> reportNumbers = m_dynamicResultsAccess->reportNumbers();
|
||||
bool sameCount = false;
|
||||
if (timeSteps.size() == reportNumbers.size())
|
||||
{
|
||||
sameCount = true;
|
||||
}
|
||||
|
||||
RigMainGrid* mainGrid = m_eclipseCase->mainGrid();
|
||||
std::vector<RigGridBase*> grids;
|
||||
m_eclipseCase->allGrids(&grids);
|
||||
@ -1095,8 +1103,27 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid, boo
|
||||
RigWellResultFrame& wellResFrame = wellResults->m_wellCellsTimeSteps[timeIdx];
|
||||
|
||||
// Build timestamp for well
|
||||
// Also see RifEclipseOutputFileAccess::timeStepsText for accessing time_t structures
|
||||
bool haveFoundTimeStamp = false;
|
||||
|
||||
if (sameCount)
|
||||
{
|
||||
int reportNr = well_state_get_report_nr(ert_well_state);
|
||||
|
||||
for (size_t i = 0; i < reportNumbers.size(); i++)
|
||||
{
|
||||
if (reportNumbers[i] == reportNr)
|
||||
{
|
||||
wellResFrame.m_timestamp = timeSteps[i];
|
||||
haveFoundTimeStamp = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!haveFoundTimeStamp)
|
||||
{
|
||||
// This fallback will not work for timesteps before 1970.
|
||||
|
||||
// Also see RifEclipseOutputFileAccess::timeStepsText for accessing time_t structures
|
||||
time_t stepTime = well_state_get_sim_time(ert_well_state);
|
||||
wellResFrame.m_timestamp = QDateTime::fromTime_t(stepTime);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user