YAC 3.20.0
Yet Another Coupler
Loading...
Searching...
No Matches
dist_grid.c File Reference
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <float.h>
#include <mpi.h>
#include <yaxt.h>
#include "grids/basic_grid.h"
#include "grids/dist_grid_internal.h"
#include "geometry.h"
#include "yac_mpi_internal.h"
#include "utils_core.h"
#include "sphere_part.h"
#include "proc_sphere_part.h"
#include "ensure_array_size.h"
#include "interpolation/interp_grid.h"
#include "field_data_set.h"
#include "yac_xmap.h"
#include "instrument_internal.h"
Include dependency graph for dist_grid.c:

Go to the source code of this file.

Data Structures

struct  single_remote_point
 
struct  single_remote_point_reorder
 
struct  global_vertex_reorder
 
struct  global_edge_reorder
 
struct  id_pos
 
struct  n_ids_reorder
 
struct  temp_field_data
 
struct  yac_dist_grid
 
struct  yac_dist_grid_pair
 
struct  nnn_search_result
 
struct  missing_edge_neighbour
 

Macros

#define CHECK_LOCATION()
 
#define CHECK_GRID_NAME(GRID_NAME)
 

Functions

static void id2idx (char const *caller, yac_int *ids, size_t *idx, size_t num_ids, yac_int *ref_sorted_ids, size_t *ref_sorted_reorder_idx, size_t num_sorted_ids)
 
static size_t get_cell_reference_vertex (struct yac_dist_grid *dist_grid, size_t cell_idx)
 
static int * determine_cell_owner_mask (struct yac_dist_grid *dist_grid, int is_root, int *vertex_owner_mask)
 
static size_t get_edge_reference_vertex (struct yac_dist_grid *dist_grid, size_t edge_idx)
 
static int * determine_edge_owner_mask (struct yac_dist_grid *dist_grid, int *vertex_owner_mask)
 
static void generate_owner_masks (struct yac_dist_grid *dist_grid, int comm_rank, int *vertex_owner)
 
static MPI_Datatype yac_get_id_pos_mpi_datatype (MPI_Comm comm)
 
static void insert_global_id (yac_int *ids, size_t n, yac_int id)
 
static void insert_rank (int *ranks, int *count, int rank)
 
static int compare_n_ids_reorder_ids (const void *a, const void *b)
 
static int compare_n_ids_reorder_reorder (const void *a, const void *b)
 
static void determine_dist_cell_ranks (struct proc_sphere_part_node *proc_sphere_part, struct yac_basic_grid_data *grid_data, MPI_Comm comm, int **dist_cell_ranks, int *dist_cell_rank_counts, size_t *dist_cell_rank_offsets, int max_num_vertices_per_cell)
 
static void generate_ce_ids (struct yac_basic_grid_data *grid_data, int *vertex_ranks, int max_num_vertices_per_cell, MPI_Comm comm)
 
static void check_core_masks (struct yac_basic_grid *grid)
 
static void generate_global_ids (struct yac_basic_grid *grid, int *vertex_ranks, int max_num_vertices_per_cell, MPI_Comm comm)
 
static yac_size_t_2_pointer generate_edge_to_cell (const_size_t_pointer cell_to_edge, const_int_pointer num_edges_per_cell, int *core_cell_mask, size_t num_cells, size_t num_edges)
 
static struct bounding_circle compute_edge_bnd_circle (yac_size_t_2_pointer edge_to_vertex, const yac_coordinate_pointer vertex_coordinates, size_t edge_id)
 
static void determine_dist_edge_ranks (struct proc_sphere_part_node *proc_sphere_part, struct yac_basic_grid *grid, MPI_Comm comm, size_t *dist_cell_rank_offsets, size_t *dist_edge_rank_offsets, int *num_cell_ranks, int *num_edge_ranks, int **rank_buffer, size_t *rank_buffer_array_size)
 
static void generate_vertex_to_edge (yac_size_t_2_pointer edge_to_vertex, size_t num_edges, size_t num_vertices, size_t *vertex_to_edge, int *num_edges_per_vertex)
 
static void determine_dist_vertex_ranks (int *vertex_ranks, struct yac_basic_grid *grid, MPI_Comm comm, size_t *dist_edge_rank_offsets, int *num_edge_ranks, int *num_vertex_ranks, int **rank_buffer, size_t *rank_buffer_array_size)
 
static int compare_single_remote_point_global_id (const void *a, const void *b)
 
static void generate_dist_remote_points (struct proc_sphere_part_node *proc_sphere_part, struct yac_basic_grid *grid, int *vertex_ranks, int max_num_vertices_per_cell, MPI_Comm comm, struct remote_point_infos **dist_point_infos, yac_int **dist_global_ids, size_t *dist_count)
 
static void generate_sorted_ids (yac_int *global_ids, size_t count, yac_int **sorted_global_ids, size_t **reorder_idx)
 
static int compare_single_remote_point_reorder_global_id (const void *a, const void *b)
 
static int compare_single_remote_point_reorder_reorder_idx (const void *a, const void *b)
 
static MPI_Datatype yac_get_coordinate_mpi_datatype (MPI_Comm comm)
 
static struct yac_field_datafield_data_init (struct yac_field_data *orig_field_data, size_t dist_size, Xt_redist redist_mask, Xt_redist redist_coords, MPI_Comm comm)
 
static void redistribute_vertex_data (struct yac_basic_grid *grid, struct remote_point_infos *dist_vertex_infos, size_t num_vertices, MPI_Comm comm, MPI_Datatype dt_coord, int *vertex_ranks, yac_coordinate_pointer *vertex_coordinates_, int **vertex_owner_, struct yac_field_data **vertex_field_data_)
 
static void redistribute_edge_data (struct yac_basic_grid *grid, struct remote_point_infos *dist_edge_infos, size_t num_edges, MPI_Comm comm, MPI_Datatype dt_coord, size_t num_vertices, yac_int *sorted_vertex_ids, size_t *sorted_vertex_reorder_idx, yac_size_t_2_pointer *edge_to_vertex_, enum yac_edge_type **edge_type_, struct yac_field_data **edge_field_data_)
 
static void redistribute_cell_data (struct yac_basic_grid *grid, struct remote_point_infos *dist_cell_infos, size_t num_cells, MPI_Comm comm, MPI_Datatype dt_coord, size_t num_edges, yac_int *sorted_edge_ids, size_t *sorted_edge_reorder_idx, size_t num_vertices, yac_int *sorted_vertex_ids, size_t *sorted_vertex_reorder_idx, int max_num_vertices_per_cell, size_t **cell_to_vertex_, size_t **cell_to_edge_, int **num_vertices_per_cell_, struct yac_field_data **cell_field_data_)
 
static struct bounding_circlegenerate_cell_bounding_circles (size_t num_cells, int max_num_vertices_per_cell, int *num_vertices_per_cell, size_t *cell_to_vertex, size_t *cell_to_vertex_offsets, yac_coordinate_pointer vertex_coordinates, size_t *cell_to_edge, size_t *cell_to_edge_offsets, enum yac_edge_type *edge_type)
 
static int get_max_num_vertices_per_cell (struct yac_basic_grid_data *grid_data, MPI_Comm comm)
 
