27#define DUMMY_VALUE (-1337.0)
36static void utest_generate_icon_grid(
39 char const * grid_dir);
40static void utest_generate_cube_grid(
47int main(
int argc,
char** argv) {
53 int global_rank, global_size;
54 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank);
55 MPI_Comm_size(MPI_COMM_WORLD, &global_size);
57 if (global_size != 3) {
58 fprintf(stderr,
"Wrong number of processes (should be 3)\n");
63 PUT_ERR(
"ERROR: missing config/grid file directory");
73 if ((global_rank == 0) || (global_rank == 1)) {
77 char const * comp_names[2] = {
"comp1",
"comp2"};
86 if ((global_rank == 0) || (global_rank == 2))
87 utest_generate_icon_grid(
88 (global_rank == 2), 2,
comp_ids[0], &(grid_ids[0]),
89 &(in_field_configs[0]),
90 &(out_field_configs[0]), argv[2]);
92 if ((global_rank == 1) || (global_rank == 2))
93 utest_generate_cube_grid(
94 (global_rank == 2), 2,
comp_ids[global_rank == 2],
95 &(grid_ids[global_rank == 2]),
96 &(in_field_configs[global_rank == 2]),
97 &(out_field_configs[global_rank == 2]));
103 malloc(strlen(argv[1]) + 32), argv[1]),
"coupling_test2.yaml");
110 for (
int t = 0;
t < 100; ++
t) {
112 if (global_rank == 0) {
116 int id = out_field_configs[0].id;
117 int dummy_id = out_field_configs[0].dummy_id;
118 double *point_set_data[1];
119 double **collection_data[1] = {point_set_data};
120 point_set_data[0] = out_field_configs[0].data;
123 id,
dummy_id, 1, collection_data, NULL,
124 &send_info, &recv_info, &err);
128 if (err)
PUT_ERR(
"ERROR in yac_cexchange");
133 int id = in_field_configs[0].id;
134 int dummy_id = in_field_configs[0].dummy_id;
135 double *collection_data[1] = {in_field_configs[0].data};
140 dummy_id,
id, 1, NULL, collection_data,
141 &send_info, &recv_info, &err);
146 if (err)
PUT_ERR(
"ERROR in yac_cexchange");
148 }
else if (global_rank == 1) {
152 int id = in_field_configs[0].id;
153 double *collection_data[1] = {in_field_configs[0].data};
157 yac_cget(
id, 1, collection_data, &info, &err);
164 int id = out_field_configs[0].id;
165 double *point_set_data[1];
166 double **collection_data[1] = {point_set_data};
167 point_set_data[0] = out_field_configs[0].data;
169 yac_cput(
id, 1, collection_data, &info, &err);
173 for (
int i = 0;
i < 2; ++
i) {
174 int out_info, in_info, err;
175 int out_id = out_field_configs[
i].id;
176 int in_id = in_field_configs[
i^1].id;
177 double *out_point_set_data[1];
178 double **out_collection_data[1] = {out_point_set_data};
179 out_point_set_data[0] = out_field_configs[
i].data;
180 double *in_collection_data[1] = {in_field_configs[
i^1].data};
185 out_id, in_id, 1, out_collection_data, in_collection_data,
186 &out_info, &in_info, &err);
188 check_results(in_field_configs[i^1], out_field_configs[i^1]);
195 for (
int i = 0;
i < num_comps; ++
i) {
196 free(out_field_configs[i].
data);
197 free(in_field_configs[i].
data);
205static void utest_generate_icon_grid(
208 char const * grid_dir) {
212 int * num_vertices_per_cell;
220 int * global_cell_id;
222 int * global_corner_id;
223 int * corner_core_mask;
225 char * grid_filename =
228 malloc(strlen(grid_dir) + 32), grid_dir),
"icon_grid_0030_R02B03_G.nc");
230 grid_filename, &nbr_vertices, &nbr_cells, &num_vertices_per_cell,
234 comm_rank, comm_size);
238 "icon", nbr_vertices, nbr_cells, num_vertices_per_cell,
242 PUT_ERR(
"error in yac_cget_grid_size");
244 PUT_ERR(
"error in yac_cget_grid_size");
260 PUT_ERR(
"error in yac_cget_points_size");
262 PUT_ERR(
"error in yac_cget_points_size");
282 for (
int i = 0;
i < nbr_cells; ++
i)
283 out_config->
data[i] =
295 &num_vertices_per_cell,
305static void utest_generate_cube_grid(
311 unsigned nbr_vertices;
313 unsigned * num_vertices_per_cell;
321 int * corner_core_mask;
322 int * global_cell_id;
323 int * global_corner_id;
327 &x_vertices, &y_vertices, &x_cells,
328 &y_cells, &global_cell_id,
330 &corner_core_mask, comm_rank, comm_size);
333 "cube", nbr_vertices, nbr_cells, (
int*)num_vertices_per_cell,
337 PUT_ERR(
"error in yac_cget_grid_size");
339 PUT_ERR(
"error in yac_cget_grid_size");
355 PUT_ERR(
"error in yac_cget_points_size");
357 PUT_ERR(
"error in yac_cget_points_size");
369 for (
unsigned i = 0;
i < nbr_cells; ++
i)
370 out_config->
data[i] =
378 free(corner_core_mask);
379 free(global_cell_id);
380 free(global_corner_id);
385 free(num_vertices_per_cell);
398 fputs(
"ERROR(check_results): inconsistent data_size\n", stderr);
404 fputs(
"ERROR(check_results): data missmatch\n", stderr);
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)
void yac_delete_icon_grid_data(int **cell_mask, int **global_cell_id, int **global_cell_id_rank, int **num_vertices_per_cell, int **global_corner_id, int **global_corner_id_rank, int **cell_to_vertex, double **x_cells, double **y_cells, double **x_vertices, double **y_vertices)
void yac_read_part_icon_grid_information(const char *filename, int *nbr_vertices, int *nbr_cells, int **num_vertices_per_cell, int **cell_to_vertex, double **x_vertices, double **y_vertices, double **x_cells, double **y_cells, int **global_cell_id, int **cell_mask, int **cell_core_mask, int **global_corner_id, int **corner_core_mask, int rank, int size)
static void init_in_field_data(struct field_config field_config)
static void check_results(struct field_config field_config, struct field_config ref_field_config)
double yac_test_harmonic(double lon, double lat)
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(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_cexchange(int const send_field_id, int const recv_field_id, int const collection_size, double ***const send_field, double **recv_field, int *send_info, int *recv_info, int *ierr)
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)
int const YAC_ACTION_NONE
no data exchanges
void yac_cdef_calendar(int calendar)
void yac_cset_core_mask(int const *is_core, int location, int grid_id)
void yac_cdef_comps(char const **comp_names, int num_comps, int *comp_ids)
int const YAC_PROLEPTIC_GREGORIAN
void yac_cset_mask(int const *is_valid, int points_id)
int const YAC_ACTION_COUPLING
data exchange
size_t yac_cget_grid_size(int located, 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)
size_t yac_cget_points_size(int points_id)