50 distributedTriSurfaceMesh,
75 bool Foam::distributedTriSurfaceMesh::read()
85 distType_ = distributionTypeNames_.read(dict_.lookup(
"distributionType"));
88 mergeDist_ = dict_.lookup<scalar>(
"mergeDistance");
95 bool Foam::distributedTriSurfaceMesh::isLocal
104 if (myBbs[bbI].contains(start) && myBbs[bbI].contains(end))
175 void Foam::distributedTriSurfaceMesh::distributeSegment
177 const label segmentI,
202 if (isLocal(bbs, start, end))
205 allSegmentMap.
append(segmentI);
231 sendMap[proci].append(allSegments.
size());
232 allSegmentMap.
append(segmentI);
256 Foam::distributedTriSurfaceMesh::distributeSegments
300 dynSendMap[proci].
shrink();
301 sendMap[proci].
transfer(dynSendMap[proci]);
304 allSegments.
transfer(dynAllSegments.shrink());
305 allSegmentMap.
transfer(dynAllSegmentMap.shrink());
330 forAll(constructMap, proci)
336 constructMap[proci].
setSize(nRecv);
338 for (
label i = 0; i < nRecv; i++)
340 constructMap[proci][i] = segmentI++;
357 void Foam::distributedTriSurfaceMesh::findLine
359 const bool nearestIntersection,
378 if (nearestIntersection)
380 info[i] = octree.findLine(start[i], end[i]);
403 if (nearestIntersection)
405 info[i] = octree.findLine(start[i], end[i]);
414 info[i].setIndex(triIndexer.
toGlobal(info[i].index()));
451 label nOldAllSegments = allSegments.
size();
468 if (nearestIntersection)
470 intersections[i] = octree.findLine
472 allSegments[i].
first(),
480 allSegments[i].
first(),
486 if (intersections[i].hit())
490 triIndexer.
toGlobal(intersections[i].index())
508 label segmentI = allSegmentMap[i];
518 else if (nearestIntersection)
541 Foam::distributedTriSurfaceMesh::calcLocalQueries
574 sendMap[proci].
setSize(nSend[proci]);
584 triangleIndex[i] = triIndexer.
toLocal(proci, info[i].index());
585 sendMap[proci][nSend[proci]++] = i;
589 triangleIndex[i] = -1;
619 forAll(constructMap, proci)
625 constructMap[proci].
setSize(nRecv);
627 for (
label i = 0; i < nRecv; i++)
629 constructMap[proci][i] = segmentI++;
660 Foam::label Foam::distributedTriSurfaceMesh::calcOverlappingProcs
663 const scalar radiusSqr,
676 if (bbs[bbI].overlaps(centre, radiusSqr))
678 overlaps[proci] =
true;
692 Foam::distributedTriSurfaceMesh::calcLocalQueries
729 forAll(procBbOverlaps, proci)
733 dynSendMap[proci].
append(dynAllCentres.size());
734 dynAllSegmentMap.append(centreI);
735 dynAllCentres.append(centres[centreI]);
736 dynAllRadiusSqr.append(radiusSqr[centreI]);
745 dynSendMap[proci].
shrink();
746 sendMap[proci].
transfer(dynSendMap[proci]);
749 allCentres.
transfer(dynAllCentres.shrink());
750 allRadiusSqr.
transfer(dynAllRadiusSqr.shrink());
751 allSegmentMap.
transfer(dynAllSegmentMap.shrink());
776 forAll(constructMap, proci)
782 constructMap[proci].
setSize(nRecv);
784 for (
label i = 0; i < nRecv; i++)
786 constructMap[proci][i] = segmentI++;
811 Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
816 if (!distributor_.valid())
825 if (!isA<geomDecomp>(distributor_()))
828 <<
"The decomposition method " << distributor_().typeName
829 <<
" is not a geometric decomposition method." <<
endl 830 <<
"Only geometric decomposition methods are currently" 840 triCentres[triI] = s[triI].centre(s.
points());
844 geomDecomp& distributor = refCast<geomDecomp>(distributor_());
855 bbs[proci].setSize(1);
857 bbs[proci][0].min() =
point( vGreat, vGreat, vGreat);
858 bbs[proci][0].max() =
point(-vGreat, -vGreat, -vGreat);
889 bool Foam::distributedTriSurfaceMesh::overlaps
936 void Foam::distributedTriSurfaceMesh::subsetMeshMap
940 const label nIncluded,
946 newToOldFaces.
setSize(nIncluded);
956 if (include[oldFacei])
959 newToOldFaces[facei++] = oldFacei;
966 label oldPointi = f[fp];
968 if (oldToNewPoints[oldPointi] == -1)
970 oldToNewPoints[oldPointi] = pointi;
971 newToOldPoints[pointi++] = oldPointi;
976 newToOldPoints.
setSize(pointi);
993 newPoints[i] = s.
points()[newToOldPoints[i]];
1003 newTriangles[i][0] = oldToNewPoints[tri[0]];
1004 newTriangles[i][1] = oldToNewPoints[tri[1]];
1005 newTriangles[i][2] = oldToNewPoints[tri[2]];
1006 newTriangles[i].region() = tri.region();
1062 createWithValues<boolList>
1076 forAll(include, oldFacei)
1078 if (include[oldFacei])
1085 label oldPointi = f[fp];
1087 if (oldToNewPoints[oldPointi] == -1)
1089 oldToNewPoints[oldPointi] = pointi;
1090 newToOldPoints[pointi++] = oldPointi;
1095 newToOldPoints.
setSize(pointi);
1108 Foam::label Foam::distributedTriSurfaceMesh::findTriangle
1122 if (f.
region() == otherF.region())
1130 if (f[fp1] == otherF[1] && f[fp2] == otherF[2])
1141 void Foam::distributedTriSurfaceMesh::merge
1143 const scalar mergeDist,
1170 label allPointi = nOldAllPoints;
1171 forAll(pointConstructMap, pointi)
1173 if (pointConstructMap[pointi] == -1)
1175 pointConstructMap[pointi] = allPointi++;
1179 if (allPointi > nOldAllPoints)
1183 forAll(pointConstructMap, pointi)
1185 if (pointConstructMap[pointi] >= nOldAllPoints)
1187 allPoints[pointConstructMap[pointi]] = subPoints[pointi];
1213 pointConstructMap[subTri[0]],
1214 pointConstructMap[subTri[1]],
1215 pointConstructMap[subTri[2]],
1221 bool fullMatch =
true;
1225 if (mappedTri[fp] >= nOldAllPoints)
1236 label i = findTriangle
1246 faceConstructMap[triI] = allTriI;
1247 allTris[allTriI] = mappedTri;
1252 faceConstructMap[triI] = i;
1258 faceConstructMap[triI] = allTriI;
1259 allTris[allTriI] = mappedTri;
1307 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1310 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1311 <<
'\t' << procBb_[proci] <<
endl;
1325 io.time().findInstance(io.local(),
word::null),
1362 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1363 <<
" Modify the entry fileModificationChecking\n" 1364 <<
" in the etc/controlDict.\n" 1365 <<
" Use 'timeStamp' instead." 1385 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1388 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1389 <<
'\t' << procBb_[proci] <<
endl;
1446 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1447 <<
" Modify the entry fileModificationChecking\n" 1448 <<
" in the etc/controlDict.\n" 1449 <<
" Use 'timeStamp' instead." 1469 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1472 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1473 <<
'\t' << procBb_[proci] <<
endl;
1490 globalTris_.clear();
1499 if (!globalTris_.valid())
1543 label nProcs = calcOverlappingProcs
1553 info[i] = octree.findNearest(samples[i], nearestDistSqr[i]);
1556 info[i].setIndex(triIndexer.
toGlobal(info[i].index()));
1614 allInfo[i] = octree.findNearest
1619 if (allInfo[i].hit())
1621 allInfo[i].setIndex(triIndexer.
toGlobal(allInfo[i].index()));
1637 if (allInfo[i].hit())
1639 label pointi = allSegmentMap[i];
1641 if (!info[pointi].hit())
1644 info[pointi] = allInfo[i];
1651 magSqr(allInfo[i].hitPoint()-samples[pointi])
1652 <
magSqr(info[pointi].hitPoint()-samples[pointi])
1655 info[pointi] = allInfo[i];
1664 void Foam::distributedTriSurfaceMesh::findLine
1732 +
vector(rootVSmall,rootVSmall,rootVSmall)
1744 if (hitInfo[pointi].hit())
1747 info[pointi][0] = hitInfo[pointi];
1749 point pt = hitInfo[pointi].hitPoint() + smallVec[pointi];
1751 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1754 e1[compactI] = end[pointi];
1755 pointMap[compactI] = pointi;
1761 info[pointi].
clear();
1765 e0.setSize(compactI);
1766 e1.setSize(compactI);
1767 pointMap.setSize(compactI);
1784 if (hitInfo[i].hit())
1786 label pointi = pointMap[i];
1790 info[pointi][sz] = hitInfo[i];
1792 point pt = hitInfo[i].hitPoint() + smallVec[pointi];
1794 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1797 e1[compactI] = end[pointi];
1798 pointMap[compactI] = pointi;
1805 e0.setSize(compactI);
1806 e1.setSize(compactI);
1807 pointMap.setSize(compactI);
1860 label triI = triangleIndex[i];
1861 region[i] = s[triI].region();
1909 label triI = triangleIndex[i];
1910 normal[i] = s[triI].normal(s.
points());
1933 if (foundObject<triSurfaceLabelField>(
"values"))
1963 label triI = triangleIndex[i];
1964 values[i] = fld[triI];
1983 <<
"Volume type not supported for distributed surfaces." 2003 const scalar eps = 1.0e-4;
2006 const point mid = 0.5*(bbs[i].min() + bbs[i].max());
2007 const vector halfSpan = (1.0+eps)*(bbs[i].
max() - mid);
2009 bbsX[i].
min() = mid - halfSpan;
2010 bbsX[i].
max() = mid + halfSpan;
2020 if (overlaps(bbsX, p0, p1, p2))
2022 includedFace[triI] =
true;
2026 return subsetMesh(s, includedFace, subPointMap, subFaceMap);
2033 const bool keepNonLocal,
2057 newProcBb = independentlyDistributedBbs(*
this);
2070 if (newProcBb == procBb_)
2076 procBb_.transfer(newProcBb);
2091 <<
"before distribution:" <<
endl <<
"\tproc\ttris" <<
endl;
2095 Info<<
'\t' << proci <<
'\t' << nTris[proci] <<
endl;
2113 pointSendMap[proci],
2134 forAll(faceSendMap, proci)
2138 forAll(faceSendMap[proci], i)
2140 includedFace[faceSendMap[proci][i]] =
false;
2168 forAll(faceSendMap, proci)
2203 allTris = subSurface;
2204 allPoints = subSurface.
points();
2221 forAll(faceSendSizes, proci)
2257 forAll(faceSendSizes, proci)
2285 faceConstructMap[proci],
2286 pointConstructMap[proci]
2305 move(faceConstructMap)
2314 move(pointConstructMap)
2332 distributeFields<label>(
faceMap());
2333 distributeFields<scalar>(
faceMap());
2334 distributeFields<vector>(
faceMap());
2335 distributeFields<sphericalTensor>(
faceMap());
2336 distributeFields<symmTensor>(
faceMap());
2337 distributeFields<tensor>(
faceMap());
2347 <<
"after distribution:" <<
endl <<
"\tproc\ttris" <<
endl;
2351 Info<<
'\t' << proci <<
'\t' << nTris[proci] <<
endl;
2381 triSurface::write(fullPath,
true);
2405 <<
"Bounding Box : " << bb <<
endl;
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
bool overlaps(const boundBox &) const
Overlaps/touches boundingBox?
labelList first(const UList< labelPair > &p)
label nPoints() const
Return number of points supporting patch faces.
static void scatterList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Scatter data. Reverse of gatherList.
#define forAll(list, i)
Loop across all elements in list.
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
const word & name() const
Return name.
A class for handling file names.
triSurfaceMesh(const IOobject &, const triSurface &)
Construct from triSurface.
virtual void findLineAny(const pointField &start, const pointField &end, List< pointIndexHit > &) const
Return any intersection on segment from start to end.
errorManipArg< error, int > exit(error &err, const int errNo=1)
void clearOut()
Clear storage.
void reset(T *=nullptr)
If object pointer already set, delete object and set to given.
void reverseDistribute(const label constructSize, List< T > &, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Reverse distribute data using default commsType.
A list of keyword definitions, which are a keyword followed by any number of values (e...
void operator=(const triSurface &)
T & operator[](const label)
Return element of UList.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
pointIndexHit findLineAny(const point &start, const point &end) const
Find any intersection of line between start and end.
virtual tmp< pointField > points() const
Get the points that define the surface.
bool isFile(const fileName &, const bool checkVariants=true, const bool followLink=true)
Does the name exist as a file in the file system?
const globalIndex & globalTris() const
Triangle indexing (demand driven)
void size(const label)
Override size to be inconsistent with allocated storage.
void setIndex(const label index)
static bool intersectBb(const point &p0, const point &p1, const point &p2, const treeBoundBox &cubeBb)
Does triangle intersect bounding box.
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
Ostream & endl(Ostream &os)
Add newline and flush stream.
fileName objectPath() const
Return complete path + object name.
word findInstance(const fileName &dir, const word &name=word::null, const IOobject::readOption rOpt=IOobject::MUST_READ, const word &stopInstance=word::null) const
Return the location of "dir" containing the file "name".
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
A bounding box defined in terms of the points at its extremities.
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
Vector< scalar > vector
A scalar version of the templated Vector.
void distribute(List< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Distribute data using default commsType.
static const NamedEnum< distributionType, 3 > distributionTypeNames_
Initialise the NamedEnum HashTable from the static list of names.
Determine correspondence between points. See below.
Macros for easy insertion into run-time selection tables.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
A surface geometry formed of discrete facets, e.g. triangles and/or quadrilaterals, defined in a file using formats such as Wavefront OBJ, or stereolithography STL.
Input inter-processor communications stream.
const Point & hitPoint() const
Return hit point.
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
label region() const
Return region label.
bool read(const char *, int32_t &)
bool matchPoints(const UList< point > &pts0, const UList< point > &pts1, const UList< scalar > &matchDistance, const bool verbose, labelList &from0To1, const point &origin=point::zero)
Determine correspondence between pointFields. Gets passed.
bool intersects(const point &overallStart, const vector &overallVec, const point &start, const point &end, point &pt, direction &ptBits) const
Intersects segment; set point to intersection position and face,.
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< ' ';}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< ' ';}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< ' ';}gmvFile<< nl;forAll(lagrangianScalarNames, i){ const word &name=lagrangianScalarNames[i];IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Geometrical domain decomposition.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
virtual ~distributedTriSurfaceMesh()
Destructor.
void clear()
Clear the list, i.e. set size to zero.
virtual void getRegion(const List< pointIndexHit > &, labelList ®ion) const
From a set of points and indices get the region.
A class for handling words, derived from string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
void append(const T &)
Append an element at the end of the list.
void clearOut()
Clear storage.
const fileName & local() const
static autoPtr< decompositionMethod > NewDistributor(const dictionary &decompositionDict)
Return a reference to the selected decomposition method.
streamFormat
Enumeration for the format of data in the stream.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & append(const T &)
Append an element at the end of the list.
bool hit() const
Is there a hit.
const Field< PointType > & points() const
Return reference to global points.
static const word null
An empty word.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
label toLocal(const label i) const
From global to local on current processor.
Triangle with additional region number.
label whichProcID(const label i) const
Which processor does global come from? Binary search.
Accumulating histogram of values. Specified bin resolution automatic generation of bins...
static dictionary decomposeParDict(const Time &time)
Read and return the decomposeParDict.
label fcIndex(const label i) const
Return the forward circular index, i.e. the next index.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit >> &) const
Get all intersections in order from start to end.
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, &mergedCyclicPolyPatch::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]
compressionType
Enumeration for the format of data in the stream.
bool contains(const vector &dir, const point &) const
Contains point (inside or on edge) and moving in direction.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
An Ostream is an abstract base class for all output systems (streams, files, token lists...
DynamicList< T, SizeInc, SizeMult, SizeDiv > & shrink()
Shrink the allocated space to the number of elements used.
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
virtual void findNearest(const pointField &sample, const scalarField &nearestDistSqr, List< pointIndexHit > &) const
defineTypeNameAndDebug(combustionModel, 0)
static fileCheckTypes fileModificationChecking
Type of file modification checking.
Output inter-processor communications stream.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurrence of given element and return index,.
virtual labelList decompose(const pointField &points, const scalarField &pointWeights)=0
Return for every coordinate the wanted processor number.
static triSurface overlappingSurface(const triSurface &, const List< treeBoundBox > &, labelList &subPointMap, labelList &subFaceMap)
Subset the part of surface that is overlapping bounds.
bool mkDir(const fileName &, mode_t=0777)
Make a directory and return an error if it could not be created.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
word name(const complex &)
Return a string representation of a complex.
labelList second(const UList< labelPair > &p)
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
void setSize(const label)
Reset size of List.
const point & max() const
Maximum point defining the bounding box.
const geometricSurfacePatchList & patches() const
label toGlobal(const label i) const
From local to global.
Class containing processor-to-processor mapping information.
writeOption writeOpt() const
static bool & parRun()
Is this a parallel run?
static label nProcs(const label communicator=0)
Number of processes in parallel run.
triSurface()
Construct null.
std::remove_reference< ::Foam::List< labelledTri > >::type::value_type FaceType
vector point
Point is a vector.
Non-pointer based hierarchical recursive searching.
virtual label size() const
Range of local indices that can be returned.
const Time & time() const
Return time.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
void invertManyToMany(const label len, const UList< InList > &, List< OutList > &)
Invert many-to-many.
void set(entry *)
Assign a new entry, overwrite any existing entry.
Standard boundBox + extra functionality for use in octree.
virtual bool writeObject(IOstream::streamFormat, IOstream::versionNumber, IOstream::compressionType, const bool write) const
Write using given format, version and compression.
virtual bool writeObject(IOstream::streamFormat fmt, IOstream::versionNumber ver, IOstream::compressionType cmp, const bool write=true) const
Write using given format, version and compression.
fileName path() const
Return directory path name (part before last /)
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
const boundBox & bounds() const
Return const reference to boundBox.
fileName & instance() const
Return the instance directory, constant, system, <time> etc.
const point & min() const
Minimum point defining the bounding box.
virtual void distribute(const List< treeBoundBox > &, const bool keepNonLocal, autoPtr< distributionMap > &faceMap, autoPtr< distributionMap > &pointMap)
Set bounds of surface. Bounds currently set as list of.
const objectRegistry & db() const
Return the local objectRegistry.
Triangulated surface description with patch information.
bool & registerObject()
Register object created from this IOobject with registry if true.
readOption readOpt() const
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
label size() const
Return the number of elements in the UList.
const indexedOctree< treeDataTriSurface > & tree() const
Demand driven construction of the octree.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
distributedTriSurfaceMesh(const IOobject &, const triSurface &, const dictionary &dict)
Construct from triSurface.
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
void writeStats(Ostream &os) const
Print some stats. Parallel aware version of.
#define InfoInFunction
Report an information message using Foam::Info.