65 scalar calcVertexNormalWeight
81 const vector e1 = points[f[index]] - points[f[f.
fcIndex(index)]];
82 const vector e2 = points[f[index]] - points[f[f.rcIndex(index)]];
96 const scalar perturbX = refPt.
x() + 1e-3;
97 const scalar perturbY = refPt.
y() + 1e-3;
98 const scalar perturbZ = refPt.
z() + 1e-3;
100 if (
mag(planeCoeffs[2]) < SMALL)
102 if (
mag(planeCoeffs[1]) < SMALL)
108 + planeCoeffs[1]*perturbY
109 + planeCoeffs[2]*perturbZ
124 + planeCoeffs[0]*perturbX
125 + planeCoeffs[2]*perturbZ
141 + planeCoeffs[0]*perturbX
142 + planeCoeffs[1]*perturbY
168 const point& pt = points[pI];
169 const vector& normal = pointNormals[meshPointMap[pI]];
171 if (
mag(normal) < SMALL)
180 vector dir1 = pt - randomPointInPlane(p);
183 vector dir2 = dir1 ^ normal;
186 pointCoordSys[meshPointMap[pI]] =
triad(dir1, dir2, normal);
189 return pointCoordSys;
198 Info<<
"Calculating vertex normals" <<
endl;
212 const label facei = pFaces[fI];
213 const triFace& f = surf[facei];
217 scalar weight = calcVertexNormalWeight
225 pointNormals[pI] += weight*fN;
228 pointNormals[pI] /=
mag(pointNormals[pI]) + VSMALL;
244 Info<<
"Calculating face curvature" <<
endl;
285 const edge& e = fEdges[feI];
287 edgeVectors[feI] = e.
vec(points);
288 normalDifferences[feI] =
289 pointNormals[meshPointMap[e[0]]]
290 - pointNormals[meshPointMap[e[1]]];
294 const vector& e0 = edgeVectors[0];
296 const vector e1 = (e0 ^ eN);
298 if (
magSqr(eN) < ROOTVSMALL)
303 triad faceCoordSys(e0, e1, eN);
304 faceCoordSys.normalize();
311 for (
label i = 0; i < 3; ++i)
313 scalar
x = edgeVectors[i] & faceCoordSys[0];
314 scalar
y = edgeVectors[i] & faceCoordSys[1];
322 scalar dndx = normalDifferences[i] & faceCoordSys[0];
323 scalar dndy = normalDifferences[i] & faceCoordSys[1];
326 Z[1] += dndx*y + dndy*
x;
339 const label patchPointIndex = meshPointMap[f[fpI]];
341 const triad& ptCoordSys = pointCoordSys[patchPointIndex];
343 if (!ptCoordSys.
set())
350 triad rotatedFaceCoordSys = rotTensor &
tensor(faceCoordSys);
356 ptCoordSys[0] & rotatedFaceCoordSys[0],
357 ptCoordSys[0] & rotatedFaceCoordSys[1]
361 ptCoordSys[1] & rotatedFaceCoordSys[0],
362 ptCoordSys[1] & rotatedFaceCoordSys[1]
373 projTensor.x() & (secondFundamentalTensor & projTensor.x()),
374 projTensor.x() & (secondFundamentalTensor & projTensor.y()),
375 projTensor.y() & (secondFundamentalTensor & projTensor.y())
380 scalar weight = calcVertexNormalWeight
383 meshPoints[patchPointIndex],
389 pointFundamentalTensors[patchPointIndex] +=
390 weight*projectedFundamentalTensor;
392 accumulatedWeights[patchPointIndex] += weight;
397 Info<<
"Points = " << points[f[0]] <<
" " 398 << points[f[1]] <<
" " 399 << points[f[2]] <<
endl;
400 Info<<
"edgeVecs = " << edgeVectors[0] <<
" " 401 << edgeVectors[1] <<
" " 402 << edgeVectors[2] <<
endl;
403 Info<<
"normDiff = " << normalDifferences[0] <<
" " 404 << normalDifferences[1] <<
" " 405 << normalDifferences[2] <<
endl;
406 Info<<
"faceCoordSys = " << faceCoordSys <<
endl;
412 forAll(curvaturePointField, pI)
414 pointFundamentalTensors[pI] /= (accumulatedWeights[pI] + SMALL);
420 scalar curvature =
max 422 mag(principalCurvatures[0]),
423 mag(principalCurvatures[1])
427 curvaturePointField[meshPoints[pI]] = curvature;
430 return curvaturePointField;
434 bool edgesConnected(
const edge& e1,
const edge& e2)
451 scalar calcProximityOfFeaturePoints
454 const scalar defaultCellSize
457 scalar minDist = defaultCellSize;
462 hI1 < hitList.
size() - 1;
473 hI2 < hitList.
size();
483 minDist =
min(curDist, minDist);
493 scalar calcProximityOfFeatureEdges
497 const scalar defaultCellSize
500 scalar minDist = defaultCellSize;
505 hI1 < hitList.
size() - 1;
518 hI2 < hitList.
size();
529 if (!edgesConnected(e1, e2))
534 minDist =
min(curDist, minDist);
549 Info<<
"Dumping bounding box " << bb <<
" as lines to obj file " 550 << str.name() <<
endl;
564 str<<
"l " << e[0]+1 <<
' ' << e[1]+1 <<
nl;
574 const bool removeInside,
597 ( p.
x() <
min(a.
x(), b.
x()) || p.
x() >
max(a.
x(), b.
x()) )
598 || ( p.
y() <
min(a.
y(), b.
y()) || p.
y() >
max(a.
y(), b.
y()) )
599 || ( p.
z() <
min(a.
z(), b.
z()) || p.
z() >
max(a.
z(), b.
z()) )
613 const plane& cutPlane,
623 const point& p0 = points[meshPoints[e.
start()]];
624 const point& p1 = points[meshPoints[e.
end()]];
630 point featPoint = intersect * (p1 - p0) + p0;
632 if (!onLine(featPoint, line))
650 Info<< nl <<
"# findLineAll did not hit its own face." 651 << nl <<
"# fI " << fI
652 << nl <<
"# start " << start[fI]
653 << nl <<
"# f centre " << faceCentres[fI]
654 << nl <<
"# end " << end[fI]
655 << nl <<
"# hitInfo " << hitInfo
672 label hFI = hitInfo[hI].index();
691 const scalar includedAngle,
701 const labelList& eFaces = edgeFaces[edgeI];
703 if (eFaces.
size() > 2)
705 label i0 = eFaces[0];
713 for (
label i = 1; i < eFaces.
size(); i++)
720 if (
mag(n&n0) < minCos)
744 const scalar includedAngle,
764 if (
mag(n&normals[normalI]) > (1-tol))
773 bins[index].append(eFacei);
775 else if (normals.
size() >= 2)
793 if (bins.size() == 1)
815 if (includedAngle >= 0)
825 if (
mag(ni & nj) < minCos)
853 regionAndNormal[i] = t.
region()+1;
862 regionAndNormal[i] = -(t.
region()+1);
874 label myRegionAndNormal;
877 myRegionAndNormal = t.
region()+1;
881 myRegionAndNormal = -(t.
region()+1);
884 regionAndNormal1[i] = myRegionAndNormal;
908 os <<
" points : " << fem.
points().
size() << nl
918 <<
" edges : " << fem.
edges().
size() << nl
920 <<
" external edges : " 922 <<
" internal edges : " 928 <<
" multiply connected : " 934 int main(
int argc,
char *argv[])
938 "extract and write surface features to file" 956 if (!iter().isDict())
961 const dictionary& surfaceDict = iter().dict();
963 if (!surfaceDict.
found(
"extractionMethod"))
968 const word extractionMethod = surfaceDict.
lookup(
"extractionMethod");
970 const fileName surfFileName = iter().keyword();
973 Info<<
"Surface : " << surfFileName << nl <<
endl;
982 const Switch featureProximity =
988 Info<< nl <<
"Feature line extraction is only valid on closed manifold " 989 <<
"surfaces." <<
endl;
1004 faces[fI] = surf[fI].triFaceFace();
1013 scalar includedAngle = 0.0;
1015 if (extractionMethod ==
"extractFromFile")
1018 surfaceDict.
subDict(
"extractFromFileCoeffs");
1021 extractFromFileDict.
lookup(
"featureEdgeFile");
1023 const Switch geometricTestOnly =
1026 "geometricTestOnly",
1035 Info<< nl <<
"Reading existing feature edges from file " 1036 << featureEdgeFile << nl
1037 <<
"Selecting edges purely based on geometric tests: " 1052 else if (extractionMethod ==
"extractFromSurface")
1055 surfaceDict.
subDict(
"extractFromSurfaceCoeffs");
1060 const Switch geometricTestOnly =
1063 "geometricTestOnly",
1068 <<
"Constructing feature set from included angle " 1069 << includedAngle << nl
1070 <<
"Selecting edges purely based on geometric tests: " 1071 << geometricTestOnly.asText() <<
endl;
1088 <<
"No initial feature set. Provide either one" 1089 <<
" of extractFromFile (to read existing set)" << nl
1090 <<
" or extractFromSurface (to construct new set from angle)" 1098 if (surfaceDict.
isDict(
"trimFeatures"))
1108 if (minElem > 0 || minLen > 0)
1110 Info<<
"Removing features of length < " 1112 Info<<
"Removing features with number of edges < " 1115 set().trimFeatures(minLen, minElem, includedAngle);
1126 if (surfaceDict.
isDict(
"subsetFeatures"))
1133 if (subsetDict.
found(
"insideBox"))
1137 Info<<
"Removing all edges outside bb " << bb <<
endl;
1138 dumpBox(bb,
"subsetBox.obj");
1140 deleteBox(surf, bb,
false, edgeStat);
1142 else if (subsetDict.
found(
"outsideBox"))
1146 Info<<
"Removing all edges inside bb " << bb <<
endl;
1147 dumpBox(bb,
"deleteBox.obj");
1149 deleteBox(surf, bb,
true, edgeStat);
1152 const Switch nonManifoldEdges =
1155 if (!nonManifoldEdges)
1157 Info<<
"Removing all non-manifold edges" 1158 <<
" (edges with > 2 connected faces) unless they" 1159 <<
" cross multiple regions" <<
endl;
1169 && (eFaces.
size() % 2) == 0
1172 edgeStat[edgeI] = checkFlatRegionEdge
1188 Info<<
"Removing all open edges" 1189 <<
" (edges with 1 connected face)" <<
endl;
1200 if (subsetDict.
found(
"plane"))
1204 deleteEdges(surf, cutPlane, edgeStat);
1206 Info<<
"Only edges that intersect the plane with normal " 1208 <<
" and base point " << cutPlane.
refPoint()
1209 <<
" will be included as feature edges."<<
endl;
1215 newSet.setFromStatus(edgeStat, includedAngle);
1218 <<
"Initial feature set:" << nl
1219 <<
" feature points : " << newSet.featurePoints().size() << nl
1220 <<
" feature edges : " << newSet.featureEdges().size() << nl
1221 <<
" of which" << nl
1222 <<
" region edges : " << newSet.nRegionEdges() << nl
1223 <<
" external edges : " << newSet.nExternalEdges() << nl
1224 <<
" internal edges : " << newSet.nInternalEdges() << nl
1241 if (
findIndex(surfBaffleNames, name) != -1)
1243 Info<<
"Adding baffle region " << name <<
endl;
1244 surfBaffleRegions[pI] =
true;
1253 sFeatFileName +
".extendedFeatureEdgeMesh",
1258 if (surfaceDict.
isDict(
"addFeatures"))
1260 const word addFeName = surfaceDict.
subDict(
"addFeatures")[
"name"];
1261 Info<<
"Adding (without merging) features from " << addFeName
1270 "extendedFeatureEdgeMesh",
1276 Info<<
"Read " << addFeMesh.name() <<
nl;
1277 writeStats(addFeMesh,
Info);
1279 feMesh.add(addFeMesh);
1284 <<
"Final feature set:" <<
nl;
1285 writeStats(feMesh,
Info);
1287 Info<< nl <<
"Writing extendedFeatureEdgeMesh to " 1288 << feMesh.objectPath() <<
endl;
1290 mkDir(feMesh.path());
1294 feMesh.writeObj(feMesh.path()/surfFileName.
lessExt().
name());
1316 Info<< nl <<
"Writing featureEdgeMesh to " 1317 << bfeMesh.objectPath() <<
endl;
1319 bfeMesh.regIOobject::write();
1390 Info<< nl <<
"Extracting internal and external closeness of " 1391 <<
"surface." <<
endl;
1398 sFeatFileName +
".closeness",
1413 const vectorField& normals = searchSurf.faceNormals();
1415 scalar span = searchSurf.bounds().mag();
1417 scalar externalAngleTolerance = 10;
1418 scalar externalToleranceCosAngle =
1421 degToRad(180 - externalAngleTolerance)
1424 scalar internalAngleTolerance = 45;
1425 scalar internalToleranceCosAngle =
1428 degToRad(180 - internalAngleTolerance)
1431 Info<<
"externalToleranceCosAngle: " << externalToleranceCosAngle
1433 <<
"internalToleranceCosAngle: " << internalToleranceCosAngle
1438 pointField start(searchSurf.faceCentres() - span*normals);
1439 pointField end(searchSurf.faceCentres() + span*normals);
1440 const pointField& faceCentres = searchSurf.faceCentres();
1445 searchSurf.findLineAll(start, end, allHitInfo);
1454 if (hitInfo.
size() < 1)
1456 drawHitProblem(fI, surf, start, faceCentres, end, hitInfo);
1462 else if (hitInfo.
size() == 1)
1464 if (!hitInfo[0].hit())
1470 else if (hitInfo[0].index() != fI)
1495 if (hitInfo[hI].index() == fI)
1519 else if (ownHitI == 0)
1528 & normals[hitInfo[ownHitI + 1].index()]
1530 < externalToleranceCosAngle
1533 externalCloseness[fI] =
1537 - hitInfo[ownHitI + 1].hitPoint()
1541 else if (ownHitI == hitInfo.
size() - 1)
1550 & normals[hitInfo[ownHitI - 1].index()]
1552 < internalToleranceCosAngle
1555 internalCloseness[fI] =
1559 - hitInfo[ownHitI - 1].hitPoint()
1569 & normals[hitInfo[ownHitI + 1].index()]
1571 < externalToleranceCosAngle
1574 externalCloseness[fI] =
1578 - hitInfo[ownHitI + 1].hitPoint()
1586 & normals[hitInfo[ownHitI - 1].index()]
1588 < internalToleranceCosAngle
1591 internalCloseness[fI] =
1595 - hitInfo[ownHitI - 1].hitPoint()
1606 sFeatFileName +
".internalCloseness",
1618 internalClosenessField.write();
1624 sFeatFileName +
".externalCloseness",
1636 externalClosenessField.write();
1646 "internalCloseness",
1658 "externalCloseness",
1669 Info<< nl <<
"Extracting curvature of surface at the points." 1672 vectorField pointNormals = calcVertexNormals(surf);
1673 triadField pointCoordSys = calcVertexCoordSys(surf, pointNormals);
1703 if (featureProximity)
1705 Info<< nl <<
"Extracting proximity of close feature points and " 1706 <<
"edges to the surface" <<
endl;
1708 const scalar searchDistance =
1718 const scalar radiusSqr =
min 1726 feMesh.allNearestFeatureEdges(triCentre, radiusSqr, hitList);
1728 featureProximity[fI] =
1729 calcProximityOfFeatureEdges
1733 featureProximity[fI]
1736 feMesh.allNearestFeaturePoints(triCentre, radiusSqr, hitList);
1738 featureProximity[fI] =
1739 calcProximityOfFeaturePoints
1742 featureProximity[fI]
1750 sFeatFileName +
".featureProximity",
1762 featureProximityField.write();
label nonFeatureStart() const
Return the index of the start of the non-feature points.
label nPoints() const
Return number of points supporting patch faces.
bool found(const word &, bool recursive=false, bool patternMatch=true) const
Search dictionary for given keyword.
#define forAll(list, i)
Loop across all elements in list.
A triangle primitive used to calculate face normals and swept volumes.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
A class for handling file names.
errorManipArg< error, int > exit(error &err, const int errNo=1)
A 1D vector of objects of type <T> with a fixed size <Size>.
A list of keyword definitions, which are a keyword followed by any number of values (e...
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
T lookupOrAddDefault(const word &, const T &, bool recursive=false, bool patternMatch=true)
Find and return a T, if not found return the given.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Unit conversion functions.
void size(const label)
Override size to be inconsistent with allocated storage.
label multipleStart() const
Return the index of the start of the multiply-connected feature.
dimensionedVector eigenValues(const dimensionedTensor &dt)
Ostream & endl(Ostream &os)
Add newline and flush stream.
A simple wrapper around bool so that it can be read as a word: true/false, on/off, yes/no, y/n, t/f, or none.
static void noParallel()
Remove the parallel options.
label openStart() const
Return the index of the start of the open feature edges.
const Field< PointType > & faceNormals() const
Return face normals for patch.
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
label k
Boltzmann constant.
edgeList edges() const
Return edges in face point ordering,.
Geometric class that creates a 2D plane and can return the intersection point between a line and the ...
tensor rotationTensor(const vector &n1, const vector &n2)
Rotational transformation tensor from vector n1 to n2.
fileName constantPath() const
Return constant path.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Templated 2D tensor derived from VectorSpace adding construction from 4 components, element access using xx(), xy(), yx() and yy() member functions and the iner-product (dot-product) and outer-product of two Vector2Ds (tensor-product) operators.
scalar degToRad(const scalar deg)
Conversion from degrees to radians.
const labelList & meshPoints() const
Return labelList of mesh points in patch. They are constructed.
bool isDict(const word &) const
Check if entry is a sub-dictionary.
int edgeDirection(const edge &) const
Return the edge direction on the face.
bool set(const direction d) const
Is the vector in the direction d set.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
IOoject and searching on triSurface.
const List< Face > & localFaces() const
Return patch faces addressing into local point list.
const Point & hitPoint() const
Return hit point.
label region() const
Return region label.
const Map< label > & meshPointMap() const
Mesh point map. Given the global point index find its.
label flatStart() const
Return the index of the start of the flat feature edges.
dimensionedScalar cos(const dimensionedScalar &ds)
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
void writeStats(Ostream &) const
Write some statistics.
label internalStart() const
Return the index of the start of the internal feature edges.
A class for handling words, derived from string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
A triangular face using a FixedList of labels corresponding to mesh vertices.
const point & refPoint() const
Return or return plane base point.
void append(const T &)
Append an element at the end of the list.
const edgeList & edges() const
Return edges.
const word & constant() const
Return constant name.
Info<< "Finished reading KIVA file"<< endl;cellShapeList cellShapes(nPoints);labelList cellZoning(nPoints, -1);const cellModel &hex=*(cellModeller::lookup("hex"));labelList hexLabels(8);label activeCells=0;labelList pointMap(nPoints);forAll(pointMap, i){ pointMap[i]=i;}for(label i=0;i< nPoints;i++){ if(f[i] > 0.0) { hexLabels[0]=i;hexLabels[1]=i1tab[i];hexLabels[2]=i3tab[i1tab[i]];hexLabels[3]=i3tab[i];hexLabels[4]=i8tab[i];hexLabels[5]=i1tab[i8tab[i]];hexLabels[6]=i3tab[i1tab[i8tab[i]]];hexLabels[7]=i3tab[i8tab[i]];cellShapes[activeCells]=cellShape(hex, hexLabels);edgeList edges=cellShapes[activeCells].edges();forAll(edges, ei) { if(edges[ei].mag(points)< SMALL) { label start=pointMap[edges[ei].start()];while(start !=pointMap[start]) { start=pointMap[start];} label end=pointMap[edges[ei].end()];while(end !=pointMap[end]) { end=pointMap[end];} label minLabel=min(start, end);pointMap[start]=pointMap[end]=minLabel;} } cellZoning[activeCells]=idreg[i];activeCells++;}}cellShapes.setSize(activeCells);cellZoning.setSize(activeCells);forAll(cellShapes, celli){ cellShape &cs=cellShapes[celli];forAll(cs, i) { cs[i]=pointMap[cs[i]];} cs.collapse();}label bcIDs[11]={-1, 0, 2, 4, -1, 5, -1, 6, 7, 8, 9};const label nBCs=12;const word *kivaPatchTypes[nBCs]={ &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &symmetryPolyPatch::typeName, &wedgePolyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &symmetryPolyPatch::typeName, &oldCyclicPolyPatch::typeName};enum patchTypeNames{ PISTON, VALVE, LINER, CYLINDERHEAD, AXIS, WEDGE, INFLOW, OUTFLOW, PRESIN, PRESOUT, SYMMETRYPLANE, CYCLIC};const char *kivaPatchNames[nBCs]={ "piston", "valve", "liner", "cylinderHead", "axis", "wedge", "inflow", "outflow", "presin", "presout", "symmetryPlane", "cyclic"};List< SLList< face > > pFaces[nBCs]
word name() const
Return file name (part beyond last /)
bool readIfPresent(const word &, T &, bool recursive=false, bool patternMatch=true) const
Find an entry if present, and assign to T.
bool hit() const
Is there a hit.
const Field< PointType > & points() const
Return reference to global points.
static const edgeList edges
Edge to point addressing.
PointRef start() const
Return first vertex.
const labelListList & edgeFaces() const
Return edge-face addressing.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
List< label > labelList
A List of labels.
const word dictName("particleTrackDict")
Triangle with additional region number.
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
scalar circumRadius() const
Return circum-radius.
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
errorManip< error > abort(error &err)
label fcIndex(const label i) const
Return the forward circular index, i.e. the next index.
label mixedStart() const
Return the index of the start of the mixed type feature points.
bool contains(const vector &dir, const point &) const
Contains point (inside or on edge) and moving in direction.
const labelListList & pointFaces() const
Return point-face addressing.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
An Ostream is an abstract base class for all output systems (streams, files, token lists...
const Field< PointType > & localPoints() const
Return pointField of points in patch.
vector vec(const pointField &) const
Return the vector (end - start)
virtual void write(const fileName &outputDir, const fileName &surfaceName, const pointField &points, const faceList &faces, const bool verbose=false) const
Write single surface geometry to file.
label size() const
Return the number of elements in the FixedList.
const pointField & points() const
Return points.
const Time & time() const
Return time.
Points connected by edges.
const char * asText() const
Return a text representation of the Switch.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurence of given element and return index,.
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
bool mkDir(const fileName &, mode_t=0777)
Make a directory and return an error if it could not be created.
IOobject dictIO(dictName, runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE)
scalar lineIntersect(const line< Point, PointRef > &l) const
Return the cutting point between the plane and.
A templated 2D square symmetric matrix of objects of <T>, where the n x n matrix dimension is known a...
Representation of a 3D Cartesian coordinate system as a Vector of vectors.
const geometricSurfacePatchList & patches() const
Point circumCentre() const
Return circum-centre.
const vector & normal() const
Return plane normal.
time_t elapsedClockTime() const
Returns wall-clock time from clock instantiation.
double elapsedCpuTime() const
Return CPU time (in seconds) from the start.
vector point
Point is a vector.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
A surfaceWriter for VTK legacy format.
const dimensionSet dimLength(0, 1, 0, 0, 0, 0, 0)
vector normal(const pointField &) const
Vector normal; magnitude is equal to area of face.
label end() const
Return end vertex label.
PointRef end() const
Return second vertex.
fileName lessExt() const
Return file name without extension (part before last .)
Templated 2D symmetric tensor derived from VectorSpace adding construction from 4 components...
tmp< pointField > points() const
Vertex coordinates. In octant coding.
Standard boundBox + extra functionality for use in octree.
dimensioned< scalar > mag(const dimensioned< Type > &)
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
static void addNote(const string &)
Add extra notes for the usage information.
FixedList< scalar, 4 > planeCoeffs() const
Return coefficients for the.
virtual bool write(const bool valid=true) const
Write using setting from DB.
Triangulated surface description with patch information.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Tensor< scalar > tensor
Tensor of scalars.
label index() const
Return index.
static const SymmTensor2D< Cmpt > zero
label start() const
Return start vertex label.
Holds feature edges/points of surface.
label concaveStart() const
Return the index of the start of the concave feature points.
void LUsolve(scalarSquareMatrix &matrix, List< Type > &source)
Solve the matrix using LU decomposition with pivoting.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.