ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / meshTools / cellDist / patchWave / patchWave.H
blob16de93356a29dfcea10abf76414e17f32c99c638
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::patchWave
27 Description
28     Takes a set of patches to start MeshWave from. After construction holds
29     distance at cells and distance at patches. Is e.g. used by wallDist to
30     construct volScalarField with correct distance to wall.
32 SourceFiles
33     patchWave.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef patchWave_H
38 #define patchWave_H
40 #include "cellDistFuncs.H"
41 #include "FieldField.H"
42 #include "MeshWave.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 // Forward declaration of classes
50 class polyMesh;
51 class wallPoint;
53 /*---------------------------------------------------------------------------*\
54                            Class patchWave Declaration
55 \*---------------------------------------------------------------------------*/
57 class patchWave
59     public cellDistFuncs
61     // Private Data
63         //- Current patch subset (stored as patchIDs)
64         labelHashSet patchIDs_;
66         //- Do accurate distance calculation for near-wall cells.
67         bool correctWalls_;
69         //- Number of cells/faces unset after MeshWave has finished
70         label nUnset_;
72         //- Distance at cell centres
73         scalarField distance_;
75         //- Distance at patch faces
76         FieldField<Field, scalar> patchDistance_;
79     // Private Member Functions
81         //- Set initial set of changed faces (= all faces of patches in
82         //  patchIDs). Set changedFaces to labels of changed faces,
83         //  changedInfo to face centres.
84         void setChangedFaces
85         (
86             const labelHashSet& patchIDs,
87             labelList& changedFaces,
88             List<wallPoint>& changedInfo
89         ) const;
91         //- Copy MeshWave cell values. Return number of illegal/unset
92         //  cells.
93         label getValues(const MeshWave<wallPoint>&);
96 public:
98     // Constructors
100         //- Construct from mesh and patches to initialize to 0 and flag
101         //  whether or not to correct wall.
102         //  Calculate for all cells. correctWalls : correct wall (face&point)
103         //  cells for correct distance, searching neighbours.
104         patchWave
105         (
106             const polyMesh& mesh,
107             const labelHashSet& patchIDs,
108             bool correctWalls = true
109         );
111     //- Destructor
112     virtual ~patchWave();
115     // Member Functions
117         //- Correct for mesh geom/topo changes
118         virtual void correct();
121         label nUnset() const
122         {
123             return nUnset_;
124         }
126         const scalarField& distance() const
127         {
128             return distance_;
129         }
131         //- Non const access so we can 'transfer' contents for efficiency.
132         scalarField& distance()
133         {
134             return distance_;
135         }
137         const FieldField<Field, scalar>& patchDistance() const
138         {
139             return patchDistance_;
140         }
142         FieldField<Field, scalar>& patchDistance()
143         {
144             return patchDistance_;
145         }
150 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
152 } // End namespace Foam
154 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
156 #endif
158 // ************************************************************************* //