53 int* num_vertices_per_cell =
54 malloc(n_patch_cells *
sizeof(*num_vertices_per_cell));
55 for (
int i = 0; i < n_patch_cells; ++i)
56 num_vertices_per_cell[i] = 3;
66 double* vlon_rad = malloc(n_patch_verts *
sizeof(*vlon_rad));
67 double* vlat_rad = malloc(n_patch_verts *
sizeof(*vlat_rad));
68 for (
int i = 0; i < n_patch_verts; ++i) {
69 vlon_rad[i] = vlon[i] / 180. * M_PI;
70 vlat_rad[i] = vlat[i] / 180. * M_PI;
73 int vertex_idx_size[3];
74 const int *vertex_idx, *vertex_blk;
77 int nproma = vertex_idx_size[0];
79 int* vertex_idx_transposed =
80 malloc(3 * n_patch_cells *
sizeof(*vertex_idx_transposed));
81 for (
int i = 0; i < n_patch_cells; ++i)
82 for (
int k = 0; k < 3; ++k) {
83 vertex_idx_transposed[k + 3 * i] =
84 vertex_idx[i + k * vertex_idx_size[0] * vertex_idx_size[1]] - 1 +
86 (vertex_blk[i + k * vertex_idx_size[0] * vertex_idx_size[1]] - 1);
90 yac_cdef_grid_unstruct(
"comin_yac_plugin_grid", n_patch_verts, n_patch_cells,
91 num_vertices_per_cell, vlon_rad, vlat_rad,
92 vertex_idx_transposed, &grid_id);
95 free(vertex_idx_transposed);
105 double* clon_rad = malloc(n_patch_cells *
sizeof(*clon_rad));
106 double* clat_rad = malloc(n_patch_cells *
sizeof(*clat_rad));
107 for (
int i = 0; i < n_patch_cells; ++i) {
108 clon_rad[i] = clon[i] / 180. * M_PI;
109 clat_rad[i] = clat[i] / 180. * M_PI;
113 yac_cdef_points_unstruct(grid_id, n_patch_cells, YAC_LOCATION_CELL, clon_rad,
114 clat_rad, &point_id);
122 sprintf(dt_str,
"%d", ((
int)dt * 1000));
123 yac_cdef_field(
descr.name,
comp_id, &point_id, 1, 1, dt_str,
124 YAC_TIME_UNIT_MILLISECOND, &
field_id);
126 free(num_vertices_per_cell);