Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / meshTools / cellDist / wallPoint / wallPointDataI.H
blob52f24023e053057f2455e90f1d4d59fff0eca286
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 \*---------------------------------------------------------------------------*/
26 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
28 namespace Foam
31 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
33 // Update this with w2 if w2 nearer to pt.
34 template <class Type>
35 template <class TrackingData>
36 inline bool wallPointData<Type>::update
38     const point& pt,
39     const wallPointData<Type>& w2,
40     const scalar tol,
41     TrackingData& td
44     scalar dist2 = magSqr(pt - w2.origin());
46     if (!valid(td))
47     {
48         // current not yet set so use any value
49         distSqr() = dist2;
50         origin() = w2.origin();
51         data_ = w2.data();
53         return true;
54     }
56     scalar diff = distSqr() - dist2;
58     if (diff < 0)
59     {
60         // already nearer to pt
61         return false;
62     }
64     if ((diff < SMALL) || ((distSqr() > SMALL) && (diff/distSqr() < tol)))
65     {
66         // don't propagate small changes
67         return false;
68     }
69     else
70     {
71         // update with new values
72         distSqr() = dist2;
73         origin() = w2.origin();
74         data_ = w2.data();
76         return true;
77     }
81 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
83 // Null constructor
84 template <class Type>
85 inline wallPointData<Type>::wallPointData()
87     wallPoint(),
88     data_()
92 // Construct from components
93 template <class Type>
94 inline wallPointData<Type>::wallPointData
96     const point& origin,
97     const Type& data,
98     const scalar distSqr
101     wallPoint(origin, distSqr),
102     data_(data)
106 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
108 template <class Type>
109 inline const Type& wallPointData<Type>::data() const
111     return data_;
115 template <class Type>
116 inline Type& wallPointData<Type>::data()
118     return data_;
122 // Update this with w2 if w2 nearer to pt.
123 template <class Type>
124 template <class TrackingData>
125 inline bool wallPointData<Type>::updateCell
127     const polyMesh& mesh,
128     const label thisCellI,
129     const label,
130     const wallPointData<Type>& neighbourWallInfo,
131     const scalar tol,
132     TrackingData& td
135     const vectorField& cellCentres = mesh.primitiveMesh::cellCentres();
137     return update
138     (
139         cellCentres[thisCellI],
140         neighbourWallInfo,
141         tol,
142         td
143     );
147 // Update this with w2 if w2 nearer to pt.
148 template <class Type>
149 template <class TrackingData>
150 inline bool wallPointData<Type>::updateFace
152     const polyMesh& mesh,
153     const label thisFaceI,
154     const label,
155     const wallPointData<Type>& neighbourWallInfo,
156     const scalar tol,
157     TrackingData& td
160     const vectorField& faceCentres = mesh.faceCentres();
162     return update
163     (
164         faceCentres[thisFaceI],
165         neighbourWallInfo,
166         tol,
167         td
168     );
172 // Update this with w2 if w2 nearer to pt.
173 template <class Type>
174 template <class TrackingData>
175 inline bool wallPointData<Type>::updateFace
177     const polyMesh& mesh,
178     const label thisFaceI,
179     const wallPointData<Type>& neighbourWallInfo,
180     const scalar tol,
181     TrackingData& td
184     const vectorField& faceCentres = mesh.faceCentres();
186     return update
187     (
188         faceCentres[thisFaceI],
189         neighbourWallInfo,
190         tol,
191         td
192     );
196 // ************************************************************************* //
198 } // End namespace Foam
200 // ************************************************************************* //