mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #2456 from akva2/serialize_scalars_header
changed: move the serialization template definitions for generic scalars
This commit is contained in:
commit
1d2b24f54f
@ -255,33 +255,6 @@ std::size_t packSize(const T* data, std::size_t l, Dune::MPIHelper::MPICommunica
|
|||||||
return packSize(data, l, comm, typename std::is_pod<T>::type());
|
return packSize(data, l, comm, typename std::is_pod<T>::type());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator,
|
|
||||||
std::integral_constant<bool, false>)
|
|
||||||
{
|
|
||||||
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator comm,
|
|
||||||
std::integral_constant<bool, true>)
|
|
||||||
{
|
|
||||||
#if HAVE_MPI
|
|
||||||
int size{};
|
|
||||||
MPI_Pack_size(1, Dune::MPITraits<T>::getType(), comm, &size);
|
|
||||||
return size;
|
|
||||||
#else
|
|
||||||
(void) comm;
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
std::size_t packSize(const T& data, Dune::MPIHelper::MPICommunicator comm)
|
|
||||||
{
|
|
||||||
return packSize(data, comm, typename std::is_pod<T>::type());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
std::size_t packSize(const std::pair<T1,T2>& data, Dune::MPIHelper::MPICommunicator comm)
|
std::size_t packSize(const std::pair<T1,T2>& data, Dune::MPIHelper::MPICommunicator comm)
|
||||||
{
|
{
|
||||||
@ -1862,35 +1835,6 @@ void pack(const T* data, std::size_t l, std::vector<char>& buffer, int& position
|
|||||||
pack(data, l, buffer, position, comm, typename std::is_pod<T>::type());
|
pack(data, l, buffer, position, comm, typename std::is_pod<T>::type());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void pack(const T&, std::vector<char>&, int&,
|
|
||||||
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>)
|
|
||||||
{
|
|
||||||
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void pack(const T& data, std::vector<char>& buffer, int& position,
|
|
||||||
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>)
|
|
||||||
{
|
|
||||||
#if HAVE_MPI
|
|
||||||
MPI_Pack(&data, 1, Dune::MPITraits<T>::getType(), buffer.data(),
|
|
||||||
buffer.size(), &position, comm);
|
|
||||||
#else
|
|
||||||
(void) data;
|
|
||||||
(void) comm;
|
|
||||||
(void) buffer;
|
|
||||||
(void) position;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void pack(const T& data, std::vector<char>& buffer, int& position,
|
|
||||||
Dune::MPIHelper::MPICommunicator comm)
|
|
||||||
{
|
|
||||||
pack(data, buffer, position, comm, typename std::is_pod<T>::type());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
void pack(const std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
void pack(const std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm)
|
Dune::MPIHelper::MPICommunicator comm)
|
||||||
@ -3555,35 +3499,6 @@ void unpack(T* data, const std::size_t& l, std::vector<char>& buffer, int& posit
|
|||||||
unpack(data, l, buffer, position, comm, typename std::is_pod<T>::type());
|
unpack(data, l, buffer, position, comm, typename std::is_pod<T>::type());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void unpack(T&, std::vector<char>&, int&,
|
|
||||||
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>)
|
|
||||||
{
|
|
||||||
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void unpack(T& data, std::vector<char>& buffer, int& position,
|
|
||||||
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>)
|
|
||||||
{
|
|
||||||
#if HAVE_MPI
|
|
||||||
MPI_Unpack(buffer.data(), buffer.size(), &position, &data, 1,
|
|
||||||
Dune::MPITraits<T>::getType(), comm);
|
|
||||||
#else
|
|
||||||
(void) data;
|
|
||||||
(void) comm;
|
|
||||||
(void) buffer;
|
|
||||||
(void) position;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void unpack(T& data, std::vector<char>& buffer, int& position,
|
|
||||||
Dune::MPIHelper::MPICommunicator comm)
|
|
||||||
{
|
|
||||||
unpack(data, buffer, position, comm, typename std::is_pod<T>::type());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
void unpack(std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
void unpack(std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm)
|
Dune::MPIHelper::MPICommunicator comm)
|
||||||
|
@ -193,14 +193,30 @@ std::size_t packSize(const T* data, std::size_t l, Dune::MPIHelper::MPICommunica
|
|||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator,
|
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator,
|
||||||
std::integral_constant<bool, false>);
|
std::integral_constant<bool, false>)
|
||||||
|
{
|
||||||
|
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator comm,
|
std::size_t packSize(const T&, Dune::MPIHelper::MPICommunicator comm,
|
||||||
std::integral_constant<bool, true>);
|
std::integral_constant<bool, true>)
|
||||||
|
{
|
||||||
|
#if HAVE_MPI
|
||||||
|
int size{};
|
||||||
|
MPI_Pack_size(1, Dune::MPITraits<T>::getType(), comm, &size);
|
||||||
|
return size;
|
||||||
|
#else
|
||||||
|
(void) comm;
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
std::size_t packSize(const T& data, Dune::MPIHelper::MPICommunicator comm);
|
std::size_t packSize(const T& data, Dune::MPIHelper::MPICommunicator comm)
|
||||||
|
{
|
||||||
|
return packSize(data, comm, typename std::is_pod<T>::type());
|
||||||
|
}
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
std::size_t packSize(const std::pair<T1,T2>& data, Dune::MPIHelper::MPICommunicator comm);
|
std::size_t packSize(const std::pair<T1,T2>& data, Dune::MPIHelper::MPICommunicator comm);
|
||||||
@ -271,16 +287,32 @@ void pack(const T* data, std::size_t l, std::vector<char>& buffer, int& position
|
|||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void pack(const T&, std::vector<char>&, int&,
|
void pack(const T&, std::vector<char>&, int&,
|
||||||
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>);
|
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>)
|
||||||
|
{
|
||||||
|
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void pack(const T& data, std::vector<char>& buffer, int& position,
|
void pack(const T& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>);
|
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>)
|
||||||
|
{
|
||||||
|
#if HAVE_MPI
|
||||||
|
MPI_Pack(&data, 1, Dune::MPITraits<T>::getType(), buffer.data(),
|
||||||
|
buffer.size(), &position, comm);
|
||||||
|
#else
|
||||||
|
(void) data;
|
||||||
|
(void) comm;
|
||||||
|
(void) buffer;
|
||||||
|
(void) position;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void pack(const T& data, std::vector<char>& buffer, int& position,
|
void pack(const T& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm);
|
Dune::MPIHelper::MPICommunicator comm)
|
||||||
|
{
|
||||||
|
pack(data, buffer, position, comm, typename std::is_pod<T>::type());
|
||||||
|
}
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
void pack(const std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
void pack(const std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
||||||
@ -364,15 +396,32 @@ void unpack(T* data, const std::size_t& l, std::vector<char>& buffer, int& posit
|
|||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void unpack(T&, std::vector<char>&, int&,
|
void unpack(T&, std::vector<char>&, int&,
|
||||||
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>);
|
Dune::MPIHelper::MPICommunicator, std::integral_constant<bool, false>)
|
||||||
|
{
|
||||||
|
OPM_THROW(std::logic_error, "Packing not (yet) supported for this non-pod type.");
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void unpack(T& data, std::vector<char>& buffer, int& position,
|
void unpack(T& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>);
|
Dune::MPIHelper::MPICommunicator comm, std::integral_constant<bool, true>)
|
||||||
|
{
|
||||||
|
#if HAVE_MPI
|
||||||
|
MPI_Unpack(buffer.data(), buffer.size(), &position, &data, 1,
|
||||||
|
Dune::MPITraits<T>::getType(), comm);
|
||||||
|
#else
|
||||||
|
(void) data;
|
||||||
|
(void) comm;
|
||||||
|
(void) buffer;
|
||||||
|
(void) position;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void unpack(T& data, std::vector<char>& buffer, int& position,
|
void unpack(T& data, std::vector<char>& buffer, int& position,
|
||||||
Dune::MPIHelper::MPICommunicator comm);
|
Dune::MPIHelper::MPICommunicator comm)
|
||||||
|
{
|
||||||
|
unpack(data, buffer, position, comm, typename std::is_pod<T>::type());
|
||||||
|
}
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
void unpack(std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
void unpack(std::pair<T1,T2>& data, std::vector<char>& buffer, int& position,
|
||||||
|
Loading…
Reference in New Issue
Block a user