YAC 3.13.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_read_scrip_c.c
Go to the documentation of this file.
1// Copyright (c) 2024 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#include <stdlib.h>
6#include <string.h>
7#include <unistd.h>
8
9#include "tests.h"
10#include "test_common.h"
11#include "grid_file_common.h"
12#include "read_scrip_grid.h"
13#include "grid2vtk.h"
14#include "io_utils.h"
15
21// #define HAVE_OASIS_FILES
22// #define WRITE_VTK_GRID_FILE
23#define DUMMY_GRID_NAME ("dummy_grid")
24
25int main(void) {
26
27 char * grid_filename = "test_read_scrip_c_grids.nc";
28 char * mask_filename = "test_read_scrip_c_masks.nc";
30 DUMMY_GRID_NAME, grid_filename, mask_filename, 1,
31 360, 10, (double[]){0.0,360.0}, (double[]){0.0, 10.0});
32
33 size_t ref_num_cells = 360 * 10;
34 size_t ref_num_vertices = 360 * 11;
35
36 int valid_mask_value = 0;
37
38 if (!yac_file_exists(grid_filename)) return EXIT_FAILURE;
39 if (!yac_file_exists(mask_filename)) return EXIT_FAILURE;
40
41 { // read unstructured grid
42
43 char * gridname = DUMMY_GRID_NAME;
44
45 { // test yac_read_scrip_basic_grid
46 size_t * duplicated_cell_idx = NULL;
47 yac_int * orig_cell_global_ids = NULL;
48 size_t nbr_duplicated_cells = 0;
49
50 size_t cell_coord_idx;
51
52 struct yac_basic_grid * scrip_grid =
54 grid_filename, mask_filename, gridname, valid_mask_value, gridname,
55 0, &cell_coord_idx, &duplicated_cell_idx, &orig_cell_global_ids,
56 &nbr_duplicated_cells);
57
58 if (ref_num_vertices !=
60 PUT_ERR("error in yac_read_scrip_grid");
61 if (ref_num_cells !=
63 PUT_ERR("error in yac_read_scrip_grid");
64
65 free(duplicated_cell_idx);
66 free(orig_cell_global_ids);
67
68 #ifdef WRITE_VTK_GRID_FILE
69 yac_write_basic_grid_to_file(scrip_grid, gridname);
70 #else
71 char const * vtk_gridname = "test_read_scrip_grid_c";
72 char const * vtk_filename = "test_read_scrip_grid_c.vtk";
73
74 yac_write_basic_grid_to_file(scrip_grid, vtk_gridname);
75
76 if (!yac_file_exists(vtk_filename))
77 PUT_ERR("ERROR in yac_write_basic_grid_to_file");
78
79 unlink(vtk_filename);
80 #endif // WRITE_VTK_GRID_FILE
81
82 yac_basic_grid_delete(scrip_grid);
83 }
84
85 { // test yac_read_scrip_grid_information
86
87 size_t num_vertices;
88 size_t num_cells;
89 int * num_vertices_per_cell;
90 double * x_vertices;
91 double * y_vertices;
92 double * x_cells;
93 double * y_cells;
94 int * cell_to_vertex;
95 int * cell_core_mask;
96 size_t * duplicated_cell_idx;
97 size_t * orig_cell_idx;
98 size_t nbr_duplicated_cells;
99
101 grid_filename, mask_filename, gridname, valid_mask_value,
102 &num_vertices, &num_cells, &num_vertices_per_cell,
103 &x_vertices, &y_vertices, &x_cells, &y_cells,
105 &duplicated_cell_idx, &orig_cell_idx, &nbr_duplicated_cells);
106
107 if (ref_num_vertices != num_vertices)
108 PUT_ERR("error in yac_read_scrip_grid_information");
109 if (ref_num_cells != num_cells)
110 PUT_ERR("error in yac_read_scrip_grid_information");
111
112 free(num_vertices_per_cell);
113 free(x_vertices);
114 free(y_vertices);
115 free(x_cells);
116 free(y_cells);
117 free(cell_to_vertex);
118 free(cell_core_mask);
119 free(duplicated_cell_idx);
120 free(orig_cell_idx);
121 }
122 }
123
124 { // read lon/lat grid
125 char * gridname = DUMMY_GRID_NAME;
126
127 struct yac_basic_grid * scrip_grid =
129 grid_filename, mask_filename, gridname, valid_mask_value, gridname,
130 1, NULL, NULL, NULL, NULL);
131
132#ifdef WRITE_VTK_GRID_FILE
133 char vtk_gridname[64];
135 scrip_grid, strcat(strcpy(vtk_gridname, gridname), "_ll"));
136#endif // WRITE_VTK_GRID_FILE
137
138 yac_basic_grid_delete(scrip_grid);
139 }
140
141 { // read cloud grid (containing only cell centers)
142
143 // create grid files
144 char * grid_filename = "test_read_scrip_cloud_c_grids.nc";
145 char * mask_filename = "test_read_scrip_cloud_c_masks.nc";
147 DUMMY_GRID_NAME, grid_filename, mask_filename, 0,
148 380, 180, (double[]){0.0,380.0}, (double[]){-90.0, 90.0});
149
150 size_t vertex_coord_idx;
151 size_t * duplicated_vertex_idx;
152 yac_int * orig_vertex_global_ids;
153 size_t nbr_duplicated_vertices;
154 struct yac_basic_grid * scrip_cloud_grid =
156 grid_filename, mask_filename, DUMMY_GRID_NAME, 0,
157 DUMMY_GRID_NAME, &vertex_coord_idx, &duplicated_vertex_idx,
158 &orig_vertex_global_ids, &nbr_duplicated_vertices);
159
160#ifdef WRITE_VTK_GRID_FILE
162#endif // WRITE_VTK_GRID_FILE
163
164 if (strcmp(yac_basic_grid_get_name(scrip_cloud_grid), DUMMY_GRID_NAME))
165 PUT_ERR("wrong grid name");
166
167 {
168 struct yac_basic_grid_data * scrip_cloud_grid_data =
169 yac_basic_grid_get_data(scrip_cloud_grid);
170
171 if (scrip_cloud_grid_data->num_cells != 0)
172 PUT_ERR("wrong number of cells");
173 if (scrip_cloud_grid_data->num_vertices != 380 * 180)
174 PUT_ERR("wrong global number of vertices");
175 if (nbr_duplicated_vertices != 20 * 180)
176 PUT_ERR("wrong global number of duplicated vertices");
177 if (scrip_cloud_grid_data->num_edges != 0)
178 PUT_ERR("wrong number of edges");
179 }
180
181 {
182 struct yac_basic_grid_data scrip_cloud_grid_data =
184 grid_filename, mask_filename, DUMMY_GRID_NAME, 0);
185
186 if (scrip_cloud_grid_data.num_cells != 0)
187 PUT_ERR("wrong number of cells");
188 if (scrip_cloud_grid_data.num_vertices != 380 * 180)
189 PUT_ERR("wrong global number of vertices");
190 if (scrip_cloud_grid_data.num_edges != 0)
191 PUT_ERR("wrong number of edges");
192
193 yac_basic_grid_data_free(scrip_cloud_grid_data);
194 }
195
196 free(duplicated_vertex_idx);
197 free(orig_vertex_global_ids);
198 yac_basic_grid_delete(scrip_cloud_grid);
199
200 // delete grid files
201 unlink(grid_filename);
202 unlink(mask_filename);
203 }
204
205 unlink(grid_filename);
206 unlink(mask_filename);
207
208 return TEST_EXIT_CODE;
209}
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
Definition basic_grid.c:140
char const * yac_basic_grid_get_name(struct yac_basic_grid *grid)
Definition basic_grid.c:131
size_t yac_basic_grid_get_data_size(struct yac_basic_grid *grid, enum yac_location location)
Definition basic_grid.c:150
void yac_basic_grid_delete(struct yac_basic_grid *grid)
Definition basic_grid.c:73
void yac_basic_grid_data_free(struct yac_basic_grid_data grid)
void yac_write_basic_grid_to_file(struct yac_basic_grid *grid, char const *name)
Definition grid2vtk.c:283
void write_dummy_scrip_grid_file(char *grid_name, char *grid_filename, char *mask_filename, int with_corners, size_t num_lon, size_t num_lat, double lon_range[2], double lat_range[2])
int yac_file_exists(const char *filename)
Definition utils_core.c:12
@ YAC_LOC_CORNER
Definition location.h:15
@ YAC_LOC_CELL
Definition location.h:14
void yac_read_scrip_grid_information(char const *grid_filename, char const *mask_filename, char const *grid_name, int valid_mask_value, size_t *num_vertices, size_t *num_cells, int **num_vertices_per_cell, double **x_vertices, double **y_vertices, double **x_cells, double **y_cells, int **cell_to_vertex, int **cell_core_mask, size_t **duplicated_cell_idx, size_t **orig_cell_idx, size_t *nbr_duplicated_cells)
struct yac_basic_grid_data yac_read_scrip_cloud_basic_grid_data(char const *grid_filename, char const *mask_filename, char const *grid_name, int valid_mask_value)
struct yac_basic_grid * yac_read_scrip_cloud_basic_grid(char const *grid_filename, char const *mask_filename, char const *grid_name, int valid_mask_value, char const *name, size_t *vertex_coord_idx, size_t **duplicated_vertex_idx, yac_int **orig_vertex_global_ids, size_t *nbr_duplicated_vertices)
struct yac_basic_grid * yac_read_scrip_basic_grid(char const *grid_filename, char const *mask_filename, char const *grid_name, int valid_mask_value, char const *name, int use_ll_edges, size_t *cell_coord_idx, size_t **duplicated_cell_idx, yac_int **orig_cell_global_ids, size_t *nbr_duplicated_cells)
int * cell_to_vertex
size_t num_cells[2]
#define DUMMY_GRID_NAME
#define TEST_EXIT_CODE
Definition tests.h:14
#define PUT_ERR(string)
Definition tests.h:10
int * cell_core_mask
YAC_INT yac_int
Definition yac_types.h:15