polyDualMesh.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2016 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::polyDualMesh
26 
27 Description
28  Creates dual of polyMesh.
29 
30  Every polyMesh point becomes a cell on the dual mesh
31 
32  Every polyMesh cell and patchFace becomes a point on the dual mesh.
33 
34 
35 SourceFiles
36  polyDualMesh.C
37 
38 \*---------------------------------------------------------------------------*/
39 
40 #ifndef polyDualMesh_H
41 #define polyDualMesh_H
42 
43 #include "polyMesh.H"
44 #include "labelIOList.H"
45 #include "typeInfo.H"
46 
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 
49 namespace Foam
50 {
51 
52 /*---------------------------------------------------------------------------*\
53  Class polyDualMesh Declaration
54 \*---------------------------------------------------------------------------*/
55 
56 class polyDualMesh
57 :
58  public polyMesh
59 {
60  // Private data
61 
62  //- From polyMesh cell to my point
63  labelIOList cellPoint_;
64 
65  //- From polyMesh boundary face (face-mesh.nInternalFaces()) to my point
66  labelIOList boundaryFacePoint_;
67 
68 
69  // Private Member Functions
70 
71  static labelList getFaceOrder
72  (
73  const labelList& faceOwner,
74  const labelList& faceNeighbour,
75  const cellList& cells,
77  );
78 
79  static void getPointEdges
80  (
81  const primitivePatch& patch,
82  const label facei,
83  const label pointi,
84  label& e0,
85  label& e1
86  );
87 
88  static labelList collectPatchSideFace
89  (
90  const polyPatch& patch,
91  const label patchToDualOffset,
92  const labelList& edgeToDualPoint,
93  const labelList& pointToDualPoint,
94  const label pointi,
95 
96  label& edgeI
97  );
98 
99  static void collectPatchInternalFace
100  (
101  const polyPatch& patch,
102  const label patchToDualOffset,
103  const labelList& edgeToDualPoint,
104 
105  const label pointi,
106  const label startEdgeI,
107 
108  labelList& dualFace2,
109  labelList& featEdgeIndices2
110  );
111 
112  static void splitFace
113  (
114  const polyPatch& patch,
115  const labelList& pointToDualPoint,
116 
117  const label pointi,
118  const labelList& dualFace,
119  const labelList& featEdgeIndices,
120 
121  DynamicList<face>& dualFaces,
122  DynamicList<label>& dualOwner,
123  DynamicList<label>& dualNeighbour,
124  DynamicList<label>& dualRegion
125  );
126 
127  static void dualPatch
128  (
129  const polyPatch& patch,
130  const label patchToDualOffset,
131  const labelList& edgeToDualPoint,
132  const labelList& pointToDualPoint,
133 
134  const pointField& dualPoints,
135 
136  DynamicList<face>& dualFaces,
137  DynamicList<label>& dualOwner,
138  DynamicList<label>& dualNeighbour,
139  DynamicList<label>& dualRegion
140  );
141 
142  void calcDual
143  (
144  const polyMesh& mesh,
145  const labelList& featureEdges,
146  const labelList& featurePoints
147  );
148 
149 
150  //- Disallow default bitwise copy construct
151  polyDualMesh(const polyDualMesh&);
152 
153  //- Disallow default bitwise assignment
154  void operator=(const polyDualMesh&);
155 
156 
157 public:
158 
159  //- Runtime type information
160  ClassName("polyDualMesh");
161 
162 
163  // Constructors
164 
165  //- Construct from IOobject
166  polyDualMesh(const IOobject&);
167 
168  //- Construct from polyMesh and list of edges and points to represent.
169  // Feature edge and point labels are in local addressing of a patch
170  // over all boundary faces.
172  (
173  const polyMesh&,
174  const labelList& featureEdges,
175  const labelList& featurePoints
176  );
177 
178  //- Construct from polyMesh and feature edge angle. Uses calcFeatures
179  // below to determine feature edges and points.
181  (
182  const polyMesh&,
183  const scalar featureCos
184  );
185 
186  //- Helper function to create feature edges and points based on
187  // feature angle and patches.
188  static void calcFeatures
189  (
190  const polyMesh&,
191  const scalar featureCos,
192  labelList& featureEdges,
193  labelList& featurePoints
194  );
195 
196 
197  //- Destructor
198  ~polyDualMesh();
199 
200 
201  // Member Functions
202 
203  // Access
204 
205  //- From polyMesh cell to dual point
206  const labelIOList& cellPoint() const
207  {
208  return cellPoint_;
209  }
210 
211  //- From polyMesh patch face to dual point
212  const labelIOList& boundaryFacePoint() const
213  {
214  return boundaryFacePoint_;
215  }
216 };
217 
218 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
219 
220 } // End namespace Foam
221 
222 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
223 
224 #endif
225 
226 // ************************************************************************* //
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
const labelIOList & cellPoint() const
From polyMesh cell to dual point.
Definition: polyDualMesh.H:205
ClassName("polyDualMesh")
Runtime type information.
static void calcFeatures(const polyMesh &, const scalar featureCos, labelList &featureEdges, labelList &featurePoints)
Helper function to create feature edges and points based on.
const cellList & cells() const
const labelIOList & boundaryFacePoint() const
From polyMesh patch face to dual point.
Definition: polyDualMesh.H:211
A list of faces which address into the list of points.
dynamicFvMesh & mesh
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
Definition: DynamicList.H:56
~polyDualMesh()
Destructor.
virtual const labelList & faceNeighbour() const
Return face neighbour.
Definition: polyMesh.C:1023
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:74
virtual const labelList & faceOwner() const
Return face owner.
Definition: polyMesh.C:1017
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
label nInternalFaces() const
Creates dual of polyMesh.
Definition: polyDualMesh.H:55
Namespace for OpenFOAM.