ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / polyMesh / zones / pointZone / pointZone.H
blob9bc911153adee519877b5015dafe434f55857aaf
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::pointZone
27 Description
28     A subset of mesh points.
29     The labels of points in the zone can be obtained from the addressing()
30     list.
32     For quick check whether a point belongs to the zone use the lookup
33     mechanism in pointZoneMesh, where all the zoned points are registered
34     with their zone number.
36 SourceFiles
37     pointZone.C
38     pointZoneNew.C
40 \*---------------------------------------------------------------------------*/
42 #ifndef pointZone_H
43 #define pointZone_H
45 #include "zone.H"
46 #include "pointZoneMeshFwd.H"
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 namespace Foam
53 // Forward declaration of friend functions and operators
55 class pointZone;
56 Ostream& operator<<(Ostream&, const pointZone&);
59 /*---------------------------------------------------------------------------*\
60                           Class pointZone Declaration
61 \*---------------------------------------------------------------------------*/
63 class pointZone
65     public zone
68 protected:
70     // Protected data
72         //- Reference to zone list
73         const pointZoneMesh& zoneMesh_;
75     // Private Member Functions
77         //- Disallow default bitwise copy construct
78         pointZone(const pointZone&);
80 public:
82     // Static data members
84         //- The name associated with the zone-labels dictionary entry
85         static const char * const labelsName;
88     //- Runtime type information
89     TypeName("pointZone");
92     // Declare run-time constructor selection tables
94         declareRunTimeSelectionTable
95         (
96             autoPtr,
97             pointZone,
98             dictionary,
99             (
100                 const word& name,
101                 const dictionary& dict,
102                 const label index,
103                 const pointZoneMesh& zm
104             ),
105             (name, dict, index, zm)
106         );
109     // Constructors
111         //- Construct from components
112         pointZone
113         (
114             const word& name,
115             const labelUList& addr,
116             const label index,
117             const pointZoneMesh&
118         );
120         //- Construct from components, transferring contents
121         pointZone
122         (
123             const word& name,
124             const Xfer<labelList>& addr,
125             const label index,
126             const pointZoneMesh&
127         );
129         //- Construct from dictionary
130         pointZone
131         (
132             const word& name,
133             const dictionary&,
134             const label index,
135             const pointZoneMesh&
136         );
138         //- Construct given the original zone and resetting the
139         //  point list and zone mesh information
140         pointZone
141         (
142             const pointZone&,
143             const labelUList& addr,
144             const label index,
145             const pointZoneMesh&
146         );
148         //- Construct given the original zone, resetting the
149         //  face list and zone mesh information
150         pointZone
151         (
152             const pointZone&,
153             const Xfer<labelList>& addr,
154             const label index,
155             const pointZoneMesh&
156         );
158         //- Construct and return a clone, resetting the zone mesh
159         virtual autoPtr<pointZone> clone(const pointZoneMesh& zm) const
160         {
161             return autoPtr<pointZone>
162             (
163                 new pointZone(*this, *this, index(), zm)
164             );
165         }
167         //- Construct and return a clone, resetting the point list
168         //  and zone mesh
169         virtual autoPtr<pointZone> clone
170         (
171             const pointZoneMesh& zm,
172             const label index,
173             const labelUList& addr
174         ) const
175         {
176             return autoPtr<pointZone>
177             (
178                 new pointZone(*this, addr, index, zm)
179             );
180         }
183     // Selectors
185         //- Return a pointer to a new point zone
186         //  created on freestore from dictionary
187         static autoPtr<pointZone> New
188         (
189             const word& name,
190             const dictionary&,
191             const label index,
192             const pointZoneMesh&
193         );
196     //- Destructor
197     virtual ~pointZone();
200     // Member Functions
202         //- Return zoneMesh reference
203         const pointZoneMesh& zoneMesh() const;
205         //- Helper function to re-direct to zone::localID(...)
206         label whichPoint(const label globalPointID) const;
208         //- Check zone definition. Return true if in error.
209         virtual bool checkDefinition(const bool report = false) const;
211         //- Check whether zone is synchronised across coupled boundaries. Return
212         //  true if in error.
213         virtual bool checkParallelSync(const bool report = false) const;
215         //- Correct patch after moving points
216         virtual void movePoints(const pointField&)
217         {}
219         //- Write dictionary
220         virtual void writeDict(Ostream&) const;
223     // Member Operators
225         //- Assign to zone, clearing demand-driven data
226         void operator=(const pointZone&);
228         //- Assign addressing, clearing demand-driven data
229         void operator=(const labelUList&);
231         //- Assign addressing, clearing demand-driven data
232         void operator=(const Xfer<labelList>&);
235     // I-O
237         //- Ostream Operator
238         friend Ostream& operator<<(Ostream&, const pointZone&);
242 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
244 } // End namespace Foam
246 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
248 #endif
250 // ************************************************************************* //