8.0
general documentation
Loading...
Searching...
No Matches
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
50
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
85
86/*============================================================================
87 * Type definition
88 *============================================================================*/
89
90/* Structure associated to mesh quantities management */
91
92typedef 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 */
181extern unsigned cs_glob_mesh_quantities_flag;
182
183/*=============================================================================
184 * Public function prototypes
185 *============================================================================*/
186
187/*----------------------------------------------------------------------------*/
197/*----------------------------------------------------------------------------*/
198
199int
201
202/*----------------------------------------------------------------------------*/
213/*----------------------------------------------------------------------------*/
214
215int
217
218/*----------------------------------------------------------------------------*/
224/*----------------------------------------------------------------------------*/
225
228
229/*----------------------------------------------------------------------------*/
237/*----------------------------------------------------------------------------*/
238
241
242/*----------------------------------------------------------------------------*/
248/*----------------------------------------------------------------------------*/
249
250void
252
253/*----------------------------------------------------------------------------*/
260/*----------------------------------------------------------------------------*/
261
262void
265
266/*----------------------------------------------------------------------------*/
273/*----------------------------------------------------------------------------*/
274
275void
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
287void
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
299void
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
311void
313 cs_mesh_quantities_t *mesh_quantities);
314
315/*----------------------------------------------------------------------------*/
324/*----------------------------------------------------------------------------*/
325
326void
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
339void
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
352void
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
369void
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
386void
388 cs_real_t *p_b_face_cog[],
389 cs_real_t *p_b_face_normal[]);
390
391/*----------------------------------------------------------------------------*/
411/*----------------------------------------------------------------------------*/
412
413void
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
434cs_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
446void
448 const cs_mesh_quantities_t *mesh_quantities,
449 int allow_error);
450
451/*----------------------------------------------------------------------------*/
464/*----------------------------------------------------------------------------*/
465
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
477int
479
480/*----------------------------------------------------------------------------*/
490/*----------------------------------------------------------------------------*/
491
492void
494 const cs_mesh_quantities_t *mq,
495 int n_passes,
496 cs_real_t b_thickness[]);
497
498/*----------------------------------------------------------------------------*/
507/*----------------------------------------------------------------------------*/
508
509void
511 const cs_mesh_quantities_t *mq,
512 int n_passes,
513 cs_real_t b_thickness[]);
514
515/*----------------------------------------------------------------------------*/
519/*----------------------------------------------------------------------------*/
520
521void
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
532void
534 const cs_mesh_quantities_t *mesh_quantities);
535
536/*----------------------------------------------------------------------------*/
537
539
540#endif /* __CS_MESH_QUANTITIES_H__ */
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition cs_defs.h:341
#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_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_3_t[3]
vector of 3 floating-point values
Definition cs_defs.h:332
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
cs_mesh_quantities_t * cs_mesh_quantities_destroy(cs_mesh_quantities_t *mq)
Destroy a mesh quantities structure.
Definition cs_mesh_quantities.c:2709
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
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
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
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
cs_mesh_quantities_t * cs_mesh_quantities_create(void)
Create a mesh quantities structure.
Definition cs_mesh_quantities.c:2649
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_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
cs_real_t * cs_mesh_quantities_cell_volume(const cs_mesh_t *mesh)
Definition cs_mesh_quantities.c:4299
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