52#if defined(OpenPFC_ENABLE_CUDA)
53#include <cuda_runtime.h>
71template <>
inline MPI_Datatype get_mpi_type<size_t>() {
72 return MPI_UNSIGNED_LONG_LONG;
89template <
typename BackendTag,
typename T>
109 std::vector<size_t> indices;
112 if constexpr (std::is_same_v<BackendTag, backend::CpuTag>) {
114 indices.resize(size);
121#if defined(OpenPFC_ENABLE_CUDA)
122 else if constexpr (std::is_same_v<BackendTag, backend::CudaTag>) {
124 indices.resize(size);
154template <
typename BackendTag,
typename T>
175 std::vector<size_t> indices(size);
176 std::vector<T> data(size);
178 int count =
static_cast<int>(size);
202template <
typename BackendTag,
typename T>
221 if constexpr (std::is_same_v<BackendTag, backend::CpuTag>) {
227#if defined(OpenPFC_ENABLE_CUDA)
228 else if constexpr (std::is_same_v<BackendTag, backend::CudaTag>) {
253template <
typename BackendTag,
typename T>
270 std::vector<T> data(size);
273 int count =
static_cast<int>(size);
277 if constexpr (std::is_same_v<BackendTag, backend::CpuTag>) {
279 std::copy(data.begin(), data.end(),
sparse_vector.data().data());
281#if defined(OpenPFC_ENABLE_CUDA)
282 else if constexpr (std::is_same_v<BackendTag, backend::CudaTag>) {
Sparse vector for indexed data views.
Definition sparse_vector.hpp:66
void receive(core::SparseVector< BackendTag, T > &sparse_vector, int sender_rank, int receiver_rank, MPI_Comm comm, int tag=0)
Receive SparseVector (both indices and data) - setup phase.
Definition exchange.hpp:155
void send_data(const core::SparseVector< BackendTag, T > &sparse_vector, int sender_rank, int receiver_rank, MPI_Comm comm, int tag=0)
Send only data values (indices already known) - runtime phase.
Definition exchange.hpp:203
void send(const core::SparseVector< BackendTag, T > &sparse_vector, int sender_rank, int receiver_rank, MPI_Comm comm, int tag=0)
Send SparseVector (both indices and data) - setup phase.
Definition exchange.hpp:90
MPI_Datatype get_mpi_type()
Get MPI datatype for type T.
void receive_data(core::SparseVector< BackendTag, T > &sparse_vector, int sender_rank, int receiver_rank, MPI_Comm comm, int tag=0)
Receive only data values (indices already known) - runtime phase.
Definition exchange.hpp:254
Sparse vector for halo exchange and indexed data views.
Represents the global simulation domain (the "world").
Definition world.hpp:91