diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index 4f93a5064..7f6606e4c 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -629,6 +629,9 @@ if(HDF5_FOUND) opm/simulators/utils/HDF5Serializer.hpp opm/simulators/utils/HDF5File.hpp ) + list(APPEND MAIN_SOURCE_FILES + opm/simulators/utils/HDF5Serializer.cpp + ) endif() list (APPEND EXAMPLE_SOURCE_FILES diff --git a/opm/simulators/utils/HDF5Serializer.cpp b/opm/simulators/utils/HDF5Serializer.cpp new file mode 100644 index 000000000..38b852e17 --- /dev/null +++ b/opm/simulators/utils/HDF5Serializer.cpp @@ -0,0 +1,71 @@ +/* + This file is part of the Open Porous Media project (OPM). + + OPM 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 2 of the License, or + (at your option) any later version. + + OPM 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 for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +#include +#include + +#include +#include + +namespace Opm { + +void HDF5Serializer::writeHeader(const std::string& simulator_name, + const std::string& module_version, + const std::string& time_stamp, + const std::string& case_name, + const std::string& params, + int num_procs) +{ + try { + this->pack(simulator_name, module_version, time_stamp, + case_name, params, num_procs); + } catch (...) { + m_packSize = std::numeric_limits::max(); + throw; + } + m_h5file.write("/", "simulator_info", m_buffer, HDF5File::DataSetMode::ROOT_ONLY); +} + +int HDF5Serializer::lastReportStep() const +{ + const auto entries = m_h5file.list("/report_step"); + int last = -1; + for (const auto& entry : entries) { + int num = std::atoi(entry.c_str()); + last = std::max(last, num); + } + + return last; +} + +std::vector HDF5Serializer::reportSteps() const +{ + const auto entries = m_h5file.list("/report_step"); + std::vector result(entries.size()); + std::transform(entries.begin(), entries.end(), result.begin(), + [](const std::string& input) + { + return std::atoi(input.c_str()); + }); + std::sort(result.begin(), result.end()); + return result; +} + +} diff --git a/opm/simulators/utils/HDF5Serializer.hpp b/opm/simulators/utils/HDF5Serializer.hpp index 13f9fd79d..22319a3e9 100644 --- a/opm/simulators/utils/HDF5Serializer.hpp +++ b/opm/simulators/utils/HDF5Serializer.hpp @@ -24,12 +24,12 @@ #include #include -#include #include #include -#include -#include +#include +#include +#include namespace Opm { @@ -55,7 +55,7 @@ public: try { this->pack(data); } catch (...) { - m_packSize = std::numeric_limits::max(); + m_packSize = std::numeric_limits::max(); throw; } @@ -74,17 +74,7 @@ public: const std::string& time_stamp, const std::string& case_name, const std::string& params, - int num_procs) - { - try { - this->pack(simulator_name, module_version, time_stamp, - case_name, params, num_procs); - } catch (...) { - m_packSize = std::numeric_limits::max(); - throw; - } - m_h5file.write("/", "simulator_info", m_buffer, HDF5File::DataSetMode::ROOT_ONLY); - } + int num_procs); //! \brief Read data and deserialize from restart file. //! \tparam T Type of class to read @@ -100,31 +90,10 @@ public: } //! \brief Returns the last report step stored in file. - int lastReportStep() const - { - const auto entries = m_h5file.list("/report_step"); - int last = -1; - for (const auto& entry : entries) { - int num = std::atoi(entry.c_str()); - last = std::max(last, num); - } - - return last; - } + int lastReportStep() const; //! \brief Returns a list of report steps stored in restart file. - std::vector reportSteps() const - { - const auto entries = m_h5file.list("/report_step"); - std::vector result(entries.size()); - std::transform(entries.begin(), entries.end(), result.begin(), - [](const std::string& input) - { - return std::atoi(input.c_str()); - }); - std::sort(result.begin(), result.end()); - return result; - } + std::vector reportSteps() const; private: const Serialization::MemPacker m_packer_priv{}; //!< Packer instance