46 const scalar surfaceFeatures::parallelTolerance =
sin(
degToRad(1.0));
59 || (
p.y() <
min(a.
y(),
b.y()) ||
p.y() >
max(a.
y(),
b.y()))
60 || (
p.z() <
min(a.
z(),
b.z()) ||
p.z() >
max(a.
z(),
b.z()))
100 mag(eHit.rawPoint() - start)
101 <
mag(eHit.rawPoint() - end)
123 for (label i = 0; i < externalStart_; i++)
125 edgeStat[featureEdges_[i]] = REGION;
129 for (label i = externalStart_; i < internalStart_; i++)
131 edgeStat[featureEdges_[i]] = EXTERNAL;
135 for (label i = internalStart_; i < featureEdges_.size(); i++)
137 edgeStat[featureEdges_[i]] = INTERNAL;
148 const scalar includedAngle
159 if (edgeStat[edgeI] == REGION)
163 else if (edgeStat[edgeI] == EXTERNAL)
167 else if (edgeStat[edgeI] == INTERNAL)
173 externalStart_ = nRegion;
174 internalStart_ = externalStart_ + nExternal;
179 featureEdges_.setSize(internalStart_ + nInternal);
182 label externalI = externalStart_;
183 label internalI = internalStart_;
187 if (edgeStat[edgeI] == REGION)
189 featureEdges_[regionI++] = edgeI;
191 else if (edgeStat[edgeI] == EXTERNAL)
193 featureEdges_[externalI++] = edgeI;
195 else if (edgeStat[edgeI] == INTERNAL)
197 featureEdges_[internalI++] = edgeI;
203 calcFeatPoints(edgeStat, minCos);
208void Foam::surfaceFeatures::calcFeatPoints
217 const edgeList& edges = surf_.edges();
218 const pointField& localPoints = surf_.localPoints();
220 forAll(pointEdges, pointi)
222 const labelList& pEdges = pointEdges[pointi];
224 label nFeatEdges = 0;
228 if (edgeStat[pEdges[i]] != NONE)
236 featurePoints.append(pointi);
238 else if (nFeatEdges == 2)
241 DynamicList<vector> edgeVecs(2);
245 const label edgeI = pEdges[i];
247 if (edgeStat[edgeI] != NONE)
249 vector vec = edges[edgeI].vec(localPoints);
250 scalar magVec =
mag(vec);
253 edgeVecs.append(vec/magVec);
258 if (edgeVecs.size() == 2 &&
mag(edgeVecs[0] & edgeVecs[1]) < minCos)
260 featurePoints.append(pointi);
265 featurePoints_.transfer(featurePoints);
269void Foam::surfaceFeatures::classifyFeatureAngles
272 List<edgeStatus>& edgeStat,
274 const bool geometricTestOnly
281 bool selectAll = (
mag(minCos-1.0) < SMALL);
285 const labelList& eFaces = edgeFaces[edgeI];
287 if (eFaces.size() != 2)
290 edgeStat[edgeI] = REGION;
294 label face0 = eFaces[0];
295 label face1 = eFaces[1];
300 && surf_[face0].region() != surf_[face1].region()
303 edgeStat[edgeI] = REGION;
314 surf_[face1].centre(
points)
315 - surf_[face0].centre(
points);
319 edgeStat[edgeI] = INTERNAL;
323 edgeStat[edgeI] = EXTERNAL;
332Foam::label Foam::surfaceFeatures::nextFeatEdge
334 const List<edgeStatus>& edgeStat,
336 const label unsetVal,
337 const label prevEdgeI,
341 const labelList& pEdges = surf_.pointEdges()[vertI];
343 label nextEdgeI = -1;
347 label edgeI = pEdges[i];
352 && edgeStat[edgeI] != NONE
353 && featVisited[edgeI] == unsetVal
380Foam::surfaceFeatures::labelScalar Foam::surfaceFeatures::walkSegment
383 const List<edgeStatus>& edgeStat,
384 const label startEdgeI,
385 const label startPointi,
386 const label currentFeatI,
390 label edgeI = startEdgeI;
392 label vertI = startPointi;
394 scalar visitedLength = 0.0;
398 if (featurePoints_.found(startPointi))
402 return labelScalar(nVisited, visitedLength);
422 unsetVal = currentFeatI;
428 edgeI = nextFeatEdge(edgeStat, featVisited, unsetVal, edgeI, vertI);
430 if (edgeI == -1 || edgeI == startEdgeI)
439 featVisited[edgeI] = currentFeatI;
443 featVisited[edgeI] = -2;
448 const edge&
e = surf_.edges()[edgeI];
450 vertI =
e.otherVertex(vertI);
454 visitedLength +=
e.mag(surf_.localPoints());
458 if (nVisited > surf_.nEdges())
460 Warning<<
"walkSegment : reached iteration limit in walking "
461 <<
"feature edges on surface from edge:" << startEdgeI
462 <<
" vertex:" << startPointi <<
nl
463 <<
"Returning with large length" <<
endl;
465 return labelScalar(nVisited, GREAT);
470 return labelScalar(nVisited, visitedLength);
483Foam::surfaceFeatures::surfaceFeatures::checkFlatRegionEdge
486 const scalar includedAngle,
490 const triSurface& surf = surf_;
492 const edge&
e = surf.edges()[edgeI];
493 const labelList& eFaces = surf.edgeFaces()[edgeI];
497 DynamicList<vector> normals(2);
498 DynamicList<labelList> bins(2);
502 const vector&
n = surf.faceNormals()[eFaces[eFacei]];
508 if (
mag(
n & normals[normalI]) > (1-tol))
517 bins[index].append(eFacei);
519 else if (normals.size() >= 2)
537 if (bins.size() == 1)
559 if (includedAngle >= 0)
565 const vector& ni = surf.faceNormals()[eFaces[i]];
566 for (label j=i+1; j<eFaces.size(); j++)
568 const vector& nj = surf.faceNormals()[eFaces[j]];
569 if (
mag(ni & nj) < minCos)
591 const labelledTri& t = surf.localFaces()[eFaces[bin0[i]]];
592 int dir = t.edgeDirection(
e);
596 regionAndNormal[i] = t.region()+1;
605 regionAndNormal[i] = -(t.region()+1);
614 const labelledTri& t = surf.localFaces()[eFaces[bin1[i]]];
615 int dir = t.edgeDirection(
e);
617 label myRegionAndNormal;
620 myRegionAndNormal = t.region()+1;
624 myRegionAndNormal = -(t.region()+1);
627 regionAndNormal1[i] = myRegionAndNormal;
629 label index = regionAndNormal.find(-myRegionAndNormal);
667 const label externalStart,
668 const label internalStart
672 featurePoints_(featurePoints),
673 featureEdges_(featureEdges),
674 externalStart_(externalStart),
675 internalStart_(externalStart)
683 const scalar includedAngle,
685 const label minElems,
686 const bool geometricTestOnly
697 if (minLen > 0 || minElems > 0)
711 featurePoints_(featInfoDict.
lookup(
"featurePoints")),
712 featureEdges_(featInfoDict.
lookup(
"featureEdges")),
713 externalStart_(featInfoDict.get<label>(
"externalStart")),
714 internalStart_(featInfoDict.get<label>(
"internalStart"))
734 featInfoDict.
readEntry(
"featureEdges", featureEdges_);
735 featInfoDict.
readEntry(
"featurePoints", featurePoints_);
736 featInfoDict.
readEntry(
"externalStart", externalStart_);
737 featInfoDict.
readEntry(
"internalStart", internalStart_);
746 const scalar mergeTol,
747 const bool geometricTestOnly
761 scalar mergeTolSqr =
sqr(mergeTol);
779 const label sEdge = edgeLabel[sEdgeI];
786 dynFeatEdges.
insert(surfEdges[sEdge], count++);
787 dynFeatureEdgeFaces.
append(surfEdgeFaces[sEdge]);
793 classifyFeatureAngles
807 const auto iter = dynFeatEdges.
cfind(surfEdges[eI]);
811 allEdgeStat[eI] = edgeStat[iter.val()];
816 dynFeatEdges.
clear();
825 featurePoints_(sf.featurePoints()),
826 featureEdges_(sf.featureEdges()),
827 externalStart_(sf.externalStart()),
828 internalStart_(sf.internalStart())
836 const bool regionEdges,
837 const bool externalEdges,
838 const bool internalEdges
847 for (label i = 0; i < externalStart_; i++)
849 selectedEdges.
append(featureEdges_[i]);
857 for (label i = externalStart_; i < internalStart_; i++)
859 selectedEdges.
append(featureEdges_[i]);
867 for (label i = internalStart_; i < featureEdges_.size(); i++)
869 selectedEdges.
append(featureEdges_[i]);
873 return selectedEdges.
shrink();
879 const scalar includedAngle,
880 const bool geometricTestOnly
888 classifyFeatureAngles
896 setFromStatus(edgeStat, includedAngle);
905 const label minElems,
906 const scalar includedAngle
923 label startEdgeI = 0;
928 for (; startEdgeI < edgeStat.
size(); startEdgeI++)
932 edgeStat[startEdgeI] != NONE
933 && featLines[startEdgeI] == -1
941 if (startEdgeI == edgeStat.
size())
948 featLines[startEdgeI] = featI;
950 const edge& startEdge = surf_.edges()[startEdgeI];
953 labelScalar leftPath =
964 labelScalar rightPath =
980 + startEdge.
mag(surf_.localPoints())
983 || (leftPath.n_ + rightPath.n_ + 1 < minElems)
989 featLines[startEdgeI] = -2;
1021 label edgeI = featureEdges_[i];
1023 if (featLines[edgeI] == -2)
1025 edgeStat[edgeI] = NONE;
1030 setFromStatus(edgeStat, includedAngle);
1042 deleteBox(edgeStat, bb,
true);
1052 deleteBox(edgeStat, bb,
false);
1060 const bool removeInside
1063 const edgeList& surfEdges = surf_.edges();
1064 const pointField& surfLocalPoints = surf_.localPoints();
1068 const point eMid = surfEdges[edgei].centre(surfLocalPoints);
1081 const plane& cutPlane
1084 const edgeList& surfEdges = surf_.edges();
1086 const labelList& meshPoints = surf_.meshPoints();
1090 const edge&
e = surfEdges[edgei];
1092 const point&
p0 = pts[meshPoints[
e.start()]];
1093 const point& p1 = pts[meshPoints[
e.
end()]];
1099 point featPoint = intersect * (p1 -
p0) +
p0;
1101 if (!onLine(featPoint,
line))
1116 if (surf_.edgeFaces()[edgei].size() == 1)
1128void Foam::surfaceFeatures::checkFlatRegionEdge
1132 const scalar includedAngle
1139 const labelList& eFaces = surf_.edgeFaces()[edgei];
1141 if (eFaces.
size() > 2 && (eFaces.
size() % 2) == 0)
1143 edgeStat[edgei] = checkFlatRegionEdge
1158 featInfoDict.
add(
"externalStart", externalStart_);
1159 featInfoDict.
add(
"internalStart", internalStart_);
1160 featInfoDict.
add(
"featureEdges", featureEdges_);
1161 featInfoDict.
add(
"featurePoints", featurePoints_);
1176 OFstream regionStr(prefix +
"_regionEdges.obj");
1177 Pout<<
"Writing region edges to " << regionStr.
name() <<
endl;
1180 for (label i = 0; i < externalStart_; i++)
1182 const edge&
e = surf_.edges()[featureEdges_[i]];
1186 regionStr <<
"l " << verti-1 <<
' ' << verti <<
endl;
1190 OFstream externalStr(prefix +
"_externalEdges.obj");
1191 Pout<<
"Writing external edges to " << externalStr.
name() <<
endl;
1194 for (label i = externalStart_; i < internalStart_; i++)
1196 const edge&
e = surf_.edges()[featureEdges_[i]];
1200 externalStr <<
"l " << verti-1 <<
' ' << verti <<
endl;
1203 OFstream internalStr(prefix +
"_internalEdges.obj");
1204 Pout<<
"Writing internal edges to " << internalStr.
name() <<
endl;
1207 for (label i = internalStart_; i < featureEdges_.size(); i++)
1209 const edge&
e = surf_.edges()[featureEdges_[i]];
1213 internalStr <<
"l " << verti-1 <<
' ' << verti <<
endl;
1216 OFstream pointStr(prefix +
"_points.obj");
1217 Pout<<
"Writing feature points to " << pointStr.
name() <<
endl;
1219 for (
const label pointi : featurePoints_)
1228 os <<
"Feature set:" <<
nl
1229 <<
" points : " << this->featurePoints().size() <<
nl
1230 <<
" edges : " << this->featureEdges().size() <<
nl
1231 <<
" of which" <<
nl
1232 <<
" region edges : " << this->nRegionEdges() <<
nl
1233 <<
" external edges : " << this->nExternalEdges() <<
nl
1234 <<
" internal edges : " << this->nInternalEdges() <<
endl;
1263 const pointField& surfPoints = surf_.localPoints();
1269 const point& surfPt = surfPoints[surfPointi];
1280 <<
"Problem for point "
1281 << surfPointi <<
" in tree " << ppTree.
bb()
1285 label sampleI = info.
index();
1287 if (
magSqr(
samples[sampleI] - surfPt) < maxDistSqr[sampleI])
1289 nearest.
insert(sampleI, surfPointi);
1300 Pout<<
"Dumping nearest surface feature points to nearestSamples.obj"
1303 OFstream objStream(
"nearestSamples.obj");
1310 objStream<<
"l " << vertI-1 <<
' ' << vertI <<
endl;
1326 const scalar minSampleDist
1329 const pointField& surfPoints = surf_.localPoints();
1330 const edgeList& surfEdges = surf_.edges();
1332 scalar maxSearchSqr =
max(maxDistSqr);
1351 label surfEdgeI = selectedEdges[i];
1353 const edge&
e = surfEdges[surfEdgeI];
1355 if (debug && (i % 1000) == 0)
1357 Pout<<
"looking at surface feature edge " << surfEdgeI
1358 <<
" verts:" <<
e <<
" points:" << surfPoints[
e[0]]
1359 <<
' ' << surfPoints[
e[1]] <<
endl;
1363 vector eVec =
e.vec(surfPoints);
1364 scalar eMag =
mag(eVec);
1379 point edgePoint(surfPoints[
e.start()] +
s*eVec);
1393 label sampleI = info.
index();
1397 nearest.
insert(sampleI, surfEdgeI);
1407 s +=
max(minSampleDist*eMag, sampleDist[sampleI]);
1409 if (
s >= (1-minSampleDist)*eMag)
1424 Pout<<
"Dumping nearest surface edges to nearestEdges.obj"
1427 OFstream objStream(
"nearestEdges.obj");
1432 const label sampleI = iter.key();
1434 const edge&
e = surfEdges[iter.val()];
1439 e.line(surfPoints).nearestDist(
samples[sampleI]).rawPoint();
1443 objStream<<
"l " << vertI-1 <<
' ' << vertI <<
endl;
1464 const scalar minSampleDist
1483 const pointField& surfPoints = surf_.localPoints();
1484 const edgeList& surfEdges = surf_.edges();
1486 scalar maxSearchSqr =
max(maxDistSqr);
1497 label surfEdgeI = selectedEdges[i];
1499 const edge&
e = surfEdges[surfEdgeI];
1501 if (debug && (i % 1000) == 0)
1503 Pout<<
"looking at surface feature edge " << surfEdgeI
1504 <<
" verts:" <<
e <<
" points:" << surfPoints[
e[0]]
1505 <<
' ' << surfPoints[
e[1]] <<
endl;
1509 vector eVec =
e.vec(surfPoints);
1510 scalar eMag =
mag(eVec);
1525 point edgePoint(surfPoints[
e.start()] +
s*eVec);
1539 label index = info.
index();
1541 label sampleEdgeI = ppTree.
shapes().edgeLabels()[index];
1543 const edge&
e = sampleEdges[sampleEdgeI];
1564 if (
s >= (1-minSampleDist)*eMag)
1578 Pout<<
"Dumping nearest surface feature edges to nearestEdges.obj"
1581 OFstream objStream(
"nearestEdges.obj");
1586 const label sampleEdgeI = iter.key();
1588 const edge& sampleEdge = sampleEdges[sampleEdgeI];
1597 objStream<<
"l " << vertI-1 <<
' ' << vertI <<
endl;
1611 scalar searchSpanSqr,
1621 const pointField& localPoints = surf_.localPoints();
1657 edgeLabel[i] = selectedEdges[info.
index()];
1660 const edge&
e = surf_.edges()[edgeLabel[i]];
1664 localPoints[
e.start()],
1665 localPoints[
e.
end()],
1670 edgeEndPoint[i] = pHit.
index();
1685 const vector& searchSpan,
1693 pointOnFeature.
setSize(selectedSampleEdges.
size());
1703 surf_.localPoints(),
1712 forAll(selectedSampleEdges, i)
1714 const edge&
e = sampleEdges[selectedSampleEdges[i]];
1720 treeBoundBox tightest(eMid - searchSpan, eMid + searchSpan);
1735 edgeLabel[i] = selectedEdges[info.
index()];
1737 pointOnFeature[i] = info.
hitPoint();
1747 scalar searchSpanSqr,
1751 edgeLabel =
labelList(surf_.nEdges(), -1);
1771 const edgeList& surfEdges = surf_.edges();
1772 const pointField& surfLocalPoints = surf_.localPoints();
1778 const point& startPoint = surfLocalPoints[
sample.start()];
1791 const edge& featEdge = edges[infoMid.
index()];
1795 if (
mag(surfEdgeDir ^ featEdgeDir) < parallelTolerance)
1797 edgeLabel[edgeI] = edgeI;
1816 <<
"Operating on different surfaces"
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
DynamicList< T, SizeMin > & shrink()
Shrink the allocated space to the number of elements used.
void append(const T &val)
Copy append an element to the end of this list.
void setCapacity(const label len)
Alter the size of the underlying storage.
Map from edge (expressed as its endpoints) to value. For easier forward declaration it is currently i...
Minimal example by using system/controlDict.functions:
const_iterator cfind(const Key &key) const
Find and return an const_iterator set at the hashed entry.
bool insert(const Key &key, const T &obj)
Copy insert a new entry, not overwriting existing entries.
label size() const noexcept
The number of elements in table.
void clear()
Clear all entries from table.
Input from file stream, using an ISstream.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
void setSize(const label n)
Alias for resize()
void clear()
Clear the list, i.e. set size to zero.
A HashTable to objects of type <T> with a label key.
Output to file stream, using an OSstream.
virtual const fileName & name() const
Read/write access to the name of the stream.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
const point_type & rawPoint() const noexcept
The point, no checks. Same as point()
label index() const noexcept
Return the hit index.
bool hit() const noexcept
Is there a hit?
const point_type & hitPoint() const
Return hit point. Fatal if not hit.
label nEdges() const
Number of edges in patch.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
const labelListList & edgeFaces() const
Return edge-face addressing.
iterator end() noexcept
Return an iterator to end traversing the UList.
void size(const label n)
Older name for setAddressableSize.
const Cmpt & z() const
Access to the vector z component.
const Cmpt & y() const
Access to the vector y component.
const Cmpt & x() const
Access to the vector x component.
void inflate(const scalar s)
Inflate box by factor*mag(span) in all dimensions.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
entry * add(entry *entryPtr, bool mergeEntry=false)
Add a new entry.
void write(Ostream &os, const bool subDict=true) const
Write dictionary, normally with sub-dictionary formatting.
bool readEntry(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX, bool mandatory=true) const
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
point centre(const UList< point > &pts) const
Return centre point (centroid) of the edge.
vector vec(const UList< point > &pts) const
Return the vector (end - start)
scalar mag(const UList< point > &pts) const
Return scalar magnitude of the edge.
A class for handling file names.
virtual bool write()
Write the output fields.
Foam::dictionary writeDict() const
Write to dictionary.
Non-pointer based hierarchical recursive searching.
const treeBoundBox & bb() const
Top bounding box.
const Type & shapes() const
Reference to shape.
PointRef end() const noexcept
Return second (last) point.
Point centre() const
Return centre (centroid)
PointRef start() const noexcept
Return first point.
Mid-point interpolation (weighting factors = 0.5) scheme class.
Geometric class that creates a 3D plane and can return the intersection point between a line and the ...
scalar lineIntersect(const line< Point, PointRef > &l) const
Return the cutting point between the plane and.
Lookup type of boundary radiation properties.
Holds feature edges/points of surface.
void findFeatures(const scalar includedAngle, const bool geometricTestOnly)
Find feature edges using provided included angle.
labelList selectFeatureEdges(const bool regionEdges, const bool externalEdges, const bool internalEdges) const
Helper function: select a subset of featureEdges_.
void setFromStatus(const List< edgeStatus > &edgeStat, const scalar includedAngle)
Set from status per edge.
const triSurface & surface() const
void excludeOpen(List< edgeStatus > &edgeStat) const
Mark edges with a single connected face as 'NONE'.
void subsetPlane(List< edgeStatus > &edgeStat, const plane &cutPlane) const
If edge does not intersect the plane, mark as 'NONE'.
void operator=(const surfaceFeatures &rhs)
void writeObj(const fileName &prefix) const
Write to separate OBJ files (region, external, internal edges,.
Map< pointIndexHit > nearestEdges(const labelList &selectedEdges, const edgeList &sampleEdges, const labelList &selectedSampleEdges, const pointField &samplePoints, const scalarField &sampleDist, const scalarField &maxDistSqr, const scalar minSampleDist=0.1) const
Like nearestSamples but now gets nearest point on.
List< edgeStatus > toStatus() const
From member feature edges to status per edge.
void subsetBox(List< edgeStatus > &edgeStat, const treeBoundBox &bb) const
Mark edge status outside box as 'NONE'.
@ NONE
Not a classified feature edge.
void nearestSurfEdge(const labelList &selectedEdges, const pointField &samples, scalar searchSpanSqr, labelList &edgeLabel, labelList &edgeEndPoint, pointField &edgePoint) const
Find nearest surface edge (out of selectedEdges) for.
void deleteBox(List< edgeStatus > &edgeStat, const treeBoundBox &bb, const bool removeInside) const
Mark edge status as 'NONE' for edges inside/outside box.
label internalStart() const
Start of internal edges.
label externalStart() const
Start of external edges.
void writeStats(Ostream &os) const
Write some information.
Map< label > nearestSamples(const labelList &selectedPoints, const pointField &samples, const scalarField &maxDistSqr) const
Find nearest sample for selected surface points.
void nearestFeatEdge(const edgeList &edges, const pointField &points, scalar searchSpanSqr, labelList &edgeLabel) const
Find nearest feature edge to each surface edge. Uses the.
const labelList & featureEdges() const
Return feature edge list.
const labelList & featurePoints() const
Return feature point list.
labelList trimFeatures(const scalar minLen, const label minElems, const scalar includedAngle)
Delete small sets of edges. Edges are stringed up and any.
void excludeBox(List< edgeStatus > &edgeStat, const treeBoundBox &bb) const
Mark edge status inside box as 'NONE'.
Standard boundBox with extra functionality for use in octree.
bool contains(const vector &dir, const point &) const
Contains point (inside or on edge) and moving in direction.
Holds data for octree to work on an edges subset.
Holds (reference to) pointField. Encapsulation of data needed for octree searches....
Triangulated surface description with patch information.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
const volScalarField & p0
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
OBJstream os(runTime.globalPath()/outputName)
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
surfaceVectorField faceNormals(mesh.Sf()/mesh.magSf())
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
labelList identity(const label len, label start=0)
Return an identity map of the given length with (map[i] == i)
List< label > labelList
A List of labels.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
PointIndexHit< point > pointIndexHit
A PointIndexHit for 3D points.
line< point, const point & > linePointRef
A line using referred points.
dimensionedScalar sin(const dimensionedScalar &ds)
vectorField pointField
pointField is a vectorField.
Ostream & endl(Ostream &os)
Add newline and flush stream.
constexpr scalar degToRad() noexcept
Multiplication factor for degrees to radians conversion.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
List< labelList > labelListList
A List of labelList.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
errorManip< error > abort(error &err)
PointHit< point > pointHit
A PointIndexHit for 3D points.
Field< vector > vectorField
Specialisation of Field<T> for vector.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
dimensionedScalar cos(const dimensionedScalar &ds)
constexpr char nl
The newline '\n' character (0x0a)
labelList pointLabels(nPoints, -1)
#define forAll(list, i)
Loop across all elements in list.
#define forAllConstIters(container, iter)
Iterate across all elements of the container object with const access.
Unit conversion functions.
scalarField samples(nIntervals, Zero)