ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / meshTools / cellDist / wallPoint / wallPoint.H
blobd9bd5af06affde9ad83f59fb401d456cdb4d9da3
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::wallPoint
27 Description
28     Holds information regarding nearest wall point. Used in wall distance
29     calculation.
31 SourceFiles
32     wallPointI.H
33     wallPoint.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef wallPoint_H
38 #define wallPoint_H
40 #include "point.H"
41 #include "label.H"
42 #include "scalar.H"
43 #include "tensor.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Forward declaration of classes
51 class polyPatch;
52 class polyMesh;
53 class wallPoint;
55 // Forward declaration of friend functions and operators
56 Ostream& operator<<(Ostream&, const wallPoint&);
57 Istream& operator>>(Istream&, wallPoint&);
60 /*---------------------------------------------------------------------------*\
61                            Class wallPoint Declaration
62 \*---------------------------------------------------------------------------*/
64 class wallPoint
66     // Private data
68         //- position of nearest wall center
69         point origin_;
71         //- normal distance (squared) from cellcenter to origin
72         scalar distSqr_;
74     // Private Member Functions
76         //- Evaluate distance to point. Update distSqr, origin from whomever
77         //  is nearer pt. Return true if w2 is closer to point,
78         //  false otherwise.
79         template<class TrackingData>
80         inline bool update
81         (
82             const point&,
83             const wallPoint& w2,
84             const scalar tol,
85             TrackingData& td
86         );
89 public:
91     // Constructors
93         //- Construct null
94         inline wallPoint();
96         //- Construct from origin, distance
97         inline wallPoint
98         (
99             const point& origin,
100             const scalar distSqr
101         );
103         //- Construct as copy
104         inline wallPoint
105         (
106             const wallPoint&
107         );
110     // Member Functions
112         // Access
114             inline const point& origin() const;
116             inline point& origin();
118             inline scalar distSqr() const;
120             inline scalar& distSqr();
123         // Needed by FaceCellWave
125             //- Check whether origin has been changed at all or
126             //  still contains original (invalid) value.
127             template<class TrackingData>
128             inline bool valid(TrackingData& td) const;
130             //- Check for identical geometrical data. Used for cyclics checking.
131             template<class TrackingData>
132             inline bool sameGeometry
133             (
134                 const polyMesh&,
135                 const wallPoint&,
136                 const scalar,
137                 TrackingData& td
138             ) const;
140             //- Convert any absolute coordinates into relative to (patch)face
141             //  centre
142             template<class TrackingData>
143             inline void leaveDomain
144             (
145                 const polyMesh&,
146                 const polyPatch&,
147                 const label patchFaceI,
148                 const point& faceCentre,
149                 TrackingData& td
150             );
152             //- Reverse of leaveDomain
153             template<class TrackingData>
154             inline void enterDomain
155             (
156                 const polyMesh&,
157                 const polyPatch&,
158                 const label patchFaceI,
159                 const point& faceCentre,
160                 TrackingData& td
161             );
163             //- Apply rotation matrix to any coordinates
164             template<class TrackingData>
165             inline void transform
166             (
167                 const polyMesh&,
168                 const tensor&,
169                 TrackingData& td
170             );
172             //- Influence of neighbouring face.
173             template<class TrackingData>
174             inline bool updateCell
175             (
176                 const polyMesh&,
177                 const label thisCellI,
178                 const label neighbourFaceI,
179                 const wallPoint& neighbourInfo,
180                 const scalar tol,
181                 TrackingData& td
182             );
184             //- Influence of neighbouring cell.
185             template<class TrackingData>
186             inline bool updateFace
187             (
188                 const polyMesh&,
189                 const label thisFaceI,
190                 const label neighbourCellI,
191                 const wallPoint& neighbourInfo,
192                 const scalar tol,
193                 TrackingData& td
194             );
196             //- Influence of different value on same face.
197             template<class TrackingData>
198             inline bool updateFace
199             (
200                 const polyMesh&,
201                 const label thisFaceI,
202                 const wallPoint& neighbourInfo,
203                 const scalar tol,
204                 TrackingData& td
205             );
207             //- Same (like operator==)
208             template<class TrackingData>
209             inline bool equal(const wallPoint&, TrackingData& td) const;
212     // Member Operators
214         // Needed for List IO
215         inline bool operator==(const wallPoint&) const;
216         inline bool operator!=(const wallPoint&) const;
219     // IOstream Operators
221         friend Ostream& operator<<(Ostream&, const wallPoint&);
222         friend Istream& operator>>(Istream&, wallPoint&);
226 //- Data associated with wallPoint type are contiguous
227 template<>
228 inline bool contiguous<wallPoint>()
230     return true;
234 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
236 } // End namespace Foam
238 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
240 #include "wallPointI.H"
242 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
244 #endif
246 // ************************************************************************* //