YAC 3.12.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_basic_grid.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 <string.h>
6
7#include "tests.h"
8#include "test_common.h"
9#include "grids/basic_grid.h"
10#include "geometry.h"
11
19enum {
20 NUM_LOCACTIONS = sizeof(locations) / sizeof(locations[0])
21};
22
23static void utest_check_basic_grid(
24 struct yac_basic_grid * grid, char const * ref_grid_name,
25 struct yac_basic_grid_data ref_grid_data,
26 int const * const * ref_core_masks,
27 size_t const * ref_grid_data_sizes);
28
29static void utest_check_interp_field(
30 struct yac_basic_grid * grid, struct yac_interp_field field,
31 yac_const_coordinate_pointer ref_coords, int const * ref_mask);
32
33// declaration of Fortran to C interfaces
35 struct yac_basic_grid * grid, int location);
37 struct yac_basic_grid * grid, int location, double * coordinates);
39 struct yac_basic_grid * grid, int location,
40 double * coordinates, size_t count);
42 struct yac_basic_grid * grid, int location,
43 int const * mask, char const * mask_name);
45 struct yac_basic_grid * grid, int location,
46 int const * mask, size_t count, char const * mask_name);
47
48int main (void) {
49
50 char const * grid_name = "basic_grid_name";
51
52 { // test yac_basic_grid_new
53
54 size_t nbr_vertices[2] = {2,3};
55 int cyclic[2] = {0,0};
56 double lon_vertices[] = {0,1};
57 double lat_vertices[] = {0,1,2};
58
61 nbr_vertices, cyclic, lon_vertices, lat_vertices);
62
63 struct yac_basic_grid * grid = yac_basic_grid_new(grid_name, grid_data);
64
65 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
66 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
67
68 // some basic checks
69 utest_check_basic_grid(
70 grid, grid_name, grid_data, ref_core_masks, ref_grid_data_sizes);
71
72 // cleanup
74 }
75
76 { // test yac_basic_grid_empty_new
77
78 struct yac_basic_grid * grid = yac_basic_grid_empty_new(grid_name);
79
80 struct yac_basic_grid_data ref_grid_data =
81 yac_generate_basic_grid_data_unstruct(0, 0, NULL, NULL, NULL, NULL);
82 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
83 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {0, 0, 0};
84
85 // some basic checks
86 utest_check_basic_grid(
87 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
88
89 // cleanup
90 yac_basic_grid_data_free(ref_grid_data);
92 }
93
94 { // test yac_basic_grid_reg_2d_new
95
96 size_t nbr_vertices[2] = {2,3};
97 int cyclic[2] = {0,0};
98 double lon_vertices[] = {0.0,0.1};
99 double lat_vertices[] = {0.0,0.1,0.2};
100
101 struct yac_basic_grid * grid =
103 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices);
104
105 struct yac_basic_grid_data ref_grid_data =
107 nbr_vertices, cyclic, lon_vertices, lat_vertices);
108 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
109 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
110
111 // some basic checks
112 utest_check_basic_grid(
113 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
114
115 // cleanup
116 yac_basic_grid_data_free(ref_grid_data);
118 }
119
120 { // test yac_basic_grid_reg_2d_deg_new
121
122 size_t nbr_vertices[2] = {2,3};
123 int cyclic[2] = {0,0};
124 double lon_vertices[] = {0.0,0.1};
125 double lat_vertices[] = {0.0,0.1,0.2};
126
127 struct yac_basic_grid * grid =
129 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices);
130
131 struct yac_basic_grid_data ref_grid_data =
133 nbr_vertices, cyclic, lon_vertices, lat_vertices);
134 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
135 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
136
137 // some basic checks
138 utest_check_basic_grid(
139 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
140
141 // cleanup
142 yac_basic_grid_data_free(ref_grid_data);
144 }
145
146 { // test yac_basic_grid_curve_2d_new
147
148 size_t nbr_vertices[2] = {2,3};
149 int cyclic[2] = {0,0};
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};
152
153 struct yac_basic_grid * grid =
155 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices);
156
157 struct yac_basic_grid_data ref_grid_data =
159 nbr_vertices, cyclic, lon_vertices, lat_vertices);
160 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
161 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
162
163 // some basic checks
164 utest_check_basic_grid(
165 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
166
167 // cleanup
168 yac_basic_grid_data_free(ref_grid_data);
170 }
171
172 { // test yac_basic_grid_curve_2d_deg_new
173
174 size_t nbr_vertices[2] = {2,3};
175 int cyclic[2] = {0,0};
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};
178
179 struct yac_basic_grid * grid =
181 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices);
182
183 struct yac_basic_grid_data ref_grid_data =
185 nbr_vertices, cyclic, lon_vertices, lat_vertices);
186 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
187 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
188
189 // some basic checks
190 utest_check_basic_grid(
191 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
192
193 // cleanup
194 yac_basic_grid_data_free(ref_grid_data);
196 }
197
198 { // test yac_basic_grid_unstruct_new
199
200 size_t nbr_vertices = 6;
201 size_t nbr_cells = 2;
202 int num_vertices_per_cell[] = {4, 4};
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};
205 int cell_to_vertex[] = {0,1,3,2, 2,3,5,4};
206
207 struct yac_basic_grid * grid =
209 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
210 x_vertices, y_vertices, cell_to_vertex);
211
212 struct yac_basic_grid_data ref_grid_data =
214 nbr_vertices, nbr_cells, num_vertices_per_cell,
215 x_vertices, y_vertices, cell_to_vertex);
216 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
217 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
218
219 // some basic checks
220 utest_check_basic_grid(
221 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
222
223 // cleanup
224 yac_basic_grid_data_free(ref_grid_data);
226 }
227
228 { // test yac_basic_grid_unstruct_deg_new
229
230 size_t nbr_vertices = 6;
231 size_t nbr_cells = 2;
232 int num_vertices_per_cell[] = {4, 4};
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};
235 int cell_to_vertex[] = {0,1,3,2, 2,3,5,4};
236
237 struct yac_basic_grid * grid =
239 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
240 x_vertices, y_vertices, cell_to_vertex);
241
242 struct yac_basic_grid_data ref_grid_data =
244 nbr_vertices, nbr_cells, num_vertices_per_cell,
245 x_vertices, y_vertices, cell_to_vertex);
246 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
247 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
248
249 // some basic checks
250 utest_check_basic_grid(
251 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
252
253 // cleanup
254 yac_basic_grid_data_free(ref_grid_data);
256 }
257
258 { // test yac_basic_grid_unstruct_ll_new
259
260 size_t nbr_vertices = 6;
261 size_t nbr_cells = 2;
262 int num_vertices_per_cell[] = {4, 4};
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};
265 int cell_to_vertex[] = {0,1,3,2, 2,3,5,4};
266
267 struct yac_basic_grid * grid =
269 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
270 x_vertices, y_vertices, cell_to_vertex);
271
272 struct yac_basic_grid_data ref_grid_data =
274 nbr_vertices, nbr_cells, num_vertices_per_cell,
275 x_vertices, y_vertices, cell_to_vertex);
276 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
277 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
278
279 // some basic checks
280 utest_check_basic_grid(
281 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
282
283 // cleanup
284 yac_basic_grid_data_free(ref_grid_data);
286 }
287
288 { // test yac_basic_grid_unstruct_ll_deg_new
289
290 size_t nbr_vertices = 6;
291 size_t nbr_cells = 2;
292 int num_vertices_per_cell[] = {4, 4};
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};
295 int cell_to_vertex[] = {0,1,3,2, 2,3,5,4};
296
297 struct yac_basic_grid * grid =
299 grid_name, nbr_vertices, nbr_cells, num_vertices_per_cell,
300 x_vertices, y_vertices, cell_to_vertex);
301
302 struct yac_basic_grid_data ref_grid_data =
304 nbr_vertices, nbr_cells, num_vertices_per_cell,
305 x_vertices, y_vertices, cell_to_vertex);
306 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
307 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
308
309 // some basic checks
310 utest_check_basic_grid(
311 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
312
313 // cleanup
314 yac_basic_grid_data_free(ref_grid_data);
316 }
317
318 { // test yac_basic_grid_unstruct_edge_new
319
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};
326 int cell_to_edge[] = {0,2,3,1, 3,5,6,4};
327 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
328
329 struct yac_basic_grid * grid =
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);
334
335 struct yac_basic_grid_data ref_grid_data =
337 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
338 x_vertices, y_vertices, cell_to_edge, edge_to_vertex);
339 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
340 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
341
342 // some basic checks
343 utest_check_basic_grid(
344 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
345
346 // cleanup
347 yac_basic_grid_data_free(ref_grid_data);
349 }
350
351 { // test yac_basic_grid_unstruct_deg_new
352
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};
359 int cell_to_edge[] = {0,2,3,1, 3,5,6,4};
360 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
361
362 struct yac_basic_grid * grid =
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);
367
368 struct yac_basic_grid_data ref_grid_data =
370 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
371 x_vertices, y_vertices, cell_to_edge, edge_to_vertex);
372 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
373 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
374
375 // some basic checks
376 utest_check_basic_grid(
377 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
378
379 // cleanup
380 yac_basic_grid_data_free(ref_grid_data);
382 }
383
384 { // test yac_basic_grid_unstruct_ll_new
385
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};
392 int cell_to_edge[] = {0,2,3,1, 3,5,6,4};
393 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
394
395 struct yac_basic_grid * grid =
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);
400
401 struct yac_basic_grid_data ref_grid_data =
403 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
404 x_vertices, y_vertices, cell_to_edge, edge_to_vertex);
405 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
406 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
407
408 // some basic checks
409 utest_check_basic_grid(
410 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
411
412 // cleanup
413 yac_basic_grid_data_free(ref_grid_data);
415 }
416
417 { // test yac_basic_grid_unstruct_ll_deg_new
418
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};
425 int cell_to_edge[] = {0,2,3,1, 3,5,6,4};
426 int edge_to_vertex[] = {0,1, 0,2, 1,3, 2,3, 2,4, 3,5, 4,5};
427
428 struct yac_basic_grid * grid =
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);
433
434 struct yac_basic_grid_data ref_grid_data =
436 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
437 x_vertices, y_vertices, cell_to_edge, edge_to_vertex);
438 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
439 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
440
441 // some basic checks
442 utest_check_basic_grid(
443 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
444
445 // cleanup
446 yac_basic_grid_data_free(ref_grid_data);
448 }
449
450 { // test yac_basic_grid_cloud_new
451
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};
455
456 struct yac_basic_grid * grid =
458 grid_name, nbr_points, x_points, y_points);
459
460 struct yac_basic_grid_data ref_grid_data =
461 yac_generate_basic_grid_data_cloud(nbr_points, x_points, y_points);
462 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
463 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {0, 6, 0};
464
465 // some basic checks
466 utest_check_basic_grid(
467 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
468
469 // cleanup
470 yac_basic_grid_data_free(ref_grid_data);
472 }
473
474 { // test yac_basic_grid_cloud_deg_new
475
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};
479
480 struct yac_basic_grid * grid =
482 grid_name, nbr_points, x_points, y_points);
483
484 struct yac_basic_grid_data ref_grid_data =
485 yac_generate_basic_grid_data_cloud_deg(nbr_points, x_points, y_points);
486 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
487 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {0, 6, 0};
488
489 // some basic checks
490 utest_check_basic_grid(
491 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
492
493 // cleanup
494 yac_basic_grid_data_free(ref_grid_data);
496 }
497
498 { // test yac_basic_grid_reg_2d_new
499
500 size_t nbr_vertices[2] = {2,3};
501 int cyclic[2] = {0,0};
502 double lon_vertices[] = {-0.5*YAC_RAD,0.5*YAC_RAD};
503 double lat_vertices[] = {-0.5*YAC_RAD,0.0*YAC_RAD,0.5*YAC_RAD};
504 double north_pole_lon = 180.0*YAC_RAD;
505 double north_pole_lat = 45.0*YAC_RAD;
506
507 struct yac_basic_grid * grid =
509 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices,
510 north_pole_lon, north_pole_lat);
511
512 struct yac_basic_grid_data ref_grid_data =
514 nbr_vertices, cyclic, lon_vertices, lat_vertices,
515 north_pole_lon, north_pole_lat);
516 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
517 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
518
519 // some basic checks
520 utest_check_basic_grid(
521 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
522
523 // cleanup
524 yac_basic_grid_data_free(ref_grid_data);
526 }
527
528 { // test yac_basic_grid_reg_2d_deg_new
529
530 size_t nbr_vertices[2] = {2,3};
531 int cyclic[2] = {0,0};
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;
536
537 struct yac_basic_grid * grid =
539 grid_name, nbr_vertices, cyclic, lon_vertices, lat_vertices,
540 north_pole_lon, north_pole_lat);
541
542 struct yac_basic_grid_data ref_grid_data =
544 nbr_vertices, cyclic, lon_vertices, lat_vertices,
545 north_pole_lon, north_pole_lat);
546 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
547 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {2, 6, 7};
548
549 // some basic checks
550 utest_check_basic_grid(
551 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
552
553 // cleanup
554 yac_basic_grid_data_free(ref_grid_data);
556 }
557
558 { // test yac_interp_fields
559
560 size_t nbr_vertices[2] = {2,3};
561 int cyclic[2] = {0,0};
562 double lon_vertices[] = {0,1};
563 double lat_vertices[] = {0,1,2};
564
567 nbr_vertices, cyclic, lon_vertices, lat_vertices);
568
569 struct yac_basic_grid * grid = yac_basic_grid_new(grid_name, grid_data);
570
571 {
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]);
576 struct yac_interp_field cell_interp_field =
577 {
579 .coordinates_idx =
581 grid, YAC_LOC_CELL, ref_cell_center_coordinates, 2),
582 .masks_idx =
584 grid, YAC_LOC_CELL, ref_cell_mask, 2, NULL)
585 };
586
587 utest_check_interp_field(
588 grid, cell_interp_field,
589 (yac_const_coordinate_pointer)ref_cell_center_coordinates, ref_cell_mask);
590 }
591
592 {
593 struct yac_interp_field cell_interp_field =
594 {
596 .coordinates_idx = SIZE_MAX,
597 .masks_idx = SIZE_MAX
598 };
599
600 utest_check_interp_field(
601 grid, cell_interp_field, NULL, NULL);
602 }
603
604 // cleanup
606 }
607
608 { // test named masks
609
610 size_t nbr_vertices[2] = {2,3};
611 int cyclic[2] = {0,0};
612 double lon_vertices[] = {0,1};
613 double lat_vertices[] = {0,1,2};
614
617 nbr_vertices, cyclic, lon_vertices, lat_vertices);
618
619 struct yac_basic_grid * grid = yac_basic_grid_new(grid_name, grid_data);
620
621 int const cell_mask[] = {1,0,1,0,1,0};
622
623 char const mask_name[] = "test_mask";
624
625 size_t ref_mask_idx =
627 grid, YAC_LOC_CORNER, cell_mask, 6, mask_name);
628
629 if (ref_mask_idx !=
631 grid, YAC_LOC_CORNER, mask_name))
632 PUT_ERR("ERROR in yac_basic_grid_get_named_mask_idx");
633
634 if (SIZE_MAX !=
636 grid, YAC_LOC_CORNER, NULL))
637 PUT_ERR("ERROR in yac_basic_grid_get_named_mask_idx");
638
639 // cleanup
641 }
642
643 { // test field data
644
645 size_t nbr_vertices[2] = {2,3};
646 int cyclic[2] = {0,0};
647 double lon_vertices[] = {0,1};
648 double lat_vertices[] = {0,1,2};
649
652 nbr_vertices, cyclic, lon_vertices, lat_vertices);
653
654 struct yac_basic_grid * grid = yac_basic_grid_new(grid_name, grid_data);
655
656 {
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}};
661
662 LLtoXYZ_deg(0.5, 0.5, cell_coordinates[0][0]);
663 LLtoXYZ_deg(0.5, 1.5, cell_coordinates[0][1]);
664 LLtoXYZ_deg(0.6, 0.6, cell_coordinates[1][0]);
665 LLtoXYZ_deg(0.6, 1.6, cell_coordinates[1][1]);
666
667 LLtoXYZ_deg(0, 0, vertex_coordinates[0][0]);
668 LLtoXYZ_deg(1, 0, vertex_coordinates[0][1]);
669 LLtoXYZ_deg(0, 1, vertex_coordinates[0][2]);
670 LLtoXYZ_deg(1, 1, vertex_coordinates[0][3]);
671 LLtoXYZ_deg(0, 2, vertex_coordinates[0][4]);
672 LLtoXYZ_deg(1, 2, vertex_coordinates[0][5]);
673
674 enum {
675 NUM_CELL_COORDS =
676 sizeof(cell_coordinates)/sizeof(cell_coordinates[0]),
677 NUM_CELL_MASKS = sizeof(cell_mask)/sizeof(cell_mask[0]),
678 NUM_CORNER_COORDS =
679 sizeof(vertex_coordinates)/sizeof(vertex_coordinates[0]),
680 NUM_CORNER_MASKS = 0,
681 NUM_EDGE_COORDS = 0,
682 NUM_EDGE_MASKS = sizeof(edge_mask)/sizeof(edge_mask[0]),
683 };
684
685 size_t ref_coordinates_idxs[3][2] = {
687 grid, YAC_LOC_CELL, cell_coordinates[0], 2),
689 grid, YAC_LOC_CELL, cell_coordinates[1], 2)},
691 grid, YAC_LOC_CORNER, vertex_coordinates[0], 6)},
692 {SIZE_MAX}
693 };
694 size_t ref_masks_idxs[3][3] = {
696 grid, YAC_LOC_CELL, cell_mask[0], 2, NULL),
698 grid, YAC_LOC_CELL, cell_mask[1], 2, NULL),
700 grid, YAC_LOC_CELL, cell_mask[2], 2, NULL)},
701 {SIZE_MAX},
703 grid, YAC_LOC_EDGE, edge_mask[0], 7, NULL),
705 grid, YAC_LOC_EDGE, edge_mask[1], 7, NULL)}
706 };
707
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};
712
713 for (size_t loc_idx = 0; loc_idx < NUM_LOCACTIONS; ++loc_idx) {
714
715 struct yac_field_data * field_data =
717
718 if (ref_num_coords[loc_idx] !=
720 PUT_ERR("ERROR in yac_field_data_get_coordinates_count");
721
722 size_t data_size = yac_basic_grid_get_data_size(grid, locations[loc_idx]);
723
724 for (size_t coord_idx = 0; coord_idx < ref_num_coords[loc_idx];
725 ++coord_idx) {
726
727 struct yac_interp_field interp_field =
728 {.location = locations[loc_idx],
729 .coordinates_idx = ref_coordinates_idxs[loc_idx][coord_idx],
730 .masks_idx = SIZE_MAX};
731
733 yac_basic_grid_get_field_coordinates(grid, interp_field);
735 yac_field_data_get_coordinates_data(field_data, coord_idx);
736
737 for (size_t i = 0; i < data_size; ++i)
738 if (get_vector_angle(ref_coords[i], coords[i]) > yac_angle_tol)
739 PUT_ERR("ERROR in yac_basic_grid_get_field_data");
740 }
741
742 for (size_t masks_idx = 0; masks_idx < ref_num_masks[loc_idx];
743 ++masks_idx) {
744
745 struct yac_interp_field interp_field =
746 {.location = locations[loc_idx],
747 .coordinates_idx = SIZE_MAX,
748 .masks_idx = ref_masks_idxs[loc_idx][masks_idx]};
749
750 int const * ref_masks =
751 yac_basic_grid_get_field_mask(grid, interp_field);
752 int const * masks =
754
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");
758 }
759 }
760 }
761
762 // cleanup
764 }
765
766 { // test Fortran to C interfaces
767
768 size_t nbr_vertices[2] = {2,3};
769 int cyclic[2] = {0,0};
770 double lon_vertices[] = {0,1};
771 double lat_vertices[] = {0,1,2};
772
775 nbr_vertices, cyclic, lon_vertices, lat_vertices);
776
777 struct yac_basic_grid * grid = yac_basic_grid_new(grid_name, grid_data);
778
779 {
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]);
786
787 struct yac_interp_field interp_fields[2] = {
788 {
790 .coordinates_idx =
792 grid, YAC_LOC_CELL, TO_POINTER(ref_cell_center_coordinates[0])),
793 .masks_idx =
795 grid, YAC_LOC_CELL, TO_POINTER(ref_cell_mask[0]), NULL)
796 },
797 {
798 .location = YAC_LOC_CELL,
799 .coordinates_idx =
801 grid, YAC_LOC_CELL, &(ref_cell_center_coordinates[1][0][0]), 2),
802 .masks_idx =
804 grid, YAC_LOC_CELL, ref_cell_mask[1], 2, NULL)
805 }
806 };
807 enum {NUM_FIELDS = sizeof(interp_fields) / sizeof(interp_fields[0])};
808
809 for (size_t loc_idx = 0; loc_idx < NUM_LOCACTIONS; ++loc_idx) {
810 if (yac_basic_grid_get_data_size(grid, locations[loc_idx]) !=
811 yac_basic_grid_get_data_size_f2c(grid, (int)(locations[loc_idx])))
812 PUT_ERR("ERROR in yac_basic_grid_get_data_size_f2c");
813 }
814
815 for (size_t i = 0; i < NUM_FIELDS; ++i)
816 utest_check_interp_field(
817 grid, interp_fields[i],
818 (yac_const_coordinate_pointer)(ref_cell_center_coordinates[i]),
819 ref_cell_mask[i]);
820 }
821
822 // cleanup
824 }
825
826 { // check for bug that occured in edge-based unstruct grid definition
827
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};
836 int cell_to_edge[][NBR_EDGES] =
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};
840
841 for (size_t i = 0; i < sizeof(cell_to_edge) / sizeof(cell_to_edge[0]);
842 ++i) {
843
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]) {
851
852 struct yac_basic_grid_data ref_grid_data =
854 nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell,
855 x_vertices, y_vertices, cell_to_edge[i], ref_edge_to_vertex);
856
857 int temp_edge_to_vertex[NBR_EDGES][2];
858
859 for (size_t j = 0; j < NBR_EDGES; ++j) {
860 temp_edge_to_vertex[j][edge_vertex_ordering[j]] =
861 edge_to_vertex[j][0];
862 temp_edge_to_vertex[j][edge_vertex_ordering[j]^1] =
863 edge_to_vertex[j][1];
864 }
865
866 struct yac_basic_grid * grid =
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]);
871
872 int const * ref_core_masks[NUM_LOCACTIONS] = {NULL, NULL, NULL};
873 size_t const ref_grid_data_sizes[NUM_LOCACTIONS] = {1, 3, 3};
874
875 // some basic checks
876 utest_check_basic_grid(
877 grid, grid_name, ref_grid_data, ref_core_masks, ref_grid_data_sizes);
878
879 // cleanup
881 yac_basic_grid_data_free(ref_grid_data);
882 }
883 }
884 }
885 }
886 }
887
888 return TEST_EXIT_CODE;
889}
890
891static void utest_check_basic_grid(
892 struct yac_basic_grid * grid, char const * ref_grid_name,
893 struct yac_basic_grid_data ref_grid_data,
894 int const * const * ref_core_masks,
895 size_t const * ref_grid_data_sizes) {
896
897 // yac_basic_grid_get_name
898 if (strcmp(ref_grid_name, yac_basic_grid_get_name(grid)))
899 PUT_ERR("ERROR in yac_basic_grid_get_name");
900
901 // yac_basic_grid_get_data
903 ref_grid_data, *yac_basic_grid_get_data(grid), ref_grid_name);
904
905 for (size_t loc_idx = 0; loc_idx < NUM_LOCACTIONS; ++loc_idx) {
906
907 // yac_basic_grid_get_core_mask
908 if (ref_core_masks[loc_idx] !=
910 PUT_ERR("ERROR in yac_basic_grid_get_core_mask");
911
912 // yac_basic_grid_get_data_size
913 if (ref_grid_data_sizes[loc_idx] !=
915 PUT_ERR("ERROR in yac_basic_grid_get_data_size");
916 }
917
918 size_t num_cells = ref_grid_data.num_cells;
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;
921 yac_basic_grid_compute_cell_areas(grid, cell_areas);
922 for (size_t i = 0; i < num_cells; ++i)
923 if (cell_areas[i] == DBL_MAX)
924 PUT_ERR("ERROR in yac_basic_grid_compute_cell_areas");
925 free(cell_areas);
926}
927
928static void utest_check_interp_field(
929 struct yac_basic_grid * grid, struct yac_interp_field field,
930 yac_const_coordinate_pointer ref_coords, int const * ref_mask) {
931
932 size_t data_size = yac_basic_grid_get_data_size(grid, field.location);
933
936
937 if ((ref_coords == NULL) != (coords == NULL))
938 PUT_ERR("ERROR in yac_basic_grid_get_field_coordinates");
939
940 if (ref_coords != NULL)
941 for (size_t i = 0; i < data_size; ++i)
942 if (get_vector_angle(ref_coords[i], coords[i]) > yac_angle_tol)
943 PUT_ERR("ERROR in yac_basic_grid_get_field_coordinates");
944
945 int const * mask =
947
948 if ((ref_mask == NULL) != (mask == NULL))
949 PUT_ERR("ERROR in yac_basic_grid_get_field_mask");
950
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");
955}
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)
Definition basic_grid.c:420
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)
Definition basic_grid.c:446
struct yac_field_data * yac_basic_grid_get_field_data(struct yac_basic_grid *grid, enum yac_location location)
Definition basic_grid.c:309
size_t yac_basic_grid_get_named_mask_idx(struct yac_basic_grid *grid, enum yac_location location, char const *mask_name)
Definition basic_grid.c:177
int const * yac_basic_grid_get_field_mask(struct yac_basic_grid *grid, struct yac_interp_field field)
Definition basic_grid.c:118
struct yac_basic_grid * yac_basic_grid_new(char const *name, struct yac_basic_grid_data grid_data)
Definition basic_grid.c:50
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)
Definition basic_grid.c:335
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)
Definition basic_grid.c:503
struct yac_basic_grid * yac_basic_grid_cloud_new(char const *name, size_t nbr_points, double *x_points, double *y_points)
Definition basic_grid.c:472
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)
Definition basic_grid.c:381
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)
Definition basic_grid.c:368
yac_const_coordinate_pointer yac_basic_grid_get_field_coordinates(struct yac_basic_grid *grid, struct yac_interp_field field)
Definition basic_grid.c:81
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
Definition basic_grid.c:137
struct yac_basic_grid * yac_basic_grid_cloud_deg_new(char const *name, size_t nbr_points, double *x_points, double *y_points)
Definition basic_grid.c:481
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)
Definition basic_grid.c:433
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)
Definition basic_grid.c:284
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)
Definition basic_grid.c:324
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)
Definition basic_grid.c:394
char const * yac_basic_grid_get_name(struct yac_basic_grid *grid)
Definition basic_grid.c:128
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)
Definition basic_grid.c:490
size_t yac_basic_grid_add_coordinates(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates, size_t count)
Definition basic_grid.c:232
size_t yac_basic_grid_get_data_size(struct yac_basic_grid *grid, enum yac_location location)
Definition basic_grid.c:147
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)
Definition basic_grid.c:407
int const * yac_basic_grid_get_core_mask(struct yac_basic_grid *grid, enum yac_location location)
Definition basic_grid.c:101
struct yac_basic_grid * yac_basic_grid_empty_new(char const *name)
Definition basic_grid.c:63
void yac_basic_grid_delete(struct yac_basic_grid *grid)
Definition basic_grid.c:70
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)
Definition basic_grid.c:346
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)
Definition basic_grid.c:357
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)
Definition basic_grid.c:459
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)
Definition grid_reg2d.c:65
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)
Definition grid_cloud.c:50
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)
Definition grid_cloud.c:58
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)
Definition grid_reg2d.c:74
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)
#define YAC_RAD
size_t yac_field_data_get_coordinates_count(struct yac_field_data *field_data)
Definition field_data.c:92
yac_const_coordinate_pointer yac_field_data_get_coordinates_data(struct yac_field_data *field_data, size_t coordinates_idx)
Definition field_data.c:97
int const * yac_field_data_get_mask_data(struct yac_field_data *field_data, size_t mask_idx)
Definition field_data.c:62
static void LLtoXYZ_deg(double lon, double lat, double p_out[])
Definition geometry.h:269
#define yac_angle_tol
Definition geometry.h:26
static double get_vector_angle(double const a[3], double const b[3])
Definition geometry.h:340
yac_location
Definition location.h:12
@ YAC_LOC_CORNER
Definition location.h:15
@ YAC_LOC_EDGE
Definition location.h:16
@ YAC_LOC_CELL
Definition location.h:14
yac_size_t_2_pointer edge_to_vertex
enum yac_location location
Definition basic_grid.h:16
size_t yac_basic_grid_get_data_size_f2c(struct yac_basic_grid *grid, int location)
Definition basic_grid.c:170
size_t yac_basic_grid_add_mask_nocpy_f2c(struct yac_basic_grid *grid, int location, int const *mask, char const *mask_name)
Definition basic_grid.c:275
size_t yac_basic_grid_add_coordinates_f2c(struct yac_basic_grid *grid, int location, double *coordinates, size_t count)
Definition basic_grid.c:248
size_t yac_basic_grid_add_coordinates_nocpy_f2c(struct yac_basic_grid *grid, int location, double *coordinates)
Definition basic_grid.c:224
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)
Definition basic_grid.c:300
@ NUM_LOCACTIONS
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)
#define TO_POINTER(a)
Definition test_common.h:14
int * cell_to_vertex
int * cell_mask
size_t num_cells[2]
unsigned cyclic[2]
static int mask[16]
#define TEST_EXIT_CODE
Definition tests.h:14
#define PUT_ERR(string)
Definition tests.h:10
int const * location
static struct user_input_data_masks ** masks
Definition yac.c:161
double const (* yac_const_coordinate_pointer)[3]
Definition yac_types.h:20