Code_Saturne
CFD tool
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-2012 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 #if defined(HAVE_MPI )
31 #include <mpi.h>
32 #endif
33 
34 /*----------------------------------------------------------------------------
35  * Local headers
36  *----------------------------------------------------------------------------*/
37 
38 #include "fvm_defs.h"
39 #include "fvm_nodal.h"
40 #include "fvm_writer.h"
41 
42 /*----------------------------------------------------------------------------*/
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #if 0
47 } /* Fake brace to force back Emacs auto-indentation back to column 0 */
48 #endif
49 #endif /* __cplusplus */
50 
51 /*=============================================================================
52  * Macro definitions
53  *============================================================================*/
54 
55 /*
56  * Writer format implementation and functionality info
57  */
58 
59 #define FVM_WRITER_FORMAT_USE_EXTERNAL (1 << 0)
60 
61 #define FVM_WRITER_FORMAT_HAS_POLYGON (1 << 1)
62 #define FVM_WRITER_FORMAT_HAS_POLYHEDRON (1 << 2)
63 
64 /*============================================================================
65  * Type definitions
66  *============================================================================*/
67 
68 /*----------------------------------------------------------------------------
69  * Function pointer types
70  *----------------------------------------------------------------------------*/
71 
72 typedef int
74 
75 typedef const char *
76 (fvm_writer_version_string_t)(int string_index,
77  int compile_time_version);
78 
79 #if defined(HAVE_MPI)
80 
81 typedef void *
82 (fvm_writer_init_t) (const char *name,
83  const char *path,
84  const char *options,
85  fvm_writer_time_dep_t time_dependency,
86  MPI_Comm comm);
87 
88 #else
89 
90 typedef void *
91 (fvm_writer_init_t) (const char *name,
92  const char *path,
93  const char *options,
94  fvm_writer_time_dep_t time_dependency);
95 
96 #endif /* defined(HAVE_MPI) */
97 
98 typedef void *
99 (fvm_writer_finalize_t) (void *this_writer);
100 
101 typedef void
102 (fvm_writer_set_mesh_time_t) (void *this_writer,
103  int time_step,
104  double time_value);
105 
106 typedef int
108  const fvm_nodal_t *mesh,
109  fvm_element_t element_type);
110 
111 typedef void
112 (fvm_writer_export_nodal_t) (void *this_writer,
113  const fvm_nodal_t *mesh);
114 
115 typedef void
116 (fvm_writer_export_field_t) (void *this_writer,
117  const fvm_nodal_t *mesh,
118  const char *name,
120  int dimension,
122  int n_parent_lists,
123  const cs_lnum_t parent_num_shift[],
125  int time_step,
126  double time_value,
127  const void *const field_values[]);
128 
129 typedef void
131 
132 /*----------------------------------------------------------------------------
133  * Format information structure
134  *----------------------------------------------------------------------------*/
135 
136 typedef struct {
137 
138  char name[32]; /* Format name */
139  char version[16]; /* Format version (if defined) */
140  int info_mask; /* Additional format info */
141  fvm_writer_time_dep_t max_time_dep; /* Maximum time dependency level
142  possible with this format */
143 
144  int dl_count; /* Number of writers using the
145  dynamically loadable library
146  for this format, if relevant */
147  void *dl_lib; /* Pointer to dynamically loadable
148  library, if used */
149  const char *dl_name; /* Prefix for name of dynamically
150  loadable library, or NULL */
151  const char *dl_prefix; /* Prefix for exported symbols of
152  dynamically loadable library,
153  or NULL */
154 
164 
166 
167 /*----------------------------------------------------------------------------
168  * Structure defining a writer definition
169  *----------------------------------------------------------------------------*/
170 
172 
173  char *name; /* Writer name */
174  fvm_writer_format_t *format; /* Output format */
175  char *options; /* Output options */
176  char *path; /* Output path */
177  fvm_writer_time_dep_t time_dep; /* Geometry time dependency */
178  void *format_writer; /* Format-specific writer */
179 
180  double mesh_wtime; /* Meshes output Wall-clock time */
181  double mesh_cpu_time; /* Meshes output CPU time */
182  double field_wtime; /* Fields output Wall-clock time */
183  double field_cpu_time; /* Fields output CPU time */
184 
185 };
186 
187 /*=============================================================================
188  * Semi-private function prototypes
189  *============================================================================*/
190 
191 /*----------------------------------------------------------------------------
192  * Compute recommended buffer sizes to input or output a nodal mesh
193  * definition by slices. This is especially useful when gathering the mesh for
194  * output by slices using standard I/O in parallel mode.
195  *
196  * The global number of vertices and elements of each slice may also
197  * be returned, if the pointers n_g_vertices and n_g_elements_section
198  * are non-NULL respectively.
199  *
200  * The number of slices indicated is a minimum, and only a target;
201  * computation is based primarily on cell and face connectivity, and the
202  * target should be met for strided connectivities on those types of elements
203  * only. Using an "optimistic" (i.e. small) mean number of vertices per
204  * polyhedra or polygon will typically lead to requiring more slices, as
205  * the connectivity slice size returned will be smaller than that truly
206  * required for the corresponding slice size.
207  * Slice sizes required for edges connectivity will meet the target only
208  * when the global numbers of cells and faces given are zero, so as to
209  * avoid generating too large connectivity slice sizes for cells should a mesh
210  * contain both (as for example a hexahedral connectivity slice is 8 times
211  * larger than the corresponding slice size, while an edges connectivity is
212  * only 2 times as large).
213  *
214  * parameters:
215  * this_nodal <-- pointer to nodal mesh structure
216  * n_slices <-- target number of slices required
217  * n_polyhedron_vertices_mean <-- estimate of the mean number of vertices
218  * per polyhedron
219  * n_polygon_vertices_mean <-- estimate of the mean number of vertices
220  * per polygon
221  * n_g_vertices --> global number of vertices (or NULL)
222  * n_g_elements_section --> array for global number of elements per
223  * section (or NULL)
224  * global_s_size --> maximum number of entities defined per slice
225  * global_connect_s_size --> maximum number of connectivity values
226  * per slice
227  *----------------------------------------------------------------------------*/
228 
229 void
231  int n_slices,
232  int n_polyhedron_vertices_mean,
233  int n_polygon_vertices_mean,
234  cs_gnum_t *n_g_vertices,
235  cs_gnum_t n_g_elements_section[],
236  cs_gnum_t *global_s_size,
237  cs_gnum_t *global_connect_s_size);
238 
239 /*----------------------------------------------------------------------------*/
240 
241 #ifdef __cplusplus
242 }
243 #endif /* __cplusplus */
244 
245 #endif /* __FVM_WRITER_PRIV_H__ */
void() fvm_writer_set_mesh_time_t(void *this_writer, int time_step, double time_value)
Definition: fvm_writer_priv.h:102
void() fvm_writer_flush_t(fvm_writer_t *this_writer)
Definition: fvm_writer_priv.h:130
cs_datatype_t
Definition: cs_defs.h:223
fvm_writer_needs_tesselation_t * needs_tesselation_func
Definition: fvm_writer_priv.h:160
double mesh_wtime
Definition: fvm_writer_priv.h:180
fvm_writer_var_loc_t location
Definition: fvm_writer_helper.c:92
void * format_writer
Definition: fvm_writer_priv.h:178
fvm_writer_set_mesh_time_t * set_mesh_time_func
Definition: fvm_writer_priv.h:159
void *() fvm_writer_init_t(const char *name, const char *path, const char *options, fvm_writer_time_dep_t time_dependency)
Definition: fvm_writer_priv.h:91
fvm_writer_finalize_t * finalize_func
Definition: fvm_writer_priv.h:158
fvm_writer_var_loc_t
Definition: fvm_writer.h:70
int dl_count
Definition: fvm_writer_priv.h:144
cs_interlace_t
Definition: cs_defs.h:347
Definition: fvm_writer_priv.h:136
Definition: fvm_nodal_priv.h:152
Definition: fvm_writer_priv.h:171
int() fvm_writer_n_version_strings_t(void)
Definition: fvm_writer_priv.h:73
fvm_writer_version_string_t * version_string_func
Definition: fvm_writer_priv.h:156
const char * dl_name
Definition: fvm_writer_priv.h:149
fvm_writer_time_dep_t
Definition: fvm_writer.h:58
fvm_writer_time_dep_t max_time_dep
Definition: fvm_writer_priv.h:141
fvm_writer_export_field_t * export_field_func
Definition: fvm_writer_priv.h:162
char * options
Definition: fvm_writer_priv.h:175
fvm_element_t
Definition: fvm_defs.h:49
double field_cpu_time
Definition: fvm_writer_priv.h:183
void() fvm_writer_export_nodal_t(void *this_writer, const fvm_nodal_t *mesh)
Definition: fvm_writer_priv.h:112
int cs_lnum_t
Definition: cs_defs.h:260
int info_mask
Definition: fvm_writer_priv.h:140
cs_interlace_t interlace
Definition: fvm_writer_helper.c:90
fvm_writer_time_dep_t time_dep
Definition: fvm_writer_priv.h:177
const char * dl_prefix
Definition: fvm_writer_priv.h:151
unsigned cs_gnum_t
Definition: cs_defs.h:255
void *() fvm_writer_finalize_t(void *this_writer)
Definition: fvm_writer_priv.h:99
fvm_writer_export_nodal_t * export_nodal_func
Definition: fvm_writer_priv.h:161
int() fvm_writer_needs_tesselation_t(fvm_writer_t *this_writer, const fvm_nodal_t *mesh, fvm_element_t element_type)
Definition: fvm_writer_priv.h:107
void fvm_writer_def_nodal_buf_size(const fvm_nodal_t *this_nodal, int n_slices, int n_polyhedron_vertices_mean, int n_polygon_vertices_mean, cs_gnum_t *n_g_vertices, cs_gnum_t n_g_elements_section[], cs_gnum_t *global_s_size, cs_gnum_t *global_connect_s_size)
Definition: fvm_writer.c:472
fvm_writer_format_t * format
Definition: fvm_writer_priv.h:174
fvm_writer_flush_t * flush_func
Definition: fvm_writer_priv.h:163
cs_datatype_t datatype
Definition: fvm_writer_helper.c:91
double mesh_cpu_time
Definition: fvm_writer_priv.h:181
fvm_writer_init_t * init_func
Definition: fvm_writer_priv.h:157
char * name
Definition: fvm_writer_priv.h:173
void() fvm_writer_export_field_t(void *this_writer, const fvm_nodal_t *mesh, const char *name, fvm_writer_var_loc_t location, int dimension, cs_interlace_t interlace, int n_parent_lists, const cs_lnum_t parent_num_shift[], cs_datatype_t datatype, int time_step, double time_value, const void *const field_values[])
Definition: fvm_writer_priv.h:116
const char *() fvm_writer_version_string_t(int string_index, int compile_time_version)
Definition: fvm_writer_priv.h:76
char * path
Definition: fvm_writer_priv.h:176
void * dl_lib
Definition: fvm_writer_priv.h:147
double field_wtime
Definition: fvm_writer_priv.h:182
fvm_writer_n_version_strings_t * n_version_strings_func
Definition: fvm_writer_priv.h:155
Definition: mesh.f90:25