patchFaceOrientationI.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2013-2021 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "orientedSurface.H"
27 
28 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
29 
31 :
32  flipStatus_(orientedSurface::UNVISITED)
33 {}
34 
35 
37 (
38  const label flipStatus
39 )
40 :
41  flipStatus_(flipStatus)
42 {}
43 
44 
45 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
46 
48 {
49  return flipStatus_;
50 }
51 
52 
54 {
55  if (flipStatus_ == orientedSurface::NOFLIP)
56  {
57  flipStatus_ = orientedSurface::FLIP;
58  }
59  else if (flipStatus_ == orientedSurface::FLIP)
60  {
61  flipStatus_ = orientedSurface::NOFLIP;
62  }
63 }
64 
65 
66 template<class TrackingData>
67 inline bool Foam::patchFaceOrientation::valid(TrackingData& td) const
68 {
69  return flipStatus_ != orientedSurface::UNVISITED;
70 }
71 
72 
73 template<class TrackingData>
75 (
76  const polyMesh& mesh,
77  const indirectPrimitivePatch& patch,
78  const tensor& rotTensor,
79  const scalar tol,
80  TrackingData& td
81 )
82 {}
83 
84 
85 template<class TrackingData>
87 (
88  const polyMesh& mesh,
89  const indirectPrimitivePatch& patch,
90  const label edgei,
91  const label facei,
92  const patchFaceOrientation& faceInfo,
93  const scalar tol,
94  TrackingData& td
95 )
96 {
97  if (valid(td))
98  {
99  return false;
100  }
101 
102  const face& f = patch.localFaces()[facei];
103  const edge& e = patch.edges()[edgei];
104 
105  patchFaceOrientation consistentInfo(faceInfo);
106 
107  // Check how edge relates to face
108  if (f.edgeDirection(e) < 0)
109  {
110  // Create flipped version of faceInfo
111  consistentInfo.flip();
112  }
113 
114  operator=(consistentInfo);
115 
116  return true;
117 }
118 
119 
120 template<class TrackingData>
122 (
123  const polyMesh& mesh,
124  const indirectPrimitivePatch& patch,
125  const patchFaceOrientation& edgeinfo,
126  const bool sameOrientation,
127  const scalar tol,
128  TrackingData& td
129 )
130 {
131  if (valid(td))
132  {
133  return false;
134  }
135 
136  // Create (flipped/unflipped) version of edgeinfo
137  patchFaceOrientation consistentInfo(edgeinfo);
138 
139  if (!sameOrientation)
140  {
141  consistentInfo.flip();
142  }
143 
144  operator=(consistentInfo);
145 
146  return true;
147 }
148 
149 
150 template<class TrackingData>
152 (
153  const polyMesh& mesh,
154  const indirectPrimitivePatch& patch,
155  const label facei,
156  const label edgei,
157  const patchFaceOrientation& edgeinfo,
158  const scalar tol,
159  TrackingData& td
160 )
161 {
162  if (valid(td))
163  {
164  return false;
165  }
166 
167  // Transfer flip to face
168  const face& f = patch.localFaces()[facei];
169  const edge& e = patch.edges()[edgei];
170 
171  // Create (flipped/unflipped) version of edgeinfo
172  patchFaceOrientation consistentInfo(edgeinfo);
173 
174  if (f.edgeDirection(e) > 0)
175  {
176  consistentInfo.flip();
177  }
178 
179  operator=(consistentInfo);
180 
181  return true;
182 }
183 
184 
185 template<class TrackingData>
187 (
188  const patchFaceOrientation& rhs,
189  TrackingData& td
190 ) const
191 {
192  return operator==(rhs);
193 }
194 
195 
196 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
197 
198 inline bool Foam::patchFaceOrientation::operator==
199 (
200  const Foam::patchFaceOrientation& rhs
201 ) const
202 {
203  return flipStatus() == rhs.flipStatus();
204 }
205 
206 
207 inline bool Foam::patchFaceOrientation::operator!=
208 (
209  const Foam::patchFaceOrientation& rhs
210 ) const
211 {
212  return !(*this == rhs);
213 }
214 
215 
216 // ************************************************************************* //
patchFaceOrientation()
Construct null.
bool equal(const patchFaceOrientation &, TrackingData &) const
Same (like operator==)
A face is a list of labels corresponding to mesh vertices.
Definition: face.H:75
bool valid(TrackingData &td) const
Check whether origin has been changed at all or.
Given point flip all faces such that normals point in same direction.
Transport of orientation for use in PatchEdgeFaceWave.
label flipStatus() const
Orientation.
bool updateFace(const polyMesh &mesh, const indirectPrimitivePatch &patch, const label facei, const label edgei, const patchFaceOrientation &edgeinfo, const scalar tol, TrackingData &td)
Influence of edge on face.
A list of faces which address into the list of points.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Definition: edge.H:58
int edgeDirection(const edge &) const
Return the edge direction on the face.
Definition: face.C:424
bool operator==(const patchFaceOrientation &) const
void flip()
Reverse orientation.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
labelList f(nPoints)
void transform(const polyMesh &mesh, const indirectPrimitivePatch &patch, const tensor &rotTensor, const scalar tol, TrackingData &td)
Apply rotation matrix.
const List< FaceType > & localFaces() const
Return patch faces addressing into local point list.
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:105
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:76
bool updateEdge(const polyMesh &mesh, const indirectPrimitivePatch &patch, const label edgei, const label facei, const patchFaceOrientation &faceInfo, const scalar tol, TrackingData &td)
Influence of face on edge.