28static void utest_target_main(MPI_Comm target_comm);
29static void utest_source_main(MPI_Comm source_comm);
35 xt_initialize(MPI_COMM_WORLD);
37 int comm_rank, comm_size;
38 MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
39 MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
40 MPI_Barrier(MPI_COMM_WORLD);
43 PUT_ERR(
"ERROR: wrong number of processes");
49 int tgt_flag = comm_rank < 1;
52 MPI_Comm_split(MPI_COMM_WORLD, tgt_flag, 0, &
split_comm);
64static void utest_source_main(MPI_Comm source_comm) {
138 MPI_Comm_rank(source_comm, &my_source_rank);
143 size_t local_start[2] = {0,0};
144 size_t local_count[2] = {4,4};
164 size_t num_src_fields =
sizeof(src_fields) /
sizeof(src_fields[0]);
166 {.location =
YAC_LOC_CELL, .coordinates_idx = 0, .masks_idx = SIZE_MAX};
188 for (
size_t i = 0;
i < 2; ++
i) {
200 double ref_src_data[25] = {0,1,2,3,4,
209 src_data[collection_idx] =
xmalloc(1 *
sizeof(**src_data));
210 src_data[collection_idx][0] =
212 for (
size_t i = 0;
i <
grid_data.num_vertices; ++
i)
213 src_data[collection_idx][0][i] =
214 ref_src_data[i] + (
double)(collection_idx * 9);
221 free(src_data[collection_idx][0]);
222 free(src_data[collection_idx]);
238static void utest_target_main(MPI_Comm target_comm) {
248 size_t local_start[2] = {0,0};
249 size_t local_count[2] = {3,3};
254 for (
size_t j = 0; j <
num_cells[0]; ++j, ++k)
274 size_t num_src_fields =
sizeof(src_fields) /
sizeof(src_fields[0]);
276 {.location =
YAC_LOC_CELL, .coordinates_idx = 0, .masks_idx = SIZE_MAX};
298 for (
size_t i = 0;
i < 2; ++
i) {
309 double ref_tgt_field[9] = {2,3,4, 3,4,5, 4,5,6};
314 tgt_data[collection_idx] =
316 for (
size_t j = 0; j < 9; ++j) tgt_data[collection_idx][j] = -1.0;
323 for (
size_t j = 0, offset = collection_idx * 9;
325 if (fabs((ref_tgt_field[j] + (
double)offset) -
326 tgt_data[collection_idx][j]) > 1e-3)
327 PUT_ERR(
"wrong interpolation result");
331 free(tgt_data[collection_idx]);
struct yac_basic_grid * yac_basic_grid_new(char const *name, struct yac_basic_grid_data grid_data)
size_t yac_basic_grid_add_coordinates_nocpy(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates)
struct yac_basic_grid * yac_basic_grid_empty_new(char const *name)
void yac_basic_grid_delete(struct yac_basic_grid *grid)
void yac_dist_grid_pair_delete(struct yac_dist_grid_pair *grid_pair)
struct yac_dist_grid_pair * yac_dist_grid_pair_new(struct yac_basic_grid *grid_a, struct yac_basic_grid *grid_b, MPI_Comm comm)
struct yac_basic_grid_data yac_generate_basic_grid_data_reg2d(double const *global_coords_x, double const *global_coords_y, size_t const num_global_cells_[2], size_t const local_start[2], size_t const local_count[2], int with_halo)
static void LLtoXYZ_deg(double lon, double lat, double p_out[])
void yac_interp_grid_delete(struct yac_interp_grid *interp_grid)
struct yac_interp_grid * yac_interp_grid_new(struct yac_dist_grid_pair *grid_pair, char const *src_grid_name, char const *tgt_grid_name, size_t num_src_fields, struct yac_interp_field const *src_fields, struct yac_interp_field const tgt_field)
void yac_interp_method_delete(struct interp_method **method)
struct yac_interp_weights * yac_interp_method_do_search(struct interp_method **method, struct yac_interp_grid *interp_grid)
struct interp_method * yac_interp_method_nnn_new(struct yac_nnn_config config)
@ YAC_INTERP_NNN_RBF
radial basis functions
#define YAC_INTERP_RBF_MAX_SEARCH_DISTANCE_DEFAULT
#define YAC_INTERP_RBF_SCALE_DEFAULT
struct yac_interpolation * yac_interp_weights_get_interpolation(struct yac_interp_weights *weights, enum yac_interp_weights_reorder_type reorder, size_t collection_size, double frac_mask_fallback_value, double scaling_factor, double scaling_summand, char const *yaxt_exchanger_name, int is_source, int is_target)
void yac_interp_weights_delete(struct yac_interp_weights *weights)
yac_interp_weights_reorder_type
@ YAC_MAPPING_ON_TGT
weights will be applied at target processes
@ YAC_MAPPING_ON_SRC
weights will be applied at source processes
void yac_interpolation_execute(struct yac_interpolation *interp, double ***src_fields, double **tgt_field)
Execute interpolation synchronously and write results to the target field.
void yac_interpolation_delete(struct yac_interpolation *interp)
Free an interpolation object and release all resources.
double const YAC_FRAC_MASK_NO_VALUE
enum yac_location location
struct yac_interp_field tgt_field
struct yac_dist_grid_pair * grid_pair
struct yac_interp_field src_fields[]
static MPI_Comm split_comm
char const src_grid_name[]
char const tgt_grid_name[]
double cell_coordinates_y[]
double cell_coordinates_x[]
struct yac_basic_grid ** grids
double(* yac_coordinate_pointer)[3]