mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2555. Add summary restart file import dialog
This commit is contained in:
@@ -65,6 +65,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicGridStatisticsDialog.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicShowGridStatisticsFeature.h
|
||||
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicFileHierarchyDialog.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicSummaryCaseRestartDialog.h
|
||||
)
|
||||
|
||||
|
||||
@@ -128,6 +129,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicGridStatisticsDialog.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicShowGridStatisticsFeature.cpp
|
||||
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicFileHierarchyDialog.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicSummaryCaseRestartDialog.cpp
|
||||
)
|
||||
|
||||
|
||||
@@ -142,6 +144,7 @@ ${SOURCE_GROUP_SOURCE_FILES}
|
||||
list(APPEND QT_MOC_HEADERS
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicGridStatisticsDialog.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicFileHierarchyDialog.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RicSummaryCaseRestartDialog.h
|
||||
)
|
||||
|
||||
source_group( "CommandFeature" FILES ${SOURCE_GROUP_HEADER_FILES} ${SOURCE_GROUP_SOURCE_FILES} ${CMAKE_CURRENT_LIST_DIR}/CMakeLists_files.cmake )
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
#include "RiaApplication.h"
|
||||
#include "RiaPreferences.h"
|
||||
|
||||
#include "RicSummaryCaseRestartDialog.h"
|
||||
|
||||
#include "RimGridSummaryCase.h"
|
||||
#include "RimMainPlotCollection.h"
|
||||
#include "RimOilField.h"
|
||||
@@ -32,8 +34,6 @@
|
||||
#include "RiuMainPlotWindow.h"
|
||||
#include "RiuMainWindow.h"
|
||||
|
||||
#include "SummaryPlotCommands/RicNewSummaryPlotFeature.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QFileDialog>
|
||||
|
||||
@@ -99,19 +99,23 @@ bool RicImportSummaryCaseFeature::createAndAddSummaryCaseFromFile(const QString&
|
||||
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
|
||||
if (!sumCaseColl) return false;
|
||||
|
||||
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName);
|
||||
sumCaseColl->updateAllRequiredEditors();
|
||||
RicSummaryCaseRestartDialogResult result = RicSummaryCaseRestartDialog::openDialog(fileName);
|
||||
|
||||
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
|
||||
if (mainPlotWindow)
|
||||
if (result.ok)
|
||||
{
|
||||
mainPlotWindow->selectAsCurrentItem(sumCase);
|
||||
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, result.option == RicSummaryCaseRestartDialog::READ_ALL);
|
||||
sumCaseColl->updateAllRequiredEditors();
|
||||
|
||||
mainPlotWindow->updateSummaryPlotToolBar();
|
||||
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
|
||||
if (mainPlotWindow)
|
||||
{
|
||||
mainPlotWindow->selectAsCurrentItem(sumCase);
|
||||
|
||||
mainPlotWindow->updateSummaryPlotToolBar();
|
||||
}
|
||||
|
||||
app->addToRecentFiles(fileName);
|
||||
}
|
||||
|
||||
app->addToRecentFiles(fileName);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "RiaPreferences.h"
|
||||
|
||||
#include "RicFileHierarchyDialog.h"
|
||||
#include "RicSummaryCaseRestartDialog.h"
|
||||
|
||||
#include "RimGridSummaryCase.h"
|
||||
#include "RimMainPlotCollection.h"
|
||||
@@ -108,19 +109,23 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFile(const QString
|
||||
RimSummaryCaseMainCollection* sumCaseColl = proj->activeOilField() ? proj->activeOilField()->summaryCaseMainCollection() : nullptr;
|
||||
if (!sumCaseColl) return false;
|
||||
|
||||
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName);
|
||||
sumCaseColl->updateAllRequiredEditors();
|
||||
RicSummaryCaseRestartDialogResult result = RicSummaryCaseRestartDialog::openDialog(fileName);
|
||||
|
||||
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
|
||||
if (mainPlotWindow)
|
||||
if (result.ok)
|
||||
{
|
||||
mainPlotWindow->selectAsCurrentItem(sumCase);
|
||||
RimSummaryCase* sumCase = sumCaseColl->createAndAddSummaryCaseFromFileName(fileName, result.option == RicSummaryCaseRestartDialog::READ_ALL);
|
||||
sumCaseColl->updateAllRequiredEditors();
|
||||
|
||||
mainPlotWindow->updateSummaryPlotToolBar();
|
||||
RiuMainPlotWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow();
|
||||
if (mainPlotWindow)
|
||||
{
|
||||
mainPlotWindow->selectAsCurrentItem(sumCase);
|
||||
|
||||
mainPlotWindow->updateSummaryPlotToolBar();
|
||||
}
|
||||
|
||||
app->addToRecentFiles(fileName);
|
||||
}
|
||||
|
||||
app->addToRecentFiles(fileName);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
193
ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp
Normal file
193
ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp
Normal file
@@ -0,0 +1,193 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// 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 "RicSummaryCaseRestartDialog.h"
|
||||
#include "ExportCommands/RicSnapshotViewToClipboardFeature.h"
|
||||
#include "ExportCommands/RicSnapshotViewToFileFeature.h"
|
||||
#include "ExportCommands/RicSnapshotFilenameGenerator.h"
|
||||
|
||||
#include "RiaApplication.h"
|
||||
|
||||
#include "RifReaderEclipseSummary.h"
|
||||
|
||||
#include "RimEclipseView.h"
|
||||
#include "Rim3dOverlayInfoConfig.h"
|
||||
#include "RimTools.h"
|
||||
|
||||
#include "RiuMainPlotWindow.h"
|
||||
#include "RiuSummaryQwtPlot.h"
|
||||
#include "RiuTools.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QTextEdit>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QPushButton>
|
||||
#include <QRadioButton>
|
||||
#include <QToolBar>
|
||||
#include <QAction>
|
||||
#include <QFileDialog>
|
||||
#include <QGroupBox>
|
||||
#include <QListWidget>
|
||||
#include <QAbstractItemView>
|
||||
#include <QMenu>
|
||||
#include <QDateTime>
|
||||
|
||||
#include <vector>
|
||||
#include <time.h>
|
||||
#include <thread>
|
||||
|
||||
#define DEFAULT_DIALOG_WIDTH 550
|
||||
#define DEFAULT_DIALOG_INIT_HEIGHT 150
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RicSummaryCaseRestartDialog::RicSummaryCaseRestartDialog(QWidget* parent)
|
||||
: QDialog(parent, RiuTools::defaultDialogFlags())
|
||||
{
|
||||
// Create widgets
|
||||
m_readAllRadioButton = new QRadioButton(this);
|
||||
m_notReadRadionButton = new QRadioButton(this);
|
||||
m_separateCasesRadionButton = new QRadioButton(this);
|
||||
|
||||
m_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
|
||||
// Connect to signals
|
||||
connect(m_buttons, SIGNAL(accepted()), this, SLOT(slotDialogOkClicked()));
|
||||
connect(m_buttons, SIGNAL(rejected()), this, SLOT(slotDialogCancelClicked()));
|
||||
|
||||
// Set widget properties
|
||||
m_readAllRadioButton->setText("Import All Restart Files");
|
||||
m_notReadRadionButton->setText("Do Not Import Restart Files");
|
||||
m_separateCasesRadionButton->setText("Import Restart Files as Separate Cases");
|
||||
|
||||
// Define layout
|
||||
QVBoxLayout* dialogLayout = new QVBoxLayout();
|
||||
|
||||
QGroupBox* filesGroup = new QGroupBox("Found Restart Files");
|
||||
m_filesGridLayout = new QGridLayout();
|
||||
filesGroup->setLayout(m_filesGridLayout);
|
||||
|
||||
QGroupBox* optionsGroup = new QGroupBox("Read Options");
|
||||
QVBoxLayout* optionsLayout = new QVBoxLayout();
|
||||
optionsLayout->addWidget(m_readAllRadioButton);
|
||||
optionsLayout->addWidget(m_notReadRadionButton);
|
||||
optionsLayout->addWidget(m_separateCasesRadionButton);
|
||||
optionsGroup->setLayout(optionsLayout);
|
||||
|
||||
dialogLayout->addWidget(filesGroup);
|
||||
dialogLayout->addWidget(optionsGroup);
|
||||
dialogLayout->addWidget(m_buttons);
|
||||
|
||||
setLayout(dialogLayout);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RicSummaryCaseRestartDialog::~RicSummaryCaseRestartDialog()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const QString& summaryHeaderFile, QWidget *parent)
|
||||
{
|
||||
RicSummaryCaseRestartDialog dialog(parent);
|
||||
|
||||
dialog.setWindowTitle("Summary Case Restart Files");
|
||||
dialog.m_readAllRadioButton->setChecked(true);
|
||||
|
||||
std::vector<RifRestartFileInfo> files = dialog.getRestartFiles(summaryHeaderFile);
|
||||
for (const auto& file : files)
|
||||
{
|
||||
dialog.appendToFileList(file);
|
||||
}
|
||||
|
||||
// If no restart files are found, do not show dialog
|
||||
if (files.empty())
|
||||
{
|
||||
return RicSummaryCaseRestartDialogResult(true, READ_ALL);
|
||||
}
|
||||
|
||||
dialog.resize(DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_INIT_HEIGHT);
|
||||
dialog.exec();
|
||||
|
||||
return RicSummaryCaseRestartDialogResult(dialog.result() == QDialog::Accepted, dialog.selectedOption());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RicSummaryCaseRestartDialog::ReadOptions RicSummaryCaseRestartDialog::selectedOption() const
|
||||
{
|
||||
return
|
||||
m_notReadRadionButton->isChecked() ? NOT_READ :
|
||||
m_separateCasesRadionButton->isChecked() ? SEPARATE_CASES :
|
||||
READ_ALL;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicSummaryCaseRestartDialog::appendToFileList(const RifRestartFileInfo& fileInfo)
|
||||
{
|
||||
QDateTime startDate = QDateTime::fromTime_t(fileInfo.startDate);
|
||||
QString startDateString = startDate.toString(RimTools::dateFormatString());
|
||||
QDateTime endDate = QDateTime::fromTime_t(fileInfo.endDate);
|
||||
QString endDateString = endDate.toString(RimTools::dateFormatString());
|
||||
int rowCount = m_filesGridLayout->rowCount();
|
||||
|
||||
QLabel* fileNameLabel = new QLabel();
|
||||
QLabel* dateLabel = new QLabel();
|
||||
fileNameLabel->setText(QFileInfo(fileInfo.fileName).fileName());
|
||||
dateLabel->setText(startDateString + " - " + endDateString);
|
||||
|
||||
fileNameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
m_filesGridLayout->addWidget(fileNameLabel, rowCount, 0);
|
||||
m_filesGridLayout->addWidget(dateLabel, rowCount, 1);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RifRestartFileInfo> RicSummaryCaseRestartDialog::getRestartFiles(const QString& summaryHeaderFile)
|
||||
{
|
||||
RifReaderEclipseSummary reader;
|
||||
return reader.getRestartFiles(summaryHeaderFile);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicSummaryCaseRestartDialog::slotDialogOkClicked()
|
||||
{
|
||||
accept();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicSummaryCaseRestartDialog::slotDialogCancelClicked()
|
||||
{
|
||||
reject();
|
||||
}
|
||||
88
ApplicationCode/Commands/RicSummaryCaseRestartDialog.h
Normal file
88
ApplicationCode/Commands/RicSummaryCaseRestartDialog.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// 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 "Rim3dOverlayInfoConfig.h"
|
||||
|
||||
#include "RifReaderEclipseSummary.h"
|
||||
|
||||
#include "cafPdmPointer.h"
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
class QLabel;
|
||||
class QRadioButton;
|
||||
class QLineEdit;
|
||||
class QTextEdit;
|
||||
class QDialogButtonBox;
|
||||
class QPushButton;
|
||||
class QMainWindow;
|
||||
class QListWidget;
|
||||
class QGridLayout;
|
||||
class RicSummaryCaseRestartDialogResult;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
class RicSummaryCaseRestartDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum ReadOptions { READ_ALL, NOT_READ, SEPARATE_CASES };
|
||||
|
||||
RicSummaryCaseRestartDialog(QWidget* parent);
|
||||
~RicSummaryCaseRestartDialog();
|
||||
|
||||
static RicSummaryCaseRestartDialogResult openDialog(const QString& summaryHeaderFile, QWidget *parent = nullptr);
|
||||
|
||||
ReadOptions selectedOption() const;
|
||||
|
||||
private:
|
||||
void appendToFileList(const RifRestartFileInfo& fileInfo);
|
||||
std::vector<RifRestartFileInfo> getRestartFiles(const QString& summaryHeaderFile);
|
||||
|
||||
private slots:
|
||||
void slotDialogOkClicked();
|
||||
void slotDialogCancelClicked();
|
||||
|
||||
private:
|
||||
QGridLayout * m_filesGridLayout;
|
||||
|
||||
QRadioButton* m_readAllRadioButton;
|
||||
QRadioButton* m_notReadRadionButton;
|
||||
QRadioButton* m_separateCasesRadionButton;
|
||||
|
||||
QDialogButtonBox* m_buttons;
|
||||
};
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
class RicSummaryCaseRestartDialogResult
|
||||
{
|
||||
public:
|
||||
RicSummaryCaseRestartDialogResult(bool ok,
|
||||
RicSummaryCaseRestartDialog::ReadOptions option) :
|
||||
ok(ok), option(option) {}
|
||||
|
||||
bool ok;
|
||||
RicSummaryCaseRestartDialog::ReadOptions option;
|
||||
};
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
#include "RifReaderEclipseSummary.h"
|
||||
#include "RiaStringEncodingTools.h"
|
||||
|
||||
#include "ert/ecl/ecl_sum.h"
|
||||
#include "RifReaderEclipseOutput.h"
|
||||
#include "RifEclipseSummaryTools.h"
|
||||
|
||||
#include <string>
|
||||
#include <assert.h>
|
||||
@@ -27,8 +27,62 @@
|
||||
#include <QDateTime>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include "ert/ecl/smspec_node.h"
|
||||
#include <QDir>
|
||||
|
||||
#include "ert/ecl/ecl_sum.h"
|
||||
#include "ert/ecl/smspec_node.h"
|
||||
#include "ert/ecl/ecl_file.h"
|
||||
#include "ert/ecl/ecl_kw_magic.h"
|
||||
#include "ert/ecl/ecl_kw.h"
|
||||
|
||||
|
||||
std::vector<time_t> getTimeSteps(ecl_sum_type* ecl_sum)
|
||||
{
|
||||
std::vector<time_t> timeSteps;
|
||||
for (int time_index = 0; time_index < ecl_sum_get_data_length(ecl_sum); time_index++)
|
||||
{
|
||||
time_t sim_time = ecl_sum_iget_sim_time(ecl_sum, time_index);
|
||||
timeSteps.push_back(sim_time);
|
||||
}
|
||||
return timeSteps;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
ecl_sum_type* openEclSum(const QString& inHeaderFileName, bool includeRestartFiles)
|
||||
{
|
||||
QString headerFileName;
|
||||
QStringList dataFileNames;
|
||||
QString nativeHeaderFileName = QDir::toNativeSeparators(inHeaderFileName);
|
||||
RifEclipseSummaryTools::findSummaryFiles(nativeHeaderFileName, &headerFileName, &dataFileNames);
|
||||
|
||||
if (headerFileName.isEmpty() || dataFileNames.size() == 0) return nullptr;
|
||||
|
||||
assert(!headerFileName.isEmpty());
|
||||
assert(dataFileNames.size() > 0);
|
||||
|
||||
stringlist_type* dataFiles = stringlist_alloc_new();
|
||||
for (int i = 0; i < dataFileNames.size(); i++)
|
||||
{
|
||||
stringlist_append_copy(dataFiles, RiaStringEncodingTools::toNativeEncoded(dataFileNames[i]).data());
|
||||
}
|
||||
|
||||
std::string itemSeparatorInVariableNames = ":";
|
||||
ecl_sum_type* ecl_sum = ecl_sum_fread_alloc(RiaStringEncodingTools::toNativeEncoded(headerFileName).data(), dataFiles, itemSeparatorInVariableNames.data(), includeRestartFiles);
|
||||
|
||||
stringlist_free(dataFiles);
|
||||
|
||||
return ecl_sum;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void closeEclSum(ecl_sum_type* ecl_sum)
|
||||
{
|
||||
if(ecl_sum) ecl_sum_free(ecl_sum);
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -54,36 +108,17 @@ RifReaderEclipseSummary::~RifReaderEclipseSummary()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifReaderEclipseSummary::open(const QString& headerFileName, const QStringList& dataFileNames)
|
||||
bool RifReaderEclipseSummary::open(const QString& headerFileName, bool includeRestartFiles)
|
||||
{
|
||||
assert(m_ecl_sum == NULL);
|
||||
|
||||
if (headerFileName.isEmpty() || dataFileNames.size() == 0) return false;
|
||||
|
||||
assert(!headerFileName.isEmpty());
|
||||
assert(dataFileNames.size() > 0);
|
||||
|
||||
stringlist_type* dataFiles = stringlist_alloc_new();
|
||||
for (int i = 0; i < dataFileNames.size(); i++)
|
||||
{
|
||||
stringlist_append_copy(dataFiles, RiaStringEncodingTools::toNativeEncoded(dataFileNames[i]).data());
|
||||
}
|
||||
|
||||
std::string itemSeparatorInVariableNames = ":";
|
||||
m_ecl_sum = ecl_sum_fread_alloc(RiaStringEncodingTools::toNativeEncoded(headerFileName).data(), dataFiles, itemSeparatorInVariableNames.data(), false);
|
||||
|
||||
stringlist_free(dataFiles);
|
||||
m_ecl_sum = openEclSum(headerFileName, includeRestartFiles);
|
||||
|
||||
if (m_ecl_sum)
|
||||
{
|
||||
m_timeSteps.clear();
|
||||
m_ecl_SmSpec = ecl_sum_get_smspec(m_ecl_sum);
|
||||
|
||||
for ( int time_index = 0; time_index < timeStepCount(); time_index++ )
|
||||
{
|
||||
time_t sim_time = ecl_sum_iget_sim_time(m_ecl_sum, time_index);
|
||||
m_timeSteps.push_back(sim_time);
|
||||
}
|
||||
m_timeSteps = getTimeSteps(m_ecl_sum);
|
||||
|
||||
buildMetaData();
|
||||
|
||||
@@ -93,6 +128,24 @@ bool RifReaderEclipseSummary::open(const QString& headerFileName, const QStringL
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RifRestartFileInfo> RifReaderEclipseSummary::getRestartFiles(const QString& headerFileName)
|
||||
{
|
||||
std::vector<RifRestartFileInfo> restartFiles;
|
||||
|
||||
RifRestartFileInfo currFile;
|
||||
currFile.fileName = headerFileName;
|
||||
while(!currFile.fileName.isEmpty())
|
||||
{
|
||||
currFile = getRestartFile(currFile.fileName);
|
||||
if (!currFile.fileName.isEmpty())
|
||||
restartFiles.push_back(currFile);
|
||||
}
|
||||
return restartFiles;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -326,6 +379,57 @@ void RifReaderEclipseSummary::buildMetaData()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
time_t getStartDate(ecl_file_type * header)
|
||||
{
|
||||
time_t startDate = 0;
|
||||
ecl_kw_type *startdat = ecl_file_iget_named_kw(header, STARTDAT_KW, 0);
|
||||
if (startdat)
|
||||
{
|
||||
int * date = ecl_kw_get_int_ptr(startdat);
|
||||
startDate = ecl_util_make_date(date[STARTDAT_DAY_INDEX],
|
||||
date[STARTDAT_MONTH_INDEX],
|
||||
date[STARTDAT_YEAR_INDEX]);
|
||||
}
|
||||
return startDate;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifRestartFileInfo RifReaderEclipseSummary::getRestartFile(const QString& headerFileName)
|
||||
{
|
||||
RifRestartFileInfo restartFile;
|
||||
|
||||
ecl_sum_type* ecl_sum = openEclSum(headerFileName, true);
|
||||
|
||||
const ecl_smspec_type* smspec = ecl_sum ? ecl_sum_get_smspec(ecl_sum) : nullptr;
|
||||
const char* rstCase = smspec ? ecl_smspec_get_restart_case(smspec) : nullptr;
|
||||
QString restartCase = rstCase? RiaStringEncodingTools::fromNativeEncoded(rstCase) : "";
|
||||
closeEclSum(ecl_sum);
|
||||
|
||||
if (!restartCase.isEmpty())
|
||||
{
|
||||
QString path = QFileInfo(headerFileName).dir().path();
|
||||
QString restartBase = QDir(restartCase).dirName();
|
||||
|
||||
char* smspec_header = ecl_util_alloc_exfilename(path.toStdString().data(), restartBase.toStdString().data(), ECL_SUMMARY_HEADER_FILE, false /*unformatted*/, 0);
|
||||
restartFile.fileName = QDir::toNativeSeparators(RiaStringEncodingTools::fromNativeEncoded(smspec_header));
|
||||
util_safe_free(smspec_header);
|
||||
|
||||
ecl_sum = openEclSum(headerFileName, false);
|
||||
std::vector<time_t> timeSteps = getTimeSteps(ecl_sum);
|
||||
if (timeSteps.size() > 0)
|
||||
{
|
||||
restartFile.startDate = timeSteps.front();
|
||||
restartFile.endDate = timeSteps.back();
|
||||
}
|
||||
closeEclSum(ecl_sum);
|
||||
}
|
||||
return restartFile;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
|
||||
@@ -21,13 +21,29 @@
|
||||
#include "RifEclipseSummaryAddress.h"
|
||||
#include "RifSummaryReaderInterface.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
class QString;
|
||||
class QStringList;
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
//
|
||||
//==================================================================================================
|
||||
class RifRestartFileInfo
|
||||
{
|
||||
public:
|
||||
RifRestartFileInfo() : startDate(0), endDate(0) {}
|
||||
|
||||
QString fileName;
|
||||
time_t startDate;
|
||||
time_t endDate;
|
||||
};
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
//
|
||||
@@ -38,7 +54,9 @@ public:
|
||||
RifReaderEclipseSummary();
|
||||
~RifReaderEclipseSummary();
|
||||
|
||||
bool open(const QString& headerFileName, const QStringList& dataFileNames);
|
||||
bool open(const QString& headerFileName, bool includeRestartFiles);
|
||||
|
||||
std::vector<RifRestartFileInfo> getRestartFiles(const QString& headerFileName);
|
||||
|
||||
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
||||
|
||||
@@ -49,6 +67,7 @@ private:
|
||||
int timeStepCount() const;
|
||||
int indexFromAddress(const RifEclipseSummaryAddress& resultAddress) const;
|
||||
void buildMetaData();
|
||||
RifRestartFileInfo getRestartFile(const QString& headerFileName);
|
||||
|
||||
private:
|
||||
// Taken from ecl_sum.h
|
||||
|
||||
@@ -39,9 +39,17 @@ CAF_PDM_SOURCE_INIT(RimFileSummaryCase,"FileSummaryCase");
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimFileSummaryCase::RimFileSummaryCase()
|
||||
RimFileSummaryCase::RimFileSummaryCase() : m_includeRestartFiles(false)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimFileSummaryCase::RimFileSummaryCase(bool includeRestartFiles)
|
||||
{
|
||||
m_includeRestartFiles = includeRestartFiles;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -83,22 +91,17 @@ void RimFileSummaryCase::updateFilePathsFromProjectPath(const QString & newProje
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFileSummaryCase::createSummaryReaderInterface()
|
||||
{
|
||||
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename());
|
||||
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename(), m_includeRestartFiles);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifReaderEclipseSummary* RimFileSummaryCase::findRelatedFilesAndCreateReader(const QString& headerFileName)
|
||||
RifReaderEclipseSummary* RimFileSummaryCase::findRelatedFilesAndCreateReader(const QString& headerFileName, bool includeRestartFiles)
|
||||
{
|
||||
QString headerFileNameStd;
|
||||
QStringList dataFileNames;
|
||||
QString nativeSumHeadFileName = QDir::toNativeSeparators(headerFileName);
|
||||
RifEclipseSummaryTools::findSummaryFiles(nativeSumHeadFileName, &headerFileNameStd, &dataFileNames);
|
||||
|
||||
RifReaderEclipseSummary* summaryFileReader = new RifReaderEclipseSummary;
|
||||
|
||||
if (!summaryFileReader->open(headerFileNameStd, dataFileNames))
|
||||
if (!summaryFileReader->open(headerFileName, includeRestartFiles))
|
||||
{
|
||||
RiaLogging::warning(QString("Failed to open summary file %1").arg(headerFileName));
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ class RimFileSummaryCase: public RimSummaryCase
|
||||
CAF_PDM_HEADER_INIT;
|
||||
public:
|
||||
RimFileSummaryCase();
|
||||
RimFileSummaryCase(bool includeRestartFiles);
|
||||
virtual ~RimFileSummaryCase();
|
||||
|
||||
virtual QString summaryHeaderFilename() const override;
|
||||
@@ -43,8 +44,9 @@ public:
|
||||
virtual void createSummaryReaderInterface() override;
|
||||
virtual RifSummaryReaderInterface* summaryReader() override;
|
||||
|
||||
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader(const QString& headerFileName);
|
||||
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader(const QString& headerFileName, bool includeRestartFiles);
|
||||
|
||||
private:
|
||||
cvf::ref<RifReaderEclipseSummary> m_summaryFileReader;
|
||||
bool m_includeRestartFiles;
|
||||
};
|
||||
|
||||
@@ -175,7 +175,7 @@ void RimGridSummaryCase::updateFilePathsFromProjectPath(const QString & newProje
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimGridSummaryCase::createSummaryReaderInterface()
|
||||
{
|
||||
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename());
|
||||
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename(), true /* read restart files */);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -282,9 +282,9 @@ RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromEclipse
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromFileName(const QString& fileName)
|
||||
RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromFileName(const QString& fileName, bool includeRestartFiles)
|
||||
{
|
||||
RimFileSummaryCase* newSumCase = new RimFileSummaryCase();
|
||||
RimFileSummaryCase* newSumCase = new RimFileSummaryCase(includeRestartFiles);
|
||||
|
||||
this->m_cases.push_back(newSumCase);
|
||||
newSumCase->setSummaryHeaderFileName(fileName);
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
|
||||
void createSummaryCasesFromRelevantEclipseResultCases();
|
||||
RimSummaryCase* createAndAddSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase);
|
||||
RimSummaryCase* createAndAddSummaryCaseFromFileName(const QString& fileName);
|
||||
RimSummaryCase* createAndAddSummaryCaseFromFileName(const QString& fileName, bool includeRestartFiles);
|
||||
|
||||
RimSummaryCase* findSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase) const;
|
||||
RimSummaryCase* findSummaryCaseFromFileName(const QString& fileName) const;
|
||||
|
||||
Reference in New Issue
Block a user