YetAnotherCoupler 3.2.0_a
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#include <yaxt.h>
14
15#include "dist_grid_internal.h"
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 = strdup(src_grid_name);
41 interp_grid->tgt_grid_name = strdup(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) {
65 src_fields[i].masks_idx = src_field_masks_idxs[i];
66 }
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, size_t src_field_idx,
79 size_t ** src_indices, size_t * count) {
80
81 struct yac_dist_grid * dist_grid =
83 interp_grid->grid_pair, interp_grid->src_grid_name);
85 dist_grid, interp_grid->src_fields[src_field_idx],
86 src_indices, count);
87}
88
90 struct yac_interp_grid * interp_grid, size_t ** tgt_indices,
91 size_t * count) {
92
93 struct yac_dist_grid * dist_grid =
95 interp_grid->grid_pair, interp_grid->tgt_grid_name);
97 dist_grid, interp_grid->tgt_field, tgt_indices, count);
98}
99
101 struct yac_interp_grid * interp_grid, enum yac_location location,
102 size_t * src_points, size_t count) {
103
104 struct yac_dist_grid * dist_grid =
106 interp_grid->grid_pair, interp_grid->src_grid_name);
107
108 return
109 yac_dist_grid_get_remote_points(dist_grid, location, src_points, count);
110}
111
113 struct yac_interp_grid * interp_grid, size_t src_field_idx,
114 size_t * src_points, size_t count) {
115
116 return
118 interp_grid, interp_grid->src_fields[src_field_idx].location,
119 src_points, count);
120}
121
123 struct yac_interp_grid * interp_grid, size_t src_field_idx,
124 yac_int * src_global_ids, size_t count, size_t * src_local_ids) {
125
126 struct yac_dist_grid * dist_grid =
128 interp_grid->grid_pair, interp_grid->src_grid_name);
129
130 return
132 dist_grid, interp_grid->src_fields[src_field_idx].location,
133 src_global_ids, count, src_local_ids);
134}
135
137 struct yac_interp_grid * interp_grid, yac_int * tgt_global_ids,
138 size_t count, size_t * tgt_local_ids) {
139
140 struct yac_dist_grid * dist_grid =
142 interp_grid->grid_pair, interp_grid->tgt_grid_name);
143
144 return
146 dist_grid, interp_grid->tgt_field.location,
147 tgt_global_ids, count, tgt_local_ids);
148}
149
151 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count) {
152
153 struct yac_dist_grid * dist_grid =
155 interp_grid->grid_pair, interp_grid->tgt_grid_name);
156
157 return
159 dist_grid, interp_grid->tgt_field.location, tgt_points, count);
160}
161
163 struct yac_interp_grid * interp_grid) {
164
168 interp_grid->grid_pair, interp_grid->tgt_grid_name));
169
170 enum yac_location location = interp_grid->tgt_field.location;
172 (location == YAC_LOC_CELL) ||
173 (location == YAC_LOC_CORNER) ||
174 (location == YAC_LOC_EDGE),
175 "ERROR(get_tgt_grid_global_ids): invalide target location")
176
177 return yac_basic_grid_data->ids[location];
178}
179
181 struct yac_interp_grid * interp_grid) {
182
183 return interp_grid->tgt_field.location;
184}
185
187 struct yac_interp_grid * interp_grid, size_t * src_points, size_t count,
188 size_t src_field_idx, yac_int * src_global_ids) {
189
190 const_yac_int_pointer grid_global_ids =
191 yac_interp_grid_get_src_field_global_ids(interp_grid, src_field_idx);
192
193 for (size_t i = 0; i < count; ++i)
194 src_global_ids[i] = grid_global_ids[src_points[i]];
195}
196
198 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count,
199 yac_int * tgt_global_ids) {
200
201 yac_int const * grid_global_ids = get_tgt_grid_global_ids(interp_grid);
202
203 for (size_t i = 0; i < count; ++i)
204 tgt_global_ids[i] = grid_global_ids[tgt_points[i]];
205}
206
208 size_t * points, size_t count, yac_coordinate_pointer coordinates,
209 yac_const_coordinate_pointer grid_coordinates) {
210
212 (grid_coordinates != NULL) || (count == 0),
213 "ERROR(yac_interp_grid_get_coordinates): grid_coordinates == NULL")
214
215 for (size_t i = 0; i < count; ++i)
216 for (int j = 0; j < 3; ++j)
217 coordinates[i][j] = grid_coordinates[points[i]][j];
218}
219
221 struct yac_interp_grid * interp_grid, size_t * src_points, size_t count,
222 size_t src_field_idx, yac_coordinate_pointer src_coordinates) {
223
225 src_points, count, src_coordinates,
226 yac_interp_grid_get_src_field_coords(interp_grid, src_field_idx));
227}
228
230 struct yac_interp_grid * interp_grid, size_t * tgt_points, size_t count,
231 yac_coordinate_pointer tgt_coordinates) {
232
234 tgt_points, count, tgt_coordinates,
236}
237
239 struct yac_interp_grid * interp_grid) {
240
241 return interp_grid->num_src_fields;
242}
243
245 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
246
248 src_field_idx < interp_grid->num_src_fields,
249 "ERROR(yac_interp_grid_get_src_field_location): invalid src_field_idx")
250
251 return interp_grid->src_fields[src_field_idx].location;
252}
253
255 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
256
258 src_field_idx < interp_grid->num_src_fields,
259 "ERROR(yac_interp_grid_get_src_field_global_ids): invalid src_field_idx")
260
264 interp_grid->grid_pair, interp_grid->src_grid_name));
265
266 enum yac_location location =
267 interp_grid->src_fields[src_field_idx].location;
269 (location == YAC_LOC_CORNER) ||
270 (location == YAC_LOC_CELL) ||
271 (location == YAC_LOC_EDGE),
272 "ERROR(yac_interp_grid_get_src_field_global_ids): "
273 "invalid source field location")
274 return yac_basic_grid_data->ids[location];
275}
276
278 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
279
281 src_field_idx < interp_grid->num_src_fields,
282 "ERROR(yac_interp_grid_get_src_field_coords): invalid src_field_idx")
283
284 struct yac_dist_grid * dist_grid =
286 interp_grid->grid_pair, interp_grid->src_grid_name);
287
288 return
291 dist_grid, interp_grid->src_fields[src_field_idx]);
292}
293
295 struct yac_interp_grid * interp_grid) {
296
297 struct yac_dist_grid * dist_grid =
299 interp_grid->grid_pair, interp_grid->tgt_grid_name);
300
301 return
303 yac_dist_grid_get_field_coords(dist_grid, interp_grid->tgt_field);
304}
305
307 struct yac_interp_grid * interp_grid, size_t src_field_idx) {
308
310 src_field_idx < interp_grid->num_src_fields,
311 "ERROR(yac_interp_grid_get_src_field_mask): invalid src_field_idx")
312
313 struct yac_dist_grid * dist_grid =
315 interp_grid->grid_pair, interp_grid->src_grid_name);
316
317 return
319 dist_grid, interp_grid->src_fields[src_field_idx]);
320}
321
323 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
324 size_t count, size_t * src_cells) {
325
327 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
328 src_cells);
329}
330
332 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
333 size_t count, size_t * src_cells) {
334
336 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
337 src_cells);
338}
339
341 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
342 size_t count, size_t n, size_t * src_points) {
343
345 interp_grid->num_src_fields == 1,
346 "ERROR(yac_interp_grid_do_nnn_search_src): invalid number of source fields")
347
349 interp_grid->grid_pair, interp_grid->src_grid_name, search_coords, count,
350 src_points, n, interp_grid->src_fields[0]);
351}
352
354 struct yac_interp_grid * interp_grid, yac_coordinate_pointer search_coords,
355 size_t count, size_t n, size_t * tgt_points) {
356
358 interp_grid->grid_pair, interp_grid->tgt_grid_name, search_coords, count,
359 tgt_points, n, interp_grid->tgt_field);
360}
361
363 struct yac_interp_grid * interp_grid,
365 size_t count, size_t src_field_idx, size_t ** src_cells,
366 size_t * num_src_per_bnd_circle) {
367
369 src_field_idx < interp_grid->num_src_fields,
370 "ERROR(yac_interp_grid_do_bnd_circle_search_src): invalid src_field_idx")
371
373 interp_grid->src_fields[src_field_idx].location == YAC_LOC_CELL,
374 "ERROR(yac_interp_grid_do_bnd_circle_search_src): "
375 "invalid source field location; has to be YAC_LOC_CELL")
376
378 interp_grid->grid_pair, interp_grid->src_grid_name, bnd_circles, count,
379 src_cells, num_src_per_bnd_circle, interp_grid->src_fields[src_field_idx]);
380}
381
383 struct yac_interp_grid * interp_grid,
385 size_t count, size_t ** tgt_cells, size_t * num_tgt_per_bnd_circle) {
386
388 interp_grid->tgt_field.location == YAC_LOC_CELL,
389 "ERROR(yac_interp_grid_do_bnd_circle_search_tgt): "
390 "invalid target field location; has to be YAC_LOC_CELL")
391
393 interp_grid->grid_pair, interp_grid->tgt_grid_name, bnd_circles, count,
394 tgt_cells, num_tgt_per_bnd_circle, interp_grid->tgt_field);
395}
396
398 struct yac_interp_grid * interp_grid, size_t * tgt_cells, size_t count,
399 size_t ** src_cells, size_t * num_src_per_tgt) {
400
402 interp_grid->num_src_fields == 1,
403 "ERROR(yac_interp_grid_do_cell_search_src): "
404 "invalid number of source fields")
405
407 interp_grid->src_fields[0].location == YAC_LOC_CELL,
408 "ERROR(yac_interp_grid_do_cell_search_src): "
409 "invalid source field location; has to be YAC_LOC_CELL")
410
412 interp_grid->tgt_field.location == YAC_LOC_CELL,
413 "ERROR(yac_interp_grid_do_cell_search_src): "
414 "invalid target field location; has to be YAC_LOC_CELL")
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 interp_grid->num_src_fields == 1,
428 "ERROR(yac_interp_grid_do_cell_search_tgt): "
429 "invalid number of source fields")
430
432 interp_grid->src_fields[0].location == YAC_LOC_CELL,
433 "ERROR(yac_interp_grid_do_cell_search_tgt): "
434 "invalid source field location; has to be YAC_LOC_CELL")
435
437 interp_grid->tgt_field.location == YAC_LOC_CELL,
438 "ERROR(yac_interp_grid_do_cell_search_tgt): "
439 "invalid target field location; has to be YAC_LOC_CELL")
440
442 interp_grid->grid_pair, interp_grid->src_grid_name,
443 interp_grid->tgt_grid_name, src_cells, count, tgt_cells,
444 num_tgt_per_src, interp_grid->tgt_field);
445}
446
447MPI_Comm yac_interp_grid_get_MPI_Comm(struct yac_interp_grid * interp_grid) {
448
449 return yac_dist_grid_pair_get_MPI_Comm(interp_grid->grid_pair);
450}
451
460
469
471 struct yac_interp_grid * interp_grid, size_t * src_cells, size_t count,
472 size_t * neighbours) {
473
475 interp_grid->grid_pair, interp_grid->src_grid_name, src_cells, count,
476 neighbours);
477}
478
480 struct yac_interp_grid * interp_grid, size_t * tgt_cells, size_t count,
481 size_t * neighbours) {
482
484 interp_grid->grid_pair, interp_grid->tgt_grid_name, tgt_cells, count,
485 neighbours);
486}
487
489 struct yac_interp_grid * interp_grid,
490 size_t * src_corners, size_t count, size_t ** src_cells,
491 size_t * num_cells_per_corner) {
492
494 interp_grid->grid_pair, interp_grid->src_grid_name,
495 src_corners, count, src_cells, num_cells_per_corner);
496}
497
499 struct yac_interp_grid * interp_grid,
500 size_t * tgt_corners, size_t count, size_t ** tgt_cells,
501 size_t * num_cells_per_corner) {
502
504 interp_grid->grid_pair, interp_grid->tgt_grid_name,
505 tgt_corners, count, tgt_cells, num_cells_per_corner);
506}
507
509 struct yac_interp_grid * interp_grid, size_t * cells, size_t count,
510 size_t ** vertex_to_cell, size_t ** vertex_to_cell_offsets,
511 int ** num_cells_per_vertex) {
512
514 interp_grid->num_src_fields == 1,
515 "ERROR(yac_interp_grid_get_aux_grid_src): invalid number of source fields")
516
518 interp_grid->grid_pair, interp_grid->src_grid_name, cells, count,
519 vertex_to_cell, vertex_to_cell_offsets, num_cells_per_vertex,
520 interp_grid->src_fields[0]);
521}
522
524 struct yac_interp_grid * interp_grid, int to_tgt_owner,
525 size_t src_field_idx, size_t ** src_points,
526 size_t ** tgt_points, double ** weights, size_t * count) {
527
529 interp_grid->grid_pair, !to_tgt_owner, 1,
530 interp_grid->src_grid_name, src_points,
531 interp_grid->src_fields[src_field_idx].location,
532 interp_grid->tgt_grid_name, tgt_points,
533 interp_grid->tgt_field.location, weights, count);
534}
535
537 struct yac_interp_grid * interp_grid, size_t * tgt_indices, size_t count,
538 int * owners) {
539
541 interp_grid->grid_pair, interp_grid->tgt_grid_name,
542 tgt_indices, count, interp_grid->tgt_field.location, owners);
543}
544
546 struct yac_interp_grid * interp_grid, size_t * vertices, size_t count,
547 size_t ** neigh_vertices, int * num_neighs_per_vertex) {
548
550 interp_grid->grid_pair, interp_grid->tgt_grid_name,
551 vertices, count, neigh_vertices, num_neighs_per_vertex,
552 interp_grid->tgt_field);
553}
554
556 struct yac_interp_grid * interp_grid, int to_tgt_owner,
557 enum yac_location src_location, size_t ** src_points,
558 size_t ** tgt_points, double ** weights, size_t * count) {
559
561 interp_grid->grid_pair, !to_tgt_owner, 0,
562 interp_grid->src_grid_name, src_points, src_location,
563 interp_grid->tgt_grid_name, tgt_points,
564 interp_grid->tgt_field.location, weights, count);
565}
566
567void yac_interp_grid_delete(struct yac_interp_grid * interp_grid) {
568
569 if (interp_grid == NULL) return;
570
571 free(interp_grid->src_grid_name);
572 free(interp_grid->tgt_grid_name);
573 free(interp_grid);
574}
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:4561
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:2895
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:6714
void yac_dist_grid_get_local_unmasked_points(struct yac_dist_grid *dist_grid, struct yac_interp_field field, size_t **indices, size_t *count)
Definition dist_grid.c:2850
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:4553
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:6294
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:2784
int const * yac_dist_grid_get_field_mask(struct yac_dist_grid *dist_grid, struct yac_interp_field field)
Definition dist_grid.c:2883
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:5748
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:5757
struct yac_const_basic_grid_data * yac_dist_grid_get_basic_grid_data(struct yac_dist_grid *dist_grid)
Definition dist_grid.c:2796
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:6773
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:5035
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:5323
MPI_Comm yac_dist_grid_pair_get_MPI_Comm(struct yac_dist_grid_pair *grid_pair)
Definition dist_grid.c:2779
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:5843
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:6430
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:6380
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)
Definition dist_grid.c:4702
struct bounding_circle const *const const_bounding_circle_pointer
int const *const const_int_pointer
yac_int const *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)
void yac_interp_grid_delete(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:89
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)
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_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:77
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_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)
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_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)
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_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)
enum yac_location yac_get_location(int const location)
Definition location.c:44
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 xmalloc(size)
Definition ppm_xfuncs.h:66
algorithm for searching cells and points on a grid
size_t count[3]
Definition dist_grid.c:102
enum yac_location location
Definition basic_grid.h:18
size_t coordinates_idx
Definition basic_grid.h:19
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
static struct user_input_data_points ** points
Definition yac.c:120
#define YAC_ASSERT(exp, msg)
Definition yac_assert.h:15
Xt_int yac_int
Definition yac_types.h:15
double const (*const yac_const_coordinate_pointer)[3]
Definition yac_types.h:20
double(* yac_coordinate_pointer)[3]
Definition yac_types.h:19