26 va_copy(args2, args1);
27 char buf[1 + vsnprintf(NULL, 0, fmt, args1)];
29 vsnprintf(buf,
sizeof buf, fmt, args2);
36 struct timer_data * timer = malloc(1 *
sizeof(*timer));
39 timer->
tic = MPI_Wtime();
50 MPI_Comm_rank(timer->
comm, &rank);
51 MPI_Comm_size(timer->
comm, &size);
55 } time, time_min, time_max;
57 time.value = MPI_Wtime() - timer->
tic;
63 MPI_Reduce(&time, &time_min, 1, MPI_DOUBLE_INT, MPI_MINLOC, 0, timer->
comm);
64 MPI_Reduce(&time, &time_max, 1, MPI_DOUBLE_INT, MPI_MAXLOC, 0, timer->
comm);
65 MPI_Reduce(&time.value, &time_sum, 1, MPI_DOUBLE, MPI_SUM, 0, timer->
comm);
70 stderr,
"%s;%e;%e;%e\n",
72 time_min.value, time_max.value);
81 int comp_id,
char const * grid_name,
char const * grid_filename,
91 int * num_vertices_per_cell;
99 int * global_cell_ids;
101 int * global_vertex_ids;
102 int * vertex_core_mask;
109 comp_comm,
"%s;%s",
"read_grid", grid_filename);
111 grid_filename, comp_comm, &num_vertices, &
num_cells,
114 &x_vertices, &y_vertices, &x_cells, &y_cells, &
cell_mask);
124 memset(vertex_core_mask, 0, num_vertices *
sizeof(*vertex_core_mask));
125 for (
int i = 0, offset = 0; i <
num_cells; ++i) {
127 for (
int j = 0; j < num_vertices_per_cell[i]; ++j) {
129 vertex_core_mask[vertex_idx] = 1;
132 offset += num_vertices_per_cell[i];
138 grid_name, num_vertices,
num_cells, num_vertices_per_cell,
153 x_vertices, y_vertices, corner_point_id);
156 free(num_vertices_per_cell);
163 free(global_cell_ids);
165 free(global_vertex_ids);
166 free(vertex_core_mask);
168 MPI_Comm_free(&comp_comm);
void * start_timer(MPI_Comm comm, char const *fmt,...)
Starts a timer and returns a pointer to the timer data.
void init_grid(int comp_id, char const *grid_name, char const *grid_filename, int *cell_point_id, int *corner_point_id)
Initializes grid data and registers it with YAC.
void stop_timer(void *timer_)
Stops the timer and prints the timing results.
void yac_read_icon_grid_information_parallel(const char *filename, MPI_Comm comm, int *nbr_vertices, int *nbr_cells, int **num_vertices_per_cell, int **cell_to_vertex, int **global_cell_ids, int **cell_owner, int **global_vertex_ids, int **vertex_owner, double **x_vertices, double **y_vertices, double **x_cells, double **y_cells, int **cell_msk)
char * user_string
user string for timer label
double tic
start time (MPI_Wtime)
MPI_Comm comm
MPI communicator.
void yac_cset_global_index(int const *global_index, int location, int grid_id)
int const YAC_LOCATION_CELL
int const YAC_LOCATION_CORNER
void yac_cget_comp_comm(int comp_id, MPI_Comm *comp_comm)
void yac_cdef_grid_unstruct(const char *grid_name, int nbr_vertices, int nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex, int *grid_id)
void yac_cdef_points_unstruct(int const grid_id, int const nbr_points, int const located, double const *x_points, double const *y_points, int *point_id)
void yac_cset_core_mask(int const *is_core, int location, int grid_id)