22#define STR_USAGE "Usage: %s -c configFilename -n cube edge length\n"
23#define YAC_ASSERT(exp, msg) \
26 fprintf(stderr, "ERROR: %s\n" STR_USAGE, msg, argv[0]); \
32 int argc,
char ** argv,
char const ** configFilename,
size_t * cube_n);
34int main (
int argc,
char *argv[]) {
38 MPI_Init (NULL, NULL);
40 char const * configFilename =
"perf_toy.yaml";
44 xt_initialize(MPI_COMM_WORLD);
49 printf (
". main: calling yac_cinit\n");
52 double tic, toc, time;
54 MPI_Barrier(MPI_COMM_WORLD);
60 FILE *f = fopen(configFilename,
"rb");
61 fseek(f, 0, SEEK_END);
62 long fsize = ftell(f);
63 fseek(f, 0, SEEK_SET);
65 char *
string = malloc(fsize + 1);
66 size_t dummy = fread(
string, 1, fsize, f);
79 printf (
". main: calling yac_cdef_comp\n");
83 char * comp_name =
"CUBE";
87 printf(
". main: defined %s with local comp ID %i \n", comp_name,
comp_id);
96 MPI_Comm_rank(local_comm,&rank);
97 MPI_Comm_size(local_comm,&size);
99 MPI_Comm_free(&local_comm);
108 unsigned nbr_vertices;
110 unsigned * num_vertices_per_cell;
117 int * global_cell_id;
118 int * global_cell_id_rank;
119 int * global_corner_id;
120 int * global_corner_id_rank;
123 (
unsigned)cube_n, &nbr_vertices, &nbr_cells,
125 &x_vertices, &y_vertices, &x_cells,
126 &y_cells, &global_cell_id,
127 &global_cell_id_rank, &global_corner_id,
128 &global_corner_id_rank, rank, size);
130 double * x_points, * y_points;
132 x_points = x_vertices;
133 y_points = y_vertices;
135 double * x_center, * y_center;
141 "cube_grid", nbr_vertices, nbr_cells, (
int*)num_vertices_per_cell,
145 int * corner_core_mask = malloc(nbr_vertices *
sizeof(*corner_core_mask));
146 for (
unsigned i = 0;
i < nbr_cells; ++
i)
148 for (
unsigned i = 0;
i < nbr_vertices; ++
i)
149 corner_core_mask[i] = global_corner_id_rank[i] == rank;
171 printf (
"CUBE: Time for initialisation %f\n", time );
176 printf (
". main: calling yac_cenddef\n");
179 MPI_Barrier(MPI_COMM_WORLD);
187 printf(
"CUBE: Time for search %f\n", time );
189 double * conserv_in = malloc(nbr_cells *
sizeof(*conserv_in));
190 double * avg_in = malloc(nbr_vertices *
sizeof(*avg_in));
192 for (
unsigned i = 0;
i < nbr_cells; ++
i)
194 for (
unsigned i = 0;
i < nbr_vertices; ++
i) avg_in[i] = -10;
196 double * cell_out = malloc(nbr_cells *
sizeof(*cell_out));
197 double * vertex_out = malloc(nbr_vertices *
sizeof(*vertex_out));
202 for (
unsigned i = 0;
i < nbr_cells; ++
i)
204 for (
unsigned i = 0;
i < nbr_vertices; ++
i)
207 MPI_Barrier(MPI_COMM_WORLD);
212 double *point_set_data[1];
213 double **collection_data[1] = {point_set_data};
215 point_set_data[0] = cell_out;
216 yac_cput(field_ids[1], 1, collection_data, &info, &err);
220 double *collection_data[1] = {conserv_in};
222 yac_cget(field_ids[0], 1, collection_data, &info, &err);
227 printf (
"CUBE: Time for ping-pong %f\n", time );
234 char vtk_filename[32];
236 sprintf(vtk_filename,
"perf_toy_cube_%d.vtk", rank);
238 double point_data[nbr_vertices][3];
239 for (
int i = 0;
i < nbr_vertices; ++
i) {
240 LLtoXYZ(x_vertices[i], y_vertices[i], point_data[i]);
246 (
unsigned*)num_vertices_per_cell, nbr_cells);
248 vtk_file, corner_core_mask, nbr_vertices,
"corner_core_mask");
250 vtk_file, global_corner_id, nbr_vertices,
"global_corner_id");
254 vtk_file, global_cell_id, nbr_cells,
"global_cell_id");
257 vtk_file, conserv_in, nbr_cells,
"conserv_in");
259 vtk_file, cell_out, nbr_cells,
"cell_out");
261 vtk_file, avg_in, nbr_vertices,
"avg_in");
263 vtk_file, vertex_out, nbr_vertices,
"vertex_out");
268 free(corner_core_mask);
269 free(global_corner_id_rank);
270 free(global_corner_id);
272 free(global_cell_id_rank);
273 free(global_cell_id);
278 free(num_vertices_per_cell);
296 int argc,
char ** argv,
297 char const ** configFilename,
size_t * cube_n) {
300 while ((opt = getopt(argc, argv,
"c:n:")) != -1) {
301 YAC_ASSERT((opt ==
'c') || (opt ==
'n'),
"invalid command argument")
305 *configFilename = optarg;
308 *cube_n = atoi(optarg);
309 YAC_ASSERT(*cube_n > 0,
"invalid cube edge length");
void yac_generate_part_cube_grid_information(unsigned n, unsigned *nbr_vertices, unsigned *nbr_cells, unsigned **num_vertices_per_cell, unsigned **cell_to_vertex, double **x_vertices, double **y_vertices, double **x_cells, double **y_cells, int **global_cell_id, int **cell_core_mask, int **global_corner_id, int **corner_core_mask, int rank, int size)
static void parse_arguments(int argc, char **argv, char const **configFilename, size_t *cube_n)
#define YAC_ASSERT(exp, msg)
double yac_test_func(double lon, double lat)
static void LLtoXYZ(double lon, double lat, double p_out[])
void yac_vtk_write_cell_scalars_double(YAC_VTK_FILE *vtk_file, double *scalars, unsigned num_cells, char *name)
void yac_vtk_write_cell_scalars_int(YAC_VTK_FILE *vtk_file, int *scalars, unsigned num_cells, char *name)
void yac_vtk_write_point_scalars_double(YAC_VTK_FILE *vtk_file, double *scalars, unsigned num_points, char *name)
void yac_vtk_write_point_data(YAC_VTK_FILE *vtk_file, double *point_data, unsigned num_points)
void yac_vtk_write_point_scalars_int(YAC_VTK_FILE *vtk_file, int *scalars, unsigned num_points, char *name)
void yac_vtk_close(YAC_VTK_FILE *vtk_file)
void yac_vtk_write_cell_data(YAC_VTK_FILE *vtk_file, unsigned *cell_corners, unsigned *num_points_per_cell, unsigned num_cells)
YAC_VTK_FILE * yac_vtk_open(const char *filename, const char *title)
void yac_cset_global_index(int const *global_index, int location, int grid_id)
int const YAC_LOCATION_CELL
void yac_cfinalize()
Finalises YAC.
int const YAC_LOCATION_CORNER
void yac_cget_comp_comm(int comp_id, MPI_Comm *comp_comm)
void yac_cget(int const field_id, int collection_size, double **recv_field, int *info, int *ierr)
int const YAC_TIME_UNIT_SECOND
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_cput(int const field_id, int const collection_size, double ***const send_field, int *info, int *ierr)
void yac_cread_config_yaml(const char *yaml_filename)
void yac_cset_core_mask(int const *is_core, int location, int grid_id)
void yac_cdef_comp(char const *comp_name, int *comp_id)
void yac_cdef_field(char const *name, int const comp_id, int const *point_ids, int const num_pointsets, int collection_size, const char *timestep, int time_unit, int *field_id)