programmer's documentation
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
src
fvm
fvm_writer_priv.h
Go to the documentation of this file.
1
#ifndef __FVM_WRITER_PRIV_H__
2
#define __FVM_WRITER_PRIV_H__
3
4
/*============================================================================
5
* Private types for mesh and field writers
6
*============================================================================*/
7
8
/*
9
This file is part of Code_Saturne, a general-purpose CFD tool.
10
11
Copyright (C) 1998-2013 EDF S.A.
12
13
This program is free software; you can redistribute it and/or modify it under
14
the terms of the GNU General Public License as published by the Free Software
15
Foundation; either version 2 of the License, or (at your option) any later
16
version.
17
18
This program is distributed in the hope that it will be useful, but WITHOUT
19
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21
details.
22
23
You should have received a copy of the GNU General Public License along with
24
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25
Street, Fifth Floor, Boston, MA 02110-1301, USA.
26
*/
27
28
/*----------------------------------------------------------------------------*/
29
30
#include "
cs_defs.h
"
31
32
/*----------------------------------------------------------------------------
33
* Local headers
34
*----------------------------------------------------------------------------*/
35
36
#include "
cs_timer.h
"
37
38
#include "
fvm_defs.h
"
39
#include "
fvm_nodal.h
"
40
#include "
fvm_writer.h
"
41
42
/*----------------------------------------------------------------------------*/
43
44
BEGIN_C_DECLS
45
46
/*=============================================================================
47
* Macro definitions
48
*============================================================================*/
49
50
/*
51
* Writer format implementation and functionality info
52
*/
53
54
#define FVM_WRITER_FORMAT_USE_EXTERNAL (1 << 0)
55
56
#define FVM_WRITER_FORMAT_HAS_POLYGON (1 << 1)
57
#define FVM_WRITER_FORMAT_HAS_POLYHEDRON (1 << 2)
58
59
/*============================================================================
60
* Type definitions
61
*============================================================================*/
62
63
/*----------------------------------------------------------------------------
64
* Function pointer types
65
*----------------------------------------------------------------------------*/
66
67
typedef
int
68
(
fvm_writer_n_version_strings_t
) (void);
69
70
typedef
const
char
*
71
(
fvm_writer_version_string_t
)(
int
string_index,
72
int
compile_time_version);
73
74
#if defined(HAVE_MPI)
75
76
typedef
void
*
77
(
fvm_writer_init_t
) (
const
char
*name,
78
const
char
*path,
79
const
char
*options,
80
fvm_writer_time_dep_t
time_dependency,
81
MPI_Comm comm);
82
83
#else
84
85
typedef
void
*
86
(
fvm_writer_init_t
) (
const
char
*name,
87
const
char
*path,
88
const
char
*options,
89
fvm_writer_time_dep_t
time_dependency);
90
91
#endif
/* defined(HAVE_MPI) */
92
93
typedef
void
*
94
(
fvm_writer_finalize_t
) (
void
*this_writer);
95
96
typedef
void
97
(
fvm_writer_set_mesh_time_t
) (
void
*this_writer,
98
int
time_step,
99
double
time_value);
100
101
typedef
int
102
(
fvm_writer_needs_tesselation_t
) (fvm_writer_t *this_writer,
103
const
fvm_nodal_t *
mesh
,
104
fvm_element_t
element_type);
105
106
typedef
void
107
(
fvm_writer_export_nodal_t
) (
void
*this_writer,
108
const
fvm_nodal_t *mesh);
109
110
typedef
void
111
(
fvm_writer_export_field_t
) (
void
*this_writer,
112
const
fvm_nodal_t *mesh,
113
const
char
*name,
114
fvm_writer_var_loc_t
location,
115
int
dimension,
116
cs_interlace_t
interlace,
117
int
n_parent_lists,
118
const
cs_lnum_t
parent_num_shift[],
119
cs_datatype_t
datatype,
120
int
time_step,
121
double
time_value,
122
const
void
*
const
field_values[]);
123
124
typedef
void
125
(
fvm_writer_flush_t
) (fvm_writer_t *this_writer);
126
127
/*----------------------------------------------------------------------------
128
* Format information structure
129
*----------------------------------------------------------------------------*/
130
131
typedef
struct
{
132
133
char
name[32];
/* Format name */
134
char
version[16];
/* Format version (if defined) */
135
int
info_mask
;
/* Additional format info */
136
fvm_writer_time_dep_t
max_time_dep
;
/* Maximum time dependency level
137
possible with this format */
138
139
int
dl_count
;
/* Number of writers using the
140
dynamically loadable library
141
for this format, if relevant */
142
void
*
dl_lib
;
/* Pointer to dynamically loadable
143
library, if used */
144
const
char
*
dl_name
;
/* Prefix for name of dynamically
145
loadable library, or NULL */
146
const
char
*
dl_prefix
;
/* Prefix for exported symbols of
147
dynamically loadable library,
148
or NULL */
149
150
fvm_writer_n_version_strings_t
*
n_version_strings_func
;
151
fvm_writer_version_string_t
*
version_string_func
;
152
fvm_writer_init_t
*
init_func
;
153
fvm_writer_finalize_t
*
finalize_func
;
154
fvm_writer_set_mesh_time_t
*
set_mesh_time_func
;
155
fvm_writer_needs_tesselation_t
*
needs_tesselation_func
;
156
fvm_writer_export_nodal_t
*
export_nodal_func
;
157
fvm_writer_export_field_t
*
export_field_func
;
158
fvm_writer_flush_t
*
flush_func
;
159
160
}
fvm_writer_format_t
;
161
162
/*----------------------------------------------------------------------------
163
* Structure defining a writer definition
164
*----------------------------------------------------------------------------*/
165
166
struct
_fvm_writer_t
{
167
168
char
*
name
;
/* Writer name */
169
fvm_writer_format_t
*
format
;
/* Output format */
170
char
*
options
;
/* Output options */
171
char
*
path
;
/* Output path */
172
fvm_writer_time_dep_t
time_dep
;
/* Geometry time dependency */
173
void
*
format_writer
;
/* Format-specific writer */
174
175
cs_timer_counter_t
mesh_time
;
/* Meshes output timer */
176
cs_timer_counter_t
field_time
;
/* Fields output timer */
177
cs_timer_counter_t
flush_time
;
/* output "completion" timer */
178
179
};
180
181
/*=============================================================================
182
* Semi-private function prototypes
183
*============================================================================*/
184
185
/*----------------------------------------------------------------------------
186
* Compute recommended buffer sizes to input or output a nodal mesh
187
* definition by slices. This is especially useful when gathering the mesh for
188
* output by slices using standard I/O in parallel mode.
189
*
190
* The global number of vertices and elements of each slice may also
191
* be returned, if the pointers n_g_vertices and n_g_elements_section
192
* are non-NULL respectively.
193
*
194
* The number of slices indicated is a minimum, and only a target;
195
* computation is based primarily on cell and face connectivity, and the
196
* target should be met for strided connectivities on those types of elements
197
* only. Using an "optimistic" (i.e. small) mean number of vertices per
198
* polyhedra or polygon will typically lead to requiring more slices, as
199
* the connectivity slice size returned will be smaller than that truly
200
* required for the corresponding slice size.
201
* Slice sizes required for edges connectivity will meet the target only
202
* when the global numbers of cells and faces given are zero, so as to
203
* avoid generating too large connectivity slice sizes for cells should a mesh
204
* contain both (as for example a hexahedral connectivity slice is 8 times
205
* larger than the corresponding slice size, while an edges connectivity is
206
* only 2 times as large).
207
*
208
* parameters:
209
* this_nodal <-- pointer to nodal mesh structure
210
* n_slices <-- target number of slices required
211
* n_polyhedron_vertices_mean <-- estimate of the mean number of vertices
212
* per polyhedron
213
* n_polygon_vertices_mean <-- estimate of the mean number of vertices
214
* per polygon
215
* n_g_vertices --> global number of vertices (or NULL)
216
* n_g_elements_section --> array for global number of elements per
217
* section (or NULL)
218
* global_s_size --> maximum number of entities defined per slice
219
* global_connect_s_size --> maximum number of connectivity values
220
* per slice
221
*----------------------------------------------------------------------------*/
222
223
void
224
fvm_writer_def_nodal_buf_size
(
const
fvm_nodal_t *this_nodal,
225
int
n_slices,
226
int
n_polyhedron_vertices_mean,
227
int
n_polygon_vertices_mean,
228
cs_gnum_t
*n_g_vertices,
229
cs_gnum_t
n_g_elements_section[],
230
cs_gnum_t
*global_s_size,
231
cs_gnum_t
*global_connect_s_size);
232
233
/*----------------------------------------------------------------------------*/
234
235
END_C_DECLS
236
237
#endif
/* __FVM_WRITER_PRIV_H__ */
Generated on Thu Feb 27 2014 19:21:34 by
1.8.3.1