Transferred copyright to the OpenFOAM Foundation
[OpenFOAM-2.0.x.git] / src / meshTools / cellDist / patchWave / patchDataWave.H
blobe2369f81a928ba9b9c2fa992f5035317b9713dff
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::patchDataWave
27 Description
28     Takes a set of patches to start MeshWave from.
30     Holds after construction distance at cells and distance at patches
31     (like patchWave), but also additional transported data.
32     It is used, for example, in the y+ calculation.
34 See Also
35    The patchWave class.
37 SourceFiles
38     patchDataWave.C
40 \*---------------------------------------------------------------------------*/
42 #ifndef patchDataWave_H
43 #define patchDataWave_H
45 #include "cellDistFuncs.H"
46 #include "FieldField.H"
47 #include "UPtrList.H"
48 #include "MeshWave.H"
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 namespace Foam
55 // Forward declaration of classes
56 class polyMesh;
57 class wallPoint;
58 //template<class Type, class TrackingData> class MeshWave;
60 /*---------------------------------------------------------------------------*\
61                            Class patchDataWave Declaration
62 \*---------------------------------------------------------------------------*/
64 template<class TransferType>
65 class patchDataWave
67     public cellDistFuncs
70 private:
72     typedef typename TransferType::dataType Type;
75     // Private Member Data
77         //- Current patch subset (stored as patchIDs)
78         labelHashSet patchIDs_;
80         //- Reference to initial extra data at patch faces
81         const UPtrList<Field<Type> >& initialPatchValuePtrs_;
83         //- Do accurate distance calculation for near-wall cells.
84         bool correctWalls_;
86         //
87         // After construction:
88         //
90         //- Number of cells/faces unset after MeshWave has finished
91         label nUnset_;
93         //- Distance at cell centres
94         scalarField distance_;
96         //- Distance at patch faces
97         FieldField<Field, scalar> patchDistance_;
99         //- Extra data at cell centres
100         Field<Type> cellData_;
102         //- Extra data at patch faces
103         FieldField<Field, Type> patchData_;
106     // Private Member Functions
108         //- Set initial set of changed faces
109         void setChangedFaces
110         (
111             const labelHashSet& patchIDs,
112             labelList&,
113             List<TransferType>&
114         ) const;
116         //- Copy MeshWave values into *this
117         label getValues(const MeshWave<TransferType>&);
120 public:
122     // Constructors
124         //- Construct from mesh, information on patches to initialize and flag
125         //  whether or not to correct wall.
126         //  Calculate for all cells. correctWalls : correct wall (face&point)
127         //  cells for correct distance, searching neighbours.
128         patchDataWave
129         (
130             const polyMesh& mesh,
131             const labelHashSet& patchIDs,
132             const UPtrList<Field<Type> >& initialPatchValuePtrs,
133             bool correctWalls = true
134         );
137     //- Destructor
138     virtual ~patchDataWave();
141     // Member Functions
143         //- Correct for mesh geom/topo changes
144         virtual void correct();
147         const scalarField& distance() const
148         {
149             return distance_;
150         }
152         //- Non const access so we can 'transfer' contents for efficiency.
153         scalarField& distance()
154         {
155             return distance_;
156         }
158         const FieldField<Field, scalar>& patchDistance() const
159         {
160             return patchDistance_;
161         }
163         FieldField<Field, scalar>& patchDistance()
164         {
165             return patchDistance_;
166         }
168         const Field<Type>& cellData() const
169         {
170             return cellData_;
171         }
173         Field<Type>& cellData()
174         {
175             return cellData_;
176         }
178         const FieldField<Field, Type>& patchData() const
179         {
180             return patchData_;
181         }
183         FieldField<Field, Type>& patchData()
184         {
185             return patchData_;
186         }
188         label nUnset() const
189         {
190             return nUnset_;
191         }
195 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
197 } // End namespace Foam
199 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
201 #ifdef NoRepository
202 #   include "patchDataWave.C"
203 #endif
205 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
207 #endif
209 // ************************************************************************* //