static struct yac_dist_grid generate_dist_grid (struct proc_sphere_part_node *proc_sphere_part, int *vertex_ranks, struct yac_basic_grid *grid, MPI_Comm comm)
 
static void setup_search_data (struct yac_dist_grid_pair *dist_grid_pair)
 
static struct proc_sphere_part_nodegenerate_dist_grid_decomposition (struct yac_basic_grid *grid_a, struct yac_basic_grid *grid_b, int **vertex_ranks[2], MPI_Comm comm)
 
struct yac_dist_grid_pairyac_dist_grid_pair_new (struct yac_basic_grid *grid_a, struct yac_basic_grid *grid_b, MPI_Comm comm)
 
struct yac_dist_grid_pairyac_dist_grid_pair_new_f2c (struct yac_basic_grid *grid_a, struct yac_basic_grid *grid_b, MPI_Fint comm)
 
MPI_Comm yac_dist_grid_pair_get_MPI_Comm (struct yac_dist_grid_pair *grid_pair)
 
struct yac_dist_gridyac_dist_grid_pair_get_dist_grid (struct yac_dist_grid_pair *grid_pair, char const *grid_name)
 
struct yac_const_basic_grid_datayac_dist_grid_get_basic_grid_data (struct yac_dist_grid *dist_grid)
 
size_t yac_dist_grid_get_local_count (struct yac_dist_grid *dist_grid, enum yac_location location)
 
static size_t yac_dist_grid_get_total_count (struct yac_dist_grid *dist_grid, enum yac_location location)
 
static size_t yac_dist_grid_get_count (struct yac_dist_grid *dist_grid, enum yac_location location)
 
static int const * yac_dist_grid_get_owner_mask (struct yac_dist_grid *dist_grid, enum yac_location location)
 
static yac_int const * yac_dist_grid_get_global_ids (struct yac_dist_grid *dist_grid, enum yac_location location)
 
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)
 
static struct yac_field_datayac_dist_grid_get_field_data (struct yac_dist_grid *dist_grid, enum yac_location location)
 
int const * yac_dist_grid_get_field_mask (struct yac_dist_grid *dist_grid, struct yac_interp_field field)
 
yac_const_coordinate_pointer yac_dist_grid_get_field_coords (struct yac_dist_grid *dist_grid, struct yac_interp_field field)
 
size_t yac_dist_grid_get_unmasked_local_count (struct yac_dist_grid *dist_grid, struct yac_interp_field field)
 
static void yac_remote_point_infos_free (struct remote_point_infos *point_infos, size_t count)
 
static void yac_dist_grid_free (struct yac_dist_grid grid)
 
void yac_dist_grid_pair_delete (struct yac_dist_grid_pair *grid_pair)
 
static int coord_in_cell (double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell)
 
static int coord_in_cell_gc (double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell)
 
void yac_const_basic_grid_data_get_grid_cell (struct yac_const_basic_grid_data *grid_data, size_t cell_idx, struct yac_grid_cell *buffer_cell)
 
static struct bnd_sphere_part_searchdist_grid_pair_get_cell_sphere_part (struct yac_dist_grid_pair *grid_pair, char const *grid_name)
 
static void dist_grid_pair_do_point_search_local (struct yac_dist_grid_pair *grid_pair, char const *grid_name, yac_coordinate_pointer search_coords, size_t count, size_t *cells, int(*coord_in_cell)(double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell))
 
static void lookup_single_remote_point_reorder_locally (struct yac_dist_grid *dist_grid, enum yac_location location, struct single_remote_point_reorder *ids, size_t *count, size_t *idx)
 
static int get_pack_size_field_data (struct yac_field_data *field_data, MPI_Comm comm)
 
static int get_pack_size_base_cell (struct yac_field_data *cell_field_data, MPI_Datatype bnd_circle_dt, MPI_Comm comm)
 
static int get_pack_size_base_vertex (struct yac_field_data *vertex_field_data, MPI_Comm comm)
 
static int get_pack_size_base_edge (struct yac_field_data *edge_field_data, MPI_Comm comm)
 
