22#define YAC_RAD (0.01745329251994329576923690768489)
31static void utest_init_ref_recv_field(
34 for (
int i = 0;
i < 3; ++
i)
37 ref_recv_field[
i][j][k] = 0.0;
40 ref_recv_field[3][j][k] = DBL_MAX;
41 ref_recv_field[4][j][k] = -DBL_MAX;
46int main(
int argc,
char** argv) {
52 MPI_Comm_rank ( MPI_COMM_WORLD, &rank );
53 MPI_Comm_size ( MPI_COMM_WORLD, &size );
56 fputs(
"wrong number of processes (has to be 2)\n", stderr);
61 PUT_ERR(
"ERROR: missing config file directory");
70 malloc(strlen(argv[1]) + 32), argv[1]),
"coupling_test4.yaml");
74 int is_target =
rank == 1;
83 (is_target)?
"target_grid":
"source_grid", (int[2]){3,3}, (
int[2]){0,0},
97 {
"time_op_accu_field",
101 "time_op_max_field"};
111 {{{ 1, 2, 3, 4, 5, 6, 7, 8, 9}},
112 {{10,11,12,13,14,15,16,17,18}},
113 {{19,20,21,22,23,24,25,26,27}}};
115 utest_init_ref_recv_field(ref_recv_field);
118 for (
int t = 0;
t < 32; ++
t) {
132 if (info != ref_send_info)
PUT_ERR(
"error in yac_cput_: wrong info");
137 double scale = ((
t == 0)?1.0:0.25);
142 ref_recv_field[0][
i][j] += send_field[
i][0][j];
145 ref_recv_field[1][
i][j] += send_field[
i][0][j] * scale;
148 ref_recv_field[2][
i][j] = send_field[
i][0][j];
151 ref_recv_field[3][
i][j] =
152 MIN(ref_recv_field[3][i][j], send_field[i][0][j]);
155 ref_recv_field[4][
i][j] =
156 MAX(ref_recv_field[4][i][j], send_field[i][0][j]);
169 recv_field[j][k] = -1;
176 if (info != ref_recv_info)
PUT_ERR(
"error in yac_cget_: wrong info");
182 if (fabs(recv_field[j][k] - ref_recv_field[i][j][k]) > 1e-6)
183 PUT_ERR(
"error in yac_cget_: wrong recv_field");
187 if (recv_field[j][k] != -1)
188 PUT_ERR(
"error in yac_cget_: wrong recv_field");
195 for (
int i = 0;
i < 3; ++
i)
197 send_field[i][0][j] += i - 1;
200 if ((t % 4) == 0) utest_init_ref_recv_field(ref_recv_field);
void yac_cget_(int const field_id, int const collection_size, double *recv_field, int *info, int *ierr)
void yac_cfinalize()
Finalises YAC.
int const YAC_LOCATION_CORNER
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_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)
int const YAC_TIME_UNIT_SECOND
void yac_cread_config_yaml(const char *yaml_filename)
int const YAC_ACTION_NONE
no data exchanges
void yac_cdef_calendar(int calendar)
int const YAC_ACTION_REDUCTION
data reduction, but data exchange
void yac_cput_(int const field_id, int const collection_size, double *send_field, int *info, int *ierr)
int const YAC_PROLEPTIC_GREGORIAN
int const YAC_ACTION_COUPLING
data exchange
void yac_cdef_comp(char const *comp_name, int *comp_id)
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)