YAC 3.12.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_vtk_output.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#include <limits.h>
7
8#include "vtk_output.h"
10#include "test_function.h"
11#include "geometry.h"
12
18int main (void) {
19
20 {
21 // initialise and open vtk file
22 char const filename[] = "test_vtk_output_1.vtk";
23 YAC_VTK_FILE * vtk_file = yac_vtk_open(filename, "test");
24
25 enum {
26 NUM_POINTS = 13,
27 LON = 0,
28 LAT = 1,
29 };
30 double point_data[2][NUM_POINTS] = {{0,
31 45,165,285,
32 0,90,180,270,
33 180,252,324,396,468},
34 {90,
35 85,85,85,
36 80,80,80,80,
37 75,75,75,75,75}};
38 for (size_t i = 0; i < NUM_POINTS; ++i) {
39 point_data[LON][i] *= YAC_RAD;
40 point_data[LAT][i] *= YAC_RAD;
41 }
42 unsigned cell_corners[NUM_POINTS] = {0,
43 1,2,3,
44 4,5,6,7,
45 8,9,10,11,12};
46 unsigned num_points_per_cell[] = {1,3,4,5};
47 unsigned num_cells = 4;
48
49 // writes point data to file
51 vtk_file, point_data[LON], point_data[LAT], NUM_POINTS);
53 vtk_file, cell_corners, num_points_per_cell, num_cells);
54
55 unsigned cell_scalars_uint[] = {0,1,2};
56 int cell_scalars_int[] = {0,1,2};
57 float cell_scalars_float[] = {0,1,2};
58 double cell_scalars_double[] = {0,1,2};
60 vtk_file, cell_scalars_uint, num_cells, "cell_scalars_uint");
62 vtk_file, cell_scalars_int, num_cells, "cell_scalars_int");
64 vtk_file, cell_scalars_float, num_cells, "cell_scalars_float");
66 vtk_file, cell_scalars_double, num_cells, "cell_scalars_double");
67
68 unsigned point_scalars_uint[NUM_POINTS] = {UINT_MAX, 0,1,2,3,4,5,6,7,8,9,10,11};
69 int point_scalars_int[NUM_POINTS] = {-1, 0,1,2,3,4,5,6,7,8,9,10,11};
70 float point_scalars_float[NUM_POINTS] = {-1, 0,1,2,3,4,5,6,7,8,9,10,11};
71 double point_scalars_double[NUM_POINTS];
72 for (size_t i = 0; i < NUM_POINTS; ++i)
73 point_scalars_double[i] =
74 yac_test_func_deg(point_data[LON][i], point_data[LAT][i]);
76 vtk_file, point_scalars_uint, NUM_POINTS, "point_scalars_uint");
78 vtk_file, point_scalars_int, NUM_POINTS, "point_scalars_int");
80 vtk_file, point_scalars_float, NUM_POINTS, "point_scalars_float");
82 vtk_file, point_scalars_double, NUM_POINTS, "point_scalars_double");
83
84 // closes vtk file
85 yac_vtk_close(vtk_file);
86
87 unlink(filename);
88 }
89
90 {
91 unsigned n = 30;
92 unsigned num_cells;
93 unsigned num_vertices;
94 double * x_vertices;
95 double * y_vertices;
96 double * z_vertices;
97 unsigned * vertices_of_cell;
98 unsigned * face_id;
99
101 n, &num_cells, &num_vertices, &x_vertices, &y_vertices, &z_vertices,
102 &vertices_of_cell, &face_id);
103
104 struct {
105 char * func_name;
106 double (*func)(double, double);
107 } test_funcs[] = {
108 {.func_name = "yac_test_func", .func = yac_test_func},
109 {.func_name = "yac_test_ana_fcos", .func = yac_test_ana_fcos},
110 {.func_name = "yac_test_ana_fcossin", .func = yac_test_ana_fcossin},
111 {.func_name = "yac_test_one", .func = yac_test_one},
112 {.func_name = "yac_test_gulfstream", .func = yac_test_gulfstream},
113 {.func_name = "yac_test_harmonic", .func = yac_test_harmonic},
114 {.func_name = "yac_test_vortex", .func = yac_test_vortex}
115 };
116
117 // initialise and open vtk file
118 char const filename[] = "test_vtk_output_2.vtk";
119 YAC_VTK_FILE * vtk_file = yac_vtk_open(filename, "test2");
120
121 double * point_data = xmalloc(3 * num_vertices * sizeof(*point_data));
122 for (unsigned i = 0; i < num_vertices; ++i) {
123 point_data[3 * i + 0] = x_vertices[i];
124 point_data[3 * i + 1] = y_vertices[i];
125 point_data[3 * i + 2] = z_vertices[i];
126 }
127 unsigned * num_points_per_cell =
128 xmalloc(num_cells * sizeof(*num_points_per_cell));
129 for (unsigned i = 0; i < num_cells; ++i) num_points_per_cell[i] = 4;
130
131 // writes point data to file
132 yac_vtk_write_point_data(vtk_file, point_data, num_vertices);
134 vtk_file, vertices_of_cell, num_points_per_cell, num_cells);
135
136 double * field_data = xmalloc(num_vertices * sizeof(*field_data));
137 for (size_t i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); ++i) {
138
139 for (unsigned j = 0; j < num_vertices; ++j) {
140
141 double lon, lat;
142 XYZtoLL(point_data + 3 * j, &lon, &lat);
143
144 field_data[j] = test_funcs[i].func(lon, lat);
145 }
146
148 vtk_file, field_data, num_vertices, test_funcs[i].func_name);
149 }
150
151 free(field_data);
152 free(num_points_per_cell);
153 free(point_data);
154
155 // closes vtk file
156 yac_vtk_close(vtk_file);
157
158 unlink(filename);
159
160 free(x_vertices);
161 free(y_vertices);
162 free(z_vertices);
163 free(vertices_of_cell);
164 free(face_id);
165 }
166
167 return EXIT_SUCCESS;
168}
#define YAC_RAD
void yac_generate_cubed_sphere_grid_information(unsigned n, unsigned *num_cells, unsigned *num_vertices, double **x_vertices, double **y_vertices, double **z_vertices, unsigned **cell_to_vertex, unsigned **face_id)
static void XYZtoLL(double const p_in[], double *lon, double *lat)
#define xmalloc(size)
Definition ppm_xfuncs.h:66
double yac_test_one(double lon, double lat)
double yac_test_ana_fcos(double lon, double lat)
double yac_test_func_deg(double lon, double lat)
double yac_test_harmonic(double lon, double lat)
double yac_test_vortex(double lon, double lat)
double yac_test_func(double lon, double lat)
double yac_test_ana_fcossin(double lon, double lat)
double yac_test_gulfstream(double lon, double lat)
size_t num_cells[2]
#define LAT
#define LON
void yac_vtk_write_cell_scalars_uint(YAC_VTK_FILE *vtk_file, unsigned *scalars, unsigned num_cells, char *name)
Definition vtk_output.c:243
void yac_vtk_write_cell_scalars_float(YAC_VTK_FILE *vtk_file, float *scalars, unsigned num_cells, char *name)
Definition vtk_output.c:257
void yac_vtk_write_cell_scalars_double(YAC_VTK_FILE *vtk_file, double *scalars, unsigned num_cells, char *name)
Definition vtk_output.c:264
void yac_vtk_write_cell_scalars_int(YAC_VTK_FILE *vtk_file, int *scalars, unsigned num_cells, char *name)
Definition vtk_output.c:250
void yac_vtk_write_point_scalars_uint(YAC_VTK_FILE *vtk_file, unsigned *scalars, unsigned num_points, char *name)
Definition vtk_output.c:271
void yac_vtk_write_point_data_ll(YAC_VTK_FILE *vtk_file, double *point_data_lon, double *point_data_lat, unsigned num_points)
Definition vtk_output.c:149
void yac_vtk_write_point_scalars_double(YAC_VTK_FILE *vtk_file, double *scalars, unsigned num_points, char *name)
Definition vtk_output.c:292
void yac_vtk_write_point_data(YAC_VTK_FILE *vtk_file, double *point_data, unsigned num_points)
Definition vtk_output.c:69
void yac_vtk_write_point_scalars_int(YAC_VTK_FILE *vtk_file, int *scalars, unsigned num_points, char *name)
Definition vtk_output.c:278
void yac_vtk_close(YAC_VTK_FILE *vtk_file)
Definition vtk_output.c:403
void yac_vtk_write_cell_data(YAC_VTK_FILE *vtk_file, unsigned *cell_corners, unsigned *num_points_per_cell, unsigned num_cells)
Definition vtk_output.c:88
YAC_VTK_FILE * yac_vtk_open(const char *filename, const char *title)
Definition vtk_output.c:45
void yac_vtk_write_point_scalars_float(YAC_VTK_FILE *vtk_file, float *scalars, unsigned num_points, char *name)
Definition vtk_output.c:285
general routines for writing vtk files