FreeFOAM The Cross-Platform CFD Toolkit
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) 1991-2010 OpenCFD Ltd.
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 <OpenFOAM/polyMesh.H>
44 #include <OpenFOAM/labelIOList.H>
45 #include <OpenFOAM/typeInfo.H>
46 
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 
49 namespace Foam
50 {
51 
52 /*---------------------------------------------------------------------------*\
53  Class polyDualMesh Declaration
54 \*---------------------------------------------------------------------------*/
55 
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,
76  label& nInternalFaces
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 
199  ~polyDualMesh();
200 
201 
202  // Member Functions
203 
204  // Access
205 
206  //- From polyMesh cell to dual point
207  const labelIOList& cellPoint() const
208  {
209  return cellPoint_;
210  }
211 
212  //- From polyMesh patch face to dual point
214  {
215  return boundaryFacePoint_;
216  }
217 };
218 
219 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
220 
221 } // End namespace Foam
222 
223 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
224 
225 #endif
226 
227 // ************************ vim: set sw=4 sts=4 et: ************************ //