Forward compatibility: flex
[foam-extend-3.2.git] / src / meshTools / cellDist / patchWave / patchWave.H
blobae53bd8e18084351c8e853d6c52eddebd01f435e
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::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"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 // Forward declaration of classes
50 class polyMesh;
51 class wallPoint;
52 template<class Type> class MeshWave;
54 /*---------------------------------------------------------------------------*\
55                            Class patchWave Declaration
56 \*---------------------------------------------------------------------------*/
58 class patchWave
60     public cellDistFuncs
62     // Private Data
64         //- Current patch subset (stored as patchIDs)
65         labelHashSet patchIDs_;
67         //- Do accurate distance calculation for near-wall cells.
68         bool correctWalls_;
70         //- Number of cells/faces unset after MeshWave has finished
71         label nUnset_;
73         //- Distance at cell centres
74         scalarField distance_;
76         //- Distance at patch faces
77         FieldField<Field, scalar> patchDistance_;
80     // Private Member Functions
82         //- Set initial set of changed faces (= all faces of patches in
83         //  patchIDs). Set changedFaces to labels of changed faces,
84         //  changedInfo to face centres.
85         void setChangedFaces
86         (
87             const labelHashSet& patchIDs,
88             labelList& changedFaces,
89             List<wallPoint>& changedInfo
90         ) const;
92         //- Copy MeshWave cell values. Return number of illegal/unset
93         //  cells.
94         label getValues(const MeshWave<wallPoint>&);
97 public:
99     // Constructors
101         //- Construct from mesh and patches to initialize to 0 and flag
102         //  whether or not to correct wall.
103         //  Calculate for all cells. correctWalls : correct wall (face&point)
104         //  cells for correct distance, searching neighbours.
105         patchWave
106         (
107             const polyMesh& mesh,
108             const labelHashSet& patchIDs,
109             bool correctWalls = true
110         );
113     // Destructor
115         virtual ~patchWave();
118     // Member Functions
120         //- Correct for mesh geom/topo changes
121         virtual void correct();
124         label nUnset() const
125         {
126             return nUnset_;
127         }
129         const scalarField& distance() const
130         {
131             return distance_;
132         }
134         //- Non const access so we can 'transfer' contents for efficiency.
135         scalarField& distance()
136         {
137             return distance_;
138         }
140         const FieldField<Field, scalar>& patchDistance() const
141         {
142             return patchDistance_;
143         }
145         FieldField<Field, scalar>& patchDistance()
146         {
147             return patchDistance_;
148         }
152 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
154 } // End namespace Foam
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
158 #endif
160 // ************************************************************************* //