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_grid.h"
|
||||||
#include "ecl_rsthead.h"
|
#include "ecl_rsthead.h"
|
||||||
|
|
||||||
|
#include "cafProgressInfo.h"
|
||||||
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QDebug>
|
#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)
|
/// 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);
|
ecl_kw_type* kwINTEHEAD = ecl_file_iget_named_kw(ecl_file, INTEHEAD_KW, 0);
|
||||||
if (kwINTEHEAD)
|
if (kwINTEHEAD)
|
||||||
{
|
{
|
||||||
time_t ertTimeStamp = ecl_rsthead_date(kwINTEHEAD);
|
int day = 0;
|
||||||
QDateTime simulationStart = QDateTime::fromTime_t(ertTimeStamp);
|
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++)
|
for (int i = 0; i < days.size(); i++)
|
||||||
{
|
{
|
||||||
QDateTime reportDateTime(simulationStart);
|
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);
|
ecl_kw_type* kwINTEHEAD = ecl_file_iget_named_kw(ecl_file, INTEHEAD_KW, i);
|
||||||
if (kwINTEHEAD)
|
if (kwINTEHEAD)
|
||||||
{
|
{
|
||||||
time_t ertTimeStamp = ecl_rsthead_date(kwINTEHEAD);
|
int day = 0;
|
||||||
QDateTime reportDateTime = QDateTime::fromTime_t(ertTimeStamp);
|
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());
|
CVF_ASSERT(reportDateTime.isValid());
|
||||||
|
|
||||||
if (std::find(timeStepsFound.begin(), timeStepsFound.end(), reportDateTime) == timeStepsFound.end())
|
if (std::find(timeStepsFound.begin(), timeStepsFound.end(), reportDateTime) == timeStepsFound.end())
|
||||||
|
@ -51,6 +51,7 @@ public:
|
|||||||
virtual void setTimeSteps(const std::vector<QDateTime>& timeSteps) {};
|
virtual void setTimeSteps(const std::vector<QDateTime>& timeSteps) {};
|
||||||
virtual size_t timeStepCount() = 0;
|
virtual size_t timeStepCount() = 0;
|
||||||
virtual std::vector<QDateTime> timeSteps() = 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 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;
|
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);
|
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);
|
void setTimeSteps(const std::vector<QDateTime>& timeSteps);
|
||||||
size_t timeStepCount();
|
size_t timeStepCount();
|
||||||
std::vector<QDateTime> timeSteps();
|
std::vector<QDateTime> timeSteps();
|
||||||
|
std::vector<int> reportNumbers();
|
||||||
|
|
||||||
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
||||||
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
||||||
@ -54,6 +55,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void openTimeStep(size_t timeStep);
|
void openTimeStep(size_t timeStep);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList m_fileNames;
|
QStringList m_fileNames;
|
||||||
std::vector<QDateTime> m_timeSteps;
|
std::vector<QDateTime> m_timeSteps;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "RifEclipseUnifiedRestartFileAccess.h"
|
#include "RifEclipseUnifiedRestartFileAccess.h"
|
||||||
#include "RifEclipseOutputFileTools.h"
|
#include "RifEclipseOutputFileTools.h"
|
||||||
|
|
||||||
|
#include "ecl_kw_magic.h"
|
||||||
#include <well_state.h>
|
#include <well_state.h>
|
||||||
#include <well_info.h>
|
#include <well_info.h>
|
||||||
#include <well_conn.h>
|
#include <well_conn.h>
|
||||||
@ -175,3 +176,31 @@ int RifEclipseUnifiedRestartFileAccess::readUnitsType()
|
|||||||
return RifEclipseOutputFileTools::readUnitsType(m_ecl_file);
|
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();
|
size_t timeStepCount();
|
||||||
std::vector<QDateTime> timeSteps();
|
std::vector<QDateTime> timeSteps();
|
||||||
|
std::vector<int> reportNumbers();
|
||||||
|
|
||||||
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
void resultNames(QStringList* resultNames, std::vector<size_t>* resultDataItemCounts);
|
||||||
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
bool results(const QString& resultName, size_t timeStep, size_t gridCount, std::vector<double>* values);
|
||||||
@ -55,6 +56,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool openFile();
|
bool openFile();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_filename;
|
QString m_filename;
|
||||||
ecl_file_type* m_ecl_file;
|
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);
|
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();
|
RigMainGrid* mainGrid = m_eclipseCase->mainGrid();
|
||||||
std::vector<RigGridBase*> grids;
|
std::vector<RigGridBase*> grids;
|
||||||
m_eclipseCase->allGrids(&grids);
|
m_eclipseCase->allGrids(&grids);
|
||||||
@ -1095,8 +1103,27 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid, boo
|
|||||||
RigWellResultFrame& wellResFrame = wellResults->m_wellCellsTimeSteps[timeIdx];
|
RigWellResultFrame& wellResFrame = wellResults->m_wellCellsTimeSteps[timeIdx];
|
||||||
|
|
||||||
// Build timestamp for well
|
// 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);
|
time_t stepTime = well_state_get_sim_time(ert_well_state);
|
||||||
wellResFrame.m_timestamp = QDateTime::fromTime_t(stepTime);
|
wellResFrame.m_timestamp = QDateTime::fromTime_t(stepTime);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user