22#define YAC_RAD (0.01745329251994329576923690768489)
25static void utest_comp1_main(
void);
26static void utest_comp2_main(
void);
27static int utest_gen_field_avg(
int yac_id);
28static int utest_gen_field_ncc(
int yac_id);
29static int utest_gen_field_nnn(
int yac_id);
30static int utest_gen_field_dnn(
int yac_id);
31static int utest_gen_field_rbf(
int yac_id);
32static int utest_gen_field_conserv(
int yac_id);
33static int utest_gen_field_spmap(
int yac_id);
34static int utest_gen_field_spmap_ext_yac(
int yac_id);
35static int utest_gen_field_spmap_ext_file(
int yac_id);
36static int utest_gen_field_hcsbb(
int yac_id);
37static int utest_gen_field_user_file(
int yac_id);
38static int utest_gen_field_fixed(
int yac_id);
39static int utest_gen_field_creep(
int yac_id);
40static int utest_gen_field_check(
int yac_id);
41static int utest_gen_field_callback(
int yac_id);
53 "test_dynamic_config_c.yaml";
55 "test_dynamic_config_c.json";
60 double const tgt_coords[3],
61 int src_cell_id,
size_t src_cell_idx,
62 int const **global_results_points,
double **result_weights,
67 *global_results_points = NULL;
68 *result_weights = NULL;
77 int global_rank, global_size;
78 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank);
79 MPI_Comm_size(MPI_COMM_WORLD, &global_size);
81 if (global_size != 4) {
82 PUT_ERR(
"ERROR: wrong number of processes\n");
93 double const delta_lon = 1.0, delta_lat=1.0;
109 if ((global_rank % 2) == 0) utest_comp1_main();
110 else utest_comp2_main();
112 if (global_rank == 0) {
114 PUT_ERR(
"error yac_cset_config_output_file (sync)");
116 PUT_ERR(
"error yac_cset_config_output_file (enddef)");
118 PUT_ERR(
"error yac_cset_grid_output_file");
138static void utest_comp1_main(
void) {
150 int const apply_check = 0;
153 int const coordinates_mismatch_is_fatal = 0;
164 int field_1, field_2, field_3, field_4, field_out;
181 "comp2",
"grid2",
"4",
"comp1",
"grid1",
"D",
186 int include_definitions = 0;
209 if (fabs(
data[0] - 40.0) > 1.0e-14)
PUT_ERR(
"error in data for field_4");
216static void utest_comp2_main(
void) {
218 int yac_id,
grid_id, avg_interp;
235 int const apply_check = 0;
238 int const coordinates_mismatch_is_fatal = 0;
240 yac_id, coordinates_mismatch_is_fatal);
242 int field_1, field_2, field_3, field_4;
256 yac_id,
"comp1",
"grid1",
"A",
"comp2",
"grid2",
"1",
260 yac_id,
"comp1",
"grid1",
"B",
"comp2",
"grid2",
"2",
264 yac_id,
"comp1",
"grid1",
"C",
"comp2",
"grid2",
"3",
272 {utest_gen_field_avg(yac_id),
273 utest_gen_field_ncc(yac_id),
274 utest_gen_field_nnn(yac_id),
275 utest_gen_field_dnn(yac_id),
276 utest_gen_field_rbf(yac_id),
277 utest_gen_field_conserv(yac_id),
278 utest_gen_field_spmap(yac_id),
279 utest_gen_field_spmap_ext_yac(yac_id),
280 utest_gen_field_spmap_ext_file(yac_id),
281 utest_gen_field_hcsbb(yac_id),
282 utest_gen_field_user_file(yac_id),
283 utest_gen_field_fixed(yac_id),
284 utest_gen_field_creep(yac_id),
285 utest_gen_field_check(yac_id),
286 utest_gen_field_callback(yac_id)};
297 if (fabs(
data[0] - 42.0) > 1.0e-14)
PUT_ERR(
"error in data for field_1");
300 if (fabs(
data[0] - 43.0) > 1.0e-14)
PUT_ERR(
"error in data for field_2");
303 if (fabs(
data[0] - 44.0) > 1.0e-14)
PUT_ERR(
"error in data for field_3");
306 for (
size_t i = 0;
i <
sizeof(field_in) /
sizeof(field_in[0]); ++
i)
313static int utest_gen_field(
int yac_id,
char const * field_name,
int interp_stack) {
316 field_name,
comp_id, &point_id, 1, 1,
"1",
319 yac_id,
"comp1",
"grid1",
"OUT",
"comp2",
"grid2", field_name,
326static int utest_gen_field_avg(
int yac_id) {
331 return utest_gen_field(yac_id,
"avg", interp_stack);
334static int utest_gen_field_ncc(
int yac_id) {
339 return utest_gen_field(yac_id,
"ncc", interp_stack);
342static int utest_gen_field_nnn(
int yac_id) {
347 return utest_gen_field(yac_id,
"nn", interp_stack);
350static int utest_gen_field_dnn(
int yac_id) {
355 return utest_gen_field(yac_id,
"dnn", interp_stack);
358static int utest_gen_field_rbf(
int yac_id) {
365 return utest_gen_field(yac_id,
"rbf", interp_stack);
368static int utest_gen_field_conserv(
int yac_id) {
373 return utest_gen_field(yac_id,
"conserv", interp_stack);
376static int utest_gen_field_spmap(
int yac_id) {
381 1.0, NULL, NULL, 0, 1.0, NULL, NULL, 0);
382 return utest_gen_field(yac_id,
"spmap", interp_stack);
385static int utest_gen_field_spmap_ext_yac(
int yac_id) {
386 int ext_spmap_config;
395 ext_spmap_config,
"area_file.nc",
"src_area", 0);
397 ext_spmap_config,
"area_file.nc",
"tgt_area", 0);
400 int overwrite_configs[2];
402 NUM_OVERWRITE_CONFIGS =
403 sizeof(overwrite_configs)/
sizeof(overwrite_configs[0])};
406 overwrite_configs[0], 0.0, 0.0, 1.0);
408 overwrite_configs[0], 0.5);
411 overwrite_configs[1], 0.0, M_PI_2, 1.0);
413 overwrite_configs[1], 0.6);
419 interp_stack, ext_spmap_config, overwrite_configs, NUM_OVERWRITE_CONFIGS);
420 for (
int i = 0;
i < NUM_OVERWRITE_CONFIGS; ++
i)
427 ext_spmap_config,
"area_file.nc",
"src_area", 0);
429 ext_spmap_config,
"area_file.nc",
"tgt_area", 0);
432 return utest_gen_field(yac_id,
"spmap_ext_yac", interp_stack);
435static int utest_gen_field_spmap_ext_file(
int yac_id) {
436 int ext_spmap_config;
440 ext_spmap_config,
"area_file.nc",
"src_area", 0);
442 ext_spmap_config,
"area_file.nc",
"tgt_area", 0);
446 interp_stack, ext_spmap_config, NULL, 0);
448 return utest_gen_field(yac_id,
"spmap_ext_file", interp_stack);
451static int utest_gen_field_hcsbb(
int yac_id) {
455 return utest_gen_field(yac_id,
"hcsbb", interp_stack);
458static int utest_gen_field_user_file(
int yac_id) {
463 return utest_gen_field(yac_id,
"user_file", interp_stack);
466static int utest_gen_field_fixed(
int yac_id) {
470 return utest_gen_field(yac_id,
"fixed", interp_stack);
473static int utest_gen_field_creep(
int yac_id) {
477 return utest_gen_field(yac_id,
"creep", interp_stack);
480static int utest_gen_field_check(
int yac_id) {
484 return utest_gen_field(yac_id,
"check", interp_stack);
487static int utest_gen_field_callback(
int yac_id) {
491 interp_stack,
"compute_weights_callback");
492 return utest_gen_field(yac_id,
"callback", interp_stack);
497 int yac_id,
comp_id, grid_id_out, grid_id_in, point_id_out, point_id_in,
498 field_id_out, field_id_in, interp_stack, ext_couple_config;
500 int mapping_side = 0;
501 double scale_factor = 10.0;
502 double scale_summand = 0.5;
503 char const * yaxt_exchanger_name =
"irecv_send";
504 int use_raw_exchange = 0;
527 ext_couple_config, weight_file_on_existing);
529 ext_couple_config, mapping_side);
531 ext_couple_config, scale_factor);
533 ext_couple_config, scale_summand);
535 ext_couple_config, yaxt_exchanger_name);
537 ext_couple_config, use_raw_exchange);
543 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
544 if (collection_indices != NULL)
545 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
549 ext_couple_config, 1, (
int[]){2});
554 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
555 if ((collection_indices == NULL) || (collection_indices[0] != 2))
556 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
557 free(collection_indices);
560 ext_couple_config, 1, NULL);
562 yac_id,
"comp",
"grid1",
"out",
"comp",
"grid2",
"in",
564 0, 0, ext_couple_config);
565 char const * temp_weight_file_name;
567 ext_couple_config, &temp_weight_file_name);
569 PUT_ERR(
"error in yac_cget_ext_couple_config_weight_file");
570 int temp_weight_file_on_existing;
572 ext_couple_config, &temp_weight_file_on_existing);
573 if (weight_file_on_existing != temp_weight_file_on_existing)
574 PUT_ERR(
"error in yac_cget_ext_couple_config_weight_file_on_existing");
575 int temp_mapping_side;
577 ext_couple_config, &temp_mapping_side);
578 if (mapping_side != temp_mapping_side)
579 PUT_ERR(
"error in yac_cget_ext_couple_config_mapping_side");
580 double temp_scale_factor;
582 ext_couple_config, &temp_scale_factor);
583 if (scale_factor != temp_scale_factor)
584 PUT_ERR(
"error in yac_cget_ext_couple_config_scale_factor");
585 double temp_scale_summand;
587 ext_couple_config, &temp_scale_summand);
588 if (scale_summand != temp_scale_summand)
589 PUT_ERR(
"error in yac_cget_ext_couple_config_scale_summand");
590 char const * temp_yaxt_exchanger_name;
592 ext_couple_config, &temp_yaxt_exchanger_name);
593 if (strcmp(yaxt_exchanger_name, temp_yaxt_exchanger_name))
594 PUT_ERR(
"error in yac_cget_ext_couple_config_yaxt_exchanger_name");
595 int temp_use_raw_exchange;
597 ext_couple_config, &temp_use_raw_exchange);
598 if (use_raw_exchange != temp_use_raw_exchange)
599 PUT_ERR(
"error in yac_cget_ext_couple_config_use_raw_exchange");
604 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
605 if (collection_indices != NULL)
606 PUT_ERR(
"error in yac_cget_ext_couple_config_collection_selection");
#define YAC_INTERP_RBF_MAX_SEARCH_DISTANCE_DEFAULT
#define YAC_INTERP_RBF_N_DEFAULT
#define YAC_INTERP_RBF_SCALE_DEFAULT
int yac_file_exists(const char *filename)
char const * grid_output_filename
char const * test_config_filename_json
char const * weight_file_name
static void gen_weight_file(void)
char const * test_config_filename_yaml
void compute_weights_callback(double const tgt_coords[3], int src_cell_id, size_t src_cell_idx, int const **global_results_points, double **result_weights, size_t *result_count, void *user_data)
char const * weight_file_name_dummy
void yac_cset_ext_spmap_config_src_cell_area_config_yac(int ext_spmap_config_id, double sphere_radius)
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)
void yac_cadd_interp_stack_config_spmap_ext(int interp_stack_config_id, int ext_spmap_config_id, int *spmap_overwrite_config_ids, int spmap_overwrite_config_count)
void yac_cget_ext_couple_config_mapping_side(int ext_couple_config_id, int *mapping_side)
void yac_cset_config_output_file(const char *filename, int filetype, int sync_location, int include_definitions)
void yac_cpredef_comp_instance(int yac_instance_id, char const *name, int *comp_id)
int const YAC_CONFIG_OUTPUT_SYNC_LOC_ENDDEF
after end of definitions
void yac_cset_grid_output_file_instance(int yac_instance_id, const char *gridname, const char *filename)
void yac_cset_coordinates_check(int apply_check)
void yac_cdef_datetime_instance(int yac_instance_id, const char *start_datetime, const char *end_datetime)
void yac_cfree_ext_couple_config(int ext_couple_config_id)
void yac_cdef_datetime(const char *start_datetime, const char *end_datetime)
int const YAC_LOCATION_CELL
void yac_cfree_spmap_overwrite_config(int spmap_overwrite_config_id)
void yac_cget_ext_couple_config_weight_file_on_existing(int ext_couple_config_id, int *weight_file_on_existing)
void yac_cset_ext_couple_config_scale_factor(int ext_couple_config_id, double scale_factor)
void yac_cset_ext_couple_config_weight_file_on_existing(int ext_couple_config_id, int weight_file_on_existing)
void yac_cadd_interp_stack_config_creep(int interp_stack_config_id, int creep_distance)
int const YAC_AVG_ARITHMETIC
void yac_cset_spmap_overwrite_config_max_search_distance(int spmap_overwrite_config_id, double max_search_distance)
void yac_cadd_compute_weights_callback(yac_func_compute_weights compute_weights_callback, void *user_data, char const *key)
int const YAC_WGT_ON_EXISTING_ERROR
int const YAC_DNN_SEARCH_DISTANCE_FIXED
void yac_cset_ext_spmap_config_scale_type(int ext_spmap_config_id, int scale_type)
void yac_csync_def_instance(int yac_instance_id)
void yac_cpredef_comp(char const *name, int *comp_id)
void yac_cfinalize_instance(int yac_instance_id)
Finalises YAC.
void yac_cfinalize()
Finalises YAC.
void yac_cget_ext_couple_config_collection_selection(int ext_couple_config_id, int *collection_size, int **collection_indices)
void yac_cadd_interp_stack_config_check(int interp_stack_config_id, char const *constructor_key, char const *do_search_key)
void yac_cenddef_instance(int yac_instance_id)
void yac_cget_ext_couple_config_yaxt_exchanger_name(int ext_couple_config_id, char const **yaxt_exchanger_name)
void yac_cset_coordinates_mismatch_is_fatal_instance(int yac_instance_id, int is_fatal)
void yac_cget_ext_couple_config(int *ext_couple_config_id)
void yac_cset_ext_couple_config_weight_file(int ext_couple_config_id, char const *weight_file)
void yac_cset_ext_spmap_config_spread_distance(int ext_spmap_config_id, double spread_distance)
void yac_cset_ext_couple_config_yaxt_exchanger_name(int ext_couple_config_id, char const *yaxt_exchanger_name)
void yac_cset_ext_couple_config_scale_summand(int ext_couple_config_id, double scale_summand)
void yac_cset_coordinates_mismatch_is_fatal(int is_fatal)
void yac_cset_spmap_overwrite_config_weight_type(int spmap_overwrite_config_id, int weight_type)
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)
void yac_cdef_comp_instance(int yac_instance_id, char const *comp_name, int *comp_id)
int const YAC_REDUCTION_TIME_ACCUMULATE
void yac_cset_ext_spmap_config_weight_type(int ext_spmap_config_id, int weight_type)
void yac_cset_spmap_overwrite_config_src_point_selection_bnd_circle(int spmap_overwrite_config_id, double center_lon, double center_lat, double inc_angle)
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_cget_ext_couple_config_use_raw_exchange(int ext_couple_config_id, int *use_raw_exchange)
void yac_cdef_couple_custom_instance(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag, int ext_couple_config_id)
void yac_cset_ext_couple_config_use_raw_exchange(int ext_couple_config_id, int use_raw_exchange)
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_cinit_comm_instance(MPI_Comm comm, int *yac_instance_id)
void yac_cfree_ext_spmap_config(int ext_spmap_config_id)
void yac_cset_ext_spmap_config_max_search_distance(int ext_spmap_config_id, double max_search_distance)
int const YAC_CONFIG_OUTPUT_FORMAT_YAML
int const YAC_TIME_UNIT_SECOND
void yac_cadd_interp_stack_config_conservative(int interp_stack_config_id, int order, int enforced_conserv, int partial_coverage, int normalisation)
void yac_cset_ext_spmap_config_tgt_cell_area_config_file(int ext_spmap_config_id, char const *filename, char const *varname, int min_global_id)
void yac_cadd_interp_stack_config_user_file(int interp_stack_config_id, char const *filename)
int const YAC_SPMAP_FRACAREA
int const YAC_ACTION_NONE
no data exchanges
void yac_cdef_calendar(int calendar)
void yac_cset_coordinates_check_instance(int yac_instance_id, int apply_check)
void yac_cadd_interp_stack_config_rbf(int interp_stack_config_id, size_t n, double max_search_distance, double scale)
int const YAC_CONFIG_OUTPUT_SYNC_LOC_SYNC_DEF
after synchronization of definition
void yac_cdef_comps(char const **comp_names, int num_comps, int *comp_ids)
int const YAC_ACTION_GET_FOR_RESTART
last valid get
void yac_cput_(int const field_id, int const collection_size, double *send_field, int *info, int *ierr)
void yac_cset_ext_spmap_config_tgt_cell_area_config_yac(int ext_spmap_config_id, double sphere_radius)
int const YAC_PROLEPTIC_GREGORIAN
void yac_cadd_interp_stack_config_hcsbb(int interp_stack_config_id)
void yac_cadd_interp_stack_config_fixed(int interp_stack_config_id, double value)
void yac_cset_ext_spmap_config_src_cell_area_config_file(int ext_spmap_config_id, char const *filename, char const *varname, int min_global_id)
void yac_cadd_interp_stack_config_spmap(int interp_stack_config_id, double spread_distance, double max_search_distance, int weight_type, int scale_type, double src_sphere_radius, char const *src_filename, char const *src_varname, int src_min_global_id, double tgt_sphere_radius, char const *tgt_filename, char const *tgt_varname, int tgt_min_global_id)
void yac_cadd_interp_stack_config_user_callback(int interp_stack_config_id, char const *func_compute_weights_key)
void yac_cset_ext_couple_config_mapping_side(int ext_couple_config_id, int mapping_side)
void yac_cfree_interp_stack_config(int interp_stack_config_id)
void yac_cset_grid_output_file(const char *gridname, const char *filename)
void yac_cadd_interp_stack_config_nnn(int interp_stack_config_id, int type, size_t n, double max_search_distance, double scale)
void yac_cget_ext_couple_config_scale_summand(int ext_couple_config_id, double *scale_summand)
int const YAC_CONFIG_OUTPUT_FORMAT_JSON
void yac_cinit_instance(int *yac_instance_id)
void yac_cget_interp_stack_config(int *interp_stack_config_id)
void yac_cset_ext_couple_config_collection_selection(int ext_couple_config_id, int collection_size, int const *collection_indices)
void yac_cadd_interp_stack_config_average(int interp_stack_config_id, int reduction_type, int partial_coverage)
int const YAC_ACTION_PUT_FOR_RESTART
last valid put
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)
void yac_cset_spmap_overwrite_config_spread_distance(int spmap_overwrite_config_id, double spread_distance)
void yac_cdef_couple_instance(int yac_instance_id, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag)
void yac_cget_spmap_overwrite_config(int *spmap_overwrite_config_id)
void yac_cdef_couple(char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_timestep, int time_unit, int time_reduction, int interp_stack_config_id, int src_lag, int tgt_lag)
void yac_cadd_interp_stack_config_dnn(int interp_stack_config_id, int weight_type, int search_distance_type, double search_distance, double scale)
void yac_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_ext_spmap_config(int *ext_spmap_config_id)
void yac_cget_ext_couple_config_weight_file(int ext_couple_config_id, char const **weight_file)