28#define DUMMY_VALUE (-1337.0)
37static void utest_generate_icon_grid(
40 char const * grid_dir);
41static void utest_generate_cube_grid(
48int main(
int argc,
char** argv) {
54 int global_rank, global_size;
55 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank);
56 MPI_Comm_size(MPI_COMM_WORLD, &global_size);
58 if (global_size != 3) {
59 fprintf(stderr,
"Wrong number of processes (should be 3)\n");
64 PUT_ERR(
"ERROR: missing config/grid file directory");
74 if ((global_rank == 0) || (global_rank == 1)) {
78 char const * comp_names[2] = {
"comp1",
"comp2"};
87 if ((global_rank == 0) || (global_rank == 2))
88 utest_generate_icon_grid(
89 (global_rank == 2), 2,
comp_ids[0], &(grid_ids[0]),
90 &(in_field_configs[0]),
91 &(out_field_configs[0]), argv[2]);
93 if ((global_rank == 1) || (global_rank == 2))
94 utest_generate_cube_grid(
95 (global_rank == 2), 2,
comp_ids[global_rank == 2],
96 &(grid_ids[global_rank == 2]),
97 &(in_field_configs[global_rank == 2]),
98 &(out_field_configs[global_rank == 2]));
104 malloc(strlen(argv[1]) + 32), argv[1]),
"coupling_test2.yaml");
111 for (
int t = 0;
t < 100; ++
t) {
113 if (global_rank == 0) {
117 int id = out_field_configs[0].id;
118 int dummy_id = out_field_configs[0].dummy_id;
119 double *point_set_data[1];
120 double **collection_data[1] = {point_set_data};
121 point_set_data[0] = out_field_configs[0].data;
124 id,
dummy_id, 1, collection_data, NULL,
125 &send_info, &recv_info, &err);
129 if (err)
PUT_ERR(
"ERROR in yac_cexchange");
134 int id = in_field_configs[0].id;
135 int dummy_id = in_field_configs[0].dummy_id;
136 double *collection_data[1] = {in_field_configs[0].data};
141 dummy_id,
id, 1, NULL, collection_data,
142 &send_info, &recv_info, &err);
147 if (err)
PUT_ERR(
"ERROR in yac_cexchange");
149 }
else if (global_rank == 1) {
153 int id = in_field_configs[0].id;
154 double *collection_data[1] = {in_field_configs[0].data};
165 int id = out_field_configs[0].id;
166 double *point_set_data[1];
167 double **collection_data[1] = {point_set_data};
168 point_set_data[0] = out_field_configs[0].data;
174 for (
int i = 0;
i < 2; ++
i) {
175 int out_info, in_info, err;
176 int out_id = out_field_configs[
i].id;
177 int in_id = in_field_configs[
i^1].id;
178 double *out_point_set_data[1];
179 double **out_collection_data[1] = {out_point_set_data};
180 out_point_set_data[0] = out_field_configs[
i].data;
181 double *in_collection_data[1] = {in_field_configs[
i^1].data};
186 out_id, in_id, 1, out_collection_data, in_collection_data,
187 &out_info, &in_info, &err);
189 check_results(in_field_configs[i^1], out_field_configs[i^1]);
196 for (
int i = 0;
i < num_comps; ++
i) {
197 free(out_field_configs[i].
data);
198 free(in_field_configs[i].
data);
206static void utest_generate_icon_grid(
209 char const * grid_dir) {
213 int * num_vertices_per_cell;
221 int * global_cell_id;
223 int * global_corner_id;
224 int * corner_core_mask;
226 char * grid_filename =
229 malloc(strlen(grid_dir) + 32), grid_dir),
"icon_grid_R02B01.nc");
231 grid_filename, &nbr_vertices, &nbr_cells, &num_vertices_per_cell,
235 comm_rank, comm_size);
239 "icon", nbr_vertices, nbr_cells, num_vertices_per_cell,
243 PUT_ERR(
"error in yac_cget_grid_size");
245 PUT_ERR(
"error in yac_cget_grid_size");
261 PUT_ERR(
"error in yac_cget_points_size");
263 PUT_ERR(
"error in yac_cget_points_size");
285 for (
int i = 0;
i < nbr_cells; ++
i)
286 out_config->
data[i] =
298 &num_vertices_per_cell,
308static void utest_generate_cube_grid(
314 unsigned nbr_vertices;
316 unsigned * num_vertices_per_cell;
324 int * corner_core_mask;
325 int * global_cell_id;
326 int * global_corner_id;
330 &x_vertices, &y_vertices, &x_cells,
331 &y_cells, &global_cell_id,
333 &corner_core_mask, comm_rank, comm_size);
336 "cube", nbr_vertices, nbr_cells, (
int*)num_vertices_per_cell,
340 PUT_ERR(
"error in yac_cget_grid_size");
342 PUT_ERR(
"error in yac_cget_grid_size");
358 PUT_ERR(
"error in yac_cget_points_size");
360 PUT_ERR(
"error in yac_cget_points_size");
374 for (
unsigned i = 0;
i < nbr_cells; ++
i)
375 out_config->
data[i] =
383 free(corner_core_mask);
384 free(global_cell_id);
385 free(global_corner_id);
390 free(num_vertices_per_cell);
403 fputs(
"ERROR(check_results): inconsistent data_size\n", stderr);
409 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
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)