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(),
473 allSegments[i].second()
480 allSegments[i].first(),
481 allSegments[i].second()
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 (!decomposer_.valid())
834 if (!decomposer_().parallelAware())
837 <<
"The decomposition method " << decomposer_().typeName
838 <<
" does not decompose in parallel." 842 if (!isA<geomDecomp>(decomposer_()))
845 <<
"The decomposition method " << decomposer_().typeName
846 <<
" is not a geometric decomposition method." <<
endl 847 <<
"Only geometric decomposition methods are currently" 857 triCentres[triI] = s[triI].centre(s.
points());
861 geomDecomp& decomposer = refCast<geomDecomp>(decomposer_());
872 bbs[proci].setSize(1);
874 bbs[proci][0].min() =
point( vGreat, vGreat, vGreat);
875 bbs[proci][0].max() =
point(-vGreat, -vGreat, -vGreat);
906 bool Foam::distributedTriSurfaceMesh::overlaps
953 void Foam::distributedTriSurfaceMesh::subsetMeshMap
957 const label nIncluded,
963 newToOldFaces.
setSize(nIncluded);
973 if (include[oldFacei])
976 newToOldFaces[facei++] = oldFacei;
983 label oldPointi = f[fp];
985 if (oldToNewPoints[oldPointi] == -1)
987 oldToNewPoints[oldPointi] = pointi;
988 newToOldPoints[pointi++] = oldPointi;
993 newToOldPoints.
setSize(pointi);
1008 forAll(newToOldPoints, i)
1010 newPoints[i] = s.
points()[newToOldPoints[i]];
1020 newTriangles[i][0] = oldToNewPoints[tri[0]];
1021 newTriangles[i][1] = oldToNewPoints[tri[1]];
1022 newTriangles[i][2] = oldToNewPoints[tri[2]];
1023 newTriangles[i].region() = tri.region();
1079 createWithValues<boolList>
1093 forAll(include, oldFacei)
1095 if (include[oldFacei])
1102 label oldPointi = f[fp];
1104 if (oldToNewPoints[oldPointi] == -1)
1106 oldToNewPoints[oldPointi] = pointi;
1107 newToOldPoints[pointi++] = oldPointi;
1112 newToOldPoints.
setSize(pointi);
1125 Foam::label Foam::distributedTriSurfaceMesh::findTriangle
1139 if (f.
region() == otherF.region())
1147 if (f[fp1] == otherF[1] && f[fp2] == otherF[2])
1158 void Foam::distributedTriSurfaceMesh::merge
1160 const scalar mergeDist,
1187 label allPointi = nOldAllPoints;
1188 forAll(pointConstructMap, pointi)
1190 if (pointConstructMap[pointi] == -1)
1192 pointConstructMap[pointi] = allPointi++;
1196 if (allPointi > nOldAllPoints)
1200 forAll(pointConstructMap, pointi)
1202 if (pointConstructMap[pointi] >= nOldAllPoints)
1204 allPoints[pointConstructMap[pointi]] = subPoints[pointi];
1230 pointConstructMap[subTri[0]],
1231 pointConstructMap[subTri[1]],
1232 pointConstructMap[subTri[2]],
1238 bool fullMatch =
true;
1242 if (mappedTri[fp] >= nOldAllPoints)
1253 label i = findTriangle
1263 faceConstructMap[triI] = allTriI;
1264 allTris[allTriI] = mappedTri;
1269 faceConstructMap[triI] = i;
1275 faceConstructMap[triI] = allTriI;
1276 allTris[allTriI] = mappedTri;
1324 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1327 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1328 <<
'\t' << procBb_[proci] <<
endl;
1342 io.time().findInstance(io.local(),
word::null),
1379 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1380 <<
" Modify the entry fileModificationChecking\n" 1381 <<
" in the etc/controlDict.\n" 1382 <<
" Use 'timeStamp' instead." 1405 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1406 <<
'\t' << procBb_[proci] <<
endl;
1463 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1464 <<
" Modify the entry fileModificationChecking\n" 1465 <<
" in the etc/controlDict.\n" 1466 <<
" Use 'timeStamp' instead." 1478 <<
" and dictionary:" <<
endl;
1489 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1490 <<
'\t' << procBb_[proci] <<
endl;
1507 globalTris_.clear();
1516 if (!globalTris_.valid())
1560 label nProcs = calcOverlappingProcs
1570 info[i] = octree.findNearest(samples[i], nearestDistSqr[i]);
1573 info[i].setIndex(triIndexer.
toGlobal(info[i].index()));
1631 allInfo[i] = octree.findNearest
1636 if (allInfo[i].hit())
1638 allInfo[i].setIndex(triIndexer.
toGlobal(allInfo[i].index()));
1654 if (allInfo[i].hit())
1656 label pointi = allSegmentMap[i];
1658 if (!info[pointi].hit())
1661 info[pointi] = allInfo[i];
1668 magSqr(allInfo[i].hitPoint()-samples[pointi])
1669 <
magSqr(info[pointi].hitPoint()-samples[pointi])
1672 info[pointi] = allInfo[i];
1681 void Foam::distributedTriSurfaceMesh::findLine
1749 +
vector(rootVSmall,rootVSmall,rootVSmall)
1761 if (hitInfo[pointi].hit())
1764 info[pointi][0] = hitInfo[pointi];
1766 point pt = hitInfo[pointi].hitPoint() + smallVec[pointi];
1768 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1771 e1[compactI] = end[pointi];
1772 pointMap[compactI] = pointi;
1778 info[pointi].
clear();
1782 e0.setSize(compactI);
1783 e1.setSize(compactI);
1784 pointMap.setSize(compactI);
1801 if (hitInfo[i].hit())
1803 label pointi = pointMap[i];
1807 info[pointi][sz] = hitInfo[i];
1809 point pt = hitInfo[i].hitPoint() + smallVec[pointi];
1811 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1814 e1[compactI] = end[pointi];
1815 pointMap[compactI] = pointi;
1822 e0.setSize(compactI);
1823 e1.setSize(compactI);
1824 pointMap.setSize(compactI);
1877 label triI = triangleIndex[i];
1878 region[i] = s[triI].region();
1926 label triI = triangleIndex[i];
1927 normal[i] = s[triI].normal(s.
points());
1950 if (foundObject<triSurfaceLabelField>(
"values"))
1980 label triI = triangleIndex[i];
1981 values[i] = fld[triI];
2000 <<
"Volume type not supported for distributed surfaces." 2020 const scalar eps = 1.0e-4;
2023 const point mid = 0.5*(bbs[i].min() + bbs[i].max());
2024 const vector halfSpan = (1.0+eps)*(bbs[i].
max() - mid);
2026 bbsX[i].
min() = mid - halfSpan;
2027 bbsX[i].
max() = mid + halfSpan;
2037 if (overlaps(bbsX, p0, p1, p2))
2039 includedFace[triI] =
true;
2043 return subsetMesh(s, includedFace, subPointMap, subFaceMap);
2050 const bool keepNonLocal,
2074 newProcBb = independentlyDistributedBbs(*
this);
2087 if (newProcBb == procBb_)
2093 procBb_.transfer(newProcBb);
2108 <<
"before distribution:" <<
endl <<
"\tproc\ttris" <<
endl;
2112 Info<<
'\t' << proci <<
'\t' << nTris[proci] <<
endl;
2130 pointSendMap[proci],
2151 forAll(faceSendMap, proci)
2155 forAll(faceSendMap[proci], i)
2157 includedFace[faceSendMap[proci][i]] =
false;
2185 forAll(faceSendMap, proci)
2220 allTris = subSurface;
2221 allPoints = subSurface.
points();
2238 forAll(faceSendSizes, proci)
2274 forAll(faceSendSizes, proci)
2302 faceConstructMap[proci],
2303 pointConstructMap[proci]
2322 move(faceConstructMap)
2331 move(pointConstructMap)
2349 distributeFields<label>(
faceMap());
2350 distributeFields<scalar>(
faceMap());
2351 distributeFields<vector>(
faceMap());
2352 distributeFields<sphericalTensor>(
faceMap());
2353 distributeFields<symmTensor>(
faceMap());
2354 distributeFields<tensor>(
faceMap());
2364 <<
"after distribution:" <<
endl <<
"\tproc\ttris" <<
endl;
2368 Info<<
'\t' << proci <<
'\t' << nTris[proci] <<
endl;
2398 triSurface::write(fullPath,
true);
2422 <<
"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?
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.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
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.
A list of keyword definitions, which are a keyword followed by any number of values (e...
void operator=(const triSurface &)
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
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.
void distribute(List< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Distribute data using default commsType.
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)
virtual void distribute(const List< treeBoundBox > &, const bool keepNonLocal, autoPtr< mapDistribute > &faceMap, autoPtr< mapDistribute > &pointMap)
Set bounds of surface. Bounds currently set as list of.
Ostream & endl(Ostream &os)
Add newline and flush stream.
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.
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.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
IOoject and searching on triSurface.
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
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.
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...
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.
static autoPtr< decompositionMethod > New(const dictionary &decompositionDict)
Return a reference to the selected decomposition method.
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.
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
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.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
void reverseDistribute(const label constructSize, List< T > &, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Reverse distribute data using default commsType.
void setSize(const label)
Reset size of List.
const point & max() const
Maximum describing the bounding box.
const geometricSurfacePatchList & patches() const
label toGlobal(const label i) const
From local to global.
writeOption writeOpt() const
static bool & parRun()
Is this a parallel run?
const fileName & instance() const
static label nProcs(const label communicator=0)
Number of processes in parallel run.
triSurface()
Construct null.
Class containing processor-to-processor mapping information.
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.
const point & min() const
Minimum describing the bounding box.
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.
fileName objectPath() const
Return complete path + object name.
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.
int system(const std::string &command)
Execute the specified command.
void writeStats(Ostream &os) const
Print some stats. Parallel aware version of.
#define InfoInFunction
Report an information message using Foam::Info.