13#define YAC_HANDLE_ERROR(exp) \
15 int handle_error_status = (exp); \
16 if (handle_error_status != NC_NOERR) { \
17 fprintf(stderr, "Error: %s\n", nc_strerror(handle_error_status)); \
18 exit(handle_error_status); \
23int main(
int argc,
char** argv){
25 const char* source_comp = argv[1];
26 const char* source_grid = argv[2];
27 const char* field_name = argv[3];
33 sprintf(filename,
"%s.nc", field_name);
36 printf(
"Writing file %s", filename);
40 sprintf(comp_name,
"toy_output_%s_%s_%s", source_comp, source_grid, field_name);
44 int nbr_vertices[] = {360, 181};
46 double* x_vertices = malloc(nbr_vertices[0]*
sizeof(*x_vertices));
47 for(
int i = 0; i<nbr_vertices[0]; ++i){
48 x_vertices[i] = -M_PI + i*2*M_PI/nbr_vertices[0];
50 double* y_vertices = malloc(nbr_vertices[1]*
sizeof(*y_vertices));
51 for(
int i = 0; i<nbr_vertices[1]; ++i){
52 y_vertices[i] = -0.5*M_PI + i*M_PI/nbr_vertices[1];
55 const char * grid_name =
"toy_output_grid";
66 int nbr_cells[] = {nbr_vertices[0], nbr_vertices[1]-1};
67 double* x_cells = malloc(nbr_cells[0]*
sizeof(*x_cells));
68 for(
int i = 0; i<nbr_cells[0]; ++i){
69 x_cells[i] = -M_PI + (((double)i) + 0.5)*2*M_PI/nbr_cells[0];
71 double* y_cells = malloc(nbr_cells[1]*
sizeof(*y_cells));
72 for(
int i = 0; i<nbr_cells[1]; ++i){
73 y_cells[i] = -0.5*M_PI + (((double)i) + 0.5)*M_PI/nbr_cells[1];
86 printf(
"toy_output: timestep for %s is %s\n", field_name, dt);
89 printf(
"toy_output: collection_size for %s is %d\n", field_name,
collection_size);
101 int lat_dimid, lon_dimid, t_dimid, z_dimid;
111 int dimids[] = {t_dimid, z_dimid, lat_dimid, lon_dimid};
112 YAC_HANDLE_ERROR(nc_def_var(ncid, field_name, NC_DOUBLE, 4, dimids, &varid));
114 int interp_stack_config_id;
120 comp_name, grid_name, field_name,
122 interp_stack_config_id, 0, 1);
132 int time_counter = 0;
135 printf(
"receiving %s at %s\n", field_name, t);
141 size_t start[] = {time_counter, 0, 0, 0};
149 printf(
"done, wrote %d timesteps for %s\n", time_counter, field_name);
#define YAC_HANDLE_ERROR(exp)
int const YAC_ACTION_OUT_OF_BOUND
put/get is outside of the valid range
void yac_cget_(int const field_id, int const collection_size, double *recv_field, int *info, int *ierr)
int const YAC_LOCATION_CELL
void yac_cfinalize()
Finalises YAC.
const char * yac_cget_field_datetime(int field_id)
void yac_cget_action(int field_id, int *action)
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 yac_cget_field_collection_size(const char *comp_name, const char *grid_name, const char *field_name)
int const YAC_TIME_UNIT_ISO_FORMAT
void yac_cfree_interp_stack_config(int interp_stack_config_id)
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_interp_stack_config(int *interp_stack_config_id)
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)
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)
int const YAC_REDUCTION_TIME_NONE
const char * yac_cget_field_timestep(const char *comp_name, const char *grid_name, const char *field_name)