1 #ifndef __CS_MESH_BAD_CELLS_H__
2 #define __CS_MESH_BAD_CELLS_H__
3 
4 /*============================================================================
5  * Detect bad cells within meshes.
6  *============================================================================*/
7 
8 /*
9   This file is part of Code_Saturne, a general-purpose CFD tool.
10 
11   Copyright (C) 1998-2021 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 #include "cs_mesh_quantities.h"
37 
38 /*----------------------------------------------------------------------------*/
39 
40 BEGIN_C_DECLS
41 
42 /*============================================================================
43  * Macro definitions
44  *============================================================================*/
45 
46 /*
47  * Detection criteria type
48  */
49 
50 #define CS_BAD_CELL_ORTHO_NORM           (1 << 0)
51 #define CS_BAD_CELL_OFFSET               (1 << 1)
52 #define CS_BAD_CELL_LSQ_GRAD             (1 << 2)
53 #define CS_BAD_CELL_RATIO                (1 << 3)
54 #define CS_BAD_CELL_GUILT                (1 << 4)
55 #define CS_BAD_CELL_USER                 (1 << 5)
56 #define CS_BAD_CELL_TO_REGULARIZE        (1 << 6)
57 
58 /*=============================================================================
59  * Public function prototypes
60  *============================================================================*/
61 
62 /*----------------------------------------------------------------------------
63  * Define which cell quality indicators are used and when.
64  *
65  * Note: we assume that if a given criterion is computed at each time
66  * step, it is also computed at initialization, but for visualization,
67  * it is either one or the other, as visualization formats and tools
68  * may not always accept both a fixed and time-varying instance of a
69  * given variable.
70  *
71  * parameters:
72  *   type_flag_mask <-- criterion type mask (0 for all)
73  *   compute        <-- 0: never compute;
74  *                      1: compute at initialization;
75  *                      2: compute at each time step
76  *   visualize      <-- 0: never visualize
77  *                      1: visualize at initialization;
78  *                      2: visualize at each time step
79  *----------------------------------------------------------------------------*/
80 
81 void
82 cs_mesh_bad_cells_set_options(int  type_flag_mask,
83                               int  compute,
84                               int  visualize);
85 
86 /*----------------------------------------------------------------------------
87  * Indicate which cell quality indicators are used and when.
88  *
89  * Each array is optional, and returns 2 flags; the first flag is used at
90  * initialization, the second one at each time step.
91  *
92  * A flag is a mask to be compared using an "and" (&) operation with a given
93  * criteria type mask (CS_BAD_CELL_ORTHO_NORM, CS_BAD_CELL_OFFSET, ...).
94  *
95  * parameters:
96  *   compute   --> computation mask (initialization, per time step), or NULL
97  *   visualize --> visualization mask (initialization, per time step), or NULL
98  *----------------------------------------------------------------------------*/
99 
100 void
101 cs_mesh_bad_cells_get_options(int  compute[2],
102                               int  visualize[2]);
103 
104 /*----------------------------------------------------------------------------
105  * Compute bad cell quality indicators.
106  *
107  * parameters:
108  *   mesh            <-- pointer to a mesh structure.
109  *   mesh_quantities <-> pointer to a mesh quantities structures.
110  *----------------------------------------------------------------------------*/
111 
112 void
113 cs_mesh_bad_cells_detect(const cs_mesh_t       *mesh,
114                          cs_mesh_quantities_t  *mesh_quantities);
115 
116 /*----------------------------------------------------------------------------
117  * Post-process bad cell quality indicators.
118  *
119  * parameters:
120  *   mesh            <-- pointer to a mesh structure.
121  *   mesh_quantities <-- pointer to a mesh quantities structures.
122  *----------------------------------------------------------------------------*/
123 
124 void
125 cs_mesh_bad_cells_postprocess(const cs_mesh_t             *mesh,
126                               const cs_mesh_quantities_t  *mesh_quantities);
127 
128 /*----------------------------------------------------------------------------*/
129 
130 END_C_DECLS
131 
132 #endif /* __CS_MESH_BAD_CELLS_H__ */
133