ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / algorithms / MeshWave / MeshWave.H
blobc8085c2b6d3b762fc3f80a01581a4d51a5b55964
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::MeshWave
27 Description
28     FaceCellWave plus data
30 SourceFiles
31     MeshWave.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef MeshWave_H
36 #define MeshWave_H
38 #include "FaceCellWave.H"
40 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 namespace Foam
45 /*---------------------------------------------------------------------------*\
46                         Class MeshWaveName Declaration
47 \*---------------------------------------------------------------------------*/
49 TemplateName(MeshWave);
52 /*---------------------------------------------------------------------------*\
53                            Class MeshWave Declaration
54 \*---------------------------------------------------------------------------*/
56 template <class Type, class TrackingData = int>
57 class MeshWave
59     public MeshWaveName
61     // Private data
63         //- Wall information for all faces
64         List<Type> allFaceInfo_;
66         //- Wall information for all cells
67         List<Type> allCellInfo_;
69         //- Wave calculation engine.
70         FaceCellWave<Type, TrackingData> calc_;
72     // Private Member Functions
74         //- Disallow default bitwise copy construct
75         MeshWave(const MeshWave&);
77         //- Disallow default bitwise assignment
78         void operator=(const MeshWave&);
80       // Private static data
82             //- Used as default trackdata value to satisfy default template
83             //  argument.
84             static label dummyTrackData_;
86 public:
88     // Constructors
90         //- Construct from mesh and list of changed faces with the Type
91         //  for these faces. Iterates until nothing changes or maxIter reached.
92         //  (maxIter can be 0)
93         MeshWave
94         (
95             const polyMesh& mesh,
96             const labelList& initialChangedFaces,
97             const List<Type>& changedFacesInfo,
98             const label maxIter,
99             TrackingData& td = dummyTrackData_
100         );
102         //- Construct from mesh, list of changed faces with the Type
103         //  for these faces and initial field.
104         //  Iterates until nothing changes or maxIter reached.
105         //  (maxIter can be 0)
106         MeshWave
107         (
108             const polyMesh& mesh,
109             const labelList& initialChangedFaces,
110             const List<Type>& changedFacesInfo,
111             const List<Type>& allCellInfo,
112             const label maxIter,
113             TrackingData& td = dummyTrackData_
114         );
117     // Member Functions
119         //- Get allFaceInfo
120         const List<Type>& allFaceInfo() const
121         {
122             return allFaceInfo_;
123         }
125         //- Get allCellInfo
126         const List<Type>& allCellInfo() const
127         {
128             return allCellInfo_;
129         }
131         //- Additional data to be passed into container
132         const TrackingData& data() const
133         {
134             return calc_.data();
135         }
137         //- Iterate until no changes or maxIter reached. Returns actual
138         //  number of iterations.
139         label iterate(const label maxIter)
140         {
141             return calc_.iterate(maxIter);
142         }
144         //- Get number of unvisited cells, i.e. cells that were not (yet)
145         //  reached from walking across mesh. This can happen from
146         //  - not enough iterations done
147         //  - a disconnected mesh
148         //  - a mesh without walls in it
149         label getUnsetCells() const
150         {
151             return calc_.getUnsetCells();
152         }
154         //- Get number of unvisited faces
155         label getUnsetFaces() const
156         {
157             return calc_.getUnsetFaces();
158         }
162 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
164 } // End namespace Foam
167 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
169 #ifdef NoRepository
170 #   include "MeshWave.C"
171 #endif
173 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
175 #endif
177 // ************************************************************************* //