169 "ERROR(yac_unique_id_to_pointer): invalid %s", id_name)
211 "ERROR(yac_add_grid): multiple definitions of grid with identical name")
215 "ERROR(yac_add_grid): grid name is too long (maximum is YAC_MAX_CHARLEN)")
285 "ERROR(%s): no default yac instance is defined yet", routine_name)
295 char recv_version[64];
300 yac_version_len <=
sizeof(recv_version),
301 "ERROR(yac_check_version): "
302 "version string \"%s\" is too long (has to be shorter than %zu)",
305 if (comm_rank == 0) strcpy(recv_version,
yac_version);
308 MPI_Bcast(recv_version, (
int)yac_version_len, MPI_CHAR, 0, comm), comm);
312 "ERROR(yac_check_version): inconsistent yac versions between processes "
313 "(on local process \"%s\"; on root \"%s\")",
yac_version, recv_version)
321 "MPI has not yet been initialised, but this call got a "
322 "communicator which is not allowed by the MPI standard "
323 "(MPI_COMM_WORLD is not to be used before the call to "
324 "MPI_Init or MPI_Init_thread)", routine_name);
328 MPI_Comm * group_comms) {
334 MPI_Fint * group_comms) {
335 MPI_Comm comm_c = MPI_Comm_f2c(comm);
336 MPI_Comm * group_comms_c =
xmalloc(n*
sizeof(*group_comms_c));
338 for(
int i = 0; i<n; ++i)
339 group_comms[i] = MPI_Comm_c2f(group_comms_c[i]);
349 int comm_rank, comm_size;
365 MPI_Comm comm,
int * yac_instance_id) {
371 MPI_Fint comm,
int * yac_instance_id) {
380 "ERROR(yac_cinit_comm): default yac instance already defined")
391 int * yac_instance_id) {
396 const char* group_name =
"yac";
405 "ERROR(yac_cinit_comm): default yac instance already defined")
449 const char * yaml_filename){
463 const char * yaml_filename){
546 int yac_instance_id,
const char * start_datetime,
547 const char * end_datetime) {
551 start_datetime, end_datetime);
555 const char * end_datetime ) {
568 "ERROR(yac_cdef_calendar): invalid calendar type")
570 calendarType curr_calendar = getCalendarType();
572 (curr_calendar == CALENDAR_NOT_SET) ||
573 (curr_calendar == (calendarType)calendar),
574 "ERROR(yac_cdef_calendar): inconsistent calendar definition")
576 initCalendar((calendarType)calendar);
621 int comp_id,
char const * routine) {
628 "ERROR(%s): instance of component \"%s\" is already finalized",
629 routine, comp_info->
name);
645 comp_info->
instance, (
char const **)&(comp_info->
name), 1);
655 *comp_comm_f = MPI_Comm_c2f(comp_comm);
680 char const ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
685 comp_names, (
size_t)num_comps);
689 const char ** comp_names,
int num_comps, MPI_Comm * comps_comm) {
700 char const ** comp_names,
int num_comps, MPI_Fint * comps_comm_f) {
704 yac_instance_id, comp_names, num_comps, &comps_comm);
705 *comps_comm_f = MPI_Comm_c2f(comps_comm);
709 char const ** comp_names,
int num_comps, MPI_Fint *comps_comm_f) {
713 *comps_comm_f = MPI_Comm_c2f(comps_comm);
719 int yac_instance_id,
char const *
name,
int * comp_id){
726 "ERROR(yac_cpredef_comp_instance): components have already been defined");
729 (name != NULL) && (*name !=
'\0'),
730 "ERROR(yac_cpredef_comp_instance): missing component name");
736 "ERROR(yac_cpredef_comp_instance): "
737 "component \"%s\" is already defined", name);
757 int yac_instance_id,
char const ** comp_names,
int num_comps,
763 for(
int i = 0; i<num_comps; ++i)
767 size_t comp_counter = 0;
778 free(all_comp_names);
782 char const ** comp_names,
int num_comps,
int * comp_ids ) {
790 int yac_instance_id,
char const * comp_name,
int * comp_id ) {
825 for (
size_t i = 0; i < count; ++i)
828 "ERROR(%s): x_vertices[%zu] = %lf outside of valid range [-720;720]",
835 for (
size_t i = 0; i < count; ++i)
838 "ERROR(%s): y_vertices[%zu] = %lf "
839 "outside of valid range [90.00001;90.00001]",
857 "ERROR(yac_cdef_points_reg2d): "
858 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
862 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) ==
num_points,
863 "ERROR(yac_cdef_points_reg2d): nbr_points does not match with grid")
866 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_reg2d");
868 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_reg2d");
872 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
873 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
874 LLtoXYZ(x_points[j], y_points[i], coordinates[k]);
882 int const *nbr_points,
884 double const *x_points,
885 double const *y_points,
893 "ERROR(yac_cdef_points_curve2d): "
894 "edge-location is not supported, use yac_cdef_points_unstruct instead.");
898 ((
size_t)nbr_points[0] * (
size_t)nbr_points[1]) ==
num_points,
899 "ERROR(yac_cdef_points_curve2d): nbr_points does not match with grid"
901 (
size_t)nbr_points[0], (
size_t)nbr_points[1],
num_points)
904 x_points, (
size_t)(nbr_points[0]),
"yac_cdef_points_curve2d");
906 y_points, (
size_t)(nbr_points[1]),
"yac_cdef_points_curve2d");
910 for (
int i = 0, k = 0; i < nbr_points[1]; ++i)
911 for (
int j = 0; j < nbr_points[0]; ++j, ++k)
912 LLtoXYZ(x_points[k], y_points[k], coordinates[k]);
920 int const nbr_points,
922 double const *x_points,
923 double const *y_points,
931 "ERROR(yac_cdef_points_unstruct): nbr_points does not match with grid")
937 xmalloc((
size_t)nbr_points *
sizeof(*coordinates));
938 for (
int i = 0; i < nbr_points; ++i)
939 LLtoXYZ(x_points[i], y_points[i], coordinates[i]);
948 int const * is_valid,
size_t nbr_points,
char const *
name) {
966 int const nbr_points,
968 int const * is_valid,
977 "ERROR(yac_cdef_mask_named): nbr_points does not match with grid")
981 grid, location, is_valid, (
size_t)nbr_points,
name);
985 int const nbr_points,
987 int const * is_valid,
1000 "ERROR(yac_cset_mask): default mask has already been set before")
1014 int const * point_ids,
1015 int const * mask_ids,
1016 int const num_pointsets,
1017 int collection_size,
1018 const char* timestep,
1024 "ERROR(yac_cdef_field_mask): invalid number of pointsets")
1027 point_ids != NULL,
"ERROR(yac_cdef_field_mask): no point_ids provided")
1046 "ERROR(yac_cdef_field_mask): grid of point_ids do not match")
1056 "ERROR(yac_cdef_field_mask): "
1057 "grids of mask and points do not match")
1060 "ERROR(yac_cdef_field_mask): "
1061 "location of mask and points do not match")
1079 grid, interp_fields, num_pointsets, collection_size,
1082 if (num_pointsets > 1) free(interp_fields);
1087 int const * point_ids,
1088 int const num_pointsets,
1089 int collection_size,
1090 const char* timestep,
1096 "ERROR(yac_cdef_field): invalid number of pointsets")
1099 point_ids != NULL,
"ERROR(yac_cdef_field): no point_ids provided")
1101 int * mask_ids =
xmalloc((
size_t)num_pointsets *
sizeof(*mask_ids));
1103 for (
int i = 0; i < num_pointsets; ++i)
1110 name, comp_id, point_ids, mask_ids, num_pointsets,
1111 collection_size, timestep, time_unit, field_id);
1117 int yac_instance_id,
const char* comp_name,
const char* grid_name,
1118 const char* field_name,
double frac_mask_fallback_value) {
1124 couple_config, comp_name, grid_name, field_name,
1125 frac_mask_fallback_value);
1129 const char* comp_name,
const char* grid_name,
const char* field_name,
1130 double frac_mask_fallback_value) {
1134 frac_mask_fallback_value);
1138 const char* comp_name,
const char* metadata) {
1151 const char* metadata) {
1165 const char* grid_name,
const char* field_name,
const char* metadata) {
1174 const char* field_name,
const char* metadata) {
1177 field_name, metadata);
1181 const char* comp_name) {
1194 const char* grid_name) {
1207 const char* comp_name,
const char* grid_name,
const char* field_name) {
1216 const char* field_name) {
1219 grid_name, field_name);
1236 xmalloc(1 *
sizeof(*ext_couple_config));
1249 free(ext_couple_config);
1280 "ERROR(yac_cset_ext_couple_config_mapping_side_): "
1281 "\"%d\" is not a valid mapping side (has to be 0 or 1)",
1304 "ERROR(yac_cset_ext_couple_config_scale_factor_): "
1327 "ERROR(yac_cset_ext_couple_config_scale_summand_): "
1402 int yac_instance_id,
1403 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1404 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1405 char const * coupling_timestep,
int time_unit,
int time_reduction,
1406 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1412 interp_stack_config_id,
"interp_stack_config_id");
1413 char const * coupling_timestep_iso8601 =
1416 src_comp_name, src_grid_name, src_field_name,
1417 tgt_comp_name, tgt_grid_name, tgt_field_name,
1418 coupling_timestep_iso8601, time_reduction,
1419 interp_stack_config, src_lag, tgt_lag,
1430 int yac_instance_id,
1431 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1432 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1433 char const * coupling_timestep,
int time_unit,
int time_reduction,
1434 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1435 int ext_couple_config_id) {
1438 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1439 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1440 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1445 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1446 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1447 char const * coupling_timestep,
int time_unit,
int time_reduction,
1448 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1449 int ext_couple_config_id) {
1453 src_comp_name, src_grid_name, src_field_name,
1454 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1455 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1460 int yac_instance_id,
1461 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1462 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1463 char const * coupling_timestep,
int time_unit,
int time_reduction,
1464 int interp_stack_config_id,
int src_lag,
int tgt_lag) {
1470 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1471 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1472 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1473 &ext_couple_config);
1477 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1478 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1479 char const * coupling_timestep,
int time_unit,
int time_reduction,
1480 int interp_stack_config_id,
int src_lag,
int tgt_lag){
1484 src_comp_name, src_grid_name, src_field_name,
1485 tgt_comp_name, tgt_grid_name, tgt_field_name,
1486 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
1491 int yac_instance_id,
1492 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1493 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1494 char const * coupling_timestep,
int time_unit,
int time_reduction,
1495 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1503 "ERROR(yac_cdef_couple_instance_): "
1522 yac_instance_id, src_comp_name, src_grid_name, src_field_name,
1523 tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep,
1524 time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag,
1525 &ext_couple_config);
1529 char const * src_comp_name,
char const * src_grid_name,
char const * src_field_name,
1530 char const * tgt_comp_name,
char const * tgt_grid_name,
char const * tgt_field_name,
1531 char const * coupling_timestep,
int time_unit,
int time_reduction,
1532 int interp_stack_config_id,
int src_lag,
int tgt_lag,
1540 src_comp_name, src_grid_name, src_field_name,
1541 tgt_comp_name, tgt_grid_name, tgt_field_name,
1542 coupling_timestep, time_unit, time_reduction, interp_stack_config_id,
1551 int collection_size,
1552 int num_interp_fields,
1553 int const * interp_field_sizes ) {
1561 "ERROR(yac_ccheck_field_dimensions): mismatching collection sizes "
1562 "for component %s grid %s field %s (%d != %d)",
1574 "ERROR(yac_ccheck_field_dimensions): mismatching number of interp fields "
1575 "for component %s grid %s field %s (%d != %zu)",
1582 if (interp_field_sizes) {
1584 ++interp_field_idx) {
1587 (
size_t)interp_field_sizes[interp_field_idx] ==
1591 cpl_field, (
size_t)interp_field_idx)),
1592 "ERROR(yac_ccheck_field_dimensions): mismatching interp field size "
1593 "for component %s grid %s field %s interp_field_idx %d (%d != %zu)",
1599 interp_field_sizes[interp_field_idx],
1603 cpl_field, (
size_t)interp_field_idx)));
1622 "ERROR(yac_cget_action): invalid field exchange type")
1642 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
1667 "ERROR(yac_cupdate): current action of %s field \"%s\" of "
1668 "componente \"%s\" is not YAC_ACTION_NONE",
1685 "ERROR(yac_cupdate): invalid field exchange type")
1701 for (
unsigned put_idx = 0; put_idx <
num_puts; ++put_idx)
1715 double *recv_field) {
1722 "ERROR(get_recv_field_pointers): invalid number of interpolation fields "
1733 recv_field_[i] = recv_field;
1773 fputs(
"WARNING: yac get action is beyond end of run date!\n", stderr);
1774 fputs(
"WARNING: yac get action is beyond end of run date!\n", stdout);
1787 "ERROR: collection size does not match with coupling configuration.")
1793 int collection_size,
1794 double ** recv_field,
1804 if ((*ierr == 0) && (interpolation != NULL)) {
1824 double ** recv_field_ =
1852 double ** recv_field,
1861 double ** recv_field,
1874 double * send_field,
1875 double * send_frac_mask,
1876 double **** send_field_,
1877 double **** send_frac_mask_) {
1898 (*send_field_)[i][j] = send_field;
1902 if (send_frac_mask != NULL) {
1906 (*send_frac_mask_)[i] =
1909 (*send_frac_mask_)[i][j] = send_frac_mask;
1928 double *** send_field_;
1943 double *send_frac_mask,
1952 double *** send_field_;
1953 double *** send_frac_mask_;
1956 &send_field_, &send_frac_mask_);
1962 free(send_field_[i]);
1963 free(send_frac_mask_[i]);
1966 free(send_frac_mask_);
1974 double **send_field,
1975 double **send_frac_mask,
1976 double ****send_field_,
1977 double ****send_frac_mask_) {
1999 (*send_field_)[i][j] = send_field[k];
2001 if (send_frac_mask != NULL) {
2005 (*send_frac_mask_)[i] =
2008 (*send_frac_mask_)[i][j] = send_frac_mask[k];
2017 double ** send_field,
2025 double *** send_field_;
2037 double ** send_field,
2039 double ** send_frac_mask,
2047 double *** send_field_;
2048 double *** send_frac_mask_;
2051 &send_field_, &send_frac_mask_);
2057 free(send_field_[i]);
2058 free(send_frac_mask_[i]);
2061 free(send_frac_mask_);
2074 unsigned put_idx = 0;
2097 unsigned put_idx = 0;
2131 double **** send_field_acc_,
double *** send_frac_mask,
2132 double **** send_frac_mask_acc_,
int *info,
int *ierr) {
2136 int with_frac_mask = send_frac_mask != NULL;
2159 fputs(
"WARNING: yac put action is beyond end of run date!\n", stderr);
2160 fputs(
"WARNING: yac put action is beyond end of run date!\n", stdout);
2162 *send_field_acc_ = NULL;
2163 *send_frac_mask_acc_ = NULL;
2182 size_t num_interp_fields =
2190 if (with_frac_mask) {
2193 double *** send_field_acc =
2195 *send_field_acc_ = send_field_acc;
2196 *send_frac_mask_acc_ = send_frac_mask;
2198 for (
int h = 0; h < collection_size; h++) {
2199 for (
size_t i = 0; i < num_interp_fields; i++) {
2206 if (put_mask[i][j]) {
2207 double frac_mask = send_frac_mask[h][i][j];
2208 send_field_acc[h][i][j] =
2209 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
2214 double frac_mask = send_frac_mask[h][i][j];
2215 send_field_acc[h][i][j] =
2216 (frac_mask != 0.0)?(send_field[h][i][j] * frac_mask):0.0;
2222 *send_field_acc_ = NULL;
2223 *send_frac_mask_acc_ = NULL;
2237 "ERROR(yac_cput_pre_processing): invalid time operation type")
2239 int time_accumulation_count =
2242 time_accumulation_count++;
2245 if (time_accumulation_count == 1) {
2247 double send_field_acc_init_value;
2252 send_field_acc_init_value = 0.0;
2255 send_field_acc_init_value = DBL_MAX;
2258 send_field_acc_init_value = -DBL_MAX;
2265 cpl_field, put_idx, send_field_acc_init_value);
2268 cpl_field, put_idx, 0.0);
2273 double *** send_field_acc =
2275 *send_field_acc_ = send_field_acc;
2276 double *** send_frac_mask_acc;
2277 if (with_frac_mask) {
2278 send_frac_mask_acc =
2280 *send_frac_mask_acc_ = send_frac_mask_acc;
2282 send_frac_mask_acc = NULL;
2283 *send_frac_mask_acc_ = NULL;
2287#define PUT_CHECK (put_mask[i][j])
2290#define AGGREGATE_FRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
2295 for (size_t j = 0; j < num_points; ++j) { \
2296 double frac_mask = send_frac_mask[h][i][j]; \
2297 double send_field_value = send_field[h][i][j] * frac_mask; \
2298 if (CHECK && (EXTRA_CHECK)) { \
2299 if (frac_mask != 0.0) { \
2300 send_field_acc[h][i][j] ACCU_OP send_field_value; \
2301 send_frac_mask_acc[h][i][j] ACCU_OP frac_mask; \
2307#define AGGREATE_NOFRAC(CHECK, EXTRA_CHECK, ACCU_OP) \
2312 for (size_t j = 0; j < num_points; ++j) {\
2313 double send_field_value = send_field[h][i][j]; \
2314 if (CHECK && (EXTRA_CHECK)) \
2315 send_field_acc[h][i][j] ACCU_OP send_field_value; \
2319#define AGGREGATE(EXTRA_CHECK, ACCU_OP) \
2321 for (int h = 0; h < collection_size; h++) { \
2322 for (size_t i = 0; i < num_interp_fields; i++) { \
2323 size_t num_points = \
2324 yac_coupling_field_get_data_size( \
2326 yac_coupling_field_get_interp_fields(cpl_field)[i].location); \
2327 if (with_frac_mask) { \
2328 if (put_mask) AGGREGATE_FRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
2329 else AGGREGATE_FRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
2331 if (put_mask) AGGREATE_NOFRAC(PUT_CHECK, EXTRA_CHECK, ACCU_OP) \
2332 else AGGREATE_NOFRAC(NO_CHECK, EXTRA_CHECK, ACCU_OP) \
2351#undef AGGREATE_NOFRAC
2352#undef AGGREGATE_FRAC
2364 cpl_field, put_idx, time_accumulation_count);
2375 double weight = 1.0 / (double)time_accumulation_count;
2378#define PUT_CHECK (put_mask[i][j])
2379#define WEIGHT_ACC_(ACC, CHECK, EXTRA_CHECK) \
2381 for (size_t j = 0; j < num_points; j++) \
2382 if (CHECK && (EXTRA_CHECK)) ACC[h][i][j] *= weight; \
2384#define WEIGHT_ACC(ACC, EXTRA_CHECK) \
2386 if (put_mask) WEIGHT_ACC_(ACC, PUT_CHECK, EXTRA_CHECK) \
2387 else WEIGHT_ACC_(ACC, NO_CHECK, EXTRA_CHECK) \
2390 for (
int h = 0; h < collection_size; ++h) {
2391 for (
size_t i = 0; i < num_interp_fields; i++) {
2400 WEIGHT_ACC(send_field_acc, send_frac_mask_acc[h][i][j] != 0.0)
2415 cpl_field, put_idx, 0);
2426 int const collection_size,
2427 double ***
const send_field,
2429 double ***
const send_frac_mask,
2447 "ERROR: collection size does not match with coupling configuration.")
2449 for (
unsigned put_idx = 0;
2459 send_field, &send_field_acc,
2460 send_frac_mask, &send_frac_mask_acc,
2461 &curr_action, &curr_ierr);
2463 *info =
MAX(*info, curr_action);
2464 *ierr =
MAX(*ierr, curr_ierr);
2477 if ((curr_action ==
NONE) || (curr_action ==
REDUCTION))
continue;
2482 if ((*ierr == 0) && (interpolation != NULL)) {
2484 int with_frac_mask =
2488 (with_frac_mask && (send_frac_mask != NULL)) ||
2490 "ERROR: interpolation for field \"%s\" was built for dynamic "
2491 "fractional masking, but no mask was provided",
2494 (!with_frac_mask && (send_frac_mask == NULL)) ||
2496 "ERROR: interpolation for field \"%s\" was not built for dynamic "
2497 "fractional masking, but a mask was provided",
2500 double *** send_field_ptr =
2501 (send_field_acc == NULL)?send_field:send_field_acc;
2502 double *** send_frac_mask_ptr =
2503 (send_frac_mask_acc == NULL)?send_frac_mask:send_frac_mask_acc;
2507 interpolation, send_field_ptr, send_frac_mask_ptr);
2516 double ***
const send_field,
2529 int const recv_field_id,
2543 double *** send_field_;
2545 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
2546 double ** recv_field_ =
2550 send_field_id, recv_field_id,
collection_size, send_field_, recv_field_,
2551 send_info, recv_info, ierr);
2562 int const recv_field_id,
2567 double *send_frac_mask,
2579 double *** send_field_;
2580 double *** send_frac_mask_;
2583 &send_field_, &send_frac_mask_);
2584 double ** recv_field_ =
2588 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
2589 recv_field_, send_info, recv_info, ierr);
2593 free(send_field_[i]);
2594 free(send_frac_mask_[i]);
2597 free(send_frac_mask_);
2604 int const recv_field_id,
2606 double ** send_field,
2608 double ** recv_field,
2618 double *** send_field_;
2620 send_field_id,
collection_size, send_field, NULL, &send_field_, NULL);
2623 send_field_id, recv_field_id,
collection_size, send_field_, recv_field,
2624 send_info, recv_info, ierr);
2634 int const recv_field_id,
2636 double ** send_field,
2638 double ** send_frac_mask,
2640 double ** recv_field,
2649 double *** send_field_;
2650 double *** send_frac_mask_;
2653 &send_field_, &send_frac_mask_);
2656 send_field_id, recv_field_id,
collection_size, send_field_, send_frac_mask_,
2657 recv_field, send_info, recv_info, ierr);
2660 free(send_field_[i]);
2661 free(send_frac_mask_[i]);
2664 free(send_frac_mask_);
2670 int const recv_field_id,
2672 double ***
const send_field,
2674 double ***
const send_frac_mask,
2676 double ** recv_field,
2697 "ERROR(yac_cexchange_frac): "
2698 "collection size does not match with coupling configuration.")
2702 "ERROR(yac_cexchange_frac): more than one put per field is not supported "
2703 "for yac_cexchange_frac.")
2712 &send_field_acc, send_frac_mask, &send_frac_mask_acc,
2713 &send_action, &send_ierr);
2715 *send_info =
MAX(*send_info, send_action);
2716 *ierr =
MAX(*ierr, send_ierr);
2723 (send_action ==
NONE) ||
2742 double *** send_field_ptr =
2743 (send_field_acc == NULL)?send_field:send_field_acc;
2744 double *** send_frac_mask_ptr =
2745 (send_frac_mask_acc == NULL)?send_frac_mask:send_frac_mask_acc;
2747 int with_frac_mask =
2751 if (get_interpolation != NULL) {
2754 get_interpolation == put_interpolation,
2755 "ERROR(yac_cexchange): send_field_id and recv_field_id do not match")
2758 (with_frac_mask && (send_frac_mask != NULL)) ||
2760 "ERROR: interpolation for field \"%s\" was built for dynamic "
2761 "fractional masking, but no mask was provided",
2764 (!with_frac_mask && (send_frac_mask == NULL)) ||
2766 "ERROR: interpolation for field \"%s\" was not built for dynamic "
2767 "fractional masking, but a mask was provided",
2772 put_interpolation, send_field_ptr, send_frac_mask_ptr, recv_field);
2775 put_interpolation, send_field_ptr, recv_field);
2780 (with_frac_mask && (send_frac_mask != NULL)) ||
2782 "ERROR: interpolation for field \"%s\" was built for dynamic "
2783 "fractional masking, but no mask was provided",
2786 (!with_frac_mask && (send_frac_mask == NULL)) ||
2788 "ERROR: interpolation for field \"%s\" was not built for dynamic "
2789 "fractional masking, but a mask was provided",
2795 put_interpolation, send_field_ptr, send_frac_mask_ptr);
2805 int const recv_field_id,
2807 double ***
const send_field,
2809 double ** recv_field,
2816 send_field, NULL, recv_field, send_info, recv_info, ierr);
2847 int yac_instance_id,
int emit_flags,
char ** config) {
2867 const char* grid_name,
const char* field_name){
2873 "ERROR(yac_cget_field_id_instance): "
2874 "no field '%s' defined on the local process for "
2875 "component '%s' and grid '%s'", field_name, comp_name, grid_name);
2882 grid_name, field_name);
2914 const char* comp_name ) {
2920 "ERROR(yac_cget_comp_grid_names_instance):"
2921 "Invalid comp_name. (NULL is not allowed)");
2937 const char* grid_name) {
2944 size_t nbr_comp_fields =
2946 for(
size_t field_idx=0; field_idx<nbr_comp_fields; ++field_idx)
2951 couple_config, comp_idx, field_idx)))
2962 const char ** comp_names ) {
2967 for(
size_t i=0;i<nbr_comps;++i) {
2979 int nbr_grids,
const char ** grid_names ) {
2984 for(
size_t i=0; i<nbr_grids; ++i){
2995 int nbr_grids,
const char ** grid_names ) {
3002 "ERROR(yac_cget_comp_grid_names_instance):"
3003 "Invalid comp_name. (NULL is not allowed)");
3007 grid_names[idx] = grid_name;
3014 const char ** grid_names ) {
3020 const char * comp_name,
const char* grid_name,
3021 int nbr_fields,
const char ** field_names ) {
3028 size_t nbr_comp_fields =
3031 for(
size_t field_idx=0; field_idx<nbr_comp_fields; ++field_idx) {
3036 couple_config, comp_idx, field_idx))) {
3039 couple_config, comp_idx, field_idx);
3046 int nbr_fields,
const char ** field_names ) {
3049 comp_name, grid_name, nbr_fields, field_names );
3055 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3062 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3070 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3077 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3084 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3091 YAC_ASSERT(field != NULL,
"ERROR: field ID not defined!");
3098 int yac_instance_id,
const char* comp_name,
const char* grid_name,
3099 const char* field_name ) {
3106 couple_config, comp_name, grid_name, field_name);
3110 const char* field_name ) {
3113 grid_name, field_name);
3117 int yac_instance_id,
const char* comp_name,
const char* grid_name,
3118 const char* field_name) {
3124 comp_name, grid_name, field_name);
3128 const char* comp_name,
const char* grid_name,
const char* field_name ) {
3134 comp_name, grid_name, field_name);
3138 const char* comp_name,
const char* grid_name,
const char* field_name) {
3146 const char* grid_name,
const char* field_name ) {
3149 grid_name, field_name);
3153 const char* grid_name,
const char* field_name ) {
3160 couple_config, comp_name, grid_name, field_name);
3164 const char* field_name ) {
3167 grid_name, field_name);
3173 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
3174 double *x_vertices,
double *y_vertices,
int *grid_id) {
3176 size_t nbr_vertices_size_t[2] =
3177 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
3185 nbr_vertices_size_t, cyclic, x_vertices, y_vertices));
3191 const char * grid_name,
int nbr_vertices[2],
int cyclic[2],
3192 double *x_vertices,
double *y_vertices,
int *grid_id) {
3194 size_t nbr_vertices_size_t[2] =
3195 {(size_t)nbr_vertices[0], (
size_t)nbr_vertices[1]};
3203 nbr_vertices_size_t, cyclic, x_vertices, y_vertices));
3209 const char * grid_name,
int nbr_vertices,
3210 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
3211 double *y_vertices,
int *cell_to_vertex,
int *grid_id) {
3220 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
3221 x_vertices, y_vertices, cell_to_vertex));
3227 const char * grid_name,
int nbr_vertices,
3228 int nbr_cells,
int *num_vertices_per_cell,
double *x_vertices,
3229 double *y_vertices,
int *cell_to_vertex,
int *grid_id) {
3238 (
size_t)nbr_vertices, (
size_t)nbr_cells, num_vertices_per_cell,
3239 x_vertices, y_vertices, cell_to_vertex));
3245 int const * global_index,
int location,
int grid_id) {
3257 "ERROR(yac_cset_global_index): invalid location")
3260 grid_global_ids = &(grid_data->
cell_ids);
3271 grid_global_ids = &(grid_data->
edge_ids);
3277 size_t global_ids_size = count *
sizeof(**grid_global_ids);
3278 if (*grid_global_ids == NULL) *grid_global_ids =
xmalloc(global_ids_size);
3279 for (
size_t i = 0; i < count; ++i)
3280 (*grid_global_ids)[i] = (
yac_int)(global_index[i]);
3286 int const * is_core,
int location,
int grid_id) {
3291 int ** grid_core_mask;
3298 "ERROR(yac_cset_core_mask): invalid location")
3318 size_t core_mask_size = count *
sizeof(**grid_core_mask);
3319 if (*grid_core_mask == NULL) *grid_core_mask =
xmalloc(core_mask_size);
3320 memcpy(*grid_core_mask, is_core, core_mask_size);
3357 *interp_stack_config_id =
3366 interp_stack_config_id,
"interp_stack_config_id");
3383 int interp_stack_config_id,
3384 int reduction_type,
int partial_coverage) {
3388 interp_stack_config_id,
"interp_stack_config_id");
3394 "ERROR(yac_add_interp_stack_config_average): invalid reduction type")
3402 int interp_stack_config_id,
3403 int weight_type,
int partial_coverage) {
3407 interp_stack_config_id,
"interp_stack_config_id");
3412 "ERROR(yac_add_interp_stack_config_ncc): invalid reduction type")
3420 int interp_stack_config_id,
3421 int type,
size_t n,
double scale) {
3425 interp_stack_config_id,
"interp_stack_config_id");
3433 "ERROR(yac_add_interp_stack_config_nnn): invalid weightening type")
3440 int interp_stack_config_id,
int order,
int enforced_conserv,
3441 int partial_coverage,
int normalisation) {
3445 interp_stack_config_id,
"interp_stack_config_id");
3450 "ERROR(yac_add_interp_stack_config_conservative):"
3451 "invalid normalisation type")
3454 interp_stack_config, order, enforced_conserv, partial_coverage,
3459 int interp_stack_config_id,
double spread_distance,
3460 double max_search_distance,
int weight_type,
int scale_type,
3461 double src_sphere_radius,
double tgt_sphere_radius) {
3465 interp_stack_config_id,
"interp_stack_config_id");
3470 "ERROR(yac_add_interp_stack_config_spmap):"
3471 "invalid weightening type")
3478 "ERROR(yac_add_interp_stack_config_spmap):"
3479 "invalid scaling type")
3482 interp_stack_config, spread_distance, max_search_distance,
3485 src_sphere_radius, tgt_sphere_radius);
3492 interp_stack_config_id,
"interp_stack_config_id");
3498 int interp_stack_config_id,
char const * filename,
char const * src_grid_name,
3499 char const * tgt_grid_name) {
3503 interp_stack_config_id,
"interp_stack_config_id");
3506 interp_stack_config, filename, src_grid_name,
3511 int interp_stack_config_id,
double value) {
3515 interp_stack_config_id,
"interp_stack_config_id");
3521 int interp_stack_config_id,
char const * constructor_key,
3522 char const * do_search_key) {
3526 interp_stack_config_id,
"interp_stack_config_id");
3529 interp_stack_config, constructor_key, do_search_key);
3533 int interp_stack_config_id,
int creep_distance) {
3537 interp_stack_config_id,
"interp_stack_config_id");
3543 int interp_stack_config_id,
char const * func_compute_weights_key) {
3547 interp_stack_config_id,
"interp_stack_config_id");
3550 interp_stack_config, func_compute_weights_key);
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)
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)
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_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)
int YAC_YAML_EMITTER_JSON
emit to JSON format
void yac_yaml_read_coupling(struct yac_couple_config *couple_config, const char *yaml_filename, int parse_flags)
int YAC_YAML_PARSER_DEFAULT
default parse flags (YAML format)
int YAC_YAML_PARSER_JSON_FORCE
assume JSON format
int YAC_YAML_EMITTER_DEFAULT
emit to YAML format
char const * yac_time_to_ISO(char const *time, enum yac_time_unit_type time_unit)
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_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)
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)
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)
size_t yac_couple_config_get_collection_size(struct yac_couple_config *couple_config, char const *component_name, char const *grid_name, char const *field_name)
size_t yac_couple_config_get_num_components(struct yac_couple_config *couple_config)
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)
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_set_coupling_field_put_op_time_accumulation_count(struct coupling_field *field, unsigned put_idx, int count)
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)
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)
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, 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_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_setup(struct yac_instance *instance)
struct coupling_field * yac_instance_add_field(struct yac_instance *instance, char const *field_name, char const *comp_name, struct yac_basic_grid *grid, struct yac_interp_field *interp_fields, size_t num_interp_fields, int collection_size, char const *timestep)
void yac_instance_dummy_new(MPI_Comm comm)
void yac_instance_def_components(struct yac_instance *instance, char const **comp_names, size_t num_comps)
struct yac_couple_config * yac_instance_get_couple_config(struct yac_instance *instance)
void yac_instance_def_couple(struct yac_instance *instance, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_period, int time_reduction, struct yac_interp_stack_config *interp_stack_config, int src_lag, int tgt_lag, const char *weight_file_name, int 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)
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)
yac_interp_avg_weight_type
@ YAC_INTERP_AVG_ARITHMETIC
void yac_interp_method_callback_add_compute_weights_callback(yac_func_compute_weights compute_weights_callback, void *user_data, char const *key)
void(* yac_func_compute_weights)(double const tgt_coords[3], int src_cell_id, size_t src_cell_idx, int const **global_results_points, double **result_weights, size_t *result_count, void *user_data)
yac_interp_method_conserv_normalisation
@ YAC_INTERP_CONSERV_DESTAREA
@ YAC_INTERP_CONSERV_FRACAREA
yac_interp_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_user_file(struct yac_interp_stack_config *interp_stack_config, char const *filename, char const *src_grid_name, char const *tgt_grid_name)
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, double tgt_sphere_radius)
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 scale)
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_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_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_callback(struct yac_interp_stack_config *interp_stack_config, char const *func_compute_weights_key)
struct yac_interp_stack_config * yac_interp_stack_config_new()
void yac_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)
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)
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
enum yac_reduction_type time_operation
enum yac_action_type action
size_t num_src_mask_names
enum yac_location location
static char * yac_version
int const YAC_YEAR_OF_365_DAYS
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 int yac_lookup_pointer(void const *pointer)
void yac_cinit_comm_dummy(MPI_Comm comm)
void yac_cget_grid_names(int nbr_grids, const char **grid_names)
void yac_cadd_interp_stack_config_ncc(int interp_stack_config_id, int weight_type, int partial_coverage)
void yac_cget_ext_couple_config_scale_factor(int ext_couple_config_id, double *scale_factor)
const char * yac_cget_field_metadata_instance(int yac_instance_id, const char *comp_name, const char *grid_name, const char *field_name)
void yac_cput_frac(int const field_id, int const collection_size, double ***const send_field, double ***const send_frac_mask, int *info, int *ierr)
void yac_cadd_interp_stack_config_spmap(int interp_stack_config_id, double spread_distance, double max_search_distance, int weight_type, int scale_type, double src_sphere_radius, double tgt_sphere_radius)
static struct yac_interpolation * yac_cget_pre_processing(int const field_id, int collection_size, int *info, int *ierr)
static int yac_init(MPI_Comm comm)
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
void yac_cget_ext_couple_config_mapping_side(int ext_couple_config_id, int *mapping_side)
static void get_send_field_pointers(int const field_id, int const collection_size, double *send_field, double *send_frac_mask, double ****send_field_, double ****send_frac_mask_)
void yac_cpredef_comp_instance(int yac_instance_id, char const *name, int *comp_id)
int const YAC_SPMAP_SRCAREA
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_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)
char * yac_cget_end_datetime_instance(int yac_instance_id)
void yac_cdef_datetime(const char *start_datetime, const char *end_datetime)
int const YAC_SPMAP_INVTGTAREA
void yac_cget_ext_couple_config_mask_name(int ext_couple_config_id, char const **tgt_mask_name)
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_cset_ext_couple_config_tgt_mask_name(int ext_couple_config_id, char const *tgt_mask_name)
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)
void yac_cdef_grid_metadata(const char *grid_name, const char *metadata)
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_ACTION_GET_FOR_CHECKPOINT
void yac_cadd_interp_stack_config_creep(int interp_stack_config_id, int creep_distance)
static void check_default_instance_id(char const *routine_name)
void yac_cput_frac_(int const field_id, int const collection_size, double *send_field, double *send_frac_mask, int *info, int *ierr)
void yac_cdef_component_metadata(const char *comp_name, const char *metadata)
int const YAC_TIME_UNIT_YEAR
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)
int const YAC_AVG_ARITHMETIC
void yac_cget_comp_size_c2py(int comp_id, int *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_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_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)
static struct user_input_data_component ** components
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_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)
int const YAC_TIME_UNIT_HOUR
int const YAC_YEAR_OF_360_DAYS
void yac_cfinalize_instance(int yac_instance_id)
static struct user_input_data_masks ** masks
static void init_ext_couple_config(struct yac_ext_couple_config *ext_couple_config)
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_cset_ext_couple_config_src_mask_names(int ext_couple_config_id, size_t num_src_mask_names, char const *const *src_mask_names)
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_ext_couple_config(int *ext_couple_config_id)
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_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)
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)
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
int yac_cget_field_id(const char *comp_name, const char *grid_name, const char *field_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)
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)
static int yac_pointer_to_unique_id(void *pointer)
void check_mpi_initialised(char const *routine_name)
void yac_cdef_points_reg2d(int const grid_id, int const *nbr_points, int const located, double const *x_points, double const *y_points, int *point_id)
void yac_cget_comps_comm(const char **comp_names, int num_comps, MPI_Comm *comps_comm)
void yac_cexchange_ptr_(int const send_field_id, int const recv_field_id, int const collection_size, double **send_field, double **recv_field, int *send_info, int *recv_info, int *ierr)
void yac_cinit_comm_instance(MPI_Comm comm, int *yac_instance_id)
void yac_cadd_interp_stack_config_nnn(int interp_stack_config_id, int type, size_t n, double scale)
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_ccheck_field_dimensions(int field_id, int collection_size, int num_interp_fields, int const *interp_field_sizes)
int const YAC_TIME_UNIT_MONTH
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)
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_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_SPMAP_FRACAREA
void yac_cdef_component_metadata_instance(int yac_instance_id, const char *comp_name, const char *metadata)
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 mapping_side, double scale_factor, double scale_summand, int num_src_mask_names, char const *const *src_mask_names, char const *tgt_mask_name)
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)
char * yac_cget_end_datetime(void)
int const YAC_ACTION_NONE
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_cwait(int field_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, char const *weight_file, 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)
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
int const YAC_ACTION_GET_FOR_RESTART
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
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
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_user_callback(int interp_stack_config_id, char const *func_compute_weights_key)
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)
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)
int const YAC_CALENDAR_NOT_SET
void yac_cadd_interp_stack_config_user_file(int interp_stack_config_id, char const *filename, char const *src_grid_name, char const *tgt_grid_name)
void yac_cget_ext_couple_config_scale_summand(int ext_couple_config_id, double *scale_summand)
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_cget_interp_stack_config(int *interp_stack_config_id)
static void yac_free_pointer_unique_lookup()
void yac_cinit_dummy(void)
void yac_cadd_interp_stack_config_average(int interp_stack_config_id, int reduction_type, int partial_coverage)
int const YAC_ACTION_PUT_FOR_RESTART
#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_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)
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_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)
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 struct yac_interpolation * 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 *info, int *ierr)
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
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]