YAC 3.21.0
Yet Another Coupler
Loading...
Searching...
No Matches
interp_grid.c
Go to the documentation of this file.
1// Copyright (c) 2024 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifdef HAVE_CONFIG_H
6// Get the definition of the 'restrict' keyword.
7#include "config.h"
8#endif
9
10#include <stdlib.h>
11#include <string.h>
12#include <assert.h>
13
17#include "yac_mpi_internal.h"
18#include "geometry.h"
19#include "utils_core.h"
20#include "sphere_part.h"
21
30
33 char const * src_grid_name, char const * tgt_grid_name,
34 size_t num_src_fields, struct yac_interp_field const * src_fields,
35 struct yac_interp_field const tgt_field) {
36
37 struct yac_interp_grid * interp_grid =
38 xmalloc(1 * sizeof(*interp_grid) + num_src_fields * sizeof(*src_fields));
39
40 interp_grid->src_grid_name = xstrdup(src_grid_name);
41 interp_grid->tgt_grid_name = xstrdup(tgt_grid_name);
42 interp_grid->grid_pair = grid_pair;
43 interp_grid->num_src_fields = num_src_fields;
44 memcpy(&interp_grid->tgt_field, &tgt_field, 1 * sizeof(tgt_field));
45 memcpy(
46 interp_grid->src_fields, src_fields, num_src_fields * sizeof(*src_fields));
47
48 return interp_grid;
49}
50
53 char const * src_grid_name, char const * tgt_grid_name,
54 size_t num_src_fields, int const * src_field_locations,
55 size_t const * src_field_coordinate_idxs,
56 size_t const * src_field_masks_idxs,
57 int tgt_field_location, size_t tgt_field_coordinate_idx,
58 size_t tgt_field_masks_idx) {
59
60 struct yac_interp_field src_fields[num_src_fields];
61 struct yac_interp_field tgt_field;
62 for (size_t i = 0; i < num_src_fields; ++i) {
63 src_fields[i].location = yac_get_location(src_field_locations[i]);
64 src_fields[i].coordinates_idx = src_field_coordinate_idxs[i];
65 src_fields[i].masks_idx = src_field_masks_idxs[i];
66 }
67 tgt_field.location = yac_get_location(tgt_field_location);
68 tgt_field.coordinates_idx = tgt_field_coordinate_idx;
69 tgt_field.masks_idx = tgt_field_masks_idx;
70
71 return
73 grid_pair, src_grid_name, tgt_grid_name, num_src_fields,
74 src_fields, tgt_field);
75}
76
78 struct yac_interp_grid * interp_grid) {
79 return interp_grid->src_grid_name;
80}
81
83 struct yac_interp_grid * interp_grid) {
84 return interp_grid->tgt_grid_name;
85}
86
88 struct yac_interp_grid * interp_grid, size_t src_field_idx,
89 size_t ** src_indices, size_t * count) {
90
91 struct yac_dist_grid * dist_grid =
93 interp_grid->grid_pair, interp_grid->src_grid_name);
95 dist_grid, interp_grid->src_fields[src_field_idx],
96 src_indices, count);
97}
98
100 struct yac_interp_grid * interp_grid, size_t ** tgt_indices,
101 size_t * count) {
102
103 struct yac_dist_grid * dist_grid =
105 interp_grid->grid_pair, interp_grid->tgt_grid_name);
107 dist_grid, interp_grid->tgt_field, tgt_indices, count);
108}
109
111 struct yac_interp_grid * interp_grid, enum yac_location location,
112 size_t * src_points, size_t count) {
113
114 struct yac_dist_grid * dist_grid =
116 interp_grid->grid_pair, interp_grid->src_grid_name);
117
118 return
119 yac_dist_grid_get_remote_points(dist_grid, location, src_points, count);
120}
121
123 struct yac_interp_grid * interp_grid, size_t src_field_idx,
124 size_t * src_points, size_t count) {
125
126 return
128 interp_grid, interp_grid->src_fields[src_field_idx].location,
129 src_points, count);
130}
131
133 struct yac_interp_grid * interp_grid, size_t src_field_idx,
134 yac_int * src_global_ids, size_t count, size_t * src_local_ids) {
135
136 struct yac_dist_grid * dist_grid =
138 interp_grid->grid_pair, interp_grid->src_grid_name);
139
141 dist_grid, interp_grid->src_fields[src_field_idx].location,
142 src_global_ids, count, src_local_ids);
143}
144
146 struct yac_interp_grid * interp_grid, yac_int * tgt_global_ids,
147 size_t count, size_t * tgt_local_ids) {
148
149 struct yac_dist_grid * dist_grid =
151 interp_grid->grid_pair, interp_grid->tgt_grid_name);
152
154 dist_grid, interp_grid->tgt_field.location,
155 tgt_global_ids, count, tgt_local_ids);
156}
157
159 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count) {
160
161 struct yac_dist_grid * dist_grid =
163 interp_grid->grid_pair, interp_grid->tgt_grid_name);
164
165 return
167 dist_grid, interp_grid->tgt_field.location, tgt_points, count);
168}
169
171 struct yac_interp_grid * interp_grid) {
172
176 interp_grid->grid_pair, interp_grid->tgt_grid_name));
177
178 enum yac_location location = interp_grid->tgt_field.location;
180 (location == YAC_LOC_CELL) ||
182 (location == YAC_LOC_EDGE), "invalide target location")
183
184 return yac_basic_grid_data->ids[location];
185}
186
188 struct yac_interp_grid * interp_grid) {
189
190 return interp_grid->tgt_field.location;
191}
192
194 struct yac_interp_grid * interp_grid, size_t * src_points, size_t count,
195 size_t src_field_idx, yac_int * src_global_ids) {
196
197 const_yac_int_pointer grid_global_ids =
198 yac_interp_grid_get_src_field_global_ids(interp_grid, src_field_idx);
199
200 for (size_t i = 0; i < count; ++i)
201 src_global_ids[i] = grid_global_ids[src_points[i]];
202}
203
205 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count,
206 yac_int * tgt_global_ids) {
207
208 yac_int const * grid_global_ids = get_tgt_grid_global_ids(interp_grid);
209
210 for (size_t i = 0; i < count; ++i)
211 tgt_global_ids[i] = grid_global_ids[tgt_points[i]];
212}
213
215 size_t * points, size_t count, yac_coordinate_pointer coordinates,
216 yac_const_coordinate_pointer grid_coordinates) {
217
219 (grid_coordinates != NULL) || (count == 0), "grid_coordinates == NULL")
220
221 for (size_t i = 0; i < count; ++i)
222 for (int j = 0; j < 3; ++j)
223 coordinates[i][j] = grid_coordinates[points[i]][j];
224}
225
227 struct yac_interp_grid * interp_grid, size_t * src_points, size_t count,
228 size_t src_field_idx, yac_coordinate_pointer src_coordinates) {
229
231 src_points, count, src_coordinates,
232 yac_interp_grid_get_src_field_coords(interp_grid, src_field_idx));
233}
234
236 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count,
237 yac_coordinate_pointer tgt_coordinates) {
238
240 tgt_points, count, tgt_coordinates,
242}
243
245 struct yac_interp_grid * interp_grid) {
246
247 return interp_grid->num_src_fields;
248}
249
251 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
252
253 CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(interp_grid, src_field_idx)
254
255 return interp_grid->src_fields[src_field_idx].location;
256}
257
259 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
260
261 CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(interp_grid, src_field_idx)
262
266 interp_grid->grid_pair, interp_grid->src_grid_name));
267
268 const enum yac_location location =
269 interp_grid->src_fields[src_field_idx].location;
270
272
273 return yac_basic_grid_data->ids[location];
274}
275
277 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
278
279 CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(interp_grid, src_field_idx)
280
281 struct yac_dist_grid * dist_grid =
283 interp_grid->grid_pair, interp_grid->src_grid_name);
284
285 return
288 dist_grid, interp_grid->src_fields[src_field_idx]);
289}
290
292 struct yac_interp_grid * interp_grid) {
293
294 struct yac_dist_grid * dist_grid =
296 interp_grid->grid_pair, interp_grid->tgt_grid_name);
297
298 return
300 yac_dist_grid_get_field_coords(dist_grid, interp_grid->tgt_field);
301}
302
304 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
305
306 CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(interp_grid, src_field_idx)
307
308 struct yac_dist_grid * dist_grid =
310 interp_grid->grid_pair, interp_grid->src_grid_name);
311
312 return
314 dist_grid, interp_grid->src_fields[src_field_idx]);
315}
316
318 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
319 size_t count, size_t * src_cells) {
320
322 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
323 src_cells);
324}
325
327 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
328 size_t count, size_t * src_cells) {
329
331 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
332 src_cells);
333}
334
336 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
337 size_t count, size_t n, size_t * src_points, double max_search_distance) {
338
340
342 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
343 src_points, n, interp_grid->src_fields[0], max_search_distance);
344}
345
347 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
348 size_t count, size_t n, size_t * tgt_points, double max_search_distance) {
349
351 interp_grid->grid_pair, interp_grid->tgt_grid_name, search_coords, count,
352 tgt_points, n, interp_grid->tgt_field, max_search_distance);
353}
354
356 struct yac_interp_grid * interp_grid,
358 size_t count, size_t src_field_idx, size_t ** src_cells,
359 size_t * num_src_per_bnd_circle) {
360
361 CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(interp_grid, src_field_idx)
362
363 CHECK_INTERP_GRID_SRC_FIELD_IS_CELL(interp_grid, src_field_idx)
364
366 interp_grid->grid_pair, interp_grid->src_grid_name, bnd_circles, count,
367 src_cells, num_src_per_bnd_circle, interp_grid->src_fields[src_field_idx]);
368}
369
371 struct yac_interp_grid * interp_grid,
373 size_t count, size_t ** tgt_cells, size_t * num_tgt_per_bnd_circle) {
374
376
378 interp_grid->grid_pair, interp_grid->tgt_grid_name, bnd_circles, count,
379 tgt_cells, num_tgt_per_bnd_circle, interp_grid->tgt_field);
380}
381
383 struct yac_interp_grid * interp_grid,
385 size_t count, size_t src_field_idx, size_t ** src_points,
386 size_t * num_src_per_bnd_circle) {
387
389 src_field_idx < interp_grid->num_src_fields, "invalid src_field_idx")
390
392 interp_grid->grid_pair, interp_grid->src_grid_name, bnd_circles, count,
393 src_points, num_src_per_bnd_circle, interp_grid->src_fields[src_field_idx]);
394}
395
397 struct yac_interp_grid * interp_grid,
399 size_t count, size_t ** tgt_points, size_t * num_tgt_per_bnd_circle) {
400
402 interp_grid->grid_pair, interp_grid->tgt_grid_name, bnd_circles, count,
403 tgt_points, num_tgt_per_bnd_circle, interp_grid->tgt_field);
404}
405
407 struct yac_interp_grid * interp_grid, size_t * tgt_cells, size_t count,
408 size_t ** src_cells, size_t * num_src_per_tgt) {
409
411
413
415
417 interp_grid->grid_pair, interp_grid->tgt_grid_name,
418 interp_grid->src_grid_name, tgt_cells, count, src_cells,
419 num_src_per_tgt, interp_grid->src_fields[0]);
420}
421
423 struct yac_interp_grid * interp_grid, size_t * src_cells, size_t count,
424 size_t ** tgt_cells, size_t * num_tgt_per_src) {
425
427
429
431
433 interp_grid->grid_pair, interp_grid->src_grid_name,
434 interp_grid->tgt_grid_name, src_cells, count, tgt_cells,
435 num_tgt_per_src, interp_grid->tgt_field);
436}
437
438MPI_Comm yac_interp_grid_get_MPI_Comm(struct yac_interp_grid * interp_grid) {
439
440 return yac_dist_grid_pair_get_MPI_Comm(interp_grid->grid_pair);
441}
442
451
460
462 struct yac_interp_grid * interp_grid, size_t * src_cells, size_t count,
463 size_t * neighbours) {
464
466 interp_grid->grid_pair, interp_grid->src_grid_name, src_cells, count,
467 neighbours);
468}
469
471 struct yac_interp_grid * interp_grid, size_t * tgt_cells, size_t count,
472 size_t * neighbours) {
473
475 interp_grid->grid_pair, interp_grid->tgt_grid_name, tgt_cells, count,
476 neighbours);
477}
478
480 struct yac_interp_grid * interp_grid,
481 size_t * src_corners, size_t count, size_t ** src_cells,
482 size_t * num_cells_per_corner) {
483
485 interp_grid->grid_pair, interp_grid->src_grid_name,
486 src_corners, count, src_cells, num_cells_per_corner);
487}
488
490 struct yac_interp_grid * interp_grid,
491 size_t * tgt_corners, size_t count, size_t ** tgt_cells,
492 size_t * num_cells_per_corner) {
493
495 interp_grid->grid_pair, interp_grid->tgt_grid_name,
496 tgt_corners, count, tgt_cells, num_cells_per_corner);
497}
498
500 struct yac_interp_grid * interp_grid, size_t * cells, size_t count,
501 size_t ** vertex_to_cell, size_t ** vertex_to_cell_offsets,
502 int ** num_cells_per_vertex) {
503
505
507 interp_grid->grid_pair, interp_grid->src_grid_name, cells, count,
508 vertex_to_cell, vertex_to_cell_offsets, num_cells_per_vertex,
509 interp_grid->src_fields[0]);
510}
511
513 struct yac_interp_grid * interp_grid, int to_tgt_owner,
514 size_t src_field_idx, size_t ** src_points,
515 size_t ** tgt_points, double ** weights, size_t * count) {
516
518 interp_grid->grid_pair, !to_tgt_owner, 1,
519 interp_grid->src_grid_name, src_points,
520 interp_grid->src_fields[src_field_idx].location,
521 interp_grid->tgt_grid_name, tgt_points,
522 interp_grid->tgt_field.location, weights, count);
523}
524
526 struct yac_interp_grid * interp_grid, size_t * tgt_indices, size_t count,
527 int * owners) {
528
530 interp_grid->grid_pair, interp_grid->tgt_grid_name,
531 tgt_indices, count, interp_grid->tgt_field.location, owners);
532}
533
535 struct yac_interp_grid * interp_grid, size_t * vertices, size_t count,
536 size_t ** neigh_vertices, int * num_neighs_per_vertex) {
537
539 interp_grid->grid_pair, interp_grid->tgt_grid_name,
540 vertices, count, neigh_vertices, num_neighs_per_vertex,
541 interp_grid->tgt_field);
542}
543
545 struct yac_interp_grid * interp_grid, int to_tgt_owner,
546 enum yac_location src_location, size_t ** src_points,
547 size_t ** tgt_points, double ** weights, size_t * count) {
548
550 interp_grid->grid_pair, !to_tgt_owner, 0,
551 interp_grid->src_grid_name, src_points, src_location,
552 interp_grid->tgt_grid_name, tgt_points,
553 interp_grid->tgt_field.location, weights, count);
554}
555
556void yac_interp_grid_delete(struct yac_interp_grid * interp_grid) {
557
558 if (interp_grid == NULL) return;
559
560 free(interp_grid->src_grid_name);
561 free(interp_grid->tgt_grid_name);
562 free(interp_grid);
563}
564
566 struct yac_interp_grid * interp_grid) {
567
568 return
570 interp_grid->grid_pair, interp_grid->tgt_grid_name);
571}
#define YAC_ASSERT(exp, msg)
void yac_dist_grid_pair_do_point_search_gc(struct yac_dist_grid_pair *grid_pair, char const *grid_name, yac_coordinate_pointer search_coords, size_t count, size_t *cells)
Definition dist_grid.c:4043
yac_const_coordinate_pointer yac_dist_grid_get_field_coords(struct yac_dist_grid *dist_grid, struct yac_interp_field field)
Definition dist_grid.c:2308
void yac_dist_grid_pair_determine_dist_owner(struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *points, size_t count, enum yac_location location, int *ranks)
Definition dist_grid.c:6497
void yac_dist_grid_pair_do_point_search(struct yac_dist_grid_pair *grid_pair, char const *grid_name, yac_coordinate_pointer search_coords, size_t count, size_t *cells)
Definition dist_grid.c:4031
void yac_dist_grid_pair_do_nnn_search(struct yac_dist_grid_pair *grid_pair, char const *grid_name, yac_coordinate_pointer search_coords, size_t count, size_t *local_ids, size_t n, struct yac_interp_field field, double max_search_distance)
Definition dist_grid.c:4220
void yac_dist_grid_pair_get_vertex_neighbours(struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *vertices, size_t count, size_t **neigh_vertices_, int *num_neighs_per_vertex, struct yac_interp_field field)
Definition dist_grid.c:6041
yac_size_t_2_pointer yac_dist_grid_generate_edge_to_cell(struct yac_dist_grid_pair *grid_pair, char const *grid_name)
Definition dist_grid.c:6649
struct yac_dist_grid * yac_dist_grid_pair_get_dist_grid(struct yac_dist_grid_pair *grid_pair, char const *grid_name)
Definition dist_grid.c:2191
void yac_dist_grid_pair_do_dnn_search(struct yac_dist_grid_pair *grid_pair, char const *grid_name, const_bounding_circle_pointer bnd_circles, size_t count, size_t **points, size_t *num_results_per_bnd_circle, struct yac_interp_field field)
Definition dist_grid.c:4864
int const * yac_dist_grid_get_field_mask(struct yac_dist_grid *dist_grid, struct yac_interp_field field)
Definition dist_grid.c:2296
void yac_dist_grid_pair_get_cell_neighbours(struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *cells, size_t count, size_t *neighbours)
Definition dist_grid.c:5490
void yac_dist_grid_get_local_unmasked_points(struct yac_dist_grid *dist_grid, struct yac_interp_field field, size_t **indices, size_t *num_indices)
Definition dist_grid.c:2263
struct remote_point * yac_dist_grid_get_remote_points(struct yac_dist_grid *dist_grid, enum yac_location location, size_t *points, size_t count)
Definition dist_grid.c:5499
struct yac_const_basic_grid_data * yac_dist_grid_get_basic_grid_data(struct yac_dist_grid *dist_grid)
Definition dist_grid.c:2204
void yac_dist_grid_pair_relocate_point_pairs(struct yac_dist_grid_pair *grid_pair, int a_is_ref, int to_dist_owner, char const *grid_name_a, size_t **points_a, enum yac_location location_a, char const *grid_name_b, size_t **points_b, enum yac_location location_b, double **weights, size_t *count)
Definition dist_grid.c:6550
void yac_dist_grid_pair_do_bnd_circle_search(struct yac_dist_grid_pair *grid_pair, char const *grid_name, const_bounding_circle_pointer bnd_circles, size_t count, size_t **cells, size_t *num_results_per_bnd_circle, struct yac_interp_field field)
Definition dist_grid.c:4543
void yac_dist_grid_pair_do_cell_search(struct yac_dist_grid_pair *grid_pair, char const *search_grid_name, char const *result_grid_name, size_t *search_cells, size_t count, size_t **result_cells, size_t *num_results_per_search_cell, struct yac_interp_field result_field)
Definition dist_grid.c:5075
MPI_Comm yac_dist_grid_pair_get_MPI_Comm(struct yac_dist_grid_pair *grid_pair)
Definition dist_grid.c:2186
void yac_dist_grid_global_to_local(struct yac_dist_grid *dist_grid, enum yac_location location, yac_int *global_ids, size_t count, size_t *local_ids)
Definition dist_grid.c:5584
void yac_dist_grid_pair_get_aux_grid(struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *cells, size_t count, size_t **vertex_to_cell, size_t **vertex_to_cell_offsets_, int **num_cells_per_vertex_, struct yac_interp_field field)
Definition dist_grid.c:6205
void yac_dist_grid_pair_get_corner_cells(struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *vertices, size_t count, size_t **vertex_to_cell, size_t *num_cells_per_vertex)
Definition dist_grid.c:6156
int const * const_int_pointer
struct bounding_circle const *const const_bounding_circle_pointer
yac_int const * const_yac_int_pointer
void yac_interp_grid_do_points_search(struct yac_interp_grid *interp_grid, yac_coordinate_pointer search_coords, size_t count, size_t *src_cells)
void yac_interp_grid_get_tgt_cell_neighbours(struct yac_interp_grid *interp_grid, size_t *tgt_cells, size_t count, size_t *neighbours)
void yac_interp_grid_do_cell_search_tgt(struct yac_interp_grid *interp_grid, size_t *src_cells, size_t count, size_t **tgt_cells, size_t *num_tgt_per_src)
struct remote_point * yac_interp_grid_get_src_remote_points2(struct yac_interp_grid *interp_grid, enum yac_location location, size_t *src_points, size_t count)
enum yac_location yac_interp_grid_get_tgt_field_location(struct yac_interp_grid *interp_grid)
void yac_interp_grid_relocate_src_tgt_pairs(struct yac_interp_grid *interp_grid, int to_tgt_owner, size_t src_field_idx, size_t **src_points, size_t **tgt_points, double **weights, size_t *count)
size_t yac_interp_grid_get_num_src_fields(struct yac_interp_grid *interp_grid)
const_int_pointer yac_interp_grid_get_src_field_mask(struct yac_interp_grid *interp_grid, size_t src_field_idx)
char const * yac_interp_grid_get_src_grid_name(struct yac_interp_grid *interp_grid)
Definition interp_grid.c:77
void yac_interp_grid_delete(struct yac_interp_grid *interp_grid)
yac_size_t_2_pointer yac_interp_grid_generate_tgt_edge_to_cell(struct yac_interp_grid *interp_grid)
void yac_interp_grid_get_aux_grid_src(struct yac_interp_grid *interp_grid, size_t *cells, size_t count, size_t **vertex_to_cell, size_t **vertex_to_cell_offsets, int **num_cells_per_vertex)
void yac_interp_grid_get_tgt_points(struct yac_interp_grid *interp_grid, size_t **tgt_indices, size_t *count)
Definition interp_grid.c:99
char const * yac_interp_grid_get_tgt_grid_name(struct yac_interp_grid *interp_grid)
Definition interp_grid.c:82
void yac_interp_grid_do_bnd_circle_search_tgt(struct yac_interp_grid *interp_grid, const_bounding_circle_pointer bnd_circles, size_t count, size_t **tgt_cells, size_t *num_tgt_per_bnd_circle)
void yac_interp_grid_get_src_cell_neighbours(struct yac_interp_grid *interp_grid, size_t *src_cells, size_t count, size_t *neighbours)
void yac_interp_grid_do_dnn_search_src(struct yac_interp_grid *interp_grid, const_bounding_circle_pointer bnd_circles, size_t count, size_t src_field_idx, size_t **src_points, size_t *num_src_per_bnd_circle)
void yac_interp_grid_get_tgt_global_ids(struct yac_interp_grid *interp_grid, size_t *tgt_points, size_t count, yac_int *tgt_global_ids)
struct yac_interp_grid * yac_interp_grid_new(struct yac_dist_grid_pair *grid_pair, char const *src_grid_name, char const *tgt_grid_name, size_t num_src_fields, struct yac_interp_field const *src_fields, struct yac_interp_field const tgt_field)
Definition interp_grid.c:31
void yac_interp_grid_do_bnd_circle_search_src(struct yac_interp_grid *interp_grid, const_bounding_circle_pointer bnd_circles, size_t count, size_t src_field_idx, size_t **src_cells, size_t *num_src_per_bnd_circle)
struct yac_interp_grid * yac_interp_grid_new_f2c(struct yac_dist_grid_pair *grid_pair, char const *src_grid_name, char const *tgt_grid_name, size_t num_src_fields, int const *src_field_locations, size_t const *src_field_coordinate_idxs, size_t const *src_field_masks_idxs, int tgt_field_location, size_t tgt_field_coordinate_idx, size_t tgt_field_masks_idx)
Definition interp_grid.c:51
const_yac_int_pointer yac_interp_grid_get_src_field_global_ids(struct yac_interp_grid *interp_grid, size_t src_field_idx)
MPI_Comm yac_interp_grid_get_MPI_Comm(struct yac_interp_grid *interp_grid)
void yac_interp_grid_get_tgt_corner_cells(struct yac_interp_grid *interp_grid, size_t *tgt_corners, size_t count, size_t **tgt_cells, size_t *num_cells_per_corner)
struct remote_point * yac_interp_grid_get_tgt_remote_points(struct yac_interp_grid *interp_grid, size_t *tgt_points, size_t count)
void yac_interp_grid_get_src_points(struct yac_interp_grid *interp_grid, size_t src_field_idx, size_t **src_indices, size_t *count)
Definition interp_grid.c:87
enum yac_location yac_interp_grid_get_src_field_location(struct yac_interp_grid *interp_grid, size_t src_field_idx)
void yac_interp_grid_do_dnn_search_tgt(struct yac_interp_grid *interp_grid, const_bounding_circle_pointer bnd_circles, size_t count, size_t **tgt_points, size_t *num_tgt_per_bnd_circle)
void yac_interp_grid_get_src_coordinates(struct yac_interp_grid *interp_grid, size_t *src_points, size_t count, size_t src_field_idx, yac_coordinate_pointer src_coordinates)
struct remote_point * yac_interp_grid_get_src_remote_points(struct yac_interp_grid *interp_grid, size_t src_field_idx, size_t *src_points, size_t count)
void yac_interp_grid_do_nnn_search_src(struct yac_interp_grid *interp_grid, yac_coordinate_pointer search_coords, size_t count, size_t n, size_t *src_points, double max_search_distance)
yac_const_coordinate_pointer yac_interp_grid_get_src_field_coords(struct yac_interp_grid *interp_grid, size_t src_field_idx)
void yac_interp_grid_determine_dist_tgt_owners(struct yac_interp_grid *interp_grid, size_t *tgt_indices, size_t count, int *owners)
void yac_interp_grid_get_src_corner_cells(struct yac_interp_grid *interp_grid, size_t *src_corners, size_t count, size_t **src_cells, size_t *num_cells_per_corner)
void yac_interp_grid_get_tgt_vertex_neighbours(struct yac_interp_grid *interp_grid, size_t *vertices, size_t count, size_t **neigh_vertices, int *num_neighs_per_vertex)
void yac_interp_grid_get_tgt_coordinates(struct yac_interp_grid *interp_grid, size_t *tgt_points, size_t count, yac_coordinate_pointer tgt_coordinates)
void yac_interp_grid_do_points_search_gc(struct yac_interp_grid *interp_grid, yac_coordinate_pointer search_coords, size_t count, size_t *src_cells)
yac_const_coordinate_pointer yac_interp_grid_get_tgt_field_coords(struct yac_interp_grid *interp_grid)
struct yac_const_basic_grid_data * yac_interp_grid_get_basic_grid_data_tgt(struct yac_interp_grid *interp_grid)
void yac_interp_grid_get_src_global_ids(struct yac_interp_grid *interp_grid, size_t *src_points, size_t count, size_t src_field_idx, yac_int *src_global_ids)
void yac_interp_grid_do_nnn_search_tgt(struct yac_interp_grid *interp_grid, yac_coordinate_pointer search_coords, size_t count, size_t n, size_t *tgt_points, double max_search_distance)
void yac_interp_grid_tgt_global_to_local(struct yac_interp_grid *interp_grid, yac_int *tgt_global_ids, size_t count, size_t *tgt_local_ids)
void yac_interp_grid_do_cell_search_src(struct yac_interp_grid *interp_grid, size_t *tgt_cells, size_t count, size_t **src_cells, size_t *num_src_per_tgt)
void yac_interp_grid_relocate_src_tgt_pairs_orig(struct yac_interp_grid *interp_grid, int to_tgt_owner, enum yac_location src_location, size_t **src_points, size_t **tgt_points, double **weights, size_t *count)
static yac_int const * get_tgt_grid_global_ids(struct yac_interp_grid *interp_grid)
void yac_interp_grid_src_global_to_local(struct yac_interp_grid *interp_grid, size_t src_field_idx, yac_int *src_global_ids, size_t count, size_t *src_local_ids)
static void yac_interp_grid_get_coordinates(size_t *points, size_t count, yac_coordinate_pointer coordinates, yac_const_coordinate_pointer grid_coordinates)
struct yac_const_basic_grid_data * yac_interp_grid_get_basic_grid_data_src(struct yac_interp_grid *interp_grid)
Utility macros and functions for interpolation operators. This file contains utility macros for targe...
#define CHECK_INTERP_GRID_TGT_FIELD_IS_CELL(INTERP_GRID)
#define CHECK_INTERP_GRID_SRC_FIELD_IDX_VALID(INTERP_GRID, SRC_FIELD_IDX)
#define CHECK_INTERP_GRID_SRC_FIELD_LOCATION_CORNER_CELL_EDGE(INTERP_GRID, LOCATION)
#define CHECK_INTERP_GRID_NUM_SRC_FIELDS_SINGLE(INTERP_GRID)
#define CHECK_INTERP_GRID_SRC_FIELD_IS_CELL(INTERP_GRID, SRC_FIELD_IDX)
enum yac_location yac_get_location(int const location)
Definition location.c:45
yac_location
Definition location.h:12
@ YAC_LOC_CORNER
Definition location.h:15
@ YAC_LOC_EDGE
Definition location.h:16
@ YAC_LOC_CELL
Definition location.h:14
#define xstrdup(s)
Definition ppm_xfuncs.h:84
#define xmalloc(size)
Definition ppm_xfuncs.h:66
algorithm for searching cells and points on a grid
information (global id and location) about a point that
size_t count[3]
Definition dist_grid.c:115
enum yac_location location
Definition basic_grid.h:16
size_t coordinates_idx
Definition basic_grid.h:17
struct yac_interp_field tgt_field
Definition interp_grid.c:26
size_t num_src_fields
Definition interp_grid.c:27
struct yac_dist_grid_pair * grid_pair
Definition interp_grid.c:25
char * src_grid_name
Definition interp_grid.c:23
struct yac_interp_field src_fields[]
Definition interp_grid.c:28
char * tgt_grid_name
Definition interp_grid.c:24
char const src_grid_name[]
char const tgt_grid_name[]
int const * location
double const (* yac_const_coordinate_pointer)[3]
Definition yac_types.h:22
YAC_INT yac_int
Definition yac_types.h:15
size_t(* yac_size_t_2_pointer)[2]
Definition yac_types.h:25
double(* yac_coordinate_pointer)[3]
Definition yac_types.h:21