Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / meshTools / PointEdgeWave / pointEdgePoint.H
blob1ac4167dcecdd69860a2b773e29191b893ba9221
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::pointEdgePoint
27 Description
28     Holds information regarding nearest wall point. Used in pointEdgeWave.
29     (so not standard meshWave)
30     To be used in wall distance calculation.
32 SourceFiles
33     pointEdgePointI.H
34     pointEdgePoint.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef pointEdgePoint_H
39 #define pointEdgePoint_H
41 #include "point.H"
42 #include "label.H"
43 #include "scalar.H"
44 #include "tensor.H"
45 #include "pTraits.H"
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 namespace Foam
53 // Forward declaration of classes
54 class polyPatch;
55 class polyMesh;
57 /*---------------------------------------------------------------------------*\
58                            Class pointEdgePoint Declaration
59 \*---------------------------------------------------------------------------*/
61 class pointEdgePoint
63     // Private data
65         //- position of nearest wall center
66         point origin_;
68         //- normal distance (squared) from point to origin
69         scalar distSqr_;
71     // Private Member Functions
73         //- Evaluate distance to point. Update distSqr, origin from whomever
74         //  is nearer pt. Return true if w2 is closer to point,
75         //  false otherwise.
76         inline bool update
77         (
78             const point&,
79             const pointEdgePoint& w2,
80             const scalar tol
81         );
83         //- Combine current with w2. Update distSqr, origin if w2 has smaller
84         //  quantities and returns true.
85         inline bool update
86         (
87             const pointEdgePoint& w2,
88             const scalar tol
89         );
91 public:
93     // Static data members
95         //- initial point far away.
96         static point greatPoint;
98     // Constructors
100         //- Construct null
101         inline pointEdgePoint();
103         //- Construct from origin, distance
104         inline pointEdgePoint(const point& origin, const scalar distSqr);
106         //- Construct as copy
107         inline pointEdgePoint(const pointEdgePoint&);
110     // Member Functions
112         // Access
114             inline const point& origin() const;
116             inline scalar distSqr() const;
119         // Needed by meshWave
121             //- Check whether origin has been changed at all or
122             //  still contains original (invalid) value.
123             inline bool valid() const;
125             //- Check for identical geometrical data. Used for cyclics checking.
126             inline bool sameGeometry(const pointEdgePoint&, const scalar tol)
127              const;
129             //- Convert origin to relative vector to leaving point
130             //  (= point coordinate)
131             inline void leaveDomain
132             (
133                 const polyPatch& patch,
134                 const label patchPointI,
135                 const point& pos
136             );
138             //- Convert relative origin to absolute by adding entering point
139             inline void enterDomain
140             (
141                 const polyPatch& patch,
142                 const label patchPointI,
143                 const point& pos
144             );
146             //- Apply rotation matrix to origin
147             inline void transform(const tensor& rotTensor);
149             //- Influence of edge on point
150             inline bool updatePoint
151             (
152                 const polyMesh& mesh,
153                 const label pointI,
154                 const label edgeI,
155                 const pointEdgePoint& edgeInfo,
156                 const scalar tol
157             );
159             //- Influence of different value on same point.
160             //  Merge new and old info.
161             inline bool updatePoint
162             (
163                 const polyMesh& mesh,
164                 const label pointI,
165                 const pointEdgePoint& newPointInfo,
166                 const scalar tol
167             );
169             //- Influence of different value on same point.
170             //  No information about current position whatsoever.
171             inline bool updatePoint
172             (
173                 const pointEdgePoint& newPointInfo,
174                 const scalar tol
175             );
177             //- Influence of point on edge.
178             inline bool updateEdge
179             (
180                 const polyMesh& mesh,
181                 const label edgeI,
182                 const label pointI,
183                 const pointEdgePoint& pointInfo,
184                 const scalar tol
185             );
188     // Member Operators
190         //Note: Used to determine whether to call update.
191         inline bool operator==(const pointEdgePoint&) const;
193         inline bool operator!=(const pointEdgePoint&) const;
196     // IOstream Operators
198         friend Ostream& operator<<(Ostream&, const pointEdgePoint&);
199         friend Istream& operator>>(Istream&, pointEdgePoint&);
203 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
205 } // End namespace Foam
207 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
209 #include "pointEdgePointI.H"
211 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
213 #endif
215 // ************************************************************************* //