202 "ERROR(yac_unique_id_to_pointer): invalid %s", id_name)
244 "ERROR(yac_add_grid): multiple definitions of grid with identical name")
248 "ERROR(yac_add_grid): grid name is too long (maximum is YAC_MAX_CHARLEN)")
318 "ERROR(%s): no default yac instance is defined yet", routine_name)
328 char recv_version[64];
333 yac_version_len <=
sizeof(recv_version),
334 "ERROR(yac_check_version): "
335 "version string \"%s\" is too long (has to be shorter than %zu)",
338 if (comm_rank == 0) strcpy(recv_version,
yac_version);
341 MPI_Bcast(recv_version, (
int)yac_version_len, MPI_CHAR, 0, comm), comm);
345 "ERROR(yac_check_version): inconsistent yac versions between processes "
346 "(on local process \"%s\"; on root \"%s\")",
yac_version, recv_version)
354 "MPI has not yet been initialised, but this call got a "
355 "communicator which is not allowed by the MPI standard "
356 "(MPI_COMM_WORLD is not to be used before the call to "
357 "MPI_Init or MPI_Init_thread)", routine_name);
361 MPI_Comm * group_comms) {
367 MPI_Fint * group_comms) {
368 MPI_Comm comm_c = MPI_Comm_f2c(comm);
369 MPI_Comm * group_comms_c =
xmalloc(n*
sizeof(*group_comms_c));
371 for(
int i = 0; i<n; ++i)
372 group_comms[i] = MPI_Comm_c2f(group_comms_c[i]);
382 int comm_rank, comm_size;
398 MPI_Comm comm,
int * yac_instance_id) {
404 MPI_Fint comm,
int * yac_instance_id) {
413 "ERROR(yac_cinit_comm): default yac instance already defined")
424 int * yac_instance_id) {
429 const char* group_name =
"yac";
438 "ERROR(yac_cinit_comm): default yac instance already defined")
482 const char * yaml_filename) {
496 const char * yaml_filename) {
512 int yac_instance_id,
const char * filename,
int fileformat,
513 int sync_location,
int include_definitions) {
520 "ERROR(yac_cset_config_output_file_instance): filename is NULL")
524 "ERROR(yac_cset_config_output_file_instance): invalid file format")
529 "ERROR(yac_cset_config_output_file_instance): invalid file format")
531 char const * output_refs[] =
539 output_refs[sync_location], include_definitions);
543 const char * filename,
int filetype,
int sync_location,
544 int include_definitions) {
549 include_definitions);
555 int yac_instance_id,
const char * gridname,
const char * filename) {
562 "ERROR(yac_cset_grid_output_file_instance): gridname is NULL")
565 "ERROR(yac_cset_grid_output_file_instance): filename is NULL")
648 int yac_instance_id,
const char * start_datetime,
649 const char * end_datetime) {
653 start_datetime, end_datetime);
657 const char * end_datetime ) {
670 "ERROR(yac_cdef_calendar): invalid calendar type")
672 calendarType curr_calendar = getCalendarType();
674 (curr_calendar == CALENDAR_NOT_SET) ||
675 (curr_calendar == (calendarType)calendar),
676 "ERROR(yac_cdef_calendar): inconsistent calendar definition")
678 initCalendar((calendarType)calendar);
683 return (
int)getCalendarType();
728 int comp_id,
char const * routine) {
735 "ERROR(%s): instance of component \"%s\" is already finalized",
736 routine, comp_info->
name);
752 comp_info->
instance, (
char const **)&(comp_info->
name), 1);
762 *comp_comm_f = MPI_Comm_c2f(comp_comm);
787 char const ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
792 comp_names, (
size_t)num_comps);
796 const char ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
807 char const ** comp_names,
int num_comps, MPI_Fint * comps_comm_f) {
811 yac_instance_id, comp_names, num_comps, &comps_comm);
812 *comps_comm_f = MPI_Comm_c2f(comps_comm);
816 char const ** comp_names,
int num_comps, MPI_Fint *comps_comm_f) {
820 *comps_comm_f = MPI_Comm_c2f(comps_comm);
826 int yac_instance_id,
char const *
name,
int * comp_id){
833 "ERROR(yac_cpredef_comp_instance): components have already been defined");
836 (name != NULL) && (*name !=
'\0'),
837 "ERROR(yac_cpredef_comp_instance): missing component name");
843 "ERROR(yac_cpredef_comp_instance): "
844 "component \"%s\" is already defined", name);
864 int yac_instance_id,
char const ** comp_names,
int num_comps,
870 for(
int i = 0; i<num_comps; ++i)
874 size_t comp_counter = 0;
885 free(all_comp_names);
889 char const ** comp_names,
int num_comps,
int * comp_ids ) {
897 int yac_instance_id,
char const * comp_name,
int * comp_id ) {
930 double const * x_vertices,
size_t count,
char const * routine_name) {
932 for (
size_t i = 0; i < count; ++i)
934 (x_vertices[i] >= -720.0) && (x_vertices[i] <= 720.0),
935 "ERROR(%s): x_vertices[%zu] = %lf outside of valid range [-720;720]",
936 routine_name, i, x_vertices[i]);
940 double const * y_vertices,
size_t count,
char const * routine_name) {
942 for (
size_t i = 0; i < count; ++i)
944 (y_vertices[i] >= -90.00001) && (y_vertices[i] <= 90.00001),
945 "ERROR(%s): y_vertices[%zu] = %lf "
946 "outside of valid range [-90.00001;90.00001]",
947 routine_name, i, y_vertices[i]);
951 int *cell_to_vertex,
int *num_vertices_per_cell,
int nbr_cells,
952 int nbr_vertices,
char const * routine_name) {
955 for (
int i = 0; i < nbr_cells; ++i) {
957 num_vertices_per_cell[i] >= 0,
958 "ERROR(%s): num_vertices_per_cell[%d] = %d ",
959 routine_name, i, num_vertices_per_cell[i]);
960 count += num_vertices_per_cell[i];
962 for (
size_t i = 0; i < count; ++i)
964 (cell_to_vertex[i] >= 0) && (cell_to_vertex[i] < nbr_vertices),
965 "ERROR(%s): cell_to_vertex[%zu] = %d "
966 "invalid value (nbr_vertices = %d)",
967 routine_name, i, cell_to_vertex[i], nbr_vertices);
971 int *cell_to_edge,
int *num_edges_per_cell,
int nbr_cells,
972 int nbr_edges,
char const * routine_name) {
975 for (
int i = 0; i < nbr_cells; ++i) {
977 num_edges_per_cell[i] >= 0,
978 "ERROR(%s): num_edges_per_cell[%d] = %d ",
979 routine_name, i, num_edges_per_cell[i]);
980 count += num_edges_per_cell[i];
982 for (
size_t i = 0; i < count; ++i)
984 (cell_to_edge[i] >= 0) && (cell_to_edge[i] < nbr_edges),
985 "ERROR(%s): cell_to_edge[%zu] = %d "
986 "invalid value (nbr_edges = %d)",
987 routine_name, i, cell_to_edge[i], nbr_edges);
993 int const *nbr_points,
995 double const *x_points,
996 double const *y_points,
1004 "ERROR(yac_cdef_points_reg2d): "
1005 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1009 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) ==
num_points,
1010 "ERROR(yac_cdef_points_reg2d): nbr_points does not match with grid")
1013 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_reg2d");
1015 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_reg2d");
1019 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1020 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1021 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1029 int const *nbr_points,
1031 double const *x_points,
1032 double const *y_points,
1040 "ERROR(yac_cdef_points_curve2d): "
1041 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1045 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) ==
num_points,
1046 "ERROR(yac_cdef_points_curve2d): nbr_points does not match with grid"
1047 " (%zu*%zu != %zu)",
1048 (
size_t)nbr_points[0], (
size_t)nbr_points[1],
num_points)
1051 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_curve2d");
1053 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_curve2d");
1057 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1058 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1059 LLtoXYZ(x_points[k], y_points[k], coordinates[k]);
1067 int const nbr_points,
1069 double const *x_points,
1070 double const *y_points,
1078 "ERROR(yac_cdef_points_unstruct): nbr_points does not match with grid")
1080 check_x_vertices(x_points, (
size_t)nbr_points,
"yac_cdef_points_unstruct");
1081 check_y_vertices(y_points, (
size_t)nbr_points,
"yac_cdef_points_unstruct");
1084 xmalloc((
size_t)nbr_points *
sizeof(*coordinates));
1085 for (
int i = 0; i < nbr_points; ++i)
1086 LLtoXYZ(x_points[i], y_points[i], coordinates[i]);
1094 int const *nbr_points,
1096 double const *x_points,
1097 double const *y_points,
1098 double x_north_pole,
1099 double y_north_pole,
1107 "ERROR(yac_cdef_points_reg2d_rot): "
1108 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
1112 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) ==
num_points,
1113 "ERROR(yac_cdef_points_reg2d_rot): nbr_points does not match with grid")
1116 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_reg2d_rot");
1118 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_reg2d_rot");
1122 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
1123 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
1124 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
1126 double north_pole[3];
1127 LLtoXYZ(x_north_pole, y_north_pole, north_pole);
1137 int const * is_valid,
size_t nbr_points,
char const *
name) {
1155 int const nbr_points,
1157 int const * is_valid,
1166 "ERROR(yac_cdef_mask_named): nbr_points does not match with grid")
1170 grid, location, is_valid, (
size_t)nbr_points,
name);
1174 int const nbr_points,
1176 int const * is_valid,
1189 "ERROR(yac_cset_mask): default mask has already been set before")
1203 int const * point_ids,
1204 int const * mask_ids,
1205 int const num_pointsets,
1206 int collection_size,
1207 const char* timestep,
1213 "ERROR(yac_cdef_field_mask): invalid number of pointsets")
1216 point_ids != NULL,
"ERROR(yac_cdef_field_mask): no point_ids provided")
1224 (num_pointsets == 1)?
1226 xmalloc((
size_t)num_pointsets *
sizeof(*interp_fields));
1228 for (
int i = 0; i < num_pointsets; ++i) {
1235 "ERROR(yac_cdef_field_mask): grid of point_ids do not match")
1238 if (mask_ids[i] != INT_MAX) {
1245 "ERROR(yac_cdef_field_mask): "
1246 "grids of mask and points do not match")
1249 "ERROR(yac_cdef_field_mask): "
1250 "location of mask and points do not match")
1268 grid, interp_fields, num_pointsets, collection_size,
1271 if (num_pointsets > 1) free(interp_fields);
1276 int const * point_ids,
1277 int const num_pointsets,
1278 int collection_size,
1279 const char* timestep,
1285 "ERROR(yac_cdef_field): invalid number of pointsets")
1288 point_ids != NULL,
"ERROR(yac_cdef_field): no point_ids provided")
1290 int * mask_ids =
xmalloc((
size_t)num_pointsets *
sizeof(*mask_ids));
1292 for (
int i = 0; i < num_pointsets; ++i)
1299 name, comp_id, point_ids, mask_ids, num_pointsets,
1300 collection_size, timestep, time_unit, field_id);
1306 int yac_instance_id,
const char* comp_name,
const char* grid_name,
1307 const char* field_name,
double frac_mask_fallback_value) {
1313 couple_config, comp_name, grid_name, field_name,
1314 frac_mask_fallback_value);
1318 const char* comp_name,
const char* grid_name,
const char* field_name,
1319 double frac_mask_fallback_value) {
1323 frac_mask_fallback_value);
1327 const char* comp_name,
const char* metadata) {
1340 const char* metadata) {
1354 const char* grid_name,
const char* field_name,
const char* metadata) {
1363 const char* field_name,
const char* metadata) {
1366 field_name, metadata);
1370 const char* comp_name) {
1383 const char* grid_name) {
1396 const char* comp_name,
const char* grid_name,
const char* field_name) {
1405 const char* field_name) {
1408 grid_name, field_name);
1429 xmalloc(1 *
sizeof(*ext_couple_config));
1443 free(ext_couple_config);
1475 "ERROR(yac_cset_ext_couple_config_weight_file_on_existing_): "
1476 "\"%d\" is not a valid weight file on existing value "
1477 "(has to be YAC_WGT_ON_EXISTING_ERROR (%d), "
1478 "YAC_WGT_ON_EXISTING_KEEP(%d), or "
1479 "YAC_WGT_ON_EXISTING_OVERWRITE(%d))",
1505 "ERROR(yac_cset_ext_couple_config_mapping_side_): "
1506 "\"%d\" is not a valid mapping side (has to be 0 or 1)",
1529 "ERROR(yac_cset_ext_couple_config_scale_factor_): "
1552 "ERROR(yac_cset_ext_couple_config_scale_summand_): "
1669 int yac_instance_id,
1670 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1671 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1672 char const * coupling_timestep,
int time_unit,
int time_reduction,
1673 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1679 interp_stack_config_id,
"interp_stack_config_id");
1680 char const * coupling_timestep_iso8601 =
1683 src_comp_name, src_grid_name, src_field_name,
1684 tgt_comp_name, tgt_grid_name, tgt_field_name,
1685 coupling_timestep_iso8601, time_reduction,
1686 interp_stack_config, src_lag, tgt_lag,
1699 int yac_instance_id,
1700 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1701 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1702 char const * coupling_timestep,
int time_unit,
int time_reduction,
1703 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1704 int ext_couple_config_id) {
1707 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1708 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1709 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1714 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1715 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1716 char const * coupling_timestep,
int time_unit,
int time_reduction,
1717 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1718 int ext_couple_config_id) {
1722 src_comp_name, src_grid_name, src_field_name,
1723 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1724 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1729 int yac_instance_id,
1730 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1731 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1732 char const * coupling_timestep,
int time_unit,
int time_reduction,
1733 int interp_stack_config_id,
int src_lag,
int tgt_lag) {
1739 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1740 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1741 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1742 &ext_couple_config);
1746 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1747 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1748 char const * coupling_timestep,
int time_unit,
int time_reduction,
1749 int interp_stack_config_id,
int src_lag,
int tgt_lag){
1753 src_comp_name, src_grid_name, src_field_name,
1754 tgt_comp_name, tgt_grid_name, tgt_field_name,
1755 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
1760 int yac_instance_id,
1761 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1762 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1763 char const * coupling_timestep,
int time_unit,
int time_reduction,
1764 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1773 "ERROR(yac_cdef_couple_instance_): "
1798 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1799 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1800 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1801 &ext_couple_config);
1805 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1806 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1807 char const * coupling_timestep,
int time_unit,
int time_reduction,
1808 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1817 src_comp_name, src_grid_name, src_field_name,
1818 tgt_comp_name, tgt_grid_name, tgt_field_name,
1819 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
1829 int collection_size,
1830 int num_interp_fields,
1831 int const * interp_field_sizes ) {
1839 "ERROR(yac_ccheck_field_dimensions): mismatching collection sizes "
1840 "for component %s grid %s field %s (%d != %d)",
1852 "ERROR(yac_ccheck_field_dimensions): mismatching number of interp fields "
1853 "for component %s grid %s field %s (%d != %zu)",
1860 if (interp_field_sizes) {
1862 ++interp_field_idx) {
1865 (
size_t)interp_field_sizes[interp_field_idx] ==
1869 cpl_field, (
size_t)interp_field_idx)),
1870 "ERROR(yac_ccheck_field_dimensions): mismatching interp field size "
1871 "for component %s grid %s field %s interp_field_idx %d (%d != %zu)",
1877 interp_field_sizes[interp_field_idx],
1881 cpl_field, (
size_t)interp_field_idx)));
1891 int src_field_buffer_size_ ) {
1899 "ERROR(yac_ccheck_src_field_buffer_size): mismatching collection sizes "
1900 "for component %s grid %s field %s (%d != %d)",
1907 size_t num_src_fields;
1908 size_t const * src_field_buffer_sizes;
1909 size_t src_field_buffer_size = 0;
1911 cpl_field, &num_src_fields, &src_field_buffer_sizes);
1912 for (
size_t i = 0; i < num_src_fields; ++i)
1913 src_field_buffer_size += src_field_buffer_sizes[i];
1916 (
size_t)src_field_buffer_size_ == src_field_buffer_size,
1917 "ERROR(yac_ccheck_src_field_buffer_size): "
1918 "mismatching source buffer size "
1919 "for component %s grid %s field %s (%d != %zu)",
1924 src_field_buffer_size_, src_field_buffer_size);
1928 int num_src_fields_,
1930 int * src_field_buffer_sizes_ ) {
1938 "ERROR(yac_ccheck_src_field_buffer_sizes): mismatching collection sizes "
1939 "for component %s grid %s field %s (%d != %d)",
1946 size_t num_src_fields;
1947 size_t const * src_field_buffer_sizes;
1949 cpl_field, &num_src_fields, &src_field_buffer_sizes);
1952 (
size_t)num_src_fields_ == num_src_fields,
1953 "ERROR(yac_ccheck_src_field_buffer_sizes): "
1954 "mismatching number of source fields "
1955 "for component %s grid %s field %s (%d != %zu)",
1961 for (
size_t i = 0; i < num_src_fields; ++i)
1963 (
size_t)src_field_buffer_sizes_[i] == src_field_buffer_sizes[i],
1964 "ERROR(yac_ccheck_src_field_buffer_sizes): "
1965 "mismatching source buffer size "
1966 "for component %s grid %s field %s field_idx %zu (%d != %zu)",
1971 i, src_field_buffer_sizes_[i], src_field_buffer_sizes[i]);
1977 double * frac_mask_fallback_value,
1978 double * scaling_factor,
1979 double * scaling_summand,
1980 size_t * num_fixed_values,
1981 double ** fixed_values,
1982 size_t ** num_tgt_per_fixed_value,
1983 size_t ** tgt_idx_fixed,
1984 size_t * num_wgt_tgt,
1985 size_t ** wgt_tgt_idx,
1986 size_t ** num_src_per_tgt,
1988 size_t ** src_field_idx,
1990 size_t * num_src_fields,
1991 size_t ** src_field_buffer_size ) {
2024 size_t ** src_indptr_,
2029 size_t ** src_field_buffer_sizes ) {
2045 "ERROR(yac_cget_raw_interp_weights_data_csr): "
2046 "target field \"%s\" has more than one interpolation field",
2049 size_t field_data_size =
2054 size_t * src_indptr =
2055 xcalloc((field_data_size + 1),
sizeof(*src_indptr));
2056 for (
size_t i = 0; i < num_wgt_tgt; ++i)
2057 src_indptr[wgt_tgt_idx[i]] = num_src_per_tgt[i];
2058 size_t total_num_weights = 0;
2059 for (
size_t i = 0; i < field_data_size; ++i) {
2060 size_t curr_count = src_indptr[i];
2061 src_indptr[i] = total_num_weights;
2062 total_num_weights += curr_count;
2064 src_indptr[field_data_size] = total_num_weights;
2068 for (
size_t i = 1; (i < num_wgt_tgt) && tgt_sorted; ++i)
2069 tgt_sorted = wgt_tgt_idx[i] > wgt_tgt_idx[i-1];
2073 "ERROR(yac_cget_raw_interp_weights_data_csr): "
2074 "target indices for field \"%s\" are unsorted, which is unexpected, "
2117 free(num_src_per_tgt);
2120 *src_indptr_ = src_indptr;
2125 double * frac_mask_fallback_value,
2126 double * scaling_factor,
2127 double * scaling_summand,
2128 size_t * num_fixed_values,
2129 double ** fixed_values,
2130 size_t ** num_tgt_per_fixed_value,
2131 size_t ** tgt_idx_fixed,
2132 size_t ** src_indptr,
2134 size_t ** src_field_idx,
2136 size_t * num_src_fields,
2137 size_t ** src_field_buffer_sizes,
2138 size_t * tgt_field_data_size) {
2145 "ERROR(yac_cget_raw_interp_weights_data_csr_c2f): "
2146 "target field \"%s\" has more than one interpolation field",
2149 *tgt_field_data_size =
2155 field_id, frac_mask_fallback_value, scaling_factor, scaling_summand,
2156 num_fixed_values, fixed_values, num_tgt_per_fixed_value, tgt_idx_fixed,
2157 src_indptr, weights, src_field_idx, src_idx, num_src_fields,
2158 src_field_buffer_sizes);
2174 "ERROR(yac_cget_action): invalid field exchange type")
2194 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
2219 "ERROR(yac_cupdate): current action of %s field \"%s\" of "
2220 "componente \"%s\" is not YAC_ACTION_NONE",
2237 "ERROR(yac_cupdate): invalid field exchange type")
2253 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
2267 double *recv_field) {
2274 "ERROR(get_recv_field_pointers): invalid number of interpolation fields "
2285 recv_field_[i] = recv_field;
2301 size_t num_src_fields;
2302 size_t const * src_field_buffer_sizes;
2304 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2306 double *** src_field_buffer_ =
2308 double ** src_field_buffer__ =
2312 src_field_buffer_[i] =
2313 src_field_buffer__ + i * num_src_fields;
2314 for (
size_t j = 0; j < num_src_fields; ++j) {
2315 src_field_buffer_[i][j] = src_field_buffer;
2316 src_field_buffer += src_field_buffer_sizes[j];
2320 return src_field_buffer_;
2326 double **src_field_buffer) {
2333 size_t num_src_fields;
2334 size_t const * src_field_buffer_sizes;
2336 cpl_field, &num_src_fields, &src_field_buffer_sizes);
2338 double *** src_field_buffer_ =
2340 double ** src_field_buffer__ =
2344 src_field_buffer_[i] =
2345 src_field_buffer__ + i * num_src_fields;
2346 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2347 src_field_buffer_[i][j] = src_field_buffer[k];
2350 return src_field_buffer_;
2386 fputs(
"WARNING: yac get action is beyond end of run date!\n", stderr);
2387 fputs(
"WARNING: yac get action is beyond end of run date!\n", stdout);
2399 (
size_t)collection_size ==
2401 "ERROR: collection size does not match with coupling configuration.")
2411 int collection_size,
2412 double ** recv_field,
2422 if ((*ierr == 0) && (interpolation != NULL)) {
2433 double ***src_field_buffer,
2434 double ***src_frac_mask_buffer,
2446 if (field_role ==
NOTHING)
return;
2450 "ERROR(yac_cget_raw_frac): field \"%s\" is source",
2457 size_t num_src_fields;
2459 cpl_field, &num_src_fields, NULL);
2463 "ERROR(yac_get_raw_frac): target field \"%s\" was configured %s "
2464 "support for fractional masking, but %s source fractional mask buffer "
2465 "was provided to this call",
2469 double ** src_field_buffer_ =
2471 (
size_t)(1 +
with_frac_mask) * (
size_t)collection_size * num_src_fields *
2472 sizeof(*src_field_buffer_));
2475 for (
int i = 0; i < collection_size; ++i)
2476 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2477 src_field_buffer_[k] = src_field_buffer[i][j];
2479 for (
int i = 0; i < collection_size; ++i)
2480 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
2481 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
2483 if ((*ierror == 0) && (interpolation_exchange != NULL)) {
2486 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
2489 interpolation_exchange, src_field_buffer_,
"yac_get_raw_frac");
2491 free(src_field_buffer_);
2497 int const collection_size,
2506 double ** recv_field_ =
2509 yac_get(field_id, collection_size, recv_field_, is_async, info, ierr);
2515 int const collection_size,
2520 yac_get_(field_id, collection_size, recv_field, 0, info, ierr);
2524 int const collection_size,
2529 yac_get_(field_id, collection_size, recv_field, 1, info, ierr);
2533 int collection_size,
2534 double ** recv_field,
2538 yac_get(field_id, collection_size, recv_field, 0, info, ierr);
2542 int collection_size,
2543 double ** recv_field,
2548 yac_get(field_id, collection_size, recv_field, 1, info, ierr);
2554 int const collection_size,
2555 double *src_field_buffer,
2558 double *src_frac_mask_buffer,
2568 double *** src_field_buffer_ =
2570 field_id, collection_size, src_field_buffer);
2571 double *** src_frac_mask_buffer_ =
2572 src_frac_mask_buffer?
2574 field_id, collection_size, src_frac_mask_buffer):NULL;
2577 field_id, collection_size, src_field_buffer_, src_frac_mask_buffer_,
2578 is_async, info, ierr);
2580 if (src_frac_mask_buffer) {
2581 free(src_frac_mask_buffer_[0]);
2582 free(src_frac_mask_buffer_);
2584 free(src_field_buffer_[0]);
2585 free(src_field_buffer_);
2589 int const collection_size,
2590 double **src_field_buffer,
2593 double **src_frac_mask_buffer,
2603 double *** src_field_buffer_ =
2605 field_id, (
size_t)collection_size, src_field_buffer);
2606 double *** src_frac_mask_buffer_ =
2607 src_frac_mask_buffer?
2609 field_id, (
size_t)collection_size, src_frac_mask_buffer):NULL;
2612 field_id, collection_size, src_field_buffer_, src_frac_mask_buffer_,
2613 is_async, info, ierr);
2615 if (src_frac_mask_buffer) {
2616 free(src_frac_mask_buffer_[0]);
2617 free(src_frac_mask_buffer_);
2619 free(src_field_buffer_[0]);
2620 free(src_field_buffer_);
2624 int const collection_size,
2625 double *src_field_buffer,
2632 field_id, collection_size, src_field_buffer, NULL, 0, info, ierr);
2636 int const collection_size,
2637 double *src_field_buffer,
2640 double *src_frac_mask_buffer,
2647 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2652 int const collection_size,
2653 double **src_field_buffer,
2660 field_id, collection_size, src_field_buffer, NULL, 0, info, ierr);
2664 int const collection_size,
2665 double **src_field_buffer,
2668 double **src_frac_mask_buffer,
2676 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2681 int const collection_size,
2682 double *src_field_buffer,
2689 field_id, collection_size, src_field_buffer, NULL, 1, info, ierr);
2693 int const collection_size,
2694 double *src_field_buffer,
2697 double *src_frac_mask_buffer,
2704 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2709 int const collection_size,
2710 double **src_field_buffer,
2717 field_id, collection_size, src_field_buffer, NULL, 1, info, ierr);
2721 int const collection_size,
2722 double **src_field_buffer,
2725 double **src_frac_mask_buffer,
2732 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2737 int collection_size,
2738 double ***src_field_buffer,
2746 field_id, collection_size, src_field_buffer, NULL, 0, info, ierr);
2750 int collection_size,
2751 double ***src_field_buffer,
2760 field_id, collection_size, src_field_buffer, NULL, 1, info, ierr);
2764 int collection_size,
2765 double ***src_field_buffer,
2769 double ***src_frac_mask_buffer,
2777 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2782 int collection_size,
2783 double ***src_field_buffer,
2787 double ***src_frac_mask_buffer,
2795 field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
2802 int field_id,
size_t collection_size,
double * send_field) {
2820 double ***send_field_ =
2822 double **send_field__ =
2828 send_field_[i][j] = send_field;
2847 double *** send_field_ =
2852 free(send_field_[0]);
2861 double *send_frac_mask,
2870 double *** send_field_ =
2872 double *** send_frac_mask_ =
2878 free(send_field_[0]);
2880 free(send_frac_mask_[0]);
2881 free(send_frac_mask_);
2889 double **send_field,
2890 double **send_frac_mask,
2891 double ****send_field_,
2892 double ****send_frac_mask_) {
2914 (*send_field_)[i][j] = send_field[k];
2916 if (send_frac_mask != NULL) {
2920 (*send_frac_mask_)[i] =
2923 (*send_frac_mask_)[i][j] = send_frac_mask[k];
2932 double ** send_field,
2941 double *** send_field_;
2953 double ** send_field,
2956 double ** send_frac_mask,
2965 double *** send_field_;
2966 double *** send_frac_mask_;
2969 &send_field_, &send_frac_mask_);
2975 free(send_field_[i]);
2976 free(send_frac_mask_[i]);
2979 free(send_frac_mask_);
2992 unsigned put_idx = 0;
3015 unsigned put_idx = 0;
3020 cpl_field, put_idx),
"yac_cwait");
3061 double **** send_field_acc_,
double *** send_frac_mask,
3062 double **** send_frac_mask_acc_,
int * with_frac_mask_,
3063 int * use_raw_exchange_,
int *info,
int *ierr) {
3069 cpl_field, put_idx):
3071 cpl_field, put_idx);
3075 int with_frac_mask =
3080 *with_frac_mask_ = with_frac_mask;
3087 struct event *
event =
3105 fputs(
"WARNING: yac put action is beyond end of run date!\n", stderr);
3106 fputs(
"WARNING: yac put action is beyond end of run date!\n", stdout);
3108 *send_field_acc_ = NULL;
3109 *send_frac_mask_acc_ = NULL;
3128 size_t num_interp_fields =
3136 if (with_frac_mask) {
3139 double *** send_field_acc =
3141 *send_field_acc_ = send_field_acc;
3142 *send_frac_mask_acc_ = send_frac_mask;
3144 for (
int h = 0; h < collection_size; h++) {
3145 for (
size_t i = 0; i < num_interp_fields; i++) {
3152 if (put_mask[i][j]) {
3153 double frac_mask = send_frac_mask[h][i][j];
3154 send_field_acc[h][i][j] =
3155 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3160 double frac_mask = send_frac_mask[h][i][j];
3161 send_field_acc[h][i][j] =
3162 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
3168 *send_field_acc_ = send_field;
3169 *send_frac_mask_acc_ = send_frac_mask;
3171 return interpolation;
3183 "ERROR(yac_cput_pre_processing): invalid time operation type")
3185 int time_accumulation_count =
3188 time_accumulation_count++;
3191 if (time_accumulation_count == 1) {
3193 double send_field_acc_init_value;
3198 send_field_acc_init_value = 0.0;
3201 send_field_acc_init_value = DBL_MAX;
3204 send_field_acc_init_value = -DBL_MAX;
3211 cpl_field, put_idx, send_field_acc_init_value);
3214 cpl_field, put_idx, 0.0);
3219 double *** send_field_acc =
3221 *send_field_acc_ = send_field_acc;
3222 double *** send_frac_mask_acc;
3223 if (with_frac_mask) {
3224 send_frac_mask_acc =
3226 *send_frac_mask_acc_ = send_frac_mask_acc;
3228 send_frac_mask_acc = NULL;
3229 *send_frac_mask_acc_ = NULL;
3233#define PUT_CHECK (put_mask[i][j])
3236#define AGGREGATE_FRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
3241 for (size_t j = 0; j < num_points; ++j) { \
3242 double frac_mask = send_frac_mask[h][i][j]; \
3243 double send_field_value = send_field[h][i][j] * frac_mask; \
3244 if (CHECK && (EXTRA_CHECK)) { \
3245 if (frac_mask != 0.0) { \
3246 send_field_acc[h][i][j] ACCU_OP send_field_value; \
3247 send_frac_mask_acc[h][i][j] ACCU_OP frac_mask; \
3253#define AGGREATE_NOFRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
3258 for (size_t j = 0; j < num_points; ++j) {\
3259 double send_field_value = send_field[h][i][j]; \
3260 if (CHECK && (EXTRA_CHECK)) \
3261 send_field_acc[h][i][j] ACCU_OP send_field_value; \
3265#define AGGREGATE(EXTRA_CHECK, ACCU_OP) \
3267 for (int h = 0; h < collection_size; h++) { \
3268 for (size_t i = 0; i < num_interp_fields; i++) { \
3269 size_t num_points = \
3270 yac_coupling_field_get_data_size( \
3272 yac_coupling_field_get_interp_fields(cpl_field)[i].location); \
3273 if (with_frac_mask) { \
3274 if (put_mask) AGGREGATE_FRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
3275 else AGGREGATE_FRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
3277 if (put_mask) AGGREATE_NOFRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
3278 else AGGREATE_NOFRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
3297#undef AGGREATE_NOFRAC
3298#undef AGGREGATE_FRAC
3310 cpl_field, put_idx, time_accumulation_count);
3321 double weight = 1.0 / (double)time_accumulation_count;
3324#define PUT_CHECK (put_mask[i][j])
3325#define WEIGHT_ACC_(ACC, CHECK, EXTRA_CHECK) \
3327 for (size_t j = 0; j < num_points; j++) \
3328 if (CHECK && (EXTRA_CHECK)) ACC[h][i][j] *= weight; \
3330#define WEIGHT_ACC(ACC, EXTRA_CHECK) \
3332 if (put_mask) WEIGHT_ACC_(ACC, PUT_CHECK, EXTRA_CHECK) \
3333 else WEIGHT_ACC_(ACC, NO_CHECK, EXTRA_CHECK) \
3336 for (
int h = 0; h < collection_size; ++h) {
3337 for (
size_t i = 0; i < num_interp_fields; i++) {
3346 WEIGHT_ACC(send_field_acc, send_frac_mask_acc[h][i][j] != 0.0)
3361 cpl_field, put_idx, 0);
3368 return interpolation;
3372 int const collection_size,
3373 double ***
const send_field,
3375 double ***
const send_frac_mask,
3394 "ERROR(yac_cput_frac): collection size does not match with "
3395 "coupling configuration.")
3397 for (
unsigned put_idx = 0;
3413 &curr_action, &curr_ierr);
3415 *info =
MAX(*info, curr_action);
3416 *ierr =
MAX(*ierr, curr_ierr);
3429 if ((curr_action ==
NONE) || (curr_action ==
REDUCTION))
continue;
3437 (with_frac_mask && (send_frac_mask != NULL)) ||
3439 "ERROR(yac_cput_frac): interpolation for field \"%s\" was built for "
3440 "dynamic fractional masking, but no mask was provided",
3443 (!with_frac_mask && (send_frac_mask == NULL)) ||
3445 "ERROR(yac_cput_frac): interpolation for field \"%s\" was not built "
3446 "for dynamic fractional masking, but a mask was provided",
3449 double *** send_field_ptr =
3451 double *** send_frac_mask_ptr =
3456 size_t num_src_fields =
3458 double const ** send_field_ptr_ =
3461 num_src_fields *
sizeof(*send_field_ptr_));
3465 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3466 send_field_ptr_[k] = send_field_ptr[i][j];
3469 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
3470 send_field_ptr_[k] = send_frac_mask_ptr[i][j];
3474 free(send_field_ptr_);
3489 double ***
const send_field,
3502 int const recv_field_id,
3516 double *** send_field_ =
3518 double ** recv_field_ =
3522 send_field_id, recv_field_id,
collection_size, send_field_, recv_field_,
3523 send_info, recv_info, ierr);
3526 free(send_field_[0]);
3534 int const recv_field_id,
3539 double *send_frac_mask,
3542 double *src_field_buffer,
3545 double *src_frac_mask_buffer,
3556 double *** send_field_ =
3558 double *** send_frac_mask_ =
3562 double *** src_field_buffer_ =
3565 double *** src_frac_mask_buffer_ =
3566 src_frac_mask_buffer?
3572 send_field_, send_frac_mask_,
3573 src_field_buffer_, src_frac_mask_buffer_,
3574 send_info, recv_info, ierr);
3576 if (src_frac_mask_buffer) {
3577 free(src_frac_mask_buffer_[0]);
3578 free(src_frac_mask_buffer_);
3580 free(src_field_buffer_[0]);
3581 free(src_field_buffer_);
3582 if (send_frac_mask_) {
3583 free(send_frac_mask_[0]);
3584 free(send_frac_mask_);
3586 free(send_field_[0]);
3592 int const recv_field_id,
3597 double *src_field_buffer,
3606 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
3613 int const recv_field_id,
3618 double *send_frac_mask,
3630 double *** send_field_ =
3632 double *** send_frac_mask_ =
3634 double ** recv_field_ =
3638 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
3639 recv_field_, send_info, recv_info, ierr);
3642 free(send_field_[0]);
3644 free(send_frac_mask_[0]);
3645 free(send_frac_mask_);
3652 int const recv_field_id,
3654 double ** send_field,
3656 double ** recv_field,
3666 double *** send_field_;
3668 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
3671 send_field_id, recv_field_id,
collection_size, send_field_, recv_field,
3672 send_info, recv_info, ierr);
3674 free(send_field_[0]);
3680 int const recv_field_id,
3682 double ** send_field,
3684 double **src_field_buffer,
3696 double *** send_field_;
3698 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
3699 double *** src_field_buffer_ =
3705 src_field_buffer_, send_info, recv_info, ierr);
3707 free(src_field_buffer_[0]);
3708 free(src_field_buffer_);
3709 free(send_field_[0]);
3717 int const recv_field_id,
3719 double ** send_field,
3721 double ** send_frac_mask,
3723 double ** recv_field,
3732 double *** send_field_;
3733 double *** send_frac_mask_;
3736 &send_field_, &send_frac_mask_);
3739 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
3740 recv_field, send_info, recv_info, ierr);
3742 free(send_field_[0]);
3744 free(send_frac_mask_[0]);
3745 free(send_frac_mask_);
3750 int const recv_field_id,
3752 double ** send_field,
3754 double ** send_frac_mask,
3756 double ** src_field_buffer,
3759 double ** src_frac_mask_buffer,
3770 double *** send_field_;
3771 double *** send_frac_mask_;
3774 &send_field_, &send_frac_mask_);
3775 double *** src_field_buffer_ =
3778 double *** src_frac_mask_buffer_ =
3779 src_frac_mask_buffer?
3784 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
3785 src_field_buffer_, src_frac_mask_buffer_, send_info, recv_info, ierr);
3787 free(src_frac_mask_buffer_[0]);
3788 free(src_frac_mask_buffer_);
3789 free(src_field_buffer_[0]);
3790 free(src_field_buffer_);
3791 free(send_field_[0]);
3793 free(send_frac_mask_[0]);
3794 free(send_frac_mask_);
3800 int const recv_field_id,
3802 double ***
const send_field,
3804 double ***
const send_frac_mask,
3806 double ** recv_field,
3828 "ERROR(yac_cexchange_frac): "
3829 "collection size does not match with coupling configuration.")
3833 "ERROR(yac_cexchange_frac): more than one put per field is not supported "
3834 "for yac_cexchange_frac.")
3840 int send_with_frac_mask;
3845 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
3846 &send_with_frac_mask, &use_raw_exchange,
3847 &send_action, &send_ierr);
3850 send_with_frac_mask == (send_frac_mask != NULL),
3851 "ERROR(yac_cexchange_frac): source field \"%s\" was configured %s "
3852 "support for fractional masking, but %s fractional mask "
3853 "was provided to this call",
3855 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
3857 *send_info =
MAX(*send_info, send_action);
3858 *ierr =
MAX(*ierr, send_ierr);
3865 (send_action ==
NONE) ||
3884 double *** send_field_ptr =
3885 (send_field_acc == NULL)?send_field:send_field_acc;
3886 double *** send_frac_mask_ptr =
3887 (send_frac_mask_acc == NULL)?send_frac_mask:send_frac_mask_acc;
3890 if (get_interpolation != NULL) {
3893 get_interpolation == put_interpolation,
3894 "ERROR(yac_cexchange): send_field_id and recv_field_id do not match")
3896 if (send_with_frac_mask)
3898 put_interpolation, send_field_ptr, send_frac_mask_ptr, recv_field);
3901 put_interpolation, send_field_ptr, recv_field);
3906 if (send_with_frac_mask)
3908 put_interpolation, send_field_ptr, send_frac_mask_ptr);
3916 int const recv_field_id,
3918 double ***
const send_field,
3920 double ***
const send_frac_mask,
3922 double ***src_field_buffer,
3926 double ***src_frac_mask_buffer,
3953 int recv_with_frac_mask =
3957 if (recv_with_frac_mask)
3959 recv_field_id,
collection_size, src_field_buffer, src_frac_mask_buffer,
3969 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
3970 "ERROR(yac_cexchange_raw_frac): target field \"%s\" was configured %s "
3971 "support for fractional masking, but %s source fractional mask buffer "
3972 "was provided to this call",
3974 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
3979 "ERROR(yac_cexchange_raw_frac): "
3980 "collection size does not match with coupling configuration.")
3984 "ERROR(yac_cexchange_raw_frac): "
3985 "more than one put per field is not supported for yac_cexchange_frac.")
3989 "ERROR(yac_cexchange_raw_frac): "
3990 "source field \"%s\" is not configured for raw data exchange",
3997 int send_with_frac_mask;
4001 send_cpl_field, 0, collection_size, send_field,
4002 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
4003 &send_with_frac_mask, &use_raw_exchange,
4004 &send_action, &send_ierr);
4007 (put_interpolation_exchange == NULL) ||
4008 (send_with_frac_mask == recv_with_frac_mask),
4009 "ERROR(yac_cexchange_raw_frac): fractional mask configuration for "
4010 "source field \"%s\" and target field \"%s\" does not match",
4015 send_with_frac_mask == (send_frac_mask != NULL),
4016 "ERROR(yac_cexchange_raw_frac): source field \"%s\" was configured %s "
4017 "support for fractional masking, but %s fractional mask "
4018 "was provided to this call",
4020 (send_with_frac_mask?
"with":
"without"), (send_with_frac_mask?
"no":
"a"))
4022 *send_info =
MAX(*send_info, send_action);
4023 *ierr =
MAX(*ierr, send_ierr);
4030 (send_action ==
NONE) ||
4032 if (recv_with_frac_mask)
4034 recv_field_id, collection_size, src_field_buffer, src_frac_mask_buffer,
4038 recv_field_id, collection_size, src_field_buffer, recv_info, ierr);
4055 size_t num_src_fields;
4057 recv_cpl_field, &num_src_fields, NULL);
4059 double const ** send_field_ptr_ =
4061 (
size_t)(1 + send_with_frac_mask) * (
size_t)collection_size *
4062 num_src_fields *
sizeof(*send_field_ptr_));
4065 for (
int i = 0; i < collection_size; ++i)
4066 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4067 send_field_ptr_[k] = send_field_acc[i][j];
4068 if (send_with_frac_mask)
4069 for (
int i = 0; i < collection_size; ++i)
4070 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4071 send_field_ptr_[k] = send_frac_mask_acc[i][j];
4075 get_interpolation_exchange == put_interpolation_exchange,
4076 "ERROR(yac_cexchange_raw_frac): "
4077 "send_field_id and recv_field_id do not match")
4080 recv_with_frac_mask == (src_frac_mask_buffer != NULL),
4081 "ERROR(yac_cexchange_raw_frac): target field \"%s\" was configured %s "
4082 "support for fractional masking, but %s fractional mask buffer"
4083 "was provided to this call",
4085 (recv_with_frac_mask?
"with":
"without"), (recv_with_frac_mask?
"no":
"a"))
4087 double ** src_field_buffer_ =
4089 (
size_t)(1 + send_with_frac_mask) * (
size_t)collection_size *
4090 num_src_fields *
sizeof(*src_field_buffer_));
4093 for (
int i = 0; i < collection_size; ++i)
4094 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4095 src_field_buffer_[k] = src_field_buffer[i][j];
4096 if (recv_with_frac_mask)
4097 for (
int i = 0; i < collection_size; ++i)
4098 for (
size_t j = 0; j < num_src_fields; ++j, ++k)
4099 src_field_buffer_[k] = src_frac_mask_buffer[i][j];
4103 put_interpolation_exchange, send_field_ptr_, src_field_buffer_,
4104 "yac_cexchange_raw_frac");
4106 free(src_field_buffer_);
4107 free(send_field_ptr_);
4112 int const recv_field_id,
4113 int const collection_size,
4114 double ***
const send_field,
4116 double ** recv_field,
4122 send_field_id, recv_field_id, collection_size,
4123 send_field, NULL, recv_field, send_info, recv_info, ierr);
4127 int const recv_field_id,
4128 int const collection_size,
4129 double ***
const send_field,
4131 double ***src_field_buffer,
4140 send_field_id, recv_field_id, collection_size,
4141 send_field, NULL, src_field_buffer, NULL, send_info, recv_info, ierr);
4173 int yac_instance_id,
int emit_flags,
char ** config) {
4193 const char* grid_name,
const char* field_name){
4199 "ERROR(yac_cget_field_id_instance): "
4200 "no field '%s' defined on the local process for "
4201 "component '%s' and grid '%s'", field_name, comp_name, grid_name);
4208 grid_name, field_name);
4240 int yac_instance_id,
const char* comp_name ) {
4246 size_t nbr_couple_config_grids =
4250 "ERROR(yac_cget_comp_grid_names_instance):"
4251 "Invalid comp_name. (NULL is not allowed)");
4253 int nbr_comp_grids = 0;
4254 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
4256 yac_instance_id, comp_name,
4259 return nbr_comp_grids;
4268 const char* grid_name) {
4275 size_t nbr_comp_fields =
4277 for(
size_t field_idx=0; field_idx<nbr_comp_fields; ++field_idx)
4282 couple_config, comp_idx, field_idx)))
4293 int yac_instance_id,
int nbr_comps,
const char ** comp_names) {
4299 size_t nbr_couple_config_comps =
4303 (
size_t)nbr_comps == nbr_couple_config_comps,
4304 "ERROR(yac_cget_comp_names_instance): "
4305 "invalid array size (nbr_comps = %d; nbr_couple_config_comps = %zu)",
4306 nbr_comps, nbr_couple_config_comps);
4308 for(
size_t i = 0; i < nbr_couple_config_comps; ++i)
4319 int yac_instance_id,
int nbr_grids,
const char ** grid_names ) {
4325 size_t nbr_couple_config_grids =
4329 (
size_t)nbr_grids == nbr_couple_config_grids,
4330 "ERROR(yac_cget_grid_names_instance): "
4331 "invalid array size (nbr_grids = %d, nbr_couple_config_grids = %zu)",
4332 nbr_grids, nbr_couple_config_grids);
4334 for(
size_t i = 0; i < nbr_couple_config_grids; ++i)
4344 int yac_instance_id,
const char* comp_name,
4345 int nbr_grids,
const char ** grid_names ) {
4351 size_t nbr_couple_config_grids =
4355 "ERROR(yac_cget_comp_grid_names_instance): "
4356 "Invalid comp_name. (NULL is not allowed)");
4358 size_t nbr_comp_grid = 0;
4359 for(
size_t i = 0; i < nbr_couple_config_grids; ++i) {
4361 const char* curr_grid_name =
4365 yac_instance_id, comp_name, curr_grid_name) > 0) {
4368 nbr_comp_grid < (
size_t)nbr_grids,
4369 "ERROR(yac_cget_comp_grid_names_instance): "
4370 "invalid array size (nbr_grids = %d; nbr_comp_grid > %zu)",
4371 nbr_grids, nbr_comp_grid);
4373 grid_names[nbr_comp_grid] = curr_grid_name;
4379 nbr_comp_grid == (
size_t)nbr_grids,
4380 "ERROR(yac_cget_comp_grid_names_instance): "
4381 "invalid array size (nbr_grids = %d; nbr_comp_grid = %zu)",
4382 nbr_grids, nbr_comp_grid);
4386 const char ** grid_names ) {
4392 const char * comp_name,
const char* grid_name,
4393 int nbr_fields,
const char ** field_names ) {
4400 size_t nbr_comp_fields =
4403 size_t nbr_comp_grid_fields = 0;
4404 for(
size_t field_idx = 0; field_idx < nbr_comp_fields; ++field_idx) {
4409 couple_config, comp_idx, field_idx))) {
4412 (
size_t)nbr_fields > nbr_comp_grid_fields,
4413 "ERROR(yac_cget_field_names_instance): "
4414 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields > %zu",
4415 nbr_fields, nbr_comp_fields);
4417 field_names[nbr_comp_grid_fields] =
4419 nbr_comp_grid_fields++;
4424 (
size_t)nbr_fields == nbr_comp_grid_fields,
4425 "ERROR(yac_cget_field_names_instance): "
4426 "invalid array size (nbr_fields = %d; nbr_comp_grid_fields = %zu",
4427 nbr_fields, nbr_comp_fields);
4431 int nbr_fields,
const char ** field_names ) {
4434 comp_name, grid_name, nbr_fields, field_names );
4440 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4447 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4455 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4462 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4469 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4476 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
4483 int yac_instance_id,
const char* comp_name,
const char* grid_name,
4484 const char* field_name ) {
4491 couple_config, comp_name, grid_name, field_name);
4495 const char* field_name ) {
4498 grid_name, field_name);
4502 int yac_instance_id,
const char* comp_name,
const char* grid_name,
4503 const char* field_name) {
4509 comp_name, grid_name, field_name);
4513 const char* comp_name,
const char* grid_name,
const char* field_name ) {
4519 comp_name, grid_name, field_name);
4523 const char* comp_name,
const char* grid_name,
const char* field_name) {
4531 const char* grid_name,
const char* field_name ) {
4534 grid_name, field_name);
4538 const char* grid_name,
const char* field_name ) {
4545 couple_config, comp_name, grid_name, field_name);
4549 const char* field_name ) {
4552 grid_name, field_name);
4556 const char* tgt_comp_name,
const char* tgt_grid_name,
4557 const char* tgt_field_name,
const char** src_comp_name,
4558 const char** src_grid_name,
const char** src_field_name ) {
4565 tgt_comp_name, tgt_grid_name, tgt_field_name,
4566 src_comp_name, src_grid_name, src_field_name);
4570 const char* tgt_comp_name,
const char* tgt_grid_name,
4571 const char* tgt_field_name,
const char** src_comp_name,
4572 const char** src_grid_name,
const char** src_field_name ) {
4576 tgt_comp_name, tgt_grid_name, tgt_field_name,
4577 src_comp_name, src_grid_name, src_field_name);
4583 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4584 double *x_vertices,
double *y_vertices,
int *grid_id) {
4586 size_t nbr_vertices_size_t[2] =
4587 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
4595 nbr_vertices_size_t, cyclic, x_vertices, y_vertices));
4601 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4602 double *x_vertices,
double *y_vertices,
int *grid_id) {
4604 size_t nbr_vertices_size_t[2] =
4605 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
4613 nbr_vertices_size_t, cyclic, x_vertices, y_vertices));
4619 const char * grid_name,
int nbr_vertices,
4620 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
4621 double *y_vertices,
int *cell_to_vertex,
int *grid_id) {
4626 cell_to_vertex, num_vertices_per_cell, nbr_cells, nbr_vertices,
4627 "yac_cdef_grid_unstruct");
4633 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
4634 x_vertices, y_vertices, cell_to_vertex));
4640 const char * grid_name,
int nbr_vertices,
4641 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
4642 double *y_vertices,
int *cell_to_vertex,
int *grid_id) {
4647 cell_to_vertex, num_vertices_per_cell, nbr_cells, nbr_vertices,
4648 "yac_cdef_grid_unstruct_ll");
4654 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
4655 x_vertices, y_vertices, cell_to_vertex));
4661 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
4662 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
4663 int *cell_to_edge,
int *edge_to_vertex,
int *grid_id) {
4668 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges,
4669 "yac_cdef_grid_unstruct_edge");
4675 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
4676 num_edges_per_cell, x_vertices, y_vertices,
4677 cell_to_edge, edge_to_vertex));
4683 const char * grid_name,
int nbr_vertices,
int nbr_cells,
int nbr_edges,
4684 int *num_edges_per_cell,
double *x_vertices,
double *y_vertices,
4685 int *cell_to_edge,
int *edge_to_vertex,
int *grid_id) {
4687 check_x_vertices(x_vertices, nbr_vertices,
"yac_cdef_grid_unstruct_edge_ll");
4688 check_y_vertices(y_vertices, nbr_vertices,
"yac_cdef_grid_unstruct_edge_ll");
4690 cell_to_edge, num_edges_per_cell, nbr_cells, nbr_edges,
4691 "yac_cdef_grid_unstruct_edge_ll");
4697 (
size_t)nbr_vertices, (
size_t)nbr_cells, (
size_t)nbr_edges,
4698 num_edges_per_cell, x_vertices, y_vertices,
4699 cell_to_edge, edge_to_vertex));
4705 const char * grid_name,
int nbr_points,
4706 double *x_points,
double *y_points,
int *grid_id) {
4715 (
size_t)nbr_points, x_points, y_points));
4721 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
4722 double *x_vertices,
double *y_vertices,
4723 double x_north_pole,
double y_north_pole,
int *grid_id) {
4725 size_t nbr_vertices_size_t[2] =
4726 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
4734 nbr_vertices_size_t, cyclic, x_vertices, y_vertices,
4735 x_north_pole, y_north_pole));
4741 int const * global_index,
int location,
int grid_id) {
4753 "ERROR(yac_cset_global_index): invalid location")
4756 grid_global_ids = &(grid_data->
cell_ids);
4767 grid_global_ids = &(grid_data->
edge_ids);
4773 size_t global_ids_size = count *
sizeof(**grid_global_ids);
4774 if (*grid_global_ids == NULL) *grid_global_ids =
xmalloc(global_ids_size);
4775 for (
size_t i = 0; i < count; ++i)
4776 (*grid_global_ids)[i] = (
yac_int)(global_index[i]);
4782 int const * is_core,
int location,
int grid_id) {
4787 int ** grid_core_mask;
4794 "ERROR(yac_cset_core_mask): invalid location")
4814 size_t core_mask_size = count *
sizeof(**grid_core_mask);
4815 if (*grid_core_mask == NULL) *grid_core_mask =
xmalloc(core_mask_size);
4816 memcpy(*grid_core_mask, is_core, core_mask_size);
4862 *interp_stack_config_id =
4871 interp_stack_config_id,
"interp_stack_config_id");
4888 int interp_stack_config_id,
4889 int reduction_type,
int partial_coverage) {
4893 interp_stack_config_id,
"interp_stack_config_id");
4899 "ERROR(yac_add_interp_stack_config_average): invalid reduction type")
4907 int interp_stack_config_id,
4912 interp_stack_config_id,
"interp_stack_config_id");
4917 "ERROR(yac_add_interp_stack_config_ncc): invalid reduction type")
4925 int interp_stack_config_id,
4926 int type,
size_t n,
double max_search_distance,
double scale) {
4930 interp_stack_config_id,
"interp_stack_config_id");
4938 "ERROR(yac_add_interp_stack_config_nnn): invalid weightening type")
4942 max_search_distance, scale);
4946 int interp_stack_config_id,
4947 size_t n,
double max_search_distance,
double scale) {
4951 interp_stack_config_id,
"interp_stack_config_id");
4954 interp_stack_config, n, max_search_distance, scale);
4958 int interp_stack_config_id,
int order,
int enforced_conserv,
4959 int partial_coverage,
int normalisation) {
4963 interp_stack_config_id,
"interp_stack_config_id");
4968 "ERROR(yac_add_interp_stack_config_conservative):"
4969 "invalid normalisation type")
4972 interp_stack_config, order, enforced_conserv, partial_coverage,
4977 int interp_stack_config_id,
double spread_distance,
4978 double max_search_distance,
int weight_type,
int scale_type,
4979 double src_sphere_radius,
char const * src_filename,
4980 char const * src_varname,
int src_min_global_id,
4981 double tgt_sphere_radius,
char const * tgt_filename,
4982 char const * tgt_varname,
int tgt_min_global_id) {
4986 interp_stack_config_id,
"interp_stack_config_id");
4991 "ERROR(yac_add_interp_stack_config_spmap):"
4992 "invalid weightening type")
4999 "ERROR(yac_add_interp_stack_config_spmap):"
5000 "invalid scaling type")
5003 interp_stack_config, spread_distance, max_search_distance,
5006 src_sphere_radius, src_filename, src_varname, src_min_global_id,
5007 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
5011 int interp_stack_config_id,
double spread_distance,
5012 double max_search_distance,
int weight_type,
int scale_type,
5013 double src_sphere_radius,
char const * src_filename,
5014 char const * src_varname,
int src_min_global_id,
5015 double tgt_sphere_radius,
char const * tgt_filename,
5016 char const * tgt_varname,
int tgt_min_global_id) {
5018 if (src_filename && (src_filename[0] ==
'\0')) src_filename = NULL;
5019 if (src_varname && (src_varname[0] ==
'\0')) src_varname = NULL;
5020 if (tgt_filename && (tgt_filename[0] ==
'\0')) tgt_filename = NULL;
5021 if (tgt_varname && (tgt_varname[0] ==
'\0')) tgt_varname = NULL;
5024 interp_stack_config_id, spread_distance, max_search_distance,
5026 src_sphere_radius, src_filename, src_varname, src_min_global_id,
5027 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id);
5034 interp_stack_config_id,
"interp_stack_config_id");
5040 int interp_stack_config_id,
char const * filename,
5045 interp_stack_config_id,
"interp_stack_config_id");
5050 "ERROR(yac_cadd_interp_stack_config_user_file_2):"
5051 "invalid on_missing_file value")
5056 "ERROR(yac_cadd_interp_stack_config_user_file_2):"
5057 "invalid on_succes value")
5060 interp_stack_config, filename,
5066 int interp_stack_config_id,
char const * filename) {
5069 interp_stack_config_id, filename,
5075 int interp_stack_config_id,
double value) {
5079 interp_stack_config_id,
"interp_stack_config_id");
5085 int interp_stack_config_id,
char const * constructor_key,
5086 char const * do_search_key) {
5090 interp_stack_config_id,
"interp_stack_config_id");
5093 interp_stack_config, constructor_key, do_search_key);
5097 int interp_stack_config_id,
int creep_distance) {
5101 interp_stack_config_id,
"interp_stack_config_id");
5107 int interp_stack_config_id,
char const * func_compute_weights_key) {
5111 interp_stack_config_id,
"interp_stack_config_id");
5114 interp_stack_config, func_compute_weights_key);
5130 char const * interp_stack_config,
int parse_flags) {
5140 interp_stack_config, parse_flags);
5142 int interp_stack_config_id =
5146 return interp_stack_config_id;
5150 char const * interp_stack_config,
int * interp_stack_config_id) {
5152 *interp_stack_config_id =
5158 char const * interp_stack_config,
int * interp_stack_config_id) {
5160 *interp_stack_config_id =
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)
enum yac_interp_file_on_missing_file on_missing_file
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
enum yac_interp_ncc_weight_type weight_type
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)
static void LLtoXYZ(double lon, double lat, double p_out[])
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_components_are_defined(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, int use_raw_exchange)
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)
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()
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
#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
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
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_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()
#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)
int yac_interpolation_with_frac_mask(struct yac_interpolation *interpolation)
int yac_interpolation_execute_put_test(struct yac_interpolation *interp)
void yac_interpolation_execute_wait(struct yac_interpolation *interp)
void yac_interpolation_execute_frac(struct yac_interpolation *interp, double ***src_fields, double ***src_frac_masks, double **tgt_field)
void yac_interpolation_execute_get(struct yac_interpolation *interp, double **tgt_field)
void yac_interpolation_execute_get_async(struct yac_interpolation *interp, double **tgt_field)
void yac_interpolation_execute_put_frac(struct yac_interpolation *interp, double ***src_fields, double ***src_frac_masks)
void yac_interpolation_execute_put(struct yac_interpolation *interp, double ***src_fields)
int yac_interpolation_execute_get_test(struct yac_interpolation *interp)
void yac_interpolation_exchange_execute_get_async(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
void yac_interpolation_exchange_execute_get(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
void yac_interpolation_exchange_wait(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_put(struct yac_interpolation_exchange *exchange, double const **send_data, char const *routine_name)
int yac_interpolation_exchange_with_frac_mask(struct yac_interpolation_exchange *exchange)
void yac_interpolation_exchange_execute(struct yac_interpolation_exchange *exchange, double const **send_data_, double **recv_data_, char const *routine_name)
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)
#define xrealloc(ptr, size)
#define xcalloc(nmemb, size)
double *** send_field_acc
double *** send_frac_mask_acc
enum yac_field_exchange_type exchange_type
size_t collection_size
number of vertical levels or bundles
struct yac_interpolation * interpolation
enum yac_reduction_type time_operation
enum yac_action_type action
size_t num_src_mask_names
char * yaxt_exchanger_name
int weight_file_on_existing
enum yac_location location
double frac_mask_fallback_value
size_t * src_field_buffer_size
size_t * num_tgt_per_fixed_value
static char * yac_version
int const YAC_YEAR_OF_365_DAYS
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
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)
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_get_raw_frac_(int const field_id, int const collection_size, double *src_field_buffer, double *src_frac_mask_buffer, int is_async, int *info, int *ierr)
static int 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
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
int const YAC_REDUCTION_TIME_MINIMUM
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 use_raw_exchange)
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_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)
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_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 use_raw_exchange)
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
static void yac_free_components()
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_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)
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)
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()
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
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_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)
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_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)
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)
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_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)
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 const YAC_EXCHANGE_TYPE_NONE
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
int const YAC_EXCHANGE_TYPE_TARGET
void yac_cread_config_json_instance(int yac_instance_id, const char *yaml_filename)
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
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_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)
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_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)
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)
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)
static void yac_free_pointer_unique_lookup()
void yac_cinit_dummy(void)
@ YAC_CONFIG_OUTPUT_SYNC_LOC_ENDDEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_SYNC_DEF_
@ YAC_CONFIG_OUTPUT_SYNC_LOC_DEF_COMP_
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_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_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)
void yac_cget_comp_grid_names(const char *comp_name, int nbr_grids, const char **grid_names)
void yac_cget_field_names_instance(int yac_instance_id, const char *comp_name, const char *grid_name, int nbr_fields, const char **field_names)
void yac_cdef_comps_instance(int yac_instance_id, char const **comp_names, int num_comps, int *comp_ids)
void yac_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)
static void yac_ccleanup_instance_(int yac_instance_id)
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_ASSERT_F(exp, format,...)
#define YAC_ASSERT(exp, msg)
int yac_mpi_is_initialised()
void yac_yaxt_init(MPI_Comm comm)
#define yac_mpi_call(call, comm)
double(* yac_coordinate_pointer)[3]