8int main(
int argc,
char** argv) {
11 "Please provide the variable name as command-line argument!\n");
14 const char* field_name = argv[1];
19 yac_cdef_comp(
"yac_input_external", &
comp_id);
21 double* x_vertices = malloc(360 *
sizeof(*x_vertices));
22 for (
int i = 0; i < 360; ++i) {
23 x_vertices[i] = (M_PI / 180.) * i;
25 double* y_vertices = malloc(181 *
sizeof(*y_vertices));
26 for (
int i = -90; i <= 90; ++i) {
27 y_vertices[i + 90] = (M_PI / 180.) * i;
30 int dims[] = {360, 181};
31 int cyclic[] = {1, 0};
32 const char* grid_name =
"yac_input_external_grid";
33 yac_cdef_grid_reg2d(grid_name, dims, cyclic, x_vertices, y_vertices,
37 yac_cdef_points_reg2d(grid_id, dims, YAC_LOCATION_CORNER, x_vertices,
38 y_vertices, &point_id);
43 const char* dt = yac_cget_field_timestep(
"yac_input_plugin",
44 "comin_yac_plugin_grid", field_name);
47 yac_cdef_field(field_name,
comp_id, &point_id, 1, 1, dt,
48 YAC_TIME_UNIT_ISO_FORMAT, &
field_id);
51 yac_cget_interp_stack_config(&interp_id);
52#if YAC_VERSION_MAJOR == 3 && YAC_VERSION_MINOR <= 3
53 yac_cadd_interp_stack_config_nnn(interp_id, YAC_NNN_AVG, 1, 1.0);
55 yac_cadd_interp_stack_config_nnn(interp_id, YAC_NNN_AVG, 1, 0.0, 1.0);
58 yac_cdef_couple(
"yac_input_external", grid_name, field_name,
59 "yac_input_plugin",
"comin_yac_plugin_grid", field_name, dt,
60 YAC_TIME_UNIT_ISO_FORMAT, YAC_REDUCTION_TIME_NONE, interp_id,
62 yac_cfree_interp_stack_config(interp_id);
66 double* data = malloc(dims[0] * dims[1] *
sizeof(*data));
67 int info = YAC_ACTION_NONE;
70 while (info != YAC_ACTION_OUT_OF_BOUND &&
71 info != YAC_ACTION_PUT_FOR_RESTART) {
73 for (
int i = 0; i < dims[0]; ++i) {
74 for (
int j = 0; j < dims[1]; j++) {
75 double lon = (M_PI / 180.) * i;
76 double lat = (M_PI / 180.) * j;
77 data[i * dims[1] + j] = cos(lat) * sin(lon + t * 0.1);
81 const char* time = yac_cget_field_datetime(
field_id);
82 yac_cput_(
field_id, 1, data, &info, &ierror);
83 fprintf(stderr,
"datetime: %s: yac info: %d\n", time, info);