From 777a231606d5dee0703f135af1e4900c3535a79c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 3 Oct 2017 16:05:54 +0200 Subject: [PATCH] #1960 Cache timestep times etc in the unified restart reader --- .../RifEclipseUnifiedRestartFileAccess.cpp | 82 ++++++++++++------- .../RifEclipseUnifiedRestartFileAccess.h | 9 +- 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.cpp b/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.cpp index 415a6e93d3..2cd78a1de0 100644 --- a/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.cpp +++ b/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.cpp @@ -35,6 +35,7 @@ #include "cafUtils.h" #include +// #include "cvfTrace.h" //-------------------------------------------------------------------------------------------------- /// Constructor @@ -143,11 +144,47 @@ bool RifEclipseUnifiedRestartFileAccess::useResultIndexFile() const return readerSettings->useResultIndexFile(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RifEclipseUnifiedRestartFileAccess::extractTimestepsFromEclipse() +{ + m_timeSteps.clear(); + m_daysSinceSimulationStart.clear(); + m_reportNr.clear(); + + if ( openFile() ) + { + RifEclipseOutputFileTools::timeSteps(m_ecl_file, &m_timeSteps, &m_daysSinceSimulationStart); + + // 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); // + + m_reportNr.push_back(report_nr); + } // + } // + ecl_file_pop_block(m_ecl_file); // <------------------------------------------------------- + } + + } +} + //-------------------------------------------------------------------------------------------------- /// Close file //-------------------------------------------------------------------------------------------------- void RifEclipseUnifiedRestartFileAccess::close() { + m_timeSteps.clear(); + m_daysSinceSimulationStart.clear(); } //-------------------------------------------------------------------------------------------------- @@ -155,16 +192,12 @@ void RifEclipseUnifiedRestartFileAccess::close() //-------------------------------------------------------------------------------------------------- size_t RifEclipseUnifiedRestartFileAccess::timeStepCount() { - if (!openFile()) + if (m_timeSteps.size() == 0) { - return 0; + extractTimestepsFromEclipse(); } - std::vector timeSteps; - std::vector daysSinceSimulationStart; - - this->timeSteps(&timeSteps, &daysSinceSimulationStart); - - return timeSteps.size(); + + return m_timeSteps.size(); } //-------------------------------------------------------------------------------------------------- @@ -172,10 +205,13 @@ size_t RifEclipseUnifiedRestartFileAccess::timeStepCount() //-------------------------------------------------------------------------------------------------- void RifEclipseUnifiedRestartFileAccess::timeSteps(std::vector* timeSteps, std::vector* daysSinceSimulationStart) { - if (openFile()) + if ( m_timeSteps.size() == 0 ) { - RifEclipseOutputFileTools::timeSteps(m_ecl_file, timeSteps, daysSinceSimulationStart); + extractTimestepsFromEclipse(); } + + *timeSteps = m_timeSteps; + *daysSinceSimulationStart = m_daysSinceSimulationStart; } @@ -275,7 +311,9 @@ void RifEclipseUnifiedRestartFileAccess::readWellData(well_info_type* well_info, if (openFile()) { + // cvf::Trace::show("well_info_add_UNRST_wells Start"); well_info_add_UNRST_wells(well_info, m_ecl_file, importCompleteMswData); + // cvf::Trace::show("well_info_add_UNRST_wells End"); } } @@ -302,29 +340,11 @@ int RifEclipseUnifiedRestartFileAccess::readUnitsType() //-------------------------------------------------------------------------------------------------- std::vector RifEclipseUnifiedRestartFileAccess::reportNumbers() { - std::vector reportNr; - - if (openFile()) + if (m_timeSteps.size() == 0) { - // 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); // <------------------------------------------------------- - } + extractTimestepsFromEclipse(); } - return reportNr; + return m_reportNr; } diff --git a/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.h b/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.h index 18546c2e3b..629681148b 100644 --- a/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.h +++ b/ApplicationCode/FileInterface/RifEclipseUnifiedRestartFileAccess.h @@ -62,6 +62,11 @@ private: bool useResultIndexFile() const; private: - QString m_filename; - ecl_file_type* m_ecl_file; + QString m_filename; + ecl_file_type* m_ecl_file; + + void extractTimestepsFromEclipse(); + std::vector m_timeSteps; + std::vector m_daysSinceSimulationStart; + std::vector m_reportNr; };