11#if defined(__NVCOMPILER)
12# pragma diag_suppress unsigned_compare_with_zero
13#elif defined(__GNUC__)
14# pragma GCC diagnostic push
15# pragma GCC diagnostic ignored "-Wpedantic"
16# pragma GCC diagnostic ignored "-Wall"
17# pragma GCC diagnostic ignored "-Wextra"
20#if defined(__NVCOMPILER)
21# pragma diag_default unsigned_compare_with_zero
22#elif defined(__GNUC__)
23# pragma GCC diagnostic pop
33#include "mtime_calendar.h"
178#define CAST_NAME_TYPE_PAIRS(...) (struct yac_name_type_pair[]) {__VA_ARGS__}
179#define COUNT_NAME_TYPE_PAIRS(...) \
180 sizeof(CAST_NAME_TYPE_PAIRS(__VA_ARGS__)) / sizeof(struct yac_name_type_pair)
181#define DEF_NAME_TYPE_PAIR(NAME, TYPE) {.name = #NAME, .type = (int)(TYPE)}
182#define DEF_NAME_TYPE_PAIRS(NAME, ...) \
183 static const struct yac_name_type_pair NAME [] = {__VA_ARGS__}; \
184 static const size_t num_ ## NAME = COUNT_NAME_TYPE_PAIRS(__VA_ARGS__);
223 yaml_debug_sync_loc_keys,
234 yaml_debug_output_grid_keys,
299 yaml_comp_grid_names_keys,
304 yaml_weight_file_data_keys,
309 weight_file_on_existing_types,
315#if defined __NVCOMPILER && (__NVCOMPILER_MAJOR__ <= 23 || __NVCOMPILER_MAJOR__ == 24 && __NVCOMPILER_MINOR__ <= 3)
330 char const * str_value;
347#if defined __NVCOMPILER && (__NVCOMPILER_MAJOR__ <= 23 || __NVCOMPILER_MAJOR__ == 24 && __NVCOMPILER_MINOR__ <= 3)
377#define DEF_INTERP_METHOD_ADD_FUNC(NAME, FUNC) \
378 static void add_interp_method_ ## NAME ( \
379 struct yac_interp_stack_config * interp_stack, \
380 interp_method_parameter_value * parameters, \
381 char const * yaml_filename) { \
382 char const * routine_name = "add_interp_method_" #NAME; \
384 (void)yaml_filename; \
385 (void)routine_name; \
387#define DEF_INTERP_METHOD_GET_FUNC(NAME, FUNC) \
388 static void get_interp_method_ ## NAME ( \
389 union yac_interp_stack_config_entry const * interp_stack_entry, \
390 interp_method_parameter_value * parameter_values) { \
391 char const * routine_name = "get_interp_method_" #NAME; \
392 (void)interp_stack_entry; \
393 (void)parameter_values; \
394 (void)routine_name; \
397#define DEF_ENUM_PARAM(NAME, DEFAULT, ...) \
399 .type = ENUM_PARAM, \
401 {.valid_values = CAST_NAME_TYPE_PAIRS(__VA_ARGS__), \
402 .num_valid_values = COUNT_NAME_TYPE_PAIRS(__VA_ARGS__)}, \
403 .default_value.enum_value = (int)(DEFAULT)}
404#define DEF_INT_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX) \
408 {.valid_min = (int)(VALID_MIN), \
409 .valid_max = (int)(VALID_MAX)}, \
410 .default_value.int_value = (int)(DEFAULT)}
411#define DEF_DBLE_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX) \
413 .type = DBLE_PARAM, \
415 {.valid_min = (double)(VALID_MIN), \
416 .valid_max = (double)(VALID_MAX)}, \
417 .default_value.dble_value = (double)(DEFAULT)}
418#define DEF_DEG_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX) \
422 {.valid_min = (double)(VALID_MIN), \
423 .valid_max = (double)(VALID_MAX)}, \
424 .default_value.dble_value = (double)(DEFAULT)}
425#define DEF_BOOL_PARAM(NAME, DEFAULT) \
427 .type = BOOL_PARAM, \
428 .default_value.bool_value = (int)(DEFAULT)}
429#define DEF_STR_PARAM(NAME, DEFAULT, MAX_STR_LEN) \
432 .data.str_param.max_str_len = (MAX_STR_LEN), \
433 .default_value.str_value = (DEFAULT)}
434#define DEF_INTERP_METHOD_PARAM(NAME, ...) \
435 static struct interp_method_parameter \
436 interp_method_parameters_ ## NAME [] = {__VA_ARGS__};
438#define YAML_ASSERT(CHECK, MSG) \
439 YAC_ASSERT_F((CHECK), \
440 "ERROR(%s): " MSG " in YAML configuration file \"%s\"", \
441 routine_name, yaml_filename)
442#define YAML_ASSERT_F(CHECK, MSG, ...) \
443 YAC_ASSERT_F((CHECK), \
444 "ERROR(%s): " MSG " in YAML configuration file \"%s\"", \
445 routine_name, __VA_ARGS__, yaml_filename)
447#define DEF_INTERP_STACK_ADD(NAME, ...) \
448 yac_interp_stack_config_add_ ## NAME ( \
449 interp_stack, __VA_ARGS__);
451#define DEF_INTERP_STACK_ADD_NO_PARAM(NAME) \
452 yac_interp_stack_config_add_ ## NAME ( \
455#define DEF_INTERP_STACK_GET(NAME, ...) \
456 yac_interp_stack_config_entry_get_ ## NAME ( \
457 interp_stack_entry, __VA_ARGS__);
459#define DEF_INTERP_STACK_GET_NO_PARAM(NAME) \
462#define DEF_INTERP_METHOD(NAME, FUNC_ADD, FUNC_GET, ...) \
463 DEF_INTERP_METHOD_ADD_FUNC(NAME, FUNC_ADD) \
464 DEF_INTERP_METHOD_GET_FUNC(NAME, FUNC_GET) \
465 DEF_INTERP_METHOD_PARAM(NAME, __VA_ARGS__)
471 parameters[1].bool_value),
474 &reduction_type, ¶meter_values[1].bool_value)
475 parameter_values[0].enum_value = (int)reduction_type;,
488 parameters[1].bool_value),
492 parameter_values[0].enum_value = (int)
weight_type;,
504 (
size_t)parameters[1].int_value,
505 parameters[2].dble_value,
506 parameters[3].dble_value),
510 &
type, &n, ¶meter_values[2].dble_value,
511 ¶meter_values[3].dble_value)
512 parameter_values[0].enum_value = (int)
type;
513 parameter_values[1].int_value = (int)n;
514 parameter_values[2].dble_value /=
YAC_RAD;,
531 parameters[0].int_value,
532 parameters[1].bool_value,
533 parameters[2].bool_value,
537 ¶meter_values[0].int_value,
538 ¶meter_values[1].bool_value,
539 ¶meter_values[2].bool_value, &normalisation)
540 parameter_values[3].enum_value = (int)normalisation;,
551static void get_spmap_parameters(
552 double * sphere_radius,
char const * filename,
char const * varname,
553 char const * routine_name,
char const * yaml_filename,
char const *
type) {
556 if ((*sphere_radius == 0.0) && (filename == NULL) && (varname == NULL)) {
561 (*sphere_radius != 0.0) ^ ((filename != NULL) || (varname != NULL)),
562 "configurations for the computation and reading of %s cell areas "
563 "were provided (only one is allowed)",
type);
566 (*sphere_radius != 0.0) || ((filename != NULL) && (varname != NULL)),
567 "incomplete information for read of %s cell areas "
568 "(filename: \"%s\" varname: \"%s\")",
569 type, filename?filename:
"missing", varname?varname:
"missing");
574 double src_sphere_radius = parameters[4].dble_value;
575 char const * src_filename = parameters[5].str_value;
576 char const * src_varname = parameters[6].str_value;
577 int src_min_global_id = parameters[7].int_value;
578 double tgt_sphere_radius = parameters[8].dble_value;
579 char const * tgt_filename = parameters[9].str_value;
580 char const * tgt_varname = parameters[10].str_value;
581 int tgt_min_global_id = parameters[11].int_value;
582 get_spmap_parameters(
583 &src_sphere_radius, src_filename, src_varname,
584 routine_name, yaml_filename,
"source");
585 get_spmap_parameters(
586 &tgt_sphere_radius, tgt_filename, tgt_varname,
587 routine_name, yaml_filename,
"target");
589 parameters[0].dble_value,
590 parameters[1].dble_value,
593 src_sphere_radius, src_filename, src_varname, src_min_global_id,
594 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id),
598 ¶meter_values[0].dble_value,
599 ¶meter_values[1].dble_value,
601 ¶meter_values[4].dble_value,
602 ¶meter_values[5].str_value,
603 ¶meter_values[6].str_value,
604 ¶meter_values[7].int_value,
605 ¶meter_values[8].dble_value,
606 ¶meter_values[9].str_value,
607 ¶meter_values[10].str_value,
608 ¶meter_values[11].int_value)
609 parameter_values[0].dble_value /=
YAC_RAD;
610 parameter_values[1].dble_value /=
YAC_RAD;
612 parameter_values[3].enum_value = (int)scale_type;,
629 src_cell_area:
yac:sphere_radius, 0.0, 1e-9, DBL_MAX),
637 tgt_cell_area:
yac:sphere_radius, 0.0, 1e-9, DBL_MAX),
648 parameters[0].dble_value != DBL_MAX,
649 "parameter 'user_value' of interpolation method 'fixed' is unset");
652 ¶meter_values[0].dble_value),
659 parameters[0].str_value,
660 "parameter \"filename\" of interpolation method \"user file\" is unset");
662 (
char*)(parameters[0].str_value),
688 (
char*)(parameters[0].str_value),
689 (
char*)(parameters[1].str_value)),
691 ¶meter_values[0].str_value,
692 ¶meter_values[1].str_value),
710 (
size_t)parameters[0].int_value,
711 parameters[1].dble_value,
712 parameters[2].dble_value),
716 &
type, &n, ¶meter_values[1].dble_value,
717 ¶meter_values[2].dble_value)
720 "ERROR(get_interp_method_nnn): n-nearest-neighbor type missmatch");
721 parameter_values[0].int_value = (int)n;
722 parameter_values[1].dble_value /=
YAC_RAD;
723 parameter_values[3].enum_value = (int)0;,
737 ¶meter_values[0].int_value),
744 parameters[0].str_value,
745 "parameter \"func_compute_weights\" "
746 "of interpolation method \"user callback\" is unset")
749 ¶meter_values[0].str_value),
755#define ADD_INTERPOLATION(NAME, TYPE) \
758 .add_interpolation = add_interp_method_ ## NAME , \
759 .get_interpolation = get_interp_method_ ## NAME , \
760 .parameters = interp_method_parameters_ ## NAME , \
762 sizeof(interp_method_parameters_ ## NAME ) / \
763 sizeof(interp_method_parameters_ ## NAME [0])}
764#define ADD_INTERPOLATION_NO_PARAM(NAME, TYPE) \
767 .add_interpolation = add_interp_method_ ## NAME , \
768 .get_interpolation = get_interp_method_ ## NAME , \
769 .parameters = interp_method_parameters_ ## NAME , \
772struct yac_interpolation_method {
775 void(*add_interpolation)(
778 char const * yaml_filename);
779 void(*get_interpolation)(
783 size_t num_parameters;
803 fy_node_t value_node,
char const *
name,
char const * yaml_filename) {
804 char const * routine_name =
"yaml_parse_string_value";
807 value_node && fy_node_is_scalar(value_node),
808 "unsupported node type for \"%s\" (the node is expected to be scalar)",
811 return fy_node_get_scalar0(value_node);
815 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
816 char const * routine_name =
"yaml_parse_calendar_value";
818 char const * calendar_name =
823 calendar_types, num_calendar_types, calendar_name);
826 calendar_type != INT_MAX,
827 "\"%s\" is not a valid calendar name", calendar_name);
829 return (calendarType)calendar_type;
833 fy_node_t value_node,
char const * key_name,
char const * yaml_filename,
835 char const * routine_name =
"yaml_parse_timestep_value";
840 value_node && fy_node_is_scalar(value_node),
841 "unsupported node type for \"%s\" (the node is expected to be scalar)",
843 char const * timestep =
845 char const * timestep_iso =
849 timestep_iso,
"valid to convert timestep \"%s\" to ISO 8601 format",
852 return strdup(timestep_iso);
856 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
857 char const * routine_name =
"yaml_parse_timestep_unit_value";
859 char const * timestep_unit_str =
864 timestep_units, num_timestep_units, timestep_unit_str);
867 timestep_unit != INT_MAX,
868 "\"%s\" is not a valid time step unit", timestep_unit_str);
874 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
875 char const * routine_name =
"yaml_parse_time_reduction_value";
877 char const * time_reduction_str =
882 time_operations, num_time_operations, time_reduction_str);
885 time_reduction != INT_MAX,
886 "\"%s\" is not a valid time reduction type in", time_reduction_str);
892 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
893 char const * routine_name =
"yaml_parse_integer_value";
895 char const * integer_str =
899 long int long_value = strtol(integer_str, &endptr, 10);
902 (endptr != integer_str) && (*endptr ==
'\0') &&
903 (long_value >= INT_MIN) && (long_value <= INT_MAX),
904 "\"%s\" is not a valid integer value", integer_str);
906 return (
int)long_value;
910 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
911 char const * routine_name =
"yaml_parse_double_value";
913 char const * double_str =
917 double dble_value = strtod(double_str, &endptr);
920 (endptr != double_str) && (*endptr ==
'\0'),
921 "\"%s\" is not a valid double value", double_str);
928 fy_node_t value_node,
char const * key_name,
char const * yaml_filename) {
929 char const * routine_name =
"yaml_parse_enum_value";
931 char const * value_str =
940 "\"%s\" is not a valid enum value for \"%s\" ", value_str, key_name);
946 char const ** interpolation_type_str,
fy_node_t * parameter_node,
947 fy_node_t interp_method_node,
char const * yaml_filename) {
948 char const * routine_name =
"yaml_parse_base_interp_method_node";
951 fy_node_is_scalar(interp_method_node) ||
952 fy_node_is_mapping(interp_method_node),
953 "unsupported interpolation method node type "
954 "(interpolation methods are expected to be defined as either scalar "
957 switch(fy_node_get_type(interp_method_node)) {
960 *interpolation_type_str =
962 interp_method_node,
"interpolation method name", yaml_filename);
963 *parameter_node = NULL;
969 fy_node_mapping_item_count(interp_method_node) == 1,
970 "base interpolation method node is only allowed to have one pair ");
973 fy_node_mapping_get_by_index(interp_method_node, 0);
976 fy_node_pair_key(base_interp_method_pair);
978 *interpolation_type_str =
980 base_interp_method_key_node,
"interpolation method name",
983 fy_node_t base_interp_method_value_node =
984 fy_node_pair_value(base_interp_method_pair);
987 fy_node_is_mapping(base_interp_method_value_node),
988 "unsupported base interpolation method value node type "
989 "for interpolation method \"%s\" "
990 "(interpolation method parameters are expected to be "
991 "defined as maps)", *interpolation_type_str);
993 *parameter_node = base_interp_method_value_node;
1001 fy_node_t value_node,
char const * interpolation_name,
1002 char const * yaml_filename) {
1003 char const * routine_name =
"yaml_parse_interp_method_parameter_value";
1012 "unsupported parameter type for interpolation method \"%s\"",
1013 interpolation_name);
1017 switch(parameter->
type) {
1020 parameter_value.enum_value =
1024 value_node,
"interpolation method enum parameter value",
1028 parameter_value.int_value =
1030 value_node,
"interpolation method integer parameter value",
1035 "\"%d\" is not a valid integer parameter value for parameter \"%s\" "
1036 "of interpolation method \"%s\" "
1037 "(valid range: %d <= value <= %d)",
1038 parameter_value.int_value, parameter->
name, interpolation_name,
1043 parameter_value.dble_value =
1045 value_node,
"interpolation method double parameter value",
1050 "\"%lf\" is not a valid double parameter value for parameter \"%s\" "
1051 "of interpolation method \"%s\" "
1052 "(valid range: %e <= value <= %e)",
1053 parameter_value.dble_value, parameter->
name, interpolation_name,
1058 parameter_value.dble_value =
1060 value_node,
"interpolation method degree parameter value",
1065 "\"%lf\" is not a valid degree parameter value for parameter \"%s\" "
1066 "of interpolation method \"%s\" "
1067 "(valid range: %e <= value <= %e)",
1068 parameter_value.dble_value, parameter->
name, interpolation_name,
1071 parameter_value.dble_value *=
YAC_RAD;
1074 parameter_value.bool_value =
1076 bool_names, num_bool_names, value_node,
1077 "interpolation method bool parameter value", yaml_filename);
1080 parameter_value.str_value =
1082 value_node,
"interpolation method string parameter value",
1085 strlen(parameter_value.str_value) <
1087 "\"%s\" is not a valid string parameter value for parameter \"%s\" "
1088 "of interpolation method \"%s\" "
1089 "(maximum string length: %d)",
1090 parameter_value.str_value, parameter->
name, interpolation_name,
1095 return parameter_value;
1102 char const * parameter_name_prefix,
char const * yaml_filename) {
1103 char const * routine_name =
"yaml_parse_interp_method_parameter";
1105 char const * parameter_name_ =
1107 fy_node_pair_key(parameter_pair),
1108 "interpolation method parameter name", yaml_filename);
1110 char const * parameter_name;
1111 if (parameter_name_prefix) {
1113 xmalloc(strlen(parameter_name_prefix) + strlen(parameter_name_) + 2);
1115 (
char*)parameter_name,
"%s:%s", parameter_name_prefix, parameter_name_);
1117 parameter_name = parameter_name_;
1121 fy_node_pair_value(parameter_pair);
1124 parameter_value_node &&
1125 (fy_node_is_scalar(parameter_value_node) ||
1126 fy_node_is_mapping(parameter_value_node)),
1127 "unsupported parameter node type for interpolation \"%s\" "
1128 "(the node is expected to be either scalar or a map)", interpolation_name);
1130 if (fy_node_is_scalar(parameter_value_node)) {
1133 for (
size_t i = 0; (i < num_parameters) && !found_flag; ++i)
1134 if ((found_flag = !strcmp(parameter_name, parameters[i].
name)))
1135 parameter_values[i] =
1137 ¶meters[i], fy_node_pair_value(parameter_pair),
1138 interpolation_name, yaml_filename);
1142 "\"%s\" is not a valid parameter for interpolation method \"%s\"",
1143 parameter_name, interpolation_name);
1150 while ((pair = fy_node_mapping_iterate(parameter_value_node, &iter)))
1152 parameter_values, parameters, num_parameters, pair, interpolation_name,
1153 parameter_name, yaml_filename);
1156 if (parameter_name_prefix) free((
void*)parameter_name);
1162 fy_node_t parameter_node,
char const * yaml_filename) {
1163 char const * routine_name =
"yaml_parse_interp_method_parameters";
1167 parameter_values[i] =
interp_method->parameters[i].default_value;
1170 if (!parameter_node)
return;
1173 fy_node_is_mapping(parameter_node),
1174 "unsupported interpolation method parameter node type "
1175 "for interpolation method \"%s\" "
1176 "(interpolation method parameters are expected to be defined as maps)",
1182 while ((pair = fy_node_mapping_iterate(parameter_node, &iter)))
1191 fy_node_t interp_method_node,
char const * yaml_filename) {
1192 char const * routine_name =
"yaml_parse_interp_method";
1194 char const * interpolation_type_str;
1198 &interpolation_type_str, ¶meter_node,
1199 interp_method_node, yaml_filename);
1201 struct yac_interpolation_method const *
interp_method = NULL;
1209 "\"%s\" is not a valid interpolation method",
1210 interpolation_type_str);
1213 interp_method_paramter_values[
interp_method->num_parameters];
1216 parameter_node, yaml_filename);
1218 interp_stack, interp_method_paramter_values, yaml_filename);
1223 fy_node_t interp_stack_node,
char const * yaml_filename) {
1224 char const * routine_name =
"yaml_parse_interp_stack_value";
1227 fy_node_is_sequence(interp_stack_node),
1228 "unsupported interpolation stack node type"
1229 "(interpolation stacks are expected to be defined as a sequence)");
1234 while ((interp_stack_item =
1235 fy_node_sequence_iterate(interp_stack_node, &iter)))
1237 interp_stack, interp_stack_item, yaml_filename);
1241 fy_node_t field_node, const char * yaml_filename) {
1242 char const * routine_name =
"yaml_parse_field_name";
1245 fy_node_is_scalar(field_node) ||
1246 fy_node_is_mapping(field_node),
1247 "unsupported field name node type "
1248 "(field name is either scalars or a map)");
1250 struct field_couple_field_names field_name;
1253 if (fy_node_is_scalar(field_node)) {
1262 fy_node_mapping_lookup_scalar0_by_simple_key(
1263 field_node,
"src", (
size_t)-1);
1265 fy_node_mapping_lookup_scalar0_by_simple_key(
1266 field_node,
"tgt", (
size_t)-1);
1269 field_name.src && field_name.tgt &&
1270 (fy_node_mapping_item_count(field_node) == 2),
1271 "invalid field name mapping node "
1272 "(field name mapping node has to contain two maps "
1273 "with the keys \"src\" and \"tgt\")")
1280 char const *** values,
size_t * num_values,
1281 fy_node_t values_node,
char const * sequence_name,
1282 const char * yaml_filename) {
1283 char const * routine_name =
"yaml_parse_string_sequence";
1286 (*values == NULL) && (*num_values == 0),
1287 "values have already been set for sequence \"%s\"",
1291 if (fy_node_is_sequence(values_node)) {
1293 *num_values = (size_t)fy_node_sequence_item_count(values_node);
1294 *values =
xmalloc(*num_values *
sizeof(**values));
1295 for (
size_t value_idx = 0; value_idx < *num_values; ++value_idx)
1296 (*values)[value_idx] =
1298 fy_node_sequence_get_by_index(values_node, value_idx),
1299 sequence_name, yaml_filename);
1302 *values =
xmalloc(
sizeof(**values));
1305 values_node, sequence_name, yaml_filename);
1310 struct field_couple_field_names ** field_names,
1311 size_t * num_field_names,
fy_node_t fields_node,
1312 const char * yaml_filename) {
1315 if (fy_node_is_sequence(fields_node)) {
1317 size_t start_idx = *num_field_names;
1318 *num_field_names += (size_t)fy_node_sequence_item_count(fields_node);
1320 xrealloc(*field_names, *num_field_names *
sizeof(**field_names));
1321 for (
size_t i = start_idx; i < *num_field_names; ++i)
1324 fy_node_sequence_get_by_index(fields_node, i), yaml_filename);
1328 xrealloc(*field_names, *num_field_names *
sizeof(**field_names));
1329 (*field_names)[*num_field_names-1] =
1335 char const ** comp_name,
char const *** grid_names,
size_t * num_grid_names,
1336 fy_node_t values_node,
char const * type_name,
const char * yaml_filename) {
1337 char const * routine_name =
"yaml_parse_comp_grids_names";
1340 *comp_name == NULL,
"%s component name already set", type_name);
1342 (*grid_names == NULL) && (*num_grid_names == 0),
1343 "%s grid names already set", type_name);
1346 fy_node_is_mapping(values_node),
1347 "unsupported component/grid names node type (has to be a map)");
1352 while((pair = fy_node_mapping_iterate(values_node, &iter))) {
1357 yaml_comp_grid_names_keys, num_yaml_comp_grid_names_keys,
1358 fy_node_pair_key(pair),
1359 "component/grid names parameter name", yaml_filename);
1360 char const * comp_grid_names_key_name =
1362 yaml_comp_grid_names_keys, num_yaml_comp_grid_names_keys,
1363 comp_grid_names_key_type);
1365 fy_node_t name_node = fy_node_pair_value(pair);
1367 switch(comp_grid_names_key_type) {
1372 name_node, comp_grid_names_key_name, yaml_filename);
1376 grid_names, num_grid_names,
1377 name_node, comp_grid_names_key_name, yaml_filename);
1384 char const ** weight_file_name,
1386 fy_node_t values_node,
char const * type_name,
const char * yaml_filename) {
1387 char const * routine_name =
"yaml_parse_weight_file";
1390 *weight_file_name == NULL,
"%s weight file name already set", type_name);
1393 "%s \"on existing\" already set ", type_name);
1396 fy_node_is_mapping(values_node),
1397 "unsupported weight file data node type (has to be a map)");
1402 while((pair = fy_node_mapping_iterate(values_node, &iter))) {
1407 yaml_weight_file_data_keys, num_yaml_weight_file_data_keys,
1408 fy_node_pair_key(pair),
1409 "weight file data parameter name", yaml_filename);
1410 char const * weight_file_data_key_name =
1412 yaml_weight_file_data_keys, num_yaml_weight_file_data_keys,
1413 weight_file_data_key_type);
1415 fy_node_t weight_file_data_node = fy_node_pair_value(pair);
1417 switch(weight_file_data_key_type) {
1422 weight_file_data_node, weight_file_data_key_name, yaml_filename);
1428 weight_file_on_existing_types,
1429 num_weight_file_on_existing_types,
1430 weight_file_data_node, weight_file_data_key_name,
1445 yaml_couple_keys, num_yaml_couple_keys,
1446 fy_node_pair_key(couple_pair),
1447 "couple configuration parameter name", yaml_filename);
1448 char const * couple_key_name =
1450 yaml_couple_keys, num_yaml_couple_keys, couple_key_type);
1452 fy_node_t value_node = fy_node_pair_value(couple_pair);
1454 switch (couple_key_type) {
1461 value_node, couple_key_name, yaml_filename);
1470 value_node, couple_key_name, yaml_filename);
1477 value_node, couple_key_name, yaml_filename);
1486 value_node, couple_key_name, yaml_filename);
1492 value_node, yaml_filename);
1497 value_node, couple_key_name, yaml_filename, time_unit);
1502 value_node, couple_key_name, yaml_filename);
1507 value_node, couple_key_name, yaml_filename);
1512 value_node, couple_key_name, yaml_filename);
1517 value_node, couple_key_name, yaml_filename);
1523 weight_file_on_existing_types,
1524 num_weight_file_on_existing_types,
1525 value_node, couple_key_name, yaml_filename);
1531 value_node, couple_key_name, yaml_filename);
1536 mapping_sides, num_mapping_sides,
1537 value_node, couple_key_name, yaml_filename);
1542 value_node, couple_key_name, yaml_filename);
1547 value_node, couple_key_name, yaml_filename);
1551 field_buffer->
interp_stack, value_node, yaml_filename);
1558 value_node, couple_key_name, yaml_filename);
1563 value_node, couple_key_name, yaml_filename);
1568 value_node, couple_key_name, yaml_filename);
1573 bool_names, num_bool_names,
1574 value_node, couple_key_name, yaml_filename);
1582 char const * routine_name =
"yaml_parse_couple";
1585 fy_node_is_mapping(couple_node),
1586 "unsupported couple node type "
1587 "(couples are expected to be defined as a mapping)");
1592 .src.grid.name = NULL,
1593 .src.grid.count = 0,
1594 .tgt.comp_name = NULL,
1595 .tgt.grid.name = NULL,
1596 .tgt.grid.count = 0,
1597 .field_names = NULL,
1598 .num_field_names = 0,
1599 .coupling_period = NULL,
1604 .weight_file.name = NULL,
1606 .mapping_on_source = 1,
1607 .scale_factor = 1.0,
1608 .scale_summand = 0.0,
1609 .src_mask_names = NULL,
1610 .num_src_mask_names = 0,
1611 .tgt_mask_name = NULL,
1612 .yaxt_exchanger_name = NULL,
1613 .use_raw_exchange = 0};
1618 while ((pair = fy_node_mapping_iterate(couple_node, &iter)))
1620 &field_buffer, pair, yaml_filename, time_unit);
1623 field_buffer.
src.
comp_name,
"missing source component name");
1626 "missing source grid name (component \"%s\")",
1628 for (
size_t i = 0; i < field_buffer.
src.
grid.
count; ++i)
1632 "invalid source grid name (component \"%s\" grid idx %zu)",
1636 "missing target component name");
1639 "missing target grid name (component \"%s\")",
1641 for (
size_t i = 0; i < field_buffer.
tgt.
grid.
count; ++i)
1645 "invalid target grid name (component \"%s\" grid idx %zu)",
1649 "missing field names "
1650 "(source component \"%s\" source grid \"%s\" "
1651 "target component \"%s\" target grid \"%s\")",
1656 "missing coupling period "
1657 "(source component \"%s\" source grid \"%s\" "
1658 "target component \"%s\" target grid \"%s\")",
1663 for (
size_t j = 0; j < field_buffer.
src.
grid.
count; ++j)
1664 for (
size_t k = 0; k < field_buffer.
tgt.
grid.
count; ++k)
1702 fy_node_t coupling_node,
char const * yaml_filename,
1704 char const * routine_name =
"yaml_parse_coupling";
1707 if (!coupling_node)
return;
1710 fy_node_is_sequence(coupling_node),
1711 "unsupported coupling node type "
1712 "(couplings are expected to be defined as a sequence)");
1717 while ((couple_node = fy_node_sequence_iterate(coupling_node, &iter)))
1722 fy_node_t config_file_node, char const * file_type_name,
1723 const char * yaml_filename) {
1724 char const * routine_name =
"yaml_parse_config_file_value";
1727 fy_node_is_scalar(config_file_node) ||
1728 fy_node_is_mapping(config_file_node),
1729 "unsupported config file node type "
1730 "(%s is either scalar or a map)", file_type_name);
1732 struct debug_config_file config_file =
1735 char * str_buffer =
xmalloc(strlen(file_type_name) + 32);
1738 if (fy_node_is_scalar(config_file_node)) {
1743 strcat(strcpy(str_buffer, file_type_name),
" name"),
1750 fy_node_mapping_lookup_by_string(
1751 config_file_node,
"filename", (
size_t)-1);
1753 fy_node_mapping_lookup_by_string(
1754 config_file_node,
"filetype", (
size_t)-1);
1756 fy_node_mapping_lookup_by_string(
1757 config_file_node,
"include_definitions", (
size_t)-1);
1761 "invalid %s mapping node "
1762 "(global config file mapping node has to include a map "
1763 "with the keys \"filename\")", file_type_name)
1767 filename_node, strcat(strcpy(str_buffer, file_type_name),
" name"),
1773 config_filetypes, num_config_filetypes,
1774 filetype_node, strcat(strcpy(str_buffer, file_type_name),
" type"),
1776 config_file.include_definitions =
1777 (include_definitions_node)?
1779 bool_names, num_bool_names,
1780 include_definitions_node,
1781 strcat(strcpy(str_buffer, file_type_name),
" include definitions"),
1786 config_file.name,
"missing filename for %s", file_type_name);
1795 fy_node_pair_t config_file_pair,
char const * config_file_type_name,
1796 const char * yaml_filename) {
1799 debug_sync_loc_key_type =
1802 yaml_debug_sync_loc_keys,
1803 num_yaml_debug_sync_loc_keys,
1804 fy_node_pair_key(config_file_pair),
1805 "config synchronisation location parameter name",
1807 char const * debug_sync_loc_key_name =
1809 yaml_debug_sync_loc_keys, num_yaml_debug_sync_loc_keys,
1810 debug_sync_loc_key_type);
1812 fy_node_t value_node = fy_node_pair_value(config_file_pair);
1814 char config_file_type_name_sync[
1815 strlen(config_file_type_name) + strlen(debug_sync_loc_key_name) + 8];
1817 config_file_type_name_sync,
"%s (%s)",
1818 config_file_type_name, debug_sync_loc_key_name);
1820 config_file_buffer->
config_file[debug_sync_loc_key_type] =
1822 value_node, config_file_type_name_sync, yaml_filename);
1826 fy_node_t config_file_node, char const * config_file_type_name,
1827 char const * yaml_filename) {
1828 char const * routine_name =
"yaml_parse_debug_config_file_buffer";
1831 fy_node_is_mapping(config_file_node),
1832 "unsupported %s node type "
1833 "(%s is expected to be defined as a mapping)",
1834 config_file_type_name, config_file_type_name);
1849 "invalid unsupported synchronisation location (%d) for %s",
1850 i, config_file_type_name);
1856 while ((pair = fy_node_mapping_iterate(config_file_node, &iter)))
1858 &config_file_buffer, pair, config_file_type_name, yaml_filename);
1860 return config_file_buffer;
1865 char const * yaml_filename) {
1866 char const * routine_name =
"yaml_parse_debug_global_config";
1868 char const * config_file_type_name =
"debug global config file";
1871 fy_node_is_mapping(global_config_node),
1872 "unsupported %s node type "
1873 "(%s is expected to be defined as a mapping)",
1874 config_file_type_name, config_file_type_name);
1878 global_config_node, config_file_type_name, yaml_filename);
1891 char const ** grid_name,
char const ** file_name,
1897 yaml_debug_output_grid_keys, num_yaml_debug_output_grid_keys,
1898 fy_node_pair_key(output_grid_pair),
1899 "output grid parameter name", yaml_filename);
1900 char const * debug_output_key_name =
1902 yaml_debug_output_grid_keys, num_yaml_debug_output_grid_keys,
1903 output_grid_key_type);
1905 fy_node_t value_node = fy_node_pair_value(output_grid_pair);
1907 switch(output_grid_key_type) {
1924 char const * yaml_filename) {
1925 char const * routine_name =
"yaml_parse_output_grid";
1928 fy_node_is_mapping(output_grid_node),
1929 "unsupported output grid node type "
1930 "(output grids are expected to be defined as a mapping)");
1932 char const * grid_name = NULL;
1933 char const * file_name = NULL;
1938 while ((pair = fy_node_mapping_iterate(output_grid_node, &iter)))
1942 YAML_ASSERT_F(file_name,
"missing file name for grid \"%s\"", grid_name);
1946 couple_config, grid_name, file_name);
1951 char const * yaml_filename) {
1952 char const * routine_name =
"yaml_parse_debug_output_grids";
1955 fy_node_is_sequence(output_grids_node),
1956 "unsupported debug output grids node type "
1957 "(debug output grids is expected to be defined as a sequence)");
1962 while ((output_grid_node =
1963 fy_node_sequence_iterate(output_grids_node, &iter)))
1965 couple_config, output_grid_node, yaml_filename);
1970 const char * yaml_filename) {
1975 yaml_debug_keys, num_yaml_debug_keys,
1976 fy_node_pair_key(debug_pair),
1977 "debug configuration parameter name", yaml_filename);
1979 fy_node_t value_node = fy_node_pair_value(debug_pair);
1981 switch (debug_key_type) {
1985 couple_config, value_node, yaml_filename);
1989 couple_config, value_node, yaml_filename);
1995 bool_names, num_bool_names, value_node,
1996 "\"missing definition is fatal\" bool value", yaml_filename));
2003 fy_node_t debug_node,
char const * yaml_filename) {
2004 char const * routine_name =
"yaml_parse_debug";
2007 if (!debug_node)
return;
2010 fy_node_is_mapping(debug_node),
2011 "unsupported debug node type "
2012 "(debug is expected to be defined as a mapping)");
2017 while ((pair = fy_node_mapping_iterate(debug_node, &iter)))
2024 char const ** start_datetime,
char const ** end_datetime) {
2025 char const * routine_name =
"yaml_parse_base_map_pair";
2027 fy_node_t key_node = fy_node_pair_key(base_pair);
2030 fy_node_is_scalar(key_node),
2031 "unsupported key node type "
2032 "(key nodes are expected to be scalar nodes)");
2034 char const * base_key_name = fy_node_get_scalar0(key_node);
2037 yaml_base_keys, num_yaml_base_keys, base_key_name);
2040 (base_key_type == INT_MAX) ||
2046 (base_key_type ==
DEBUG),
2047 "unsupported base key name \"%s\"",
2050 fy_node_t value_node = fy_node_pair_value(base_pair);
2052 switch (base_key_type) {
2056 value_node, base_key_name, yaml_filename);
2061 value_node, base_key_name, yaml_filename);
2066 value_node, base_key_name, yaml_filename));
2071 value_node, base_key_name, yaml_filename);
2074 "inconsistent redefinition of time unit")
2075 *time_unit = time_unit_;
2081 "time unit has to be defined before the couplings")
2083 couple_config, value_node, yaml_filename, *time_unit);
2087 couple_config, value_node, yaml_filename);
2096 const char * yaml_filename) {
2097 char const * routine_name =
"yaml_parse_document";
2100 fy_node_t root_node = fy_document_root(document);
2103 if (!root_node)
return;
2106 fy_node_is_mapping(root_node),
2107 "unsupported root node type (root node is expected to be a mapping node)");
2109 char const * start_datetime = NULL;
2110 char const * end_datetime = NULL;
2116 while ((pair = fy_node_mapping_iterate(root_node, &iter)))
2118 couple_config, pair, yaml_filename, &time_unit,
2119 &start_datetime, &end_datetime);
2121 if ((start_datetime != NULL) || (end_datetime != NULL)) {
2125 "ERROR(yaml_parse_document): "
2126 "cannot set start/end datetime because calendar has not yet been set");
2129 couple_config, start_datetime, end_datetime);
2136 char const * routine_name =
"yac_yaml_read_coupling";
2141 "ERROR(%s): YAML configuration file could not be found \"%s\"",
2142 routine_name, yaml_filename);
2148 "ERROR(%s): could not open YAML configuration file \"%s\"",
2149 routine_name, yaml_filename);
2152 struct fy_parse_cfg parse_config =
2153 {.search_path =
".",
2156 parse_config.flags =
2157 (
enum fy_parse_cfg_flags)parse_flags;
2160 fy_document_build_from_fp(&parse_config, config_file);
2163 "ERROR(%s): could not parse YAML configuration file \"%s\"",
2164 routine_name, yaml_filename);
2168 !fy_document_resolve(document),
2169 "could not resolve anchors and merge keys");
2175 fy_document_destroy(document);
2183 char const * str_interp_stack_config,
int parse_flags) {
2184 char const * routine_name =
2185 "yac_yaml_parse_interp_stack_config_string";
2186 char const * yaml_filename =
2187 "user provided interp stack config string";
2190 str_interp_stack_config != NULL,
"interpolation stack string is NULL");
2193 struct fy_parse_cfg parse_config =
2194 {.search_path =
".",
2197 parse_config.flags =
2198 (
enum fy_parse_cfg_flags)parse_flags;
2201 fy_document_build_from_string(
2202 &parse_config, str_interp_stack_config, (
size_t)-1);
2207 !fy_document_resolve(document),
2208 "could not resolve anchors and merge keys");
2210 fy_node_t interp_stack_config_node = fy_document_root(document);
2211 YAML_ASSERT(interp_stack_config_node,
"invalid root node");
2217 interp_stack_config, interp_stack_config_node,
2221 fy_document_destroy(document);
2223 return interp_stack_config;
2233 fy_node_create_scalar_copy(document,
value, strlen(
value));
2236 "ERROR(yac_yaml_create_scalar): failed to create scalar node");
2245 int value_size = snprintf(str_value,
sizeof(str_value),
"%d",
value);
2247 (value_size >= 0) && ((
size_t)value_size <
sizeof(str_value)),
2248 "ERROR(yac_yaml_create_scalar_int): "
2249 "could not write \"%d\" to string buffer of size %zu",
2250 value,
sizeof(str_value));
2259 int value_size = snprintf(str_value,
sizeof(str_value),
"%g",
value);
2261 (value_size >= 0) && ((
size_t)value_size <
sizeof(str_value)),
2262 "ERROR(yac_yaml_create_scalar_dble): "
2263 "could not write \"%g\" to string buffer of size %zu",
2264 value,
sizeof(str_value));
2270 fy_document_t document,
char const *
const * values,
size_t num_values) {
2273 if (num_values == 0)
return (
fy_node_t)NULL;
2276 values,
"ERROR(yac_yaml_create_sequence_scalar): no values provided");
2279 fy_node_t sequence_node = fy_node_create_sequence(document);
2281 sequence_node,
"ERROR(yac_yaml_create_sequence_scalar): "
2282 "failed to create sequence node");
2284 for (
size_t value_idx = 0; value_idx < num_values; ++value_idx) {
2285 char const *
value = values[value_idx];
2287 value,
"ERROR(yac_yaml_create_sequence_scalar): "
2288 "invalid value at idx %zu", value_idx);
2289 int appending_failed =
2290 fy_node_sequence_append(
2293 !appending_failed,
"ERROR(yac_yaml_create_sequence_scalar): "
2294 "failed to append interpolation node");
2297 return sequence_node;
2307 key,
"ERROR(yac_yaml_map_append): NULL key is not supported");
2312 "ERROR(yac_yaml_map_append): failed to get document from node");
2315 int appending_failed =
2316 fy_node_mapping_append(
2320 "ERROR(yac_yaml_map_append): failed to append mapping node pair");
2328 document,
"ERROR(yac_yaml_map_append_scalar): "
2329 "failed to get document from node");
2339 document,
"ERROR(yac_yaml_map_append_scalar_int): "
2340 "failed to get document from node");
2351 document,
"ERROR(yac_yaml_map_append_scalar_dble): "
2352 "failed to get document from node");
2360 size_t couple_idx,
size_t field_couple_idx) {
2362 const char * src_field_name;
2363 const char * tgt_field_name;
2365 couple_config, couple_idx, field_couple_idx,
2366 &src_field_name, &tgt_field_name);
2369 if (!strcmp(src_field_name, tgt_field_name))
2373 fy_node_t field_name_node = fy_node_create_mapping(document);
2375 field_name_node,
"ERROR(yac_yaml_create_field_name_node): "
2376 "failed to create mapping node");
2384 return field_name_node;
2399 "ERROR(yac_yaml_map_append_parameter): unsupported parameter type");
2401 char const *
key = parameter->
name;
2403 switch (parameter->
type) {
2427 bool_names, num_bool_names,
value.bool_value));
2449 "ERROR(compare_parameter_values): "
2450 "invalid interpolation method parameter value type");
2456 (a->enum_value > b->enum_value) - (a->enum_value < b->enum_value);
2459 (a->int_value > b->int_value) - (a->int_value < b->int_value);
2463 (a->dble_value > b->dble_value) - (a->dble_value < b->dble_value);
2466 (a->bool_value > b->bool_value) - (a->bool_value < b->bool_value);
2468 if ((a->str_value != NULL) && (b->str_value != NULL))
2469 return strcmp(a->str_value, b->str_value);
2471 return (a->str_value != NULL) - (b->str_value != NULL);
2482 struct yac_interpolation_method const *
interp_method = NULL;
2493 parameter_values[
MAX(num_parameters,1)];
2494 for (
size_t param_idx = 0; param_idx < num_parameters; ++param_idx)
2495 parameter_values[param_idx] = parameters[param_idx].
default_value;
2497 interp_method->get_interpolation(interp_stack_entry, parameter_values);
2500 fy_node_t parameter_node = fy_node_create_mapping(document);
2502 parameter_node,
"ERROR(yac_yaml_create_interpolation_node): "
2503 "failed to create mapping node");
2505 size_t num_non_default_parameters = 0;
2506 for (
size_t param_idx = 0; param_idx < num_parameters; ++param_idx) {
2509 parameter_values + param_idx, parameters[param_idx].
type)) {
2510 ++num_non_default_parameters;
2512 parameter_node, parameters + param_idx,
2513 parameter_values[param_idx]);
2518 if (num_non_default_parameters) {
2521 interpolation_node = fy_node_create_mapping(document);
2523 interpolation_node,
"ERROR(yac_yaml_create_interpolation_node): "
2524 "failed to create mapping node");
2531 fy_node_free(parameter_node);
2533 interpolation_node =
2537 return interpolation_node;
2542 size_t couple_idx,
size_t field_couple_idx) {
2546 couple_config, couple_idx, field_couple_idx);
2549 interp_stack,
"ERROR(yac_yaml_create_interpolation_stack_node): "
2550 "invalid interpolation stack");
2553 fy_node_t interp_stack_node = fy_node_create_sequence(document);
2555 interp_stack_node,
"ERROR(yac_yaml_create_interpolation_stack_node): "
2556 "failed to create sequence node");
2558 size_t interp_stack_size =
2561 interp_stack_size,
"ERROR(yac_yaml_create_interpolation_stack_node): "
2562 "invalid interpolation stack size");
2564 for (
size_t interp_stack_idx = 0; interp_stack_idx < interp_stack_size;
2565 ++interp_stack_idx) {
2566 int appending_failed =
2567 fy_node_sequence_append(
2572 interp_stack, interp_stack_idx)));
2575 "ERROR(yac_yaml_create_interpolation_stack_node): "
2576 "failed to append interpolation node");
2579 return interp_stack_node;
2584 size_t couple_idx,
size_t field_couple_idx) {
2588 document,
"ERROR(yac_yaml_append_couple_field_nodes): "
2589 "failed to get document from node");
2592 fy_node_t field_couple_node = fy_node_create_mapping(document);
2594 coupling_node,
"ERROR(yac_yaml_append_couple_field_nodes): "
2595 "failed to create mapping node");
2598 char const * src_component_name;
2599 char const * tgt_component_name;
2601 couple_config, couple_idx, field_couple_idx,
2602 &src_component_name, &tgt_component_name);
2609 src_component_name);
2616 tgt_component_name);
2619 char const * src_grid_name;
2620 char const * tgt_grid_name;
2622 couple_config, couple_idx, field_couple_idx,
2623 &src_grid_name, &tgt_grid_name);
2629 yaml_couple_keys, num_yaml_couple_keys,
SOURCE_GRID),
2636 yaml_couple_keys, num_yaml_couple_keys,
TARGET_GRID),
2643 yaml_couple_keys, num_yaml_couple_keys,
FIELD),
2645 document, couple_config, couple_idx, field_couple_idx));
2653 couple_config, couple_idx, field_couple_idx));
2661 time_operations, num_time_operations,
2663 couple_config, couple_idx, field_couple_idx)));
2669 yaml_couple_keys, num_yaml_couple_keys,
SOURCE_LAG),
2671 couple_config, couple_idx, field_couple_idx));
2677 yaml_couple_keys, num_yaml_couple_keys,
TARGET_LAG),
2679 couple_config, couple_idx, field_couple_idx));
2683 couple_config, couple_idx, field_couple_idx)) {
2689 couple_config, couple_idx, field_couple_idx));
2695 weight_file_on_existing_types, num_weight_file_on_existing_types,
2697 couple_config, couple_idx, field_couple_idx)));
2706 mapping_sides, num_mapping_sides,
2708 couple_config, couple_idx, field_couple_idx)));
2716 couple_config, couple_idx, field_couple_idx));
2724 couple_config, couple_idx, field_couple_idx));
2732 document, couple_config, couple_idx, field_couple_idx));
2735 char const *
const * src_mask_names;
2736 size_t num_src_mask_names;
2738 couple_config, couple_idx, field_couple_idx,
2739 &src_mask_names, &num_src_mask_names);
2740 if (num_src_mask_names == 1)
2746 else if (num_src_mask_names > 1)
2752 document, src_mask_names, num_src_mask_names));
2755 char const * tgt_mask_name =
2757 couple_config, couple_idx, field_couple_idx);
2766 char const * yaxt_exchanger_name =
2768 couple_config, couple_idx, field_couple_idx);
2769 if (yaxt_exchanger_name)
2774 yaxt_exchanger_name);
2782 bool_names, num_bool_names,
2784 couple_config, couple_idx, field_couple_idx)));
2786 int appending_failed =
2787 fy_node_sequence_append(coupling_node, field_couple_node);
2790 "ERROR(yac_yaml_append_couple_field_nodes): "
2791 "failed to append field couple node");
2796 size_t couple_idx) {
2798 size_t num_couple_fields =
2801 for (
size_t field_couple_idx = 0;
2802 field_couple_idx < num_couple_fields; ++field_couple_idx)
2804 coupling_node, couple_config, couple_idx, field_couple_idx);
2808 fy_document_t document,
char const * grid_name,
char const * file_name) {
2810 fy_node_t output_grid_node = fy_node_create_mapping(document);
2812 output_grid_node,
"ERROR(yac_yaml_create_output_grid_node): "
2813 "failed to create mapping node");
2818 yaml_debug_output_grid_keys, num_yaml_debug_output_grid_keys,
2824 yaml_debug_output_grid_keys, num_yaml_debug_output_grid_keys,
2828 return output_grid_node;
2835 size_t num_output_grids = 0;
2838 for (
size_t grid_idx = 0; grid_idx <
num_grids; ++grid_idx)
2846 if (num_output_grids > 0) {
2849 output_grids_node = fy_node_create_sequence(document);
2851 output_grids_node,
"ERROR(yac_yaml_create_output_grids_node): "
2852 "failed to create sequence node");
2855 for (
size_t grid_idx = 0; grid_idx <
num_grids; ++grid_idx) {
2857 char const * grid_name =
2859 char const * file_name =
2862 if (file_name != NULL) {
2863 int appending_failed =
2864 fy_node_sequence_append(
2868 !appending_failed,
"ERROR(yac_yaml_create_output_grids_node): "
2869 "failed to append output grid node");
2874 return output_grids_node;
2881 fy_node_t debug_node = fy_node_create_mapping(document);
2883 debug_node,
"ERROR(yac_yaml_create_debug_node): "
2884 "failed to create mapping node");
2897 yaml_debug_keys, num_yaml_debug_keys,
MISSING_DEF),
2899 bool_names, num_bool_names,
2908 size_t num_couples =
2911 if (!num_couples)
return NULL;
2914 fy_node_t coupling_node = fy_node_create_sequence(document);
2916 coupling_node,
"ERROR(yac_yaml_create_coupling_node): "
2917 "failed to create sequence node");
2920 for (
size_t couple_idx = 0; couple_idx < num_couples; ++couple_idx)
2922 coupling_node, couple_config, couple_idx);
2924 return coupling_node;
2929 size_t component_idx,
size_t field_idx) {
2931 fy_node_t field_node = fy_node_create_mapping(document);
2933 field_node,
"ERROR(yac_yaml_create_field_node): "
2934 "failed to create mapping node");
2937 char const * component_name =
2939 couple_config, component_idx);
2940 char const * field_name =
2942 couple_config, component_idx, field_idx);
2943 char const * grid_name =
2945 couple_config, component_idx, field_idx);
2946 char const * metadata =
2948 couple_config, component_name, grid_name, field_name);
2949 size_t collection_size =
2951 couple_config, component_name, grid_name, field_name);
2952 char const * timestep =
2954 couple_config, component_name, grid_name, field_name);
2957 couple_config, component_name, grid_name, field_name);
2958 double frac_mask_fallback_value =
2960 couple_config, component_name, grid_name, field_name);
2973 if (collection_size != SIZE_MAX)
2975 field_node,
"collection_size", (
int)collection_size);
2990 field_node,
"frac_mask_fallback_value", frac_mask_fallback_value);
2997 size_t component_idx) {
3002 if (num_fields == 0)
return (
fy_node_t)NULL;
3004 fy_node_t fields_node = fy_node_create_sequence(document);
3006 fields_node,
"ERROR(yac_yaml_create_fields_node): "
3007 "failed to create sequence node");
3009 for (
size_t field_idx = 0; field_idx < num_fields; ++field_idx) {
3011 int appending_failed =
3012 fy_node_sequence_append(
3015 document, couple_config, component_idx, field_idx));
3017 !appending_failed,
"ERROR(yac_yaml_create_fields_node): "
3018 "failed to append field node");
3026 size_t component_idx) {
3028 fy_node_t component_node = fy_node_create_mapping(document);
3030 component_node,
"ERROR(yac_yaml_create_component_node): "
3031 "failed to create mapping node");
3034 char const * component_name =
3036 char const * metadata =
3040 document, couple_config, component_idx);
3052 return component_node;
3064 fy_node_t components_node = fy_node_create_sequence(document);
3066 components_node,
"ERROR(yac_yaml_create_components_node): "
3067 "failed to create sequence node");
3072 int appending_failed =
3073 fy_node_sequence_append(
3077 !appending_failed,
"ERROR(yac_yaml_create_components_node): "
3078 "failed to append component node");
3081 return components_node;
3088 fy_node_t grid_node = fy_node_create_mapping(document);
3090 grid_node,
"ERROR(yac_yaml_create_grid_node): "
3091 "failed to create mapping node");
3094 char const * grid_name =
3096 char const * metadata =
3118 fy_node_t grids_node = fy_node_create_sequence(document);
3120 grids_node,
"ERROR(yac_yaml_create_grids_node): "
3121 "failed to create sequence node");
3123 for (
size_t grids_idx = 0; grids_idx <
num_grids; ++grids_idx) {
3125 int appending_failed =
3126 fy_node_sequence_append(
3130 !appending_failed,
"ERROR(yac_yaml_create_grids_node): "
3131 "failed to append grid node");
3141 fy_node_t definition_node = fy_node_create_mapping(document);
3144 "ERROR(yac_yaml_create_definitions_node): "
3145 "failed to create mapping node");
3156 return definition_node;
3161 int include_definitions) {
3164 fy_node_t root_node = fy_node_create_mapping(document);
3167 "ERROR(yac_yaml_create_couple_config_nodes): "
3168 "failed to create mapping node");
3174 yaml_base_keys, num_yaml_base_keys,
DEBUG),
3178 if (include_definitions)
3180 root_node,
"definitions",
3188 yaml_base_keys, num_yaml_base_keys,
START_DATE), start_datetime);
3189 free(start_datetime);
3196 yaml_base_keys, num_yaml_base_keys,
END_DATE), end_datetime);
3203 yaml_base_keys, num_yaml_base_keys,
CALENDAR),
3205 calendar_types, num_calendar_types, getCalendarType()));
3219 yaml_base_keys, num_yaml_base_keys,
COUPLING),
3227 int include_definitions) {
3232 document,
"ERROR(yac_yaml_emit): failed to create document");
3237 document, couple_config, include_definitions);
3240 int setting_root_failed =
3241 fy_document_set_root(document, root_node);
3243 !setting_root_failed,
3244 "ERROR(yac_yaml_emit): failed to add root node to document");
3247 char * str_document =
3248 fy_emit_document_to_string(
3249 document, (
enum fy_emitter_cfg_flags)emit_flags);
3252 str_document,
"ERROR(yac_yaml_emit): failed to emit document to string");
3255 fy_document_destroy(document);
3257 return str_document;
static double yaml_parse_double_value(fy_node_t value_node, char const *key_name, char const *yaml_filename)
yaml_debug_sync_loc_key_types
#define DEF_DEG_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX)
#define DEF_ENUM_PARAM(NAME, DEFAULT,...)
static void yaml_parse_couple(struct yac_couple_config *couple_config, fy_node_t couple_node, char const *yaml_filename, enum yac_time_unit_type time_unit)
#define DEF_INTERP_STACK_GET_NO_PARAM(NAME)
static void yaml_parse_interp_method_parameter(interp_method_parameter_value *parameter_values, struct interp_method_parameter const *parameters, size_t num_parameters, fy_node_pair_t parameter_pair, char const *interpolation_name, char const *parameter_name_prefix, char const *yaml_filename)
#define DEF_STR_PARAM(NAME, DEFAULT, MAX_STR_LEN)
enum yac_interp_file_on_missing_file on_missing_file
#define DEF_INTERP_STACK_ADD_NO_PARAM(NAME)
struct yac_interp_stack_config * yac_yaml_parse_interp_stack_config_string(char const *str_interp_stack_config, int parse_flags)
static void yaml_parse_field_names(struct field_couple_field_names **field_names, size_t *num_field_names, fy_node_t fields_node, const char *yaml_filename)
static void yac_yaml_append_couple_nodes(fy_node_t coupling_node, struct yac_couple_config *couple_config, size_t couple_idx)
interp_method_parameter_value
static fy_node_t yac_yaml_create_scalar_dble(fy_document_t document, double value)
static interp_method_parameter_value yaml_parse_interp_method_parameter_value(struct interp_method_parameter const *parameter, fy_node_t value_node, char const *interpolation_name, char const *yaml_filename)
#define DEF_INTERP_STACK_ADD(NAME,...)
static fy_node_t yac_yaml_create_interpolation_node(fy_document_t document, union yac_interp_stack_config_entry const *interp_stack_entry)
struct fy_node_pair * fy_node_pair_t
static fy_node_t yac_yaml_create_field_node(fy_document_t document, struct yac_couple_config *couple_config, size_t component_idx, size_t field_idx)
interp_method_parameter_value_type
static calendarType yaml_parse_calendar_value(fy_node_t value_node, char const *key_name, char const *yaml_filename)
static fy_node_t yac_yaml_create_grids_node(fy_document_t document, struct yac_couple_config *couple_config)
static void yaml_parse_base_map_pair(struct yac_couple_config *couple_config, fy_node_pair_t base_pair, const char *yaml_filename, enum yac_time_unit_type *time_unit, char const **start_datetime, char const **end_datetime)
enum yac_interp_file_on_success on_success
static void yaml_parse_string_sequence(char const ***values, size_t *num_values, fy_node_t values_node, char const *sequence_name, const char *yaml_filename)
static fy_node_t yac_yaml_create_output_grids_node(fy_document_t document, struct yac_couple_config *couple_config)
static int compare_parameter_values(interp_method_parameter_value const *a, interp_method_parameter_value const *b, enum interp_method_parameter_value_type type)
int const YAC_YAML_PARSER_JSON_AUTO
char * yac_yaml_emit_coupling(struct yac_couple_config *couple_config, int emit_flags, int include_definitions)
static fy_node_t yac_yaml_create_components_node(fy_document_t document, struct yac_couple_config *couple_config)
static fy_node_t yac_yaml_create_couple_config_nodes(fy_document_t document, struct yac_couple_config *couple_config, int include_definitions)
static fy_node_t yac_yaml_create_grid_node(fy_document_t document, struct yac_couple_config *couple_config, size_t grid_idx)
static void yac_yaml_map_append_scalar_dble(fy_node_t map, char const *key, double value)
static void yaml_parse_document(struct yac_couple_config *couple_config, fy_document_t document, const char *yaml_filename)
parameter_values[2] enum_value
static int yaml_parse_enum_value(struct yac_name_type_pair const *valid_values, size_t num_valid_values, fy_node_t value_node, char const *key_name, char const *yaml_filename)
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)
@ WEIGHT_FILE_ON_EXISTING
static int yaml_parse_integer_value(fy_node_t value_node, char const *key_name, char const *yaml_filename)
static void yaml_parse_debug_output_grids(struct yac_couple_config *couple_config, fy_node_t output_grids_node, char const *yaml_filename)
int const YAC_YAML_EMITTER_JSON
emit to JSON format
static enum yac_time_unit_type yaml_parse_timestep_unit_value(fy_node_t value_node, char const *key_name, char const *yaml_filename)
static void yac_yaml_map_append_scalar(fy_node_t map, char const *key, char const *value)
struct fy_document * fy_document_t
int const YAC_YAML_PARSER_DEFAULT
default parse flags (YAML format)
static fy_node_t yac_yaml_create_output_grid_node(fy_document_t document, char const *grid_name, char const *file_name)
#define DEF_INTERP_STACK_GET(NAME,...)
static struct field_couple_field_names yaml_parse_field_name(fy_node_t field_node, const char *yaml_filename)
static void yaml_parse_base_interp_method_node(char const **interpolation_type_str, fy_node_t *parameter_node, fy_node_t interp_method_node, char const *yaml_filename)
static void yaml_parse_weight_file_data(char const **weight_file_name, enum yac_weight_file_on_existing *on_existing, fy_node_t values_node, char const *type_name, const char *yaml_filename)
yaml_weight_file_data_key_types
@ WEIGHT_FILE_DATA_ON_EXISTING
static fy_node_t yac_yaml_create_field_name_node(fy_document_t document, struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
static char const * yaml_parse_timestep_value(fy_node_t value_node, char const *key_name, char const *yaml_filename, enum yac_time_unit_type time_unit)
#define ADD_INTERPOLATION(NAME, TYPE)
#define DEF_DBLE_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX)
static struct debug_config_file_buffer yaml_parse_debug_config_file_buffer(fy_node_t config_file_node, char const *config_file_type_name, char const *yaml_filename)
#define DEF_NAME_TYPE_PAIR(NAME, TYPE)
#define YAML_ASSERT_F(CHECK, MSG,...)
static fy_node_t yac_yaml_create_component_node(fy_document_t document, struct yac_couple_config *couple_config, size_t component_idx)
static void yac_yaml_map_append_parameter(fy_node_t map, struct interp_method_parameter const *parameter, interp_method_parameter_value value)
yaml_debug_output_grid_key_types
static void yaml_parse_coupling(struct yac_couple_config *couple_config, fy_node_t coupling_node, char const *yaml_filename, enum yac_time_unit_type time_unit)
static fy_node_t yac_yaml_create_coupling_node(fy_document_t document, struct yac_couple_config *couple_config)
static void yaml_parse_interp_method_parameters(interp_method_parameter_value *parameter_values, struct yac_interpolation_method const *interp_method, fy_node_t parameter_node, char const *yaml_filename)
#define DEF_INT_PARAM(NAME, DEFAULT, VALID_MIN, VALID_MAX)
static void yaml_parse_output_grid_pair(char const **grid_name, char const **file_name, fy_node_pair_t output_grid_pair, char const *yaml_filename)
static fy_node_t yac_yaml_create_interpolation_stack_node(fy_document_t document, struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
static enum yac_reduction_type yaml_parse_time_reduction_value(fy_node_t value_node, char const *key_name, char const *yaml_filename)
static void yaml_parse_debug_global_config(struct yac_couple_config *couple_config, fy_node_t global_config_node, char const *yaml_filename)
#define DEF_INTERP_METHOD(NAME, FUNC_ADD, FUNC_GET,...)
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
static void yac_yaml_append_couple_field_nodes(fy_node_t coupling_node, struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
static void yaml_parse_interp_stack_value(struct yac_interp_stack_config *interp_stack, fy_node_t interp_stack_node, char const *yaml_filename)
static fy_node_t yac_yaml_create_debug_node(fy_document_t document, struct yac_couple_config *couple_config)
struct fy_node * fy_node_t
static void yaml_parse_debug(struct yac_couple_config *couple_config, fy_node_t debug_node, char const *yaml_filename)
static void yac_yaml_map_append(fy_node_t map, char const *key, fy_node_t value)
static fy_node_t yac_yaml_create_sequence_scalar(fy_document_t document, char const *const *values, size_t num_values)
const interpolation_methods[]
static char const * yaml_parse_string_value(fy_node_t value_node, char const *name, char const *yaml_filename)
static void yaml_parse_debug_map_pair(struct yac_couple_config *couple_config, fy_node_pair_t debug_pair, const char *yaml_filename)
static void yac_yaml_map_append_scalar_int(fy_node_t map, char const *key, int value)
#define ADD_INTERPOLATION_NO_PARAM(NAME, TYPE)
static void yaml_parse_comp_grid_names(char const **comp_name, char const ***grid_names, size_t *num_grid_names, fy_node_t values_node, char const *type_name, const char *yaml_filename)
#define YAML_ASSERT(CHECK, MSG)
static fy_node_t yac_yaml_create_fields_node(fy_document_t document, struct yac_couple_config *couple_config, size_t component_idx)
static void yaml_parse_debug_config_file_map_pair(struct debug_config_file_buffer *config_file_buffer, fy_node_pair_t config_file_pair, char const *config_file_type_name, const char *yaml_filename)
enum yac_interp_ncc_weight_type weight_type
static void yaml_parse_interp_method(struct yac_interp_stack_config *interp_stack, fy_node_t interp_method_node, char const *yaml_filename)
#define DEF_NAME_TYPE_PAIRS(NAME,...)
yaml_comp_grid_names_key_types
static fy_node_t yac_yaml_create_scalar(fy_document_t document, char const *value)
static void yaml_parse_output_grid(struct yac_couple_config *couple_config, fy_node_t output_grid_node, char const *yaml_filename)
static fy_node_t yac_yaml_create_scalar_int(fy_document_t document, int value)
static struct debug_config_file yaml_parse_config_file_value(fy_node_t config_file_node, char const *file_type_name, const char *yaml_filename)
#define DEF_BOOL_PARAM(NAME, DEFAULT)
static void yaml_parse_couple_map_pair(struct field_couple_buffer *field_buffer, fy_node_pair_t couple_pair, const char *yaml_filename, enum yac_time_unit_type time_unit)
@ NUM_INTERPOLATION_METHODS
static fy_node_t yac_yaml_create_definitions_node(fy_document_t document, struct yac_couple_config *couple_config)
char const * yac_couple_config_get_yaxt_exchanger_name(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
size_t yac_couple_config_get_num_fields(struct yac_couple_config *couple_config, size_t component_idx)
void yac_couple_config_get_field_grid_names(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx, char const **src_grid_name, char const **tgt_grid_name)
const char * yac_couple_config_grid_get_output_filename(struct yac_couple_config *couple_config, const char *grid_name)
char * yac_couple_config_get_start_datetime(struct yac_couple_config *couple_config)
void yac_couple_config_set_datetime(struct yac_couple_config *couple_config, char const *start, char const *end)
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)
void yac_couple_config_def_couple(struct yac_couple_config *couple_config, 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, 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)
int yac_couple_config_mapping_on_source(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
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)
char const * yac_couple_config_get_coupling_period(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
struct yac_interp_stack_config * yac_couple_config_get_interp_stack(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
enum yac_weight_file_on_existing yac_couple_config_get_weight_file_on_existing(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
char const * yac_couple_config_get_field_name(struct yac_couple_config *couple_config, size_t component_idx, size_t field_idx)
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)
size_t yac_couple_config_get_num_couple_fields(struct yac_couple_config *couple_config, size_t couple_idx)
void yac_couple_config_get_src_mask_names(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx, char const *const **mask_names, size_t *num_mask_names)
int yac_couple_config_get_use_raw_exchange(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
size_t yac_couple_config_get_num_couples(struct yac_couple_config *couple_config)
int yac_couple_config_get_target_lag(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
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)
int yac_couple_config_get_source_lag(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
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)
double yac_couple_config_get_scale_factor(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
char const * yac_couple_config_get_tgt_mask_name(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
void yac_couple_config_add_grid(struct yac_couple_config *couple_config, char const *name)
char const * yac_couple_config_get_grid_name(struct yac_couple_config *couple_config, size_t grid_idx)
double yac_couple_config_get_scale_summand(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
enum yac_reduction_type yac_couple_config_get_coupling_period_operation(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
int yac_couple_config_enforce_write_weight_file(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
void yac_couple_config_grid_set_output_filename(struct yac_couple_config *couple_config, char const *grid_name, const char *output_filename)
void yac_couple_config_get_field_names(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx, char const **src_field_name, const char **tgt_field_name)
char const * yac_couple_config_get_weight_file_name(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx)
int yac_couple_config_get_missing_definition_is_fatal(struct yac_couple_config *couple_config)
void yac_couple_config_get_field_couple_component_names(struct yac_couple_config *couple_config, size_t couple_idx, size_t field_couple_idx, char const **src_component_name, char const **tgt_component_name)
char const * yac_couple_config_get_component_name(struct yac_couple_config *couple_config, size_t component_idx)
void yac_couple_config_set_missing_definition_is_fatal(struct yac_couple_config *couple_config, int missing_definition_is_fatal)
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)
char * yac_couple_config_get_end_datetime(struct yac_couple_config *couple_config)
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.
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_ENDDEF
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_COMP
#define YAC_INSTANCE_CONFIG_OUTPUT_REF_SYNC
int(* func_compute_weights)(double[3], size_t, yac_const_coordinate_pointer, int *, double *, enum yac_cell_type cell_type)
#define YAC_INTERP_AVG_PARTIAL_COVERAGE_DEFAULT
yac_interp_avg_weight_type
@ YAC_INTERP_AVG_ARITHMETIC
#define YAC_INTERP_AVG_WEIGHT_TYPE_DEFAULT
#define YAC_INTERP_CALLBACK_COMPUTE_WEIGHTS_KEY_DEFAULT
#define YAC_INTERP_CHECK_CONSTRUCTOR_KEY_DEFAULT
#define YAC_INTERP_CHECK_DO_SEARCH_KEY_DEFAULT
#define YAC_INTERP_CONSERV_NORMALISATION_DEFAULT
#define YAC_INTERP_CONSERV_ENFORCED_CONSERV_DEFAULT
#define YAC_INTERP_CONSERV_PARTIAL_COVERAGE_DEFAULT
#define YAC_INTERP_CONSERV_ORDER_DEFAULT
yac_interp_method_conserv_normalisation
@ YAC_INTERP_CONSERV_DESTAREA
@ YAC_INTERP_CONSERV_FRACAREA
#define YAC_INTERP_CREEP_DISTANCE_DEFAULT
#define YAC_INTERP_FILE_ON_SUCCESS_DEFAULT
#define YAC_INTERP_FILE_WEIGHT_FILE_NAME_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
#define YAC_INTERP_FIXED_VALUE_DEFAULT
#define YAC_INTERP_NCC_PARTIAL_COVERAGE_DEFAULT
#define YAC_INTERP_NCC_WEIGHT_TYPE_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
#define YAC_INTERP_NNN_WEIGHTED_DEFAULT
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
#define YAC_INTERP_RBF_MAX_SEARCH_DISTANCE_DEFAULT
#define YAC_INTERP_RBF_N_DEFAULT
#define YAC_INTERP_NNN_MAX_SEARCH_DISTANCE_DEFAULT
#define YAC_INTERP_NNN_GAUSS_SCALE_DEFAULT
#define YAC_INTERP_RBF_SCALE_DEFAULT
#define YAC_INTERP_NNN_N_DEFAULT
#define YAC_INTERP_RBF_KERNEL_DEFAULT
#define YAC_INTERP_SPMAP_MAX_SEARCH_DISTANCE_DEFAULT
yac_interp_spmap_scale_type
@ YAC_INTERP_SPMAP_NONE
weights are not scaled
@ YAC_INTERP_SPMAP_INVTGTAREA
@ YAC_INTERP_SPMAP_SRCAREA
@ YAC_INTERP_SPMAP_FRACAREA
#define YAC_INTERP_SPMAP_WEIGHTED_DEFAULT
#define YAC_INTERP_SPMAP_SPREAD_DISTANCE_DEFAULT
#define YAC_INTERP_SPMAP_SPHERE_RADIUS_DEFAULT
#define YAC_INTERP_SPMAP_SCALE_TYPE_DEFAULT
yac_interp_spmap_weight_type
#define YAC_INTERP_SPMAP_MIN_GLOBAL_ID_DEFAULT
size_t yac_interp_stack_config_get_size(struct yac_interp_stack_config *interp_stack)
union yac_interp_stack_config_entry const * yac_interp_stack_config_get_entry(struct yac_interp_stack_config *interp_stack, size_t interp_stack_idx)
enum yac_interpolation_list yac_interp_stack_config_entry_get_type(union yac_interp_stack_config_entry const *interp_stack_entry)
void yac_interp_stack_config_delete(struct yac_interp_stack_config *interp_stack_config)
struct yac_interp_stack_config * yac_interp_stack_config_new()
@ YAC_SOURCE_TO_TARGET_MAP
@ YAC_NEAREST_CORNER_CELLS
@ YAC_RADIAL_BASIS_FUNCTION
#define YAC_MAX_ROUTINE_NAME_LENGTH
#define YAC_MAX_FILE_NAME_LENGTH
#define YAC_WEIGHT_FILE_ON_EXISTING_DEFAULT_VALUE
yac_weight_file_on_existing
@ YAC_WEIGHT_FILE_KEEP
keep existing weight file
@ YAC_WEIGHT_FILE_UNDEFINED
@ YAC_WEIGHT_FILE_OVERWRITE
overwrite existing weight file
@ YAC_WEIGHT_FILE_ERROR
error when weight file existis already
#define YAC_FRAC_MASK_VALUE_IS_VALID(value)
int yac_file_exists(const char *filename)
#define xrealloc(ptr, size)
#define xfopen(path, mode)
enum yac_text_filetype type
struct debug_config_file_buffer::debug_config_file config_file[SYNC_LOC_COUNT]
char const * sync_loc_ref[SYNC_LOC_COUNT]
char const ** src_mask_names
char const * yaxt_exchanger_name
char const * coupling_period
enum yac_weight_file_on_existing on_existing
struct field_couple_buffer::@52 tgt
struct field_couple_buffer::@52::@54 grid
char const * tgt_mask_name
struct yac_interp_stack_config * interp_stack
struct field_couple_buffer::@53 weight_file
struct field_couple_buffer::@52 src
struct field_couple_buffer::field_couple_field_names * field_names
size_t num_src_mask_names
enum yac_reduction_type time_reduction
struct interp_method_parameter::@55::@60 bool_param
struct interp_method_parameter::@55::@57 int_param
struct yac_name_type_pair const * valid_values
struct interp_method_parameter::@55::@58 dble_param
enum interp_method_parameter_value_type type
union interp_method_parameter::@55 data
struct interp_method_parameter::@55::@56 enum_param
struct interp_method_parameter::@55::@59 str_param
interp_method_parameter_value const default_value
int yac_name_type_pair_get_type(struct yac_name_type_pair const *pairs, size_t count, char const *name)
char const * yac_name_type_pair_get_name(struct yac_name_type_pair const *pairs, size_t count, int type)
static size_t num_components
void yac_cdef_calendar(int calendar)
int const YAC_CALENDAR_NOT_SET
#define YAC_ASSERT_F(exp, format,...)
#define YAC_ASSERT(exp, msg)