YAC 3.20.0
Yet Another Coupler
Loading...
Searching...
No Matches
read_cube_csv_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 <stdlib.h>
6#include <stdio.h>
7
9#include "geometry.h"
10#include "utils_common.h"
11
12static FILE * open_cube_csv_file ( const char *filename);
13
14static void close_cube_csv_file ( FILE * file );
15
16#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N
17#define EXPAND(x) x
18#define COUNT_ARGS(...) EXPAND(_GET_NTH_ARG(__VA_ARGS__, 5, 4, 3, 2, 1))
19#define READ_LINE(format, ...) \
20 YAC_ASSERT_F( \
21 fscanf(file, format, __VA_ARGS__) == COUNT_ARGS(__VA_ARGS__), \
22 "failed while reading a line from file %s", filename)
23
24void yac_read_cube_csv_grid_information(const char * filename, int * nbr_vertices,
25 int * nbr_cells, int ** cell_to_vertex,
26 double ** x_vertices, double ** y_vertices) {
27
28 // open file
29
30 FILE * file = open_cube_csv_file ( filename );
31
32 // read number of vertices and cells
33 READ_LINE("%d,%d\n", nbr_vertices, nbr_cells);
34
35 // read coordinates of vertices
36
37 *x_vertices = xmalloc (*nbr_vertices * sizeof(**x_vertices));
38 *y_vertices = xmalloc (*nbr_vertices * sizeof(**y_vertices));
39
40 for (int i = 0, dummy; i < *nbr_vertices; ++i) {
41 READ_LINE("%d,%lf,%lf\n", &dummy, *x_vertices+i, *y_vertices+i);
42 (*x_vertices)[i] *= YAC_RAD;
43 (*y_vertices)[i] *= YAC_RAD;
44 }
45
46 // read indices of cell vertices
47
48 *cell_to_vertex = xmalloc(4 * *nbr_cells * sizeof(**cell_to_vertex));
49
50 for (int i = 0, dummy; i < *nbr_cells; ++i) {
52 "%d,%d,%d,%d,%d\n", &dummy, *cell_to_vertex+4*i+0,
53 *cell_to_vertex+4*i+1, *cell_to_vertex+4*i+2,
54 *cell_to_vertex+4*i+3);
55
56 for (unsigned j = 0; j < 4; ++j)
57 (*cell_to_vertex+4*i)[j]--;
58 }
59
60 close_cube_csv_file ( file );
61}
62
64
65 int nbr_vertices;
66 int nbr_cells;
67 int * cell_to_vertex;
68
69 double * x_vertices;
70 double * y_vertices;
71
72 yac_read_cube_csv_grid_information(filename, &nbr_vertices, &nbr_cells,
73 &cell_to_vertex, &x_vertices, &y_vertices);
74
76 xmalloc(nbr_cells * sizeof(*num_vertices_per_cell));
77
78 for (int i = 0; i < nbr_cells; ++i)
80
81 struct yac_basic_grid_data grid =
83 (size_t)nbr_vertices, (size_t)nbr_cells, num_vertices_per_cell,
84 x_vertices, y_vertices, cell_to_vertex);
86 free(x_vertices);
87 free(y_vertices);
88 free(cell_to_vertex);
89
90 return grid;
91}
92
93static FILE * open_cube_csv_file (const char *filename) {
94
95 FILE * file = xfopen(filename, "r");
96
98 file, "could not open file %s", filename);
99
100 return file;
101}
102
103/* ---------------------------------------------------------------- */
104
105static void close_cube_csv_file (FILE * file) {
106
107 xfclose(file);
108}
109
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)
#define YAC_RAD
#define xmalloc(size)
Definition ppm_xfuncs.h:66
#define xfclose(fp)
Definition ppm_xfuncs.h:79
#define xfopen(path, mode)
Definition ppm_xfuncs.h:74
void yac_read_cube_csv_grid_information(const char *filename, int *nbr_vertices, int *nbr_cells, int **cell_to_vertex, double **x_vertices, double **y_vertices)
#define READ_LINE(format,...)
struct yac_basic_grid_data yac_read_cube_csv_grid(char *filename)
static FILE * open_cube_csv_file(const char *filename)
static void close_cube_csv_file(FILE *file)
int * cell_to_vertex
#define YAC_ASSERT_F(exp, format,...)
Definition yac_assert.h:39