diff --git a/src/utils/CastArray.hpp b/src/utils/CastArray.hpp index d329b4ef35f70f3a612ca430c45d0ec23bb7ed9d..71bfc246f81d4b8a2b54afc8d914e08447244ed3 100644 --- a/src/utils/CastArray.hpp +++ b/src/utils/CastArray.hpp @@ -32,6 +32,18 @@ class [[nodiscard]] CastArray return m_values[i]; } + template <typename ImageDataType, typename ImageCastDataType> + friend PUGS_INLINE void copy_to(const CastArray& source_array, + CastArray<ImageDataType, ImageCastDataType>& image_array) + { + static_assert(std::is_same_v<std::remove_const_t<CastDataType>, ImageCastDataType>); + static_assert(not std::is_const_v<ImageCastDataType>); + + Assert(source_array.size() == image_array.size()); + + std::copy(source_array.m_values, source_array.m_values + source_array.size(), &image_array[0]); + } + PUGS_INLINE CastArray& operator=(const CastArray&) = default; diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp index 69b144224d1afbb905ba5dee2d28ad03a4277c94..75ef1732a496e367917b55b86e4f2075570acd86 100644 --- a/src/utils/Messenger.hpp +++ b/src/utils/Messenger.hpp @@ -135,7 +135,7 @@ class Messenger MPI_Gather(data_address, data_array.size(), mpi_datatype, gather_address, data_array.size(), mpi_datatype, rank, MPI_COMM_WORLD); #else // PUGS_HAS_MPI - value_copy(data_array, gather_array); + copy_to(data_array, gather_array); #endif // PUGS_HAS_MPI } @@ -176,7 +176,7 @@ class Messenger MPI_Gatherv(data_address, data_array.size(), mpi_datatype, gather_address, sizes_address, positions_address, mpi_datatype, rank, MPI_COMM_WORLD); #else // PUGS_HAS_MPI - value_copy(data_array, gather_array); + copy_to(data_array, gather_array); #endif // PUGS_HAS_MPI } @@ -221,7 +221,7 @@ class Messenger MPI_Allgather(data_address, data_array.size(), mpi_datatype, gather_address, data_array.size(), mpi_datatype, MPI_COMM_WORLD); #else // PUGS_HAS_MPI - value_copy(data_array, gather_array); + copy_to(data_array, gather_array); #endif // PUGS_HAS_MPI } @@ -261,7 +261,7 @@ class Messenger MPI_Allgatherv(data_address, data_array.size(), mpi_datatype, gather_address, sizes_address, positions_address, mpi_datatype, MPI_COMM_WORLD); #else // PUGS_HAS_MPI - value_copy(data_array, gather_array); + copy_to(data_array, gather_array); #endif // PUGS_HAS_MPI } @@ -322,7 +322,7 @@ class Messenger MPI_Alltoall(sent_address, count, mpi_datatype, recv_address, count, mpi_datatype, MPI_COMM_WORLD); #else // PUGS_HAS_MPI - value_copy(sent_array, recv_array); + copy_to(sent_array, recv_array); #endif // PUGS_HAS_MPI } @@ -377,7 +377,7 @@ class Messenger Assert(sent_array_list.size() == 1); Assert(recv_array_list.size() == 1); - value_copy(sent_array_list[0], recv_array_list[0]); + copy_to(sent_array_list[0], recv_array_list[0]); #endif // PUGS_HAS_MPI }