19 double *** src_fields,
double *** src_frac_masks,
double ** tgt_field,
20 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
23 double *** src_fields,
double *** src_frac_masks,
24 int is_target,
double frac_mask_fallback_value,
25 double scale_factor,
double scale_summand);
28 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
31 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
107 size_t collection_size,
112 size_t tgt_count,
size_t * prefix_num_src_per_tgt,
double * weights,
113 size_t * src_field_idx,
size_t * src_idx,
size_t num_src_fields,
114 int with_frac_mask,
int * ref_count) {
117 xmalloc(1 *
sizeof(*mvp_at_src));
151 size_t collection_size, Xt_redist * halo_redists,
152 size_t tgt_count,
size_t * num_src_per_tgt,
double * weights,
153 size_t * src_field_idx,
size_t * src_idx,
154 size_t num_src_fields, Xt_redist result_redist_,
int with_frac_mask) {
156 size_t total_num_src = 0;
157 size_t * prefix_num_src_per_tgt =
158 xmalloc((tgt_count + 1) *
sizeof(*prefix_num_src_per_tgt));
159 for (
size_t i = 0; i < tgt_count; ++i) {
160 prefix_num_src_per_tgt[i] = total_num_src;
161 total_num_src += num_src_per_tgt[i];
163 prefix_num_src_per_tgt[tgt_count] = total_num_src;
169 halo_redists, num_src_fields,
170 with_frac_mask?2*collection_size:collection_size,
RECV_BUFFER),
174 halo_redists, num_src_fields,
175 collection_size, with_frac_mask,
"source to halo"),
177 &result_redist_, 1, collection_size, 0,
"result to target"),
178 tgt_count, prefix_num_src_per_tgt,
179 (weights != NULL)?
COPY_DATA(weights, total_num_src):NULL,
182 num_src_fields, with_frac_mask, NULL);
205 double *** src_fields,
double *** src_frac_masks,
double ** tgt_field,
206 double frac_mask_fallback_value,
double scale_factor,
double scale_summand) {
213 "yac_interpolation_sum_mvp_at_src_execute");
234 src_frac_masks[i][j];
238 sum_mvp_at_src->
src2halo, (
double const **)temp_src_fields,
239 halo_buffers,
"yac_interpolation_sum_mvp_at_src_execute");
242 (
double const * restrict **)src_fields,
244 (
double const * restrict *)halo_buffers,
245 (
double const * restrict *)(
247 results, NULL, sum_mvp_at_src->
tgt_count,
251 frac_mask_fallback_value, scale_factor, scale_summand);
256 sum_mvp_at_src->
result2tgt, (
double const **)results, tgt_field,
257 "yac_interpolation_sum_mvp_at_src_execute");
262 double *** src_fields,
double *** src_frac_masks,
int is_target,
263 double frac_mask_fallback_value,
double scale_factor,
double scale_summand) {
273 "yac_interpolation_sum_mvp_at_src_execute_put") ==
277 "yac_interpolation_sum_mvp_at_src_execute_put");
294 src_frac_masks[i][j];
299 sum_mvp_at_src->
src2halo, (
double const **)temp_src_fields, halo_buffers,
300 "yac_interpolation_sum_mvp_at_src_execute_put");
305 (
double const * restrict **)src_fields,
307 (
double const * restrict *)halo_buffers,
308 (
double const * restrict *)(
310 results, NULL, sum_mvp_at_src->
tgt_count,
314 scale_factor, scale_summand);
317 sum_mvp_at_src->
result2tgt, (
double const **)results,
318 "yac_interpolation_sum_mvp_at_src_execute_put");
323 double frac_mask_fallback_value,
double scale_factor,
double scale_summand) {
325 UNUSED(frac_mask_fallback_value);
334 "yac_interpolation_sum_mvp_at_src_execute_get");
339 double frac_mask_fallback_value,
double scale_factor,
double scale_summand) {
341 UNUSED(frac_mask_fallback_value);
351 "yac_interpolation_sum_mvp_at_src_execute_get_async") ==
355 "yac_interpolation_sum_mvp_at_src_execute_get_async");
359 "yac_interpolation_sum_mvp_at_src_execute_get_async");
371 "yac_interpolation_sum_mvp_at_src_execute_put_test");
383 "yac_interpolation_sum_mvp_at_src_execute_get_test");
394 "yac_interpolation_sum_mvp_at_src_execute_wait");
425 if (interp == NULL)
return;
431 sum_mvp_at_src->
result2tgt,
"yac_interpolation_sum_mvp_at_src_delete");
434 sum_mvp_at_src->
src2halo,
"yac_interpolation_sum_mvp_at_src_delete");
446 free(sum_mvp_at_src);
int yac_interpolation_exchange_put_test(struct yac_interpolation_exchange *exchange, char const *routine_name)
int yac_interpolation_exchange_is_target(struct yac_interpolation_exchange *exchange)
void yac_interpolation_exchange_execute_get_async(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
struct yac_interpolation_exchange * yac_interpolation_exchange_copy(struct yac_interpolation_exchange *exchange)
void yac_interpolation_exchange_delete(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_get(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
void yac_interpolation_exchange_wait(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_put(struct yac_interpolation_exchange *exchange, double const **send_data, char const *routine_name)
struct yac_interpolation_exchange * yac_interpolation_exchange_new(Xt_redist *redists, size_t num_fields, size_t collection_size, int with_frac_mask, char const *name)
void yac_interpolation_exchange_execute(struct yac_interpolation_exchange *exchange, double const **send_data_, double **recv_data_, char const *routine_name)
enum YAC_INTERP_EXCH_STATUS yac_interpolation_exchange_status(struct yac_interpolation_exchange *exchange, char const *routine_name)
int yac_interpolation_exchange_get_test(struct yac_interpolation_exchange *exchange, char const *routine_name)
int yac_interpolation_exchange_is_source(struct yac_interpolation_exchange *exchange)
static int yac_interpolation_sum_mvp_at_src_is_target(struct yac_interpolation_type *interp)
static struct yac_interpolation_type_vtable const interpolation_sum_mvp_at_src_vtable
static void yac_interpolation_sum_mvp_at_src_execute_get(struct yac_interpolation_type *interp, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static void yac_interpolation_sum_mvp_at_src_execute_wait(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_src_execute_put(struct yac_interpolation_type *interp, double ***src_fields, double ***src_frac_masks, int is_target, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static struct yac_interpolation_type * yac_interpolation_sum_mvp_at_src_copy(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_src_execute(struct yac_interpolation_type *interp, double ***src_fields, double ***src_frac_masks, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static int yac_interpolation_sum_mvp_at_src_execute_put_test(struct yac_interpolation_type *interp)
static int yac_interpolation_sum_mvp_at_src_is_source(struct yac_interpolation_type *interp)
struct yac_interpolation_type * yac_interpolation_sum_mvp_at_src_new(size_t collection_size, Xt_redist *halo_redists, size_t tgt_count, size_t *num_src_per_tgt, double *weights, size_t *src_field_idx, size_t *src_idx, size_t num_src_fields, Xt_redist result_redist_, int with_frac_mask)
static void yac_interpolation_sum_mvp_at_src_delete(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_src_execute_get_async(struct yac_interpolation_type *interp, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static int yac_interpolation_sum_mvp_at_src_execute_get_test(struct yac_interpolation_type *interp)
static struct yac_interpolation_type * yac_interpolation_sum_mvp_at_src_new_(size_t collection_size, struct yac_interpolation_buffer halo_data, struct yac_interpolation_buffer result_data, struct yac_interpolation_exchange *src2halo, struct yac_interpolation_exchange *result2tgt, size_t tgt_count, size_t *prefix_num_src_per_tgt, double *weights, size_t *src_field_idx, size_t *src_idx, size_t num_src_fields, int with_frac_mask, int *ref_count)
struct yac_interpolation_buffer yac_interpolation_buffer_copy(struct yac_interpolation_buffer src, size_t num_fields, size_t collection_size)
void yac_interpolation_buffer_free(struct yac_interpolation_buffer *buffer)
struct yac_interpolation_buffer yac_interpolation_buffer_init(Xt_redist *redists, size_t num_fields, size_t collection_size, enum yac_interpolation_buffer_type type)
static void compute_tgt_field_wgt(double const *restrict **src_fields, double const *restrict **src_frac_masks, double const *restrict *remote_src_fields, double const *restrict *remote_src_frac_masks, double *restrict *tgt_field, size_t const *restrict tgt_pos, size_t tgt_count, size_t const *restrict prefix_num_src_per_tgt, double const *restrict weights, size_t const *restrict src_field_idx, size_t const *restrict src_idx, size_t num_src_fields, size_t collection_size, double frac_mask_fallback_value, double scale_factor, double scale_summand)
#define CHECK_WITH_FRAC_MASK(ROUTINE)
#define xcalloc(nmemb, size)
struct yac_interpolation_exchange * src2halo
struct yac_interpolation_buffer result_data
struct yac_interpolation_buffer halo_data
struct yac_interpolation_type_vtable const * vtable
size_t * prefix_num_src_per_tgt
struct yac_interpolation_exchange * result2tgt
double ** src_fields_buffer
int(* is_source)(struct yac_interpolation_type *interp)
#define COPY_DATA(data, count)