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())
838 "distributedTriSurfaceMesh::independentlyDistributedBbs" 839 "(const triSurface&)" 840 ) <<
"The decomposition method " << decomposer_().typeName
841 <<
" does not decompose in parallel." 845 if (!isA<geomDecomp>(decomposer_()))
849 "distributedTriSurfaceMesh::independentlyDistributedBbs" 850 "(const triSurface&)" 851 ) <<
"The decomposition method " << decomposer_().typeName
852 <<
" is not a geometric decomposition method." <<
endl 853 <<
"Only geometric decomposition methods are currently" 863 triCentres[triI] = s[triI].centre(s.
points());
867 geomDecomp& decomposer = refCast<geomDecomp>(decomposer_());
878 bbs[procI].setSize(1);
880 bbs[procI][0].min() =
point( VGREAT, VGREAT, VGREAT);
881 bbs[procI][0].max() =
point(-VGREAT, -VGREAT, -VGREAT);
912 bool Foam::distributedTriSurfaceMesh::overlaps
959 void Foam::distributedTriSurfaceMesh::subsetMeshMap
963 const label nIncluded,
969 newToOldFaces.
setSize(nIncluded);
979 if (include[oldFacei])
982 newToOldFaces[faceI++] = oldFacei;
989 label oldPointI = f[fp];
991 if (oldToNewPoints[oldPointI] == -1)
993 oldToNewPoints[oldPointI] = pointI;
994 newToOldPoints[pointI++] = oldPointI;
999 newToOldPoints.
setSize(pointI);
1014 forAll(newToOldPoints, i)
1016 newPoints[i] = s.
points()[newToOldPoints[i]];
1026 newTriangles[i][0] = oldToNewPoints[tri[0]];
1027 newTriangles[i][1] = oldToNewPoints[tri[1]];
1028 newTriangles[i][2] = oldToNewPoints[tri[2]];
1029 newTriangles[i].region() = tri.region();
1085 createWithValues<boolList>
1099 forAll(include, oldFacei)
1101 if (include[oldFacei])
1108 label oldPointI = f[fp];
1110 if (oldToNewPoints[oldPointI] == -1)
1112 oldToNewPoints[oldPointI] = pointI;
1113 newToOldPoints[pointI++] = oldPointI;
1118 newToOldPoints.
setSize(pointI);
1131 Foam::label Foam::distributedTriSurfaceMesh::findTriangle
1145 if (f.
region() == otherF.region())
1153 if (f[fp1] == otherF[1] && f[fp2] == otherF[2])
1164 void Foam::distributedTriSurfaceMesh::merge
1166 const scalar mergeDist,
1193 label allPointI = nOldAllPoints;
1194 forAll(pointConstructMap, pointI)
1196 if (pointConstructMap[pointI] == -1)
1198 pointConstructMap[pointI] = allPointI++;
1202 if (allPointI > nOldAllPoints)
1206 forAll(pointConstructMap, pointI)
1208 if (pointConstructMap[pointI] >= nOldAllPoints)
1210 allPoints[pointConstructMap[pointI]] = subPoints[pointI];
1236 pointConstructMap[subTri[0]],
1237 pointConstructMap[subTri[1]],
1238 pointConstructMap[subTri[2]],
1244 bool fullMatch =
true;
1248 if (mappedTri[fp] >= nOldAllPoints)
1259 label i = findTriangle
1269 faceConstructMap[triI] = allTriI;
1270 allTris[allTriI] = mappedTri;
1275 faceConstructMap[triI] = i;
1281 faceConstructMap[triI] = allTriI;
1282 allTris[allTriI] = mappedTri;
1292 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
1322 Info<<
"Constructed from triSurface:" <<
endl;
1330 Info<< endl<<
"\tproc\ttris\tbb" <<
endl;
1333 Info<<
'\t' << procI <<
'\t' << nTris[procI]
1334 <<
'\t' << procBb_[procI] <<
endl;
1341 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh(
const IOobject& io)
1349 io.time().findInstance(io.local(),
word::null),
1384 FatalErrorIn(
"Foam::distributedTriSurfaceMesh::read()")
1385 <<
" distributedTriSurfaceMesh is being constructed\n" 1386 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1387 <<
" Modify the entry fileModificationChecking\n" 1388 <<
" in the etc/controlDict.\n" 1389 <<
" Use 'timeStamp' instead." 1412 Info<<
'\t' << procI <<
'\t' << nTris[procI]
1413 <<
'\t' << procBb_[procI] <<
endl;
1420 Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
1468 FatalErrorIn(
"Foam::distributedTriSurfaceMesh::read()")
1469 <<
" distributedTriSurfaceMesh is being constructed\n" 1470 <<
" using 'timeStampMaster' or 'inotifyMaster.'\n" 1471 <<
" Modify the entry fileModificationChecking\n" 1472 <<
" in the etc/controlDict.\n" 1473 <<
" Use 'timeStamp' instead." 1485 <<
" and dictionary:" <<
endl;
1496 Info<<
'\t' << procI <<
'\t' << nTris[procI]
1497 <<
'\t' << procBb_[procI] <<
endl;
1514 globalTris_.clear();
1523 if (!globalTris_.valid())
1567 label nProcs = calcOverlappingProcs
1577 info[i] = octree.findNearest(samples[i], nearestDistSqr[i]);
1580 info[i].setIndex(triIndexer.
toGlobal(info[i].index()));
1638 allInfo[i] = octree.findNearest
1643 if (allInfo[i].hit())
1645 allInfo[i].setIndex(triIndexer.
toGlobal(allInfo[i].index()));
1661 if (allInfo[i].hit())
1663 label pointI = allSegmentMap[i];
1665 if (!info[pointI].hit())
1668 info[pointI] = allInfo[i];
1675 magSqr(allInfo[i].hitPoint()-samples[pointI])
1676 <
magSqr(info[pointI].hitPoint()-samples[pointI])
1679 info[pointI] = allInfo[i];
1688 void Foam::distributedTriSurfaceMesh::findLine
1756 +
vector(ROOTVSMALL,ROOTVSMALL,ROOTVSMALL)
1768 if (hitInfo[pointI].hit())
1771 info[pointI][0] = hitInfo[pointI];
1773 point pt = hitInfo[pointI].hitPoint() + smallVec[pointI];
1775 if (((pt-start[pointI])&dirVec[pointI]) <= magSqrDirVec[pointI])
1778 e1[compactI] = end[pointI];
1779 pointMap[compactI] = pointI;
1785 info[pointI].
clear();
1789 e0.setSize(compactI);
1790 e1.setSize(compactI);
1791 pointMap.setSize(compactI);
1808 if (hitInfo[i].hit())
1810 label pointI = pointMap[i];
1814 info[pointI][sz] = hitInfo[i];
1816 point pt = hitInfo[i].hitPoint() + smallVec[pointI];
1818 if (((pt-start[pointI])&dirVec[pointI]) <= magSqrDirVec[pointI])
1821 e1[compactI] = end[pointI];
1822 pointMap[compactI] = pointI;
1829 e0.setSize(compactI);
1830 e1.setSize(compactI);
1831 pointMap.setSize(compactI);
1884 label triI = triangleIndex[i];
1885 region[i] = s[triI].region();
1933 label triI = triangleIndex[i];
1934 normal[i] = s[triI].normal(s.
points());
1935 normal[i] /=
mag(normal[i]) + VSMALL;
1958 if (foundObject<triSurfaceLabelField>(
"values"))
1988 label triI = triangleIndex[i];
1989 values[i] = fld[triI];
2009 "distributedTriSurfaceMesh::getVolumeType" 2010 "(const pointField&, List<volumeType>&) const" 2011 ) <<
"Volume type not supported for distributed surfaces." 2031 const scalar eps = 1.0e-4;
2034 const point mid = 0.5*(bbs[i].min() + bbs[i].max());
2035 const vector halfSpan = (1.0+eps)*(bbs[i].
max() - mid);
2037 bbsX[i].
min() = mid - halfSpan;
2038 bbsX[i].
max() = mid + halfSpan;
2048 if (overlaps(bbsX, p0, p1, p2))
2050 includedFace[triI] =
true;
2054 return subsetMesh(s, includedFace, subPointMap, subFaceMap);
2061 const bool keepNonLocal,
2085 newProcBb = independentlyDistributedBbs(*
this);
2093 FatalErrorIn(
"distributedTriSurfaceMesh::distribute(..)")
2105 if (newProcBb == procBb_)
2111 procBb_.transfer(newProcBb);
2125 Info<<
"distributedTriSurfaceMesh::distribute : before distribution:" 2127 <<
"\tproc\ttris" <<
endl;
2131 Info<<
'\t' << procI <<
'\t' << nTris[procI] <<
endl;
2149 pointSendMap[procI],
2170 forAll(faceSendMap, procI)
2174 forAll(faceSendMap[procI], i)
2176 includedFace[faceSendMap[procI][i]] =
false;
2204 forAll(faceSendMap, procI)
2239 allTris = subSurface;
2240 allPoints = subSurface.
points();
2257 forAll(faceSendSizes, procI)
2293 forAll(faceSendSizes, procI)
2321 faceConstructMap[procI],
2322 pointConstructMap[procI]
2341 faceConstructMap.
xfer()
2349 pointSendMap.
xfer(),
2350 pointConstructMap.
xfer()
2368 distributeFields<label>(
faceMap());
2369 distributeFields<scalar>(
faceMap());
2370 distributeFields<vector>(
faceMap());
2371 distributeFields<sphericalTensor>(
faceMap());
2372 distributeFields<symmTensor>(
faceMap());
2373 distributeFields<tensor>(
faceMap());
2382 Info<<
"distributedTriSurfaceMesh::distribute : after distribution:" 2384 <<
"\tproc\ttris" <<
endl;
2388 Info<<
'\t' << procI <<
'\t' << nTris[procI] <<
endl;
2418 triSurface::write(fullPath,
true);
2442 <<
"Bounding Box : " << bb <<
endl;
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
static bool & parRun()
Is this a parallel run?
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,.
virtual bool writeObject(IOstream::streamFormat fmt, IOstream::versionNumber ver, IOstream::compressionType cmp) const
Write using given format, version and compression.
const point & min() const
Minimum describing the bounding box.
Geometrical domain decomposition.
readOption readOpt() const
void invertManyToMany(const label len, const UList< InList > &, List< OutList > &)
Invert many-to-many.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
vector point
Point is a vector.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurence of given element and return index,.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
static void distribute(const Pstream::commsTypes commsType, const List< labelPair > &schedule, const label constructSize, const labelListList &subMap, const labelListList &constructMap, List< T > &, const int tag=UPstream::msgType())
Distribute data. Note:schedule only used for Pstream::scheduled.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
dimensioned< scalar > mag(const dimensioned< Type > &)
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 label size() const
Range of local indices that can be returned.
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
virtual bool writeObject(IOstream::streamFormat, IOstream::versionNumber, IOstream::compressionType) const
Write using given format, version and compression.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
void reset(T *=0)
If object pointer already set, delete object and set to given.
pointIndexHit findLineAny(const point &start, const point &end) const
Find any intersection of line between start and end.
Xfer< List< T > > xfer()
Transfer contents to the Xfer container.
Class containing processor-to-processor mapping information.
Triangulated surface description with patch information.
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
const fileName & local() const
A class for handling words, derived from string.
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 ~distributedTriSurfaceMesh()
Destructor.
Standard boundBox + extra functionality for use in octree.
void size(const label)
Override size to be inconsistent with allocated storage.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & append(const T &)
Append an element at the end of the list.
errorManipArg< error, int > exit(error &err, const int errNo=1)
void writeStats(Ostream &os) const
Print some stats. Parallel aware version of.
Output inter-processor communications stream.
const fileName & instance() const
triSurface()
Construct null.
const boundBox & bounds() const
Return const reference to boundBox.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit > > &) const
Get all intersections in order from start to end.
void clearOut()
Clear storage.
static void scatterList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Scatter data. Reverse of gatherList.
Accumulating histogram of values. Specified bin resolution automatic generation of bins...
bool hit() const
Is there a hit.
fileName path() const
Return directory path name (part before last /)
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
A list of keyword definitions, which are a keyword followed by any number of values (e...
bool & registerObject()
Register object created from this IOobject with registry if true.
label nPoints() const
Return number of points supporting patch faces.
const Point & hitPoint() const
Return hit point.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
void reverseDistribute(const label constructSize, List< T > &, const bool dummyTransform=true, const int tag=UPstream::msgType()) const
Reverse distribute data using default commsType.
T & operator[](const label)
Return element of UList.
static label nProcs(const label communicator=0)
Number of processes in parallel run.
void clear()
Clear the list, i.e. set size to zero.
Triangle with additional region number.
label region() const
Return region label.
void setSize(const label)
Reset size of List.
Ostream & endl(Ostream &os)
Add newline and flush stream.
const geometricSurfacePatchList & patches() const
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.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
const indexedOctree< treeDataTriSurface > & tree() const
Demand driven construction of the octree.
streamFormat
Enumeration for the format of data in the stream.
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
writeOption writeOpt() const
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
DynamicList< T, SizeInc, SizeMult, SizeDiv > & shrink()
Shrink the allocated space to the number of elements used.
fileName objectPath() const
Return complete path + object name.
virtual void findLineAny(const pointField &start, const pointField &end, List< pointIndexHit > &) const
Return any intersection on segment from start to end.
Macros for easy insertion into run-time selection tables.
void operator=(const triSurface &)
static triSurface overlappingSurface(const triSurface &, const List< treeBoundBox > &, labelList &subPointMap, labelList &subFaceMap)
Subset the part of surface that is overlapping bounds.
virtual tmp< pointField > points() const
Get the points that define the surface.
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
const point & max() const
Maximum describing the bounding box.
static void calcBounds(const PrimitivePatch< Face, FaceList, PointField, PointType > &p, boundBox &bb, label &nPoints)
static autoPtr< decompositionMethod > New(const dictionary &decompositionDict)
Return a reference to the selected decomposition method.
virtual labelList decompose(const pointField &points, const scalarField &pointWeights)=0
Return for every coordinate the wanted processor number.
const word & name() const
Return name.
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
void setIndex(const label index)
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 ))
Initialise the NamedEnum HashTable from the static list of names.
#define FatalErrorIn(functionName)
Report an error message using Foam::FatalError.
A bounding box defined in terms of the points at its extremities.
Non-pointer based hierarchical recursive searching.
tmp< pointField > allPoints(const Triangulation &t)
Extract all points in vertex-index order.
compressionType
Enumeration for the format of data in the stream.
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
void set(entry *)
Assign a new entry, overwrite any existing entry.
label toGlobal(const label i) const
From local to global.
int system(const std::string &command)
Execute the specified command.
Determine correspondence between points. See below.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
Input inter-processor communications stream.
label toLocal(const label i) const
From global to local on current processor.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
A class for handling file names.
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.
label fcIndex(const label i) const
Return the forward circular index, i.e. the next index.
label size() const
Return the number of elements in the UList.
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 clearOut()
Clear storage.
static fileCheckTypes fileModificationChecking
An Ostream is an abstract base class for all output systems (streams, files, token lists...
const Time & time() const
Return time.
Vector< scalar > vector
A scalar version of the templated Vector.
bool read(const char *, int32_t &)
static const NamedEnum< distributionType, 3 > distributionTypeNames_
static bool intersectBb(const point &p0, const point &p1, const point &p2, const treeBoundBox &cubeBb)
Does triangle intersect bounding box.
void append(const T &)
Append an element at the end of the list.
bool isFile(const fileName &, const bool checkGzip=true)
Does the name exist as a FILE in the file system?
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]
const globalIndex & globalTris() const
Triangle indexing (demand driven)
bool mkDir(const fileName &, mode_t=0777)
Make a directory and return an error if it could not be created.
virtual void getRegion(const List< pointIndexHit > &, labelList ®ion) const
From a set of points and indices get the region.
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
const objectRegistry & db() const
Return the local objectRegistry.
virtual void findNearest(const pointField &sample, const scalarField &nearestDistSqr, List< pointIndexHit > &) const
bool overlaps(const boundBox &) const
Overlaps/touches boundingBox?
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
IOoject and searching on triSurface.
const Field< PointType > & points() const
Return reference to global points.
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
label whichProcID(const label i) const
Which processor does global come from? Binary search.
static const word null
An empty word.
defineTypeNameAndDebug(combustionModel, 0)