/* Copyright 2019 Equinor AS. 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 3 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 . */ #ifndef PARALLEL_RESTART_HPP #define PARALLEL_RESTART_HPP #if HAVE_MPI #include #endif #include #include #include #include #include #include #include namespace Opm { namespace Mpi { template std::size_t packSize(const T*, std::size_t, Dune::MPIHelper::MPICommunicator, std::integral_constant); template std::size_t packSize(const T*, std::size_t l, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template std::size_t packSize(const T* data, std::size_t l, Dune::MPIHelper::MPICommunicator comm); template std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator, std::integral_constant); template std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template std::size_t packSize(const T& data, Dune::MPIHelper::MPICommunicator comm); template std::size_t packSize(const std::pair& data, Dune::MPIHelper::MPICommunicator comm); template std::size_t packSize(const std::vector& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const char* str, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const std::string& str, Dune::MPIHelper::MPICommunicator comm); template std::size_t packSize(const std::map& data, Dune::MPIHelper::MPICommunicator comm); template std::size_t packSize(const std::unordered_map& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::Rates& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::Connection& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::Segment& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::Well& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::CellData& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const RestartKey& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::Solution& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const data::WellRates& data, Dune::MPIHelper::MPICommunicator comm); std::size_t packSize(const RestartValue& data, Dune::MPIHelper::MPICommunicator comm); ////// pack routines template void pack(const T*, std::size_t, std::vector&, int&, Dune::MPIHelper::MPICommunicator, std::integral_constant); template void pack(const T* data, std::size_t l, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template void pack(const T* data, std::size_t l, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void pack(const T&, std::vector&, int&, Dune::MPIHelper::MPICommunicator, std::integral_constant); template void pack(const T& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template void pack(const T& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void pack(const std::pair& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void pack(const std::vector& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const char* str, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const std::string& str, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void pack(const std::map& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void pack(const std::unordered_map& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::Rates& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::Connection& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::Segment& data,std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::Well& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const RestartKey& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::CellData& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::Solution& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const data::WellRates& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void pack(const RestartValue& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); /// unpack routines template void unpack(T*, const std::size_t&, std::vector&, int&, Dune::MPIHelper::MPICommunicator, std::integral_constant); template void unpack(T* data, const std::size_t& l, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template void unpack(T* data, const std::size_t& l, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void unpack(T&, std::vector&, int&, Dune::MPIHelper::MPICommunicator, std::integral_constant); template void unpack(T& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm, std::integral_constant); template void unpack(T& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void unpack(std::pair& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void unpack(std::vector& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(char* str, std::size_t length, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(std::string& str, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void unpack(std::map& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); template void unpack(std::unordered_map& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::Rates& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::Connection& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::Segment& data,std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::Well& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(RestartKey& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::CellData& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::Solution& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(data::WellRates& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); void unpack(RestartValue& data, std::vector& buffer, int& position, Dune::MPIHelper::MPICommunicator comm); } // end namespace Mpi RestartValue loadParallelRestart(const EclipseIO* eclIO, SummaryState& summaryState, const std::vector& solutionKeys, const std::vector& extraKeys, Dune::CollectiveCommunication comm); } // end namespace Opm #endif // PARALLEL_RESTART_HPP