cellFeatures.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::cellFeatures
26 
27 Description
28  Cell analysis class.
29 
30  Constructs feature edges and feature points, which are edges/points with
31  and angle > given specification.
32  Can be asked for 'superFaces' which can be used to see if a cell is a
33  'splitHex'.
34 
35 SourceFiles
36  cellFeatures.C
37 
38 \*---------------------------------------------------------------------------*/
39 
40 #ifndef cellFeatures_H
41 #define cellFeatures_H
42 
43 #include "faceList.H"
44 #include "labelList.H"
45 #include "boolList.H"
46 #include "HashSet.H"
47 #include "Map.H"
48 #include "DynamicList.H"
49 
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 
52 namespace Foam
53 {
54 
55 // Forward declaration of classes
56 class primitiveMesh;
57 
58 /*---------------------------------------------------------------------------*\
59  Class cellFeatures Declaration
60 \*---------------------------------------------------------------------------*/
61 
62 class cellFeatures
63 {
64  // Private Data
65 
66  const primitiveMesh& mesh_;
67 
68  //- Cos of angle between two connected faces or two connected edges on
69  // same face before edge/point is 'feature'.
70  scalar minCos_;
71 
72  label celli_;
73 
74  //- Feature edges
75  labelHashSet featureEdge_;
76 
77  //- (demand driven) Faces after removing internal points&edges
78  mutable faceList* facesPtr_;
79 
80  //- New to old face mapping
81  mutable List<DynamicList<label>> faceMap_;
82 
83 
84  // Private Member Functions
85 
86  bool faceAlignedEdge(const label, const label) const;
87 
88  label nextEdge
89  (
90  const Map<label>& toSuperFace,
91  const label superFacei,
92  const label thisEdgeI,
93  const label thisVertI
94  ) const;
95 
96  bool isCellFeatureEdge(const scalar, const label) const;
97 
98  void walkSuperFace
99  (
100  const label facei,
101  const label superFacei,
102  Map<label>& toSuperFace
103  ) const;
104 
105  void calcSuperFaces() const;
106 
107 
108 public:
109 
110  // Constructors
111 
112  //- Construct from cell in mesh
114  (
115  const primitiveMesh&,
116  const scalar minCos, // angle to use for feature recognition.
117  const label celli
118  );
119 
120  //- Disallow default bitwise copy construction
121  cellFeatures(const cellFeatures&) = delete;
122 
123 
124  //- Destructor
125  ~cellFeatures();
126 
127 
128  // Member Functions
129 
130  // Access
132  const labelHashSet& featureEdge() const
133  {
134  return featureEdge_;
135  }
137  const faceList& faces() const
138  {
139  if (!facesPtr_)
140  {
141  calcSuperFaces();
142  }
143  return *facesPtr_;
144  }
145 
146  //- New to old faceMap. Guaranteed to be shrunk.
147  const List<DynamicList<label>>& faceMap() const
148  {
149  if (!facesPtr_)
150  {
151  calcSuperFaces();
152  }
153  return faceMap_;
154  }
155 
156 
157  // Check
158 
159  //- Is edge a feature edge (uniquely determined since on cell
160  // only two faces sharing edge)
161  bool isFeatureEdge(const label edgeI) const
162  {
163  return featureEdge().found(edgeI);
164  }
165 
166  //- Are two edges connected at feature point?
167  // Is local to face since point might be seen as feature point
168  // from one face but not from another.
169  bool isFeaturePoint(const label edge0, const label edge1) const;
170 
171  //- Is vertexI on facei used by two edges that form feature
172  // point
173  bool isFeatureVertex(const label facei, const label vertI) const;
174 
175 
176  // Member Operators
177 
178  //- Disallow default bitwise assignment
179  void operator=(const cellFeatures&) = delete;
180 };
181 
182 
183 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
184 
185 } // End namespace Foam
186 
187 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
188 
189 #endif
190 
191 // ************************************************************************* //
Cell-face mesh analysis engine.
Definition: primitiveMesh.H:74
bool isFeatureVertex(const label facei, const label vertI) const
Is vertexI on facei used by two edges that form feature.
Definition: cellFeatures.C:481
bool isFeatureEdge(const label edgeI) const
Is edge a feature edge (uniquely determined since on cell.
Definition: cellFeatures.H:160
void operator=(const cellFeatures &)=delete
Disallow default bitwise assignment.
const labelHashSet & featureEdge() const
Definition: cellFeatures.H:131
const List< DynamicList< label > > & faceMap() const
New to old faceMap. Guaranteed to be shrunk.
Definition: cellFeatures.H:146
bool found(const Key &) const
Return true if hashedEntry is found in table.
Definition: HashTable.C:113
~cellFeatures()
Destructor.
Definition: cellFeatures.C:406
const faceList & faces() const
Definition: cellFeatures.H:136
bool isFeaturePoint(const label edge0, const label edge1) const
Are two edges connected at feature point?
Definition: cellFeatures.C:414
cellFeatures(const primitiveMesh &, const scalar minCos, const label celli)
Construct from cell in mesh.
Definition: cellFeatures.C:376
Cell analysis class.
Definition: cellFeatures.H:61
Namespace for OpenFOAM.