YAC 3.13.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_grid2vtk.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 <unistd.h>
6
7#include "tests.h"
8#include "test_common.h"
9#include "grid2vtk.h"
10#include "io_utils.h"
11
19int main(void) {
20
21 {
22 double lon_vertices[] =
23 {-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10};
24 double lat_vertices[] =
25 {-5,-4,-3,-2,-1,0,1,2,3,4,5};
26 size_t nbr_vertices[2] = {sizeof(lon_vertices) / sizeof(lon_vertices[0]),
27 sizeof(lat_vertices) / sizeof(lat_vertices[0])};
28 int cyclic[2] = {0, 0};
29 struct yac_basic_grid_data reg2d_grid =
31 nbr_vertices, cyclic, lon_vertices, lat_vertices);
32
33 yac_write_basic_grid_data_to_file(&reg2d_grid, "test_grid2vtk_1");
34
35 yac_basic_grid_data_free(reg2d_grid);
36
37 if (!yac_file_exists("test_grid2vtk_1.vtk")) {
38 PUT_ERR("ERROR in yac_write_basic_grid_data_to_file");
39 } else {
40 unlink("test_grid2vtk_1.vtk");
41 }
42 }
43
44 {
45 double lon_vertices[] =
46 {0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320,340,360};
47 double lat_vertices[] =
48 {-90,-70,-50,-30,-10,10,30,50,70,90};
49 size_t nbr_vertices[2] = {sizeof(lon_vertices) / sizeof(lon_vertices[0]),
50 sizeof(lat_vertices) / sizeof(lat_vertices[0])};
51 int cyclic[2] = {0, 0};
52 struct yac_basic_grid_data reg2d_grid =
54 nbr_vertices, cyclic, lon_vertices, lat_vertices);
55
56 yac_write_basic_grid_data_to_file(&reg2d_grid, "test_grid2vtk_2");
57
58 if (!yac_file_exists("test_grid2vtk_2.vtk")) {
59 PUT_ERR("ERROR in yac_write_basic_grid_data_to_file");
60 } else {
61 unlink("test_grid2vtk_2.vtk");
62 }
63
64 // add dummy cell core masks
65 reg2d_grid.core_cell_mask =
66 xmalloc(reg2d_grid.num_cells * sizeof(*reg2d_grid.core_cell_mask));
67 for (size_t i = 0; i < reg2d_grid.num_cells; ++i)
68 reg2d_grid.core_cell_mask[i] = (i & 1) == 1;
69
70 yac_write_basic_grid_data_to_file(&reg2d_grid, "test_grid2vtk_3");
71
72 if (!yac_file_exists("test_grid2vtk_3.vtk")) {
73 PUT_ERR("ERROR in yac_write_basic_grid_data_to_file");
74 } else {
75 unlink("test_grid2vtk_3.vtk");
76 }
77
78 yac_basic_grid_data_free(reg2d_grid);
79 }
80
81 {
82 double icon_cell_coords[2][3] = {{0,120,240}, {85,85,85}};
83 enum yac_edge_type icon_cell_edge_types[3] =
85 double reg2d_cell_coords[2][4] = {{-30,30,30,-30},{87,87,84,84}};
86 enum yac_edge_type reg2d_cell_edge_types[4] =
88 double fesom_cell_coords[2][6] =
89 {{65,125,185,245,305,365}, {86,86,86,86,86,86}};
90 enum yac_edge_type fesom_cell_edge_types[6] =
93 struct yac_grid_cell cells[] = {
95 icon_cell_coords[0], icon_cell_coords[1], icon_cell_edge_types, 3),
97 reg2d_cell_coords[0], reg2d_cell_coords[1], reg2d_cell_edge_types, 4),
99 fesom_cell_coords[0], fesom_cell_coords[1], fesom_cell_edge_types, 6)};
100
102 cells, sizeof(cells) / sizeof(cells[0]), "test_grid2vtk_4", 5);
103
104 if (!yac_file_exists("test_grid2vtk_4.vtk")) {
105 PUT_ERR("ERROR in yac_write_grid_cells_to_file");
106 } else {
107 unlink("test_grid2vtk_4.vtk");
108 }
109
110 for (size_t i = 0; i < sizeof(cells)/sizeof(cells[0]); ++i)
111 yac_free_grid_cell(&cells[i]);
112 }
113
114 { // cell containing zero length edge
115 double icon_cell_coords[2][4] = {{0,120,240,240}, {85,85,85,85}};
116 enum yac_edge_type icon_cell_edge_types[4] =
119 struct yac_grid_cell cells[] = {
121 icon_cell_coords[0], icon_cell_coords[1], icon_cell_edge_types, 4)};
122
124 cells, sizeof(cells) / sizeof(cells[0]), "test_grid2vtk_5", 5);
125
126 if (!yac_file_exists("test_grid2vtk_5.vtk")) {
127 PUT_ERR("ERROR in yac_write_grid_cells_to_file");
128 } else {
129 unlink("test_grid2vtk_5.vtk");
130 }
131
132 for (size_t i = 0; i < sizeof(cells)/sizeof(cells[0]); ++i)
133 yac_free_grid_cell(&cells[i]);
134 }
135
136 return TEST_EXIT_CODE;
137}
138
void yac_basic_grid_data_free(struct yac_basic_grid_data grid)
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
void yac_write_basic_grid_data_to_file(struct yac_basic_grid_data *grid, char const *name)
Definition grid2vtk.c:54
void yac_write_grid_cells_to_file(struct yac_grid_cell *cells, size_t num_cells, char *name, size_t num_points_per_edge)
Definition grid2vtk.c:210
void yac_free_grid_cell(struct yac_grid_cell *cell)
Definition grid_cell.c:44
yac_edge_type
Definition grid_cell.h:12
@ YAC_GREAT_CIRCLE_EDGE
great circle
Definition grid_cell.h:13
@ YAC_LAT_CIRCLE_EDGE
latitude circle
Definition grid_cell.h:14
@ YAC_LON_CIRCLE_EDGE
longitude circle
Definition grid_cell.h:15
int yac_file_exists(const char *filename)
Definition utils_core.c:12
#define xmalloc(size)
Definition ppm_xfuncs.h:66
struct yac_grid_cell generate_cell_deg(double *lon, double *lat, enum yac_edge_type *edge_type, size_t num_corners)
Definition test_common.c:37
unsigned cyclic[2]
#define TEST_EXIT_CODE
Definition tests.h:14
#define PUT_ERR(string)
Definition tests.h:10