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