static void get_pack_sizes_cell (struct yac_dist_grid *dist_grid, uint64_t *pos, size_t count, int *pack_sizes, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void get_pack_sizes_vertex (struct yac_dist_grid *dist_grid, uint64_t *pos, size_t count, int *pack_sizes, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void get_pack_sizes_edge (struct yac_dist_grid *dist_grid, uint64_t *pos, size_t count, int *pack_sizes, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void get_pack_sizes (struct yac_dist_grid *dist_grid, enum yac_location location, uint64_t *pos, size_t count, int *pack_sizes, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void pack_field_data (size_t idx, void *buffer, int buffer_size, int *position, struct yac_field_data *field_data, MPI_Comm comm)
 
static void pack_grid_data_vertex (struct yac_dist_grid *dist_grid, size_t idx, void *buffer, int buffer_size, int *position, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void pack_grid_data_edge_ (struct yac_dist_grid *dist_grid, size_t idx, void *buffer, int buffer_size, int *position, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void pack_grid_data_edge (struct yac_dist_grid *dist_grid, size_t idx, void *buffer, int buffer_size, int *position, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void pack_grid_data_cell (struct yac_dist_grid *dist_grid, size_t idx, void *buffer, int buffer_size, int *position, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void pack_grid_data (struct yac_dist_grid *dist_grid, enum yac_location location, uint64_t *pos, size_t count, void **pack_data, int *pack_sizes, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void unpack_field_data (void *buffer, int buffer_size, int *position, size_t idx, struct temp_field_data temp_field_data, MPI_Comm comm)
 
static void unpack_grid_data_vertex (struct global_vertex_reorder *vertex, size_t idx, void *buffer, int buffer_size, int *position, struct temp_field_data temp_vertex_field_data, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void unpack_grid_data_edge (struct global_edge_reorder *edge, size_t idx, void *buffer, int buffer_size, int *position, struct temp_field_data temp_edge_field_data, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static int compare_global_vertex_reorder_global_id (const void *a, const void *b)
 
static void add_field_data (struct yac_field_data *field_data, struct temp_field_data temp_field_data, void *reorder_idx, size_t reorder_idx_size, size_t old_count, size_t new_count)
 
static void yac_remote_point_infos_single_free (struct remote_point_infos *point_infos)
 
static void yac_dist_grid_add_vertices (struct yac_dist_grid *dist_grid, struct global_vertex_reorder *vertices, size_t count, size_t *idx, struct temp_field_data temp_vertex_field_data)
 
static int compare_global_edge_reorder_global_id (const void *a, const void *b)
 
static void yac_dist_grid_add_edges (struct yac_dist_grid *dist_grid, struct global_edge_reorder *edges, size_t count, size_t *idx, struct temp_field_data temp_edge_field_data)
 
static void yac_dist_grid_add_cells (struct yac_dist_grid *dist_grid, yac_int *cell_ids, int *num_vertices_per_cell, struct bounding_circle *cell_bnd_circles, size_t count, size_t *cell_to_vertex, size_t *cell_to_edge, struct remote_point_infos *cell_owners, struct temp_field_data temp_cell_field_data)
 
static void ensure_temp_field_data_sizes (struct temp_field_data *temp_field_data, size_t size)
 
static struct temp_field_data temp_field_data_init (struct yac_field_data *field_data, size_t count)
 
static void temp_field_data_free (struct temp_field_data temp_field_data)
 
static void unpack_grid_data_cells (struct yac_dist_grid *dist_grid, size_t count, void *buffer, int buffer_size, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void unpack_grid_data_vertices (struct yac_dist_grid *dist_grid, size_t count, void *buffer, int buffer_size, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void unpack_grid_data_edges (struct yac_dist_grid *dist_grid, size_t count, void *buffer, int buffer_size, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static void unpack_grid_data (struct yac_dist_grid *dist_grid, enum yac_location location, size_t count, void *buffer, int buffer_size, MPI_Datatype bnd_circle_dt, MPI_Datatype point_info_dt, MPI_Comm comm)
 
static int compare_single_remote_point_reorder_owner (const void *a, const void *b)
 
static void yac_dist_grid_single_remote_point_to_local (struct yac_dist_grid *dist_grid, struct single_remote_point *ids, size_t count, enum yac_location location, size_t *idx)
 
static MPI_Datatype yac_get_single_remote_point_mpi_datatype (MPI_Comm comm)
 
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, int(*coord_in_cell)(double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell))
 
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)
 
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)
 
static struct point_sphere_part_searchyac_dist_grid_get_field_sphere_part (struct yac_dist_grid *dist_grid, struct yac_interp_field field)
 
static void yac_dist_grid_get_n_unmasked_local_points (struct yac_dist_grid *dist_grid, struct yac_interp_field field, int comm_rank, size_t n, struct single_remote_point *points)
 
static int compare_nnn_search_results_cos_angle (void const *a, void const *b)
 
static void do_nnn_search_local (struct yac_dist_grid *dist_grid, struct yac_interp_field field, size_t count, yac_coordinate_pointer search_coords, size_t n, double cos_max_search_distance, size_t *result_points)
 
static int compare_size_t (const void *a, const void *b)
 
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)
 
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)
 
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)
 
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)
 
static struct bounding_circle compute_dist_edge_bnd_circle (struct yac_dist_grid *dist_grid, size_t edge_id)
 
static void yac_dist_grid_get_cell_neighbours (struct yac_dist_grid *dist_grid, struct proc_sphere_part_node *proc_sphere_part, size_t *cells, size_t count, size_t *neighbours)
 
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)
 
struct remote_pointyac_dist_grid_get_remote_points (struct yac_dist_grid *dist_grid, enum yac_location location, size_t *points, size_t count)
 
static int compute_bucket (yac_int value, int comm_size)
 
static int get_global_id_pack_size (MPI_Comm comm)
 
static void pack_global_id (yac_int global_id, void *buffer, int buffer_size, int *position, MPI_Comm comm)
 
static void unpack_global_id (void *buffer, int buffer_size, int *position, yac_int *global_id, MPI_Comm comm)
 
static int get_single_remote_point_pack_size (MPI_Datatype single_remote_point_dt, MPI_Comm comm)
 
static void yac_single_remote_point_pack (struct single_remote_point *point, void *buffer, int buffer_size, int *position, MPI_Datatype single_remote_point_dt, MPI_Comm comm)
 
static void yac_single_remote_point_unpack (void *buffer, int buffer_size, int *position, struct single_remote_point *point, MPI_Datatype single_remote_point_dt, MPI_Comm comm)
 
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)
 
static void get_dist_vertex_cells (struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *vertices, size_t count, size_t **cells, size_t *num_cells_per_vertex, struct yac_interp_field field)
 
static void yac_dist_grid_pair_get_aux_grid_cells (struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *vertices, size_t count, size_t **cells, int *num_cells_per_vertex, struct yac_interp_field field)
 
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)
 
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)
 
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)
 
static void relocate_points (size_t **points, size_t *reorder_idx, int *ranks, size_t count, enum yac_location location, size_t local_count, size_t recv_count, struct single_remote_point *id_send_buffer, struct single_remote_point *id_recv_buffer, size_t *sendcounts, size_t *sdispls, size_t *recvcounts, size_t *rdispls, MPI_Datatype single_remote_point_dt, MPI_Comm comm, struct yac_dist_grid *dist_grid)
 
static void relocate_weights (double **weights, size_t *reorder_idx, int *ranks, size_t count, size_t send_count, size_t local_count, size_t recv_count, size_t *sendcounts, size_t *sdispls, size_t *recvcounts, size_t *rdispls, MPI_Comm comm)
 
void yac_dist_grid_determine_dist_vertex_owner (struct yac_dist_grid *dist_grid, struct proc_sphere_part_node *proc_sphere_part, size_t *vertices, size_t count, int *ranks)
 
void yac_dist_grid_determine_dist_ce_owner (struct yac_dist_grid *dist_grid, struct proc_sphere_part_node *proc_sphere_part, size_t *indices, size_t count, int *ranks, size_t(*get_ce_reference_vertex)(struct yac_dist_grid *, size_t))
 
void yac_dist_grid_determine_dist_cell_owner (struct yac_dist_grid *dist_grid, struct proc_sphere_part_node *proc_sphere_part, size_t *cells, size_t count, int *ranks)
 
void yac_dist_grid_determine_dist_edge_owner (struct yac_dist_grid *dist_grid, struct proc_sphere_part_node *proc_sphere_part, size_t *edges, size_t count, int *ranks)
 
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)
 
void yac_dist_grid_pair_determine_orig_owner (struct yac_dist_grid_pair *grid_pair, char const *grid_name, size_t *points, size_t count, enum yac_location location, int *ranks)
 
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)
 
yac_size_t_2_pointer yac_dist_grid_generate_edge_to_cell (struct yac_dist_grid_pair *grid_pair, char const *grid_name)
 

Variables

static char const yac_dist_grid_dummy_name [] = "yac_dist_grid_dummy"
 

Macro Definition Documentation

◆ CHECK_GRID_NAME

#define CHECK_GRID_NAME ( GRID_NAME)
Value:
strcmp((GRID_NAME), yac_dist_grid_dummy_name), \
"grid name \"%s\" is a reserved dist-grid internal name", (GRID_NAME))
static char const yac_dist_grid_dummy_name[]
Definition dist_grid.c:31
#define YAC_ASSERT_F(exp, format,...)
Definition yac_assert.h:39

Definition at line 40 of file dist_grid.c.

◆ CHECK_LOCATION

#define CHECK_LOCATION ( )
Value:
"\"%d\" is not a valid location", (int)location)
@ YAC_LOC_CORNER
Definition location.h:15
@ YAC_LOC_EDGE
Definition location.h:16
@ YAC_LOC_CELL
Definition location.h:14
int const * location

Definition at line 33 of file dist_grid.c.

Function Documentation

◆ add_field_data()

static void add_field_data ( struct yac_field_data * field_data,
struct temp_field_data temp_field_data,
void * reorder_idx,
size_t reorder_idx_size,
size_t old_count,
size_t new_count )
static

Definition at line 2996 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_core_masks()

static void check_core_masks ( struct yac_basic_grid * grid)
static

Definition at line 763 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compare_global_edge_reorder_global_id()

static int compare_global_edge_reorder_global_id ( const void * a,
const void * b )
static

Definition at line 3147 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_global_vertex_reorder_global_id()

static int compare_global_vertex_reorder_global_id ( const void * a,
const void * b )
static

