externalPointEdgePointI.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 | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2013-2016 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "polyMesh.H"
29 #include "transform.H"
30 
31 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
32 
33 template<class TrackingData>
34 inline bool Foam::externalPointEdgePoint::update
35 (
36  const point& pt,
37  const externalPointEdgePoint& w2,
38  const scalar tol,
39  TrackingData& td
40 )
41 {
42  scalar dist2 = magSqr(pt - w2.origin());
43 
44  if (!valid(td))
45  {
46  // current not yet set so use any value
47  distSqr_ = dist2;
48  origin_ = w2.origin();
49 
50  return true;
51  }
52 
53  scalar diff = distSqr_ - dist2;
54 
55  if (diff < 0)
56  {
57  // already nearer to pt
58  return false;
59  }
60 
61  if ((diff < SMALL) || ((distSqr_ > SMALL) && (diff/distSqr_ < tol)))
62  {
63  // don't propagate small changes
64  return false;
65  }
66  else
67  {
68  // update with new values
69  distSqr_ = dist2;
70  origin_ = w2.origin();
71 
72  return true;
73  }
74 }
75 
76 
77 template<class TrackingData>
78 inline bool Foam::externalPointEdgePoint::update
79 (
80  const externalPointEdgePoint& w2,
81  const scalar tol,
82  TrackingData& td
83 )
84 {
85  if (!valid(td))
86  {
87  // current not yet set so use any value
88  distSqr_ = w2.distSqr();
89  origin_ = w2.origin();
90 
91  return true;
92  }
93 
94  scalar diff = distSqr_ - w2.distSqr();
95 
96  if (diff < 0)
97  {
98  // already nearer to pt
99  return false;
100  }
101 
102  if ((diff < SMALL) || ((distSqr_ > SMALL) && (diff/distSqr_ < tol)))
103  {
104  // don't propagate small changes
105  return false;
106  }
107  else
108  {
109  // update with new values
110  distSqr_ = w2.distSqr();
111  origin_ = w2.origin();
112 
113  return true;
114  }
115 }
116 
117 
118 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
119 
121 :
122  origin_(point::max),
123  distSqr_(GREAT)
124 {}
125 
126 
128 (
129  const point& origin,
130  const scalar distSqr
131 )
132 :
133  origin_(origin),
134  distSqr_(distSqr)
135 {}
136 
137 
139 (
140  const externalPointEdgePoint& wpt
141 )
142 :
143  origin_(wpt.origin()),
144  distSqr_(wpt.distSqr())
145 {}
146 
147 
148 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
149 
151 {
152  return origin_;
153 }
154 
155 
156 inline Foam::scalar Foam::externalPointEdgePoint::distSqr() const
157 {
158  return distSqr_;
159 }
160 
161 
162 template<class TrackingData>
163 inline bool Foam::externalPointEdgePoint::valid(TrackingData& td) const
164 {
165  return origin_ != point::max;
166 }
167 
168 
169 // Checks for cyclic points
170 template<class TrackingData>
172 (
173  const externalPointEdgePoint& w2,
174  const scalar tol,
175  TrackingData& td
176 ) const
177 {
178  scalar diff = Foam::mag(distSqr() - w2.distSqr());
179 
180  if (diff < SMALL)
181  {
182  return true;
183  }
184  else
185  {
186  if ((distSqr() > SMALL) && ((diff/distSqr()) < tol))
187  {
188  return true;
189  }
190  else
191  {
192  return false;
193  }
194  }
195 }
196 
197 
198 template<class TrackingData>
200 (
201  const polyPatch& patch,
202  const label patchPointi,
203  const point& coord,
204  TrackingData& td
205 )
206 {
207  origin_ -= coord;
208 }
209 
210 
211 template<class TrackingData>
213 (
214  const tensor& rotTensor,
215  TrackingData& td
216 )
217 {
218  origin_ = Foam::transform(rotTensor, origin_);
219 }
220 
221 
222 template<class TrackingData>
224 (
225  const polyPatch& patch,
226  const label patchPointi,
227  const point& coord,
228  TrackingData& td
229 )
230 {
231  // back to absolute form
232  origin_ += coord;
233 }
234 
235 
236 template<class TrackingData>
238 (
239  const polyMesh& mesh,
240  const label pointi,
241  const label edgeI,
242  const externalPointEdgePoint& edgeInfo,
243  const scalar tol,
244  TrackingData& td
245 )
246 {
247  return update(td.points_[pointi], edgeInfo, tol, td);
248 }
249 
250 
251 template<class TrackingData>
253 (
254  const polyMesh& mesh,
255  const label pointi,
256  const externalPointEdgePoint& newPointInfo,
257  const scalar tol,
258  TrackingData& td
259 )
260 {
261  return update(td.points_[pointi], newPointInfo, tol, td);
262 }
263 
264 
265 template<class TrackingData>
267 (
268  const externalPointEdgePoint& newPointInfo,
269  const scalar tol,
270  TrackingData& td
271 )
272 {
273  return update(newPointInfo, tol, td);
274 }
275 
276 
277 template<class TrackingData>
279 (
280  const polyMesh& mesh,
281  const label edgeI,
282  const label pointi,
283  const externalPointEdgePoint& pointInfo,
284  const scalar tol,
285  TrackingData& td
286 )
287 {
288  const edge& e = mesh.edges()[edgeI];
289  return update(e.centre(td.points_), pointInfo, tol, td);
290 }
291 
292 
293 template<class TrackingData>
295 (
296  const externalPointEdgePoint& rhs,
297  TrackingData& td
298 ) const
299 {
300  return operator==(rhs);
301 }
302 
303 
304 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
305 
306 inline bool Foam::externalPointEdgePoint::operator==
307 (
309 )
310 const
311 {
312  return (origin() == rhs.origin()) && (distSqr() == rhs.distSqr());
313 }
314 
315 
316 inline bool Foam::externalPointEdgePoint::operator!=
317 (
319 )
320 const
321 {
322  return !(*this == rhs);
323 }
324 
325 
326 // ************************************************************************* //
Foam::Tensor< scalar >
Foam::externalPointEdgePoint::origin
const point & origin() const
Definition: externalPointEdgePointI.H:150
Foam::externalPointEdgePoint::updatePoint
bool updatePoint(const polyMesh &mesh, const label pointi, const label edgeI, const externalPointEdgePoint &edgeInfo, const scalar tol, TrackingData &td)
Influence of edge on point.
Definition: externalPointEdgePointI.H:238
Foam::externalPointEdgePoint::valid
bool valid(TrackingData &td) const
Check whether origin has been changed at all or.
Definition: externalPointEdgePointI.H:163
update
mesh update()
Foam::externalPointEdgePoint
Holds information regarding nearest wall point. Used in PointEdgeWave. (so not standard FaceCellWave)...
Definition: externalPointEdgePoint.H:63
Foam::edge
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Definition: edge.H:63
Foam::externalPointEdgePoint::distSqr
scalar distSqr() const
Definition: externalPointEdgePointI.H:156
Foam::externalPointEdgePoint::enterDomain
void enterDomain(const polyPatch &patch, const label patchPointi, const point &pos, TrackingData &td)
Convert relative origin to absolute by adding entering point.
Definition: externalPointEdgePointI.H:224
Foam::primitiveMesh::edges
const edgeList & edges() const
Return mesh edges. Uses calcEdges.
Definition: primitiveMeshEdges.C:505
Foam::externalPointEdgePoint::leaveDomain
void leaveDomain(const polyPatch &patch, const label patchPointi, const point &pos, TrackingData &td)
Convert origin to relative vector to leaving point.
Definition: externalPointEdgePointI.H:200
Foam::transform
dimensionSet transform(const dimensionSet &ds)
Return the argument; transformations do not change the dimensions.
Definition: dimensionSet.C:519
polyMesh.H
Foam::externalPointEdgePoint::sameGeometry
bool sameGeometry(const externalPointEdgePoint &, const scalar tol, TrackingData &td) const
Check for identical geometrical data. Used for cyclics checking.
Definition: externalPointEdgePointI.H:172
Foam::externalPointEdgePoint::updateEdge
bool updateEdge(const polyMesh &mesh, const label edgeI, const label pointi, const externalPointEdgePoint &pointInfo, const scalar tol, TrackingData &td)
Influence of point on edge.
Definition: externalPointEdgePointI.H:279
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:77
Foam::magSqr
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
Foam::diff
scalar diff(const triad &A, const triad &B)
Return a quantity of the difference between two triads.
Definition: triad.C:378
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:62
Foam::operator==
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
Foam::externalPointEdgePoint::externalPointEdgePoint
externalPointEdgePoint()
Construct null.
Definition: externalPointEdgePointI.H:120
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
w2
#define w2
Definition: blockCreate.C:35
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::VectorSpace< Vector< scalar >, scalar, 3 >::max
static const Vector< scalar > max
Definition: VectorSpace.H:117
Foam::foamVersion::patch
const std::string patch
OpenFOAM patch number as a std::string.
Foam::Vector< scalar >
Foam::mag
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Foam::constant::electromagnetic::e
const dimensionedScalar e
Elementary charge.
Definition: createFields.H:11
Foam::externalPointEdgePoint::transform
void transform(const tensor &rotTensor, TrackingData &td)
Apply rotation matrix to origin.
Definition: externalPointEdgePointI.H:213
transform.H
3D tensor transformation operations.
Foam::point
vector point
Point is a vector.
Definition: point.H:43
Foam::externalPointEdgePoint::equal
bool equal(const externalPointEdgePoint &, TrackingData &td) const
Equivalent to operator== with TrackingData.
Definition: externalPointEdgePointI.H:295