23static void utest_check_basic_grid(
26 int const *
const * ref_core_masks,
27 size_t const * ref_grid_data_sizes);
29static void utest_check_interp_field(
40 double * coordinates,
size_t count);
43 int const *
mask,
char const * mask_name);
46 int const *
mask,
size_t count,
char const * mask_name);
50 char const * grid_name =
"basic_grid_name";
54 size_t nbr_vertices[2] = {2,3};
56 double lon_vertices[] = {0,1};
57 double lat_vertices[] = {0,1,2};
61 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
69 utest_check_basic_grid(
70 grid, grid_name,
grid_data, ref_core_masks, ref_grid_data_sizes);
86 utest_check_basic_grid(
87 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
96 size_t nbr_vertices[2] = {2,3};
98 double lon_vertices[] = {0.0,0.1};
99 double lat_vertices[] = {0.0,0.1,0.2};
103 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices);
107 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
112 utest_check_basic_grid(
113 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
122 size_t nbr_vertices[2] = {2,3};
124 double lon_vertices[] = {0.0,0.1};
125 double lat_vertices[] = {0.0,0.1,0.2};
129 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices);
133 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
138 utest_check_basic_grid(
139 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
148 size_t nbr_vertices[2] = {2,3};
150 double lon_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
151 double lat_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
155 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices);
159 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
164 utest_check_basic_grid(
165 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
174 size_t nbr_vertices[2] = {2,3};
176 double lon_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
177 double lat_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
181 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices);
185 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
190 utest_check_basic_grid(
191 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
200 size_t nbr_vertices = 6;
201 size_t nbr_cells = 2;
203 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
204 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
209 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
220 utest_check_basic_grid(
221 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
230 size_t nbr_vertices = 6;
231 size_t nbr_cells = 2;
233 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
234 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
239 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
250 utest_check_basic_grid(
251 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
260 size_t nbr_vertices = 6;
261 size_t nbr_cells = 2;
263 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
264 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
269 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
280 utest_check_basic_grid(
281 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
290 size_t nbr_vertices = 6;
291 size_t nbr_cells = 2;
293 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
294 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
299 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
310 utest_check_basic_grid(
311 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
320 size_t nbr_vertices = 6;
321 size_t nbr_cells = 2;
322 size_t nbr_edges = 7;
323 int num_edges_per_cell[] = {4, 4};
324 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
325 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
327 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
331 grid_name, nbr_vertices, nbr_cells, nbr_edges,
332 num_edges_per_cell, x_vertices, y_vertices,
333 cell_to_edge, edge_to_vertex);
337 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
343 utest_check_basic_grid(
344 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
353 size_t nbr_vertices = 6;
354 size_t nbr_cells = 2;
355 size_t nbr_edges = 7;
356 int num_edges_per_cell[] = {4, 4};
357 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
358 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
360 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
364 grid_name, nbr_vertices, nbr_cells, nbr_edges,
365 num_edges_per_cell, x_vertices, y_vertices,
366 cell_to_edge, edge_to_vertex);
370 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
376 utest_check_basic_grid(
377 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
386 size_t nbr_vertices = 6;
387 size_t nbr_cells = 2;
388 size_t nbr_edges = 7;
389 int num_edges_per_cell[] = {4, 4};
390 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
391 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
393 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
397 grid_name, nbr_vertices, nbr_cells, nbr_edges,
398 num_edges_per_cell, x_vertices, y_vertices,
399 cell_to_edge, edge_to_vertex);
403 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
409 utest_check_basic_grid(
410 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
419 size_t nbr_vertices = 6;
420 size_t nbr_cells = 2;
421 size_t nbr_edges = 7;
422 int num_edges_per_cell[] = {4, 4};
423 double x_vertices[] = {0.0,0.1,0.0,0.1,0.0,0.1};
424 double y_vertices[] = {0.0,0.0,0.1,0.1,0.2,0.2};
426 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
430 grid_name, nbr_vertices, nbr_cells, nbr_edges,
431 num_edges_per_cell, x_vertices, y_vertices,
432 cell_to_edge, edge_to_vertex);
436 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
442 utest_check_basic_grid(
443 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
452 size_t nbr_points = 6;
453 double x_points[] = {0.0,0.1,0.0,0.1,0.0,0.1};
454 double y_points[] = {0.0,0.0,0.1,0.1,0.2,0.2};
458 grid_name, nbr_points, x_points, y_points);
466 utest_check_basic_grid(
467 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
476 size_t nbr_points = 6;
477 double x_points[] = {0.0,0.1,0.0,0.1,0.0,0.1};
478 double y_points[] = {0.0,0.0,0.1,0.1,0.2,0.2};
482 grid_name, nbr_points, x_points, y_points);
490 utest_check_basic_grid(
491 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
500 size_t nbr_vertices[2] = {2,3};
504 double north_pole_lon = 180.0*
YAC_RAD;
505 double north_pole_lat = 45.0*
YAC_RAD;
509 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices,
510 north_pole_lon, north_pole_lat);
514 nbr_vertices,
cyclic, lon_vertices, lat_vertices,
515 north_pole_lon, north_pole_lat);
520 utest_check_basic_grid(
521 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
530 size_t nbr_vertices[2] = {2,3};
532 double lon_vertices[] = {-0.5,0.5};
533 double lat_vertices[] = {-0.5,0.0,0.5};
534 double north_pole_lon = 180.0;
535 double north_pole_lat = 45.0;
539 grid_name, nbr_vertices,
cyclic, lon_vertices, lat_vertices,
540 north_pole_lon, north_pole_lat);
544 nbr_vertices,
cyclic, lon_vertices, lat_vertices,
545 north_pole_lon, north_pole_lat);
550 utest_check_basic_grid(
551 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
560 size_t nbr_vertices[2] = {2,3};
562 double lon_vertices[] = {0,1};
563 double lat_vertices[] = {0,1,2};
567 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
572 double ref_cell_center_coordinates[2][3];
573 int ref_cell_mask[] = {0,1};
574 LLtoXYZ_deg(0.5, 0.5, ref_cell_center_coordinates[0]);
575 LLtoXYZ_deg(0.5, 1.5, ref_cell_center_coordinates[1]);
587 utest_check_interp_field(
588 grid, cell_interp_field,
596 .coordinates_idx = SIZE_MAX,
597 .masks_idx = SIZE_MAX
600 utest_check_interp_field(
601 grid, cell_interp_field, NULL, NULL);
610 size_t nbr_vertices[2] = {2,3};
612 double lon_vertices[] = {0,1};
613 double lat_vertices[] = {0,1,2};
617 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
623 char const mask_name[] =
"test_mask";
625 size_t ref_mask_idx =
632 PUT_ERR(
"ERROR in yac_basic_grid_get_named_mask_idx");
637 PUT_ERR(
"ERROR in yac_basic_grid_get_named_mask_idx");
645 size_t nbr_vertices[2] = {2,3};
647 double lon_vertices[] = {0,1};
648 double lat_vertices[] = {0,1,2};
652 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
657 double cell_coordinates[2][2][3];
658 double vertex_coordinates[1][6][3];
659 int cell_mask[3][2] = {{1,0},{0,1},{0,0}};
660 int edge_mask[2][7] = {{0,0,0,1,1,1,1},{1,1,1,0,0,0,0}};
676 sizeof(cell_coordinates)/
sizeof(cell_coordinates[0]),
679 sizeof(vertex_coordinates)/
sizeof(vertex_coordinates[0]),
680 NUM_CORNER_MASKS = 0,
682 NUM_EDGE_MASKS =
sizeof(
edge_mask)/
sizeof(edge_mask[0]),
685 size_t ref_coordinates_idxs[3][2] = {
694 size_t ref_masks_idxs[3][3] = {
708 size_t ref_num_coords[3] =
709 {NUM_CELL_COORDS, NUM_CORNER_COORDS, NUM_EDGE_COORDS};
710 size_t ref_num_masks[3] =
711 {NUM_CELL_MASKS, NUM_CORNER_MASKS, NUM_EDGE_MASKS};
718 if (ref_num_coords[loc_idx] !=
720 PUT_ERR(
"ERROR in yac_field_data_get_coordinates_count");
724 for (
size_t coord_idx = 0; coord_idx < ref_num_coords[loc_idx];
729 .coordinates_idx = ref_coordinates_idxs[loc_idx][coord_idx],
730 .masks_idx = SIZE_MAX};
737 for (
size_t i = 0;
i < data_size; ++
i)
739 PUT_ERR(
"ERROR in yac_basic_grid_get_field_data");
747 .coordinates_idx = SIZE_MAX,
748 .masks_idx = ref_masks_idxs[loc_idx][
masks_idx]};
750 int const * ref_masks =
755 for (
size_t i = 0;
i < data_size; ++
i)
756 if (ref_masks[i] !=
masks[i])
757 PUT_ERR(
"ERROR in yac_basic_grid_get_field_data");
768 size_t nbr_vertices[2] = {2,3};
770 double lon_vertices[] = {0,1};
771 double lat_vertices[] = {0,1,2};
775 nbr_vertices,
cyclic, lon_vertices, lat_vertices);
780 double ref_cell_center_coordinates[2][2][3];
781 int ref_cell_mask[2][2] = {{0,1},{1,0}};
782 LLtoXYZ_deg(0.5, 0.5, ref_cell_center_coordinates[0][0]);
783 LLtoXYZ_deg(0.5, 1.5, ref_cell_center_coordinates[0][1]);
784 LLtoXYZ_deg(0.6, 0.6, ref_cell_center_coordinates[1][0]);
785 LLtoXYZ_deg(0.6, 1.6, ref_cell_center_coordinates[1][1]);
801 grid,
YAC_LOC_CELL, &(ref_cell_center_coordinates[1][0][0]), 2),
807 enum {
NUM_FIELDS =
sizeof(interp_fields) /
sizeof(interp_fields[0])};
812 PUT_ERR(
"ERROR in yac_basic_grid_get_data_size_f2c");
816 utest_check_interp_field(
817 grid, interp_fields[i],
828 char const * grid_name =
"unstruct_edge_bug";
829 enum {NBR_EDGES = 3};
830 size_t nbr_vertices = NBR_EDGES;
831 size_t nbr_cells = 1;
832 size_t nbr_edges = NBR_EDGES;
833 int num_edges_per_cell[] = {NBR_EDGES};
834 double x_vertices[] = {-0.1,0.0,0.1};
835 double y_vertices[] = {0.0,0.0,0.1};
837 {{0,1,2}, {0,2,1}, {1,0,2}, {1,2,0}, {2,0,1}, {2,1,0}};
838 int edge_to_vertex[NBR_EDGES][2] = {{0,1}, {1,2}, {2,0}};
839 int ref_edge_to_vertex[] = {0,1, 1,2, 2,0};
841 for (
size_t i = 0;
i <
sizeof(
cell_to_edge) /
sizeof(cell_to_edge[0]);
844 int edge_vertex_ordering[NBR_EDGES];
845 for (edge_vertex_ordering[0] = 0; edge_vertex_ordering[0] < 2;
846 ++edge_vertex_ordering[0]) {
847 for (edge_vertex_ordering[1] = 0; edge_vertex_ordering[1] < 2;
848 ++edge_vertex_ordering[1]) {
849 for (edge_vertex_ordering[2] = 0; edge_vertex_ordering[2] < 2;
850 ++edge_vertex_ordering[2]) {
854 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
855 x_vertices, y_vertices,
cell_to_edge[i], ref_edge_to_vertex);
857 int temp_edge_to_vertex[NBR_EDGES][2];
859 for (
size_t j = 0; j < NBR_EDGES; ++j) {
860 temp_edge_to_vertex[j][edge_vertex_ordering[j]] =
862 temp_edge_to_vertex[j][edge_vertex_ordering[j]^1] =
868 grid_name, nbr_vertices, nbr_cells, nbr_edges,
869 num_edges_per_cell, x_vertices, y_vertices,
870 cell_to_edge[i], &temp_edge_to_vertex[0][0]);
876 utest_check_basic_grid(
877 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
891static void utest_check_basic_grid(
894 int const *
const * ref_core_masks,
895 size_t const * ref_grid_data_sizes) {
899 PUT_ERR(
"ERROR in yac_basic_grid_get_name");
908 if (ref_core_masks[loc_idx] !=
910 PUT_ERR(
"ERROR in yac_basic_grid_get_core_mask");
913 if (ref_grid_data_sizes[loc_idx] !=
915 PUT_ERR(
"ERROR in yac_basic_grid_get_data_size");
919 double * cell_areas = malloc(
num_cells *
sizeof(*cell_areas));
920 for (
size_t i = 0;
i <
num_cells; ++
i) cell_areas[i] = DBL_MAX;
923 if (cell_areas[i] == DBL_MAX)
924 PUT_ERR(
"ERROR in yac_basic_grid_compute_cell_areas");
928static void utest_check_interp_field(
937 if ((ref_coords == NULL) != (coords == NULL))
938 PUT_ERR(
"ERROR in yac_basic_grid_get_field_coordinates");
940 if (ref_coords != NULL)
941 for (
size_t i = 0;
i < data_size; ++
i)
943 PUT_ERR(
"ERROR in yac_basic_grid_get_field_coordinates");
948 if ((ref_mask == NULL) != (
mask == NULL))
949 PUT_ERR(
"ERROR in yac_basic_grid_get_field_mask");
951 if (ref_mask != NULL)
952 for (
size_t i = 0;
i < data_size; ++
i)
953 if (ref_mask[i] !=
mask[i])
954 PUT_ERR(
"ERROR in yac_basic_grid_get_field_mask");
struct yac_basic_grid * yac_basic_grid_unstruct_edge_new(char const *name, size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid * yac_basic_grid_unstruct_edge_ll_new(char const *name, size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_field_data * yac_basic_grid_get_field_data(struct yac_basic_grid *grid, enum yac_location location)
size_t yac_basic_grid_get_named_mask_idx(struct yac_basic_grid *grid, enum yac_location location, char const *mask_name)
int const * yac_basic_grid_get_field_mask(struct yac_basic_grid *grid, struct yac_interp_field field)
struct yac_basic_grid * yac_basic_grid_new(char const *name, struct yac_basic_grid_data grid_data)
struct yac_basic_grid * yac_basic_grid_reg_2d_deg_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid * yac_basic_grid_reg_2d_rot_deg_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, double north_pole_lon, double north_pole_lat)
struct yac_basic_grid * yac_basic_grid_cloud_new(char const *name, size_t nbr_points, double *x_points, double *y_points)
struct yac_basic_grid * yac_basic_grid_unstruct_deg_new(char const *name, 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 * yac_basic_grid_unstruct_new(char const *name, size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex)
yac_const_coordinate_pointer yac_basic_grid_get_field_coordinates(struct yac_basic_grid *grid, struct yac_interp_field field)
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
struct yac_basic_grid * yac_basic_grid_cloud_deg_new(char const *name, size_t nbr_points, double *x_points, double *y_points)
struct yac_basic_grid * yac_basic_grid_unstruct_edge_deg_new(char const *name, size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
size_t yac_basic_grid_add_mask(struct yac_basic_grid *grid, enum yac_location location, int const *mask, size_t count, char const *mask_name)
struct yac_basic_grid * yac_basic_grid_reg_2d_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid * yac_basic_grid_unstruct_ll_new(char const *name, size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex)
char const * yac_basic_grid_get_name(struct yac_basic_grid *grid)
void yac_basic_grid_compute_cell_areas(struct yac_basic_grid *grid, double *cell_areas)
struct yac_basic_grid * yac_basic_grid_reg_2d_rot_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, double north_pole_lon, double north_pole_lat)
size_t yac_basic_grid_add_coordinates(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates, size_t count)
size_t yac_basic_grid_get_data_size(struct yac_basic_grid *grid, enum yac_location location)
struct yac_basic_grid * yac_basic_grid_unstruct_ll_deg_new(char const *name, size_t nbr_vertices, size_t nbr_cells, int *num_vertices_per_cell, double *x_vertices, double *y_vertices, int *cell_to_vertex)
int const * yac_basic_grid_get_core_mask(struct yac_basic_grid *grid, enum yac_location location)
struct yac_basic_grid * yac_basic_grid_empty_new(char const *name)
void yac_basic_grid_delete(struct yac_basic_grid *grid)
struct yac_basic_grid * yac_basic_grid_curve_2d_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid * yac_basic_grid_curve_2d_deg_new(char const *name, size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid * yac_basic_grid_unstruct_edge_ll_deg_new(char const *name, size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
void yac_basic_grid_data_free(struct yac_basic_grid_data grid)
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_reg_2d(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
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)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_cloud(size_t nbr_points, double *x_points, double *y_points)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge_deg(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d_rot_deg(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, double north_pole_lon, double north_pole_lat)
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d_rot(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, double north_pole_lon, double north_pole_lat)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge_ll(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_unstruct_edge_ll_deg(size_t nbr_vertices, size_t nbr_cells, size_t nbr_edges, int *num_edges_per_cell, double *x_vertices, double *y_vertices, int *cell_to_edge, int *edge_to_vertex)
struct yac_basic_grid_data yac_generate_basic_grid_data_cloud_deg(size_t nbr_points, double *x_points, double *y_points)
struct yac_basic_grid_data yac_generate_basic_grid_data_curve_2d_deg(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
struct yac_basic_grid_data yac_generate_basic_grid_data_curve_2d(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
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_reg_2d_deg(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
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)
size_t yac_field_data_get_coordinates_count(struct yac_field_data *field_data)
yac_const_coordinate_pointer yac_field_data_get_coordinates_data(struct yac_field_data *field_data, size_t coordinates_idx)
int const * yac_field_data_get_mask_data(struct yac_field_data *field_data, size_t mask_idx)
static void LLtoXYZ_deg(double lon, double lat, double p_out[])
static double get_vector_angle(double const a[3], double const b[3])
yac_size_t_2_pointer edge_to_vertex
int * num_vertices_per_cell
enum yac_location location
size_t yac_basic_grid_get_data_size_f2c(struct yac_basic_grid *grid, int location)
size_t yac_basic_grid_add_mask_nocpy_f2c(struct yac_basic_grid *grid, int location, int const *mask, char const *mask_name)
size_t yac_basic_grid_add_coordinates_f2c(struct yac_basic_grid *grid, int location, double *coordinates, size_t count)
size_t yac_basic_grid_add_coordinates_nocpy_f2c(struct yac_basic_grid *grid, int location, double *coordinates)
size_t yac_basic_grid_add_mask_f2c(struct yac_basic_grid *grid, int location, int const *mask, size_t count, char const *mask_name)
static enum yac_location locations[]
void check_basic_grid_data(struct yac_basic_grid_data grid_a, struct yac_basic_grid_data grid_b, char const *grid_name)
static struct user_input_data_masks ** masks
double const (* yac_const_coordinate_pointer)[3]