Definition at line 2987 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_n_ids_reorder_ids()

static int compare_n_ids_reorder_ids ( const void * a,
const void * b )
static

Definition at line 325 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_n_ids_reorder_reorder()

static int compare_n_ids_reorder_reorder ( const void * a,
const void * b )
static

Definition at line 338 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_nnn_search_results_cos_angle()

static int compare_nnn_search_results_cos_angle ( void const * a,
void const * b )
static

Definition at line 4115 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_single_remote_point_global_id()

static int compare_single_remote_point_global_id ( const void * a,
const void * b )
static

Definition at line 1150 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_single_remote_point_reorder_global_id()

static int compare_single_remote_point_reorder_global_id ( const void * a,
const void * b )
static

Definition at line 1430 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_single_remote_point_reorder_owner()

static int compare_single_remote_point_reorder_owner ( const void * a,
const void * b )
static

Definition at line 3707 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_single_remote_point_reorder_reorder_idx()

static int compare_single_remote_point_reorder_reorder_idx ( const void * a,
const void * b )
static

Definition at line 1439 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_size_t()

static int compare_size_t ( const void * a,
const void * b )
inlinestatic

Definition at line 4205 of file dist_grid.c.

Here is the caller graph for this function:

◆ compute_bucket()

static int compute_bucket ( yac_int value,
int comm_size )
inlinestatic

Definition at line 5497 of file dist_grid.c.

Here is the caller graph for this function:

◆ compute_dist_edge_bnd_circle()

static struct bounding_circle compute_dist_edge_bnd_circle ( struct yac_dist_grid * dist_grid,
size_t edge_id )
static

Definition at line 5129 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compute_edge_bnd_circle()

static struct bounding_circle compute_edge_bnd_circle ( yac_size_t_2_pointer edge_to_vertex,
const yac_coordinate_pointer vertex_coordinates,
size_t edge_id )
static

Definition at line 931 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ coord_in_cell()

static int coord_in_cell ( double coord[3],
struct yac_dist_grid * dist_grid,
size_t cell_idx,
struct yac_grid_cell * buffer_cell )
static

Definition at line 2392 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ coord_in_cell_gc()

static int coord_in_cell_gc ( double coord[3],
struct yac_dist_grid * dist_grid,
size_t cell_idx,
struct yac_grid_cell * buffer_cell )
static

Definition at line 2404 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ determine_cell_owner_mask()

static int * determine_cell_owner_mask ( struct yac_dist_grid * dist_grid,
int is_root,
int * vertex_owner_mask )
static

Definition at line 200 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ determine_dist_cell_ranks()

static void determine_dist_cell_ranks ( struct proc_sphere_part_node * proc_sphere_part,
struct yac_basic_grid_data * grid_data,
MPI_Comm comm,
int ** dist_cell_ranks,
int * dist_cell_rank_counts,
size_t * dist_cell_rank_offsets,
int max_num_vertices_per_cell )
static

Definition at line 350 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ determine_dist_edge_ranks()

static void determine_dist_edge_ranks ( struct proc_sphere_part_node * proc_sphere_part,
struct yac_basic_grid * grid,
MPI_Comm comm,
size_t * dist_cell_rank_offsets,
size_t * dist_edge_rank_offsets,
int * num_cell_ranks,
int * num_edge_ranks,
int ** rank_buffer,
size_t * rank_buffer_array_size )
static

Definition at line 953 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ determine_dist_vertex_ranks()

static void determine_dist_vertex_ranks ( int * vertex_ranks,
struct yac_basic_grid * grid,
MPI_Comm comm,
size_t * dist_edge_rank_offsets,
int * num_edge_ranks,
int * num_vertex_ranks,
int ** rank_buffer,
size_t * rank_buffer_array_size )
static

Definition at line 1072 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ determine_edge_owner_mask()

static int * determine_edge_owner_mask ( struct yac_dist_grid * dist_grid,
int * vertex_owner_mask )
static

Definition at line 232 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dist_grid_pair_do_point_search_local()

static void dist_grid_pair_do_point_search_local ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name,
yac_coordinate_pointer search_coords,
size_t count,
size_t * cells,
int(* coord_in_cell )(double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell) )
static

Definition at line 2464 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dist_grid_pair_get_cell_sphere_part()

static struct bnd_sphere_part_search * dist_grid_pair_get_cell_sphere_part ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name )
static

Definition at line 2450 of file dist_grid.c.

Here is the caller graph for this function:

◆ do_nnn_search_local()

static void do_nnn_search_local ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field,
size_t count,
yac_coordinate_pointer search_coords,
size_t n,
double cos_max_search_distance,
size_t * result_points )
static

Definition at line 4131 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ensure_temp_field_data_sizes()

static void ensure_temp_field_data_sizes ( struct temp_field_data * temp_field_data,
size_t size )
static

Definition at line 3432 of file dist_grid.c.

Here is the caller graph for this function:

◆ field_data_init()

static struct yac_field_data * field_data_init ( struct yac_field_data * orig_field_data,
size_t dist_size,
Xt_redist redist_mask,
Xt_redist redist_coords,
MPI_Comm comm )
static

Definition at line 1456 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_ce_ids()

static void generate_ce_ids ( struct yac_basic_grid_data * grid_data,
int * vertex_ranks,
int max_num_vertices_per_cell,
MPI_Comm comm )
static

Definition at line 451 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_cell_bounding_circles()

static struct bounding_circle * generate_cell_bounding_circles ( size_t num_cells,
int max_num_vertices_per_cell,
int * num_vertices_per_cell,
size_t * cell_to_vertex,
size_t * cell_to_vertex_offsets,
yac_coordinate_pointer vertex_coordinates,
size_t * cell_to_edge,
size_t * cell_to_edge_offsets,
enum yac_edge_type * edge_type )
static

Definition at line 1835 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_dist_grid()

static struct yac_dist_grid generate_dist_grid ( struct proc_sphere_part_node * proc_sphere_part,
int * vertex_ranks,
struct yac_basic_grid * grid,
MPI_Comm comm )
static

Definition at line 1913 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_dist_grid_decomposition()

static struct proc_sphere_part_node * generate_dist_grid_decomposition ( struct yac_basic_grid * grid_a,
struct yac_basic_grid * grid_b,
int ** vertex_ranks[2],
MPI_Comm comm )
static

Definition at line 2068 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_dist_remote_points()

static void generate_dist_remote_points ( struct proc_sphere_part_node * proc_sphere_part,
struct yac_basic_grid * grid,
int * vertex_ranks,
int max_num_vertices_per_cell,
MPI_Comm comm,
struct remote_point_infos ** dist_point_infos,
yac_int ** dist_global_ids,
size_t * dist_count )
static

Definition at line 1162 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_edge_to_cell()

static yac_size_t_2_pointer generate_edge_to_cell ( const_size_t_pointer cell_to_edge,
const_int_pointer num_edges_per_cell,
int * core_cell_mask,
size_t num_cells,
size_t num_edges )
static

Definition at line 889 of file dist_grid.c.

Here is the caller graph for this function:

◆ generate_global_ids()

static void generate_global_ids ( struct yac_basic_grid * grid,
int * vertex_ranks,
int max_num_vertices_per_cell,
MPI_Comm comm )
static

Definition at line 872 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_owner_masks()

