50 distributedTriSurfaceMesh,
75 bool Foam::distributedTriSurfaceMesh::read()
85 distType_ = distributionTypeNames_.read(dict_.lookup(
"distributionType"));
88 mergeDist_ =
readScalar(dict_.lookup(
"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;
1286 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
1324 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1327 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1328 <<
'\t' << procBb_[proci] <<
endl;
1335 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh(
const IOobject& io)
1343 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;
1413 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
1462 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1463 <<
" Modify the entry fileModificationChecking\n" 1464 <<
" in the etc/controlDict.\n" 1465 <<
" Use 'timeStamp' instead." 1477 <<
" and dictionary:" <<
endl;
1488 Info<<
'\t' << proci <<
'\t' << nTris[proci]
1489 <<
'\t' << procBb_[proci] <<
endl;
1506 globalTris_.clear();
1515 if (!globalTris_.valid())
1559 label nProcs = calcOverlappingProcs
1569 info[i] = octree.findNearest(samples[i], nearestDistSqr[i]);
1572 info[i].setIndex(triIndexer.
toGlobal(info[i].index()));
1630 allInfo[i] = octree.findNearest
1635 if (allInfo[i].hit())
1637 allInfo[i].setIndex(triIndexer.
toGlobal(allInfo[i].index()));
1653 if (allInfo[i].hit())
1655 label pointi = allSegmentMap[i];
1657 if (!info[pointi].hit())
1660 info[pointi] = allInfo[i];
1667 magSqr(allInfo[i].hitPoint()-samples[pointi])
1668 <
magSqr(info[pointi].hitPoint()-samples[pointi])
1671 info[pointi] = allInfo[i];
1680 void Foam::distributedTriSurfaceMesh::findLine
1748 +
vector(ROOTVSMALL,ROOTVSMALL,ROOTVSMALL)
1760 if (hitInfo[pointi].hit())
1763 info[pointi][0] = hitInfo[pointi];
1765 point pt = hitInfo[pointi].hitPoint() + smallVec[pointi];
1767 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1770 e1[compactI] = end[pointi];
1771 pointMap[compactI] = pointi;
1777 info[pointi].
clear();
1781 e0.setSize(compactI);
1782 e1.setSize(compactI);
1783 pointMap.setSize(compactI);
1800 if (hitInfo[i].hit())
1802 label pointi = pointMap[i];
1806 info[pointi][sz] = hitInfo[i];
1808 point pt = hitInfo[i].hitPoint() + smallVec[pointi];
1810 if (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
1813 e1[compactI] = end[pointi];
1814 pointMap[compactI] = pointi;
1821 e0.setSize(compactI);
1822 e1.setSize(compactI);
1823 pointMap.setSize(compactI);
1876 label triI = triangleIndex[i];
1877 region[i] = s[triI].region();
1925 label triI = triangleIndex[i];
1926 normal[i] = s[triI].normal(s.
points());
1927 normal[i] /=
mag(normal[i]) + VSMALL;
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 faceConstructMap.
xfer()
2330 pointSendMap.
xfer(),
2331 pointConstructMap.
xfer()
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;
2397 triSurface::write(fullPath,
true);
2421 <<
"Bounding Box : " << bb <<
endl;
virtual bool writeObject(IOstream::streamFormat fmt, IOstream::versionNumber ver, IOstream::compressionType cmp) const
Write using given format, version and compression.
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.
fileName objectPath() const
Return complete path + object name.
#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.
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
A class for handling file names.
const boundBox & bounds() const
Return const reference to boundBox.
label toGlobal(const label i) const
From local to global.
label region() const
Return region label.
const objectRegistry & db() const
Return the local objectRegistry.
errorManipArg< error, int > exit(error &err, const int errNo=1)
void clearOut()
Clear storage.
const point & min() const
Minimum describing the bounding box.
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.
Xfer< List< T > > xfer()
Transfer contents to the Xfer container.
bool hit() const
Is there a hit.
void size(const label)
Override size to be inconsistent with allocated storage.
virtual tmp< pointField > points() const
Get the points that define the surface.
virtual label size() const
Range of local indices that can be returned.
void setIndex(const label index)
virtual void getRegion(const List< pointIndexHit > &, labelList ®ion) const
From a set of points and indices get the region.
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.
pointIndexHit findLineAny(const point &start, const point &end) const
Find any intersection of line between start and end.
bool isFile(const fileName &, const bool checkGzip=true)
Does the name exist as a FILE in the file system?
Ostream & endl(Ostream &os)
Add newline and flush stream.
const Field< PointType > & points() const
Return reference to global points.
const point & max() const
Maximum describing the bounding box.
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.
const indexedOctree< treeDataTriSurface > & tree() const
Demand driven construction of the octree.
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.
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
static const NamedEnum< distributionType, 3 > distributionTypeNames_
Initialise the NamedEnum HashTable from the static list of names.
writeOption writeOpt() const
virtual void findNearest(const pointField &sample, const scalarField &nearestDistSqr, List< pointIndexHit > &) const
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)
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
IOoject and searching on triSurface.
Input inter-processor communications stream.
static fileCheckTypes fileModificationChecking
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,.
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
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.
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".
void reset(T *=0)
If object pointer already set, delete object and set to given.
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.
void reverseDistribute(const label constructSize, List< T > &, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Reverse distribute data using default commsType.
const globalIndex & globalTris() const
Triangle indexing (demand driven)
A class for handling words, derived from string.
const geometricSurfacePatchList & patches() const
const Time & time() const
Return time.
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.
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]
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.
static const word null
An empty word.
label whichProcID(const label i) const
Which processor does global come from? Binary search.
const fileName & local() const
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
Triangle with additional region number.
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
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 bool writeObject(IOstream::streamFormat, IOstream::versionNumber, IOstream::compressionType) const
Write using given format, version and compression.
static autoPtr< decompositionMethod > New(const dictionary &decompositionDict)
Return a reference to the selected decomposition method.
compressionType
Enumeration for the format of data in the stream.
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)
void writeStats(Ostream &os) const
Print some stats. Parallel aware version of.
defineTypeNameAndDebug(combustionModel, 0)
Output inter-processor communications stream.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurence 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.
label size() const
Return the number of elements in the UList.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
void distribute(List< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Distribute data using default commsType.
word name(const complex &)
Return a string representation of a complex.
bool contains(const vector &dir, const point &) const
Contains point (inside or on edge) and moving in direction.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit >> &) const
Get all intersections in order from start to end.
void setSize(const label)
Reset size of List.
static bool & parRun()
Is this a parallel run?
static label nProcs(const label communicator=0)
Number of processes in parallel run.
triSurface()
Construct null.
Class containing processor-to-processor mapping information.
vector point
Point is a vector.
Non-pointer based hierarchical recursive searching.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
readOption readOpt() const
const Point & hitPoint() const
Return hit point.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
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.
dimensioned< scalar > mag(const dimensioned< Type > &)
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
label toLocal(const label i) const
From global to local on current processor.
Triangulated surface description with patch information.
bool & registerObject()
Register object created from this IOobject with registry if true.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
fileName path() const
Return directory path name (part before last /)
const fileName & instance() const
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
bool overlaps(const boundBox &) const
Overlaps/touches boundingBox?
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
const word & name() const
Return name.
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.
virtual void findLineAny(const pointField &start, const pointField &end, List< pointIndexHit > &) const
Return any intersection on segment from start to end.
#define InfoInFunction
Report an information message using Foam::Info.