1#ifndef CS_REDISTRIBUTE_H
2#define CS_REDISTRIBUTE_H
79 if (buffer ==
nullptr || db ==
nullptr)
86 T *send_data =
nullptr;
93 for (
int j = 0; j < stride; j++)
94 send_data[stride*i+j] = _buffer[stride*
id+j];
113 if (local == -1)
continue;
115 for (
int j = 0; j < stride; j++)
116 _buffer[stride*local+j] = recv_data[stride*ordered+j];
145 if (recv_buf ==
nullptr || db ==
nullptr)
148 T *_send_buf =
nullptr;
156 for (
int j = 0; j < stride; j++)
157 _send_buf[stride*i+j] = send_buf[stride*
id+j];
160 send_buf = _send_buf;
174 if (local == -1)
continue;
176 for (
int j = 0; j < stride; j++)
177 recv_buf[stride*local+j] = _recv_buf[stride*ordered+j];
202 T *_buffer =
nullptr;
211 idx_s[i] = _idx[
id+1] - _idx[id];
226 ctx.set_use_gpu(
false);
232 T* send_data =
nullptr;
235 T* _send_data = send_data;
240 for (
cs_lnum_t j = _idx[
id]; j < _idx[
id+1]; j++)
241 *_send_data++ = _buffer[j];
244 assert(_send_data - send_data == idx_s[db->
n_send]);
260 if (local == -1)
continue;
262 _idx[local] = idx_r[ordered];
287 if (local == -1)
continue;
289 T *dst = _buffer + _idx[local];
291 for (
cs_lnum_t j = idx_r[ordered]; j < idx_r[ordered+1]; j++)
292 *dst++ = _recv_data[j];
Definition: cs_dispatch.h:2288
void * cs_all_to_all_copy_array(cs_all_to_all_t *d, cs_datatype_t datatype, int stride, bool reverse, const void *src_data, void *dest_data)
Communicate array data using all-to-all distributor.
Definition: cs_all_to_all.cpp:2786
void * cs_all_to_all_copy_indexed(cs_all_to_all_t *d, cs_datatype_t datatype, bool reverse, const cs_lnum_t *src_index, const void *src_data, const cs_lnum_t *dest_index, void *dest_data)
Communicate local index using all-to-all distributor.
Definition: cs_all_to_all.cpp:3159
struct _cs_all_to_all_t cs_all_to_all_t
Definition: cs_all_to_all.h:77
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
#define CS_FREE(_ptr)
Definition: cs_mem.h:151
#define CS_REALLOC(_ptr, _ni, _type)
Reallocate memory for _ni elements of type _type.
Definition: cs_mem.h:111
#define CS_MALLOC(_ptr, _ni, _type)
Allocate memory for _ni elements of type _type.
Definition: cs_mem.h:75
void cs_distributor_destroy(cs_distributor_t **db)
Destroy a distributor structure.
Definition: cs_redistribute.cpp:729
void cs_distribute_buffer_indexed(const cs_distributor_t *db, cs_lnum_t *idx[], T *buffer[])
Distribute an indexed array and its corresponding index array using the distributor structure.
Definition: cs_redistribute.h:198
void cs_distribute_buffer(const cs_distributor_t *db, const int stride, T *buffer[])
Distribute a buffer using the distributor structure.
Definition: cs_redistribute.h:75
void cs_redistribute(const int cell_dest_rank[], cs_distributor_t **cd, cs_distributor_t **ifd, cs_distributor_t **bfd, cs_distributor_t **vd)
Redistribute mesh and field data based on a cell destination rank map.
Definition: cs_redistribute.cpp:770
void cs_distribute_buffer_allocated(const cs_distributor_t *db, const int stride, const T send_buf[], T recv_buf[])
Distribute a buffer using the distributor structure.
Definition: cs_redistribute.h:140
void count_to_index(cs_dispatch_context &ctx, cs_lnum_t n, cs_lnum_t a[], size_t tmp_size=0, void *tmp_storage=nullptr)
Definition: cs_redistribute.h:43
cs_lnum_t * ordered_to_local
Definition: cs_redistribute.h:50
cs_lnum_t n_send
Definition: cs_redistribute.h:45
cs_lnum_t * recv_order
Definition: cs_redistribute.h:49
cs_all_to_all_t * d
Definition: cs_redistribute.h:44
cs_lnum_t * send_list
Definition: cs_redistribute.h:48
cs_lnum_t n_uniq
Definition: cs_redistribute.h:47
cs_lnum_t n_recv
Definition: cs_redistribute.h:46