FreeFOAM The Cross-Platform CFD Toolkit
patchDataWave.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 Class
25  Foam::patchDataWave
26 
27 Description
28  Takes a set of patches to start MeshWave from.
29 
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.
33 
34 See Also
35  The patchWave class.
36 
37 SourceFiles
38  patchDataWave.C
39 
40 \*---------------------------------------------------------------------------*/
41 
42 #ifndef patchDataWave_H
43 #define patchDataWave_H
44 
46 #include <OpenFOAM/FieldField.H>
47 #include <OpenFOAM/UPtrList.H>
48 
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 
51 namespace Foam
52 {
53 
54 // Forward declaration of classes
55 class polyMesh;
56 class wallPoint;
57 template<class Type> class MeshWave;
58 
59 /*---------------------------------------------------------------------------*\
60  Class patchDataWave Declaration
61 \*---------------------------------------------------------------------------*/
62 
63 template<class TransferType>
65 :
66  public cellDistFuncs
67 {
68 
69 private:
70 
71  typedef typename TransferType::dataType Type;
72 
73 
74  // Private Member Data
75 
76  //- Current patch subset (stored as patchIDs)
77  labelHashSet patchIDs_;
78 
79  //- Reference to initial extra data at patch faces
80  const UPtrList<Field<Type> >& initialPatchValuePtrs_;
81 
82  //- Do accurate distance calculation for near-wall cells.
83  bool correctWalls_;
84 
85  //
86  // After construction:
87  //
88 
89  //- Number of cells/faces unset after MeshWave has finished
90  label nUnset_;
91 
92  //- Distance at cell centres
93  scalarField distance_;
94 
95  //- Distance at patch faces
96  FieldField<Field, scalar> patchDistance_;
97 
98  //- Extra data at cell centres
99  Field<Type> cellData_;
100 
101  //- Extra data at patch faces
102  FieldField<Field, Type> patchData_;
103 
104 
105  // Private Member Functions
106 
107  //- Set initial set of changed faces
108  void setChangedFaces
109  (
110  const labelHashSet& patchIDs,
111  labelList&,
113  ) const;
114 
115  //- Copy MeshWave values into *this
116  label getValues(const MeshWave<TransferType>&);
117 
118 
119 public:
120 
121  // Constructors
122 
123  //- Construct from mesh, information on patches to initialize and flag
124  // whether or not to correct wall.
125  // Calculate for all cells. correctWalls : correct wall (face&point)
126  // cells for correct distance, searching neighbours.
128  (
129  const polyMesh& mesh,
130  const labelHashSet& patchIDs,
131  const UPtrList<Field<Type> >& initialPatchValuePtrs,
132  bool correctWalls = true
133  );
134 
135 
136  // Destructor
137 
138  virtual ~patchDataWave();
139 
140 
141  // Member Functions
142 
143  //- Correct for mesh geom/topo changes
144  virtual void correct();
145 
146 
147  const scalarField& distance() const
148  {
149  return distance_;
150  }
151 
152  //- Non const access so we can 'transfer' contents for efficiency.
154  {
155  return distance_;
156  }
157 
159  {
160  return patchDistance_;
161  }
162 
164  {
165  return patchDistance_;
166  }
167 
168  const Field<Type>& cellData() const
169  {
170  return cellData_;
171  }
172 
174  {
175  return cellData_;
176  }
177 
179  {
180  return patchData_;
181  }
182 
184  {
185  return patchData_;
186  }
187 
188  label nUnset() const
189  {
190  return nUnset_;
191  }
192 };
193 
194 
195 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
196 
197 } // End namespace Foam
198 
199 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
200 
201 #ifdef NoRepository
202 # include "patchDataWave.C"
203 #endif
204 
205 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
206 
207 #endif
208 
209 // ************************ vim: set sw=4 sts=4 et: ************************ //