ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / conversion / polyDualMesh / polyDualMesh.H
blobf063138766ad6ea8ce4776ca038bd0ac0e982b19
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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.
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.
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/>.
24 Class
25     Foam::polyDualMesh
27 Description
28     Creates dual of polyMesh.
30     Every polyMesh point becomes a cell on the dual mesh
32     Every polyMesh cell and patchFace becomes a point on the dual mesh.
35 SourceFiles
36     polyDualMesh.C
38 \*---------------------------------------------------------------------------*/
40 #ifndef polyDualMesh_H
41 #define polyDualMesh_H
43 #include "polyMesh.H"
44 #include "labelIOList.H"
45 #include "typeInfo.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 /*---------------------------------------------------------------------------*\
53                            Class polyDualMesh Declaration
54 \*---------------------------------------------------------------------------*/
56 class polyDualMesh
58     public polyMesh
60     // Private data
62         //- From polyMesh cell to my point
63         labelIOList cellPoint_;
65         //- From polyMesh boundary face (face-mesh.nInternalFaces()) to my point
66         labelIOList boundaryFacePoint_;
69     // Private Member Functions
71         static labelList getFaceOrder
72         (
73             const labelList& faceOwner,
74             const labelList& faceNeighbour,
75             const cellList& cells,
76             label& nInternalFaces
77         );
79         static void getPointEdges
80         (
81             const primitivePatch& patch,
82             const label faceI,
83             const label pointI,
84             label& e0,
85             label& e1
86         );
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,
96             label& edgeI
97         );
99         static void collectPatchInternalFace
100         (
101             const polyPatch& patch,
102             const label patchToDualOffset,
103             const labelList& edgeToDualPoint,
105             const label pointI,
106             const label startEdgeI,
108             labelList& dualFace2,
109             labelList& featEdgeIndices2
110         );
112         static void splitFace
113         (
114             const polyPatch& patch,
115             const labelList& pointToDualPoint,
117             const label pointI,
118             const labelList& dualFace,
119             const labelList& featEdgeIndices,
121             DynamicList<face>& dualFaces,
122             DynamicList<label>& dualOwner,
123             DynamicList<label>& dualNeighbour,
124             DynamicList<label>& dualRegion
125         );
127         static void dualPatch
128         (
129             const polyPatch& patch,
130             const label patchToDualOffset,
131             const labelList& edgeToDualPoint,
132             const labelList& pointToDualPoint,
134             const pointField& dualPoints,
136             DynamicList<face>& dualFaces,
137             DynamicList<label>& dualOwner,
138             DynamicList<label>& dualNeighbour,
139             DynamicList<label>& dualRegion
140         );
142         void calcDual
143         (
144             const polyMesh& mesh,
145             const labelList& featureEdges,
146             const labelList& featurePoints
147         );
150         //- Disallow default bitwise copy construct
151         polyDualMesh(const polyDualMesh&);
153         //- Disallow default bitwise assignment
154         void operator=(const polyDualMesh&);
157 public:
159     //- Runtime type information
160     ClassName("polyDualMesh");
163     // Constructors
165         //- Construct from IOobject
166         polyDualMesh(const IOobject&);
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.
171         polyDualMesh
172         (
173             const polyMesh&,
174             const labelList& featureEdges,
175             const labelList& featurePoints
176         );
178         //- Construct from polyMesh and feature edge angle. Uses calcFeatures
179         //  below to determine feature edges and points.
180         polyDualMesh
181         (
182             const polyMesh&,
183             const scalar featureCos
184         );
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         );
197     //- Destructor
198     ~polyDualMesh();
201     // Member Functions
203         // Access
205             //- From polyMesh cell to dual point
206             const labelIOList& cellPoint() const
207             {
208                 return cellPoint_;
209             }
211             //- From polyMesh patch face to dual point
212             const labelIOList& boundaryFacePoint() const
213             {
214                 return boundaryFacePoint_;
215             }
218 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
220 } // End namespace Foam
222 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
224 #endif
226 // ************************************************************************* //