static void generate_owner_masks ( struct yac_dist_grid * dist_grid,
int comm_rank,
int * vertex_owner )
static

Definition at line 250 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_sorted_ids()

static void generate_sorted_ids ( yac_int * global_ids,
size_t count,
yac_int ** sorted_global_ids,
size_t ** reorder_idx )
static

Definition at line 1420 of file dist_grid.c.

Here is the caller graph for this function:

◆ generate_vertex_to_edge()

static void generate_vertex_to_edge ( yac_size_t_2_pointer edge_to_vertex,
size_t num_edges,
size_t num_vertices,
size_t * vertex_to_edge,
int * num_edges_per_vertex )
static

Definition at line 1041 of file dist_grid.c.

Here is the caller graph for this function:

◆ get_cell_reference_vertex()

static size_t get_cell_reference_vertex ( struct yac_dist_grid * dist_grid,
size_t cell_idx )
static

Definition at line 176 of file dist_grid.c.

Here is the caller graph for this function:

◆ get_dist_vertex_cells()

static void get_dist_vertex_cells ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name,
size_t * vertices,
size_t count,
size_t ** cells,
size_t * num_cells_per_vertex,
struct yac_interp_field field )
static

Definition at line 5789 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_edge_reference_vertex()

static size_t get_edge_reference_vertex ( struct yac_dist_grid * dist_grid,
size_t edge_idx )
inlinestatic

Definition at line 219 of file dist_grid.c.

Here is the caller graph for this function:

◆ get_global_id_pack_size()

static int get_global_id_pack_size ( MPI_Comm comm)
static

Definition at line 5501 of file dist_grid.c.

Here is the caller graph for this function:

◆ get_max_num_vertices_per_cell()

static int get_max_num_vertices_per_cell ( struct yac_basic_grid_data * grid_data,
MPI_Comm comm )
static

Definition at line 1884 of file dist_grid.c.

Here is the caller graph for this function:

◆ get_pack_size_base_cell()

static int get_pack_size_base_cell ( struct yac_field_data * cell_field_data,
MPI_Datatype bnd_circle_dt,
MPI_Comm comm )
static

Definition at line 2573 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_size_base_edge()

static int get_pack_size_base_edge ( struct yac_field_data * edge_field_data,
MPI_Comm comm )
static

Definition at line 2608 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_size_base_vertex()

static int get_pack_size_base_vertex ( struct yac_field_data * vertex_field_data,
MPI_Comm comm )
static

Definition at line 2593 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_size_field_data()

static int get_pack_size_field_data ( struct yac_field_data * field_data,
MPI_Comm comm )
static

Definition at line 2555 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_sizes()

static void get_pack_sizes ( struct yac_dist_grid * dist_grid,
enum yac_location location,
uint64_t * pos,
size_t count,
int * pack_sizes,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2721 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_sizes_cell()

static void get_pack_sizes_cell ( struct yac_dist_grid * dist_grid,
uint64_t * pos,
size_t count,
int * pack_sizes,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2626 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_sizes_edge()

static void get_pack_sizes_edge ( struct yac_dist_grid * dist_grid,
uint64_t * pos,
size_t count,
int * pack_sizes,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2693 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_pack_sizes_vertex()

static void get_pack_sizes_vertex ( struct yac_dist_grid * dist_grid,
uint64_t * pos,
size_t count,
int * pack_sizes,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2678 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_single_remote_point_pack_size()

static int get_single_remote_point_pack_size ( MPI_Datatype single_remote_point_dt,
MPI_Comm comm )
static

Definition at line 5529 of file dist_grid.c.

Here is the caller graph for this function:

◆ id2idx()

static void id2idx ( char const * caller,
yac_int * ids,
size_t * idx,
size_t num_ids,
yac_int * ref_sorted_ids,
size_t * ref_sorted_reorder_idx,
size_t num_sorted_ids )
static

Definition at line 152 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insert_global_id()

static void insert_global_id ( yac_int * ids,
size_t n,
yac_int id )
static

Definition at line 298 of file dist_grid.c.

Here is the caller graph for this function:

◆ insert_rank()

static void insert_rank ( int * ranks,
int * count,
int rank )
static

Definition at line 309 of file dist_grid.c.

Here is the caller graph for this function:

◆ lookup_single_remote_point_reorder_locally()

static void lookup_single_remote_point_reorder_locally ( struct yac_dist_grid * dist_grid,
enum yac_location location,
struct single_remote_point_reorder * ids,
size_t * count,
size_t * idx )
static

Definition at line 2524 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_field_data()

static void pack_field_data ( size_t idx,
void * buffer,
int buffer_size,
int * position,
struct yac_field_data * field_data,
MPI_Comm comm )
static

Definition at line 2745 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_global_id()

static void pack_global_id ( yac_int global_id,
void * buffer,
int buffer_size,
int * position,
MPI_Comm comm )
static

Definition at line 5511 of file dist_grid.c.

Here is the caller graph for this function:

◆ pack_grid_data()

static void pack_grid_data ( struct yac_dist_grid * dist_grid,
enum yac_location location,
uint64_t * pos,
size_t count,
void ** pack_data,
int * pack_sizes,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2887 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_grid_data_cell()

static void pack_grid_data_cell ( struct yac_dist_grid * dist_grid,
size_t idx,
void * buffer,
int buffer_size,
int * position,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2846 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_grid_data_edge()

static void pack_grid_data_edge ( struct yac_dist_grid * dist_grid,
size_t idx,
void * buffer,
int buffer_size,
int * position,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2830 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_grid_data_edge_()

static void pack_grid_data_edge_ ( struct yac_dist_grid * dist_grid,
size_t idx,
void * buffer,
int buffer_size,
int * position,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2794 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_grid_data_vertex()

static void pack_grid_data_vertex ( struct yac_dist_grid * dist_grid,
size_t idx,
void * buffer,
int buffer_size,
int * position,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2769 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ redistribute_cell_data()

static void redistribute_cell_data ( struct yac_basic_grid * grid,
struct remote_point_infos * dist_cell_infos,
size_t num_cells,
MPI_Comm comm,
MPI_Datatype dt_coord,
size_t num_edges,
yac_int * sorted_edge_ids,
size_t * sorted_edge_reorder_idx,
size_t num_vertices,
yac_int * sorted_vertex_ids,
size_t * sorted_vertex_reorder_idx,
int max_num_vertices_per_cell,
size_t ** cell_to_vertex_,
size_t ** cell_to_edge_,
int ** num_vertices_per_cell_,
struct yac_field_data ** cell_field_data_ )
static

Definition at line 1704 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ redistribute_edge_data()

static void redistribute_edge_data ( struct yac_basic_grid * grid,
struct remote_point_infos * dist_edge_infos,
size_t num_edges,
MPI_Comm comm,
MPI_Datatype dt_coord,
size_t num_vertices,
yac_int * sorted_vertex_ids,
size_t * sorted_vertex_reorder_idx,
yac_size_t_2_pointer * edge_to_vertex_,
enum yac_edge_type ** edge_type_,
struct yac_field_data ** edge_field_data_ )
static

Definition at line 1611 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ redistribute_vertex_data()

static void redistribute_vertex_data ( struct yac_basic_grid * grid,
struct remote_point_infos * dist_vertex_infos,
size_t num_vertices,
MPI_Comm comm,
MPI_Datatype dt_coord,
int * vertex_ranks,
yac_coordinate_pointer * vertex_coordinates_,
int ** vertex_owner_,
struct yac_field_data ** vertex_field_data_ )
static

Definition at line 1569 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ relocate_points()

static void relocate_points ( size_t ** points,
size_t * reorder_idx,
int * ranks,
size_t count,
enum yac_location location,
size_t local_count,
size_t recv_count,
struct single_remote_point * id_send_buffer,
struct single_remote_point * id_recv_buffer,
size_t * sendcounts,
size_t * sdispls,
size_t * recvcounts,
size_t * rdispls,
MPI_Datatype single_remote_point_dt,
MPI_Comm comm,
struct yac_dist_grid * dist_grid )
static

Definition at line 6248 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ relocate_weights()

static void relocate_weights ( double ** weights,
size_t * reorder_idx,
int * ranks,
size_t count,
size_t send_count,
size_t local_count,
size_t recv_count,
size_t * sendcounts,
size_t * sdispls,
size_t * recvcounts,
size_t * rdispls,
MPI_Comm comm )
static

Definition at line 6299 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setup_search_data()

static void setup_search_data ( struct yac_dist_grid_pair * dist_grid_pair)
static

Definition at line 2048 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ temp_field_data_free()

static void temp_field_data_free ( struct temp_field_data temp_field_data)
static

Definition at line 3479 of file dist_grid.c.

Here is the caller graph for this function:

◆ temp_field_data_init()

static struct temp_field_data temp_field_data_init ( struct yac_field_data * field_data,
size_t count )
static

Definition at line 3444 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_field_data()

static void unpack_field_data ( void * buffer,
int buffer_size,
int * position,
size_t idx,
struct temp_field_data temp_field_data,
MPI_Comm comm )
static

Definition at line 2920 of file dist_grid.c.

Here is the caller graph for this function:

◆ unpack_global_id()

static void unpack_global_id ( void * buffer,
int buffer_size,
int * position,
yac_int * global_id,
MPI_Comm comm )
static

Definition at line 5520 of file dist_grid.c.

Here is the caller graph for this function:

◆ unpack_grid_data()

static void unpack_grid_data ( struct yac_dist_grid * dist_grid,
enum yac_location location,
size_t count,
void * buffer,
int buffer_size,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 3682 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_grid_data_cells()

static void unpack_grid_data_cells ( struct yac_dist_grid * dist_grid,
size_t count,
void * buffer,
int buffer_size,
MPI_Datatype bnd_circle_dt,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 3491 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_grid_data_edge()

static void unpack_grid_data_edge ( struct global_edge_reorder * edge,
size_t idx,
void * buffer,
int buffer_size,
int * position,
struct temp_field_data temp_edge_field_data,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2958 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_grid_data_edges()

static void unpack_grid_data_edges ( struct yac_dist_grid * dist_grid,
size_t count,
void * buffer,
int buffer_size,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 3634 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_grid_data_vertex()

static void unpack_grid_data_vertex ( struct global_vertex_reorder * vertex,
size_t idx,
void * buffer,
int buffer_size,
int * position,
struct temp_field_data temp_vertex_field_data,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 2936 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_grid_data_vertices()

static void unpack_grid_data_vertices ( struct yac_dist_grid * dist_grid,
size_t count,
void * buffer,
int buffer_size,
MPI_Datatype point_info_dt,
MPI_Comm comm )
static

Definition at line 3601 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_const_basic_grid_data_get_grid_cell()

void yac_const_basic_grid_data_get_grid_cell ( struct yac_const_basic_grid_data * grid_data,
size_t cell_idx,
struct yac_grid_cell * cell )

returns the data for a selected grid cell

Parameters
[in]grid_databasic grid data
[in]cell_idxlocal id of the selected cell
[out]cellcell data
Remarks
the user has to ensure that the cell was probably initialised
the user has to free the memory associated to cell (see yac_free_grid_cell)

Definition at line 2418 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_add_cells()

static void yac_dist_grid_add_cells ( struct yac_dist_grid * dist_grid,
yac_int * cell_ids,
int * num_vertices_per_cell,
struct bounding_circle * cell_bnd_circles,
size_t count,
size_t * cell_to_vertex,
size_t * cell_to_edge,
struct remote_point_infos * cell_owners,
struct temp_field_data temp_cell_field_data )
static

Definition at line 3289 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_add_edges()

static void yac_dist_grid_add_edges ( struct yac_dist_grid * dist_grid,
struct global_edge_reorder * edges,
size_t count,
size_t * idx,
struct temp_field_data temp_edge_field_data )
static

Definition at line 3156 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_add_vertices()

static void yac_dist_grid_add_vertices ( struct yac_dist_grid * dist_grid,
struct global_vertex_reorder * vertices,
size_t count,
size_t * idx,
struct temp_field_data temp_vertex_field_data )
static

Definition at line 3040 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_determine_dist_ce_owner()

void yac_dist_grid_determine_dist_ce_owner ( struct yac_dist_grid * dist_grid,
struct proc_sphere_part_node * proc_sphere_part,
size_t * indices,
size_t count,
int * ranks,
size_t(* get_ce_reference_vertex )(struct yac_dist_grid *, size_t) )

Definition at line 6394 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_determine_dist_cell_owner()

void yac_dist_grid_determine_dist_cell_owner ( struct yac_dist_grid * dist_grid,
struct proc_sphere_part_node * proc_sphere_part,
size_t * cells,
size_t count,
int * ranks )

Definition at line 6445 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_determine_dist_edge_owner()

void yac_dist_grid_determine_dist_edge_owner ( struct yac_dist_grid * dist_grid,
struct proc_sphere_part_node * proc_sphere_part,
size_t * edges,
size_t count,
int * ranks )

Definition at line 6455 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_determine_dist_vertex_owner()

void yac_dist_grid_determine_dist_vertex_owner ( struct yac_dist_grid * dist_grid,
struct proc_sphere_part_node * proc_sphere_part,
size_t * vertices,
size_t count,
int * ranks )

Definition at line 6334 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_free()

static void yac_dist_grid_free ( struct yac_dist_grid grid)
static

Definition at line 2351 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_generate_edge_to_cell()

yac_size_t_2_pointer yac_dist_grid_generate_edge_to_cell ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name )

Generates the edge_to_cell data for the current state of the local grid.

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
Returns
edge_to_cell data of current state of local grid
Remarks
use is responsible for freeing the edge_to_cell_array

Definition at line 6613 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_basic_grid_data()

struct yac_const_basic_grid_data * yac_dist_grid_get_basic_grid_data ( struct yac_dist_grid * dist_grid)

gets the basic grid data of a distributed grid

Parameters
[in]dist_griddistributed grid
Returns
basic grid data
Remarks
the contents of the basic grid data may change by some calls (for example by yac_dist_grid_pair_do_bnd_circle_search)

Definition at line 2204 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_cell_neighbours()

static void yac_dist_grid_get_cell_neighbours ( struct yac_dist_grid * dist_grid,
struct proc_sphere_part_node * proc_sphere_part,
size_t * cells,
size_t count,
size_t * neighbours )
static

Definition at line 5137 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_count()

static size_t yac_dist_grid_get_count ( struct yac_dist_grid * dist_grid,
enum yac_location location )
static

Definition at line 2236 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_field_coords()

yac_const_coordinate_pointer yac_dist_grid_get_field_coords ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field )

returns a pointer to a field coordinates

Parameters
[in]dist_griddistributed grid
[in]fieldfield for which the coordinates are to be returned
Returns
field coordinates (NULL if no mask is available)
Remarks
if the field location is YAC_LOC_CORNER and no field coordinates are available/defined, this routine will return a pointer to the vertex coordinates of the grid

Definition at line 2308 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_field_data()

static struct yac_field_data * yac_dist_grid_get_field_data ( struct yac_dist_grid * dist_grid,
enum yac_location location )
static

Definition at line 2289 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_field_mask()

int const * yac_dist_grid_get_field_mask ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field )

returns a pointer to a field mask

Parameters
[in]dist_griddistributed grid
[in]fieldfield for which the mask is to be returned
Returns
field mask (NULL if no mask is available/defined)

Definition at line 2296 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_field_sphere_part()

static struct point_sphere_part_search * yac_dist_grid_get_field_sphere_part ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field )
static

Definition at line 4050 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_global_ids()

static yac_int const * yac_dist_grid_get_global_ids ( struct yac_dist_grid * dist_grid,
enum yac_location location )
static

Definition at line 2252 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_local_count()

size_t yac_dist_grid_get_local_count ( struct yac_dist_grid * dist_grid,
enum yac_location location )

gets the number of points in the local part of the distributed grid

Parameters
[in]dist_griddistributed grid
[in]locationlocation of the points
Remarks
each global point is only counted once by a single process

Definition at line 2212 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_local_unmasked_points()

void yac_dist_grid_get_local_unmasked_points ( struct yac_dist_grid * grid,
struct yac_interp_field field,
size_t ** indices,
size_t * count )

gets all unmasked points available in the local part of the distributed grid

Parameters
[in]griddistributed grid
[in]fieldfield description
[out]indiceslocal indices of all unmasked local cells
[out]countnumber of entries in indices
Remarks
each unmask point of the global grid is returned only by a single process

Definition at line 2263 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_n_unmasked_local_points()

static void yac_dist_grid_get_n_unmasked_local_points ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field,
int comm_rank,
size_t n,
struct single_remote_point * points )
static

Definition at line 4079 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_get_owner_mask()

static int const * yac_dist_grid_get_owner_mask ( struct yac_dist_grid * dist_grid,
enum yac_location location )
static

Definition at line 2244 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_remote_points()

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 )

allocates and returns remote_point informations for a list of selected points

Parameters
[in]dist_griddistributed grid
[in]locationlocation of the requested points
[in]pointslocal ids of selected points
[in]countnumber of entries in points
Returns
remote_point information for the selected points
Remarks
the user is responsible for freeing the memory allocated for the remote_point information

Definition at line 5475 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_total_count()

static size_t yac_dist_grid_get_total_count ( struct yac_dist_grid * dist_grid,
enum yac_location location )
static

Definition at line 2226 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_get_unmasked_local_count()

size_t yac_dist_grid_get_unmasked_local_count ( struct yac_dist_grid * dist_grid,
struct yac_interp_field field )

Definition at line 2324 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_global_to_local()

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 )

returns the local ids for the provided global ids

Parameters
[in]dist_griddistributed grid
[in]locationlocation of the selected points
[in]global_idsglobal ids of the selected points
[in]countnumber of entries in global_ids
[out]local_idslocal ids of the selected points
Remarks
the user has to ensure that the array associated to local_ids is big enough to hold enough elements
in case one or more selected global ids are not available in the local data, the local data will be extended accordingly

Definition at line 5560 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_delete()

void yac_dist_grid_pair_delete ( struct yac_dist_grid_pair * grid_pair)

delete all memory associated to the provided grid pair

Parameters
[in,out]grid_pair

Definition at line 2377 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_determine_dist_owner()

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 )

Determines the ranks of the distributed owners for the selected points

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
[in]pointslocal ids of selected points
[in]countnumber of entries in points
[in]locationlocation of the requested points
[out]ranksdistributed owners of selected points

Definition at line 6465 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_determine_orig_owner()

void yac_dist_grid_pair_determine_orig_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 at line 6485 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_bnd_circle_search()

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 )

search for all cells matching the provided bounding circles

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]bnd_circlessearch bounding circles
[in]countnumber of search bounding circles
[out]cellslocal ids of results cells
[out]num_results_per_bnd_circlenumber of results per bounding circle
[in]fieldfield description

Definition at line 4531 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_cell_search()

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 )

search for matches between cells of the two grids within the grid pair

Parameters
[in]grid_pairdistributed grid pair
[in]search_grid_namegrid name of the grid from which to take the search cells
[in]result_grid_namegrid name of the grid from which to take the matching cells
[in]search_cellslocal ids of search cells
[in]countnumber of search cells
[out]result_cellslocal ids of results cells
[out]num_results_per_search_cellnumber of results per search cell
[in]result_fieldfield description

Definition at line 5055 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_dnn_search()

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 )

search for all points matching the provided bounding circles

Parameters
[in,out]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]bnd_circlessearch bounding circles
[in]countnumber of search bounding circles
[out]pointslocal ids of result points
[out]num_results_per_bnd_circlenumber of results per bounding
[in]fieldcircle field description
Remarks
The user has to make sure that num_results_per_bnd_circle has a size of at least count.

Definition at line 4848 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_nnn_search()

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 )

