264 "ERROR(yac_unique_id_to_pointer): invalid %s", id_name)
306 "ERROR(yac_add_grid): multiple definitions of grid with identical name")
310 "ERROR(yac_add_grid): grid name is too long (maximum is YAC_MAX_CHARLEN)")
383 "ERROR(%s): no default YAC instance is defined yet", routine_name)
393 char recv_version[64];
398 yac_version_len <=
sizeof(recv_version),
399 "ERROR(yac_check_version): "
400 "version string \"%s\" is too long (has to be shorter than %zu)",
403 if (comm_rank == 0) strcpy(recv_version,
yac_version);
406 MPI_Bcast(recv_version, (
int)yac_version_len, MPI_CHAR, 0, comm), comm);
410 "ERROR(yac_check_version): inconsistent YAC versions between processes "
411 "(on local process \"%s\"; on root \"%s\")",
yac_version, recv_version)
419 int yac_int_size_local = (int)(
sizeof(
yac_int));
420 int yac_int_size_root = (int)(
sizeof(
yac_int));
423 MPI_Bcast(&yac_int_size_root, 1, MPI_INT, 0, comm), comm);
426 yac_int_size_local == yac_int_size_root,
427 "ERROR(yac_check_yac_int): inconsistent size of yac_int datatype between "
428 "processes (on local process \"%d\"; on root \"%d\")",
429 yac_int_size_local, yac_int_size_root)
437 "MPI has not yet been initialised, but this call got a "
438 "communicator which is not allowed by the MPI standard "
439 "(MPI_COMM_WORLD is not to be used before the call to "
440 "MPI_Init or MPI_Init_thread)", routine_name);
444 MPI_Comm * group_comms) {
450 MPI_Fint * group_comms) {
451 MPI_Comm comm_c = MPI_Comm_f2c(comm);
452 MPI_Comm * group_comms_c =
xmalloc(n*
sizeof(*group_comms_c));
454 for(
int i = 0; i<n; ++i)
455 group_comms[i] = MPI_Comm_c2f(group_comms_c[i]);
466 int comm_rank, comm_size;
486 MPI_Comm comm,
int * yac_instance_id) {
492 MPI_Fint comm,
int * yac_instance_id) {
501 "ERROR(yac_cinit_comm): default YAC instance already defined")
512 int * yac_instance_id) {
526 "ERROR(yac_cinit_comm): default YAC instance already defined")
565 MPI_Comm instance_comm =
569 yac_mpi_call(MPI_Comm_rank(instance_comm, rank), instance_comm);
575 MPI_Comm instance_comm =
579 yac_mpi_call(MPI_Comm_size(instance_comm, size), instance_comm);
626 int yac_instance_id,
const char * filename,
int fileformat,
627 int sync_location,
int include_definitions) {
634 "ERROR(yac_cset_config_output_file_instance): filename is NULL")
638 "ERROR(yac_cset_config_output_file_instance): invalid file format")
643 "ERROR(yac_cset_config_output_file_instance): invalid file format")
645 char const * output_refs[] =
653 output_refs[sync_location], include_definitions);
657 const char * filename,
int filetype,
int sync_location,
658 int include_definitions) {
663 include_definitions);
669 int yac_instance_id,
const char * gridname,
const char * filename) {
676 "ERROR(yac_cset_grid_output_file_instance): gridname is NULL")
679 "ERROR(yac_cset_grid_output_file_instance): filename is NULL")
762 int yac_instance_id,
const char * start_datetime,
763 const char * end_datetime) {
767 start_datetime, end_datetime);
771 const char * end_datetime ) {
784 "ERROR(yac_cdef_calendar): invalid calendar type")
786 calendarType curr_calendar = getCalendarType();
788 (curr_calendar == CALENDAR_NOT_SET) ||
789 (curr_calendar == (calendarType)calendar),
790 "ERROR(yac_cdef_calendar): inconsistent calendar definition")
792 initCalendar((calendarType)calendar);
797 return (
int)getCalendarType();
848 int comp_id,
char const * routine) {
855 "ERROR(%s): instance of component \"%s\" is already finalized",
856 routine, comp_info->
name);
872 comp_info->
instance, (
char const **)&(comp_info->
name), 1);
882 *comp_comm_f = MPI_Comm_c2f(comp_comm);
907 char const ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
912 comp_names, (
size_t)num_comps);
916 const char ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
927 char const ** comp_names,
int num_comps, MPI_Fint * comps_comm_f) {
931 yac_instance_id, comp_names, num_comps, &comps_comm);
932 *comps_comm_f = MPI_Comm_c2f(comps_comm);
936 char const ** comp_names,
int num_comps, MPI_Fint *comps_comm_f) {
940 *comps_comm_f = MPI_Comm_c2f(comps_comm);
946 int yac_instance_id,
char const *
name,
int *
comp_id){
953 "ERROR(yac_cpredef_comp_instance): components have already been defined");
957 "ERROR(yac_cpredef_comp_instance): missing component name");
963 "ERROR(yac_cpredef_comp_instance): "
964 "component \"%s\" is already defined",
name);
984 int yac_instance_id,
char const ** comp_names,
int num_comps,
990 for(
int i = 0; i<num_comps; ++i)
994 size_t comp_counter = 0;
1005 free(all_comp_names);
1009 char const ** comp_names,
int num_comps,
int *
comp_ids ) {
1017 int yac_instance_id,
char const * comp_name,
int *
comp_id ) {
1050 double const * x_vertices,
size_t count,
char const * routine_name) {
1052 for (
size_t i = 0; i < count; ++i)
1054 (x_vertices[i] >= -4.0 * M_PI) && (x_vertices[i] <= 4.0 * M_PI),
1055 "ERROR(%s): x_vertices[%zu] = %lf outside of valid range [-4*PI;4*PI]",
1056 routine_name, i, x_vertices[i]);
1060 double const * y_vertices,
size_t count,
char const * routine_name) {
1062 for (
size_t i = 0; i < count; ++i)
1064 (y_vertices[i] >= - (M_PI_2 + 1e-5)) &&
1065 (y_vertices[i] <= (M_PI_2 + 1e-5)),
1066 "ERROR(%s): y_vertices[%zu] = %.10lf outside of valid range [-PI/2;PI/2]",
1067 routine_name, i, y_vertices[i]);
1072 int nbr_vertices,
char const * routine_name) {
1075 for (
int i = 0; i < nbr_cells; ++i) {
1077 num_vertices_per_cell[i] >= 0,
1078 "ERROR(%s): num_vertices_per_cell[%d] = %d ",
1079 routine_name, i, num_vertices_per_cell[i]);
1080 count += num_vertices_per_cell[i];
1082 for (
size_t i = 0; i < count; ++i)
1085 "ERROR(%s): cell_to_vertex[%zu] = %d "
1086 "invalid value (nbr_vertices = %d)",
1091 int *cell_to_edge,
int *num_edges_per_cell,
int nbr_cells,
1092 int nbr_edges,
char const * routine_name) {
1095 for (
int i = 0; i < nbr_cells; ++i) {
1097 num_edges_per_cell[i] >= 0,
1098 "ERROR(%s): num_edges_per_cell[%d] = %d ",
1099 routine_name, i, num_edges_per_cell[i]);
1100 count += num_edges_per_cell[i];
1102 for (
size_t i = 0; i < count; ++i)
1104 (cell_to_edge[i] >= 0) && (cell_to_edge[i] < nbr_edges),
1105 "ERROR(%s): cell_to_edge[%zu] = %d "
1106 "invalid value (nbr_edges = %d)",
1107 routine_name, i, cell_to_edge[i], nbr_edges);
1113 int const *nbr_points,
1115 double const *x_points,
1116 double const *y_points,
1124 "ERROR(yac_cdef_points_reg2d): "
1125 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1130 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1131 "ERROR(yac_cdef_points_reg2d): nbr_points does not match with grid. "
1132 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1133 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1136 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_reg2d");
1138 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_reg2d");
1141 xmalloc(data_size *
sizeof(*coordinates));
1142 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1143 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1144 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1152 int const *nbr_points,
1154 double const *x_points,
1155 double const *y_points,
1163 "ERROR(yac_cdef_points_curve2d): "
1164 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1169 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1170 "ERROR(yac_cdef_points_curve2d): nbr_points does not match with grid. "
1171 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1172 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1175 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_curve2d");
1177 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_curve2d");
1180 xmalloc(data_size *
sizeof(*coordinates));
1181 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1182 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1183 LLtoXYZ(x_points[k], y_points[k], coordinates[k]);
1191 int const nbr_points,
1193 double const *x_points,
1194 double const *y_points,
1202 "ERROR(yac_cdef_points_unstruct): nbr_points does not match with grid. "
1203 "Given nbr_points != Expected (%zu != %zu)",
1206 check_x_vertices(x_points, (
size_t)nbr_points,
"yac_cdef_points_unstruct");
1207 check_y_vertices(y_points, (
size_t)nbr_points,
"yac_cdef_points_unstruct");
1210 xmalloc((
size_t)nbr_points *
sizeof(*coordinates));
1211 for (
int i = 0; i < nbr_points; ++i)
1212 LLtoXYZ(x_points[i], y_points[i], coordinates[i]);
1220 int const *nbr_points,
1222 double const *x_points,
1223 double const *y_points,
1224 double x_north_pole,
1225 double y_north_pole,
1233 "ERROR(yac_cdef_points_reg2d_rot): "
1234 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1239 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) == data_size,
1240 "ERROR(yac_cdef_points_reg2d_rot): nbr_points does not match with grid. "
1241 "Given nbr_points[0] * nbr_points[1] != Expected (%zu*%zu != %zu)",
1242 (
size_t)nbr_points[0], (
size_t)nbr_points[1], data_size);
1245 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_reg2d_rot");
1247 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_reg2d_rot");
1250 xmalloc(data_size *
sizeof(*coordinates));
1251 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1252 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1253 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1255 double north_pole[3];
1256 LLtoXYZ(x_north_pole, y_north_pole, north_pole);
1266 int const * is_valid,
size_t nbr_points,
char const *
name) {
1284 int const nbr_points,
1286 int const * is_valid,
1295 "ERROR(yac_cdef_mask_named): nbr_points does not match with grid. "
1296 "Given nbr_points != Expected (%zu != %zu)",
1305 int const nbr_points,
1307 int const * is_valid,
1320 "ERROR(yac_cset_mask): default mask has already been set before")
1334 int const * point_ids,
1335 int const * mask_ids,
1336 int const num_pointsets,
1338 const char* timestep,
1344 "ERROR(yac_cdef_field_mask): invalid number of pointsets")
1347 point_ids != NULL,
"ERROR(yac_cdef_field_mask): no point_ids provided")
1355 (num_pointsets == 1)?
1357 xmalloc((
size_t)num_pointsets *
sizeof(*interp_fields));
1359 for (
int i = 0; i < num_pointsets; ++i) {
1366 "ERROR(yac_cdef_field_mask): grid of point_ids do not match")
1369 if (mask_ids[i] != INT_MAX) {
1376 "ERROR(yac_cdef_field_mask): "
1377 "grids of mask and points do not match")
1380 "ERROR(yac_cdef_field_mask): "
1381 "location of mask and points do not match")
1402 if (num_pointsets > 1) free(interp_fields);
1407 int const * point_ids,
1408 int const num_pointsets,
1410 const char* timestep,
1416 "ERROR(yac_cdef_field): invalid number of pointsets")
1419 point_ids != NULL,
"ERROR(yac_cdef_field): no point_ids provided")
1421 int * mask_ids =
xmalloc((
size_t)num_pointsets *
sizeof(*mask_ids));
1423 for (
int i = 0; i < num_pointsets; ++i)
1430 name,
comp_id, point_ids, mask_ids, num_pointsets,
1437 int yac_instance_id,
const char* comp_name,
const char* grid_name,
1438 const char* field_name,
double frac_mask_fallback_value) {
1444 couple_config, comp_name, grid_name, field_name,
1445 frac_mask_fallback_value);
1449 const char* comp_name,
const char* grid_name,
const char* field_name,
1450 double frac_mask_fallback_value) {
1454 frac_mask_fallback_value);
1458 const char* comp_name,
const char* metadata) {
1471 const char* metadata) {
1485 const char* grid_name,
const char* field_name,
const char* metadata) {
1494 const char* field_name,
const char* metadata) {
1497 field_name, metadata);
1501 const char* comp_name) {
1514 const char* grid_name) {
1527 const char* comp_name,
const char* grid_name,
const char* field_name) {
1536 const char* field_name) {
1539 grid_name, field_name);
1561 xmalloc(1 *
sizeof(*ext_couple_config));
1583 free(ext_couple_config);
1615 "ERROR(yac_cset_ext_couple_config_weight_file_on_existing_): "
1616 "\"%d\" is not a valid weight file on existing value "
1617 "(has to be YAC_WGT_ON_EXISTING_ERROR (%d), "
1618 "YAC_WGT_ON_EXISTING_KEEP(%d), or "
1619 "YAC_WGT_ON_EXISTING_OVERWRITE(%d))",
1645 "ERROR(yac_cset_ext_couple_config_mapping_side_): "
1646 "\"%d\" is not a valid mapping side (has to be 0 or 1)",
1669 "ERROR(yac_cset_ext_couple_config_scale_factor_): "
1692 "ERROR(yac_cset_ext_couple_config_scale_summand_): "
1810 int const * collection_indices) {
1813 "ERROR(yac_cset_ext_couple_config_collection_selection): "
1814 "collection_size has to be non-negative (%d given)",
1821 size_t * size_t_collection_indices = NULL;
1823 size_t_collection_indices =
1827 collection_indices[i] >= 0,
1828 "ERROR(yac_cset_ext_couple_config_collection_selection): "
1829 "collection_indices[%d] has to be non-negative (%d given)",
1830 i, collection_indices[i]);
1831 size_t_collection_indices[i] = (size_t)collection_indices[i];
1837 free(size_t_collection_indices);
1842 int const * collection_indices) {
1849 int ext_couple_config_id,
1851 int ** collection_indices) {
1858 size_t const * indices =
1866 indices[i] <= (
size_t)INT_MAX,
1867 "ERROR(yac_cget_ext_couple_config_collection_selection): "
1868 "collection_indices[%d] value %zu exceeds INT_MAX",
1870 int_indices[i] = (int)indices[i];
1872 *collection_indices = int_indices;
1874 *collection_indices = NULL;
1878 *collection_indices = NULL;
1883 int yac_instance_id,
1884 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1885 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1886 char const * coupling_timestep,
int time_unit,
int time_reduction,
1887 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1893 interp_stack_config_id,
"interp_stack_config_id");
1894 char const * coupling_timestep_iso8601 =
1899 coupling_timestep_iso8601, time_reduction,
1900 interp_stack_config, src_lag, tgt_lag,
1914 int yac_instance_id,
1915 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1916 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1917 char const * coupling_timestep,
int time_unit,
int time_reduction,
1918 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1919 int ext_couple_config_id) {
1922 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
1923 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
1924 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1929 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1930 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1931 char const * coupling_timestep,
int time_unit,
int time_reduction,
1932 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1933 int ext_couple_config_id) {
1938 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
1939 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1944 int yac_instance_id,
1945 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1946 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1947 char const * coupling_timestep,
int time_unit,
int time_reduction,
1948 int interp_stack_config_id,
int src_lag,
int tgt_lag) {
1954 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
1955 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
1956 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1957 &ext_couple_config);
1961 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1962 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1963 char const * coupling_timestep,
int time_unit,
int time_reduction,
1964 int interp_stack_config_id,
int src_lag,
int tgt_lag){
1970 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
1975 int yac_instance_id,
1976 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
1977 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
1978 char const * coupling_timestep,
int time_unit,
int time_reduction,
1979 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1989 "ERROR(yac_cdef_couple_instance_): "
1993 "ERROR(yac_cdef_couple_instance_): "
2022 yac_instance_id, src_comp_name,
src_grid_name, src_field_name,
2023 tgt_comp_name,
tgt_grid_name, tgt_field_name, coupling_timestep,
2024 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
2025 &ext_couple_config);
2031 char const * src_comp_name,
char const *
src_grid_name,
char const * src_field_name,
2032 char const * tgt_comp_name,
char const *
tgt_grid_name,
char const * tgt_field_name,
2033 char const * coupling_timestep,
int time_unit,
int time_reduction,
2034 int interp_stack_config_id,
int src_lag,
int tgt_lag,
2045 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
2056 int num_interp_fields,
2057 int const * interp_field_sizes ) {
2065 "ERROR(yac_ccheck_field_dimensions): mismatching collection sizes "
2066 "for component %s grid %s field %s (%d != %d)",
2078 "ERROR(yac_ccheck_field_dimensions): mismatching number of interp fields "
2079 "for component %s grid %s field %s (%d != %zu)",
2086 if (interp_field_sizes) {
2088 ++interp_field_idx) {
2091 (
size_t)interp_field_sizes[interp_field_idx] ==
2095 cpl_field, (
size_t)interp_field_idx)),
2096 "ERROR(yac_ccheck_field_dimensions): mismatching interp field size "
2097 "for component %s grid %s field %s interp_field_idx %d (%d != %zu)",
2103 interp_field_sizes[interp_field_idx],
2107 cpl_field, (
size_t)interp_field_idx)));
2117 int src_field_buffer_size_ ) {
2125 "ERROR(yac_ccheck_src_field_buffer_size): mismatching collection sizes "
2126 "for component %s grid %s field %s (%d != %d)",
2133 size_t num_src_fields;
2134 size_t const * src_field_buffer_sizes;
2135 size_t src_field_buffer_size = 0;
2137 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2138 for (
size_t i = 0; i < num_src_fields; ++i)
2139 src_field_buffer_size += src_field_buffer_sizes[i];
2142 (
size_t)src_field_buffer_size_ == src_field_buffer_size,
2143 "ERROR(yac_ccheck_src_field_buffer_size): "
2144 "mismatching source buffer size "
2145 "for component %s grid %s field %s (%d != %zu)",
2150 src_field_buffer_size_, src_field_buffer_size);
2154 int num_src_fields_,
2156 int * src_field_buffer_sizes_ ) {
2164 "ERROR(yac_ccheck_src_field_buffer_sizes): mismatching collection sizes "
2165 "for component %s grid %s field %s (%d != %d)",
2172 size_t num_src_fields;
2173 size_t const * src_field_buffer_sizes;
2175 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2178 (
size_t)num_src_fields_ == num_src_fields,
2179 "ERROR(yac_ccheck_src_field_buffer_sizes): "
2180 "mismatching number of source fields "
2181 "for component %s grid %s field %s (%d != %zu)",
2187 for (
size_t i = 0; i < num_src_fields; ++i)
2189 (
size_t)src_field_buffer_sizes_[i] == src_field_buffer_sizes[i],
2190 "ERROR(yac_ccheck_src_field_buffer_sizes): "
2191 "mismatching source buffer size "
2192 "for component %s grid %s field %s field_idx %zu (%d != %zu)",
2197 i, src_field_buffer_sizes_[i], src_field_buffer_sizes[i]);
2203 double * frac_mask_fallback_value,
2204 double * scaling_factor,
2205 double * scaling_summand,
2206 size_t * num_fixed_values,
2207 double ** fixed_values,
2208 size_t ** num_tgt_per_fixed_value,
2209 size_t ** tgt_idx_fixed,
2210 size_t * num_wgt_tgt,
2211 size_t ** wgt_tgt_idx,
2212 size_t ** num_src_per_tgt,
2214 size_t ** src_field_idx,
2216 size_t * num_src_fields,
2217 size_t ** src_field_buffer_size ) {
2250 size_t ** src_indptr_,
2255 size_t ** src_field_buffer_sizes ) {
2271 "ERROR(yac_cget_raw_interp_weights_data_csr): "
2272 "target field \"%s\" has more than one interpolation field",
2275 size_t field_data_size =
2280 size_t * src_indptr =
2281 xcalloc((field_data_size + 1),
sizeof(*src_indptr));
2282 for (
size_t i = 0; i < num_wgt_tgt; ++i)
2283 src_indptr[wgt_tgt_idx[i]] = num_src_per_tgt[i];
2284 size_t total_num_weights = 0;
2286 size_t curr_count = src_indptr[i];
2287 src_indptr[i] = total_num_weights;
2288 total_num_weights += curr_count;
2294 for (
size_t i = 1; (i < num_wgt_tgt) && tgt_sorted; ++i)
2295 tgt_sorted = wgt_tgt_idx[i] > wgt_tgt_idx[i-1];
2299 "ERROR(yac_cget_raw_interp_weights_data_csr): "
2300 "target indices for field \"%s\" are unsorted, which is unexpected, "
2343 free(num_src_per_tgt);
2346 *src_indptr_ = src_indptr;
2351 double * frac_mask_fallback_value,
2352 double * scaling_factor,
2353 double * scaling_summand,
2354 size_t * num_fixed_values,
2355 double ** fixed_values,
2356 size_t ** num_tgt_per_fixed_value,
2357 size_t ** tgt_idx_fixed,
2358 size_t ** src_indptr,
2360 size_t ** src_field_idx,
2362 size_t * num_src_fields,
2363 size_t ** src_field_buffer_sizes,
2364 size_t * tgt_field_data_size) {
2371 "ERROR(yac_cget_raw_interp_weights_data_csr_c2f): "
2372 "target field \"%s\" has more than one interpolation field",
2375 *tgt_field_data_size =
2381 field_id, frac_mask_fallback_value, scaling_factor, scaling_summand,
2382 num_fixed_values, fixed_values, num_tgt_per_fixed_value, tgt_idx_fixed,
2383 src_indptr, weights, src_field_idx, src_idx, num_src_fields,
2384 src_field_buffer_sizes);
2400 "ERROR(yac_cget_action): invalid field exchange type")
2420 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
2447 "ERROR(yac_cupdate): current action of %s field \"%s\" of "
2448 "componente \"%s\" is not YAC_ACTION_NONE or YAC_ACTION_OUT_OF_BOUND",
2454 fputs(
"WARNING: YAC update action is beyond end of run date!\n", stderr);
2455 fputs(
"WARNING: YAC update action is beyond end of run date!\n", stdout);
2470 "ERROR(yac_cupdate): invalid field exchange type")
2486 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
2500 double *recv_field) {
2507 "ERROR(get_recv_field_pointers): invalid number of interpolation fields "
2518 recv_field_[i] = recv_field;
2519 recv_field += data_size;
2534 size_t num_src_fields;
2535 size_t const * src_field_buffer_sizes;
2537 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2539 double *** src_field_buffer_ =
2541 double ** src_field_buffer__ =
2545 src_field_buffer_[i] =
2546 src_field_buffer__ + i * num_src_fields;
2547 for (
size_t j = 0; j < num_src_fields; ++j) {
2548 src_field_buffer_[i][j] = src_field_buffer;
2549 src_field_buffer += src_field_buffer_sizes[j];
2553 return src_field_buffer_;
2559 double **src_field_buffer) {
2566 size_t num_src_fields;
2567 size_t const * src_field_buffer_sizes;
2569 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2571 double *** src_field_buffer_ =
2573 double ** src_field_buffer__ =
2577 src_field_buffer_[i] =
2578 src_field_buffer__ + i * num_src_fields;
2579 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2580 src_field_buffer_[i][j] = src_field_buffer[k];
2583 return src_field_buffer_;
2600 "ERROR(yac_cget_pre_processing): get was called for field \"%s\" which "
2626 fputs(
"WARNING: YAC get action is beyond end of run date!\n", stderr);
2627 fputs(
"WARNING: YAC get action is beyond end of run date!\n", stdout);
2641 "ERROR: collection size does not match with coupling configuration.")
2652 double ** recv_field,
2662 if ((*ierr == 0) && (interpolation != NULL)) {
2673 double ***src_field_buffer,
2674 double ***src_frac_mask_buffer,
2686 if (field_role ==
NOTHING)
return;
2690 "ERROR(yac_cget_raw_frac): field \"%s\" is source",
2697 size_t num_src_fields;
2699 cpl_field, &num_src_fields, NULL);
2703 "ERROR(yac_get_raw_frac): target field \"%s\" was configured %s "
2704 "support for fractional masking, but %s source fractional mask buffer "
2705 "was provided to this call",
2709 double ** src_field_buffer_ =
2712 sizeof(*src_field_buffer_));
2716 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2717 src_field_buffer_[k] = src_field_buffer[i][j];
2720 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2721 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
2723 if ((*
ierror == 0) && (interpolation_exchange != NULL)) {
2726 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
2729 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
2731 free(src_field_buffer_);
2746 double ** recv_field_ =
2774 double ** recv_field,
2783 double ** recv_field,
2795 double *src_field_buffer,
2798 double *src_frac_mask_buffer,
2808 double *** src_field_buffer_ =
2811 double *** src_frac_mask_buffer_ =
2812 src_frac_mask_buffer?
2818 is_async, info, ierr);
2820 if (src_frac_mask_buffer) {
2821 free(src_frac_mask_buffer_[0]);
2822 free(src_frac_mask_buffer_);
2824 free(src_field_buffer_[0]);
2825 free(src_field_buffer_);
2830 double **src_field_buffer,
2833 double **src_frac_mask_buffer,
2843 double *** src_field_buffer_ =
2846 double *** src_frac_mask_buffer_ =
2847 src_frac_mask_buffer?
2853 is_async, info, ierr);
2855 if (src_frac_mask_buffer) {
2856 free(src_frac_mask_buffer_[0]);
2857 free(src_frac_mask_buffer_);
2859 free(src_field_buffer_[0]);
2860 free(src_field_buffer_);
2865 double *src_field_buffer,
2877 double *src_field_buffer,
2880 double *src_frac_mask_buffer,
2893 double **src_field_buffer,
2905 double **src_field_buffer,
2908 double **src_frac_mask_buffer,
2922 double *src_field_buffer,
2934 double *src_field_buffer,
2937 double *src_frac_mask_buffer,
2950 double **src_field_buffer,
2962 double **src_field_buffer,
2965 double **src_frac_mask_buffer,
2978 double ***src_field_buffer,
2991 double ***src_field_buffer,
3005 double ***src_field_buffer,
3009 double ***src_frac_mask_buffer,
3023 double ***src_field_buffer,
3027 double ***src_frac_mask_buffer,
3060 double ***send_field_ =
3062 double **send_field__ =
3068 send_field_[i][j] = send_field;
3069 send_field += data_sizes[j];
3087 double *** send_field_ =
3092 free(send_field_[0]);
3101 double *send_frac_mask,
3110 double *** send_field_ =
3112 double *** send_frac_mask_ =
3118 free(send_field_[0]);
3120 free(send_frac_mask_[0]);
3121 free(send_frac_mask_);
3129 double **send_field,
3130 double **send_frac_mask,
3131 double ****send_field_,
3132 double ****send_frac_mask_) {
3154 (*send_field_)[i][j] = send_field[k];
3156 if (send_frac_mask != NULL) {
3160 (*send_frac_mask_)[i] =
3163 (*send_frac_mask_)[i][j] = send_frac_mask[k];
3172 double ** send_field,
3181 double *** send_field_;
3193 double ** send_field,
3196 double ** send_frac_mask,
3205 double *** send_field_;
3206 double *** send_frac_mask_;
3209 &send_field_, &send_frac_mask_);
3215 free(send_field_[i]);
3216 free(send_frac_mask_[i]);
3219 free(send_frac_mask_);
3232 unsigned put_idx = 0;
3255 unsigned put_idx = 0;
3260 cpl_field, put_idx),
"yac_cwait");
3301 double **** send_field_acc_,
double *** send_frac_mask,
3302 double **** send_frac_mask_acc_,
int * with_frac_mask_,
3303 int * use_raw_exchange_,
int *info,
int *ierr) {
3309 cpl_field, put_idx):
3311 cpl_field, put_idx);
3315 int with_frac_mask =
3320 *with_frac_mask_ = with_frac_mask;
3327 struct event *
event =
3345 fputs(
"WARNING: YAC put action is beyond end of run date!\n", stderr);
3346 fputs(
"WARNING: YAC put action is beyond end of run date!\n", stdout);
3348 *send_field_acc_ = NULL;
3349 *send_frac_mask_acc_ = NULL;
3368 size_t num_interp_fields =
3376 if (with_frac_mask) {
3379 double *** send_field_acc =
3381 *send_field_acc_ = send_field_acc;
3382 *send_frac_mask_acc_ = send_frac_mask;
3385 for (
size_t i = 0; i < num_interp_fields; i++) {
3391 for (
size_t j = 0; j < data_size; ++j) {
3392 if (put_mask[i][j]) {
3393 double frac_mask = send_frac_mask[h][i][j];
3394 send_field_acc[h][i][j] =
3395 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3399 for (
size_t j = 0; j < data_size; ++j) {
3400 double frac_mask = send_frac_mask[h][i][j];
3401 send_field_acc[h][i][j] =
3402 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3408 *send_field_acc_ = send_field;
3409 *send_frac_mask_acc_ = send_frac_mask;
3411 return interpolation;
3423 "ERROR(yac_cput_pre_processing): invalid time operation type")
3425 int time_accumulation_count =
3428 time_accumulation_count++;
3431 if (time_accumulation_count == 1) {
3433 double send_field_acc_init_value;
3438 send_field_acc_init_value = 0.0;
3441 send_field_acc_init_value = DBL_MAX;
3444 send_field_acc_init_value = -DBL_MAX;
3451 cpl_field, put_idx, send_field_acc_init_value);
3454 cpl_field, put_idx, 0.0);
3459 double *** send_field_acc =
3461 *send_field_acc_ = send_field_acc;
3462 double *** send_frac_mask_acc;
3463 if (with_frac_mask) {
3464 send_frac_mask_acc =
3466 *send_frac_mask_acc_ = send_frac_mask_acc;
3468 send_frac_mask_acc = NULL;
3469 *send_frac_mask_acc_ = NULL;
3473#define PUT_CHECK (put_mask[i][j])
3476#define AGGREGATE_FRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
3481 for (size_t j = 0; j < num_points; ++j) { \
3482 double frac_mask = send_frac_mask[h][i][j]; \
3483 double send_field_value = send_field[h][i][j] * frac_mask; \
3484 if (CHECK && (EXTRA_CHECK)) { \
3485 if (frac_mask != 0.0) { \
3486 send_field_acc[h][i][j] ACCU_OP send_field_value; \
3487 send_frac_mask_acc[h][i][j] ACCU_OP frac_mask; \
3493#define AGGREATE_NOFRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
3498 for (size_t j = 0; j < num_points; ++j) {\
3499 double send_field_value = send_field[h][i][j]; \
3500 if (CHECK && (EXTRA_CHECK)) \
3501 send_field_acc[h][i][j] ACCU_OP send_field_value; \
3505#define AGGREGATE(EXTRA_CHECK, ACCU_OP) \
3507 for (int h = 0; h < collection_size; h++) { \
3508 for (size_t i = 0; i < num_interp_fields; i++) { \
3509 size_t num_points = \
3510 yac_coupling_field_get_data_size( \
3512 yac_coupling_field_get_interp_fields(cpl_field)[i].location); \
3513 if (with_frac_mask) { \
3514 if (put_mask) AGGREGATE_FRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
3515 else AGGREGATE_FRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
3517 if (put_mask) AGGREATE_NOFRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
3518 else AGGREATE_NOFRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
3537#undef AGGREATE_NOFRAC
3538#undef AGGREGATE_FRAC
3550 cpl_field, put_idx, time_accumulation_count);
3561 double weight = 1.0 / (double)time_accumulation_count;
3564#define PUT_CHECK (put_mask[i][j])
3565#define WEIGHT_ACC_(ACC, CHECK, EXTRA_CHECK) \
3567 for (size_t j = 0; j < num_points; j++) \
3568 if (CHECK && (EXTRA_CHECK)) ACC[h][i][j] *= weight; \
3570#define WEIGHT_ACC(ACC, EXTRA_CHECK) \
3572 if (put_mask) WEIGHT_ACC_(ACC, PUT_CHECK, EXTRA_CHECK) \
3573 else WEIGHT_ACC_(ACC, NO_CHECK, EXTRA_CHECK) \
3577 for (
size_t i = 0; i < num_interp_fields; i++) {
3586 WEIGHT_ACC(send_field_acc, send_frac_mask_acc[h][i][j] != 0.0)
3601 cpl_field, put_idx, 0);
3608 return interpolation;
3613 double ***
const send_field,
3615 double ***
const send_frac_mask,
3633 "ERROR(yac_cput_frac): put was called for field \"%s\" which is "
3641 "ERROR(yac_cput_frac): collection size of field \"%s\" does not match with "
3644 for (
unsigned put_idx = 0;
3660 &curr_action, &curr_ierr);
3662 *info =
MAX(*info, curr_action);
3663 *ierr =
MAX(*ierr, curr_ierr);
3676 if ((curr_action ==
NONE) || (curr_action ==
REDUCTION))
continue;
3684 (with_frac_mask && (send_frac_mask != NULL)) ||
3686 "ERROR(yac_cput_frac): interpolation for field \"%s\" was built for "
3687 "dynamic fractional masking, but no mask was provided",
3690 (!with_frac_mask && (send_frac_mask == NULL)) ||
3692 "ERROR(yac_cput_frac): interpolation for field \"%s\" was not built "
3693 "for dynamic fractional masking, but a mask was provided",
3696 double *** send_field_ptr =
3698 double *** send_frac_mask_ptr =
3703 size_t num_src_fields =
3705 double const ** send_field_ptr_ =
3708 num_src_fields *
sizeof(*send_field_ptr_));
3712 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3713 send_field_ptr_[k] = send_field_ptr[i][j];
3716 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3717 send_field_ptr_[k] = send_frac_mask_ptr[i][j];
3721 free(send_field_ptr_);
3736 double ***
const send_field,
3749 int const recv_field_id,
3763 double *** send_field_ =
3765 double ** recv_field_ =
3769 send_field_id, recv_field_id,
collection_size, send_field_, recv_field_,
3770 send_info, recv_info, ierr);
3773 free(send_field_[0]);
3781 int const recv_field_id,
3786 double *send_frac_mask,
3789 double *src_field_buffer,
3792 double *src_frac_mask_buffer,
3803 double *** send_field_ =
3805 double *** send_frac_mask_ =
3809 double *** src_field_buffer_ =
3812 double *** src_frac_mask_buffer_ =
3813 src_frac_mask_buffer?
3819 send_field_, send_frac_mask_,
3820 src_field_buffer_, src_frac_mask_buffer_,
3821 send_info, recv_info, ierr);
3823 if (src_frac_mask_buffer) {
3824 free(src_frac_mask_buffer_[0]);
3825 free(src_frac_mask_buffer_);
3827 free(src_field_buffer_[0]);
3828 free(src_field_buffer_);
3829 if (send_frac_mask_) {
3830 free(send_frac_mask_[0]);
3831 free(send_frac_mask_);
3833 free(send_field_[0]);
3839 int const recv_field_id,
3844 double *src_field_buffer,
3853 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
3860 int const recv_field_id,
3865 double *send_frac_mask,
3877 double *** send_field_ =
3879 double *** send_frac_mask_ =
3881 double ** recv_field_ =
3885 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
3886 recv_field_, send_info, recv_info, ierr);
3889 free(send_field_[0]);
3891 free(send_frac_mask_[0]);
3892 free(send_frac_mask_);
3899 int const recv_field_id,
3901 double ** send_field,
3903 double ** recv_field,
3913 double *** send_field_;
3915 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
3918 send_field_id, recv_field_id,
collection_size, send_field_, recv_field,
3919 send_info, recv_info, ierr);
3921 free(send_field_[0]);
3927 int const recv_field_id,
3929 double ** send_field,
3931 double **src_field_buffer,
3943 double *** send_field_;
3945 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
3946 double *** src_field_buffer_ =
3952 src_field_buffer_, send_info, recv_info, ierr);
3954 free(src_field_buffer_[0]);
3955 free(src_field_buffer_);
3956 free(send_field_[0]);
3964 int const recv_field_id,
3966 double ** send_field,
3968 double ** send_frac_mask,
3970 double ** recv_field,
3979 double *** send_field_;
3980 double *** send_frac_mask_;
3983 &send_field_, &send_frac_mask_);
3986 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
3987 recv_field, send_info, recv_info, ierr);
3989 free(send_field_[0]);
3991 free(send_frac_mask_[0]);
3992 free(send_frac_mask_);
3997 int const recv_field_id,
3999 double ** send_field,
4001 double ** send_frac_mask,
4003 double ** src_field_buffer,
4006 double ** src_frac_mask_buffer,
4017 double *** send_field_;
4018 double *** send_frac_mask_;
4021 &send_field_, &send_frac_mask_);
4022 double *** src_field_buffer_ =
4025 double *** src_frac_mask_buffer_ =
4026 src_frac_mask_buffer?
4031 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
4032 src_field_buffer_, src_frac_mask_buffer_, send_info, recv_info, ierr);
4034 free(src_frac_mask_buffer_[0]);
4035 free(src_frac_mask_buffer_);
4036 free(src_field_buffer_[0]);
4037 free(src_field_buffer_);
4038 free(send_field_[0]);
4040 free(send_frac_mask_[0]);
4041 free(send_frac_mask_);
4047 int const recv_field_id,
4049 double ***
const send_field,
4051 double ***
const send_frac_mask,
4053 double ** recv_field,
4075 "ERROR(yac_cexchange_frac): "
4076 "collection size does not match with coupling configuration.")
4080 "ERROR(yac_cexchange_frac): more than one put per field is not supported "
4081 "for yac_cexchange_frac.")
4087 int send_with_frac_mask;
4092 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
4093 &send_with_frac_mask, &use_raw_exchange,
4094 &send_action, &send_ierr);
4097 send_with_frac_mask == (send_frac_mask != NULL),
4098 "ERROR(yac_cexchange_frac): source field \"%s\" was configured %s "
4099 "support for fractional masking, but %s fractional mask "
4100 "was provided to this call",
4102 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
4104 *send_info =
MAX(*send_info, send_action);
4105 *ierr =
MAX(*ierr, send_ierr);
4112 (send_action ==
NONE) ||
4131 double *** send_field_ptr =
4132 (send_field_acc == NULL)?send_field:send_field_acc;
4133 double *** send_frac_mask_ptr =
4134 (send_frac_mask_acc == NULL)?send_frac_mask:send_frac_mask_acc;
4137 if (get_interpolation != NULL) {
4140 get_interpolation == put_interpolation,
4141 "ERROR(yac_cexchange): send_field_id and recv_field_id do not match")
4143 if (send_with_frac_mask)
4145 put_interpolation, send_field_ptr, send_frac_mask_ptr, recv_field);
4148 put_interpolation, send_field_ptr, recv_field);
4153 if (send_with_frac_mask)
4155 put_interpolation, send_field_ptr, send_frac_mask_ptr);
4163 int const recv_field_id,
4165 double ***
const send_field,
4167 double ***
const send_frac_mask,
4169 double ***src_field_buffer,
4173 double ***src_frac_mask_buffer,
4200 int recv_with_frac_mask =
4204 if (recv_with_frac_mask)
4206 recv_field_id,
collection_size, src_field_buffer, src_frac_mask_buffer,
4216 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
4217 "ERROR(yac_cexchange_raw_frac): target field \"%s\" was configured %s "
4218 "support for fractional masking, but %s source fractional mask buffer "
4219 "was provided to this call",
4221 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
4226 "ERROR(yac_cexchange_raw_frac): "
4227 "collection size does not match with coupling configuration.")
4231 "ERROR(yac_cexchange_raw_frac): "
4232 "more than one put per field is not supported for yac_cexchange_frac.")
4236 "ERROR(yac_cexchange_raw_frac): "
4237 "source field \"%s\" is not configured for raw data exchange",
4244 int send_with_frac_mask;
4249 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
4250 &send_with_frac_mask, &use_raw_exchange,
4251 &send_action, &send_ierr);
4254 (put_interpolation_exchange == NULL) ||
4255 (send_with_frac_mask == recv_with_frac_mask),
4256 "ERROR(yac_cexchange_raw_frac): fractional mask configuration for "
4257 "source field \"%s\" and target field \"%s\" does not match",
4262 send_with_frac_mask == (send_frac_mask != NULL),
4263 "ERROR(yac_cexchange_raw_frac): source field \"%s\" was configured %s "
4264 "support for fractional masking, but %s fractional mask "
4265 "was provided to this call",
4267 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
4269 *send_info =
MAX(*send_info, send_action);
4270 *ierr =
MAX(*ierr, send_ierr);
4277 (send_action ==
NONE) ||
4279 if (recv_with_frac_mask)
4281 recv_field_id,
collection_size, src_field_buffer, src_frac_mask_buffer,
4302 size_t num_src_fields;
4304 recv_cpl_field, &num_src_fields, NULL);
4306 double const ** send_field_ptr_ =
4309 num_src_fields *
sizeof(*send_field_ptr_));
4313 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4314 send_field_ptr_[k] = send_field_acc[i][j];
4315 if (send_with_frac_mask)
4317 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4318 send_field_ptr_[k] = send_frac_mask_acc[i][j];
4322 get_interpolation_exchange == put_interpolation_exchange,
4323 "ERROR(yac_cexchange_raw_frac): "
4324 "send_field_id and recv_field_id do not match")
4327 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
4328 "ERROR(yac_cexchange_raw_frac): target field \"%s\" was configured %s "
4329 "support for fractional masking, but %s fractional mask buffer"
4330 "was provided to this call",
4332 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
4334 double ** src_field_buffer_ =
4337 num_src_fields *
sizeof(*src_field_buffer_));
4341 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4342 src_field_buffer_[k] = src_field_buffer[i][j];
4343 if (recv_with_frac_mask)
4345 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4346 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
4350 put_interpolation_exchange, send_field_ptr_, src_field_buffer_,
4351 "yac_cexchange_raw_frac");
4353 free(src_field_buffer_);
4354 free(send_field_ptr_);
4359 int const recv_field_id,
4361 double ***
const send_field,
4363 double ** recv_field,
4370 send_field, NULL, recv_field, send_info, recv_info, ierr);
4374 int const recv_field_id,
4376 double ***
const send_field,
4378 double ***src_field_buffer,
4388 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
4404 int yac_instance_id,
char const ** comp_names,
int num_comp_names ){
4407 comp_names, (
size_t)num_comp_names);
4411 char const ** comp_names,
int num_comp_names ){
4434 int yac_instance_id,
int emit_flags,
char ** config) {
4454 const char* grid_name,
const char* field_name){
4459 return cpl_field != NULL;
4463 const char* comp_name,
const char* grid_name,
const char* field_name){
4471 const char* grid_name,
const char* field_name){
4477 "ERROR(yac_cget_field_id_instance): "
4478 "no field '%s' defined on the local process for "
4479 "component '%s' and grid '%s'", field_name, comp_name, grid_name);
4486 grid_name, field_name);
4516 int yac_instance_id,
const char* comp_name ) {
4522 size_t nbr_couple_config_grids =
4526 "ERROR(yac_cget_comp_grid_names_instance):"
4527 "Invalid comp_name. (NULL is not allowed)");
4529 int nbr_comp_grids = 0;
4530 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
4532 yac_instance_id, comp_name,
4535 return nbr_comp_grids;
4544 const char* grid_name) {
4551 size_t nbr_comp_fields =
4553 for(
size_t field_idx=0; field_idx<nbr_comp_fields; ++field_idx)
4558 couple_config, comp_idx, field_idx)))
4569 int yac_instance_id,
int nbr_comps,
const char ** comp_names) {
4575 size_t nbr_couple_config_comps =
4579 (
size_t)nbr_comps == nbr_couple_config_comps,
4580 "ERROR(yac_cget_comp_names_instance): "
4581 "invalid array size (nbr_comps = %d; nbr_couple_config_comps = %zu)",
4582 nbr_comps, nbr_couple_config_comps);
4584 for(
size_t i = 0; i < nbr_couple_config_comps; ++i)
4595 int yac_instance_id,
int nbr_grids,
const char **
grid_names ) {
4601 size_t nbr_couple_config_grids =
4605 (
size_t)nbr_grids == nbr_couple_config_grids,
4606 "ERROR(yac_cget_grid_names_instance): "
4607 "invalid array size (nbr_grids = %d, nbr_couple_config_grids = %zu)",
4608 nbr_grids, nbr_couple_config_grids);
4610 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
4620 int yac_instance_id,
const char* comp_name,
4627 size_t nbr_couple_config_grids =
4631 "ERROR(yac_cget_comp_grid_names_instance): "
4632 "Invalid comp_name. (NULL is not allowed)");
4634 size_t nbr_comp_grid = 0;
4635 for(
size_t i = 0; i < nbr_couple_config_grids; ++i) {
4637 const char* curr_grid_name =
4641 yac_instance_id, comp_name, curr_grid_name) > 0) {
4644 nbr_comp_grid < (
size_t)nbr_grids,
4645 "ERROR(yac_cget_comp_grid_names_instance): "
4646 "invalid array size (nbr_grids = %d; nbr_comp_grid > %zu)",
4647 nbr_grids, nbr_comp_grid);
4655 nbr_comp_grid == (
size_t)nbr_grids,
4656 "ERROR(yac_cget_comp_grid_names_instance): "
4657 "invalid array size (nbr_grids = %d; nbr_comp_grid = %zu)",
4658 nbr_grids, nbr_comp_grid);
4668 const char * comp_name,
const char* grid_name,
4676 size_t nbr_comp_fields =
4679 size_t nbr_comp_grid_fields = 0;
4680 for(
size_t field_idx = 0; field_idx < nbr_comp_fields; ++field_idx) {
4685 couple_config, comp_idx, field_idx))) {
4689 "ERROR(yac_cget_field_names_instance): "
4690 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields > %zu",
4695 nbr_comp_grid_fields++;
4701 "ERROR(yac_cget_field_names_instance): "
4702 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields = %zu",
4716 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4723 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4731 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4738 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4745 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4752 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4759 int yac_instance_id,
const char* comp_name,
const char* grid_name,
4760 const char* field_name ) {
4767 couple_config, comp_name, grid_name, field_name);
4771 const char* field_name ) {
4774 grid_name, field_name);
4778 int yac_instance_id,
const char* comp_name,
const char* grid_name,
4779 const char* field_name) {
4785 comp_name, grid_name, field_name);
4789 const char* comp_name,
const char* grid_name,
const char* field_name ) {
4795 comp_name, grid_name, field_name);
4799 const char* comp_name,
const char* grid_name,
const char* field_name) {
4807 const char* grid_name,
const char* field_name ) {
4810 grid_name, field_name);
4814 const char* grid_name,
const char* field_name ) {
4821 couple_config, comp_name, grid_name, field_name);
4825 const char* field_name ) {
4828 grid_name, field_name);
4833 const char* tgt_field_name,
const char** src_comp_name,
4847 const char* tgt_field_name,
const char** src_comp_name,
4859 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4860 double *x_vertices,
double *y_vertices,
int *
grid_id) {
4862 size_t nbr_vertices_size_t[2] =
4863 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
4871 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices));
4877 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4878 double *x_vertices,
double *y_vertices,
int *
grid_id) {
4880 size_t nbr_vertices_size_t[2] =
4881 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
4889 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices));
4895 const char * grid_name,
int nbr_vertices,
4896 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
4903 "yac_cdef_grid_unstruct");
4909 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
4916 const char * grid_name,
int nbr_vertices,
4917 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
4924 "yac_cdef_grid_unstruct_ll");
4930 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
4937 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
4938 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
4939 int *cell_to_edge,
int *edge_to_vertex,
int *
grid_id) {
4944 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges,
4945 "yac_cdef_grid_unstruct_edge");
4951 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
4952 num_edges_per_cell, x_vertices, y_vertices,
4953 cell_to_edge, edge_to_vertex));
4959 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
4960 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
4961 int *cell_to_edge,
int *edge_to_vertex,
int *
grid_id) {
4963 check_x_vertices(x_vertices, nbr_vertices,
"yac_cdef_grid_unstruct_edge_ll");
4964 check_y_vertices(y_vertices, nbr_vertices,
"yac_cdef_grid_unstruct_edge_ll");
4966 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges,
4967 "yac_cdef_grid_unstruct_edge_ll");
4973 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
4974 num_edges_per_cell, x_vertices, y_vertices,
4975 cell_to_edge, edge_to_vertex));
4981 const char * grid_name,
int nbr_points,
4982 double *x_points,
double *y_points,
int *
grid_id) {
4991 (
size_t)nbr_points, x_points, y_points));
4997 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4998 double *x_vertices,
double *y_vertices,
4999 double x_north_pole,
double y_north_pole,
int *
grid_id) {
5001 size_t nbr_vertices_size_t[2] =
5002 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
5010 nbr_vertices_size_t,
cyclic, x_vertices, y_vertices,
5011 x_north_pole, y_north_pole));
5029 yac_int ** grid_global_ids,
size_t * count) {
5034 yac_int ** temp_grid_global_ids;
5038 "ERROR(%s): invalid location (%d)", caller,
location);
5040 temp_grid_global_ids = &(
grid_data->cell_ids);
5045 temp_grid_global_ids = &(
grid_data->vertex_ids);
5050 temp_grid_global_ids = &(
grid_data->edge_ids);
5056 if (*temp_grid_global_ids == NULL) {
5057 *temp_grid_global_ids =
xmalloc(*count *
sizeof(**temp_grid_global_ids));
5060 *grid_global_ids = *temp_grid_global_ids;
5071 &grid_global_ids, &count);
5083 "yac_cset_global_index",
location,
grid_id, &grid_global_ids, &count);
5085 for (
size_t i = 0; i < count; ++i) {
5098 int ** grid_core_mask;
5105 "ERROR(yac_cset_core_mask): invalid location")
5108 grid_core_mask = &(
grid_data->core_cell_mask);
5113 grid_core_mask = &(
grid_data->core_vertex_mask);
5119 grid_core_mask = &(
grid_data->core_edge_mask);
5125 size_t core_mask_size = count *
sizeof(**grid_core_mask);
5126 if (*grid_core_mask == NULL) *grid_core_mask =
xmalloc(core_mask_size);
5127 memcpy(*grid_core_mask, is_core, core_mask_size);
5173 *interp_stack_config_id =
5182 interp_stack_config_id,
"interp_stack_config_id");
5199 int interp_stack_config_id,
5200 int reduction_type,
int partial_coverage) {
5204 interp_stack_config_id,
"interp_stack_config_id");
5210 "ERROR(yac_add_interp_stack_config_average): invalid reduction type")
5218 int interp_stack_config_id,
5223 interp_stack_config_id,
"interp_stack_config_id");
5228 "ERROR(yac_add_interp_stack_config_ncc): invalid reduction type")
5236 int interp_stack_config_id,
5237 int type,
size_t n,
double max_search_distance,
double scale) {
5241 interp_stack_config_id,
"interp_stack_config_id");
5249 "ERROR(yac_add_interp_stack_config_nnn): invalid weightening type")
5253 max_search_distance,
scale);
5257 int interp_stack_config_id,
5262 interp_stack_config_id,
"interp_stack_config_id");
5269 "ERROR(yac_cadd_interp_stack_config_dnn): invalid weight type")
5274 "ERROR(yac_cadd_interp_stack_config_dnn): invalid search distance type")
5277 interp_stack_config,
5284 int interp_stack_config_id,
5285 size_t n,
double max_search_distance,
double scale) {
5289 interp_stack_config_id,
"interp_stack_config_id");
5292 interp_stack_config, n, max_search_distance,
scale);
5296 int interp_stack_config_id,
int order,
int enforced_conserv,
5297 int partial_coverage,
int normalisation) {
5301 interp_stack_config_id,
"interp_stack_config_id");
5306 "ERROR(yac_add_interp_stack_config_conservative):"
5307 "invalid normalisation type")
5310 interp_stack_config, order, enforced_conserv, partial_coverage,
5317 xmalloc(1 *
sizeof(*ext_spmap_config));
5344 ext_spmap_config_id,
"ext_spmap_config_id");
5357 free(ext_spmap_config);
5361 int ext_spmap_config_id,
double spread_distance) {
5365 ext_spmap_config_id,
"ext_spmap_config_id");
5371 int ext_spmap_config_id,
double max_search_distance) {
5375 ext_spmap_config_id,
"ext_spmap_config_id");
5385 ext_spmap_config_id,
"ext_spmap_config_id");
5390 "ERROR(yac_cset_ext_spmap_config_weight_type): invalid weight type");
5397 int ext_spmap_config_id,
int scale_type) {
5401 ext_spmap_config_id,
"ext_spmap_config_id");
5408 "ERROR(yac_cset_ext_spmap_config_scale_type): invalid scaling type");
5415 int ext_spmap_config_id,
double sphere_radius) {
5419 ext_spmap_config_id,
"ext_spmap_config_id");
5433 int ext_spmap_config_id,
double sphere_radius) {
5437 ext_spmap_config_id,
"ext_spmap_config_id");
5451 int ext_spmap_config_id,
char const * filename,
5452 char const * varname,
int min_global_id) {
5456 ext_spmap_config_id,
"ext_spmap_config_id");
5459 (filename != NULL) && (*filename !=
'\0'),
5460 "ERROR(yac_cset_ext_spmap_config_src_cell_area_config_file): "
5461 "missing file name");
5464 (varname != NULL) && (*varname !=
'\0'),
5465 "ERROR(yac_cset_ext_spmap_config_src_cell_area_config_file): "
5466 "missing variable name");
5485 int ext_spmap_config_id,
char const * filename,
5486 char const * varname,
int min_global_id) {
5490 ext_spmap_config_id,
"ext_spmap_config_id");
5493 (filename != NULL) && (*filename !=
'\0'),
5494 "ERROR(yac_cset_ext_spmap_config_tgt_cell_area_config_file): "
5495 "missing file name");
5498 (varname != NULL) && (*varname !=
'\0'),
5499 "ERROR(yac_cset_ext_spmap_config_tgt_cell_area_config_file): "
5500 "missing variable name");
5521 xmalloc(1 *
sizeof(*spmap_overwrite_config));
5540 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5542 free(spmap_overwrite_config);
5546 int spmap_overwrite_config_id,
double center_lon,
double center_lat,
5551 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5564 int spmap_overwrite_config_id,
double spread_distance) {
5568 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5574 int spmap_overwrite_config_id,
double max_search_distance) {
5578 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5588 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5593 "ERROR(yac_cset_spmap_overwrite_config_weight_type): invalid weight type");
5600 int interp_stack_config_id,
double spread_distance,
5601 double max_search_distance,
int weight_type,
int scale_type,
5602 double src_sphere_radius,
char const * src_filename,
5603 char const * src_varname,
int src_min_global_id,
5604 double tgt_sphere_radius,
char const * tgt_filename,
5605 char const * tgt_varname,
int tgt_min_global_id) {
5609 interp_stack_config_id,
"interp_stack_config_id");
5614 "ERROR(yac_add_interp_stack_config_spmap):"
5615 "invalid weightening type")
5622 "ERROR(yac_add_interp_stack_config_spmap):"
5623 "invalid scaling type")
5626 interp_stack_config, spread_distance, max_search_distance,
5629 src_sphere_radius, src_filename, src_varname, src_min_global_id,
5630 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
5638 switch (config.
type) {
5640 "ERROR(generate_cell_area_config): invalid cell area config type");
5655 return cell_area_config;
5659 int spmap_overwrite_config_id) {
5663 spmap_overwrite_config_id,
"spmap_overwrite_config_id");
5670 "ERROR(generate_overwrite_config): missing point selection type");
5674 "ERROR(generate_overwrite_config): invalid point selection type");
5676 src_point_selection =
5700 return overwrite_config;
5704 int interp_stack_config_id,
int ext_spmap_config_id,
5705 int * spmap_overwrite_config_ids,
int spmap_overwrite_config_count) {
5709 interp_stack_config_id,
"interp_stack_config_id");
5713 ext_spmap_config_id,
"ext_spmap_config_id");
5722 ext_spmap_config->
scale_type, src_cell_area_config, tgt_cell_area_config);
5733 (spmap_overwrite_config_count > 0)?
5735 ((
size_t)spmap_overwrite_config_count + 1),
5736 sizeof(*overwrite_configs)):NULL;
5738 for (
int i = 0; i < spmap_overwrite_config_count; ++i) {
5739 overwrite_configs[i] =
5744 interp_stack_config, spmap_config, overwrite_configs);
5746 for (
int i = 0; i < spmap_overwrite_config_count; ++i) {
5749 free(overwrite_configs);
5755 int interp_stack_config_id,
double spread_distance,
5756 double max_search_distance,
int weight_type,
int scale_type,
5757 double src_sphere_radius,
char const * src_filename,
5758 char const * src_varname,
int src_min_global_id,
5759 double tgt_sphere_radius,
char const * tgt_filename,
5760 char const * tgt_varname,
int tgt_min_global_id,
5761 int * overwrite_config_ids,
int overwrite_config_count) {
5763 if (src_filename && (src_filename[0] ==
'\0')) src_filename = NULL;
5764 if (src_varname && (src_varname[0] ==
'\0')) src_varname = NULL;
5765 if (tgt_filename && (tgt_filename[0] ==
'\0')) tgt_filename = NULL;
5766 if (tgt_varname && (tgt_varname[0] ==
'\0')) tgt_varname = NULL;
5768 if (overwrite_config_count == 0) {
5771 interp_stack_config_id, spread_distance, max_search_distance,
5773 src_sphere_radius, src_filename, src_varname, src_min_global_id,
5774 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
5779 overwrite_config_ids,
5780 "ERROR(yac_cadd_interp_stack_config_spmap_f2c): "
5781 "missing overwrite configuration ids");
5783 int ext_spmap_config_id;
5786 ext_spmap_config_id, spread_distance);
5788 ext_spmap_config_id, max_search_distance);
5792 if (src_filename != NULL) {
5794 src_varname != NULL,
5795 "ERROR(yac_cadd_interp_stack_config_spmap_f2c): source file name "
5796 "\"%s\" was provided, but variable name is missing", src_filename);
5799 "ERROR(yac_cadd_interp_stack_config_spmap_f2c): source file name "
5800 "\"%s\" was provided, but sphere radius is set as well", src_filename);
5802 ext_spmap_config_id, src_filename, src_varname, src_min_global_id);
5805 ext_spmap_config_id, src_sphere_radius);
5808 if (tgt_filename != NULL) {
5810 tgt_varname != NULL,
5811 "ERROR(yac_cadd_interp_stack_config_spmap_f2c): target file name "
5812 "\"%s\" was provided, but variable name is missing", tgt_filename);
5815 "ERROR(yac_cadd_interp_stack_config_spmap_f2c): target file name "
5816 "\"%s\" was provided, but sphere radius is set as well", tgt_filename);
5818 ext_spmap_config_id, tgt_filename, tgt_varname, tgt_min_global_id);
5821 ext_spmap_config_id, tgt_sphere_radius);
5825 interp_stack_config_id, ext_spmap_config_id,
5826 overwrite_config_ids, overwrite_config_count);
5836 interp_stack_config_id,
"interp_stack_config_id");
5842 int interp_stack_config_id,
char const * filename,
5843 int on_missing_file,
int on_succes) {
5847 interp_stack_config_id,
"interp_stack_config_id");
5852 "ERROR(yac_cadd_interp_stack_config_user_file_2):"
5853 "invalid on_missing_file value")
5858 "ERROR(yac_cadd_interp_stack_config_user_file_2):"
5859 "invalid on_succes value")
5862 interp_stack_config, filename,
5868 int interp_stack_config_id,
char const * filename) {
5871 interp_stack_config_id, filename,
5877 int interp_stack_config_id,
double value) {
5881 interp_stack_config_id,
"interp_stack_config_id");
5887 int interp_stack_config_id,
char const * constructor_key,
5888 char const * do_search_key) {
5892 interp_stack_config_id,
"interp_stack_config_id");
5895 interp_stack_config, constructor_key, do_search_key);
5899 int interp_stack_config_id,
int creep_distance) {
5903 interp_stack_config_id,
"interp_stack_config_id");
5909 int interp_stack_config_id,
char const * func_compute_weights_key) {
5913 interp_stack_config_id,
"interp_stack_config_id");
5916 interp_stack_config, func_compute_weights_key);
5932 char const * interp_stack_config,
int parse_flags) {
5942 interp_stack_config, parse_flags);
5944 int interp_stack_config_id =
5948 return interp_stack_config_id;
5952 char const * interp_stack_config,
int * interp_stack_config_id) {
5954 *interp_stack_config_id =
5960 char const * interp_stack_config,
int * interp_stack_config_id) {
5962 *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_grid_set_metadata(struct yac_couple_config *couple_config, char const *grid_name, const char *metadata)
int yac_couple_config_field_is_valid(struct yac_couple_config *couple_config, size_t component_idx, size_t field_idx)
void yac_couple_config_get_field_source(struct yac_couple_config *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_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)
size_t yac_couple_config_get_num_fields(struct yac_couple_config *couple_config, size_t component_idx)
char const * yac_couple_config_get_field_timestep(struct yac_couple_config *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 *couple_config, char const *component_name, char const *grid_name, char const *field_name)
void yac_couple_config_field_set_metadata(struct yac_couple_config *couple_config, const char *comp_name, const char *grid_name, const char *field_name, const char *metadata)
char const * yac_couple_config_get_field_name(struct yac_couple_config *couple_config, size_t component_idx, size_t field_idx)
void yac_couple_config_component_set_metadata(struct yac_couple_config *couple_config, char const *comp_name, const char *metadata)
size_t yac_couple_config_get_field_collection_size(struct yac_couple_config *couple_config, char const *component_name, char const *grid_name, char const *field_name)
double yac_couple_config_get_frac_mask_fallback_value(struct yac_couple_config *couple_config, char const *component_name, char const *grid_name, char const *field_name)
const char * yac_couple_config_field_get_metadata(struct yac_couple_config *couple_config, const char *comp_name, const char *grid_name, const char *field_name)
const char * yac_couple_config_grid_get_metadata(struct yac_couple_config *couple_config, const char *grid_name)
const char * yac_couple_config_component_get_metadata(struct yac_couple_config *couple_config, const char *comp_name)
size_t yac_couple_config_get_component_idx(struct yac_couple_config *couple_config, char const *component_name)
char const * yac_couple_config_get_grid_name(struct yac_couple_config *couple_config, size_t grid_idx)
void yac_couple_config_grid_set_output_filename(struct yac_couple_config *couple_config, char const *grid_name, const char *output_filename)
char const * yac_couple_config_get_component_name(struct yac_couple_config *couple_config, size_t component_idx)
size_t yac_couple_config_get_num_grids(struct yac_couple_config *couple_config)
char const * yac_couple_config_get_field_grid_name(struct yac_couple_config *couple_config, size_t component_idx, size_t field_idx)
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)
size_t yac_couple_config_get_num_components(struct yac_couple_config *couple_config)
@ 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)
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)
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.
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)
struct yac_instance * yac_instance_new(MPI_Comm comm)
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_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)
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)
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()
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_async(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
Execute the get phase asynchronously.
void yac_interpolation_exchange_execute_get(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
Execute the get phase and receive target data synchronously.
void yac_interpolation_exchange_wait(struct yac_interpolation_exchange *exchange, char const *routine_name)
Wait for completion of pending put/get phases.
void yac_interpolation_exchange_execute_put(struct yac_interpolation_exchange *exchange, double const **send_data, char const *routine_name)
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(struct yac_interpolation_exchange *exchange, double const **send_data_, double **recv_data_, char const *routine_name)
Execute the full exchange (put + get) synchronously.
Interpolation exchange object for temporary buffers and MPI exchanges.
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
enum yac_field_exchange_type exchange_type
struct yac_interpolation * interpolation
enum yac_reduction_type time_operation
enum yac_action_type action
size_t * num_tgt_per_fixed_value
double frac_mask_fallback_value
struct yac_cell_area_config::@75::@76 yac
struct yac_cell_area_config::@75::@77 file
enum yac_interp_spmap_cell_area_provider type
union yac_cell_area_config::@75 data
size_t num_src_mask_names
char * yaxt_exchanger_name
struct yac_collection_selection * collection_selection
int weight_file_on_existing
struct yac_ext_spmap_config_overwrite_config::@78::@79::@80 bnd_circle
enum yac_point_selection_type type
double max_search_distance
struct yac_ext_spmap_config_overwrite_config::@78 src_point_selection
enum yac_interp_spmap_weight_type weight_type
union yac_ext_spmap_config_overwrite_config::@78::@79 data
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
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::@47::@48 bnd_circle
struct yac_point_selection * src_point_selection
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[])
static char * yac_version
int const YAC_YEAR_OF_365_DAYS
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)
int const YAC_ACTION_PUT_FOR_CHECKPOINT
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 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)
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)
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)
void yac_cset_global_index_yac_int(yac_int const *global_index, int location, int grid_id)
static int yac_init(MPI_Comm comm)
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 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_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)
int yac_cget_role_from_field_id(int field_id)
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)
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)
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 int user_input_data_add_mask(struct yac_basic_grid *grid, enum yac_location location, int const *is_valid, size_t nbr_points, char const *name)
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)
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)
static void yac_free_masks()
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)
static void yac_free_components()
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)
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_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 const YAC_FILE_SUCCESS_STOP
static struct user_input_data_component ** components
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_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 struct user_input_data_masks ** masks
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)
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)
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_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 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_grid_metadata_instance(int yac_instance_id, const char *grid_name, const char *metadata)
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)
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)
static struct user_input_data_component * get_user_input_data_component(int comp_id, char const *routine)
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_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)
const char * yac_cget_field_datetime(int field_id)
int const YAC_CONSERV_DESTAREA
void yac_cget(int const field_id, int collection_size, double **recv_field, int *info, int *ierr)
static size_t num_components
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)
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)
static void yac_free_interp_stack_configs()
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)
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_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)
static int yac_pointer_to_unique_id(void *pointer)
void check_mpi_initialised(char const *routine_name)
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)
static struct user_input_data_points ** points
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)
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 void yac_free_points()
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
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)
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()
static size_t num_interp_stack_configs
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
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_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 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 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)
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)
static int user_input_data_add_points(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates)
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)
int const YAC_CALENDAR_NOT_SET
void yac_cset_grid_output_file(const char *gridname, const char *filename)
void yac_cadd_interp_stack_config_nnn(int interp_stack_config_id, int type, size_t n, double max_search_distance, double scale)
@ YAC_CONFIG_OUTPUT_SYNC_LOC_ENDDEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_SYNC_DEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_DEF_COMP_
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)
static struct yac_interp_stack_config ** interp_stack_configs
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)
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)
struct yac_basic_grid ** grids
void yac_cget_raw_ptr_(int const field_id, int const collection_size, double **src_field_buffer, int *info, int *ierr)
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)
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_grids()
#define YAC_UNREACHABLE_DEFAULT_F(format,...)
#define YAC_ASSERT_F(exp, format,...)
#define YAC_UNREACHABLE_DEFAULT(msg)
int yac_mpi_is_initialised()
void yac_yaxt_init(MPI_Comm comm)
#define yac_mpi_call(call, comm)
double(* yac_coordinate_pointer)[3]