ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / polyMesh / zones / ZoneMesh / ZoneMesh.H
blob08ef19b4fcc8bd3bfd3b92d6af0aa7bf04648170
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::ZoneMesh
27 Description
28     A list of mesh zones.
30 SourceFiles
31     ZoneMesh.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef ZoneMesh_H
36 #define ZoneMesh_H
38 #include "List.H"
39 #include "regIOobject.H"
40 #include "pointFieldsFwd.H"
41 #include "Map.H"
42 #include "PackedBoolList.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 // Forward declaration of friend functions and operators
53 template<class ZoneType, class MeshType> class ZoneMesh;
55 template<class ZoneType, class MeshType>
56 Ostream& operator<<(Ostream&, const ZoneMesh<ZoneType, MeshType>&);
58 /*---------------------------------------------------------------------------*\
59                            Class ZoneMesh Declaration
60 \*---------------------------------------------------------------------------*/
62 template<class ZoneType, class MeshType>
63 class ZoneMesh
65     public PtrList<ZoneType>,
66     public regIOobject
68     // Private data
70         //- Reference to mesh
71         const MeshType& mesh_;
73         //- Map of zone labels for given element
74         mutable Map<label>* zoneMapPtr_;
77     // Private Member Functions
79         //- Disallow construct as copy
80         ZoneMesh(const ZoneMesh&);
82         //- Disallow assignment
83         void operator=(const ZoneMesh<ZoneType, MeshType>&);
86         //- Create zone map
87         void calcZoneMap() const;
90 public:
92     // Constructors
94         //- Read constructor given IOobject and a MeshType reference
95         ZoneMesh
96         (
97             const IOobject&,
98             const MeshType&
99         );
101         //- Construct given size
102         ZoneMesh
103         (
104             const IOobject&,
105             const MeshType&,
106             const label size
107         );
109     //- Destructor
110     ~ZoneMesh();
113     // Member Functions
115         //- Return the mesh reference
116         const MeshType& mesh() const
117         {
118             return mesh_;
119         }
121         //- Map of zones containing zone index for all zoned elements
122         //  Return -1 if the object is not in the zone
123         const Map<label>& zoneMap() const;
125         //- Given a global object index, return the zone it is in.
126         // If object does not belong to any zones, return -1
127         label whichZone(const label objectIndex) const;
129         //- Return a list of zone types
130         wordList types() const;
132         //- Return a list of zone names
133         wordList names() const;
135         //- Return zone indices for all matches
136         labelList findIndices(const keyType&) const;
138         //- Return zone index for the first match, return -1 if not found
139         label findIndex(const keyType&) const;
141         //- Find zone index given a name
142         label findZoneID(const word& zoneName) const;
144         //- Mark cells that match the zone specification
145         PackedBoolList findMatching(const keyType&) const;
147         //- Clear addressing
148         void clearAddressing();
150         //- Clear the zones
151         void clear();
153         //- Check zone definition. Return true if in error.
154         bool checkDefinition(const bool report = false) const;
156         //- Check whether all procs have all zones and in same order. Return
157         //  true if in error.
158         bool checkParallelSync(const bool report = false) const;
160         //- Correct zone mesh after moving points
161         void movePoints(const pointField&);
163         //- writeData member function required by regIOobject
164         bool writeData(Ostream&) const;
166     // Member Operators
168         //- Return const and non-const reference to ZoneType by index.
169         using PtrList<ZoneType>::operator[];
171         //- Return const reference to ZoneType by name.
172         const ZoneType& operator[](const word&) const;
174         //- Return reference to ZoneType by name.
175         ZoneType& operator[](const word&);
178     // Ostream operator
180         friend Ostream& operator<< <ZoneType, MeshType>
181         (
182             Ostream&,
183             const ZoneMesh<ZoneType, MeshType>&
184         );
188 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
190 } // End namespace Foam
192 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
194 #ifdef NoRepository
195 #   include "ZoneMesh.C"
196 #endif
198 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
200 #endif
202 // ************************************************************************* //