Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / meshes / polyMesh / zones / ZoneMesh / ZoneMesh.H
blob9fc907d7d6c4fd82859fc1acb28838b8eb7e74ee
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::ZoneMesh
27 Description
28     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 "HashSet.H"
41 #include "pointFieldsFwd.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 // Forward declaration of friend functions and operators
52 template<class ZoneType, class MeshType> class ZoneMesh;
54 template<class ZoneType, class MeshType>
55 Ostream& operator<<(Ostream&, const ZoneMesh<ZoneType, MeshType>&);
57 /*---------------------------------------------------------------------------*\
58                            Class ZoneMesh Declaration
59 \*---------------------------------------------------------------------------*/
61 template<class ZoneType, class MeshType>
62 class ZoneMesh
64     public PtrList<ZoneType>,
65     public regIOobject
67     // Private data
69         //- Reference to mesh
70         const MeshType& mesh_;
72         //- Map of zone labels for given element
73         mutable Map<label>* zoneMapPtr_;
76     // Private member functions
78         //- Disallow construct as copy
79         ZoneMesh(const ZoneMesh&);
81         //- Disallow assignment
82         void operator=(const ZoneMesh<ZoneType, MeshType>&);
85         //- Create zone map
86         void calcZoneMap() const;
88         //- Clear addressing
89         void clearAddressing();
92 public:
94     // Constructors
96         //- Read constructor given IOobject and a MeshType reference
97         ZoneMesh
98         (
99             const IOobject&,
100             const MeshType&
101         );
103         //- Construct given size
104         ZoneMesh
105         (
106             const IOobject&,
107             const MeshType&,
108             const label size
109         );
111     // Destructor
113         ~ZoneMesh();
116     // Member functions
118         //- Return the mesh reference
119         const MeshType& mesh() const
120         {
121             return mesh_;
122         }
124         //- Map of zones containing zone index for all zoned elements
125         //  Return -1 if the object is not in the zone
126         const Map<label>& zoneMap() const;
128         //- Given a global object index, return the zone it is in.  If
129         //  object does not belong to any zones, return -1
130         label whichZone(const label objectIndex) const;
132         //- Return a list of zone types
133         wordList types() const;
135         //- Return a list of zone names
136         wordList names() const;
138         //- Find zone index given a name
139         label findZoneID(const word& zoneName) const;
141         //- Clear the zones
142         void clear();
144         //- Check zone definition. Return true if in error.
145         bool checkDefinition(const bool report = false) const;
147         //- Correct zone mesh after moving points
148         void movePoints(const pointField&);
150         //- Correct after topology update
151         void updateMesh();
153         //- writeData member function required by regIOobject
154         bool writeData(Ostream&) const;
157     // Ostream operator
159         friend Ostream& operator<< <ZoneType, MeshType>
160         (
161             Ostream&,
162             const ZoneMesh<ZoneType, MeshType>&
163         );
167 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
169 } // End namespace Foam
171 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
173 #ifdef NoRepository
174 #   include "ZoneMesh.C"
175 #endif
177 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
179 #endif
181 // ************************************************************************* //