Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / meshTools / sets / topoSets / topoSet.H
blob3caaa3b10a9dfd34537bb66c211a6586e04f54b3
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
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::topoSet
27 Description
28     General set of labels of mesh quantity (points, cells, faces).
30     Contains various 'notImplemented' functions, but I do not want to make
31     this class abstract since it is quite handy to work on topoSets.
33 SourceFiles
34     topoSet.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef topoSet_H
39 #define topoSet_H
41 #include "HashSet.H"
42 #include "regIOobject.H"
43 #include "labelList.H"
44 #include "typeInfo.H"
45 #include "autoPtr.H"
46 #include "pointField.H"
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 namespace Foam
54 class mapPolyMesh;
55 class polyMesh;
56 class primitiveMesh;
58 /*---------------------------------------------------------------------------*\
59                            Class topoSet Declaration
60 \*---------------------------------------------------------------------------*/
62 class topoSet
64     public regIOobject,
65     public labelHashSet
68 protected:
70     // Protected Member Functions
72         //- Update map from map. Used to update cell/face labels
73         //  after morphing
74         void updateLabels(const labelList& map);
76         //- Check validity of contents.
77         void check(const label maxLabel);
79         //- Write part of contents nicely formatted. Prints labels only.
80         void writeDebug
81         (
82             Ostream& os,
83             const label maxElem,
84             topoSet::const_iterator& iter,
85             label& elemI
86         ) const;
88         //- Write part of contents nicely formatted. Prints label
89         //  and corresponding coordinate.
90         void writeDebug
91         (
92             Ostream& os,
93             const pointField& coords,
94             const label maxElem,
95             topoSet::const_iterator& iter,
96             label& elemI
97         ) const;
99         //- Write labels and coordinates columnwise to os. Truncate to maxLen.
100         void writeDebug
101         (
102             Ostream& os,
103             const pointField& coords,
104             const label maxLen
105         ) const;
108         //- Disallow default bitwise copy construct
109         topoSet(const topoSet&);
111 public:
113     //- Runtime type information
114     TypeName("topoSet");
117     // Static
119         //- Name of file set will use.
120         static fileName localPath(const polyMesh& mesh, const word& name);
123     // Declare run-time constructor selection table
125         // For the direct constructor
126         declareRunTimeSelectionTable
127         (
128             autoPtr,
129             topoSet,
130             word,
131             (
132                 const polyMesh& mesh,
133                 const word& name,
134                 readOption r,
135                 writeOption w
136             ),
137             (mesh, name, r, w)
138         );
140         // For the constructor from size
141         declareRunTimeSelectionTable
142         (
143             autoPtr,
144             topoSet,
145             size,
146             (
147                 const polyMesh& mesh,
148                 const word& name,
149                 const label size,
150                 writeOption w
151             ),
152             (mesh, name, size, w)
153         );
155         // For the constructor as copy
156         declareRunTimeSelectionTable
157         (
158             autoPtr,
159             topoSet,
160             set,
161             (
162                 const polyMesh& mesh,
163                 const word& name,
164                 const topoSet& set,
165                 writeOption w
166             ),
167             (mesh, name, set, w)
168         );
171     // Constructors
174         //- Construct from IOobject as explicitly passed type.
175         //  Can't use typeName info here since subclasses not yet instantiated
176         topoSet(const IOobject&, const word& wantedType);
178         //- Construct from polyMesh and name. Searches for a polyMesh/sets
179         //  directory but not beyond mesh.facesInstance.
180         topoSet
181         (
182             const polyMesh& mesh,
183             const word& wantedType,
184             const word& name,
185             readOption r=MUST_READ,
186             writeOption w=NO_WRITE
187         );
189         //- Construct empty from additional size of labelHashSet.
190         //  Searches for a polyMesh/sets
191         //  directory but not beyond mesh.facesInstance.
192         topoSet
193         (
194             const polyMesh& mesh,
195             const word& name,
196             const label,
197             writeOption w=NO_WRITE
198         );
200         //- Construct empty from additional labelHashSet
201         //  Searches for a polyMesh/sets
202         //  directory but not beyond mesh.facesInstance.
203         topoSet
204         (
205             const polyMesh& mesh,
206             const word& name,
207             const labelHashSet&,
208             writeOption w=NO_WRITE
209         );
211         //- Construct empty from IOobject and size.
212         topoSet(const IOobject&, const label size);
214         //- Construct from IOobject and labelHashSet.
215         topoSet(const IOobject&, const labelHashSet&);
219         //- Clone
220         autoPtr<topoSet> clone() const
221         {
222             notImplemented("autoPtr<topoSet> clone() const");
223             return autoPtr<topoSet>(NULL);
224         }
227     // Selectors
229         //- Return a pointer to a toposet read from file
230         static autoPtr<topoSet> New
231         (
232             const word& setType,
233             const polyMesh& mesh,
234             const word& name,
235             readOption r=MUST_READ,
236             writeOption w=NO_WRITE
237         );
239         //- Return a pointer to a new toposet of given size
240         static autoPtr<topoSet> New
241         (
242             const word& setType,
243             const polyMesh& mesh,
244             const word& name,
245             const label size,
246             writeOption w=NO_WRITE
247         );
249         //- Return a pointer to a new toposet as copy of another toposet
250         static autoPtr<topoSet> New
251         (
252             const word& setType,
253             const polyMesh& mesh,
254             const word& name,
255             const topoSet& set,
256             writeOption w=NO_WRITE
257         );
260     //- Destructor
261     virtual ~topoSet();
264     // Member functions
266         //- Invert contents. (insert all members 0..maxLen-1 which were not in
267         //  set)
268         virtual void invert(const label maxLen);
270         //- Subset contents. Only elements present in both sets remain.
271         virtual void subset(const topoSet& set);
273         //- Add elements present in set.
274         virtual void addSet(const topoSet& set);
276         //- Delete elements present in set.
277         virtual void deleteSet(const topoSet& set);
279         //- Sync set across coupled patches.
280         virtual void sync(const polyMesh& mesh);
282         //- Write labels columnwise to os. Truncate to maxLen.
283         virtual void writeDebug(Ostream& os, const label maxLen) const;
285         //- Like above but also writes mesh related quantity
286         //  (usually coordinate).
287         virtual void writeDebug
288         (
289             Ostream& os,
290             const primitiveMesh&,
291             const label maxLen
292         ) const = 0;
294         //- Write contents.
295         virtual bool writeData(Ostream&) const;
297         //- Update any stored data for new labels. Not implemented.
298         virtual void updateMesh(const mapPolyMesh& morphMap);
300         //- Return max allowable index (+1). Not implemented.
301         virtual label maxSize(const polyMesh& mesh) const = 0;
305     // Member operators
307         //- Copy labelHashSet part only
308         void operator=(const topoSet&);
313 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
315 } // End namespace Foam
317 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
319 #endif
321 // ************************************************************************* //