does a n-nearest-neighbour search

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]search_coordssearch coordinates
[in]countnumber of search coordinates
[out]local_idslocal ids of results points
[in]nnumber of points per search coordinate
[in]fieldfield description
[in]max_search_distanceroutine does not return further away then this value (valid range: [0;M_PI])
Remarks
This routine tries to find up to "count" result points. The "local_ids" array can contain "SIZE_MAX" in case this routine is unable to find the sufficient number of points.

Definition at line 4212 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_point_search()

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 )

search for cells that map to the provided search coordinates

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]search_coordssearch coordinates
[in]countnumber of search coordinates
[out]cellslocal ids of matching cells
Remarks
in case for a search coordinate no matching cell was found, the respective entry in cells is SIZE_MAX

Definition at line 4031 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_point_search_()

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,
int(* coord_in_cell )(double coord[3], struct yac_dist_grid *dist_grid, size_t cell_idx, struct yac_grid_cell *buffer_cell) )

Definition at line 3866 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_do_point_search_gc()

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 )

search for cells that map to the provided search coordinates

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]search_coordssearch coordinates
[in]countnumber of search coordinates
[out]cellslocal ids of matching cells
Remarks
SIZE_MAX is the returned result in case no cell was found
assumes that all grid edges are on great circle edges

Definition at line 4039 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_aux_grid()

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 )

generates for all vertices of the grid the list of all cells surrounding the vertices
vertices not belonging to the selected cells will have a zero entry in num_cells_per_vertex

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
[in]cellsselected cells
[in]countnumber of entries in cells
[out]vertex_to_celllist of result cells for all vertices associated to the selected cells
[out]vertex_to_cell_offsetsthe results cells for vertex i can be found at:
vertex_to_cell + vertex_to_cell_offsets[i]
[out]num_cells_per_vertexnumber of result cells for each vertex
[in]fieldif the provided field contains a mask for cells, it will be used
Remarks
the result cells for a vertex are sorted in clock- or counter clockwise order
in case a vertex is not fully surrounded by unmasked cells, the respective entry in num_cells_per_vertex is 0
the user is responsible to free the memory returned through the out arrays

