28 size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_,
29 double *x_vertices,
double *y_vertices,
int *cell_to_vertex_,
30 void (*LLtoXYZ_ptr)(double, double,
double[])) {
34 for (
size_t i = 0; i < nbr_vertices; ++i)
43 size_t total_num_cell_corners = 0;
46 for (
size_t i = 0; i < nbr_cells; ++i) {
51 for (
size_t i = 0; i < total_num_cell_corners; ++i){
53 "ERROR(yac_generate_basic_grid_data_unstruct_): "
54 "Index %zu in cell_to_vertex (%d) is negative.",
55 i, cell_to_vertex_[i])
57 "ERROR(yac_generate_basic_grid_data_unstruct_): "
58 "Index %zu in cell_to_vertex (%d) is not smaller than nbr_vertices (%zu).",
59 i, cell_to_vertex_[i], nbr_vertices)
64 for (
size_t i = 0; i < total_num_cell_corners; ++i)
69 for (
size_t i = 0; i < total_num_cell_corners; ++i)
77 for (
size_t i = 0, accu = 0; i < nbr_vertices; ++i) {
81 for (
size_t i = 0, k = 0; i < nbr_cells; ++i) {
83 for (
size_t j = 0; j < curr_num_vertices; ++j, ++k)
88 xmalloc(total_num_cell_corners *
sizeof(*temp_edges));
89 for (
size_t i = 0, offset = 0, k = 0; i < nbr_cells; ++i) {
90 size_t * curr_cell_to_vertex = cell_to_vertex + offset;
91 size_t curr_num_edges = num_vertices_per_cell[i];
92 offset += curr_num_edges;
93 for (
size_t j = 0; j < curr_num_edges; ++j, ++k) {
95 curr_cell_to_vertex[j] > curr_cell_to_vertex[(j+1)%curr_num_edges];
96 temp_edges[k].
vertex[order] = curr_cell_to_vertex[j];
97 temp_edges[k].
vertex[order^1] = curr_cell_to_vertex[(j+1)%curr_num_edges];
101 qsort(temp_edges, total_num_cell_corners,
104 size_t * cell_to_edge =
105 xmalloc(total_num_cell_corners *
sizeof(*cell_to_edge));
106 size_t nbr_edges = 0;
108 for (
size_t i = 0, prev_indices[2] = {SIZE_MAX, SIZE_MAX};
109 i < total_num_cell_corners; ++i) {
112 if ((prev_indices[0] != temp_edges[i].
vertex[0]) ||
113 (prev_indices[1] != temp_edges[i].
vertex[1])) {
115 prev_indices[0] = temp_edges[i].
vertex[0];
116 prev_indices[1] = temp_edges[i].
vertex[1];
117 edge_to_vertex[nbr_edges][0] = prev_indices[0];
118 edge_to_vertex[nbr_edges][1] = prev_indices[1];
122 cell_to_edge[curr_cell_to_edge_idx] = nbr_edges - 1;
125 xrealloc(edge_to_vertex, nbr_edges *
sizeof(*edge_to_vertex));
178 size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_,
179 double *x_vertices,
double *y_vertices,
int *cell_to_vertex_,
180 void (*LLtoXYZ_ptr)(double, double,
double[]),
181 double (*get_angle_ptr)(double, double),
182 double angle_tol,
double pole_y_vertex) {
186 nbr_vertices, nbr_cells, num_vertices_per_cell_,
187 x_vertices, y_vertices, cell_to_vertex_, LLtoXYZ_ptr);
189 for (
size_t i = 0; i < grid_data.
num_edges; ++i) {
196 pole_y_vertex) < angle_tol) ^
198 pole_y_vertex) < angle_tol));
203 is_lon_edge || is_lat_edge,
204 "ERROR(yac_generate_basic_grid_data_unstruct_ll): "
205 "edge is neither lon nor lat ((%lf,%lf),(%lf,%lf))",
static struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_ll_(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_, void(*LLtoXYZ_ptr)(double, double, double[]), double(*get_angle_ptr)(double, double), double angle_tol, double pole_y_vertex)
static struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_, void(*LLtoXYZ_ptr)(double, double, double[]))
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_deg(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_ll_deg(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_ll(size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell_, double *x_vertices, double *y_vertices, int *cell_to_vertex_)