21#define YAC_RAD (0.01745329251994329576923690768489)
31 xt_initialize(MPI_COMM_WORLD);
35 PUT_ERR(
"error: yac_cdefault_instance_defined should return 0 before init");
43 PUT_ERR(
"error: yac_cdefault_instance_defined should return 1 after init");
47 int global_rank, global_size;
48 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank);
49 MPI_Comm_size(MPI_COMM_WORLD, &global_size);
55 int rank_type = global_rank%5;
68 sprintf(comp_name,
"comp_%d", global_rank);
70 int prelim_comp_id_instance =
75 PUT_ERR(
"ERROR in yac_cget_comp_id");
76 if (prelim_comp_id_instance != comp_id_instance)
77 PUT_ERR(
"ERROR in yac_cget_comp_id_instance");
84 if (size != 1)
PUT_ERR(
"error in yac_cget_comp_size_c2py");
87 if (rank != 0)
PUT_ERR(
"erro in yac_cget_comp_rank_c2py");
90 if (rank != global_rank)
91 PUT_ERR(
"error in yac_cget_instance_rank_c2py");
94 if (size != global_size)
95 PUT_ERR(
"error in yac_cget_instance_size_c2py");
102 char comp_meta_data[64];
103 sprintf(comp_meta_data,
"%s METADATA_C", comp_name);
105 sprintf(comp_meta_data,
"%s METADATA_C_instance", comp_name);
110 sprintf(grid_name,
"grid_%d_0", global_rank);
113 grid_name, (
int[]){2, 2}, (
int[]){0,0},
117 PUT_ERR(
"ERROR in yac_cget_grid_id");
121 sprintf(point_name,
"p_%d_0", global_rank);
122 int prelim_point_id =
128 if (prelim_point_id != point_id)
129 PUT_ERR(
"ERROR in yac_cget_points_id");
136 if (prelim_mask_id != mask_id)
137 PUT_ERR(
"ERROR in yac_cget_mask_id");
143 sprintf(grid_name,
"grid_%d_1", global_rank);
145 grid_name, (
int[]){2, 2}, (
int[]){0,0},
153 char grid_meta_data[64];
154 sprintf(grid_meta_data,
"%s METADATA_G", grid_name);
156 sprintf(grid_meta_data,
"%s METADATA_G_instance", grid_name);
164 sprintf(grid_name,
"grid_%d_2", global_rank);
166 grid_name, (
int[]){2, 2}, (
int[]){0,0},
174 char grid_meta_data[64];
175 sprintf(grid_meta_data,
"%s METADATA_G", grid_name);
177 sprintf(grid_meta_data,
"%s METADATA_G_instance", grid_name);
184 sprintf(field_name,
"field_%d_0", global_rank);
186 field_name,
comp_id, point_ids, 1, 1,
"PT5M",
189 field_name, comp_id_instance, point_ids, 1, 1,
"PT5M",
192 sprintf(field_name,
"field_%d_1", global_rank);
194 field_name,
comp_id, point_ids, 1, 1,
"PT5M",
197 field_name, comp_id_instance, point_ids, 1, 1,
"PT5M",
200 char field_meta_data[64];
201 sprintf(field_meta_data,
"%s METADATA_F", field_name);
203 comp_name, grid_name, field_name, field_meta_data);
204 sprintf(field_meta_data,
"%s METADATA_F_instance", field_name);
206 yac_id, comp_name, grid_name, field_name, field_meta_data);
212 PUT_ERR(
"ERROR in yac_cget_field_is_defined");
214 PUT_ERR(
"ERROR in yac_cget_field_is_defined");
216 PUT_ERR(
"ERROR in yac_cget_field_is_defined");
218 PUT_ERR(
"ERROR in yac_cget_field_is_defined");
220 yac_id, comp_name, grid_name, field_name))
221 PUT_ERR(
"ERROR in yac_cget_field_is_defined_instance");
223 yac_id, comp_name, grid_name,
"undefined_field"))
224 PUT_ERR(
"ERROR in yac_cget_field_is_defined_instance");
226 yac_id, comp_name,
"undefined_grid", field_name))
227 PUT_ERR(
"ERROR in yac_cget_field_is_defined_instance");
229 yac_id,
"undefined_comp", grid_name, field_name))
230 PUT_ERR(
"ERROR in yac_cget_field_is_defined_instance");
232 PUT_ERR(
"ERROR in yac_cget_field_id");
233 if (field_id_instance !=
235 yac_id, comp_name, grid_name, field_name))
236 PUT_ERR(
"ERROR in yac_cget_field_id_instance");
238 PUT_ERR(
"ERROR in yac_cget_component_name_from_field_id");
239 if (strcmp(comp_name,
241 PUT_ERR(
"ERROR in yac_cget_component_name_from_field_id");
243 PUT_ERR(
"ERROR in yac_cget_grid_name_from_field_id");
244 if (strcmp(grid_name,
246 PUT_ERR(
"ERROR in yac_cget_grid_name_from_field_id");
248 PUT_ERR(
"ERROR in yac_cget_field_name_from_field_id");
249 if (strcmp(field_name,
251 PUT_ERR(
"ERROR in yac_cget_field_name_from_field_id");
253 PUT_ERR(
"ERROR in yac_cget_timestep_from_field_id");
256 PUT_ERR(
"ERROR in yac_cget_timestep_from_field_id");
258 PUT_ERR(
"ERROR in yac_cget_collection_size_from_field_id");
260 PUT_ERR(
"ERROR in yac_cget_collection_size_from_field_id");
263 PUT_ERR(
"ERROR in yac_cget_role_from_field_id");
266 PUT_ERR(
"ERROR in yac_cget_role_from_field_id");
280 int const ref_nbr_comps = 4 * ((global_size - 1) / 5) + ((global_size - 1) % 5);
283 PUT_ERR(
"ERROR in yac_cget_nbr_comps");
285 PUT_ERR(
"ERROR in yac_cget_nbr_comps_instance");
287 char const ** comp_names =
288 malloc((
size_t)ref_nbr_comps *
sizeof(*comp_names));
289 char const ** comp_names_instance =
290 malloc((
size_t)ref_nbr_comps *
sizeof(*comp_names_instance));
294 int const ref_nbr_grids =
295 3 * ((global_size - 1) / 5) +
296 ((global_size - 1) % 5 > 2) +
297 2 * ((global_size - 1) % 5 > 3);
300 PUT_ERR(
"ERROR in yac_cget_nbr_grids");
302 PUT_ERR(
"ERROR in yac_cget_nbr_grids_instance");
305 malloc((
size_t)ref_nbr_grids *
sizeof(*
grid_names));
306 char const ** grid_names_instance =
307 malloc((
size_t)ref_nbr_grids *
sizeof(*grid_names_instance));
311 for (
int rank = 0;
rank < global_size; ++
rank) {
314 int rank_type =
rank % 5;
316 char ref_comp_name[16];
317 char ref_grid_names[3][32];
318 char ref_field_names[2][32];
319 sprintf(ref_comp_name,
"comp_%d", rank);
320 for (
int i = 0;
i < 3; ++
i)
321 sprintf(ref_grid_names[i],
"grid_%d_%d", rank, i);
322 for (
int i = 0;
i < 2; ++
i)
323 sprintf(ref_field_names[i],
"field_%d_%d", rank, i);
325 if (rank_type == 0) {
328 for (idx = 0; idx < ref_nbr_comps; ++idx)
329 if (!strcmp(ref_comp_name, comp_names[idx]))
break;
330 if (idx != ref_nbr_comps)
PUT_ERR(
"ERROR in yac_cget_comp_names");
331 for (idx = 0; idx < ref_nbr_comps; ++idx)
332 if (!strcmp(ref_comp_name, comp_names_instance[idx]))
break;
333 if (idx != ref_nbr_comps)
PUT_ERR(
"ERROR in yac_cget_comp_names_instance");
334 for (
int i = 0;
i < 3; ++
i) {
335 for (idx = 0; idx < ref_nbr_grids; ++idx)
336 if (!strcmp(ref_grid_names[i],
grid_names[idx]))
break;
337 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
338 for (idx = 0; idx < ref_nbr_grids; ++idx)
339 if (!strcmp(ref_grid_names[i], grid_names_instance[idx]))
break;
340 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
346 for (idx = 0; idx < ref_nbr_comps; ++idx)
347 if (!strcmp(ref_comp_name, comp_names[idx]))
break;
348 if (idx == ref_nbr_comps)
PUT_ERR(
"ERROR in yac_cget_comp_names");
349 for (idx = 0; idx < ref_nbr_comps; ++idx)
350 if (!strcmp(ref_comp_name, comp_names_instance[idx]))
break;
351 if (idx == ref_nbr_comps)
PUT_ERR(
"ERROR in yac_cget_comp_names_instance");
353 if (rank_type == 1) {
357 PUT_ERR(
"ERROR in yac_cget_component_metadata");
359 PUT_ERR(
"ERROR in yac_cget_component_metadata_instance");
362 for (
int i = 0;
i < 3; ++
i) {
363 for (idx = 0; idx < ref_nbr_grids; ++idx)
364 if (!strcmp(ref_grid_names[i],
grid_names[idx]))
break;
365 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
366 for (idx = 0; idx < ref_nbr_grids; ++idx)
367 if (!strcmp(ref_grid_names[i], grid_names_instance[idx]))
break;
368 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
372 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids");
374 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids_instance");
378 char ref_comp_meta_data[64], ref_comp_meta_data_instance[64];
379 sprintf(ref_comp_meta_data,
"%s METADATA_C", ref_comp_name);
380 sprintf(ref_comp_meta_data_instance,
"%s METADATA_C_instance",
387 PUT_ERR(
"ERROR in yac_cget_component_metadata");
389 ref_comp_meta_data_instance,
391 PUT_ERR(
"ERROR in yac_cget_component_metadata_instance");
393 if (rank_type == 2) {
396 for (
int i = 0;
i < 3; ++
i) {
397 for (idx = 0; idx < ref_nbr_grids; ++idx)
398 if (!strcmp(ref_grid_names[i],
grid_names[idx]))
break;
399 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
400 for (idx = 0; idx < ref_nbr_grids; ++idx)
401 if (!strcmp(ref_grid_names[i], grid_names_instance[idx]))
break;
402 if (idx != ref_nbr_grids)
403 PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
407 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids");
409 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids_instance");
414 for (idx = 0; idx < ref_nbr_grids; ++idx)
415 if (!strcmp(ref_grid_names[0],
grid_names[idx]))
break;
416 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
417 for (idx = 0; idx < ref_nbr_grids; ++idx)
418 if (!strcmp(ref_grid_names[0], grid_names_instance[idx]))
break;
419 if (idx != ref_nbr_grids)
420 PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
422 char ref_grid_meta_data[2][64];
423 char ref_grid_meta_data_instance[2][64];
424 for (
int i = 0;
i < 2; ++
i) {
425 sprintf(ref_grid_meta_data[i],
"%s METADATA_G",
426 ref_grid_names[i+1]);
427 sprintf(ref_grid_meta_data_instance[i],
"%s METADATA_G_instance",
428 ref_grid_names[i+1]);
433 for (idx = 0; idx < ref_nbr_grids; ++idx)
434 if (!strcmp(ref_grid_names[1],
grid_names[idx]))
break;
435 if (idx == ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
436 for (idx = 0; idx < ref_nbr_grids; ++idx)
437 if (!strcmp(ref_grid_names[1], grid_names_instance[idx]))
break;
438 if (idx == ref_nbr_grids)
439 PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
441 ref_grid_meta_data[0],
443 PUT_ERR(
"ERROR in yac_cget_grid_metadata");
445 ref_grid_meta_data_instance[0],
447 PUT_ERR(
"ERROR in yac_cget_grid_metadata_instance");
449 PUT_ERR(
"ERROR in yac_cget_nbr_fields");
451 yac_id, ref_comp_name, ref_grid_names[1]))
452 PUT_ERR(
"ERROR in yac_cget_nbr_fields_instance");
454 if (rank_type == 3) {
457 for (idx = 0; idx < ref_nbr_grids; ++idx)
458 if (!strcmp(ref_grid_names[2],
grid_names[idx]))
break;
459 if (idx != ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
460 for (idx = 0; idx < ref_nbr_grids; ++idx)
461 if (!strcmp(ref_grid_names[2], grid_names_instance[idx]))
break;
462 if (idx != ref_nbr_grids)
463 PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
466 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids");
468 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids_instance");
474 for (idx = 0; idx < ref_nbr_grids; ++idx)
475 if (!strcmp(ref_grid_names[2],
grid_names[idx]))
break;
476 if (idx == ref_nbr_grids)
PUT_ERR(
"ERROR in yac_cget_grid_names");
477 for (idx = 0; idx < ref_nbr_grids; ++idx)
478 if (!strcmp(ref_grid_names[2], grid_names_instance[idx]))
break;
479 if (idx == ref_nbr_grids)
480 PUT_ERR(
"ERROR in yac_cget_grid_names_instance");
482 ref_grid_meta_data[1],
484 PUT_ERR(
"ERROR in yac_cget_grid_metadata");
486 ref_grid_meta_data_instance[1],
488 PUT_ERR(
"ERROR in yac_cget_grid_metadata_instance");
490 int const ref_nbr_fields = 2;
492 char const * field_names_instance[2];
493 char ref_field_meta_data[64];
494 char ref_field_meta_data_instance[64];
495 sprintf(ref_field_meta_data,
"%s METADATA_F", ref_field_names[1]);
496 sprintf(ref_field_meta_data_instance,
"%s METADATA_F_instance",
502 ref_comp_name, ref_grid_names[2]) != ref_nbr_fields)
503 PUT_ERR(
"ERROR in yac_cget_nbr_fields");
505 yac_id, ref_comp_name, ref_grid_names[2]) != ref_nbr_fields)
506 PUT_ERR(
"ERROR in yac_cget_nbr_fields_instance");
508 ref_comp_name, ref_grid_names[2], ref_nbr_fields,
field_names);
510 yac_id, ref_comp_name, ref_grid_names[2], ref_nbr_fields,
511 field_names_instance);
512 for (
int i = 0;
i < ref_nbr_fields; ++
i) {
513 for (idx = 0; idx < ref_nbr_fields ; ++idx)
514 if (!strcmp(ref_field_names[i],
field_names[idx]))
break;
515 if (idx == ref_nbr_fields)
516 PUT_ERR(
"ERROR in yac_cget_field_names");
517 for (idx = 0; idx < ref_nbr_fields; ++idx)
519 ref_field_names[i], field_names_instance[idx]))
break;
520 if (idx == ref_nbr_fields)
521 PUT_ERR(
"ERROR in yac_cget_field_names_instance");
524 ref_comp_name, ref_grid_names[2], ref_field_names[0]))
525 PUT_ERR(
"ERROR in yac_cget_field_metadata");
527 yac_id, ref_comp_name, ref_grid_names[2],
529 PUT_ERR(
"ERROR in yac_cget_field_metadata_instance");
533 ref_comp_name, ref_grid_names[2], ref_field_names[1])))
534 PUT_ERR(
"ERROR in yac_cget_field_metadata");
536 ref_field_meta_data_instance,
538 yac_id, ref_comp_name, ref_grid_names[2],
539 ref_field_names[1])))
540 PUT_ERR(
"ERROR in yac_cget_field_metadata_instance");
543 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids");
545 PUT_ERR(
"ERROR in yac_cget_comp_nbr_grids_instance");
546 char const * comp_grid_name;
548 if (strcmp(comp_grid_name, ref_grid_names[2]))
549 PUT_ERR(
"ERROR in yac_cget_comp_grid_names");
551 if (strcmp(comp_grid_name, ref_grid_names[2]))
552 PUT_ERR(
"ERROR in yac_cget_comp_grid_names_instance");
555 ref_comp_name, ref_grid_names[2],
557 PUT_ERR(
"ERROR in yac_cget_field_role");
559 yac_id, ref_comp_name, ref_grid_names[2],
561 PUT_ERR(
"ERROR in yac_cget_field_role_instance");
563 ref_comp_name, ref_grid_names[2],
564 ref_field_names[0]) != 1)
565 PUT_ERR(
"ERROR in yac_cget_field_collection_size");
567 yac_id, ref_comp_name, ref_grid_names[2],
568 ref_field_names[0]) != 1)
569 PUT_ERR(
"ERROR in yac_cget_field_collection_size_instance");
572 ref_comp_name, ref_grid_names[2],
573 ref_field_names[0]),
"PT5M"))
574 PUT_ERR(
"ERROR in yac_cget_field_timestep");
577 yac_id, ref_comp_name, ref_grid_names[2],
578 ref_field_names[0]),
"PT5M"))
579 PUT_ERR(
"ERROR in yac_cget_field_timestep");
586 free(grid_names_instance);
588 free(comp_names_instance);
char const * grid_names[]
char const * field_names[8]
void yac_cget_instance_size_c2py(int yac_instance_id, int *size)
void yac_cget_comp_rank_c2py(int comp_id, int *rank)
void yac_cget_comp_size_c2py(int comp_id, int *size)
void yac_cget_instance_rank_c2py(int yac_instance_id, int *rank)
int yac_cget_points_id(int grid_id, int location, const char *point_name)
void yac_cget_grid_names(int nbr_grids, const char **grid_names)
const char * yac_cget_field_metadata_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
int yac_cget_role_from_field_id(int field_id)
int yac_cget_nbr_grids_instance(int yac_instance_id)
const char * yac_cget_grid_metadata_instance(int yac_instance_id, const char *grid_name)
int const YAC_LOCATION_CELL
void yac_cdef_grid_metadata(const char *grid_name, const char *metadata)
void yac_cget_grid_names_instance(int yac_instance_id, int nbr_grids, const char **grid_names)
void yac_cdef_component_metadata(const char *comp_name, const char *metadata)
int yac_cget_field_role(const char *comp_name, const char *grid_name, const char *field_name)
int yac_cget_field_id_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
int yac_cget_comp_nbr_grids_instance(int yac_instance_id, const char *comp_name)
int yac_cget_field_is_defined(const char *comp_name, const char *grid_name, const char *field_name)
const char * yac_cget_timestep_from_field_id(int field_id)
int yac_cget_comp_id(const char *comp_name)
int yac_cget_nbr_fields(const char *comp_name, const char *grid_name)
void yac_csync_def_instance(int yac_instance_id)
int yac_cget_field_is_defined_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cfinalize_instance(int yac_instance_id)
Finalises YAC.
void yac_cfinalize()
Finalises YAC.
const char * yac_cget_field_name_from_field_id(int field_id)
int yac_cget_nbr_comps_instance(int yac_instance_id)
int yac_cget_nbr_fields_instance(int yac_instance_id, const char *comp_name, const char *grid_name)
void yac_cdef_points_reg2d_named(int const grid_id, int const *nbr_points, int const located, double const *x_points, double const *y_points, char const *name, int *point_id)
void yac_cdef_grid_metadata_instance(int yac_instance_id, const char *grid_name, const char *metadata)
const char * yac_cget_component_metadata_instance(int yac_instance_id, const char *comp_name)
const char * yac_cget_field_timestep_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cdef_comp_instance(int yac_instance_id, char const *comp_name, int *comp_id)
int yac_cget_field_id(const char *comp_name, const char *grid_name, const char *field_name)
const char * yac_cget_grid_name_from_field_id(int field_id)
int yac_cget_collection_size_from_field_id(int field_id)
void yac_cdef_grid_reg2d(const char *grid_name, int nbr_vertices[2], int cyclic[2], double *x_vertices, double *y_vertices, int *grid_id)
int yac_cget_comp_id_instance(int yac_instance_id, const char *comp_name)
int yac_cdefault_instance_defined(void)
int const YAC_EXCHANGE_TYPE_NONE
int yac_cget_grid_id(const char *grid_name)
void yac_cdef_points_reg2d(int const grid_id, int const *nbr_points, int const located, double const *x_points, double const *y_points, int *point_id)
const char * yac_cget_grid_metadata(const char *grid_name)
const char * yac_cget_component_name_from_field_id(int field_id)
int yac_cget_field_collection_size(const char *comp_name, const char *grid_name, const char *field_name)
void yac_cdef_component_metadata_instance(int yac_instance_id, const char *comp_name, const char *metadata)
void yac_cdef_calendar(int calendar)
int yac_cget_mask_id(int grid_id, int location, const char *mask_name)
void yac_cget_comp_names(int nbr_comps, const char **comp_names)
void yac_cdef_comps(char const **comp_names, int num_comps, int *comp_ids)
const char * yac_cget_field_metadata(const char *comp_name, const char *grid_name, const char *field_name)
int const YAC_PROLEPTIC_GREGORIAN
void yac_cget_comp_grid_names_instance(int yac_instance_id, const char *comp_name, int nbr_grids, const char **grid_names)
int yac_cget_comp_nbr_grids(const char *comp_name)
int const YAC_TIME_UNIT_ISO_FORMAT
int yac_cget_field_role_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cdef_mask_named(int const grid_id, int const nbr_points, int const located, int const *is_valid, char const *name, int *mask_id)
int yac_cget_field_collection_size_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cinit_instance(int *yac_instance_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)
int yac_cget_nbr_comps(void)
void yac_cdef_field_metadata_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name, const char *metadata)
void yac_cget_comp_grid_names(const char *comp_name, int nbr_grids, const char **grid_names)
void yac_cget_field_names_instance(int yac_instance_id, const char *comp_name, const char *grid_name, int nbr_fields, const char **field_names)
void yac_cdef_comps_instance(int yac_instance_id, char const **comp_names, int num_comps, int *comp_ids)
void yac_cget_comp_names_instance(int yac_instance_id, int nbr_comps, const char **comp_names)
void yac_cdef_field_metadata(const char *comp_name, const char *grid_name, const char *field_name, const char *metadata)
const char * yac_cget_component_metadata(const char *comp_name)
const char * yac_cget_field_timestep(const char *comp_name, const char *grid_name, const char *field_name)
void yac_cget_field_names(const char *comp_name, const char *grid_name, int nbr_fields, const char **field_names)