Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / meshLibrary / utilities / meshes / polyMeshGen / polyMeshGenFaces.H
blob7ee37e6876aa46801a721325267961ee25f075dc
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:
55     
56     // Protected data
57         //- list of faces
58         faceListPMG faces_;
59     
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_;
64     
65         //- boundary data
66         PtrList<boundaryPatch> boundaries_;
68         //- face subsets
69         std::map<label, meshSubset> faceSubsets_;
70     
71     // Addressing data
72         //- number of internal faces, owner and neighbour
73         mutable label nIntFaces_;
74         mutable labelIOList* ownerPtr_;
75         mutable labelIOList* neighbourPtr_;
76         
77     // Private member functions
78     
79         //- calculate owner and neighbour addressing
80         virtual void calculateOwnersAndNeighbours() const = 0;
81         
82         //- clear all pointer data
83         void clearOut() const;
84     
85     // Disallow bitwise assignment
86         void operator=(const polyMeshGenFaces&);
87     
88         polyMeshGenFaces(const polyMeshGenFaces&);
90 public:
91     
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         );
116         
117     // Destructor
118         virtual ~polyMeshGenFaces();
119         
120     // Member functions
122         //- access to faces
123         inline const faceListPMG& faces() const;
124         
125         //- return number of internal faces
126         inline label nInternalFaces() const;
127         
128         //- owner and neighbour cells for faces
129         inline const labelList& owner() const;
130         inline const labelList& neighbour() const;
131         
132     // Boundary data
133     
134         //- inter-processor boundaries
135         inline const PtrList<processorBoundaryPatch>& procBoundaries() const;
136         
137         //- return processor patch label for the given face label
138         label faceIsInProcPatch(const label faceLabel) const;
139         
140         //- ordinary boundaries
141         inline const PtrList<boundaryPatch>& boundaries() const;
142         
143         //- return patch label for the given face label
144         label faceIsInPatch(const label faceLabel) const;
145     
146     // Subsets
147     
148         label addFaceSubset(const word&);
149         void removeFaceSubset(const label);
150         word faceSubsetName(const label) const;
151         label faceSubsetIndex(const word&) const;
152         inline void addFaceToSubset(const label, const label);
153         inline void removeFaceFromSubset(const label, const label);
154         inline void faceInSubsets(const label, DynList<label>&) const;
155         inline void faceSubsetIndices(DynList<label>&) const;
156         template<class ListType>
157         inline void facesInSubset(const label, ListType&) const;
158         template<class ListType>
159         inline void updateFaceSubsets(const ListType&);
160         inline void updateFaceSubsets(const VRWGraph&);
161         
162     // Read mesh
163         void read();
164         
165     // Write mesh
166         void write() const;
169 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
171 } // End namespace Foam
173 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
175 #include "polyMeshGenFacesI.H"
177 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
179 #endif
181 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //