Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / mesh / cfMesh / utilities / meshes / polyMeshGen / polyMeshGenFaces.H
blobfb87d9dc9a676a4690530c694117529d1db1e2f8
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 3 of the License, or (at your
14     option) any later version.
16     cfMesh 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 cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     polyMeshGenFaces
27 Description
28     Mesh with geometry and faces. It can be used for volume and surface meshes
30 SourceFiles
31     polyMeshGenFaces.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef polyMeshGenFaces_H
36 #define polyMeshGenFaces_H
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 #include "polyMeshGenPoints.H"
41 #include "faceListPMG.H"
42 #include "labelIOList.H"
43 #include "processorBoundaryPatch.H"
44 #include "boundaryPatch.H"
46 namespace Foam
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 class polyMeshGenFaces
52 : public polyMeshGenPoints
54 protected:
56     // Protected data
57         //- list of faces
58         faceListPMG faces_;
60         //- inter-processor boundaries. These faces are located after the other
61         //- boundary faces in the list of faces. The processor
62         //- boundaries are internal faces in the end.
63         PtrList<processorBoundaryPatch> procBoundaries_;
65         //- boundary data
66         PtrList<boundaryPatch> boundaries_;
68         //- face subsets
69         std::map<label, meshSubset> faceSubsets_;
71     // Addressing data
72         //- number of internal faces, owner and neighbour
73         mutable label nIntFaces_;
74         mutable labelIOList* ownerPtr_;
75         mutable labelIOList* neighbourPtr_;
77     // Private member functions
79         //- calculate owner and neighbour addressing
80         virtual void calculateOwnersAndNeighbours() const = 0;
82         //- clear all pointer data
83         void clearOut() const;
85     // Disallow bitwise assignment
86         void operator=(const polyMeshGenFaces&);
88         polyMeshGenFaces(const polyMeshGenFaces&);
90 public:
92     friend class polyMeshGenModifier;
94     // Constructors
95         //- Null constructor
96         polyMeshGenFaces(const Time&);
98         //- Construct from components without the boundary
99         polyMeshGenFaces
100         (
101             const Time&,
102             const pointField& points,
103             const faceList& faces
104         );
106         //- Construct from components with the boundary
107         polyMeshGenFaces
108         (
109             const Time&,
110             const pointField& points,
111             const faceList& faces,
112             const wordList& patchNames,
113             const labelList& patchStart,
114             const labelList& nFacesInPatch
115         );
117     // Destructor
118         virtual ~polyMeshGenFaces();
120     // Member functions
122         //- access to faces
123         inline const faceListPMG& faces() const;
125         //- return number of internal faces
126         inline label nInternalFaces() const;
128         //- owner and neighbour cells for faces
129         inline const labelList& owner() const;
130         inline const labelList& neighbour() const;
132     // Boundary data
134         //- inter-processor boundaries
135         inline const PtrList<processorBoundaryPatch>& procBoundaries() const;
137         //- return processor patch label for the given face label
138         label faceIsInProcPatch(const label faceLabel) const;
140         //- ordinary boundaries
141         inline const PtrList<boundaryPatch>& boundaries() const;
143         //- return patch label for the given face label
144         label faceIsInPatch(const label faceLabel) const;
146         //- return list of patches in the boundary
147         wordList patchNames() const;
149         //- return the index of a patch given its name
150         label getPatchID(const word& patchName) const;
152         //- return the name of a patch given its ID
153         word getPatchName(const label patchID) const;
155         //- return a list of patch indices corresponding to the given
156         // name, expanding regular expressions
157         labelList findPatches(const word& patchName) const;
159     // Subsets
161         label addFaceSubset(const word&);
162         void removeFaceSubset(const label);
163         word faceSubsetName(const label) const;
164         label faceSubsetIndex(const word&) const;
165         inline void addFaceToSubset(const label, const label);
166         inline void removeFaceFromSubset(const label, const label);
167         inline void faceInSubsets(const label, DynList<label>&) const;
168         inline void faceSubsetIndices(DynList<label>&) const;
169         template<class ListType>
170         inline void facesInSubset(const label, ListType&) const;
171         template<class ListType>
172         inline void updateFaceSubsets(const ListType&);
173         inline void updateFaceSubsets(const VRWGraph&);
175     // Read mesh
176         void read();
178     // Write mesh
179         void write() const;
182 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
184 } // End namespace Foam
186 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
188 #include "polyMeshGenFacesI.H"
190 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
192 #endif
194 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //