288 "%s has already been freed", id_name)
352 char const *datetime_str = NULL;
363 if ((exchange_type ==
TARGET) || (exchange_type ==
SOURCE)) {
373 datetime_str = get_datetime(cpl_field);
379 int const h_pak_trace =
381 datetime_str, action, level);
397 if (h_pak_trace < 0)
return;
411 char const * caller,
char const *
name,
char const * name_type) {
414 (
name != NULL) && (
name[0] !=
'\0'), caller,
"missing %s", name_type)
417 "%s \"%s\" is too long (maximum is %d)",
428 int grid_id,
char const * caller,
int allow_preliminary) {
434 allow_preliminary || !
grid_info->is_preliminary, caller,
435 "grid \"%s\" is only preliminarily defined",
grid_info->name)
439 "internal error while accessing grid \"%s\"",
grid_info->name)
452 char const * grid_name,
char const * caller,
int *
grid_id) {
469 "internal error while accessing grid \"%s\"", grid_name)
506 grid_info->is_preliminary,
"multiple definitions of grid with name \"%s\"",
589 "no default YAC instance is defined yet")
603 enum {MAX_VERSION_STRING_LENGTH = 100};
610 recv_version_len <= MAX_VERSION_STRING_LENGTH,
611 "received implausible version string length (%zu); this may indicate "
612 "a protocol mismatch with a YAC version < 3.18.0 that does not broadcast "
613 "the version string length before broadcasting the version string. Please "
614 "check the YAC version of all processes used in this run.",
619 char * recv_version =
xmalloc(recv_version_len);
620 if (comm_rank == 0) strcpy(recv_version,
yac_version);
623 MPI_Bcast(recv_version, (
int)recv_version_len, MPI_CHAR, 0, comm), comm);
627 "inconsistent YAC versions between processes "
628 "(on local process \"%s\"; on root \"%s\")",
yac_version, recv_version)
638 int yac_int_size_local = (int)(
sizeof(
yac_int));
639 int yac_int_size_root = (int)(
sizeof(
yac_int));
642 MPI_Bcast(&yac_int_size_root, 1, MPI_INT, 0, comm), comm);
645 yac_int_size_local == yac_int_size_root,
646 "inconsistent size of yac_int datatype between processes "
647 "(on local process \"%d\"; on root \"%d\")",
648 yac_int_size_local, yac_int_size_root)
655 "MPI has not yet been initialised, but this call got a "
656 "communicator which is not allowed by the MPI standard "
657 "(MPI_COMM_WORLD is not to be used before the call to "
658 "MPI_Init or MPI_Init_thread)");
662 MPI_Comm * group_comms) {
668 MPI_Fint * group_comms) {
669 MPI_Comm comm_c = MPI_Comm_f2c(comm);
670 MPI_Comm * group_comms_c =
xmalloc(n*
sizeof(*group_comms_c));
672 for(
int i = 0; i<n; ++i)
673 group_comms[i] = MPI_Comm_c2f(group_comms_c[i]);
701 MPI_Comm
comm,
int * yac_instance_id) {
707 MPI_Fint
comm,
int * yac_instance_id) {
726 int * yac_instance_id) {
778 MPI_Comm instance_comm =
782 yac_mpi_call(MPI_Comm_rank(instance_comm, rank), instance_comm);
788 MPI_Comm instance_comm =
792 yac_mpi_call(MPI_Comm_size(instance_comm, size), instance_comm);
839 int yac_instance_id,
const char * filename,
int fileformat,
840 int sync_location,
int include_definitions) {
845 YAC_ASSERT(filename != NULL,
"filename is NULL")
854 char const * output_refs[] =
862 output_refs[sync_location], include_definitions);
866 const char * filename,
int filetype,
int sync_location,
867 int include_definitions) {
872 include_definitions);
878 int yac_instance_id,
const char * gridname,
const char * filename) {
883 YAC_ASSERT(gridname != NULL,
"gridname is NULL")
884 YAC_ASSERT(filename != NULL,
"filename is NULL")
899 int yac_instance_id,
const char * filename) {
904 YAC_ASSERT(filename != NULL,
"filename is NULL")
917 int yac_instance_id,
int apply_check) {
932 int yac_instance_id,
int is_fatal) {
1020 int yac_instance_id,
const char * start_datetime,
1021 const char * end_datetime) {
1025 start_datetime, end_datetime);
1029 const char * end_datetime ) {
1043 return (
int)getCalendarType();
1096 int comp_id,
char const * routine) {
1103 "component \"%s\" is only preliminarily defined", comp_info->
name);
1106 comp_info->
instance != NULL, routine,
1107 "instance of component \"%s\" is already finalized", comp_info->
name);
1115 int points_id,
char const * routine) {
1122 "points \"%s\" are only preliminarily defined",
1123 points_info->
name?points_info->
name:
"(unnamed)");
1139 comp_info->
instance, (
char const **)&(comp_info->
name), 1);
1149 *comp_comm_f = MPI_Comm_c2f(comp_comm);
1173 int yac_instance_id,
1174 char const ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
1179 comp_names, (
size_t)num_comps);
1183 const char ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
1193 int yac_instance_id,
1194 char const ** comp_names,
int num_comps, MPI_Fint * comps_comm_f) {
1196 MPI_Comm comps_comm;
1198 yac_instance_id, comp_names, num_comps, &comps_comm);
1199 *comps_comm_f = MPI_Comm_c2f(comps_comm);
1203 char const ** comp_names,
int num_comps, MPI_Fint *comps_comm_f) {
1205 MPI_Comm comps_comm;
1207 *comps_comm_f = MPI_Comm_c2f(comps_comm);
1236 "internal error while accessing component \"%s\"",
name)
1241 if (comp_info == NULL) {
1247 "components have already been defined")
1267 int yac_instance_id,
char const *
name,
int *
comp_id) {
1274 "components have already been defined");
1295 int yac_instance_id,
char const ** comp_names,
int num_comps,
1304 for(
int i = 0; i < num_comps; ++i) {
1316 size_t comp_counter = 0;
1317 char const ** all_comp_names =
1328 free(all_comp_names);
1332 char const ** comp_names,
int num_comps,
int *
comp_ids ) {
1340 int yac_instance_id,
char const * comp_name,
int *
comp_id ) {
1359 char const *
name,
char const * caller,
int * point_id) {
1362 *point_id = INT_MAX;
1383 *point_id != INT_MAX, caller,
1384 "internal error while accessing point \"%s\" "
1385 "for grid \"%s\" and location \"%s\"",
name,
1392 if (curr_points == NULL) {
1393 curr_points =
xmalloc(1 *
sizeof(*curr_points));
1415 char const * caller) {
1426 "duplicate point name \"%s\" for grid \"%s\" and location \"%s\"",
1440 double const * x_vertices,
size_t count,
char const * routine_name) {
1442 for (
size_t i = 0; i < count; ++i)
1444 (x_vertices[i] >= -4.0 * M_PI) && (x_vertices[i] <= 4.0 * M_PI),
1445 routine_name,
"x_vertices[%zu] = %lf outside of valid range [-4*PI;4*PI]",
1450 double const * y_vertices,
size_t count,
char const * routine_name) {
1452 for (
size_t i = 0; i < count; ++i)
1454 (y_vertices[i] >= - (M_PI_2 + 1e-5)) &&
1455 (y_vertices[i] <= (M_PI_2 + 1e-5)), routine_name,
1456 "y_vertices[%zu] = %.10lf outside of valid range [-PI/2;PI/2]",
1462 int nbr_vertices,
char const * routine_name) {
1465 for (
int i = 0; i < nbr_cells; ++i) {
1467 num_vertices_per_cell[i] >= 0, routine_name,
1468 "num_vertices_per_cell[%d] = %d ", i, num_vertices_per_cell[i]);
1469 count += num_vertices_per_cell[i];
1471 for (
size_t i = 0; i < count; ++i)
1475 "cell_to_vertex[%zu] = %d invalid value (nbr_vertices = %d)",
1480 int *cell_to_edge,
int *num_edges_per_cell,
int nbr_cells,
1481 int nbr_edges,
char const * routine_name) {
1484 for (
int i = 0; i < nbr_cells; ++i) {
1486 num_edges_per_cell[i] >= 0, routine_name,
"num_edges_per_cell[%d] = %d ",
1487 i, num_edges_per_cell[i]);
1488 count += num_edges_per_cell[i];
1490 for (
size_t i = 0; i < count; ++i)
1492 (cell_to_edge[i] >= 0) && (cell_to_edge[i] < nbr_edges), routine_name,
1493 "cell_to_edge[%zu] = %d invalid value (nbr_edges = %d)",
1494 i, cell_to_edge[i], nbr_edges);
1500 int const *nbr_points,
1502 double const *x_points,
1503 double const *y_points,
1514 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1519 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1520 "nbr_points does not match with grid. "
1521 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1522 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1525 x_points, (
size_t)(nbr_points[0]), __func__);
1527 y_points, (
size_t)(nbr_points[1]), __func__);
1530 xmalloc(data_size *
sizeof(*coordinates));
1531 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1532 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1533 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1541 int const *nbr_points,
1543 double const *x_points,
1544 double const *y_points,
1548 grid_id, nbr_points, located, x_points, y_points, NULL, point_id);
1554 int const *nbr_points,
1556 double const *x_points,
1557 double const *y_points,
1568 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1573 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1574 "nbr_points does not match with grid. "
1575 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1576 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1579 x_points, (
size_t)(nbr_points[0]), __func__);
1581 y_points, (
size_t)(nbr_points[1]), __func__);
1584 xmalloc(data_size *
sizeof(*coordinates));
1585 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1586 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1587 LLtoXYZ(x_points[k], y_points[k], coordinates[k]);
1595 int const *nbr_points,
1597 double const *x_points,
1598 double const *y_points,
1602 grid_id, nbr_points, located, x_points, y_points, NULL, point_id);
1608 int const nbr_points,
1610 double const *x_points,
1611 double const *y_points,
1622 "nbr_points does not match with grid. "
1623 "Given nbr_points != Expected (%zu != %zu)",
1630 xmalloc((
size_t)nbr_points *
sizeof(*coordinates));
1631 for (
int i = 0; i < nbr_points; ++i)
1632 LLtoXYZ(x_points[i], y_points[i], coordinates[i]);
1640 int const nbr_points,
1642 double const *x_points,
1643 double const *y_points,
1647 grid_id, nbr_points, located, x_points, y_points, NULL, point_id);
1653 int const *nbr_points,
1655 double const *x_points,
1656 double const *y_points,
1657 double x_north_pole,
1658 double y_north_pole,
1669 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1674 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1675 "nbr_points does not match with grid. "
1676 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1677 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1680 x_points, (
size_t)(nbr_points[0]), __func__);
1682 y_points, (
size_t)(nbr_points[1]), __func__);
1685 xmalloc(data_size *
sizeof(*coordinates));
1686 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1687 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1688 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1690 double north_pole[3];
1691 LLtoXYZ(x_north_pole, y_north_pole, north_pole);
1697 "yac_cdef_points_reg2d_rot_named");
1701 int const *nbr_points,
1703 double const *x_points,
1704 double const *y_points,
1705 double x_north_pole,
1706 double y_north_pole,
1710 grid_id, nbr_points, located, x_points, y_points,
1711 x_north_pole, y_north_pole, NULL, point_id);
1723 char const *
name,
char const * caller,
int * mask_id) {
1747 *mask_id != INT_MAX, caller,
1748 "internal error while accessing mask \"%s\" "
1749 "for grid \"%s\" and location \"%s\"",
name,
1756 if (curr_mask == NULL) {
1757 curr_mask =
xmalloc(1 *
sizeof(*curr_mask));
1777 int const * is_valid,
size_t nbr_points,
char const *
name) {
1788 "duplicate mask name \"%s\" for grid \"%s\" and location \"%s\"",
1802 int const nbr_points,
1804 int const * is_valid,
1815 "nbr_points does not match with grid. "
1816 "Given nbr_points != Expected (%zu != %zu)",
1825 int const nbr_points,
1827 int const * is_valid,
1840 "default mask for points \"%s\" has already been set before",
1841 curr_points->
name?curr_points->
name:
"(unnamed)");
1856 int const * point_ids,
1857 int const * mask_ids,
1858 int const num_pointsets,
1860 const char* timestep,
1864 YAC_ASSERT(num_pointsets >= 1,
"invalid number of pointsets")
1866 YAC_ASSERT(point_ids != NULL,
"no point_ids provided")
1875 (num_pointsets == 1)?
1877 xmalloc((
size_t)num_pointsets *
sizeof(*interp_fields));
1879 for (
int i = 0; i < num_pointsets; ++i) {
1887 if (mask_ids[i] != INT_MAX) {
1893 !curr_mask->
is_preliminary,
"mask \"%s\" is only preliminarily defined",
1894 curr_mask->
name?curr_mask->
name:
"(unnamed)");
1897 curr_mask->
grid == curr_points->
grid,
1898 "grids of mask \"%s\" and points \"%s\" do not match",
1899 curr_mask->
name?curr_mask->
name:
"(unnamed)",
1900 curr_points->
name?curr_points->
name:
"(unnamed)");
1903 "location of mask \"%s\" and points \"%s\" do not match",
1904 curr_mask->
name?curr_mask->
name:
"(unnamed)",
1905 curr_points->
name?curr_points->
name:
"(unnamed)");
1926 if (num_pointsets > 1) free(interp_fields);
1931 int const * point_ids,
1932 int const num_pointsets,
1934 const char* timestep,
1938 YAC_ASSERT(num_pointsets >= 1,
"invalid number of pointsets")
1940 YAC_ASSERT(point_ids != NULL,
"no point_ids provided")
1942 int * mask_ids =
xmalloc((
size_t)num_pointsets *
sizeof(*mask_ids));
1944 for (
int i = 0; i < num_pointsets; ++i)
1951 name,
comp_id, point_ids, mask_ids, num_pointsets,
1958 int yac_instance_id,
const char* comp_name,
const char* grid_name,
1959 const char* field_name,
double frac_mask_fallback_value) {
1965 couple_config, comp_name, grid_name, field_name,
1966 frac_mask_fallback_value);
1970 const char* comp_name,
const char* grid_name,
const char* field_name,
1971 double frac_mask_fallback_value) {
1975 frac_mask_fallback_value);
1979 const char* comp_name,
const char* metadata) {
1992 const char* metadata) {
2006 const char* grid_name,
const char* field_name,
const char* metadata) {
2015 const char* field_name,
const char* metadata) {
2018 field_name, metadata);
2022 const char* comp_name) {
2035 const char* grid_name) {
2048 const char* comp_name,
const char* grid_name,
const char* field_name) {
2057 const char* field_name) {
2060 grid_name, field_name);
2082 xmalloc(1 *
sizeof(*ext_couple_config));
2104 free(ext_couple_config);
2137 "\"%d\" is not a valid weight file on existing value "
2138 "(has to be YAC_WGT_ON_EXISTING_ERROR (%d), "
2139 "YAC_WGT_ON_EXISTING_KEEP(%d), or "
2140 "YAC_WGT_ON_EXISTING_OVERWRITE(%d))",
2166 "\"%d\" is not a valid mapping side (has to be 0 or 1)",
2328 int const * collection_indices) {
2331 "collection_size has to be non-negative (%d given)",
2338 size_t * size_t_collection_indices = NULL;
2340 size_t_collection_indices =
2344 collection_indices[i] >= 0,
2345 "collection_indices[%d] has to be non-negative (%d given)",
2346 i, collection_indices[i]);
2347 size_t_collection_indices[i] = (size_t)collection_indices[i];
2353 free(size_t_collection_indices);
2358 int const * collection_indices) {
2365 int ext_couple_config_id,
2367 int ** collection_indices) {
2374 size_t const * indices =
2382 indices[i] <= (
size_t)INT_MAX,
2383 "collection_indices[%d] value %zu exceeds INT_MAX",
2385 int_indices[i] = (int)indices[i];
2387 *collection_indices = int_indices;
2389 *collection_indices = NULL;
2393 *collection_indices = NULL;
2398 int yac_instance_id,
2399 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2400 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2401 char const * coupling_timestep,
int time_unit,
int time_reduction,
2402 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2408 interp_stack_config_id,
"interp_stack_config_id");
2409 char const * coupling_timestep_iso8601 =
2414 coupling_timestep_iso8601, time_reduction,
2415 interp_stack_config, src_lag, tgt_lag,
2429 int yac_instance_id,
2430 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2431 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2432 char const * coupling_timestep,
int time_unit,
int time_reduction,
2433 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2434 int ext_couple_config_id) {
2437 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
2438 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
2439 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
2444 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2445 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2446 char const * coupling_timestep,
int time_unit,
int time_reduction,
2447 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2448 int ext_couple_config_id) {
2453 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
2454 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
2459 int yac_instance_id,
2460 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2461 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2462 char const * coupling_timestep,
int time_unit,
int time_reduction,
2463 int interp_stack_config_id,
int src_lag,
int tgt_lag) {
2469 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
2470 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
2471 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
2472 &ext_couple_config);
2476 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2477 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2478 char const * coupling_timestep,
int time_unit,
int time_reduction,
2479 int interp_stack_config_id,
int src_lag,
int tgt_lag){
2485 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
2490 int yac_instance_id,
2491 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2492 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2493 char const * coupling_timestep,
int time_unit,
int time_reduction,
2494 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2535 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
2536 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
2537 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
2538 &ext_couple_config);
2544 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2545 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2546 char const * coupling_timestep,
int time_unit,
int time_reduction,
2547 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2558 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
2569 int num_interp_fields,
2570 int const * interp_field_sizes ) {
2578 "mismatching collection sizes for component %s grid %s field %s (%d != %d)",
2590 "mismatching number of interp fields "
2591 "for component %s grid %s field %s (%d != %zu)",
2598 if (interp_field_sizes) {
2600 ++interp_field_idx) {
2603 (
size_t)interp_field_sizes[interp_field_idx] ==
2607 cpl_field, (
size_t)interp_field_idx)),
2608 "mismatching interp field size "
2609 "for component %s grid %s field %s interp_field_idx %d (%d != %zu)",
2615 interp_field_sizes[interp_field_idx],
2619 cpl_field, (
size_t)interp_field_idx)));
2629 int src_field_buffer_size_ ) {
2637 "mismatching collection sizes for component %s grid %s field %s (%d != %d)",
2644 size_t num_src_fields;
2645 size_t const * src_field_buffer_sizes;
2646 size_t src_field_buffer_size = 0;
2648 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2649 for (
size_t i = 0; i < num_src_fields; ++i)
2650 src_field_buffer_size += src_field_buffer_sizes[i];
2653 (
size_t)src_field_buffer_size_ == src_field_buffer_size,
2654 "mismatching source buffer size "
2655 "for component %s grid %s field %s (%d != %zu)",
2660 src_field_buffer_size_, src_field_buffer_size);
2664 int num_src_fields_,
2666 int * src_field_buffer_sizes_ ) {
2674 "mismatching collection sizes for component %s grid %s field %s (%d != %d)",
2681 size_t num_src_fields;
2682 size_t const * src_field_buffer_sizes;
2684 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2687 (
size_t)num_src_fields_ == num_src_fields,
2688 "mismatching number of source fields "
2689 "for component %s grid %s field %s (%d != %zu)",
2695 for (
size_t i = 0; i < num_src_fields; ++i)
2697 (
size_t)src_field_buffer_sizes_[i] == src_field_buffer_sizes[i],
2698 "mismatching source buffer size "
2699 "for component %s grid %s field %s field_idx %zu (%d != %zu)",
2704 i, src_field_buffer_sizes_[i], src_field_buffer_sizes[i]);
2710 double * frac_mask_fallback_value,
2711 double * scaling_factor,
2712 double * scaling_summand,
2713 size_t * num_fixed_values,
2714 double ** fixed_values,
2715 size_t ** num_tgt_per_fixed_value,
2716 size_t ** tgt_idx_fixed,
2717 size_t * num_wgt_tgt,
2718 size_t ** wgt_tgt_idx,
2719 size_t ** num_src_per_tgt,
2721 size_t ** src_field_idx,
2723 size_t * num_src_fields,
2724 size_t ** src_field_buffer_size ) {
2757 size_t ** src_indptr_,
2762 size_t ** src_field_buffer_sizes ) {
2778 "target field \"%s\" has more than one interpolation field",
2781 size_t field_data_size =
2786 size_t * src_indptr =
2787 xcalloc((field_data_size + 1),
sizeof(*src_indptr));
2788 for (
size_t i = 0; i < num_wgt_tgt; ++i)
2789 src_indptr[wgt_tgt_idx[i]] = num_src_per_tgt[i];
2790 size_t total_num_weights = 0;
2792 size_t curr_count = src_indptr[i];
2793 src_indptr[i] = total_num_weights;
2794 total_num_weights += curr_count;
2800 for (
size_t i = 1; (i < num_wgt_tgt) && tgt_sorted; ++i)
2801 tgt_sorted = wgt_tgt_idx[i] > wgt_tgt_idx[i-1];
2805 "target indices for field \"%s\" are unsorted, which is unexpected, "
2848 free(num_src_per_tgt);
2851 *src_indptr_ = src_indptr;
2856 double * frac_mask_fallback_value,
2857 double * scaling_factor,
2858 double * scaling_summand,
2859 size_t * num_fixed_values,
2860 double ** fixed_values,
2861 size_t ** num_tgt_per_fixed_value,
2862 size_t ** tgt_idx_fixed,
2863 size_t ** src_indptr,
2865 size_t ** src_field_idx,
2867 size_t * num_src_fields,
2868 size_t ** src_field_buffer_sizes,
2869 size_t * tgt_field_data_size) {
2876 "target field \"%s\" has more than one interpolation field",
2879 *tgt_field_data_size =
2885 field_id, frac_mask_fallback_value, scaling_factor, scaling_summand,
2886 num_fixed_values, fixed_values, num_tgt_per_fixed_value, tgt_idx_fixed,
2887 src_indptr, weights, src_field_idx, src_idx, num_src_fields,
2888 src_field_buffer_sizes);
2923 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
2950 "current action of %s field \"%s\" of "
2951 "componente \"%s\" is not YAC_ACTION_NONE or YAC_ACTION_OUT_OF_BOUND",
2957 fputs(
"WARNING: YAC update action is beyond end of run date!\n", stderr);
2958 fputs(
"WARNING: YAC update action is beyond end of run date!\n", stdout);
2992 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
3008 double *recv_field) {
3015 "invalid number of interpolation fields (should be one)")
3025 recv_field_[i] = recv_field;
3026 recv_field += data_size;
3041 size_t num_src_fields;
3042 size_t const * src_field_buffer_sizes;
3044 cpl_field, &num_src_fields, &src_field_buffer_sizes);
3046 double *** src_field_buffer_ =
3048 double ** src_field_buffer__ =
3052 src_field_buffer_[i] =
3053 src_field_buffer__ + i * num_src_fields;
3054 for (
size_t j = 0; j < num_src_fields; ++j) {
3055 src_field_buffer_[i][j] = src_field_buffer;
3056 src_field_buffer += src_field_buffer_sizes[j];
3060 return src_field_buffer_;
3066 double **src_field_buffer) {
3073 size_t num_src_fields;
3074 size_t const * src_field_buffer_sizes;
3076 cpl_field, &num_src_fields, &src_field_buffer_sizes);
3078 double *** src_field_buffer_ =
3080 double ** src_field_buffer__ =
3084 src_field_buffer_[i] =
3085 src_field_buffer__ + i * num_src_fields;
3086 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3087 src_field_buffer_[i][j] = src_field_buffer[k];
3090 return src_field_buffer_;
3132 fputs(
"WARNING: YAC get action is beyond end of run date!\n", stderr);
3133 fputs(
"WARNING: YAC get action is beyond end of run date!\n", stdout);
3147 "collection size does not match with coupling configuration.")
3158 double ** recv_field,
3174 if ((*ierr == 0) && (interpolation != NULL)) {
3187 double ***src_field_buffer,
3188 double ***src_frac_mask_buffer,
3202 field_role !=
INVALID,
"invalid field exchange type for field \"%s\"",
3206 if (field_role ==
NOTHING)
return;
3209 field_role !=
SOURCE,
"field \"%s\" is source",
3222 size_t num_src_fields;
3224 cpl_field, &num_src_fields, NULL);
3228 "target field \"%s\" was configured %s support for fractional masking, "
3229 "but %s source fractional mask buffer was provided to this call",
3233 double ** src_field_buffer_ =
3236 sizeof(*src_field_buffer_));
3240 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3241 src_field_buffer_[k] = src_field_buffer[i][j];
3244 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3245 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
3247 if ((*
ierror == 0) && (interpolation_exchange != NULL)) {
3250 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
3253 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
3255 free(src_field_buffer_);
3272 double ** recv_field_ =
3300 double ** recv_field,
3309 double ** recv_field,
3320 double *src_field_buffer,
3323 double *src_frac_mask_buffer,
3333 double *** src_field_buffer_ =
3336 double *** src_frac_mask_buffer_ =
3337 src_frac_mask_buffer?
3343 is_async,
info, ierr);
3345 if (src_frac_mask_buffer) {
3346 free(src_frac_mask_buffer_[0]);
3347 free(src_frac_mask_buffer_);
3349 free(src_field_buffer_[0]);
3350 free(src_field_buffer_);
3355 double **src_field_buffer,
3358 double **src_frac_mask_buffer,
3368 double *** src_field_buffer_ =
3371 double *** src_frac_mask_buffer_ =
3372 src_frac_mask_buffer?
3378 is_async,
info, ierr);
3380 if (src_frac_mask_buffer) {
3381 free(src_frac_mask_buffer_[0]);
3382 free(src_frac_mask_buffer_);
3384 free(src_field_buffer_[0]);
3385 free(src_field_buffer_);
3390 double *src_field_buffer,
3402 double *src_field_buffer,
3405 double *src_frac_mask_buffer,
3418 double **src_field_buffer,
3430 double **src_field_buffer,
3433 double **src_frac_mask_buffer,
3447 double *src_field_buffer,
3459 double *src_field_buffer,
3462 double *src_frac_mask_buffer,
3475 double **src_field_buffer,
3487 double **src_field_buffer,
3490 double **src_frac_mask_buffer,
3503 double ***src_field_buffer,
3516 double ***src_field_buffer,
3530 double ***src_field_buffer,
3534 double ***src_frac_mask_buffer,
3548 double ***src_field_buffer,
3552 double ***src_frac_mask_buffer,
3585 double ***send_field_ =
3587 double **send_field__ =
3593 send_field_[i][j] = send_field;
3594 send_field += data_sizes[j];
3612 double *** send_field_ =
3617 free(send_field_[0]);
3626 double *send_frac_mask,
3635 double *** send_field_ =
3637 double *** send_frac_mask_ =
3643 free(send_field_[0]);
3645 free(send_frac_mask_[0]);
3646 free(send_frac_mask_);
3654 double **send_field,
3655 double **send_frac_mask,
3656 double ****send_field_,
3657 double ****send_frac_mask_) {
3679 (*send_field_)[i][j] = send_field[k];
3681 if (send_frac_mask != NULL) {
3685 (*send_frac_mask_)[i] =
3688 (*send_frac_mask_)[i][j] = send_frac_mask[k];
3697 double ** send_field,
3706 double *** send_field_;
3718 double ** send_field,
3721 double ** send_frac_mask,
3730 double *** send_field_;
3731 double *** send_frac_mask_;
3734 &send_field_, &send_frac_mask_);
3740 free(send_field_[i]);
3741 free(send_frac_mask_[i]);
3744 free(send_frac_mask_);
3757 unsigned put_idx = 0;
3784 unsigned put_idx = 0;
3789 cpl_field, put_idx),
"yac_cwait");
3832 double **** send_field_acc_,
double *** send_frac_mask,
3833 double **** send_frac_mask_acc_,
int * with_frac_mask_,
3834 int * use_raw_exchange_,
int *
info,
int *ierr) {
3840 cpl_field, put_idx):
3842 cpl_field, put_idx);
3846 int with_frac_mask =
3851 *with_frac_mask_ = with_frac_mask;
3858 struct event *
event =
3876 fputs(
"WARNING: YAC put action is beyond end of run date!\n", stderr);
3877 fputs(
"WARNING: YAC put action is beyond end of run date!\n", stdout);
3879 *send_field_acc_ = NULL;
3880 *send_frac_mask_acc_ = NULL;
3899 size_t num_interp_fields =
3907 if (with_frac_mask) {
3910 double *** send_field_acc =
3912 *send_field_acc_ = send_field_acc;
3913 *send_frac_mask_acc_ = send_frac_mask;
3916 for (
size_t i = 0; i < num_interp_fields; i++) {
3922 for (
size_t j = 0; j < data_size; ++j) {
3923 if (put_mask[i][j]) {
3924 double frac_mask = send_frac_mask[h][i][j];
3925 send_field_acc[h][i][j] =
3926 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3930 for (
size_t j = 0; j < data_size; ++j) {
3931 double frac_mask = send_frac_mask[h][i][j];
3932 send_field_acc[h][i][j] =
3933 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3939 *send_field_acc_ = send_field;
3940 *send_frac_mask_acc_ = send_frac_mask;
3942 return interpolation;
3955 int time_accumulation_count =
3958 time_accumulation_count++;
3961 if (time_accumulation_count == 1) {
3963 double send_field_acc_init_value;
3968 send_field_acc_init_value = 0.0;
3971 send_field_acc_init_value = DBL_MAX;
3974 send_field_acc_init_value = -DBL_MAX;
3981 cpl_field, put_idx, send_field_acc_init_value);
3984 cpl_field, put_idx, 0.0);
3989 double *** send_field_acc =
3991 *send_field_acc_ = send_field_acc;
3992 double *** send_frac_mask_acc;
3993 if (with_frac_mask) {
3994 send_frac_mask_acc =
3996 *send_frac_mask_acc_ = send_frac_mask_acc;
3998 send_frac_mask_acc = NULL;
3999 *send_frac_mask_acc_ = NULL;
4003#define PUT_CHECK (put_mask[i][j])
4006#define AGGREGATE_FRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
4011 for (size_t j = 0; j < data_size; ++j) { \
4012 double frac_mask = send_frac_mask[h][i][j]; \
4013 double send_field_value = send_field[h][i][j] * frac_mask; \
4014 if (CHECK && (EXTRA_CHECK)) { \
4015 if (frac_mask != 0.0) { \
4016 send_field_acc[h][i][j] ACCU_OP send_field_value; \
4017 send_frac_mask_acc[h][i][j] ACCU_OP frac_mask; \
4023#define AGGREATE_NOFRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
4028 for (size_t j = 0; j < data_size; ++j) {\
4029 double send_field_value = send_field[h][i][j]; \
4030 if (CHECK && (EXTRA_CHECK)) \
4031 send_field_acc[h][i][j] ACCU_OP send_field_value; \
4035#define AGGREGATE(EXTRA_CHECK, ACCU_OP) \
4037 for (int h = 0; h < collection_size; h++) { \
4038 for (size_t i = 0; i < num_interp_fields; i++) { \
4039 size_t data_size = \
4040 yac_coupling_field_get_data_size( \
4042 yac_coupling_field_get_interp_fields(cpl_field)[i].location); \
4043 if (with_frac_mask) { \
4044 if (put_mask) AGGREGATE_FRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
4045 else AGGREGATE_FRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
4047 if (put_mask) AGGREATE_NOFRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
4048 else AGGREATE_NOFRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
4067#undef AGGREATE_NOFRAC
4068#undef AGGREGATE_FRAC
4080 cpl_field, put_idx, time_accumulation_count);
4091 double weight = 1.0 / (double)time_accumulation_count;
4094#define PUT_CHECK (put_mask[i][j])
4095#define WEIGHT_ACC_(ACC, CHECK, EXTRA_CHECK) \
4097 for (size_t j = 0; j < data_size; j++) \
4098 if (CHECK && (EXTRA_CHECK)) ACC[h][i][j] *= weight; \
4100#define WEIGHT_ACC(ACC, EXTRA_CHECK) \
4102 if (put_mask) WEIGHT_ACC_(ACC, PUT_CHECK, EXTRA_CHECK) \
4103 else WEIGHT_ACC_(ACC, NO_CHECK, EXTRA_CHECK) \
4107 for (
size_t i = 0; i < num_interp_fields; i++) {
4116 WEIGHT_ACC(send_field_acc, send_frac_mask_acc[h][i][j] != 0.0)
4131 cpl_field, put_idx, 0);
4138 return interpolation;
4143 double ***
const send_field,
4145 double ***
const send_frac_mask,
4163 "put was called for field \"%s\" which is configured as target",
4175 "collection size of field \"%s\" does not match with "
4178 for (
unsigned put_idx = 0;
4194 &curr_action, &curr_ierr);
4197 *ierr =
MAX(*ierr, curr_ierr);
4211 if ((curr_action ==
NONE) || (curr_action ==
REDUCTION))
continue;
4219 (with_frac_mask && (send_frac_mask != NULL)) ||
4221 "interpolation for field \"%s\" was built for "
4222 "dynamic fractional masking, but no mask was provided",
4225 (!with_frac_mask && (send_frac_mask == NULL)) ||
4227 "interpolation for field \"%s\" was not built "
4228 "for dynamic fractional masking, but a mask was provided",
4231 double *** send_field_ptr =
4233 double *** send_frac_mask_ptr =
4238 size_t num_src_fields =
4240 double const ** send_field_ptr_ =
4243 num_src_fields *
sizeof(*send_field_ptr_));
4247 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4248 send_field_ptr_[k] = send_field_ptr[i][j];
4251 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4252 send_field_ptr_[k] = send_frac_mask_ptr[i][j];
4256 free(send_field_ptr_);
4273 double ***
const send_field,
4285 int const recv_field_id,
4299 double *** send_field_ =
4301 double ** recv_field_ =
4305 send_field_id, recv_field_id,
collection_size, send_field_, recv_field_,
4306 send_info, recv_info, ierr);
4309 free(send_field_[0]);
4317 int const recv_field_id,
4322 double *send_frac_mask,
4325 double *src_field_buffer,
4328 double *src_frac_mask_buffer,
4339 double *** send_field_ =
4341 double *** send_frac_mask_ =
4345 double *** src_field_buffer_ =
4348 double *** src_frac_mask_buffer_ =
4349 src_frac_mask_buffer?
4355 send_field_, send_frac_mask_,
4356 src_field_buffer_, src_frac_mask_buffer_,
4357 send_info, recv_info, ierr);
4359 if (src_frac_mask_buffer) {
4360 free(src_frac_mask_buffer_[0]);
4361 free(src_frac_mask_buffer_);
4363 free(src_field_buffer_[0]);
4364 free(src_field_buffer_);
4365 if (send_frac_mask_) {
4366 free(send_frac_mask_[0]);
4367 free(send_frac_mask_);
4369 free(send_field_[0]);
4375 int const recv_field_id,
4380 double *src_field_buffer,
4389 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
4396 int const recv_field_id,
4401 double *send_frac_mask,
4413 double *** send_field_ =
4415 double *** send_frac_mask_ =
4417 double ** recv_field_ =
4421 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
4422 recv_field_, send_info, recv_info, ierr);
4425 free(send_field_[0]);
4427 free(send_frac_mask_[0]);
4428 free(send_frac_mask_);
4435 int const recv_field_id,
4437 double ** send_field,
4439 double ** recv_field,
4449 double *** send_field_;
4451 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
4454 send_field_id, recv_field_id,
collection_size, send_field_, recv_field,
4455 send_info, recv_info, ierr);
4457 free(send_field_[0]);
4463 int const recv_field_id,
4465 double ** send_field,
4467 double **src_field_buffer,
4479 double *** send_field_;
4481 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
4482 double *** src_field_buffer_ =
4488 src_field_buffer_, send_info, recv_info, ierr);
4490 free(src_field_buffer_[0]);
4491 free(src_field_buffer_);
4492 free(send_field_[0]);
4500 int const recv_field_id,
4502 double ** send_field,
4504 double ** send_frac_mask,
4506 double ** recv_field,
4515 double *** send_field_;
4516 double *** send_frac_mask_;
4519 &send_field_, &send_frac_mask_);
4522 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
4523 recv_field, send_info, recv_info, ierr);
4525 free(send_field_[0]);
4527 free(send_frac_mask_[0]);
4528 free(send_frac_mask_);
4533 int const recv_field_id,
4535 double ** send_field,
4537 double ** send_frac_mask,
4539 double ** src_field_buffer,
4542 double ** src_frac_mask_buffer,
4553 double *** send_field_;
4554 double *** send_frac_mask_;
4557 &send_field_, &send_frac_mask_);
4558 double *** src_field_buffer_ =
4561 double *** src_frac_mask_buffer_ =
4562 src_frac_mask_buffer?
4567 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
4568 src_field_buffer_, src_frac_mask_buffer_, send_info, recv_info, ierr);
4570 free(src_frac_mask_buffer_[0]);
4571 free(src_frac_mask_buffer_);
4572 free(src_field_buffer_[0]);
4573 free(src_field_buffer_);
4574 free(send_field_[0]);
4576 free(send_frac_mask_[0]);
4577 free(send_frac_mask_);
4583 int const recv_field_id,
4585 double ***
const send_field,
4587 double ***
const send_frac_mask,
4589 double ** recv_field,
4611 "collection size does not match with coupling configuration.")
4615 "more than one put per field is not supported for yac_cexchange_frac.")
4621 int send_with_frac_mask;
4626 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
4627 &send_with_frac_mask, &use_raw_exchange,
4628 &send_action, &send_ierr);
4631 send_with_frac_mask == (send_frac_mask != NULL),
4632 "source field \"%s\" was configured %s support for fractional masking, "
4633 "but %s fractional mask was provided to this call",
4635 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
4637 *send_info =
MAX(*send_info, send_action);
4638 *ierr =
MAX(*ierr, send_ierr);
4645 (send_action ==
NONE) ||
4664 double *** send_field_ptr =
4665 (send_field_acc == NULL)?send_field:send_field_acc;
4666 double *** send_frac_mask_ptr =
4667 (send_frac_mask_acc == NULL)?send_frac_mask:send_frac_mask_acc;
4670 if (get_interpolation != NULL) {
4673 get_interpolation == put_interpolation,
4674 "send_field_id and recv_field_id do not match")
4676 if (send_with_frac_mask)
4678 put_interpolation, send_field_ptr, send_frac_mask_ptr, recv_field);
4681 put_interpolation, send_field_ptr, recv_field);
4686 if (send_with_frac_mask)
4688 put_interpolation, send_field_ptr, send_frac_mask_ptr);
4696 int const recv_field_id,
4698 double ***
const send_field,
4700 double ***
const send_frac_mask,
4702 double ***src_field_buffer,
4706 double ***src_frac_mask_buffer,
4733 int recv_with_frac_mask =
4737 if (recv_with_frac_mask)
4739 recv_field_id,
collection_size, src_field_buffer, src_frac_mask_buffer,
4749 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
4750 "target field \"%s\" was configured %s support for fractional masking, "
4751 "but %s source fractional mask buffer was provided to this call",
4753 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
4758 "collection size does not match with coupling configuration.")
4762 "more than one put per field is not supported for yac_cexchange_frac.")
4766 "source field \"%s\" is not configured for raw data exchange",
4773 int send_with_frac_mask;
4778 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
4779 &send_with_frac_mask, &use_raw_exchange,
4780 &send_action, &send_ierr);
4783 (put_interpolation_exchange == NULL) ||
4784 (send_with_frac_mask == recv_with_frac_mask),
4785 "fractional mask configuration for source field \"%s\" and target field "
4786 "\"%s\" does not match",
4791 send_with_frac_mask == (send_frac_mask != NULL),
"source field \"%s\" "
4792 "was configured %s support for fractional masking, but %s fractional mask "
4794 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
4796 *send_info =
MAX(*send_info, send_action);
4797 *ierr =
MAX(*ierr, send_ierr);
4804 (send_action ==
NONE) ||
4806 if (recv_with_frac_mask)
4808 recv_field_id,
collection_size, src_field_buffer, src_frac_mask_buffer,
4829 size_t num_src_fields;
4831 recv_cpl_field, &num_src_fields, NULL);
4833 double const ** send_field_ptr_ =
4836 num_src_fields *
sizeof(*send_field_ptr_));
4840 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4841 send_field_ptr_[k] = send_field_acc[i][j];
4842 if (send_with_frac_mask)
4844 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4845 send_field_ptr_[k] = send_frac_mask_acc[i][j];
4849 get_interpolation_exchange == put_interpolation_exchange,
4850 "send_field_id and recv_field_id do not match")
4853 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
4854 "target field \"%s\" was configured %s support for fractional masking, "
4855 "but %s fractional mask bufferwas provided to this call",
4857 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
4859 double ** src_field_buffer_ =
4862 num_src_fields *
sizeof(*src_field_buffer_));
4866 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4867 src_field_buffer_[k] = src_field_buffer[i][j];
4868 if (recv_with_frac_mask)
4870 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4871 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
4875 put_interpolation_exchange, send_field_ptr_, src_field_buffer_,
4876 "yac_cexchange_raw_frac");
4878 free(src_field_buffer_);
4879 free(send_field_ptr_);
4884 int const recv_field_id,
4886 double ***
const send_field,
4888 double ** recv_field,
4895 send_field, NULL, recv_field, send_info, recv_info, ierr);
4899 int const recv_field_id,
4901 double ***
const send_field,
4903 double ***src_field_buffer,
4913 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
4929 int yac_instance_id,
char const ** comp_names,
int num_comp_names ){
4932 comp_names, (
size_t)num_comp_names);
4936 char const ** comp_names,
int num_comp_names ){
4972 "unresolved preliminary points \"%s\"",
4978 "unresolved preliminary mask \"%s\"",
4992 size_t num_basic_grids = 0;
5013 int yac_instance_id,
int emit_flags,
char **
config) {
5021 size_t num_basic_grids = 0;
5031 instance, basic_grids, num_basic_grids, emit_flags);
5056 instance, comp_name, __func__, &
comp_id);
5086 grid_info, loc, point_name, __func__, &points_id);
5100 grid_info, loc, mask_name, __func__, &mask_id);
5105 const char* grid_name,
const char* field_name){
5110 return cpl_field != NULL;
5114 const char* comp_name,
const char* grid_name,
const char* field_name){
5122 const char* grid_name,
const char* field_name){
5128 "no field '%s' defined on the local process for "
5129 "component '%s' and grid '%s'", field_name, comp_name, grid_name);
5136 grid_name, field_name);
5166 int yac_instance_id,
const char* comp_name ) {
5172 size_t nbr_couple_config_grids =
5175 YAC_ASSERT(comp_name != NULL,
"Invalid comp_name. (NULL is not allowed)");
5177 int nbr_comp_grids = 0;
5178 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
5180 yac_instance_id, comp_name,
5183 return nbr_comp_grids;
5192 const char* grid_name) {
5199 size_t nbr_comp_fields =
5201 for(
size_t field_idx=0; field_idx<nbr_comp_fields; ++field_idx)
5206 couple_config, comp_idx, field_idx)))
5217 int yac_instance_id,
int nbr_comps,
const char ** comp_names) {
5223 size_t nbr_couple_config_comps =
5227 (
size_t)nbr_comps == nbr_couple_config_comps,
5228 "invalid array size (nbr_comps = %d; nbr_couple_config_comps = %zu)",
5229 nbr_comps, nbr_couple_config_comps);
5231 for(
size_t i = 0; i < nbr_couple_config_comps; ++i)
5242 int yac_instance_id,
int nbr_grids,
const char **
grid_names ) {
5248 size_t nbr_couple_config_grids =
5252 (
size_t)nbr_grids == nbr_couple_config_grids,
5253 "invalid array size (nbr_grids = %d, nbr_couple_config_grids = %zu)",
5254 nbr_grids, nbr_couple_config_grids);
5256 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
5266 int yac_instance_id,
const char* comp_name,
5273 size_t nbr_couple_config_grids =
5277 comp_name != NULL,
"Invalid comp_name. (NULL is not allowed)");
5279 size_t nbr_comp_grid = 0;
5280 for(
size_t i = 0; i < nbr_couple_config_grids; ++i) {
5282 const char* curr_grid_name =
5286 yac_instance_id, comp_name, curr_grid_name) > 0) {
5289 nbr_comp_grid < (
size_t)nbr_grids,
5290 "invalid array size (nbr_grids = %d; nbr_comp_grid > %zu)",
5291 nbr_grids, nbr_comp_grid);
5299 nbr_comp_grid == (
size_t)nbr_grids,
5300 "invalid array size (nbr_grids = %d; nbr_comp_grid = %zu)",
5301 nbr_grids, nbr_comp_grid);
5312 const char * comp_name,
const char* grid_name,
5320 size_t nbr_comp_fields =
5323 size_t nbr_comp_grid_fields = 0;
5324 for(
size_t field_idx = 0; field_idx < nbr_comp_fields; ++field_idx) {
5329 couple_config, comp_idx, field_idx))) {
5333 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields > %zu",
5338 nbr_comp_grid_fields++;
5344 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields = %zu",
5358 YAC_ASSERT(field != NULL,
"field ID not defined!");
5365 YAC_ASSERT(field != NULL,
"field ID not defined!");
5373 YAC_ASSERT(field != NULL,
"field ID not defined!");
5380 YAC_ASSERT(field != NULL,
"field ID not defined!");
5387 YAC_ASSERT(field != NULL,
"field ID not defined!");
5394 YAC_ASSERT(field != NULL,
"field ID not defined!");
5401 int yac_instance_id,
const char* comp_name,
const char* grid_name,
5402 const char* field_name ) {
5409 couple_config, comp_name, grid_name, field_name);
5413 const char* field_name ) {
5416 grid_name, field_name);
5420 int yac_instance_id,
const char* comp_name,
const char* grid_name,
5421 const char* field_name) {
5427 comp_name, grid_name, field_name);
5431 const char* comp_name,
const char* grid_name,
const char* field_name ) {
5438 comp_name, grid_name, field_name);
5443 "collection size for field \"%s\" on component \"%s\" and grid \"%s\" is "
5444 "too large to be represented as an int (collection_size = %zu)",
5451 const char* comp_name,
const char* grid_name,
const char* field_name) {
5459 const char* grid_name,
const char* field_name ) {
5467 const char* grid_name,
const char* field_name ) {
5474 couple_config, comp_name, grid_name, field_name);
5478 const char* field_name ) {
5481 grid_name, field_name);
5486 const char* tgt_field_name,
const char** src_comp_name,
5500 const char* tgt_field_name,
const char** src_comp_name,
5512 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
5513 double *x_vertices,
double *y_vertices,
int *
grid_id) {
5515 size_t nbr_vertices_size_t[2] =
5516 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
5524 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices));
5530 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
5531 double *x_vertices,
double *y_vertices,
int *
grid_id) {
5533 size_t nbr_vertices_size_t[2] =
5534 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
5542 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices));
5548 const char * grid_name,
int nbr_vertices,
5549 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
5555 cell_to_vertex, num_vertices_per_cell, nbr_cells, nbr_vertices, __func__);
5561 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
5568 const char * grid_name,
int nbr_vertices,
5569 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
5575 cell_to_vertex, num_vertices_per_cell, nbr_cells, nbr_vertices, __func__);
5581 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
5588 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
5589 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
5590 int *cell_to_edge,
int *edge_to_vertex,
int *
grid_id) {
5595 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges, __func__);
5601 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
5602 num_edges_per_cell, x_vertices, y_vertices,
5603 cell_to_edge, edge_to_vertex));
5609 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
5610 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
5611 int *cell_to_edge,
int *edge_to_vertex,
int *
grid_id) {
5616 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges, __func__);
5622 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
5623 num_edges_per_cell, x_vertices, y_vertices,
5624 cell_to_edge, edge_to_vertex));
5630 const char * grid_name,
int nbr_points,
5631 double *x_points,
double *y_points,
int *
grid_id) {
5640 (
size_t)nbr_points, x_points, y_points));
5646 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
5647 double *x_vertices,
double *y_vertices,
5648 double x_north_pole,
double y_north_pole,
int *
grid_id) {
5650 size_t nbr_vertices_size_t[2] =
5651 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
5659 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices,
5660 x_north_pole, y_north_pole));
5678 yac_int ** grid_global_ids,
size_t * count) {
5686 yac_int ** temp_grid_global_ids;
5691 temp_grid_global_ids = &(
grid_data->cell_ids);
5696 temp_grid_global_ids = &(
grid_data->vertex_ids);
5701 temp_grid_global_ids = &(
grid_data->edge_ids);
5707 if (*temp_grid_global_ids == NULL) {
5708 *temp_grid_global_ids =
xmalloc(*count *
sizeof(**temp_grid_global_ids));
5711 *grid_global_ids = *temp_grid_global_ids;
5735 for (
size_t i = 0; i < count; ++i) {
5751 int ** grid_core_mask;
5760 grid_core_mask = &(
grid_data->core_cell_mask);
5765 grid_core_mask = &(
grid_data->core_vertex_mask);
5771 grid_core_mask = &(
grid_data->core_edge_mask);
5777 size_t core_mask_size = count *
sizeof(**grid_core_mask);
5778 if (*grid_core_mask == NULL) *grid_core_mask =
xmalloc(core_mask_size);
5779 memcpy(*grid_core_mask, is_core, core_mask_size);
5828 *interp_stack_config_id =
5838 interp_stack_config_id,
"interp_stack_config_id");
5856 int interp_stack_config_id,
5857 int reduction_type,
int partial_coverage) {
5861 interp_stack_config_id,
"interp_stack_config_id");
5874 int interp_stack_config_id,
5879 interp_stack_config_id,
"interp_stack_config_id");
5891 int interp_stack_config_id,
5892 int type,
size_t n,
double max_search_distance,
double scale) {
5896 interp_stack_config_id,
"interp_stack_config_id");
5907 max_search_distance, scale);
5911 int interp_stack_config_id,
5912 int weight_type,
int search_distance_type,
double search_distance,
double scale) {
5916 interp_stack_config_id,
"interp_stack_config_id");
5927 "invalid search distance type")
5930 interp_stack_config,
5933 search_distance, scale);
5937 int interp_stack_config_id,
5938 size_t n,
double max_search_distance,
double scale) {
5942 interp_stack_config_id,
"interp_stack_config_id");
5945 interp_stack_config, n, max_search_distance, scale);
5949 int interp_stack_config_id,
int order,
int enforced_conserv,
5950 int partial_coverage,
int normalisation) {
5954 interp_stack_config_id,
"interp_stack_config_id");
5959 "invalid normalisation type")
5962 interp_stack_config, order, enforced_conserv, partial_coverage,
5969 xmalloc(1 *
sizeof(*ext_spmap_config));
5996 ext_spmap_config_id,
"ext_spmap_config_id");
6009 free(ext_spmap_config);
6014 int ext_spmap_config_id,
double spread_distance) {
6018 ext_spmap_config_id,
"ext_spmap_config_id");
6024 int ext_spmap_config_id,
double max_search_distance) {
6028 ext_spmap_config_id,
"ext_spmap_config_id");
6038 ext_spmap_config_id,
"ext_spmap_config_id");
6049 int ext_spmap_config_id,
int scale_type) {
6053 ext_spmap_config_id,
"ext_spmap_config_id");
6066 int ext_spmap_config_id,
double sphere_radius) {
6070 ext_spmap_config_id,
"ext_spmap_config_id");
6084 int ext_spmap_config_id,
double sphere_radius) {
6088 ext_spmap_config_id,
"ext_spmap_config_id");
6103 char const * varname,
int min_global_id,
char const * role) {
6106 (filename != NULL) && (*filename !=
'\0'),
"missing file name (%s)", role);
6108 (varname != NULL) && (*varname !=
'\0'),
"missing variable name (%s)", role);
6115 "file name mismatch with existing file name in %s config "
6116 "(old \"%s\" vs new \"%s\")",
6121 "variable name mismatch with existing variable name in %s config "
6122 "(old \"%s\" vs new \"%s\")",
6128 "min global ID mismatch with existing min global ID in %s config "
6129 "(old %d vs new %d)",
6142 int ext_spmap_config_id,
char const * filename,
6143 char const * varname,
int min_global_id) {
6154 int ext_spmap_config_id,
char const * filename,
6155 char const * varname,
int min_global_id) {
6168 xmalloc(1 *
sizeof(*spmap_overwrite_config));
6187 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6189 free(spmap_overwrite_config);
6194 int spmap_overwrite_config_id,
double center_lon,
double center_lat,
6199 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6212 int spmap_overwrite_config_id,
double spread_distance) {
6216 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6222 int spmap_overwrite_config_id,
double max_search_distance) {
6226 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6236 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6247 int interp_stack_config_id,
double spread_distance,
6248 double max_search_distance,
int weight_type,
int scale_type,
6249 double src_sphere_radius,
char const * src_filename,
6250 char const * src_varname,
int src_min_global_id,
6251 double tgt_sphere_radius,
char const * tgt_filename,
6252 char const * tgt_varname,
int tgt_min_global_id) {
6256 interp_stack_config_id,
"interp_stack_config_id");
6269 interp_stack_config, spread_distance, max_search_distance,
6272 src_sphere_radius, src_filename, src_varname, src_min_global_id,
6273 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
6297 return cell_area_config;
6301 int spmap_overwrite_config_id) {
6305 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
6316 src_point_selection =
6340 return overwrite_config;
6344 int interp_stack_config_id,
int ext_spmap_config_id,
6345 int * spmap_overwrite_config_ids,
int spmap_overwrite_config_count) {
6349 interp_stack_config_id,
"interp_stack_config_id");
6353 ext_spmap_config_id,
"ext_spmap_config_id");
6362 ext_spmap_config->
scale_type, src_cell_area_config, tgt_cell_area_config);
6373 (spmap_overwrite_config_count > 0)?
6375 ((
size_t)spmap_overwrite_config_count + 1),
6376 sizeof(*overwrite_configs)):NULL;
6378 for (
int i = 0; i < spmap_overwrite_config_count; ++i) {
6379 overwrite_configs[i] =
6384 interp_stack_config, spmap_config, overwrite_configs);
6386 for (
int i = 0; i < spmap_overwrite_config_count; ++i) {
6389 free(overwrite_configs);
6395 int interp_stack_config_id,
double spread_distance,
6396 double max_search_distance,
int weight_type,
int scale_type,
6397 double src_sphere_radius,
char const * src_filename,
6398 char const * src_varname,
int src_min_global_id,
6399 double tgt_sphere_radius,
char const * tgt_filename,
6400 char const * tgt_varname,
int tgt_min_global_id,
6401 int * overwrite_config_ids,
int overwrite_config_count) {
6403 if (src_filename && (src_filename[0] ==
'\0')) src_filename = NULL;
6404 if (src_varname && (src_varname[0] ==
'\0')) src_varname = NULL;
6405 if (tgt_filename && (tgt_filename[0] ==
'\0')) tgt_filename = NULL;
6406 if (tgt_varname && (tgt_varname[0] ==
'\0')) tgt_varname = NULL;
6408 if (overwrite_config_count == 0) {
6411 interp_stack_config_id, spread_distance, max_search_distance,
6413 src_sphere_radius, src_filename, src_varname, src_min_global_id,
6414 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
6419 overwrite_config_ids,
"missing overwrite configuration ids");
6421 int ext_spmap_config_id;
6424 ext_spmap_config_id, spread_distance);
6426 ext_spmap_config_id, max_search_distance);
6430 if (src_filename != NULL) {
6432 src_varname != NULL,
6433 "source file name \"%s\" was provided, but variable name is missing",
6437 "source file name \"%s\" was provided, but sphere radius is set as well",
6440 ext_spmap_config_id, src_filename, src_varname, src_min_global_id);
6443 ext_spmap_config_id, src_sphere_radius);
6446 if (tgt_filename != NULL) {
6448 tgt_varname != NULL,
6449 "target file name \"%s\" was provided, but variable name is missing",
6453 "target file name \"%s\" was provided, but sphere radius is set as well",
6456 ext_spmap_config_id, tgt_filename, tgt_varname, tgt_min_global_id);
6459 ext_spmap_config_id, tgt_sphere_radius);
6463 interp_stack_config_id, ext_spmap_config_id,
6464 overwrite_config_ids, overwrite_config_count);
6474 interp_stack_config_id,
"interp_stack_config_id");
6480 int interp_stack_config_id,
char const * filename,
6481 int on_missing_file,
int on_succes) {
6485 interp_stack_config_id,
"interp_stack_config_id");
6490 "invalid on_missing_file value")
6497 interp_stack_config, filename,
6503 int interp_stack_config_id,
char const * filename) {
6506 interp_stack_config_id, filename,
6512 int interp_stack_config_id,
double value) {
6516 interp_stack_config_id,
"interp_stack_config_id");
6522 int interp_stack_config_id,
char const * constructor_key,
6523 char const * do_search_key) {
6527 interp_stack_config_id,
"interp_stack_config_id");
6530 interp_stack_config, constructor_key, do_search_key);
6534 int interp_stack_config_id,
int creep_distance) {
6538 interp_stack_config_id,
"interp_stack_config_id");
6544 int interp_stack_config_id,
char const * func_compute_weights_key) {
6548 interp_stack_config_id,
"interp_stack_config_id");
6551 interp_stack_config, func_compute_weights_key);
6567 char const * interp_stack_config,
int parse_flags) {
6578 interp_stack_config, parse_flags);
6580 int interp_stack_config_id =
6585 return interp_stack_config_id;
6589 char const * interp_stack_config,
int * interp_stack_config_id) {
6591 *interp_stack_config_id =
6597 char const * interp_stack_config,
int * interp_stack_config_id) {
6599 *interp_stack_config_id =
char const * grid_names[]
char const * field_names[8]
#define YAC_ASSERT(exp, msg)
struct yac_basic_grid * yac_basic_grid_new(char const *name, struct yac_basic_grid_data grid_data)
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
size_t yac_basic_grid_add_mask(struct yac_basic_grid *grid, enum yac_location location, int const *mask, size_t count, char const *mask_name)
size_t yac_basic_grid_add_coordinates_nocpy(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates)
char const * yac_basic_grid_get_name(struct yac_basic_grid *grid)
void yac_basic_grid_compute_cell_areas(struct yac_basic_grid *grid, double *cell_areas)
size_t yac_basic_grid_get_data_size(struct yac_basic_grid *grid, enum yac_location location)
void yac_basic_grid_delete(struct yac_basic_grid *grid)
void yac_rotate_coordinates(yac_coordinate_pointer coordinates, size_t num_coordinates, double north_pole[3])
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_ll(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_cloud(size_t nbr_points, double *x_points, double *y_points)
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d_rot(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, double north_pole_lon, double north_pole_lat)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge_ll(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_curve_2d(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex)
struct yac_interp_stack_config * yac_yaml_parse_interp_stack_config_string(char const *str_interp_stack_config, int parse_flags)
int const YAC_YAML_EMITTER_DEFAULT
emit to YAML format
void yac_yaml_read_coupling(struct yac_couple_config *couple_config, const char *yaml_filename, int parse_flags)
int const YAC_YAML_EMITTER_JSON
emit to JSON format
int const YAC_YAML_PARSER_DEFAULT
default parse flags (YAML format)
char const * yac_time_to_ISO(char const *time, enum yac_time_unit_type time_unit)
int const YAC_YAML_PARSER_JSON_FORCE
assume JSON format
void yac_couple_config_set_grid_output_filename(struct yac_couple_config *couple_config, char const *grid_name, const char *output_filename)
void yac_couple_config_set_component_metadata(struct yac_couple_config *couple_config, char const *comp_name, const char *metadata)
void yac_couple_config_field_enable_frac_mask(struct yac_couple_config *couple_config, char const *comp_name, char const *grid_name, char const *field_name, double frac_mask_fallback_value)
const char * yac_couple_config_get_component_metadata(struct yac_couple_config const *couple_config, const char *comp_name)
char const * yac_couple_config_get_field_grid_name(struct yac_couple_config const *couple_config, size_t component_idx, size_t field_idx)
char const * yac_couple_config_get_field_timestep(struct yac_couple_config const *couple_config, char const *component_name, char const *grid_name, char const *field_name)
size_t yac_couple_config_get_num_grids(struct yac_couple_config const *couple_config)
size_t yac_couple_config_get_component_idx(struct yac_couple_config const *couple_config, char const *component_name)
void yac_couple_config_set_apply_coordinate_check(struct yac_couple_config *couple_config, int apply_coordinate_check)
char const * yac_couple_config_get_grid_name(struct yac_couple_config const *couple_config, size_t grid_idx)
double yac_couple_config_get_frac_mask_fallback_value(struct yac_couple_config const *couple_config, char const *component_name, char const *grid_name, char const *field_name)
void yac_couple_config_set_field_metadata(struct yac_couple_config *couple_config, const char *comp_name, const char *grid_name, const char *field_name, const char *metadata)
size_t yac_couple_config_get_field_collection_size(struct yac_couple_config const *couple_config, char const *component_name, char const *grid_name, char const *field_name)
int yac_couple_config_get_field_role(struct yac_couple_config const *couple_config, char const *component_name, char const *grid_name, char const *field_name)
size_t yac_couple_config_get_num_components(struct yac_couple_config const *couple_config)
void yac_couple_config_set_coordinates_mismatch_is_fatal(struct yac_couple_config *couple_config, int coordinates_mismatch_is_fatal)
char const * yac_couple_config_get_field_name(struct yac_couple_config const *couple_config, size_t component_idx, size_t field_idx)
size_t yac_couple_config_get_num_fields(struct yac_couple_config const *couple_config, size_t component_idx)
void yac_couple_config_set_grid_metadata(struct yac_couple_config *couple_config, char const *grid_name, const char *metadata)
const char * yac_couple_config_get_grid_metadata(struct yac_couple_config const *couple_config, const char *grid_name)
char const * yac_couple_config_get_component_name(struct yac_couple_config const *couple_config, size_t component_idx)
void yac_couple_config_set_all_grids_output_filename(struct yac_couple_config *couple_config, char const *output_filename)
int yac_couple_config_is_valid_field(struct yac_couple_config const *couple_config, size_t component_idx, size_t field_idx)
void yac_couple_config_get_field_source(struct yac_couple_config const *couple_config, char const *tgt_component_name, char const *tgt_grid_name, char const *tgt_field_name, char const **src_component_name, char const **src_grid_name, char const **src_field_name)
void yac_couple_config_set_config_output_filename(struct yac_couple_config *couple_config, char const *filename, enum yac_text_filetype filetype, char const *ref, int include_definitions)
const char * yac_couple_config_get_field_metadata(struct yac_couple_config const *couple_config, const char *comp_name, const char *grid_name, const char *field_name)
@ YAC_TEXT_FILETYPE_YAML
YAML format.
@ YAC_TEXT_FILETYPE_JSON
JSON format.
int yac_get_event_time_operation(struct event *event)
enum yac_action_type yac_event_check(struct event *event)
void yac_event_update(struct event *event)
struct yac_interpolation_exchange * yac_get_coupling_field_put_op_interpolation_exchange(struct coupling_field *field, unsigned put_idx)
unsigned yac_get_coupling_field_collection_size(struct coupling_field *field)
const char * yac_get_coupling_field_timestep(struct coupling_field *field)
unsigned yac_get_coupling_field_num_puts(struct coupling_field *field)
char const * yac_get_coupling_field_comp_name(struct coupling_field *field)
int yac_get_coupling_field_put_op_time_accumulation_count(struct coupling_field *field, unsigned put_idx)
struct yac_pak * yac_coupling_field_get_pak(struct coupling_field *cpl_field)
int yac_coupling_field_get_action(struct coupling_field *cpl_field)
double *** yac_get_coupling_field_put_op_send_frac_mask_acc(struct coupling_field *field, unsigned put_idx)
struct yac_basic_grid * yac_coupling_field_get_basic_grid(struct coupling_field *field)
size_t yac_coupling_field_get_num_interp_fields(struct coupling_field *field)
struct yac_interpolation * yac_get_coupling_field_put_op_interpolation(struct coupling_field *field, unsigned put_idx)
enum yac_location yac_get_coupling_field_get_interp_field_location(struct coupling_field *field, size_t interp_field_idx)
struct event * yac_get_coupling_field_get_op_event(struct coupling_field *field)
size_t yac_coupling_field_get_data_size(struct coupling_field *field, enum yac_location location)
struct yac_interp_field const * yac_coupling_field_get_interp_fields(struct coupling_field *cpl_field)
int * yac_get_coupling_field_get_mask(struct coupling_field *field)
struct event * yac_get_coupling_field_put_op_event(struct coupling_field *field, unsigned put_idx)
char * yac_coupling_field_get_datetime(struct coupling_field *cpl_field)
void yac_init_coupling_field_put_op_send_field_acc(struct coupling_field *field, unsigned put_idx, double init_value)
struct yac_interpolation * yac_get_coupling_field_get_op_interpolation(struct coupling_field *field)
void yac_coupling_field_get_src_field_buffer_sizes(struct coupling_field *field, size_t *num_src_fields, size_t const **src_field_buffer_sizes)
void yac_set_coupling_field_put_op_time_accumulation_count(struct coupling_field *field, unsigned put_idx, int count)
int yac_get_coupling_field_get_op_use_raw_exchange(struct coupling_field *field)
char * yac_coupling_field_get_prev_datetime(struct coupling_field *cpl_field)
struct yac_interpolation_exchange * yac_get_coupling_field_get_op_interpolation_exchange(struct coupling_field *field)
int yac_get_coupling_field_get_op_with_frac_mask(struct coupling_field *field)
enum yac_field_exchange_type yac_get_coupling_field_exchange_type(struct coupling_field *field)
const char * yac_get_coupling_field_name(struct coupling_field *field)
int ** yac_get_coupling_field_put_mask(struct coupling_field *field)
struct yac_interp_weights_data yac_get_coupling_field_get_op_interp_weights_data(struct coupling_field *field)
void yac_init_coupling_field_put_op_send_frac_mask_acc(struct coupling_field *field, unsigned put_idx, double init_value)
double *** yac_get_coupling_field_put_op_send_field_acc(struct coupling_field *field, unsigned put_idx)
int yac_get_coupling_field_put_op_use_raw_exchange(struct coupling_field *field, unsigned put_idx)
size_t yac_collection_selection_get_collection_size(struct yac_collection_selection const *collection_selection)
Get the size of the collection selection.
size_t const * yac_collection_selection_get_indices(struct yac_collection_selection const *collection_selection)
Get explicit selection indices if non-contiguous.
void yac_collection_selection_delete(struct yac_collection_selection *collection_selection)
Delete a collection selection object.
struct yac_collection_selection * yac_collection_selection_new(size_t collection_size, size_t const *selection_indices)
Create a new collection selection.
int yac_pak_trace_is_enabled(struct yac_pak const *pak)
Event tracing support.
yac_pak_event_type_t
Event type for YAC PAK trace entries. Defines the type of events that can be recorded in YAC PAK trac...
yac_pak_trace_level_t
YAC PAK coupling trace level.
int yac_pak_trace_stop(struct yac_pak *pak, int handle)
Stop a trace event.
int yac_pak_trace_start_ex(struct yac_pak *pak, char const *field, char const *component, char const *grid, yac_pak_event_type_t type, int put_idx, char const *datetime, int action, yac_pak_trace_level_t level)
Start a trace event with full metadata.
@ YAC_PAK_EVENT_TYPE_WAIT
@ YAC_PAK_EVENT_TYPE_AGET
@ YAC_PAK_EVENT_TYPE_UPDATE
@ YAC_PAK_TRACE_LEVEL_REGIONS
@ YAC_PAK_TRACE_LEVEL_COUPLING
PUT/GET/AGET/UPDATE/WAIT events.
void yac_instance_delete(struct yac_instance *instance)
char * yac_instance_setup_and_emit_config(struct yac_instance *instance, struct yac_basic_grid **grids, size_t num_grids, int emit_flags)
int yac_instance_get_comp_rank(struct yac_instance *instance, const char *comp_name)
char * yac_instance_get_start_datetime(struct yac_instance *instance)
char * yac_instance_get_end_datetime(struct yac_instance *instance)
void yac_instance_def_datetime(struct yac_instance *instance, const char *start_datetime, const char *end_datetime)
void yac_instance_setup(struct yac_instance *instance, struct yac_basic_grid **grids, size_t num_grids)
void yac_instance_sync_def(struct yac_instance *instance)
int yac_instance_get_nbr_comps(struct yac_instance *instance)
int yac_instance_components_are_defined(struct yac_instance *instance)
MPI_Comm yac_instance_get_comm(struct yac_instance *instance)
struct coupling_field * yac_instance_add_field(struct yac_instance *instance, char const *field_name, char const *comp_name, struct yac_basic_grid *grid, struct yac_interp_field *interp_fields, size_t num_interp_fields, int collection_size, char const *timestep)
void yac_instance_dummy_new(MPI_Comm comm)
void yac_instance_def_calendar(int calendar_type, char const *source)
void yac_instance_def_components(struct yac_instance *instance, char const **comp_names, size_t num_comps)
struct yac_couple_config * yac_instance_get_couple_config(struct yac_instance *instance)
void yac_instance_def_couple(struct yac_instance *instance, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_period, int time_reduction, struct yac_interp_stack_config *interp_stack_config, int src_lag, int tgt_lag, const char *weight_file_name, int weight_file_on_existing, int mapping_on_source, double scale_factor, double scale_summand, size_t num_src_mask_names, char const *const *src_mask_names, char const *tgt_mask_name, char const *yaxt_exchanger_name, struct yac_collection_selection const *collection_selection, int use_raw_exchange)
struct yac_instance * yac_instance_new(MPI_Comm yac_comm)
void yac_instance_sync_def_comps(struct yac_instance *instance, char const **comp_names, size_t num_comp_names)
int yac_instance_get_comp_size(struct yac_instance *instance, const char *comp_name)
MPI_Comm yac_instance_get_comps_comm(struct yac_instance *instance, char const **comp_names, size_t num_comp_names)
struct coupling_field * yac_instance_get_field(struct yac_instance *instance, const char *comp_name, const char *grid_name, const char *field_name)
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_ENDDEF
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_COMP
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_SYNC
void yac_interp_method_cleanup()
Free static internal resources of all interpolation methods.
yac_interp_avg_weight_type
@ YAC_INTERP_AVG_ARITHMETIC
void yac_interp_method_callback_add_compute_weights_callback(yac_func_compute_weights compute_weights_callback, void *user_data, char const *key)
void(* yac_func_compute_weights)(double const tgt_coords[3], int src_cell_id, size_t src_cell_idx, int const **global_results_points, double **result_weights, size_t *result_count, void *user_data)
yac_interp_method_conserv_normalisation
@ YAC_INTERP_CONSERV_DESTAREA
@ YAC_INTERP_CONSERV_FRACAREA
yac_interp_dnn_weight_type
@ YAC_INTERP_DNN_WEIGHT_AVG
average of source points within search distance
@ YAC_INTERP_DNN_WEIGHT_DIST
distance weighted average of source points
@ YAC_INTERP_DNN_WEIGHT_GAUSS
Gauss weighted average of source points.
@ YAC_INTERP_DNN_WEIGHT_RBF
radial basis function weighted average
yac_interp_dnn_search_distance_type
@ YAC_INTERP_DNN_SEARCH_DISTANCE_FIXED
use a fixed search distance (in radians)
@ YAC_INTERP_DNN_SEARCH_DISTANCE_CELL_AREA
#define YAC_INTERP_FILE_ON_SUCCESS_DEFAULT
yac_interp_file_on_missing_file
@ YAC_INTERP_FILE_MISSING_CONT
continue on missing file
@ YAC_INTERP_FILE_MISSING_ERROR
abort on missing file
yac_interp_file_on_success
@ YAC_INTERP_FILE_SUCCESS_CONT
@ YAC_INTERP_FILE_SUCCESS_STOP
#define YAC_INTERP_FILE_ON_MISSING_FILE_DEFAULT
yac_interp_ncc_weight_type
@ YAC_INTERP_NCC_DIST
distance weighted average of n source points
@ YAC_INTERP_NCC_AVG
average of n source points
yac_interp_nnn_weight_type
@ YAC_INTERP_NNN_GAUSS
distance with Gauss weights of n source points
@ YAC_INTERP_NNN_RBF
radial basis functions
@ YAC_INTERP_NNN_AVG
average of n source points
@ YAC_INTERP_NNN_DIST
distance weighted average of n source points
@ YAC_INTERP_NNN_ZERO
all weights are set to zero
struct yac_spmap_cell_area_config * yac_spmap_cell_area_config_file_new(char const *filename, char const *varname, yac_int min_global_id)
struct yac_spmap_overwrite_config * yac_spmap_overwrite_config_new(struct yac_point_selection const *src_point_selection, struct yac_interp_spmap_config const *config)
struct yac_interp_spmap_config * yac_interp_spmap_config_new(double spread_distance, double max_search_distance, enum yac_interp_spmap_weight_type weight_type, struct yac_spmap_scale_config const *scale_config)
void yac_spmap_scale_config_delete(struct yac_spmap_scale_config *scale_config)
void yac_interp_spmap_config_delete(struct yac_interp_spmap_config *config)
void yac_spmap_cell_area_config_delete(struct yac_spmap_cell_area_config *cell_area_config)
struct yac_spmap_cell_area_config * yac_spmap_cell_area_config_yac_new(double sphere_radius)
void yac_spmap_overwrite_config_delete(struct yac_spmap_overwrite_config *overwrite_config)
struct yac_spmap_scale_config * yac_spmap_scale_config_new(enum yac_interp_spmap_scale_type scale_type, struct yac_spmap_cell_area_config const *source_cell_area_config, struct yac_spmap_cell_area_config const *target_cell_area_config)
#define YAC_INTERP_SPMAP_MAX_SEARCH_DISTANCE_DEFAULT
yac_interp_spmap_scale_type
@ YAC_INTERP_SPMAP_NONE
weights are not scaled
@ YAC_INTERP_SPMAP_INVTGTAREA
@ YAC_INTERP_SPMAP_SRCAREA
@ YAC_INTERP_SPMAP_FRACAREA
#define YAC_INTERP_SPMAP_WEIGHTED_DEFAULT
#define YAC_INTERP_SPMAP_SPREAD_DISTANCE_DEFAULT
yac_interp_spmap_cell_area_provider
@ YAC_INTERP_SPMAP_CELL_AREA_FILE
@ YAC_INTERP_SPMAP_CELL_AREA_YAC
#define YAC_INTERP_SPMAP_SPHERE_RADIUS_DEFAULT
#define YAC_INTERP_SPMAP_SCALE_TYPE_DEFAULT
yac_interp_spmap_weight_type
void yac_interp_stack_config_add_check(struct yac_interp_stack_config *interp_stack_config, char const *constructor_key, char const *do_search_key)
void yac_interp_stack_config_add_spmap(struct yac_interp_stack_config *interp_stack_config, double spread_distance, double max_search_distance, enum yac_interp_spmap_weight_type weight_type, enum yac_interp_spmap_scale_type scale_type, double src_sphere_radius, char const *src_filename, char const *src_varname, int src_min_global_id, double tgt_sphere_radius, char const *tgt_filename, char const *tgt_varname, int tgt_min_global_id)
void yac_interp_stack_config_add_fixed(struct yac_interp_stack_config *interp_stack_config, double value)
void yac_interp_stack_config_add_hcsbb(struct yac_interp_stack_config *interp_stack_config)
void yac_interp_stack_config_add_rbf(struct yac_interp_stack_config *interp_stack_config, size_t n, double max_search_distance, double scale)
void yac_interp_stack_config_add_average(struct yac_interp_stack_config *interp_stack_config, enum yac_interp_avg_weight_type reduction_type, int partial_coverage)
void yac_interp_stack_config_add_creep(struct yac_interp_stack_config *interp_stack_config, int creep_distance)
void yac_interp_stack_config_add_nnn(struct yac_interp_stack_config *interp_stack_config, enum yac_interp_nnn_weight_type type, size_t n, double max_search_distance, double scale)
void yac_interp_stack_config_delete(struct yac_interp_stack_config *interp_stack_config)
Free an interpolation stack configuration object.
void yac_interp_stack_config_add_conservative(struct yac_interp_stack_config *interp_stack_config, int order, int enforced_conserv, int partial_coverage, enum yac_interp_method_conserv_normalisation normalisation)
void yac_interp_stack_config_add_dnn(struct yac_interp_stack_config *interp_stack_config, enum yac_interp_dnn_weight_type type, enum yac_interp_dnn_search_distance_type search_distance_type, double search_distance, double scale)
void yac_interp_stack_config_add_ncc(struct yac_interp_stack_config *interp_stack_config, enum yac_interp_ncc_weight_type weight_type, int partial_coverage)
void yac_interp_stack_config_add_user_file(struct yac_interp_stack_config *interp_stack_config, char const *filename, enum yac_interp_file_on_missing_file on_missing_file, enum yac_interp_file_on_success on_success)
void yac_interp_stack_config_add_user_callback(struct yac_interp_stack_config *interp_stack_config, char const *func_compute_weights_key)
struct yac_interp_stack_config * yac_interp_stack_config_new()
Allocate a new empty interpolation stack configuration object.
void yac_interp_stack_config_add_spmap_ext(struct yac_interp_stack_config *interp_stack_config, struct yac_interp_spmap_config *default_config, struct yac_spmap_overwrite_config **overwrite_configs)
#define YAC_WEIGHT_FILE_ON_EXISTING_DEFAULT_VALUE
@ YAC_WEIGHT_FILE_KEEP
keep existing weight file
@ YAC_WEIGHT_FILE_OVERWRITE
overwrite existing weight file
@ YAC_WEIGHT_FILE_ERROR
error when weight file existis already
void yac_interpolation_execute(struct yac_interpolation *interp, double ***src_fields, double **tgt_field)
Execute interpolation synchronously and write results to the target field.
int yac_interpolation_with_frac_mask(struct yac_interpolation *interpolation)
Query whether interpolation uses fractional masks.
int yac_interpolation_execute_put_test(struct yac_interpolation *interp)
Test whether the asynchronous put phase has completed.
void yac_interpolation_execute_wait(struct yac_interpolation *interp)
Wait for completion of pending asynchronous interpolation operations.
void yac_interpolation_execute_frac(struct yac_interpolation *interp, double ***src_fields, double ***src_frac_masks, double **tgt_field)
Execute interpolation with fractional masks and write results to the target field.
void yac_interpolation_execute_get(struct yac_interpolation *interp, double **tgt_field)
Complete interpolation and write results to the target field (get phase).
void yac_interpolation_execute_get_async(struct yac_interpolation *interp, double **tgt_field)
Complete interpolation asynchronously and write results to the target field (get phase).
void yac_interpolation_execute_put_frac(struct yac_interpolation *interp, double ***src_fields, double ***src_frac_masks)
Provide source field data with fractional masks and start asynchronous execution of interpolation (pu...
void yac_interpolation_execute_put(struct yac_interpolation *interp, double ***src_fields)
Provide source field data and start asynchronous execution of interpolation (put phase).
int yac_interpolation_execute_get_test(struct yac_interpolation *interp)
Test whether the asynchronous get phase has completed.
void yac_interpolation_exchange_execute_get(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine)
Execute the get phase and receive target data synchronously.
void yac_interpolation_exchange_execute(struct yac_interpolation_exchange *exchange, double const **send_data_, double **recv_data_, char const *routine)
Execute the full exchange (put + get) synchronously.
void yac_interpolation_exchange_execute_put(struct yac_interpolation_exchange *exchange, double const **send_data, char const *routine)
Execute only the put phase asynchronously.
int yac_interpolation_exchange_with_frac_mask(struct yac_interpolation_exchange *exchange)
Query whether the exchange has fractional mask support.
void yac_interpolation_exchange_execute_get_async(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine)
Execute the get phase asynchronously.
void yac_interpolation_exchange_wait(struct yac_interpolation_exchange *exchange, char const *routine)
Wait for completion of pending put/get phases.
Interpolation exchange object for temporary buffers and MPI exchanges.
char const * yac_loc2str(enum yac_location location)
enum yac_location yac_get_location(int const location)
void yac_mpi_handshake(MPI_Comm comm, size_t n, char const **group_names, MPI_Comm *group_comms)
struct yac_point_selection * yac_point_selection_bnd_circle_new(double center_lon, double center_lat, double inc_angle)
void yac_point_selection_delete(struct yac_point_selection *point_select)
@ YAC_POINT_SELECTION_TYPE_BND_CIRCLE
@ YAC_POINT_SELECTION_TYPE_EMPTY
#define xrealloc(ptr, size)
#define xcalloc(nmemb, size)
double *** send_field_acc
double *** send_frac_mask_acc
struct yac_basic_grid * grid
enum yac_field_exchange_type exchange_type
struct yac_interpolation * interpolation
struct yac_pak * pak
Borrowed pointer to the YAC PAK object from the owning instance (may be NULL)
enum yac_reduction_type time_operation
enum yac_action_type action
size_t * num_tgt_per_fixed_value
double frac_mask_fallback_value
union yac_cell_area_config::@68 data
enum yac_interp_spmap_cell_area_provider type
struct yac_cell_area_config::@68::@69 yac
struct yac_cell_area_config::@68::@70 file
size_t num_src_mask_names
char * yaxt_exchanger_name
struct yac_collection_selection * collection_selection
int weight_file_on_existing
enum yac_point_selection_type type
double max_search_distance
struct yac_ext_spmap_config_overwrite_config::@71::@72::@73 bnd_circle
union yac_ext_spmap_config_overwrite_config::@71::@72 data
struct yac_ext_spmap_config_overwrite_config::@71 src_point_selection
enum yac_interp_spmap_weight_type weight_type
CellAreaConfig tgt_cell_area_config
enum yac_interp_spmap_scale_type scale_type
CellAreaConfig src_cell_area_config
double max_search_distance
enum yac_interp_spmap_weight_type weight_type
MPI_Comm comm
MPI communicator that contains the processes of this YAC instance.
enum yac_location location
struct yac_spmap_scale_config scale_config
double frac_mask_fallback_value
size_t * src_field_buffer_size
size_t * num_tgt_per_fixed_value
struct yac_point_selection::@50::@51 bnd_circle
struct yac_point_selection * src_point_selection
static struct yac_interp_method_config * config
char const src_grid_name[]
char const tgt_grid_name[]
static void compute_weights_callback(double const tgt_coords[3], int src_cell_id, size_t src_cell_idx, int const **global_results_points, double **result_weights, size_t *result_count, void *user_data)
static void LLtoXYZ(double lon, double lat, double p_out[])
char * yac_string_dup(char const *string)
static char * yac_version
int const YAC_YEAR_OF_365_DAYS
int yac_cget_points_id(int grid_id, int location, const char *point_name)
static struct user_input_data_grid ** global_grids
void yac_cset_ext_spmap_config_src_cell_area_config_yac(int ext_spmap_config_id, double sphere_radius)
void yac_cget_raw_frac_async(int const field_id, int collection_size, double ***src_field_buffer, double ***src_frac_mask_buffer, int *info, int *ierr)
static size_t num_global_interp_stack_configs
int const YAC_ACTION_PUT_FOR_CHECKPOINT
void yac_cset_grids_output_file(const char *filename)
static const char * mpi_handshake_group_name
Name of the MPI group used by YAC in MPI handshake.
int const YAC_REDUCTION_TIME_AVERAGE
void yac_cenddef_and_emit_config(int emit_flags, char **config)
static int user_input_data_add_points(struct user_input_data_grid *grid_info, enum yac_location location, yac_coordinate_pointer coordinates, char const *name, char const *caller)
static double *** get_src_field_buffer_pointers(int field_id, size_t collection_size, double *src_field_buffer)
void yac_cdef_couple_instance_(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, char const *weight_file, int weight_file_on_existing, int mapping_side, double scale_factor, double scale_summand, int num_src_mask_names, char const *const *src_mask_names, char const *tgt_mask_name, char const *yaxt_exchanger_name, int collection_size, int const *collection_indices, int use_raw_exchange)
static int yac_lookup_pointer(void const *pointer)
static int trace_coupling_start(int field_id, yac_pak_event_type_t type, int put_idx, yac_pak_trace_level_t level)
void yac_cget_raw_async(int const field_id, int collection_size, double ***src_field_buffer, int *info, int *ierr)
void yac_ccompute_grid_cell_areas(int grid_id, double *cell_areas)
void yac_cinit_comm_dummy(MPI_Comm comm)
void yac_cget_grid_names(int nbr_grids, const char **grid_names)
void yac_cadd_interp_stack_config_ncc(int interp_stack_config_id, int weight_type, int partial_coverage)
void yac_cget_ext_couple_config_scale_factor(int ext_couple_config_id, double *scale_factor)
const char * yac_cget_field_metadata_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cput_frac(int const field_id, int const collection_size, double ***const send_field, double ***const send_frac_mask, int *info, int *ierr)
void yac_cadd_interp_stack_config_spmap_ext(int interp_stack_config_id, int ext_spmap_config_id, int *spmap_overwrite_config_ids, int spmap_overwrite_config_count)
void yac_cget_instance_size_c2py(int yac_instance_id, int *size)
static void check_preliminary_entries(struct yac_instance *instance, char const *caller)
static void yac_free_global_grids()
void yac_get_raw_frac_(int const field_id, int const collection_size, double *src_field_buffer, double *src_frac_mask_buffer, int is_async, int *info, int *ierr)
static int user_input_data_add_mask(struct user_input_data_grid *grid_info, enum yac_location location, int const *is_valid, size_t nbr_points, char const *name)
void yac_cset_global_index_yac_int(yac_int const *global_index, int location, int grid_id)
static struct user_input_data_masks * user_input_data_get_or_create_masks(struct user_input_data_grid *grid_info, enum yac_location location, char const *name, char const *caller, int *mask_id)
static void * yac_cput_pre_processing(struct coupling_field *cpl_field, unsigned put_idx, int const collection_size, double ***send_field, double ****send_field_acc_, double ***send_frac_mask, double ****send_frac_mask_acc_, int *with_frac_mask_, int *use_raw_exchange_, int *info, int *ierr)
static struct user_input_data_points * get_points_info(int points_id, char const *routine)
static void get_send_field_pointers_ptr_(int const field_id, int const collection_size, double **send_field, double **send_frac_mask, double ****send_field_, double ****send_frac_mask_)
void yac_cenable_field_frac_mask(const char *comp_name, const char *grid_name, const char *field_name, double frac_mask_fallback_value)
int const YAC_ACTION_OUT_OF_BOUND
put/get is outside of the valid range
int const YAC_DNN_SEARCH_DISTANCE_CELL_AREA
void yac_cget_ext_couple_config_mapping_side(int ext_couple_config_id, int *mapping_side)
void yac_cset_config_output_file(const char *filename, int filetype, int sync_location, int include_definitions)
void yac_cpredef_comp_instance(int yac_instance_id, char const *name, int *comp_id)
int const YAC_SPMAP_SRCAREA
int const YAC_CONFIG_OUTPUT_SYNC_LOC_ENDDEF
after end of definitions
char * yac_cget_start_datetime_instance(int yac_instance_id)
void yac_cdef_field_mask(char const *name, int const comp_id, int const *point_ids, int const *mask_ids, int const num_pointsets, int collection_size, const char *timestep, int time_unit, int *field_id)
void yac_cset_global_index(int const *global_index, int location, int grid_id)
void yac_cset_grid_output_file_instance(int yac_instance_id, const char *gridname, const char *filename)
void yac_cset_coordinates_check(int apply_check)
void yac_cget_raw_interp_weights_data_csr(int const field_id, double *frac_mask_fallback_value, double *scaling_factor, double *scaling_summand, size_t *num_fixed_values, double **fixed_values, size_t **num_tgt_per_fixed_value, size_t **tgt_idx_fixed, size_t **src_indptr_, double **weights, size_t **src_field_idx, size_t **src_idx, size_t *num_src_fields, size_t **src_field_buffer_sizes)
void yac_cdef_datetime_instance(int yac_instance_id, const char *start_datetime, const char *end_datetime)
Definition of job start and end datetime.
int yac_cget_role_from_field_id(int field_id)
static int yac_invalid_pointer_sentinel
void yac_cget_(int const field_id, int const collection_size, double *recv_field, int *info, int *ierr)
int yac_cget_nbr_grids_instance(int yac_instance_id)
void yac_cfree_ext_couple_config(int ext_couple_config_id)
const char * yac_cget_grid_metadata_instance(int yac_instance_id, const char *grid_name)
int const YAC_FILE_SUCCESS_CONT
char * yac_cget_end_datetime_instance(int yac_instance_id)
void yac_cadd_interp_stack_config_user_file_2(int interp_stack_config_id, char const *filename, int on_missing_file, int on_succes)
void yac_cdef_datetime(const char *start_datetime, const char *end_datetime)
Definition of job start and end datetime for the default YAC instance.
static void * yac_cget_pre_processing(int const field_id, int collection_size, int *info, int *ierr)
int const YAC_SPMAP_INVTGTAREA
void yac_get_comp_comm_f2c(int comp_id, MPI_Fint *comp_comm_f)
int const YAC_LOCATION_CELL
void yac_cfree_spmap_overwrite_config(int spmap_overwrite_config_id)
int const YAC_REDUCTION_TIME_MINIMUM
void yac_cset_ext_couple_config_tgt_mask_name(int ext_couple_config_id, char const *tgt_mask_name)
void yac_cget_ext_couple_config_weight_file_on_existing(int ext_couple_config_id, int *weight_file_on_existing)
static struct user_input_data_component ** global_components
void yac_cdef_couple_custom_instance_(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, struct yac_ext_couple_config *ext_couple_config)
static void check_cell_to_vertex(int *cell_to_vertex, int *num_vertices_per_cell, int nbr_cells, int nbr_vertices, char const *routine_name)
void yac_cdef_grid_metadata(const char *grid_name, const char *metadata)
int const YAC_FILE_MISSING_CONT
continue on missing file
int const YAC_TIME_UNIT_MINUTE
void yac_cdef_grid_curve2d(const char *grid_name, int nbr_vertices[2], int cyclic[2], double *x_vertices, double *y_vertices, int *grid_id)
static size_t num_global_masks
void yac_cread_config_json(const char *yaml_filename)
void * yac_get_field_get_mask_c2f(int field_id)
void yac_cget_grid_names_instance(int yac_instance_id, int nbr_grids, const char **grid_names)
void yac_cset_ext_couple_config_scale_factor(int ext_couple_config_id, double scale_factor)
int const YAC_FILE_MISSING_ERROR
abort on missing file
int const YAC_ACTION_GET_FOR_CHECKPOINT
void yac_cset_ext_couple_config_weight_file_on_existing(int ext_couple_config_id, int weight_file_on_existing)
void yac_cadd_interp_stack_config_creep(int interp_stack_config_id, int creep_distance)
static void check_default_instance_id(char const *routine_name)
void yac_cput_frac_(int const field_id, int const collection_size, double *send_field, double *send_frac_mask, int *info, int *ierr)
void yac_cdef_component_metadata(const char *comp_name, const char *metadata)
int const YAC_TIME_UNIT_YEAR
void yac_csync_def_comps(char const **comp_names, int num_comp_names)
struct yac_ext_spmap_config_overwrite_config ExtSpmapConfigOverwriteConfig
void yac_cget_comps_comm_instance_f2c(int yac_instance_id, char const **comp_names, int num_comps, MPI_Fint *comps_comm_f)
void yac_cget_comp_rank_c2py(int comp_id, int *rank)
void * yac_get_field_put_mask_c2f(int field_id)
void yac_cdef_points_curve2d_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)
int yac_cget_field_role(const char *comp_name, const char *grid_name, const char *field_name)
void yac_ccleanup()
Clean-up default YAC instance (see Restarting YAC)
int const YAC_AVG_ARITHMETIC
void yac_cset_grids_output_file_instance(int yac_instance_id, const char *filename)
static size_t num_global_grids
void yac_cget_comp_size_c2py(int comp_id, int *size)
void yac_cget_raw_interp_weights_data_csr_c2f(int const field_id, double *frac_mask_fallback_value, double *scaling_factor, double *scaling_summand, size_t *num_fixed_values, double **fixed_values, size_t **num_tgt_per_fixed_value, size_t **tgt_idx_fixed, size_t **src_indptr, double **weights, size_t **src_field_idx, size_t **src_idx, size_t *num_src_fields, size_t **src_field_buffer_sizes, size_t *tgt_field_data_size)
void yac_cset_spmap_overwrite_config_max_search_distance(int spmap_overwrite_config_id, double max_search_distance)
void yac_cadd_compute_weights_callback(yac_func_compute_weights compute_weights_callback, void *user_data, char const *key)
void yac_cmpi_handshake(MPI_Comm comm, size_t n, char const **group_names, MPI_Comm *group_comms)
int const YAC_REDUCTION_TIME_MAXIMUM
void yac_cset_ext_couple_config_scale_summand_(struct yac_ext_couple_config *ext_couple_config, double scale_summand)
int const YAC_WGT_ON_EXISTING_ERROR
int const YAC_TIME_UNIT_MILLISECOND
void yac_cexchange_frac(int const send_field_id, int const recv_field_id, int const collection_size, double ***const send_field, double ***const send_frac_mask, double **recv_field, int *send_info, int *recv_info, int *ierr)
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)
void yac_get_raw_frac(int const field_id, int const collection_size, double ***src_field_buffer, double ***src_frac_mask_buffer, int is_async, int *info, int *ierror)
int yac_cget_field_is_defined(const char *comp_name, const char *grid_name, const char *field_name)
void yac_cdef_grid_unstruct_ll(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)
const char * yac_cget_timestep_from_field_id(int field_id)
int yac_cget_comp_id(const char *comp_name)
int const YAC_FILE_SUCCESS_STOP
void yac_cget_raw(int const field_id, int collection_size, double ***src_field_buffer, int *info, int *ierr)
int yac_cget_nbr_fields(const char *comp_name, const char *grid_name)
int const YAC_DNN_SEARCH_DISTANCE_FIXED
void yac_cset_ext_spmap_config_scale_type(int ext_spmap_config_id, int scale_type)
void yac_cdef_points_reg2d_rot_named(int const grid_id, int const *nbr_points, int const located, double const *x_points, double const *y_points, double x_north_pole, double y_north_pole, char const *name, int *point_id)
void yac_cinit_comm_dummy_f2c(MPI_Fint comm_f)
void yac_csync_def_instance(int yac_instance_id)
void yac_cset_ext_couple_config_src_mask_names_(struct yac_ext_couple_config *ext_couple_config, size_t num_src_mask_names, char const *const *src_mask_names)
void yac_cget_field_source(const char *tgt_comp_name, const char *tgt_grid_name, const char *tgt_field_name, const char **src_comp_name, const char **src_grid_name, const char **src_field_name)
void yac_cexchange_raw_frac_(int const send_field_id, int const recv_field_id, int const collection_size, double *send_field, double *send_frac_mask, double *src_field_buffer, double *src_frac_mask_buffer, int *send_info, int *recv_info, int *ierr)
void yac_cget_interp_stack_config_from_string_json(char const *interp_stack_config, int *interp_stack_config_id)
void yac_cpredef_comp(char const *name, int *comp_id)
int yac_cyaml_get_emitter_flag_default_c2f()
int yac_cget_field_is_defined_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
static double ** get_recv_field_pointers(int const field_id, int const collection_size, double *recv_field)
void yac_cdef_grid_reg2d_rot(const char *grid_name, int nbr_vertices[2], int cyclic[2], double *x_vertices, double *y_vertices, double x_north_pole, double y_north_pole, int *grid_id)
int const YAC_TIME_UNIT_HOUR
static int default_instance_id_defined()
int const YAC_YEAR_OF_360_DAYS
void yac_cget_raw_(int const field_id, int const collection_size, double *src_field_buffer, int *info, int *ierr)
void yac_cfinalize_instance(int yac_instance_id)
Finalises YAC.
static void init_ext_couple_config(struct yac_ext_couple_config *ext_couple_config)
void yac_cget_raw_frac(int const field_id, int collection_size, double ***src_field_buffer, double ***src_frac_mask_buffer, int *info, int *ierr)
void yac_cfinalize()
Finalises YAC.
const char * yac_cget_field_name_from_field_id(int field_id)
void yac_cget_ext_couple_config_collection_selection(int ext_couple_config_id, int *collection_size, int **collection_indices)
void yac_cadd_interp_stack_config_check(int interp_stack_config_id, char const *constructor_key, char const *do_search_key)
void yac_cenddef_instance(int yac_instance_id)
static void yac_invalidate_unique_id(int id)
void yac_cexchange_raw_frac_ptr_(int const send_field_id, int const recv_field_id, int const collection_size, double **send_field, double **send_frac_mask, double **src_field_buffer, double **src_frac_mask_buffer, int *send_info, int *recv_info, int *ierr)
void yac_cget_ext_couple_config_yaxt_exchanger_name(int ext_couple_config_id, char const **yaxt_exchanger_name)
void yac_cset_ext_couple_config_src_mask_names(int ext_couple_config_id, size_t num_src_mask_names, char const *const *src_mask_names)
void yac_cget_raw_async_(int const field_id, int const collection_size, double *src_field_buffer, int *info, int *ierr)
int yac_cget_nbr_comps_instance(int yac_instance_id)
void yac_cdef_points_unstruct_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)
int yac_cget_nbr_fields_instance(int yac_instance_id, const char *comp_name, const char *grid_name)
void yac_cget_raw_interp_weights_data(int const field_id, double *frac_mask_fallback_value, double *scaling_factor, double *scaling_summand, size_t *num_fixed_values, double **fixed_values, size_t **num_tgt_per_fixed_value, size_t **tgt_idx_fixed, size_t *num_wgt_tgt, size_t **wgt_tgt_idx, size_t **num_src_per_tgt, double **weights, size_t **src_field_idx, size_t **src_idx, size_t *num_src_fields, size_t **src_field_buffer_size)
void yac_cset_coordinates_mismatch_is_fatal_instance(int yac_instance_id, int is_fatal)
void yac_cget_ext_couple_config(int *ext_couple_config_id)
const char * yac_cget_mpi_handshake_group_name(void)
Retrieve the MPI handshake group name used by YAC.
static void yac_get_raw_frac_ptr_(int const field_id, int const collection_size, double **src_field_buffer, double **src_frac_mask_buffer, int is_async, int *info, int *ierr)
static size_t num_global_points
static void yac_get(int const field_id, int collection_size, double **recv_field, int is_async, int *info, int *ierr)
void yac_cdef_grid_unstruct_edge(const char *grid_name, int nbr_vertices, int nbr_cells, int nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex, int *grid_id)
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)
static size_t num_global_components
void yac_cset_ext_couple_config_weight_file(int ext_couple_config_id, char const *weight_file)
const char * yac_cget_component_metadata_instance(int yac_instance_id, const char *comp_name)
void yac_cread_config_yaml_instance(int yac_instance_id, const char *yaml_filename)
static struct user_input_data_grid * user_input_data_get_or_create_grid(char const *grid_name, char const *caller, int *grid_id)
void yac_cset_ext_spmap_config_spread_distance(int ext_spmap_config_id, double spread_distance)
void yac_cset_ext_couple_config_yaxt_exchanger_name(int ext_couple_config_id, char const *yaxt_exchanger_name)
int const YAC_LOCATION_CORNER
void yac_cdef_couple_custom(char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, int ext_couple_config_id)
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_cset_ext_couple_config_scale_summand(int ext_couple_config_id, double scale_summand)
void yac_cget_comp_comm(int comp_id, MPI_Comm *comp_comm)
void yac_cset_coordinates_mismatch_is_fatal(int is_fatal)
void yac_cset_spmap_overwrite_config_weight_type(int spmap_overwrite_config_id, int weight_type)
static struct yac_spmap_overwrite_config * generate_overwrite_config(int spmap_overwrite_config_id)
static void check_mpi_initialised(char const *routine_name)
const char * yac_cget_field_datetime(int field_id)
static void yac_free_global_components()
int const YAC_CONSERV_DESTAREA
void yac_cget(int const field_id, int collection_size, double **recv_field, int *info, int *ierr)
int const YAC_EXCHANGE_TYPE_SOURCE
void yac_cdef_comp_instance(int yac_instance_id, char const *comp_name, int *comp_id)
static void yac_check_yac_int(MPI_Comm comm)
static struct user_input_data_component * get_comp_info(int comp_id, char const *routine)
void yac_cupdate(int field_id)
void yac_cget_action(int field_id, int *action)
void yac_cset_ext_couple_config_weight_file_on_existing_(struct yac_ext_couple_config *ext_couple_config, int weight_file_on_existing)
static double *** get_src_field_buffer_pointers_ptr(int field_id, size_t collection_size, double **src_field_buffer)
void yac_cset_ext_couple_config_use_raw_exchange_(struct yac_ext_couple_config *ext_couple_config, int use_raw_exchange)
void yac_cexchange_(int const send_field_id, int const recv_field_id, int const collection_size, double *send_field, double *recv_field, int *send_info, int *recv_info, int *ierr)
int const YAC_REDUCTION_TIME_ACCUMULATE
void yac_cset_ext_spmap_config_weight_type(int ext_spmap_config_id, int weight_type)
void yac_cdef_points_reg2d_rot(int const grid_id, int const *nbr_points, int const located, double const *x_points, double const *y_points, double x_north_pole, double y_north_pole, int *point_id)
void yac_cset_spmap_overwrite_config_src_point_selection_bnd_circle(int spmap_overwrite_config_id, double center_lon, double center_lat, double inc_angle)
static void yac_free_global_points()
int yac_cget_field_id(const char *comp_name, const char *grid_name, const char *field_name)
void yac_cget_ext_couple_config_tgt_mask_name(int ext_couple_config_id, char const **tgt_mask_name)
void yac_cget_ext_couple_config_src_mask_names(int ext_couple_config_id, size_t *num_src_mask_names, char const *const **src_mask_names)
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)
void yac_cmpi_handshake_f2c(MPI_Fint comm, int n, char const **group_names, MPI_Fint *group_comms)
void yac_cget_ext_couple_config_use_raw_exchange(int ext_couple_config_id, int *use_raw_exchange)
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
void yac_cdef_couple_(char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, char const *weight_file, int weight_file_on_existing, int mapping_side, double scale_factor, double scale_summand, int num_src_mask_names, char const *const *src_mask_names, char const *tgt_mask_name, char const *yaxt_exchanger_name, int collection_size, int const *collection_indices, int use_raw_exchange)
void yac_cdef_couple_custom_instance(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, int ext_couple_config_id)
void yac_cset_ext_couple_config_use_raw_exchange(int ext_couple_config_id, int use_raw_exchange)
int yac_cget_grid_id(const char *grid_name)
static int yac_pointer_to_unique_id(void *pointer)
void yac_cset_config_output_file_instance(int yac_instance_id, const char *filename, int fileformat, int sync_location, int include_definitions)
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)
void yac_cget_comps_comm(const char **comp_names, int num_comps, MPI_Comm *comps_comm)
void yac_cexchange_ptr_(int const send_field_id, int const recv_field_id, int const collection_size, double **send_field, double **recv_field, int *send_info, int *recv_info, int *ierr)
void yac_cinit_comm_instance(MPI_Comm comm, int *yac_instance_id)
void yac_cfree_ext_spmap_config(int ext_spmap_config_id)
int const YAC_EXCHANGE_TYPE_TARGET
void yac_cread_config_json_instance(int yac_instance_id, const char *yaml_filename)
void yac_cget_instance_rank_c2py(int yac_instance_id, int *rank)
static struct yac_spmap_cell_area_config * generate_cell_area_config(CellAreaConfig config)
void yac_cset_ext_couple_config_scale_factor_(struct yac_ext_couple_config *ext_couple_config, double scale_factor)
const char * yac_cget_grid_metadata(const char *grid_name)
void yac_cenable_field_frac_mask_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name, double frac_mask_fallback_value)
char * yac_cget_start_datetime(void)
void yac_cexchange_raw_frac(int const send_field_id, int const recv_field_id, int const collection_size, double ***const send_field, double ***const send_frac_mask, double ***src_field_buffer, double ***src_frac_mask_buffer, int *send_info, int *recv_info, int *ierr)
void yac_ccheck_field_dimensions(int field_id, int collection_size, int num_interp_fields, int const *interp_field_sizes)
void yac_cget_interp_stack_config_from_string_yaml(char const *interp_stack_config, int *interp_stack_config_id)
int const YAC_TIME_UNIT_MONTH
void yac_cset_ext_spmap_config_max_search_distance(int ext_spmap_config_id, double max_search_distance)
int const YAC_CONFIG_OUTPUT_FORMAT_YAML
int const YAC_TIME_UNIT_SECOND
int const YAC_ACTION_RESTART
void yac_cadd_interp_stack_config_conservative(int interp_stack_config_id, int order, int enforced_conserv, int partial_coverage, int normalisation)
void yac_cput_frac_ptr_(int const field_id, int const collection_size, double **send_field, double **send_frac_mask, int *info, int *ierr)
static struct yac_interp_stack_config ** global_interp_stack_configs
void yac_cset_ext_couple_config_mapping_side_(struct yac_ext_couple_config *ext_couple_config, int mapping_side)
void yac_cdef_grid_cloud(const char *grid_name, int nbr_points, double *x_points, double *y_points, int *grid_id)
static struct user_input_data_points * user_input_data_get_or_create_points(struct user_input_data_grid *grid_info, enum yac_location location, char const *name, char const *caller, int *point_id)
static struct user_input_data_component * user_input_data_get_or_create_comp(struct yac_instance *instance, char const *name, char const *caller, int *comp_id)
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)
static int yac_instance_count
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)
char * yac_cget_version(void)
static int pointer_lookup_table_size
int const YAC_LOCATION_EDGE
static int yac_init(MPI_Comm yac_comm)
void yac_cset_ext_spmap_config_tgt_cell_area_config_file(int ext_spmap_config_id, char const *filename, char const *varname, int min_global_id)
void yac_cput(int const field_id, int const collection_size, double ***const send_field, int *info, int *ierr)
void yac_cget_async(int const field_id, int collection_size, double **recv_field, int *info, int *ierr)
void yac_cread_config_yaml(const char *yaml_filename)
@ YAC_CONFIG_OUTPUT_SYNC_LOC_ENDDEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_SYNC_DEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_DEF_COMP_
void yac_cset_ext_couple_config_weight_file_(struct yac_ext_couple_config *ext_couple_config, char const *weight_file)
int yac_cget_default_instance_id()
void yac_cadd_interp_stack_config_user_file(int interp_stack_config_id, char const *filename)
void yac_cexchange_frac_(int const send_field_id, int const recv_field_id, int const collection_size, double *send_field, double *send_frac_mask, double *recv_field, int *send_info, int *recv_info, int *ierr)
const char * yac_cget_component_name_from_field_id(int field_id)
void yac_cinit_comm_instance_f2c(MPI_Fint comm, int *yac_instance_id)
#define AGGREGATE(EXTRA_CHECK, ACCU_OP)
int yac_cget_field_collection_size(const char *comp_name, const char *grid_name, const char *field_name)
int const YAC_CONFIG_OUTPUT_SYNC_LOC_DEF_COMP
after component definition
int const YAC_SPMAP_FRACAREA
void yac_cdef_component_metadata_instance(int yac_instance_id, const char *comp_name, const char *metadata)
void yac_cenddef_and_emit_config_instance(int yac_instance_id, int emit_flags, char **config)
void yac_cexchange_frac_ptr_(int const send_field_id, int const recv_field_id, int const collection_size, double **send_field, double **send_frac_mask, double **recv_field, int *send_info, int *recv_info, int *ierr)
void yac_ccheck_src_field_buffer_size(int field_id, int collection_size, int src_field_buffer_size_)
char * yac_cget_end_datetime(void)
int const YAC_WGT_ON_EXISTING_OVERWRITE
overwrite existing weight file
int const YAC_ACTION_NONE
no data exchanges
static void check_cell_to_edge(int *cell_to_edge, int *num_edges_per_cell, int nbr_cells, int nbr_edges, char const *routine_name)
int const YAC_WGT_ON_EXISTING_KEEP
keep existing weight file
static struct user_input_data_grid * get_grid_info(int grid_id, char const *caller, int allow_preliminary)
int yac_cyaml_get_emitter_flag_json_c2f()
void yac_cdef_calendar(int calendar)
void yac_cset_core_mask(int const *is_core, int location, int grid_id)
void yac_cinit_comm_f2c(MPI_Fint comm_f)
void yac_cget_raw_frac_async_(int const field_id, int const collection_size, double *src_field_buffer, double *src_frac_mask_buffer, int *info, int *ierr)
void yac_cset_coordinates_check_instance(int yac_instance_id, int apply_check)
void yac_cwait(int field_id)
void yac_cadd_interp_stack_config_rbf(int interp_stack_config_id, size_t n, double max_search_distance, double scale)
int yac_cget_mask_id(int grid_id, int location, const char *mask_name)
int const YAC_CONFIG_OUTPUT_SYNC_LOC_SYNC_DEF
after synchronization of definition
void yac_cget_raw_frac_(int const field_id, int const collection_size, double *src_field_buffer, double *src_frac_mask_buffer, int *info, int *ierr)
void set_cell_area_config_file(CellAreaConfig *cell_area_config, char const *filename, char const *varname, int min_global_id, char const *role)
void yac_cget_comp_names(int nbr_comps, const char **comp_names)
static int yac_add_grid(const char *grid_name, struct yac_basic_grid_data grid_data)
struct yac_ext_spmap_config ExtSpmapConfig
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_ACTION_REDUCTION
data reduction, but data exchange
int const YAC_ACTION_GET_FOR_RESTART
last valid get
void yac_cput_(int const field_id, int const collection_size, double *send_field, int *info, int *ierr)
void yac_cset_ext_spmap_config_tgt_cell_area_config_yac(int ext_spmap_config_id, double sphere_radius)
void yac_cget_comps_comm_f2c(char const **comp_names, int num_comps, MPI_Fint *comps_comm_f)
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)
double yac_cget_field_frac_mask_fallback_value(const char *comp_name, const char *grid_name, const char *field_name)
void yac_cset_mask(int const *is_valid, int points_id)
void yac_cget_async_(int const field_id, int const collection_size, double *recv_field, int *info, int *ierr)
static void trace_coupling_stop(int field_id, int h_pak_trace)
void yac_cadd_interp_stack_config_hcsbb(int interp_stack_config_id)
void yac_cget_comps_comm_instance(int yac_instance_id, char const **comp_names, int num_comps, MPI_Comm *comps_comm)
void yac_cadd_interp_stack_config_fixed(int interp_stack_config_id, double value)
int const YAC_TIME_UNIT_DAY
void yac_get_(int const field_id, int const collection_size, double *recv_field, int is_async, int *info, int *ierr)
static void yac_cupdate_(struct coupling_field *cpl_field, struct event *event, int is_source)
int yac_cget_comp_nbr_grids(const char *comp_name)
int const YAC_ACTION_COUPLING
data exchange
double yac_cget_field_frac_mask_fallback_value_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cset_ext_spmap_config_src_cell_area_config_file(int ext_spmap_config_id, char const *filename, char const *varname, int min_global_id)
int const YAC_TIME_UNIT_ISO_FORMAT
void yac_cget_field_source_instance(int yac_instance_id, const char *tgt_comp_name, const char *tgt_grid_name, const char *tgt_field_name, const char **src_comp_name, const char **src_grid_name, const char **src_field_name)
void yac_cexchange_raw(int const send_field_id, int const recv_field_id, int const collection_size, double ***const send_field, double ***src_field_buffer, int *send_info, int *recv_info, int *ierr)
void yac_cexchange_raw_ptr_(int const send_field_id, int const recv_field_id, int const collection_size, double **send_field, double **src_field_buffer, int *send_info, int *recv_info, int *ierr)
int yac_cget_field_role_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
static void yac_check_version(MPI_Comm comm)
void yac_cdef_mask(int const grid_id, int const nbr_points, int const located, int const *is_valid, int *mask_id)
static void * yac_unique_id_to_pointer(int id, char const *id_name)
int const YAC_CONSERV_FRACAREA
void yac_cadd_interp_stack_config_spmap(int interp_stack_config_id, double spread_distance, double max_search_distance, int weight_type, int scale_type, double src_sphere_radius, char const *src_filename, char const *src_varname, int src_min_global_id, double tgt_sphere_radius, char const *tgt_filename, char const *tgt_varname, int tgt_min_global_id)
void yac_cadd_interp_stack_config_user_callback(int interp_stack_config_id, char const *func_compute_weights_key)
void yac_cdef_grid_unstruct_edge_ll(const char *grid_name, int nbr_vertices, int nbr_cells, int nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex, int *grid_id)
void yac_cdef_points_curve2d(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_ext_couple_config_mapping_side(int ext_couple_config_id, int mapping_side)
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)
void yac_ccleanup_instance(int yac_instance_id)
Clean-up a YAC instance (see Restarting YAC)
int yac_cget_field_collection_size_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
static void check_y_vertices(double const *y_vertices, size_t count, char const *routine_name)
void yac_cfree_interp_stack_config(int interp_stack_config_id)
static double *** get_send_field_pointers(int field_id, size_t collection_size, double *send_field)
static void yac_free_global_masks()
int const YAC_CALENDAR_NOT_SET
void yac_cset_grid_output_file(const char *gridname, const char *filename)
static struct user_input_data_masks ** global_masks
void yac_cadd_interp_stack_config_nnn(int interp_stack_config_id, int type, size_t n, double max_search_distance, double scale)
void yac_cget_ext_couple_config_scale_summand(int ext_couple_config_id, double *scale_summand)
void yac_ccheck_src_field_buffer_sizes(int field_id, int num_src_fields_, int collection_size, int *src_field_buffer_sizes_)
int const YAC_CONFIG_OUTPUT_FORMAT_JSON
size_t yac_cget_grid_size(int located, int grid_id)
void yac_cinit_instance(int *yac_instance_id)
void yac_ctest(int field_id, int *flag)
void yac_cset_ext_couple_config_yaxt_exchanger_name_(struct yac_ext_couple_config *ext_couple_config, char const *yaxt_exchanger_name)
void yac_cget_interp_stack_config(int *interp_stack_config_id)
void yac_cset_ext_couple_config_collection_selection(int ext_couple_config_id, int collection_size, int const *collection_indices)
static void yac_free_pointer_unique_lookup()
void yac_cadd_interp_stack_config_spmap_f2c(int interp_stack_config_id, double spread_distance, double max_search_distance, int weight_type, int scale_type, double src_sphere_radius, char const *src_filename, char const *src_varname, int src_min_global_id, double tgt_sphere_radius, char const *tgt_filename, char const *tgt_varname, int tgt_min_global_id, int *overwrite_config_ids, int overwrite_config_count)
void yac_cinit_dummy(void)
void yac_cadd_interp_stack_config_average(int interp_stack_config_id, int reduction_type, int partial_coverage)
int const YAC_ACTION_PUT_FOR_RESTART
last valid put
#define WEIGHT_ACC(ACC, EXTRA_CHECK)
void yac_cdef_comp(char const *comp_name, int *comp_id)
int const YAC_EXCHANGE_TYPE_INVALID
void yac_cget_raw_frac_async_ptr_(int const field_id, int const collection_size, double **src_field_buffer, double **src_frac_mask_buffer, int *info, int *ierr)
void yac_cget_raw_frac_ptr_(int const field_id, int const collection_size, double **src_field_buffer, double **src_frac_mask_buffer, int *info, int *ierr)
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)
void yac_cset_spmap_overwrite_config_spread_distance(int spmap_overwrite_config_id, double spread_distance)
void yac_csync_def_comps_instance(int yac_instance_id, char const **comp_names, int num_comp_names)
static void check_name_string(char const *caller, char const *name, char const *name_type)
void yac_cdef_couple_instance(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag)
void yac_cget_spmap_overwrite_config(int *spmap_overwrite_config_id)
void yac_cdef_couple(char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag)
int yac_cget_nbr_comps(void)
static int default_instance_id
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_raw_async_ptr_(int const field_id, int const collection_size, double **src_field_buffer, int *info, int *ierr)
static void check_x_vertices(double const *x_vertices, size_t count, char const *routine_name)
void yac_cset_ext_couple_config_tgt_mask_name_(struct yac_ext_couple_config *ext_couple_config, char const *tgt_mask_name)
void yac_cput_ptr_(int const field_id, int const collection_size, double **send_field, int *info, int *ierr)
void yac_cget_raw_ptr_(int const field_id, int const collection_size, double **src_field_buffer, int *info, int *ierr)
static struct user_input_data_points ** global_points
static void yac_cfree_ext_couple_config_(struct yac_ext_couple_config ext_couple_config)
void yac_cadd_interp_stack_config_dnn(int interp_stack_config_id, int weight_type, int search_distance_type, double search_distance, double scale)
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)
struct yac_cell_area_config CellAreaConfig
void yac_cdef_comps_instance(int yac_instance_id, char const **comp_names, int num_comps, int *comp_ids)
void yac_cexchange_raw_(int const send_field_id, int const recv_field_id, int const collection_size, double *send_field, double *src_field_buffer, int *send_info, int *recv_info, int *ierr)
int const YAC_REDUCTION_TIME_NONE
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)
void yac_cget_ext_spmap_config(int *ext_spmap_config_id)
void yac_cset_ext_couple_config_collection_selection_(struct yac_ext_couple_config *ext_couple_config, int collection_size, int const *collection_indices)
static void yac_ccleanup_instance_(int yac_instance_id)
static void get_global_ids_reference(char const *caller, int location, int grid_id, yac_int **grid_global_ids, size_t *count)
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)
static void ** pointer_lookup_table
static int yac_cget_interp_stack_config_from_string(char const *interp_stack_config, int parse_flags)
void yac_cget_ext_couple_config_weight_file(int ext_couple_config_id, char const **weight_file)
void yac_cinit_comm(MPI_Comm comm)
static void yac_free_global_interp_stack_configs()
#define YAC_ASSERT_F(exp, format,...)
#define YAC_ASSERT_FUNC(exp, func, msg)
#define YAC_UNREACHABLE_DEFAULT_F_FUNC(func, format,...)
#define YAC_ASSERT_F_FUNC(exp, func, format,...)
#define YAC_UNREACHABLE_DEFAULT(msg)
int yac_mpi_is_initialised()
void yac_yaxt_init(MPI_Comm comm)
#define yac_mpi_call(call, comm)
void yac_pak_instrument_end(void)
End the window opened by yac_pak_instrument_begin (clears the callbacks). Safe to call unconditionall...
void yac_pak_instrument_begin(struct yac_pak *pak, yac_pak_trace_level_t level, char const *component, char const *grid)
Begin a tracing window: record instrumented core regions until the matching yac_pak_instrument_end as...
Bridge that turns YAC core instrumentation regions (see instrument.h) into nested YAC_PAK_EVENT_TYPE_...
double(* yac_coordinate_pointer)[3]