YetAnotherCoupler 3.5.2
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 <yaxt.h>
#include "basic_grid.h"
#include "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 "interp_grid.h"
#include "field_data_set.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  id_reorder_coord
 
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(caller)
 

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 MPI_Datatype yac_get_id_reorder_coord_coord_mpi_datatype (MPI_Comm comm)
 
static MPI_Datatype yac_get_id_reorder_coord_id_mpi_datatype (MPI_Comm comm)
 
static int compare_id_reorder_coord_coord (const void *a, const void *b)
 
static int compare_id_reorder_coord_reorder_idx (const void *a, const void *b)
 
static int * generate_vertex_ids (struct proc_sphere_part_node *proc_sphere_part, struct yac_basic_grid_data *grid, MPI_Comm comm)
 
static void generate_ce_ids (struct yac_basic_grid *grid, 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 proc_sphere_part_node *proc_sphere_part, 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)
 
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 Xt_xmap generate_xmap_data (struct remote_point_infos *point_infos, size_t count, MPI_Comm comm)
 
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, 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, 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_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)
 

Macro Definition Documentation

◆ CHECK_LOCATION

#define CHECK_LOCATION ( caller)
Value:
(location == YAC_LOC_CELL) || \
(location == YAC_LOC_CORNER) || \
(location == YAC_LOC_EDGE), \
"ERROR(%s): \"%d\" is not a invalid location", \
caller, (int)location)
@ YAC_LOC_CORNER
Definition location.h:15
@ YAC_LOC_EDGE
Definition location.h:16
@ YAC_LOC_CELL
Definition location.h:14
#define YAC_ASSERT_F(exp, format,...)
Definition yac_assert.h:19

Definition at line 27 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 3218 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 936 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 3369 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 3209 of file dist_grid.c.

Here is the caller graph for this function:

◆ compare_id_reorder_coord_coord()

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

Definition at line 466 of file dist_grid.c.

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

◆ compare_id_reorder_coord_reorder_idx()

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

Definition at line 473 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 311 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 324 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 4317 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 1326 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 1690 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 3929 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 1699 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
Examples
test_angle.c, test_bnd_sphere_part.c, and test_instance_parallel2.c.

Definition at line 4407 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 5486 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 5119 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 1106 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 2623 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 2635 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 196 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 336 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 1128 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 1248 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 228 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 2695 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 2681 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 4333 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 3654 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 1716 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 * grid,
int * vertex_ranks,
int max_num_vertices_per_cell,
MPI_Comm comm )
static

Definition at line 637 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 2095 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,
struct yac_basic_grid * grid,
MPI_Comm comm )
static

Definition at line 2173 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,
MPI_Comm comm )
static

Definition at line 2332 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()

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 )

Definition at line 1338 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 1063 of file dist_grid.c.

Here is the caller graph for this function:

◆ generate_global_ids()

static void generate_global_ids ( 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 )
static

Definition at line 1045 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 246 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 1593 of file dist_grid.c.

Here is the caller graph for this function:

◆ generate_vertex_ids()

static int * generate_vertex_ids ( struct proc_sphere_part_node * proc_sphere_part,
struct yac_basic_grid_data * grid,
MPI_Comm comm )
static

Definition at line 485 of file dist_grid.c.

Here is the call graph for this function:
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 1216 of file dist_grid.c.

Here is the caller graph for this function:

◆ generate_xmap_data()

static Xt_xmap generate_xmap_data ( struct remote_point_infos * point_infos,
size_t count,
MPI_Comm comm )
static

Definition at line 1603 of file dist_grid.c.

Here is the call graph for this function:
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 172 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 5777 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 215 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 5490 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 2144 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 2804 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 2839 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 2824 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 2786 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 2943 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 2857 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 2915 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 2900 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 5518 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 148 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 284 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 295 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 2755 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 2967 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 5500 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 3109 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 3068 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 3052 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 3016 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 2991 of file dist_grid.c.

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

◆