Definition at line 6177 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_aux_grid_cells()

static void yac_dist_grid_pair_get_aux_grid_cells ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name,
size_t * vertices,
size_t count,
size_t ** cells,
int * num_cells_per_vertex,
struct yac_interp_field field )
static

returns for each selected vertex the list of all cells surrounding this vertex

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
[in]verticeslocal ids of selected vertices
[in]countnumber of entries in vertices
[out]cellslist of result cells for the selected vertices
[out]num_cells_per_vertexnumber of cells per selected vertex
[in]fieldif the provided field contains a mask for cells, it will be used
Remarks
the result cells for a vertex are sorted in clock- or counter clockwise order
in case a vertex is not fully surrounded by unmasked cells, the respective entry in num_cells_per_vertex is 0
the user is responsible to free the memory returned through cells
the user has to ensure that the array associated to num_vertices_per_cell is big enough to hold enough elements

Definition at line 5875 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_cell_neighbours()

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 )

gets neighbouring grid cells for all provided cells

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid for which the search is to be performed
[in]cellslocal ids of cells for which the neighbours are to be determined
[in]countnumber for entries in cells
[out]neighboursneighbours for all edges of all provided cells
Remarks
the user has to ensure that the array neighbours has the appropriate size, which is the sum of the number of edges for each provided cell
for each provided cell, this routine sets the neighbours for all edges of the cells
in case there is no neighbour of an edge, the respective entry contains SIZE_MAX
the result cells are sorted in clock- or counter clockwise order

Definition at line 5466 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_corner_cells()

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 )

Determines for all provided vertices the cells surrouding them.

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
[in]verticeslocal ids of selected vertices
[in]countnumber of entries in vertices
[out]vertex_to_celllist of result cells for all vertices associated to the selected cells
[out]num_cells_per_vertexnumber of result cells for each vertex
Remarks
the result cells for a vertex is sorted by their global id
the user is responsible for free the memory of the vertex_to_cell array
the user has to make sure that the array num_cells_per_vertex is at least of size "count"

Definition at line 6128 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_dist_grid()

struct yac_dist_grid * yac_dist_grid_pair_get_dist_grid ( struct yac_dist_grid_pair * grid_pair,
char const * grid_name )

gets one of the two grids from the distributed grid pairs

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the selected grid
Returns
distributed grid

Definition at line 2191 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_MPI_Comm()

MPI_Comm yac_dist_grid_pair_get_MPI_Comm ( struct yac_dist_grid_pair * grid_pair)

gets a communicator containing all ranks of the distributed grid pair

Parameters
[in]grid_pairdistributed grid pair
Returns
comm communicator

Definition at line 2186 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_dist_grid_pair_get_vertex_neighbours()

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 )

Determines all non-masked neighour vertices for the selected vertices

Parameters
[in]grid_pairdistributed grid pair
[in]grid_namegrid name of the grid on which this routine is supposed to work on
[in]verticeslocal ids of selected vertices
[in]countnumber of entries in vertices
[out]neigh_verticesneighbour vertices
[out]num_neighs_per_vertexnumber of neighbours per vertex
[in]fieldif the provided field contains a mask for corners, it will be used
Remarks
the user has to ensure that num_neighs_per_vertex is allocated big enough
the user is responsible for freeing memory associated to neigh_vertices

Definition at line 6013 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_new()

struct yac_dist_grid_pair * yac_dist_grid_pair_new ( struct yac_basic_grid * grid_a,
struct yac_basic_grid * grid_b,
MPI_Comm comm )

generate a distributed grid pair

Parameters
[in]grid_afirst basic grid
[in]grid_bsecond basic grid
[in]commcommunicator containing the ranks of all processes participating in this call
Returns
distributed grid pair
Remarks
this routine is collective for all processes in comm

Definition at line 2089 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_pair_new_f2c()

struct yac_dist_grid_pair * yac_dist_grid_pair_new_f2c ( struct yac_basic_grid * grid_a,
struct yac_basic_grid * grid_b,
MPI_Fint comm )

Definition at line 2178 of file dist_grid.c.

Here is the call graph for this function:

◆ yac_dist_grid_pair_relocate_point_pairs()

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 )

Each point in a distributed grid has a unique owner rank.
This routine relocates point pairs of two grids. If (a_is_ref != 0), this routine will relocate the point pairs such that each process only has pairs with points_a being owned by the respective process.

Parameters
[in]grid_pairdistributed grid pair
[in]a_is_refdetermines whether points_a or points_b are used as the sorting reference
[in]to_dist_ownerdetermines whether the sorting is based on the dist or orig owner of the respective points
[in]grid_name_agrid name for the a-part of point pairs
[in,out]points_alocal ids of the a-part of the point pairs
[in]location_alocation of the a-part of the point pairs
[in]grid_name_bgrid name for the b-part of point pairs
[in,out]points_blocal ids of the b-part of the point pairs
[in]location_blocation of the b-part of the point pairs
[in,out]weightsweights for all point pairs
[in,out]countnumber of point pairs before and after this routine

Definition at line 6518 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_dist_grid_single_remote_point_to_local()

static void yac_dist_grid_single_remote_point_to_local ( struct yac_dist_grid * dist_grid,
struct single_remote_point * ids,
size_t count,
enum yac_location location,
size_t * idx )
static

Definition at line 3714 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_get_coordinate_mpi_datatype()

static MPI_Datatype yac_get_coordinate_mpi_datatype ( MPI_Comm comm)
static

Definition at line 1448 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_get_id_pos_mpi_datatype()

static MPI_Datatype yac_get_id_pos_mpi_datatype ( MPI_Comm comm)
static

Definition at line 269 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_get_single_remote_point_mpi_datatype()

static MPI_Datatype yac_get_single_remote_point_mpi_datatype ( MPI_Comm comm)
static

Definition at line 3833 of file dist_grid.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ yac_remote_point_infos_free()

static void yac_remote_point_infos_free ( struct remote_point_infos * point_infos,
size_t count )
static

Definition at line 2343 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_remote_point_infos_single_free()

static void yac_remote_point_infos_single_free ( struct remote_point_infos * point_infos)
static

Definition at line 3034 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_single_remote_point_pack()

static void yac_single_remote_point_pack ( struct single_remote_point * point,
void * buffer,
int buffer_size,
int * position,
MPI_Datatype single_remote_point_dt,
MPI_Comm comm )
static

Definition at line 5540 of file dist_grid.c.

Here is the caller graph for this function:

◆ yac_single_remote_point_unpack()

static void yac_single_remote_point_unpack ( void * buffer,
int buffer_size,
int * position,
struct single_remote_point * point,
MPI_Datatype single_remote_point_dt,
MPI_Comm comm )
static

Definition at line 5550 of file dist_grid.c.

Here is the caller graph for this function:

Variable Documentation

◆ yac_dist_grid_dummy_name

char const yac_dist_grid_dummy_name[] = "yac_dist_grid_dummy"
static

Definition at line 31 of file dist_grid.c.