8.0
general documentation
cs_mesh_quantities.h
Go to the documentation of this file.
1 #ifndef __CS_MESH_QUANTITIES_H__
2 #define __CS_MESH_QUANTITIES_H__
3 
4 /*============================================================================
5  * Management of mesh quantities
6  *============================================================================*/
7 
8 /*
9  This file is part of code_saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2023 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 /*----------------------------------------------------------------------------
31  * Local headers
32  *----------------------------------------------------------------------------*/
33 
34 #include "cs_base.h"
35 #include "cs_mesh.h"
36 
37 /*----------------------------------------------------------------------------*/
38 
40 
41 /*=============================================================================
42  * Macro definitions
43  *============================================================================*/
44 
51 /*
52  * Cell quantities correction types
53  */
54 
56 #define CS_BAD_CELLS_WARPED_CORRECTION (1 << 0)
57 
59 #define CS_BAD_CELLS_REGULARISATION (1 << 1)
60 
62 #define CS_CELL_FACE_CENTER_CORRECTION (1 << 2)
63 
65 #define CS_CELL_CENTER_CORRECTION (1 << 3)
66 
68 #define CS_FACE_DISTANCE_CLIP (1 << 4)
69 
71 #define CS_FACE_RECONSTRUCTION_CLIP (1 << 5)
72 
74 #define CS_CELL_VOLUME_RATIO_CORRECTION (1 << 6)
75 
79 #define CS_FACE_CENTER_REFINE (1 << 7)
80 
82 #define CS_FACE_NULL_SURFACE (1 << 8)
83 
86 /*============================================================================
87  * Type definition
88  *============================================================================*/
89 
90 /* Structure associated to mesh quantities management */
91 
92 typedef struct {
93 
94  cs_real_t *cell_cen; /* Cell center coordinates */
95  cs_real_t *cell_f_cen; /* Cell fluid center coordinates */
96  cs_real_t *cell_s_cen; /* Cell solid center coordinates */
97  cs_real_t *cell_vol; /* Cell volume */
98  cs_real_t *cell_f_vol; /* Cell fluid volume */
99 
100  cs_real_t *i_face_normal; /* Surface normal of interior faces.
101  (L2 norm equals area of the face) */
102  cs_real_t *b_face_normal; /* Surface normal of border faces.
103  (L2 norm equals area of the face) */
104  cs_real_t *i_f_face_normal;/* Fluid surface normal of interior faces.
105  (L2 norm equals area of the face) */
106  cs_real_t *b_f_face_normal;/* Fluid surface normal of border faces.
107  (L2 norm equals area of the face) */
108  cs_real_t *c_w_face_normal;/* Solid surface normal immersed in the cells.
109  (L2 norm equals area of the face) */
110  cs_real_t *i_face_cog; /* Center of gravity of interior faces */
111  cs_real_t *b_face_cog; /* Center of gravity of border faces */
112  cs_real_t *i_f_face_cog_0; /* Center of gravity of fluid interior faces.
113  From cell 0 perspective.
114  It allows discontinuity */
115  cs_real_t *i_f_face_cog_1; /* Center of gravity of fluid interior faces.
116  From cell 1 perspective.
117  It allows discontinuity */
118  cs_real_t *b_f_face_cog; /* Center of gravity of fluid border faces */
119  cs_real_t *c_w_face_cog; /* Center of gravity of solid face
120  immersed in the cells */
121 
122  cs_real_t *i_face_surf; /* Surface of interior faces. */
123  cs_real_t *b_face_surf; /* Surface of boundary faces. */
124 
125  cs_real_t *i_f_face_surf; /* Fluid surface of interior faces. */
126  cs_real_t *b_f_face_surf; /* Fluid surface of boundary faces. */
127  cs_real_t *c_w_face_surf; /* Solid surface of cells. */
128 
129  cs_real_2_t *i_f_face_factor;/* Fluid surface factor of interior faces. */
130  cs_real_t *b_f_face_factor;/* Fluid surface factor of boundary faces. */
131 
132  cs_real_t *dijpf; /* Vector I'J' for interior faces */
133  cs_real_t *diipb; /* Vector II' for border faces */
134  cs_real_t *dofij; /* Vector OF for interior faces */
135  cs_real_t *diipf; /* Vector II' for interior faces */
136  cs_real_t *djjpf; /* Vector JJ' for interior faces */
137 
138  cs_real_t *i_dist; /* Distance between the centers of the two
139  cells sharing an interior face */
140  cs_real_t *b_dist; /* Distance between the cell center and
141  the center of gravity of border faces */
142  cs_real_t *c_w_dist_inv; /* Distance between the centers of the cell
143  and the solid face */
144 
145  cs_real_t *weight; /* Interior faces weighting factor */
146  cs_real_t *i_f_weight; /* Interior faces weighting factor
147  with new cell center of gravity */
148 
149  cs_real_t min_vol; /* Minimum cell volume */
150  cs_real_t max_vol; /* Maximum cell volume */
151  cs_real_t tot_vol; /* Total volume */
152 
153  cs_real_t min_f_vol; /* Minimum cell volume */
154  cs_real_t max_f_vol; /* Maximum cell volume */
155  cs_real_t tot_f_vol; /* Total volume */
156 
157  cs_real_t *corr_grad_lin_det; /* Determinant of geometrical matrix
158  linear gradient correction */
159  cs_real_33_t *corr_grad_lin; /* Geometrical matrix
160  linear gradient correction */
161 
162  int *b_sym_flag; /* Symmetry flag for boundary faces */
163  int has_disable_flag; /* Is the cell disabled?
164  0: unactivated
165  1: activated */
166  int *c_disable_flag; /* Is the cell disabled?
167  used for fluid solid and porous models */
168  unsigned *bad_cell_flag; /* Flag (mask) for bad cells detected */
169 
171 
172 /*============================================================================
173  * Global variables
174  *============================================================================*/
175 
176 /* Pointer to mesh quantities structure associated to the main mesh */
177 
179 
180 /* Flag (mask) to activate bad cells correction */
181 extern unsigned cs_glob_mesh_quantities_flag;
182 
183 /*=============================================================================
184  * Public function prototypes
185  *============================================================================*/
186 
187 /*----------------------------------------------------------------------------*/
197 /*----------------------------------------------------------------------------*/
198 
199 int
200 cs_mesh_quantities_cell_cen_choice(int algo_choice);
201 
202 /*----------------------------------------------------------------------------*/
213 /*----------------------------------------------------------------------------*/
214 
215 int
216 cs_mesh_quantities_face_cog_choice(int algo_choice);
217 
218 /*----------------------------------------------------------------------------*/
224 /*----------------------------------------------------------------------------*/
225 
228 
229 /*----------------------------------------------------------------------------*/
237 /*----------------------------------------------------------------------------*/
238 
241 
242 /*----------------------------------------------------------------------------*/
248 /*----------------------------------------------------------------------------*/
249 
250 void
252 
253 /*----------------------------------------------------------------------------*/
260 /*----------------------------------------------------------------------------*/
261 
262 void
265 
266 /*----------------------------------------------------------------------------*/
273 /*----------------------------------------------------------------------------*/
274 
275 void
278 
279 /*----------------------------------------------------------------------------
280  * Compute fluid mesh quantities
281  *
282  * parameters:
283  * mesh <-- pointer to a cs_mesh_t structure
284  * mesh_quantities <-> pointer to a cs_mesh_quantities_t structure
285  *----------------------------------------------------------------------------*/
286 
287 void
289  cs_mesh_quantities_t *mesh_quantities);
290 
291 /*----------------------------------------------------------------------------
292  * Compute the total, min, and max fluid volumes of cells
293  *
294  * parameters:
295  * mesh <-- pointer to mesh structure
296  * mesh_quantities <-> pointer to a mesh quantities structure
297  *----------------------------------------------------------------------------*/
298 
299 void
301  cs_mesh_quantities_t *mesh_quantities);
302 
303 /*----------------------------------------------------------------------------
304  * Compute fluid section mesh quantities at the initial step
305  *
306  * parameters:
307  * mesh <-- pointer to a cs_mesh_t structure
308  * mesh_quantities <-> pointer to a cs_mesh_quantities_t structure
309  *----------------------------------------------------------------------------*/
310 
311 void
313  cs_mesh_quantities_t *mesh_quantities);
314 
315 /*----------------------------------------------------------------------------*/
324 /*----------------------------------------------------------------------------*/
325 
326 void
328  const cs_real_3_t *cen_points,
330 
331 /*----------------------------------------------------------------------------
332  * Compute mesh quantities
333  *
334  * parameters:
335  * mesh <-- pointer to a cs_mesh_t structure
336  * mesh_quantities <-> pointer to a cs_mesh_quantities_t structure
337  *----------------------------------------------------------------------------*/
338 
339 void
341  cs_mesh_quantities_t *mesh_quantities);
342 
343 /*----------------------------------------------------------------------------
344  * Compute internal and border face normal.
345  *
346  * parameters:
347  * mesh <-- pointer to a cs_mesh_t structure
348  * p_i_face_normal <-> pointer to the internal face normal array
349  * p_b_face_normal <-> pointer to the border face normal array
350  *----------------------------------------------------------------------------*/
351 
352 void
354  cs_real_t *p_i_face_normal[],
355  cs_real_t *p_b_face_normal[]);
356 
357 /*----------------------------------------------------------------------------
358  * Compute interior face centers and normals.
359  *
360  * The corresponding arrays are allocated by this function, and it is the
361  * caller's responsibility to free them when they are no longer needed.
362  *
363  * parameters:
364  * mesh <-- pointer to a cs_mesh_t structure
365  * p_i_face_cog <-> pointer to the interior face center array
366  * p_i_face_normal <-> pointer to the interior face normal array
367  *----------------------------------------------------------------------------*/
368 
369 void
371  cs_real_t *p_i_face_cog[],
372  cs_real_t *p_i_face_normal[]);
373 
374 /*----------------------------------------------------------------------------
375  * Compute border face centers and normals.
376  *
377  * The corresponding arrays are allocated by this function, and it is the
378  * caller's responsibility to free them when they are no longer needed.
379  *
380  * parameters:
381  * mesh <-- pointer to a cs_mesh_t structure
382  * p_b_face_cog <-> pointer to the border face center array
383  * p_b_face_normal <-> pointer to the border face normal array
384  *----------------------------------------------------------------------------*/
385 
386 void
388  cs_real_t *p_b_face_cog[],
389  cs_real_t *p_b_face_normal[]);
390 
391 /*----------------------------------------------------------------------------*/
411 /*----------------------------------------------------------------------------*/
412 
413 void
415  const cs_real_t i_face_norm[],
416  const cs_real_t i_face_cog[],
417  const cs_real_t b_face_norm[],
418  const cs_real_t b_face_cog[],
419  cs_real_t cell_cen[]);
420 
421 /*----------------------------------------------------------------------------
422  * Compute cell volumes.
423  *
424  * The corresponding array is allocated by this function, and it is the
425  * caller's responsability to free it when they are no longer needed.
426  *
427  * parameters:
428  * mesh <-- pointer to a cs_mesh_t structure
429  *
430  * return:
431  * pointer to newly allocated cell volumes array
432  *----------------------------------------------------------------------------*/
433 
434 cs_real_t *
436 
437 /*----------------------------------------------------------------------------
438  * Check that no negative volumes are present, and exit on error otherwise.
439  *
440  * parameters:
441  * mesh <-- pointer to mesh structure
442  * mesh_quantities <-- pointer to mesh quantities structure
443  * allow_error <-- 1 if errors are allowed, 0 otherwise
444  *----------------------------------------------------------------------------*/
445 
446 void
448  const cs_mesh_quantities_t *mesh_quantities,
449  int allow_error);
450 
451 /*----------------------------------------------------------------------------*/
464 /*----------------------------------------------------------------------------*/
465 
466 cs_real_6_t *
468  cs_real_t tolerance);
469 
470 /*----------------------------------------------------------------------------
471  * Return the number of times mesh quantities have been computed.
472  *
473  * returns:
474  * number of times mesh quantities have been computed
475  *----------------------------------------------------------------------------*/
476 
477 int
479 
480 /*----------------------------------------------------------------------------*/
490 /*----------------------------------------------------------------------------*/
491 
492 void
494  const cs_mesh_quantities_t *mq,
495  int n_passes,
496  cs_real_t b_thickness[]);
497 
498 /*----------------------------------------------------------------------------*/
507 /*----------------------------------------------------------------------------*/
508 
509 void
511  const cs_mesh_quantities_t *mq,
512  int n_passes,
513  cs_real_t b_thickness[]);
514 
515 /*----------------------------------------------------------------------------*/
519 /*----------------------------------------------------------------------------*/
520 
521 void
523 
524 /*----------------------------------------------------------------------------
525  * Dump a cs_mesh_quantities_t structure
526  *
527  * parameters:
528  * mesh <-- pointer to a cs_mesh_t structure
529  * mesh_quantities <-- pointer to a cs_mesh_quantities_t structure
530  *----------------------------------------------------------------------------*/
531 
532 void
534  const cs_mesh_quantities_t *mesh_quantities);
535 
536 /*----------------------------------------------------------------------------*/
537 
539 
540 #endif /* __CS_MESH_QUANTITIES_H__ */
#define BEGIN_C_DECLS
Definition: cs_defs.h:509
double cs_real_t
Floating-point value.
Definition: cs_defs.h:319
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:332
cs_real_t cs_real_2_t[2]
vector of 2 floating-point values
Definition: cs_defs.h:331
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition: cs_defs.h:334
#define END_C_DECLS
Definition: cs_defs.h:510
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:341
void cs_mesh_quantities_sup_vectors(const cs_mesh_t *mesh, cs_mesh_quantities_t *mesh_quantities)
Definition: cs_mesh_quantities.c:4007
unsigned cs_glob_mesh_quantities_flag
void cs_mesh_quantities_face_normal(const cs_mesh_t *mesh, cs_real_t *p_i_face_normal[], cs_real_t *p_b_face_normal[])
Definition: cs_mesh_quantities.c:4042
void cs_mesh_quantities_log_setup(void)
Log mesh quantities options to setup file.
Definition: cs_mesh_quantities.c:4636
void cs_mesh_quantities_compute_preprocess(const cs_mesh_t *m, cs_mesh_quantities_t *mq)
Compute mesh quantities needed for preprocessing.
Definition: cs_mesh_quantities.c:2785
void cs_mesh_quantities_b_thickness_f(const cs_mesh_t *m, const cs_mesh_quantities_t *mq, int n_passes, cs_real_t b_thickness[])
Determine local boundary thickness around each boundary face.
Definition: cs_mesh_quantities.c:4594
cs_real_6_t * cs_mesh_quantities_cell_extents(const cs_mesh_t *m, cs_real_t tolerance)
Compute the bounding box for cells.
Definition: cs_mesh_quantities.c:4398
void cs_mesh_quantities_solid_compute(const cs_mesh_t *m, const cs_real_3_t *cen_points, cs_mesh_quantities_t *mq)
Compute cell and faces quantities needed at the immersed boundaries.
Definition: cs_mesh_quantities.c:3019
int cs_mesh_quantities_compute_count(void)
Definition: cs_mesh_quantities.c:4486
void cs_mesh_quantities_check_vol(const cs_mesh_t *mesh, const cs_mesh_quantities_t *mesh_quantities, int allow_error)
Definition: cs_mesh_quantities.c:4340
cs_mesh_quantities_t * cs_mesh_quantities_create(void)
Create a mesh quantities structure.
Definition: cs_mesh_quantities.c:2649
int cs_mesh_quantities_cell_cen_choice(int algo_choice)
Query or modification of the option for computing cell centers.
Definition: cs_mesh_quantities.c:2610
cs_real_t * cs_mesh_quantities_cell_volume(const cs_mesh_t *mesh)
Definition: cs_mesh_quantities.c:4299
void cs_mesh_quantities_fluid_compute(const cs_mesh_t *mesh, cs_mesh_quantities_t *mesh_quantities)
Definition: cs_mesh_quantities.c:3905
void cs_mesh_quantities_fluid_vol_reductions(const cs_mesh_t *mesh, cs_mesh_quantities_t *mesh_quantities)
Definition: cs_mesh_quantities.c:3921
void cs_mesh_quantities_cell_faces_cog(const cs_mesh_t *mesh, const cs_real_t i_face_norm[], const cs_real_t i_face_cog[], const cs_real_t b_face_norm[], const cs_real_t b_face_cog[], cs_real_t cell_cen[])
Compute approximate cells centers as the mean of the given face centers weighted by the associated su...
Definition: cs_mesh_quantities.c:4165
int cs_mesh_quantities_face_cog_choice(int algo_choice)
Query or modification of the option for computing face centers.
Definition: cs_mesh_quantities.c:2632
void cs_mesh_init_fluid_sections(const cs_mesh_t *mesh, cs_mesh_quantities_t *mesh_quantities)
Definition: cs_mesh_quantities.c:3961
void cs_mesh_quantities_compute(const cs_mesh_t *m, cs_mesh_quantities_t *mq)
Compute mesh quantities.
Definition: cs_mesh_quantities.c:3743
void cs_mesh_quantities_free_all(cs_mesh_quantities_t *mq)
Reset a mesh quantities structure to its empty initial state.
Definition: cs_mesh_quantities.c:2727
void cs_mesh_quantities_dump(const cs_mesh_t *mesh, const cs_mesh_quantities_t *mesh_quantities)
Definition: cs_mesh_quantities.c:4681
void cs_mesh_quantities_i_faces(const cs_mesh_t *mesh, cs_real_t *p_i_face_cog[], cs_real_t *p_i_face_normal[])
Definition: cs_mesh_quantities.c:4089
void cs_mesh_quantities_b_thickness_v(const cs_mesh_t *m, const cs_mesh_quantities_t *mq, int n_passes, cs_real_t b_thickness[])
Determine local boundary thickness around each vertex.
Definition: cs_mesh_quantities.c:4504
cs_mesh_quantities_t * cs_mesh_quantities_destroy(cs_mesh_quantities_t *mq)
Destroy a mesh quantities structure.
Definition: cs_mesh_quantities.c:2709
cs_mesh_quantities_t * cs_glob_mesh_quantities
void cs_mesh_quantities_b_faces(const cs_mesh_t *mesh, cs_real_t *p_b_face_cog[], cs_real_t *p_b_face_normal[])
Definition: cs_mesh_quantities.c:4122
Definition: mesh.f90:26
Definition: cs_mesh_quantities.h:92
int * b_sym_flag
Definition: cs_mesh_quantities.h:162
cs_real_t * cell_f_cen
Definition: cs_mesh_quantities.h:95
cs_real_t * b_face_cog
Definition: cs_mesh_quantities.h:111
cs_real_t * i_f_weight
Definition: cs_mesh_quantities.h:146
cs_real_t * c_w_face_surf
Definition: cs_mesh_quantities.h:127
cs_real_t * i_face_surf
Definition: cs_mesh_quantities.h:122
cs_real_t max_f_vol
Definition: cs_mesh_quantities.h:154
cs_real_t * b_dist
Definition: cs_mesh_quantities.h:140
int has_disable_flag
Definition: cs_mesh_quantities.h:163
cs_real_2_t * i_f_face_factor
Definition: cs_mesh_quantities.h:129
cs_real_t * i_f_face_cog_0
Definition: cs_mesh_quantities.h:112
cs_real_t * b_face_surf
Definition: cs_mesh_quantities.h:123
cs_real_t * i_dist
Definition: cs_mesh_quantities.h:138
cs_real_t * i_f_face_surf
Definition: cs_mesh_quantities.h:125
cs_real_t * dofij
Definition: cs_mesh_quantities.h:134
cs_real_t * c_w_face_normal
Definition: cs_mesh_quantities.h:108
cs_real_t max_vol
Definition: cs_mesh_quantities.h:150
cs_real_t * cell_vol
Definition: cs_mesh_quantities.h:97
cs_real_t * weight
Definition: cs_mesh_quantities.h:145
cs_real_t * diipf
Definition: cs_mesh_quantities.h:135
cs_real_t * i_face_cog
Definition: cs_mesh_quantities.h:110
cs_real_t * b_face_normal
Definition: cs_mesh_quantities.h:102
cs_real_33_t * corr_grad_lin
Definition: cs_mesh_quantities.h:159
cs_real_t * b_f_face_cog
Definition: cs_mesh_quantities.h:118
cs_real_t * c_w_face_cog
Definition: cs_mesh_quantities.h:119
cs_real_t tot_vol
Definition: cs_mesh_quantities.h:151
int * c_disable_flag
Definition: cs_mesh_quantities.h:166
cs_real_t * cell_s_cen
Definition: cs_mesh_quantities.h:96
cs_real_t tot_f_vol
Definition: cs_mesh_quantities.h:155
cs_real_t * cell_cen
Definition: cs_mesh_quantities.h:94
cs_real_t * dijpf
Definition: cs_mesh_quantities.h:132
cs_real_t * diipb
Definition: cs_mesh_quantities.h:133
cs_real_t min_f_vol
Definition: cs_mesh_quantities.h:153
cs_real_t * i_f_face_normal
Definition: cs_mesh_quantities.h:104
cs_real_t * b_f_face_surf
Definition: cs_mesh_quantities.h:126
cs_real_t * b_f_face_factor
Definition: cs_mesh_quantities.h:130
cs_real_t * i_f_face_cog_1
Definition: cs_mesh_quantities.h:115
cs_real_t * cell_f_vol
Definition: cs_mesh_quantities.h:98
cs_real_t min_vol
Definition: cs_mesh_quantities.h:149
cs_real_t * c_w_dist_inv
Definition: cs_mesh_quantities.h:142
cs_real_t * corr_grad_lin_det
Definition: cs_mesh_quantities.h:157
cs_real_t * b_f_face_normal
Definition: cs_mesh_quantities.h:106
cs_real_t * i_face_normal
Definition: cs_mesh_quantities.h:100
cs_real_t * djjpf
Definition: cs_mesh_quantities.h:136
unsigned * bad_cell_flag
Definition: cs_mesh_quantities.h:168
Definition: cs_mesh.h:85