BUG: createBaffles.C: converting coupled faces into baffles
[OpenFOAM-2.0.x.git] / applications / utilities / mesh / conversion / sammToFoam / sammMesh.H
blob8c7c018c0a86f0aa63b64e1bc05d75030c859773
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::sammMesh
27 Description
28     A messy mesh class which supports the possibility of creating a shapeMesh
29     for regular Samm meshes (no arbitrary interfaces or collapsed SAMM cells).
30     If any of these special feateres exist, the mesh is created as polyMesh
32 SourceFiles
33     sammMesh.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef sammMesh_H
38 #define sammMesh_H
40 #include "polyMesh.H"
41 #include "cellShape.H"
42 #include "cellList.H"
43 #include "polyPatchList.H"
45 #ifndef namespaceFoam
46 #define namespaceFoam
47     using namespace Foam;
48 #endif
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 // Forward declaration of classes
54 /*---------------------------------------------------------------------------*\
55                            Class sammMesh Declaration
56 \*---------------------------------------------------------------------------*/
58 class sammMesh
60     // Private data
62         //- Name of the case
63         fileName casePrefix_;
65         //- Database
66         const Time& runTime_;
68         //- Points supporting the mesh
69         pointField points_;
71         //- Cell shapes
72         cellShapeList cellShapes_;
74         //- Boundary faces
75         faceListList boundary_;
77         //- Boundary patch types
78         wordList patchTypes_;
80         //- Default boundary patch name
81         word defaultFacesName_;
83         //- Default boundary patch types
84         word defaultFacesType_;
86         //- Boundary patch names
87         wordList patchNames_;
89         //- Boundary patch physical types
90         wordList patchPhysicalTypes_;
92         //- Point labels (SAMM point numbering is not necessarily contiguous)
93         labelList starPointLabelLookup_;
95         //- Point labels (SAMM point numbering is not necessarily contiguous)
96         labelList starCellLabelLookup_;
98         //- List of faces for every cell
99         faceListList cellFaces_;
101         //- Global face list for polyMesh
102         faceList meshFaces_;
104         //- Cells as polyhedra for polyMesh
105         cellList cellPolys_;
107         //- Number of internal faces for polyMesh
108         label nInternalFaces_;
110         //- Polyhedral mesh boundary patch start indices
111         labelList polyBoundaryPatchStartIndices_;
113         //- Point-cell addressing. Used for topological analysis
114         // Warning. This point cell addressing list potentially contains
115         // duplicate cell entries. Use additional checking
116         mutable labelListList* pointCellsPtr_;
118         //- Can the mesh be treated as a shapeMesh?
119         bool isShapeMesh_;
121     // Private static data members
123         //- Pointers to cell models
124         static const cellModel* unknownPtr_;
125         static const cellModel* hexPtr_;
126         static const cellModel* wedgePtr_;
127         static const cellModel* prismPtr_;
128         static const cellModel* pyrPtr_;
129         static const cellModel* tetPtr_;
130         static const cellModel* tetWedgePtr_;
132         static const cellModel* sammTrim1Ptr_;
133         static const cellModel* sammTrim2Ptr_;
134         static const cellModel* sammTrim3Ptr_;
135         static const cellModel* sammTrim4Ptr_;
136         static const cellModel* sammTrim5Ptr_;
137         static const cellModel* sammTrim8Ptr_;
139         static const label shapeFaceLookup[19][9];
142         //- SAMM addressing data
143         static List<const cellModel*> sammShapeLookup;
144         static List<const label*> sammAddressingTable;
146     // Private Member Functions
148         //- Disallow default bitwise copy construct
149         sammMesh(const sammMesh&);
151         //- Disallow default bitwise assignment
152         void operator=(const sammMesh&);
155         //- Fill SAMM lookup tables
156         void fillSammCellShapeTable();
157         void fillSammAddressingTable();
160         //- Read the points file
161         void readPoints(const scalar scaleFactor);
164         //- Read the cells file
165         void readCells();
167         void addRegularCell
168         (
169             const labelList& labels,
170             const label nCreatedCells
171         );
173         void addSAMMcell
174         (
175             const label typeFlag,
176             const labelList& globalLabels,
177             const label nCreatedCells
178         );
181         //- Read the boundary file
182         void readBoundary();
185         //- Check and correct collapsed edges on faces
186         // Note. If a collapsed edge is found, the mesh is no longer shapeMesh
187         void fixCollapsedEdges();
189         //- Read couples
190         void readCouples();
192         //- Calculate pointCells
193         void calcPointCells() const;
195         const labelListList& pointCells() const;
197         //- Create boundary faces from the quads
198         void createBoundaryFaces();
200         //- Specialist version of face comparison to deal with
201         // PROSTAR boundary format idiosyncracies
202         bool sammEqualFace
203         (
204             const face& boundaryFace,
205             const face& cellFace
206         ) const;
208         //- Purge cell shapes
209         void purgeCellShapes();
211         //- Make polyhedral cells and global faces if the mesh is polyhedral
212         void createPolyCells();
214         //- Make polyhedral boundary from shape boundary
215         // (adds more faces to the face list)
216         void createPolyBoundary();
218         //- Make polyhedral mesh data (packing)
219         void createPolyMeshData();
221         //- Add polyhedral boundary
222         List<polyPatch* > polyBoundaryPatches(const polyMesh&);
225 public:
227     // Static data members
230     // Constructors
232         //- Construct from case name
233         sammMesh
234         (
235             const fileName& prefix,
236             const Time& rt,
237             const scalar scaleFactor
238         );
241     //- Destructor
242     ~sammMesh();
245     // Member Functions
247         //- Write mesh
248         void writeMesh();
250     // Member Operators
252     // Friend Functions
254     // Friend Operators
256     // IOstream Operators
257     // Ostream Operator
261 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
263 #endif
265 // ************************************************************************* //