22 const char* options = NULL;
24 comin_current_get_plugin_options(&options, &options_len);
25 strncpy(
descr.name, options, options_len);
28 comin_var_request_add(
descr,
false);
30 comin_metadata_set_integer(
descr,
"zaxis_id", COMIN_ZAXIS_2D);
33 comin_callback_register(EP_ATM_YAC_DEFCOMP_BEFORE,
defcomp);
35 comin_callback_register(EP_ATM_TIMELOOP_START,
recv_field);
55 int* num_vertices_per_cell =
56 malloc(n_patch_cells *
sizeof(*num_vertices_per_cell));
57 for (
int i = 0; i < n_patch_cells; ++i)
58 num_vertices_per_cell[i] = 3;
68 double* vlon_rad = malloc(n_patch_verts *
sizeof(*vlon_rad));
69 double* vlat_rad = malloc(n_patch_verts *
sizeof(*vlat_rad));
70 for (
int i = 0; i < n_patch_verts; ++i) {
71 vlon_rad[i] = vlon[i] / 180. * M_PI;
72 vlat_rad[i] = vlat[i] / 180. * M_PI;
75 int vertex_idx_size[3];
76 const int *vertex_idx, *vertex_blk;
79 int nproma = vertex_idx_size[0];
81 int* vertex_idx_transposed =
82 malloc(3 * n_patch_cells *
sizeof(*vertex_idx_transposed));
83 for (
int i = 0; i < n_patch_cells; ++i)
84 for (
int k = 0; k < 3; ++k) {
85 vertex_idx_transposed[k + 3 * i] =
86 vertex_idx[i + k * vertex_idx_size[0] * vertex_idx_size[1]] - 1 +
88 (vertex_blk[i + k * vertex_idx_size[0] * vertex_idx_size[1]] - 1);
92 yac_cdef_grid_unstruct(
"comin_yac_plugin_grid", n_patch_verts, n_patch_cells,
93 num_vertices_per_cell, vlon_rad, vlat_rad,
94 vertex_idx_transposed, &grid_id);
97 free(vertex_idx_transposed);
107 double* clon_rad = malloc(n_patch_cells *
sizeof(*clon_rad));
108 double* clat_rad = malloc(n_patch_cells *
sizeof(*clat_rad));
109 for (
int i = 0; i < n_patch_cells; ++i) {
110 clon_rad[i] = clon[i] / 180. * M_PI;
111 clat_rad[i] = clat[i] / 180. * M_PI;
115 yac_cdef_points_unstruct(grid_id, n_patch_cells, YAC_LOCATION_CELL, clon_rad,
116 clat_rad, &point_id);
121 double dt = comin_descrdata_get_timesteplength(1);
124 sprintf(dt_str,
"%d", ((
int)dt * 1000));
125 yac_cdef_field(
descr.name,
comp_id, &point_id, 1, 1, dt_str,
126 YAC_TIME_UNIT_MILLISECOND, &
field_id);
128 free(num_vertices_per_cell);
integer(c_int) function comin_descrdata_get_domain_cells_ncells(jg)
subroutine comin_descrdata_get_domain_cells_clon(jg, clon, arr_size)
subroutine comin_descrdata_get_domain_verts_vlon(jg, vlon, arr_size)
subroutine comin_descrdata_get_domain_cells_vertex_idx(jg, vertex_idx, arr_size)
subroutine comin_descrdata_get_domain_verts_vlat(jg, vlat, arr_size)
subroutine comin_descrdata_get_domain_cells_clat(jg, clat, arr_size)
integer(c_int) function comin_descrdata_get_domain_verts_nverts(jg)
subroutine comin_descrdata_get_domain_cells_vertex_blk(jg, vertex_blk, arr_size)