/usr/include/freefoam/OpenFOAM/face.H is in libfreefoam-dev 0.1.0+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 | /*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::face
Description
A face is a list of labels corresponding to mesh vertices.
SourceFiles
faceI.H
face.C
faceIntersection.C
faceContactSphere.C
faceAreaInContact.C
\*---------------------------------------------------------------------------*/
#ifndef face_H
#define face_H
#include <OpenFOAM/pointField.H>
#include <OpenFOAM/labelList.H>
#include <OpenFOAM/edgeList.H>
#include <OpenFOAM/vectorField.H>
#include "faceListFwd.H"
#include <OpenFOAM/intersection.H>
#include <OpenFOAM/pointHit.H>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of friend functions and operators
class face;
class triFace;
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
class DynamicList;
inline bool operator==(const face& a, const face& b);
inline bool operator!=(const face& a, const face& b);
inline Istream& operator>>(Istream&, face&);
/*---------------------------------------------------------------------------*\
Class face Declaration
\*---------------------------------------------------------------------------*/
class face
:
public labelList
{
// Private Member Functions
//- Edge to the right of face vertex i
inline label right(const label i) const;
//- Edge to the left of face vertex i
inline label left(const label i) const;
//- Construct list of edge vectors for face
tmp<vectorField> calcEdges
(
const pointField& points
) const;
//- Cos between neighbouring edges
scalar edgeCos
(
const vectorField& edges,
const label index
) const;
//- Find index of largest internal angle on face
label mostConcaveAngle
(
const pointField& points,
const vectorField& edges,
scalar& edgeCos
) const;
//- Enumeration listing the modes for split()
enum splitMode
{
COUNTTRIANGLE, // count if split into triangles
COUNTQUAD, // count if split into triangles&quads
SPLITTRIANGLE, // split into triangles
SPLITQUAD // split into triangles&quads
};
//- Split face into triangles or triangles&quads.
// Stores results quadFaces[quadI], triFaces[triI]
// Returns number of new faces created
label split
(
const splitMode mode,
const pointField& points,
label& triI,
label& quadI,
faceList& triFaces,
faceList& quadFaces
) const;
public:
// Static data members
static const char* const typeName;
// Constructors
//- Construct null
inline face();
//- Construct given size
explicit inline face(label);
//- Construct from list of labels
explicit inline face(const UList<label>&);
//- Construct from list of labels
explicit inline face(const labelList&);
//- Construct by transferring the parameter contents
explicit inline face(const Xfer<labelList>&);
//- Copy construct from triFace
face(const triFace&);
//- Construct from Istream
inline face(Istream&);
// Member Functions
//- Collapse face by removing duplicate point labels
// return the collapsed size
label collapse();
//- Return the points corresponding to this face
inline pointField points(const pointField& meshPoints) const;
//- Centre point of face
point centre(const pointField&) const;
//- Calculate average value at centroid of face
template<class Type>
Type average(const pointField&, const Field<Type>&) const;
//- Scalar magnitude
inline scalar mag(const pointField&) const;
//- Vector normal; magnitude is equal to area of face
vector normal(const pointField&) const;
//- Return face with reverse direction
face reverseFace() const;
//- Navigation through face vertices
//- Which vertex on face (face index given a global index)
label which(const label globalIndex) const;
//- Next vertex on face
inline label nextLabel(const label i) const;
//- Previous vertex on face
inline label prevLabel(const label i) const;
//- Return the volume swept out by the face when its points move
scalar sweptVol
(
const pointField& oldPoints,
const pointField& newPoints
) const;
//- Return potential intersection with face with a ray starting
// at p, direction n (does not need to be normalized)
// Does face-center decomposition and returns triangle intersection
// point closest to p. Face-center is calculated from point average.
// For a hit, the distance is signed. Positive number
// represents the point in front of triangle
// In case of miss the point is the nearest point on the face
// and the distance is the distance between the intersection point
// and the original point.
// The half-ray or full-ray intersection and the contact
// sphere adjustment of the projection vector is set by the
// intersection parameters
pointHit ray
(
const point& p,
const vector& n,
const pointField& meshPoints,
const intersection::algorithm alg = intersection::FULL_RAY,
const intersection::direction dir = intersection::VECTOR
) const;
//- Fast intersection with a ray.
// Does face-center decomposition and returns triangle intersection
// point closest to p. See triangle::intersection for details.
pointHit intersection
(
const point& p,
const vector& q,
const point& ctr,
const pointField& meshPoints,
const intersection::algorithm alg,
const scalar tol = 0.0
) const;
//- Return nearest point to face
pointHit nearestPoint
(
const point& p,
const pointField& meshPoints
) const;
//- Return contact sphere diameter
scalar contactSphereDiameter
(
const point& p,
const vector& n,
const pointField& meshPoints
) const;
//- Return area in contact, given the displacement in vertices
scalar areaInContact
(
const pointField& points,
const scalarField& v
) const;
//- Return number of edges
inline label nEdges() const;
//- Return edges in face point ordering, i.e. edges()[0] is edge
// between [0] and [1]
edgeList edges() const;
//- Return n-th face edge
inline edge faceEdge(const label n) const;
//- Return the edge direction on the face
// - 0: edge not found on the face
// - +1: forward (counter-clockwise) on the face
// - -1: reverse (clockwise) on the face
int edgeDirection(const edge&) const;
// Face splitting utilities
//- Number of triangles after splitting
inline label nTriangles() const;
//- Number of triangles after splitting
label nTriangles(const pointField& points) const;
//- Split into triangles using existing points.
// Result in triFaces[triI..triI+nTri].
// Splits intelligently to maximize triangle quality.
// Returns number of faces created.
label triangles
(
const pointField& points,
label& triI,
faceList& triFaces
) const;
//- Split into triangles using existing points.
// Append to DynamicList.
// Returns number of faces created.
template<unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
label triangles
(
const pointField& points,
DynamicList<face, SizeInc, SizeMult, SizeDiv>& triFaces
) const;
//- Number of triangles and quads after splitting
// Returns the sum of both
label nTrianglesQuads
(
const pointField& points,
label& nTris,
label& nQuads
) const;
//- Split into triangles and quads.
// Results in triFaces (starting at triI) and quadFaces
// (starting at quadI).
// Returns number of new faces created.
label trianglesQuads
(
const pointField& points,
label& triI,
label& quadI,
faceList& triFaces,
faceList& quadFaces
) const;
//- compare faces
// 0: different
// +1: identical
// -1: same face, but different orientation
static int compare(const face&, const face&);
// Friend Operators
friend bool operator==(const face& a, const face& b);
friend bool operator!=(const face& a, const face& b);
// Istream Operator
friend Istream& operator>>(Istream&, face&);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "faceI.H"
#ifdef NoRepository
# include "faceTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************ vim: set sw=4 sts=4 et: ************************ //
|