17static void utest_check_basic_grid_data(
24 double coordinates_x[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
25 double coordinates_y[] = {-4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0};
27 size_t local_start[2] = {3, 3};
28 size_t local_count[2] = {3, 2};
36 double ref_vertex_coordinates[12][3];
37 yac_int ref_cell_ids[6] = {30, 31, 32,
39 yac_int ref_vertex_ids[12] = {33, 34, 35, 36,
42 yac_int ref_edge_ids[17] = {63, 64, 65, 66, 67, 68, 70,
43 82, 83, 84, 85, 86, 87, 89,
45 size_t ref_num_cells = 6;
46 size_t ref_num_vertices = 12;
47 size_t ref_num_edges = 17;
48 int ref_core_cell_mask[6] = {1, 1, 1,
50 int ref_core_vertex_mask[12] = {1, 1, 1, 1,
53 int ref_core_edge_mask[17] = {1, 1, 1, 1, 1, 1, 1,
56 int ref_num_vertices_per_cell[6] = {4, 4, 4,
58 int ref_num_cells_per_vertex[12] = {1, 2, 2, 1,
61 size_t ref_cell_to_vertex[6][4] = {{0,1,5,4}, {1,2,6,5}, {2,3,7,6},
62 {4,5,9,8}, {5,6,10,9}, {6,7,11,10}};
63 size_t ref_cell_to_vertex_offsets[6] = {0,4,8,12,16,20};
64 size_t ref_cell_to_edge[6][4] = {{0,3,7,1}, {2,5,9,3}, {4,6,11,5},
65 {7,10,14,8}, {9,12,15,10}, {11,13,16,12}};
66 size_t ref_cell_to_edge_offsets[6] = {0,4,8,12,16,20};
67 size_t ref_vertex_to_cell[] =
68 {0, 0,1, 1,2, 2, 0,3, 0,1,3,4, 1,2,4,5, 2,5, 3, 3,4, 4,5, 5};
69 size_t ref_vertex_to_cell_offsets[12] = {0,1,3,5,6,8,12,16,18,19,21,23};
70 size_t ref_edge_to_vertex[17][2] = {{0,1}, {0,4}, {1,2}, {1,5}, {2,3}, {2,6}, {3,7},
71 {4,5}, {4,8}, {5,6}, {5,9}, {6,7}, {6,10}, {7,11},
72 {8,9}, {9,10}, {10,11}};
80 for (
size_t i = 0, k = 0;
i < local_count[1] + 1; ++
i)
81 for (
size_t j = 0; j < local_count[0] + 1; ++j, ++k)
84 &(ref_vertex_coordinates[k][0]));
88 .cell_ids = ref_cell_ids,
89 .vertex_ids = ref_vertex_ids,
90 .edge_ids = ref_edge_ids,
91 .num_cells = ref_num_cells,
92 .num_vertices = ref_num_vertices,
93 .num_edges = ref_num_edges,
94 .core_cell_mask = ref_core_cell_mask,
95 .core_vertex_mask = ref_core_vertex_mask,
96 .core_edge_mask = ref_core_edge_mask,
97 .num_vertices_per_cell = ref_num_vertices_per_cell,
98 .num_cells_per_vertex = ref_num_cells_per_vertex,
99 .cell_to_vertex = &(ref_cell_to_vertex[0][0]),
102 .cell_to_edge_offsets = ref_cell_to_edge_offsets,
103 .vertex_to_cell = ref_vertex_to_cell,
104 .vertex_to_cell_offsets = ref_vertex_to_cell_offsets,
106 &(ref_edge_to_vertex[0][0]),
107 .edge_type = ref_edge_type,
108 .num_total_cells = ref_num_cells,
109 .num_total_vertices = ref_num_vertices,
110 .num_total_edges = ref_num_edges
121 utest_check_basic_grid_data(
grid_data, ref_grid_data);
125 double coordinates_x[] = {-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0};
126 double coordinates_y[] = {-3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0};
128 size_t local_start[2] = {2, 2};
129 size_t local_count[2] = {2, 2};
137 double ref_vertex_coordinates[25][3];
138 yac_int ref_cell_ids[16] = {7,8,9,10, 13,14,15,16, 19,20,21,22, 25,26,27,28};
139 yac_int ref_vertex_ids[25] = {8,9,10,11,12, 15,16,17,18,19, 22,23,24,25,26,
140 29,30,31,32,33, 36,37,38,39,40};
141 yac_int ref_edge_ids[40] = {15,16,17,18,19,20,21,22,24,
142 28,29,30,31,32,33,34,35,37,
143 41,42,43,44,45,46,47,48,50,
144 54,55,56,57,58,59,60,61,63,
146 size_t ref_num_cells = 16;
147 size_t ref_num_vertices = 25;
148 size_t ref_num_edges = 40;
149 int ref_core_cell_mask[16] = {0,0,0,0,
153 int ref_core_vertex_mask[25] = {0,0,0,0,0,
158 int ref_core_edge_mask[40] = {0,0,0,0,0,0,0,0,0,
163 int ref_num_vertices_per_cell[16] = {4,4,4,4,
167 int ref_num_cells_per_vertex[25] = {1,2,2,2,1,
172 size_t ref_cell_to_vertex[16][4] =
173 {{0,1,6,5}, {1,2,7,6}, {2,3,8,7}, {3,4,9,8},
174 {5,6,11,10}, {6,7,12,11}, {7,8,13,12}, {8,9,14,13},
175 {10,11,16,15}, {11,12,17,16}, {12,13,18,17}, {13,14,19,18},
176 {15,16,21,20}, {16,17,22,21}, {17,18,23,22}, {18,19,24,23}};
177 size_t ref_cell_to_vertex_offsets[16] = {0,4,8,12,
181 size_t ref_cell_to_edge[16][4] =
182 {{0,3,9,1}, {2,5,11,3}, {4,7,13,5}, {6,8,15,7},
183 {9,12,18,10}, {11,14,20,12}, {13,16,22,14}, {15,17,24,16},
184 {18,21,27,19}, {20,23,29,21}, {22,25,31,23}, {24,26,33,25},
185 {27,30,36,28}, {29,32,37,30}, {31,34,38,32}, {33,35,39,34}};
186 size_t ref_cell_to_edge_offsets[16] = {0,4,8,12,
190 size_t ref_vertex_to_cell[] =
191 {0, 0,1, 1,2, 2,3, 3,
192 0,4, 0,1,4,5, 1,2,5,6, 2,3,6,7, 3,7,
193 4,8, 4,5,8,9, 5,6,9,10, 6,7,10,11, 7,11,
194 8,12, 8,9,12,13, 9,10,13,14, 10,11,14,15, 11,15,
195 12, 12,13, 13,14, 14,15, 15};
196 size_t ref_vertex_to_cell_offsets[25] = {0,
202 size_t ref_edge_to_vertex[40][2] = {{0,1}, {0,5}, {1,2}, {1,6}, {2,3}, {2,7}, {3,4}, {3,8}, {4,9},
203 {5,6}, {5,10}, {6,7}, {6,11}, {7,8}, {7,12}, {8,9}, {8,13}, {9,14},
204 {10,11}, {10,15}, {11,12}, {11,16}, {12,13}, {12,17}, {13,14}, {13,18}, {14,19},
205 {15,16}, {15,20}, {16,17}, {16,21}, {17,18},{17,22}, {18,19}, {18,23}, {19,24},
206 {20,21}, {21,22}, {22,23}, {23,24}};
220 for (
size_t i = 0, k = 0;
i < local_count[1] + 1 + 2; ++
i)
221 for (
size_t j = 0; j < local_count[0] + 1 + 2; ++j, ++k)
226 for (
size_t i = 0, k = 0;
i < local_count[1] + 3; ++
i)
227 for (
size_t j = 0; j < local_count[0] + 3; ++j, ++k)
231 &(ref_vertex_coordinates[k][0]));
235 .cell_ids = ref_cell_ids,
236 .vertex_ids = ref_vertex_ids,
237 .edge_ids = ref_edge_ids,
238 .num_cells = ref_num_cells,
239 .num_vertices = ref_num_vertices,
240 .num_edges = ref_num_edges,
241 .core_cell_mask = ref_core_cell_mask,
242 .core_vertex_mask = ref_core_vertex_mask,
243 .core_edge_mask = ref_core_edge_mask,
244 .num_vertices_per_cell = ref_num_vertices_per_cell,
245 .num_cells_per_vertex = ref_num_cells_per_vertex,
246 .cell_to_vertex = &(ref_cell_to_vertex[0][0]),
249 .cell_to_edge_offsets = ref_cell_to_edge_offsets,
250 .vertex_to_cell = ref_vertex_to_cell,
251 .vertex_to_cell_offsets = ref_vertex_to_cell_offsets,
253 &(ref_edge_to_vertex[0][0]),
254 .edge_type = ref_edge_type,
255 .num_total_cells = ref_num_cells,
256 .num_total_vertices = ref_num_vertices,
257 .num_total_edges = ref_num_edges
268 utest_check_basic_grid_data(
grid_data, ref_grid_data);
275 size_t local_start[2] = {0, 0};
276 size_t local_count[2] = {2, 2};
284 double ref_vertex_coordinates[16][3];
285 yac_int ref_cell_ids[9] = {0,1,2, 4,5,6, 8,9,10};
286 yac_int ref_vertex_ids[16] = {0,1,2,3, 5,6,7,8, 10,11,12,13, 15,16,17,18};
287 yac_int ref_edge_ids[24] = {0,1,2,3,4,5,7,
289 18,19,20,21,22,23,25,
291 size_t ref_num_cells = 9;
292 size_t ref_num_vertices = 16;
293 size_t ref_num_edges = 24;
294 int ref_core_cell_mask[9] = {1,1,0,
297 int ref_core_vertex_mask[16] = {1,1,1,0,
301 int ref_core_edge_mask[24] = {1,1,1,1,0,1,0,
305 int ref_num_vertices_per_cell[9] = {4,4,4,
308 int ref_num_cells_per_vertex[16] = {1,2,2,1,
312 size_t ref_cell_to_vertex[9][4] =
313 {{0,1,5,4}, {1,2,6,5}, {2,3,7,6},
314 {4,5,9,8}, {5,6,10,9}, {6,7,11,10},
315 {8,9,13,12}, {9,10,14,13}, {10,11,15,14}};
316 size_t ref_cell_to_vertex_offsets[9] = {0,4,8, 12,16,20, 24,28,32};
317 size_t ref_cell_to_edge[9][4] =
318 {{0,3,7,1}, {2,5,9,3}, {4,6,11,5},
319 {7,10,14,8}, {9,12,16,10}, {11,13,18,12},
320 {14,17,21,15}, {16,19,22,17}, {18,20,23,19}};
321 size_t ref_cell_to_edge_offsets[9] = {0,4,8, 12,16,20, 24,28,32};
322 size_t ref_vertex_to_cell[] =
324 0,3, 0,1,3,4, 1,2,4,5, 2,5,
325 3,6, 3,4,6,7, 4,5,7,8, 5,8,
327 size_t ref_vertex_to_cell_offsets[16] = {0,1,3,5,
331 size_t ref_edge_to_vertex[24][2] = {{0,1}, {0,4}, {1,2}, {1,5}, {2,3}, {2,6}, {3,7},
332 {4,5}, {4,8}, {5,6}, {5,9}, {6,7}, {6,10}, {7,11},
333 {8,9}, {8,12}, {9,10}, {9,13}, {10,11}, {10,14}, {11,15},
334 {12,13}, {13,14}, {14,15}};
345 for (
size_t i = 0, k = 0;
i < local_count[1] + 1 + 1; ++
i)
346 for (
size_t j = 0; j < local_count[0] + 1 + 1; ++j, ++k)
351 for (
size_t i = 0, k = 0;
i < local_count[1] + 2; ++
i)
352 for (
size_t j = 0; j < local_count[0] + 2; ++j, ++k)
356 &(ref_vertex_coordinates[k][0]));
360 .cell_ids = ref_cell_ids,
361 .vertex_ids = ref_vertex_ids,
362 .edge_ids = ref_edge_ids,
363 .num_cells = ref_num_cells,
364 .num_vertices = ref_num_vertices,
365 .num_edges = ref_num_edges,
366 .core_cell_mask = ref_core_cell_mask,
367 .core_vertex_mask = ref_core_vertex_mask,
368 .core_edge_mask = ref_core_edge_mask,
369 .num_vertices_per_cell = ref_num_vertices_per_cell,
370 .num_cells_per_vertex = ref_num_cells_per_vertex,
371 .cell_to_vertex = &(ref_cell_to_vertex[0][0]),
374 .cell_to_edge_offsets = ref_cell_to_edge_offsets,
375 .vertex_to_cell = ref_vertex_to_cell,
376 .vertex_to_cell_offsets = ref_vertex_to_cell_offsets,
378 &(ref_edge_to_vertex[0][0]),
379 .edge_type = ref_edge_type,
380 .num_total_cells = ref_num_cells,
381 .num_total_vertices = ref_num_vertices,
382 .num_total_edges = ref_num_edges
393 utest_check_basic_grid_data(
grid_data, ref_grid_data);
400static void utest_check_basic_grid_data(
412 for (
int j = 0; j < 3; ++j)
413 if (fabs(
grid_data.vertex_coordinates[i][j] -
415 PUT_ERR(
"wrong grid_data.vertex_coordinates");
417 for (
size_t i = 0;
i < ref_grid_data.
num_cells; ++
i) {
421 PUT_ERR(
"wrong core_cell_mask");
423 PUT_ERR(
"wrong num_vertices_per_cell");
425 PUT_ERR(
"wrong cell_to_vertex_offsets");
429 PUT_ERR(
"wrong cell_to_vertex");
431 PUT_ERR(
"wrong cell_to_edge_offsets");
442 PUT_ERR(
"wrong core_vertex_mask");
444 PUT_ERR(
"wrong num_cells_per_vertex");
446 PUT_ERR(
"wrong vertex_to_cell_offsets");
450 PUT_ERR(
"wrong vertex_to_cell");
452 for (
size_t i = 0;
i < ref_grid_data.
num_edges; ++
i) {
456 PUT_ERR(
"wrong core_edge_mask");
463 PUT_ERR(
"wrong edge_to_vertex");
467 PUT_ERR(
"wrong num_total_cells");
469 PUT_ERR(
"wrong num_total_vertices");
471 PUT_ERR(
"wrong num_total_edges");
struct yac_basic_grid_data yac_generate_basic_grid_data_reg2d(double const *global_coords_x, double const *global_coords_y, size_t const num_global_cells_[2], size_t const local_start[2], size_t const local_count[2], int with_halo)
@ YAC_LAT_CIRCLE_EDGE
latitude circle
@ YAC_LON_CIRCLE_EDGE
longitude circle
int * num_vertices_per_cell
yac_coordinate_pointer vertex_coordinates
size_t * cell_to_edge_offsets
size_t * vertex_to_cell_offsets
yac_size_t_2_pointer edge_to_vertex
enum yac_edge_type * edge_type
size_t num_total_vertices
size_t * cell_to_vertex_offsets
int * num_vertices_per_cell
int * num_cells_per_vertex
static void LLtoXYZ(double lon, double lat, double p_out[])
size_t(* yac_size_t_2_pointer)[2]