diff --git a/ApplicationCode/Application/RiaPreferences.cpp b/ApplicationCode/Application/RiaPreferences.cpp index 623ef531b3..a77be746ed 100644 --- a/ApplicationCode/Application/RiaPreferences.cpp +++ b/ApplicationCode/Application/RiaPreferences.cpp @@ -27,6 +27,18 @@ #include "cafPdmUiFieldHandle.h" #include "cafPdmUiFilePathEditor.h" + +template<> +void RiaPreferences::SummaryRestartFilesImportModeType::setUp() +{ + addItem(RiaPreferences::ASK_USER, "ASK_USER", "Ask user"); + addItem(RiaPreferences::IMPORT, "IMPORT", "Always import"); + addItem(RiaPreferences::NOT_IMPORT, "NOT_IMPORT", "Never import"); + addItem(RiaPreferences::SEPARATE_CASES, "SEPARATE_CASES", "Import as separate summary cases"); + setDefault(RiaPreferences::ASK_USER); +} + + CAF_PDM_SOURCE_INIT(RiaPreferences, "RiaPreferences"); //-------------------------------------------------------------------------------------------------- /// @@ -88,6 +100,9 @@ RiaPreferences::RiaPreferences(void) CAF_PDM_InitField(&loadAndShowSoil, "loadAndShowSoil", true, "Load and Show SOIL", "", "", ""); loadAndShowSoil.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + CAF_PDM_InitFieldNoDefault(&summaryRestartFilesImportMode, "summaryRestartFilesImportMode", "Import summary restart files", "", "", ""); + //loadAndShowSoil.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + CAF_PDM_InitFieldNoDefault(&m_readerSettings, "readerSettings", "Reader Settings", "", "", ""); m_readerSettings = new RifReaderSettings; @@ -175,6 +190,9 @@ void RiaPreferences::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& newCaseBehaviourGroup->add(&loadAndShowSoil); m_readerSettings->defineUiOrdering(uiConfigName, *newCaseBehaviourGroup); + + caf::PdmUiGroup* restartBehaviourGroup = uiOrdering.addNewGroup("Summary Restart Files"); + restartBehaviourGroup->add(&summaryRestartFilesImportMode); } else if (uiConfigName == m_tabNames[2]) { diff --git a/ApplicationCode/Application/RiaPreferences.h b/ApplicationCode/Application/RiaPreferences.h index dbc02b5953..03dca2b6d8 100644 --- a/ApplicationCode/Application/RiaPreferences.h +++ b/ApplicationCode/Application/RiaPreferences.h @@ -37,6 +37,9 @@ class RiaPreferences : public caf::PdmObject CAF_PDM_HEADER_INIT; public: + enum SummaryRestartFilesImportMode { ASK_USER, IMPORT, NOT_IMPORT, SEPARATE_CASES }; + typedef caf::AppEnum SummaryRestartFilesImportModeType; + RiaPreferences(void); virtual ~RiaPreferences(void); @@ -77,6 +80,8 @@ public: // Pdm Fields caf::PdmField autocomputeDepthRelatedProperties; caf::PdmField loadAndShowSoil; + caf::PdmField summaryRestartFilesImportMode; + protected: virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); diff --git a/ApplicationCode/Application/Tools/CMakeLists_files.cmake b/ApplicationCode/Application/Tools/CMakeLists_files.cmake index 9e533fd960..06095bc398 100644 --- a/ApplicationCode/Application/Tools/CMakeLists_files.cmake +++ b/ApplicationCode/Application/Tools/CMakeLists_files.cmake @@ -23,6 +23,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaTextStringTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaTextFileCompare.h ${CMAKE_CURRENT_LIST_DIR}/RiaRegressionTestRunner.h ${CMAKE_CURRENT_LIST_DIR}/RiaExtractionTools.h +${CMAKE_CURRENT_LIST_DIR}/RiaFilePathTools.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -49,6 +50,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaTextStringTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaTextFileCompare.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaRegressionTestRunner.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaExtractionTools.cpp +${CMAKE_CURRENT_LIST_DIR}/RiaFilePathTools.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Application/Tools/RiaFilePathTools.cpp b/ApplicationCode/Application/Tools/RiaFilePathTools.cpp new file mode 100644 index 0000000000..d9f3604ab0 --- /dev/null +++ b/ApplicationCode/Application/Tools/RiaFilePathTools.cpp @@ -0,0 +1,88 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 "RiaFilePathTools.h" +#include + +//-------------------------------------------------------------------------------------------------- +/// Internal variables +//-------------------------------------------------------------------------------------------------- +static QString SEPARATOR = "/"; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiaFilePathTools::toInternalSeparator(const QString& path) +{ + QString currNativeSep = QDir::separator(); + + if (currNativeSep == "/") + { + // On Linux like system -> Do not convert separators + return path; + } + + // On other systems (i.e. Windows) -> Convert to internal separator (/) + QString output = path; + return output.replace(QString("\\"), SEPARATOR); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString& RiaFilePathTools::appendSeparatorIfNo(QString& path) +{ + if (!path.endsWith(SEPARATOR)) + { + path.append(SEPARATOR); + } + return path; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiaFilePathTools::relativePath(const QString& rootDir, const QString& dir) +{ + if (dir.startsWith(rootDir)) + { + QString relPath = dir; + relPath.remove(0, rootDir.size()); + + if (relPath.startsWith(SEPARATOR)) relPath.remove(0, 1); + return appendSeparatorIfNo(relPath); + } + else + { + return dir; + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiaFilePathTools::equalPaths(const QString& path1, const QString& path2) +{ + QString p1 = path1; + QString p2 = path2; + appendSeparatorIfNo(p1); + appendSeparatorIfNo(p2); + return p1 == p2; +} diff --git a/ApplicationCode/Application/Tools/RiaFilePathTools.h b/ApplicationCode/Application/Tools/RiaFilePathTools.h new file mode 100644 index 0000000000..f5f10838cb --- /dev/null +++ b/ApplicationCode/Application/Tools/RiaFilePathTools.h @@ -0,0 +1,39 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 +#include + +//================================================================================================== +// +// +// +//================================================================================================== +class RiaFilePathTools +{ +public: + static QString toInternalSeparator(const QString& path); + static QString& appendSeparatorIfNo(QString& path); + static QString relativePath(const QString& rootDir, const QString& dir); + static bool equalPaths(const QString& path1, const QString& path2); +}; diff --git a/ApplicationCode/Commands/RicFileHierarchyDialog.cpp b/ApplicationCode/Commands/RicFileHierarchyDialog.cpp index c9297bd97a..98977a879b 100644 --- a/ApplicationCode/Commands/RicFileHierarchyDialog.cpp +++ b/ApplicationCode/Commands/RicFileHierarchyDialog.cpp @@ -22,6 +22,7 @@ #include "ExportCommands/RicSnapshotFilenameGenerator.h" #include "RiaApplication.h" +#include "RiaFilePathTools.h" #include "RimEclipseView.h" #include "Rim3dOverlayInfoConfig.h" @@ -66,11 +67,7 @@ static QString SEPARATOR = "/"; //-------------------------------------------------------------------------------------------------- /// Internal functions //-------------------------------------------------------------------------------------------------- -static QString toInternalSeparator(const QString& path); -static QString& appendSeparatorIfNo(QString& path); static QStringList prefixStrings(const QStringList& strings, const QString& prefix); -static QString relativePath(const QString& rootDir, const QString& dir); -static bool equalPaths(const QString& path1, const QString& path2); //-------------------------------------------------------------------------------------------------- /// @@ -203,8 +200,8 @@ QStringList RicFileHierarchyDialog::files() const //-------------------------------------------------------------------------------------------------- QString RicFileHierarchyDialog::rootDir() const { - QString rootDir = toInternalSeparator(m_rootDir->text()); - return appendSeparatorIfNo(rootDir); + QString rootDir = RiaFilePathTools::toInternalSeparator(m_rootDir->text()); + return RiaFilePathTools::appendSeparatorIfNo(rootDir); } //-------------------------------------------------------------------------------------------------- @@ -212,7 +209,7 @@ QString RicFileHierarchyDialog::rootDir() const //-------------------------------------------------------------------------------------------------- QString RicFileHierarchyDialog::pathFilter() const { - return toInternalSeparator(m_pathFilter->text()); + return RiaFilePathTools::toInternalSeparator(m_pathFilter->text()); } //-------------------------------------------------------------------------------------------------- @@ -349,7 +346,7 @@ QStringList RicFileHierarchyDialog::buildDirectoryListRecursive(const QString& c } } - QString currRelPath = relativePath(rootDir(), currentDir); + QString currRelPath = RiaFilePathTools::relativePath(rootDir(), currentDir); if (pathFilterMatch(currPathFilter, currRelPath)) { allDirs.push_back(currentDir); @@ -437,7 +434,7 @@ void RicFileHierarchyDialog::updateEffectiveFilter() .arg(m_fileFilter->text()) .arg(m_fileExtension->text()); - QString internalFilter(toInternalSeparator(effFilter)); + QString internalFilter(RiaFilePathTools::toInternalSeparator(effFilter)); // Remove duplicate separators int len; @@ -619,36 +616,6 @@ void RicFileHierarchyDialog::slotBrowseButtonClicked() /// Internal functions //-------------------------------------------------------------------------------------------------- -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString toInternalSeparator(const QString& path) -{ - QString currNativeSep = QDir::separator(); - - if (currNativeSep == "/") - { - // On Linux like system -> Do not convert separators - return path; - } - - // On other systems (i.e. Windows) -> Convert to internal separator (/) - QString output = path; - return output.replace(QString("\\"), SEPARATOR); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString& appendSeparatorIfNo(QString& path) -{ - if (!path.endsWith(SEPARATOR)) - { - path.append(SEPARATOR); - } - return path; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -668,34 +635,3 @@ QStringList prefixStrings(const QStringList& strings, const QString& prefix) } return prefixedStrings; } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString relativePath(const QString& rootDir, const QString& dir) -{ - if (dir.startsWith(rootDir)) - { - QString relPath = dir; - relPath.remove(0, rootDir.size()); - - if (relPath.startsWith(SEPARATOR)) relPath.remove(0, 1); - return appendSeparatorIfNo(relPath); - } - else - { - return dir; - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool equalPaths(const QString& path1, const QString& path2) -{ - QString p1 = path1; - QString p2 = path2; - appendSeparatorIfNo(p1); - appendSeparatorIfNo(p2); - return p1 == p2; -} diff --git a/ApplicationCode/Commands/RicImportSummaryCaseFeature.cpp b/ApplicationCode/Commands/RicImportSummaryCaseFeature.cpp index d3648a5539..c9a4f43779 100644 --- a/ApplicationCode/Commands/RicImportSummaryCaseFeature.cpp +++ b/ApplicationCode/Commands/RicImportSummaryCaseFeature.cpp @@ -53,6 +53,7 @@ bool RicImportSummaryCaseFeature::isCommandEnabled() void RicImportSummaryCaseFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); + RiaPreferences* prefs = app->preferences(); QString defaultDir = app->lastUsedDialogDirectory("INPUT_FILES"); QStringList fileNames = QFileDialog::getOpenFileNames(nullptr, "Import Summary Case", defaultDir, "Eclipse Summary File (*.SMSPEC);;All Files (*.*)"); @@ -63,7 +64,15 @@ void RicImportSummaryCaseFeature::onActionTriggered(bool isChecked) if (fileNames.isEmpty()) return; - std::vector fileInfos = RicImportSummaryCasesFeature::getFilesToImportWithDialog(fileNames, true); + std::vector fileInfos; + if (prefs->summaryRestartFilesImportMode == RiaPreferences::ASK_USER) + { + fileInfos = RicImportSummaryCasesFeature::getFilesToImportWithDialog(fileNames, true); + } + else + { + fileInfos = RicImportSummaryCasesFeature::getFilesToImportFromPrefs(fileNames, prefs->summaryRestartFilesImportMode); + } RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileInfo(fileInfos); diff --git a/ApplicationCode/Commands/RicImportSummaryCasesFeature.cpp b/ApplicationCode/Commands/RicImportSummaryCasesFeature.cpp index 61cb441414..b3a20a110e 100644 --- a/ApplicationCode/Commands/RicImportSummaryCasesFeature.cpp +++ b/ApplicationCode/Commands/RicImportSummaryCasesFeature.cpp @@ -56,6 +56,7 @@ bool RicImportSummaryCasesFeature::isCommandEnabled() void RicImportSummaryCasesFeature::onActionTriggered(bool isChecked) { RiaApplication* app = RiaApplication::instance(); + RiaPreferences* prefs = app->preferences(); QString defaultDir = app->lastUsedDialogDirectory("INPUT_FILES"); RicFileHierarchyDialogResult result = RicFileHierarchyDialog::getOpenFileNames(nullptr, "Import Summary Cases", defaultDir, m_pathFilter, m_fileNameFilter, QStringList(".SMSPEC")); @@ -72,10 +73,20 @@ void RicImportSummaryCasesFeature::onActionTriggered(bool isChecked) QStringList fileNames = result.files; if (fileNames.isEmpty()) return; - std::vector fileInfos = getFilesToImportWithDialog(fileNames, true); + std::vector fileInfos; + if (prefs->summaryRestartFilesImportMode == RiaPreferences::ASK_USER) + { + fileInfos = getFilesToImportWithDialog(fileNames, true); + } + else + { + fileInfos = getFilesToImportFromPrefs(fileNames, prefs->summaryRestartFilesImportMode); + } createAndAddSummaryCaseFromFileInfo(fileInfos); + if (fileInfos.size() > 0) RiaApplication::instance()->addToRecentFiles(fileInfos.front().fileName); + std::vector cases; app->project()->allCases(cases); @@ -111,8 +122,6 @@ std::vector RicImportSummaryCasesFeature::getFilesToImpo if (result.ok) { - if(result.files.size() > 0) RiaApplication::instance()->addToRecentFiles(result.files.front()); - for (const QString& file : result.files) { RicSummaryCaseFileInfo fi(file, result.option == RicSummaryCaseRestartDialog::READ_ALL); @@ -127,6 +136,38 @@ std::vector RicImportSummaryCasesFeature::getFilesToImpo return std::vector(filesToImport.begin(), filesToImport.end()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicImportSummaryCasesFeature::getFilesToImportFromPrefs(const QStringList& initialFiles, + RiaPreferences::SummaryRestartFilesImportModeType summaryRestartMode) +{ + std::set filesToImport; + RicSummaryCaseRestartDialogResult lastResult; + + for (const QString& file : initialFiles) + { + if (summaryRestartMode == RiaPreferences::IMPORT) + { + filesToImport.insert(RicSummaryCaseFileInfo(file, true)); + } + else if (summaryRestartMode == RiaPreferences::NOT_IMPORT) + { + filesToImport.insert(RicSummaryCaseFileInfo(file, false)); + } + else if (summaryRestartMode == RiaPreferences::SEPARATE_CASES) + { + filesToImport.insert(RicSummaryCaseFileInfo(file, false)); + + RifReaderEclipseSummary reader; + std::vector restartFileInfos = reader.getRestartFiles(file); + for (const auto& fi : restartFileInfos) + filesToImport.insert(RicSummaryCaseFileInfo(fi.fileName, false)); + } + } + return std::vector(filesToImport.begin(), filesToImport.end()); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -149,8 +190,21 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileInfo(const std //-------------------------------------------------------------------------------------------------- bool RicImportSummaryCasesFeature::createAndAddSummaryCaseFromFileWithDialog(const QString& fileName) { + RiaApplication* app = RiaApplication::instance(); + RiaPreferences* prefs = app->preferences(); + QStringList fileNames({ fileName }); - std::vector fileInfos = getFilesToImportWithDialog(fileNames, false); + std::vector fileInfos; + if (prefs->summaryRestartFilesImportMode == RiaPreferences::ASK_USER) + { + fileInfos = getFilesToImportWithDialog(fileNames, false); + } + else + { + fileInfos = getFilesToImportFromPrefs(fileNames, prefs->summaryRestartFilesImportMode); + } + + bool res = createAndAddSummaryCaseFromFileInfo(fileInfos); RiaApplication::instance()->addToRecentFiles(fileName); return res; diff --git a/ApplicationCode/Commands/RicImportSummaryCasesFeature.h b/ApplicationCode/Commands/RicImportSummaryCasesFeature.h index ec11bf6fb6..fcefac9df2 100644 --- a/ApplicationCode/Commands/RicImportSummaryCasesFeature.h +++ b/ApplicationCode/Commands/RicImportSummaryCasesFeature.h @@ -18,6 +18,8 @@ #pragma once +#include "RiaPreferences.h" + #include "cafCmdFeature.h" #include @@ -54,6 +56,9 @@ public: static std::vector getFilesToImportWithDialog(const QStringList& initialFiles, bool enableApplyToAllField); + static std::vector getFilesToImportFromPrefs(const QStringList& initialFiles, + RiaPreferences::SummaryRestartFilesImportModeType summaryRestartMode); + static bool createAndAddSummaryCaseFromFileInfo(const std::vector& fileInfos); static bool createAndAddSummaryCaseFromFileWithDialog(const QString& fileName); diff --git a/ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp b/ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp index 99e009b920..ae52b0bb97 100644 --- a/ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp +++ b/ApplicationCode/Commands/RicSummaryCaseRestartDialog.cpp @@ -22,6 +22,7 @@ #include "ExportCommands/RicSnapshotFilenameGenerator.h" #include "RiaApplication.h" +#include "RiaFilePathTools.h" #include "RifReaderEclipseSummary.h" @@ -57,15 +58,6 @@ #define DEFAULT_DIALOG_WIDTH 550 #define DEFAULT_DIALOG_INIT_HEIGHT 150 -//-------------------------------------------------------------------------------------------------- -/// Internal variables -//-------------------------------------------------------------------------------------------------- -static QString SEPARATOR = "/"; - -//-------------------------------------------------------------------------------------------------- -/// Internal functions -//-------------------------------------------------------------------------------------------------- -static QString toInternalSeparator(const QString& path); //-------------------------------------------------------------------------------------------------- /// @@ -164,12 +156,12 @@ RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const return RicSummaryCaseRestartDialogResult(false, READ_SINGLE, QStringList(), false); } - QStringList files({ toInternalSeparator(summaryHeaderFile) }); + QStringList files({ RiaFilePathTools::toInternalSeparator(summaryHeaderFile) }); if (dialog.selectedOption() == SEPARATE_CASES) { for (const auto& fileInfo : fileInfos) { - files.push_back(toInternalSeparator(fileInfo.fileName)); + files.push_back(RiaFilePathTools::toInternalSeparator(fileInfo.fileName)); } } return RicSummaryCaseRestartDialogResult(true, dialog.selectedOption(), files, dialog.applyToAllSelected()); @@ -244,20 +236,3 @@ void RicSummaryCaseRestartDialog::slotDialogCancelClicked() /// Internal functions //-------------------------------------------------------------------------------------------------- -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString toInternalSeparator(const QString& path) -{ - QString currNativeSep = QDir::separator(); - - if (currNativeSep == "/") - { - // On Linux like system -> Do not convert separators - return path; - } - - // On other systems (i.e. Windows) -> Convert to internal separator (/) - QString output = path; - return output.replace(QString("\\"), SEPARATOR); -} diff --git a/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp b/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp index 4de746e4d0..28470afd5a 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp @@ -18,6 +18,7 @@ #include "RifReaderEclipseSummary.h" #include "RiaStringEncodingTools.h" +#include "RiaFilePathTools.h" #include "RifReaderEclipseOutput.h" #include "RifEclipseSummaryTools.h" @@ -416,7 +417,7 @@ RifRestartFileInfo RifReaderEclipseSummary::getRestartFile(const QString& header 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)); + restartFile.fileName = RiaFilePathTools::toInternalSeparator(RiaStringEncodingTools::fromNativeEncoded(smspec_header)); util_safe_free(smspec_header); ecl_sum = openEclSum(headerFileName, false);