Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / meshTools / cellDist / wallPoint / wallPointData.H
blobb1a6384c5235381f4cc85a67825d7b98e63ebd7f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
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::wallPointData
27 Description
28     Holds information (coordinate and normal) regarding nearest wall point.
30     Is like wallPoint but transfer extra (passive) data.
31     Used e.g. in wall distance calculation with wall reflection vectors.
33 SourceFiles
34     wallPointDataI.H
35     wallPointData.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef wallPointData_H
40 #define wallPointData_H
42 #include "wallPoint.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 template<class Type> class wallPointData;
51 // Forward declaration of friend functions and operators
53 template<class Type> Istream& operator>>(Istream&, wallPointData<Type>&);
54 template<class Type> Ostream& operator<<(Ostream&, const wallPointData<Type>&);
57 /*---------------------------------------------------------------------------*\
58                            Class wallPointData Declaration
59 \*---------------------------------------------------------------------------*/
61 template <class Type>
62 class wallPointData
64     public wallPoint
66     // Private data
68         //- data at nearest wall center
69         Type data_;
72     // Private Member Functions
74         //- Evaluate distance to point. Update distSqr, origin from whomever
75         //  is nearer pt. Return true if w2 is closer to point,
76         //  false otherwise.
77         template<class TrackingData>
78         inline bool update
79         (
80             const point&,
81             const wallPointData<Type>& w2,
82             const scalar tol,
83             TrackingData& td
84         );
87 public:
89     typedef Type dataType;
92     // Constructors
94         //- Construct null
95         inline wallPointData();
97         //- Construct from origin, normal, distance
98         inline wallPointData
99         (
100             const point& origin,
101             const Type& data,
102             const scalar distSqr
103         );
106     // Member Functions
108         // Access
110             inline const Type& data() const;
111             inline Type& data();
113         // Needed by meshWave
115             //- Influence of neighbouring face.
116             //  Calls update(...) with cellCentre of cellI
117             template<class TrackingData>
118             inline bool updateCell
119             (
120                 const polyMesh& mesh,
121                 const label thisCellI,
122                 const label neighbourFaceI,
123                 const wallPointData<Type>& neighbourWallInfo,
124                 const scalar tol,
125                 TrackingData& td
126             );
128             //- Influence of neighbouring cell.
129             //  Calls update(...) with faceCentre of faceI
130             template<class TrackingData>
131             inline bool updateFace
132             (
133                 const polyMesh& mesh,
134                 const label thisFaceI,
135                 const label neighbourCellI,
136                 const wallPointData<Type>& neighbourWallInfo,
137                 const scalar tol,
138                 TrackingData& td
139             );
141             //- Influence of different value on same face.
142             //  Merge new and old info.
143             //  Calls update(...) with faceCentre of faceI
144             template<class TrackingData>
145             inline bool updateFace
146             (
147                 const polyMesh& mesh,
148                 const label thisFaceI,
149                 const wallPointData<Type>& neighbourWallInfo,
150                 const scalar tol,
151                 TrackingData& td
152             );
154     // Member Operators
156     // IOstream Operators
158         friend Ostream& operator<< <Type>(Ostream&, const wallPointData<Type>&);
159         friend Istream& operator>> <Type>(Istream&, wallPointData<Type>&);
163 //- Data associated with wallPointData type are contiguous. List the usual
164 //  ones.
166 template <>
167 inline bool contiguous<wallPointData<bool> >()
169     return contiguous<wallPoint>();
171 template <>
172 inline bool contiguous<wallPointData<label> >()
174     return contiguous<wallPoint>();
176 template <>
177 inline bool contiguous<wallPointData<scalar> >()
179     return contiguous<wallPoint>();
181 template <>
182 inline bool contiguous<wallPointData<vector> >()
184     return contiguous<wallPoint>();
186 template <>
187 inline bool contiguous<wallPointData<sphericalTensor> >()
189     return contiguous<wallPoint>();
191 template <>
192 inline bool contiguous<wallPointData<symmTensor> >()
194     return contiguous<wallPoint>();
196 template <>
197 inline bool contiguous<wallPointData<tensor> >()
199     return contiguous<wallPoint>();
203 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
206 } // End namespace Foam
208 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
210 #ifdef NoRepository
211 #   include "wallPointData.C"
212 #endif
214 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
216 #include "wallPointDataI.H"
218 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
220 #endif
222 // ************************************************************************* //