YAC 3.13.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_read_fesom.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 <netcdf.h>
6
7#include <stdlib.h>
8#include <stdio.h>
9#include <unistd.h>
10#include <string.h>
11
12#include "tests.h"
13#include "read_fesom_grid.h"
14#include "grid2vtk.h"
15#include "io_utils.h"
16
22static void write_dummy_grid_file(char * name);
23static void check_grid(struct yac_basic_grid_data grid);
24
25int main(void) {
26
27 write_dummy_grid_file("fesom_grid.nc");
28
29 { // yac_read_fesom_basic_grid_data
30 struct yac_basic_grid_data fesom_grid =
31 yac_read_fesom_basic_grid_data("fesom_grid.nc");
32 check_grid(fesom_grid);
33
34// #define WRITE_VTK_GRID_FILE
35#ifdef WRITE_VTK_GRID_FILE
36 yac_write_basic_grid_data_to_file(&fesom_grid, "fesom");
37#endif // WRITE_VTK_GRID_FILE
38
39 yac_basic_grid_data_free(fesom_grid);
40 }
41
42 { // yac_read_fesom_basic_grid
43 struct yac_basic_grid * fesom_grid =
44 yac_read_fesom_basic_grid("fesom_grid.nc", "fesom_grid");
46 yac_basic_grid_delete(fesom_grid);
47 }
48
49 unlink("fesom_grid.nc");
50
51 return TEST_EXIT_CODE;
52}
53
54static void write_dummy_grid_file(char * file_name) {
55
56 int ncid;
57
58 // create file
59 yac_nc_create(file_name, NC_CLOBBER, &ncid);
60
61 int dim_ncells_id;
62 int dim_nv_id;
63 int dim_ids[2];
64
65 // define dimensions
66 YAC_HANDLE_ERROR(nc_def_dim(ncid, "ncells", 8, &dim_ncells_id));
67 YAC_HANDLE_ERROR(nc_def_dim(ncid, "nv", 9, &dim_nv_id));
68
69 dim_ids[0] = dim_ncells_id;
70 dim_ids[1] = dim_nv_id;
71
72 int var_lon_id, var_lon_v_id, var_lat_id, var_lat_v_id;
73
74 // define grid arrays
76 nc_def_var(ncid, "lon", NC_DOUBLE, 1, &dim_ncells_id, &var_lon_id));
78 nc_def_var(ncid, "lon_vertices", NC_DOUBLE, 2, dim_ids, &var_lon_v_id));
80 nc_def_var(ncid, "lat", NC_DOUBLE, 1, &dim_ncells_id, &var_lat_id));
82 nc_def_var(ncid, "lat_vertices", NC_DOUBLE, 2, dim_ids, &var_lat_v_id));
83
84 // end definition
85 YAC_HANDLE_ERROR(nc_enddef(ncid));
86
87 // write grid data
88
89 double lon[8] = {1,2,3,4,3,3,5.5,5.5};
90 double lon_vertices[8*9] = {0,1,2,2,1,0,0,0,0,
91 1,3,2,2,2,2,2,2,2,
92 3,4,2,2,2,2,2,2,2,
93 3,5,4,4,4,4,4,4,4,
94 2,4,4,2,2,2,2,2,2,
95 1,2,4,5,4,2,2,2,2,
96 4,6,7,6,5,4,4,4,4,
97 5,6,4,4,4,4,4,4,4};
98 double lat[8] = {1.5,0.5,0.5,0.5,1.5,3,1.5,0.5};
99 double lat_vertices[8*9] = {1,0,1,2,3,2,2,2,2,
100 0,0,1,1,1,1,1,1,1,
101 0,1,1,1,1,1,1,1,1,
102 0,0,1,1,1,1,1,1,1,
103 1,1,2,2,2,2,2,2,2,
104 3,2,2,3,4,4,4,4,4,
105 1,1,2,3,3,2,2,2,2,
106 0,1,1,1,1,1,1,1,1};
107
108 YAC_HANDLE_ERROR(nc_put_var_double(ncid, var_lon_id, lon));
109 YAC_HANDLE_ERROR(nc_put_var_double(ncid, var_lon_v_id, lon_vertices));
110 YAC_HANDLE_ERROR(nc_put_var_double(ncid, var_lat_id, lat));
111 YAC_HANDLE_ERROR(nc_put_var_double(ncid, var_lat_v_id, lat_vertices));
112
113 YAC_HANDLE_ERROR(nc_close(ncid));
114}
115
116static void check_grid(struct yac_basic_grid_data grid) {
117
118 size_t ref_num_cells = 8;
119
120 if (grid.num_cells != ref_num_cells)
121 PUT_ERR("wrong number of grid cells");
122
123 int ref_num_corners_per_cell[8] = {6,3,3,3,4,6,6,3};
124
125 for (size_t i = 0; i < ref_num_cells; ++i)
126 if (grid.num_vertices_per_cell[i] != ref_num_corners_per_cell[i])
127 PUT_ERR("wrong number of corners per cell");
128}
129
char const * file_name
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
Definition basic_grid.c:140
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_data_to_file(struct yac_basic_grid_data *grid, char const *name)
Definition grid2vtk.c:54
void yac_nc_create(const char *path, int cmode, int *ncidp)
Definition io_utils.c:367
struct yac_basic_grid * yac_read_fesom_basic_grid(char const *filename, char const *gridname)
struct yac_basic_grid_data yac_read_fesom_basic_grid_data(char const *filename)
static void write_dummy_grid_file(char *name)
static void check_grid(struct yac_basic_grid_data grid)
#define TEST_EXIT_CODE
Definition tests.h:14
#define PUT_ERR(string)
Definition tests.h:10
#define YAC_HANDLE_ERROR(exp)
Definition toy_output.c:13
char const * name
Definition toy_scrip.c:114