122 void Foam::meshRefinement::calcNeighbourData
128 const labelList& cellLevel = meshCutter_.cellLevel();
129 const pointField& cellCentres = mesh_.cellCentres();
131 const label nBoundaryFaces = mesh_.nFaces() - mesh_.nInternalFaces();
133 if (neiLevel.
size() != nBoundaryFaces || neiCc.
size() != nBoundaryFaces)
136 << nBoundaryFaces <<
" neiLevel:" << neiLevel.
size()
152 label bFacei = pp.
start() - mesh_.nInternalFaces();
158 neiLevel[bFacei] = cellLevel[faceCells[i]];
159 neiCc[bFacei] = cellCentres[faceCells[i]];
173 const vector fn = faceAreas[i]/(
mag(faceAreas[i]) + vSmall);
175 const label own = faceCells[i];
176 const label ownLevel = cellLevel[own];
177 const label faceLevel = meshCutter_.faceLevel(pp.
start() + i);
180 scalar d = ((faceCentres[i] - cellCentres[own]) & fn);
181 if (faceLevel > ownLevel)
186 neiLevel[bFacei] = faceLevel;
188 neiCc[bFacei] = faceCentres[i] + d*fn;
196 neiLevel[bFacei] = cellLevel[faceCells[i]];
197 neiCc[bFacei] = faceCentres[i];
209 void Foam::meshRefinement::updateIntersections(
const labelList& changedFaces)
211 const pointField& cellCentres = mesh_.cellCentres();
217 label nMasterFaces = 0;
218 forAll(isMasterFace, facei)
220 if (isMasterFace.
get(facei) == 1)
227 label nChangedFaces = 0;
230 if (isMasterFace.
get(changedFaces[i]) == 1)
237 Info<<
"Edge intersection testing:" <<
nl 238 <<
" Number of edges : " << nMasterFaces <<
nl 239 <<
" Number of edges to retest : " << nChangedFaces
245 labelList neiLevel(mesh_.nFaces() - mesh_.nInternalFaces());
246 pointField neiCc(mesh_.nFaces() - mesh_.nInternalFaces());
247 calcNeighbourData(neiLevel, neiCc);
255 const label facei = changedFaces[i];
256 const label own = mesh_.faceOwner()[facei];
258 start[i] = cellCentres[own];
259 if (mesh_.isInternalFace(facei))
261 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
265 end[i] = neiCc[facei-mesh_.nInternalFaces()];
281 surfaces_.findHigherIntersection
294 surfaceIndex_[changedFaces[i]] = surfaceHit[i];
301 const label nHits = countHits();
304 Info<<
" Number of intersected edges : " << nTotHits <<
endl;
307 setInstance(mesh_.facesInstance());
322 <<
"fld size:" << fld.
size() <<
" mesh points:" << mesh.
nPoints()
326 Pout<<
"Checking field " << msg <<
endl;
345 const scalar& minVal = minFld[pointi];
346 const scalar& maxVal = maxFld[pointi];
347 if (
mag(minVal-maxVal) > small)
350 <<
" minFld:" << minVal <<
nl 351 <<
" maxFld:" << maxVal <<
nl 369 <<
"fld size:" << fld.
size() <<
" mesh points:" << mesh.
nPoints()
373 Pout<<
"Checking field " << msg <<
endl;
380 point(great, great, great)
392 const point& minVal = minFld[pointi];
393 const point& maxVal = maxFld[pointi];
394 if (
mag(minVal-maxVal) > small)
397 <<
" minFld:" << minVal <<
nl 398 <<
" maxFld:" << maxVal <<
nl 407 Pout<<
"meshRefinement::checkData() : Checking refinement structure." 409 meshCutter_.checkMesh();
411 Pout<<
"meshRefinement::checkData() : Checking refinement levels." 413 meshCutter_.checkRefinementLevels(1,
labelList(0));
416 label nBnd = mesh_.nFaces() - mesh_.nInternalFaces();
418 Pout<<
"meshRefinement::checkData() : Checking synchronisation." 428 mesh_.nInternalFaces()
441 testSyncBoundaryFaceList
444 "testing faceCentres : ",
454 calcNeighbourData(neiLevel, neiCc);
462 start[facei] = mesh_.cellCentres()[mesh_.faceOwner()[facei]];
464 if (mesh_.isInternalFace(facei))
466 end[facei] = mesh_.cellCentres()[mesh_.faceNeighbour()[facei]];
470 end[facei] = neiCc[facei-mesh_.nInternalFaces()];
486 surfaces_.findHigherIntersection
502 mesh_.nInternalFaces()
510 if (surfaceIndex_[facei] != surfaceHit[facei])
512 if (mesh_.isInternalFace(facei))
515 <<
"Internal face:" << facei
516 <<
" fc:" << mesh_.faceCentres()[facei]
517 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
518 <<
" current:" << surfaceHit[facei]
520 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
522 << mesh_.cellCentres()[mesh_.faceNeighbour()[facei]]
528 != neiHit[facei-mesh_.nInternalFaces()]
532 <<
"Boundary face:" << facei
533 <<
" fc:" << mesh_.faceCentres()[facei]
534 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
535 <<
" current:" << surfaceHit[facei]
537 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
538 <<
" end:" << end[facei]
548 mesh_.nFaces() - mesh_.nInternalFaces(),
549 mesh_.nInternalFaces()
552 labelList neiBoundarySurface(boundarySurface);
560 testSyncBoundaryFaceList
563 "testing surfaceIndex() : ",
571 Pout<<
"meshRefinement::checkData() : Counting duplicate faces." 579 identity(mesh_.nFaces() - mesh_.nInternalFaces())
580 + mesh_.nInternalFaces()
590 if (duplicateFace[i] != -1)
596 Pout<<
"meshRefinement::checkData() : Found " << nDup
597 <<
" duplicate pairs of faces." <<
endl;
604 meshCutter_.setInstance(inst);
605 surfaceIndex_.instance() = inst;
632 mesh_.topoChange(map);
635 if (map().hasMotionPoints())
637 mesh_.movePoints(map().preMotionPoints());
647 setInstance(mesh_.facesInstance());
655 map().reverseFaceMap(),
662 topoChange(map, newExposedFaces);
678 const label facei = splitFaces[i];
679 const face&
f = mesh_.faces()[facei];
684 label nVerts = split[1] - split[0];
712 const label own = mesh_.faceOwner()[facei];
715 if (facei >= mesh_.nInternalFaces())
717 patchi = mesh_.boundaryMesh().whichPatch(facei);
721 nei = mesh_.faceNeighbour()[facei];
724 const label zonei = mesh_.faceZones().whichZone(facei);
725 bool zoneFlip =
false;
728 const faceZone& fz = mesh_.faceZones()[zonei];
735 Pout<<
"face:" << facei <<
" verts:" << f
736 <<
" split into f0:" << f0
774 mesh_.topoChange(map);
777 if (map().hasMotionPoints())
779 mesh_.movePoints(map().preMotionPoints());
789 setInstance(mesh_.facesInstance());
792 const labelList& oldToNew = map().reverseFaceMap();
799 label oldFacei = map().faceMap()[facei];
800 if (oldToNew[oldFacei] != facei)
803 newSplitFaces[sz++] = facei;
807 topoChange(map, newSplitFaces);
1164 const scalar mergeDistance,
1165 const bool overwrite,
1172 mergeDistance_(mergeDistance),
1173 overwrite_(overwrite),
1175 surfaces_(surfaces),
1176 features_(features),
1188 mesh_.facesInstance(),
1202 meshCutter_.level0EdgeLength(),
1207 updateIntersections(
identity(mesh_.nFaces()));
1220 forAll(surfaceIndex_, facei)
1222 if (surfaceIndex_[facei] >= 0 && isMasterFace.
get(facei) == 1)
1377 const bool keepZoneFaces,
1378 const bool keepBaffles,
1395 label nUnblocked = 0;
1409 specifiedProcessorFaces,
1415 if (keepZoneFaces || keepBaffles)
1437 const word& fzName = surfZones[surfi].faceZoneName();
1442 const faceZone& fZone = fZones[fzName];
1446 const label facei = fZone[i];
1447 if (blockedFace[facei])
1451 mesh_.isInternalFace(facei)
1455 blockedFace[facei] =
false;
1478 Info<<
"Found " << nUnblocked
1479 <<
" zoned faces to keep together." <<
endl;
1485 boolList separatedCoupledFace(mesh_.nFaces(),
false);
1486 selectSeparatedCoupledFaces(separatedCoupledFace);
1488 label nSeparated = 0;
1489 forAll(separatedCoupledFace, facei)
1491 if (separatedCoupledFace[facei])
1493 if (blockedFace[facei])
1495 blockedFace[facei] =
false;
1501 Info<<
"Found " << nSeparated
1502 <<
" separated coupled faces to keep together." <<
endl;
1504 nUnblocked += nSeparated;
1510 const label nBnd = mesh_.nFaces() - mesh_.nInternalFaces();
1512 labelList coupledFace(mesh_.nFaces(), -1);
1530 const labelPair& baffle = allCouples[i];
1538 forAll(coupledFace, facei)
1540 if (coupledFace[facei] != -1 && facei < coupledFace[facei])
1542 couples[nCpl++] =
labelPair(facei, coupledFace[facei]);
1551 Info<<
"Found " << nCouples <<
" baffles to keep together." 1606 blockedFace[baffle.
first()] =
false;
1607 blockedFace[baffle.
second()] =
false;
1615 specifiedProcessorFaces,
1623 Pout<<
"Wanted distribution:" << nProcCells <<
endl;
1628 Pout<<
"Wanted resulting decomposition:" <<
endl;
1629 forAll(nProcCells, proci)
1631 Pout<<
" " << proci <<
'\t' << nProcCells[proci] <<
endl;
1646 setInstance(mesh_.facesInstance());
1655 label nBoundaryFaces = 0;
1657 forAll(surfaceIndex_, facei)
1659 if (surfaceIndex_[facei] != -1)
1668 forAll(surfaceIndex_, facei)
1670 if (surfaceIndex_[facei] != -1)
1672 surfaceFaces[nBoundaryFaces++] = facei;
1675 return surfaceFaces;
1681 const faceList& faces = mesh_.faces();
1685 label nBoundaryPoints = 0;
1687 forAll(surfaceIndex_, facei)
1689 if (surfaceIndex_[facei] != -1)
1691 const face&
f = faces[facei];
1695 if (isBoundaryPoint.set(f[fp], 1u))
1732 labelList boundaryPoints(nBoundaryPoints);
1733 nBoundaryPoints = 0;
1734 forAll(isBoundaryPoint, pointi)
1736 if (isBoundaryPoint.get(pointi) == 1u)
1738 boundaryPoints[nBoundaryPoints++] = pointi;
1742 return boundaryPoints;
1759 const polyPatch& pp = patches[patchIDs[i]];
1761 nFaces += pp.size();
1770 const polyPatch& pp = patches[patchIDs[i]];
1776 addressing[nFaces++] = meshFacei++;
1802 pointPatches.
size(),
1803 slipPointPatchVectorField::typeName
1808 patchFieldTypes[adaptPatchIDs[i]] =
1809 fixedValuePointPatchVectorField::typeName;
1814 if (isA<processorPointPatch>(pointPatches[
patchi]))
1816 patchFieldTypes[
patchi] = calculatedPointPatchVectorField::typeName;
1818 else if (isA<cyclicPointPatch>(pointPatches[patchi]))
1820 patchFieldTypes[
patchi] = cyclicSlipPointPatchVectorField::typeName;
1830 "pointDisplacement",
1859 <<
"faceZones are not synchronised on processors." <<
nl 1860 <<
"Processor " << proci <<
" has faceZones " 1861 << zoneNames[proci] <<
nl 1863 <<
" has faceZones " 1877 const faceZone& fZone = fZones[zonei];
1885 if (faceToZone[bFacei] == -1)
1887 faceToZone[bFacei] = zonei;
1889 else if (faceToZone[bFacei] == zonei)
1892 <<
"Face " << fZone[i] <<
" in zone " 1894 <<
" is twice in zone!" 1900 <<
"Face " << fZone[i] <<
" in zone " 1902 <<
" is also in zone " 1903 << fZones[faceToZone[bFacei]].
name()
1915 if (faceToZone[i] != neiFaceToZone[i])
1919 <<
" is in zone " << faceToZone[i]
1920 <<
", its coupled face is in zone " << neiFaceToZone[i]
1945 const edge&
e = edges[edgei];
1951 pts[meshPoints[e[1]]]
1952 - pts[meshPoints[e[0]]]
1955 edgeWeights[edgei] = 1.0/eMag;
1971 forAll(invSumWeight, pointi)
1973 scalar w = invSumWeight[pointi];
1977 invSumWeight[pointi] = 1.0/w;
2005 patchi = pbm.
size();
2010 if (isA<processorPolyPatch>(pp))
2018 patchDict.
set(
"nFaces", 0);
2019 patchDict.
set(
"startFace", 0);
2041 meshedPatches_.append(name);
2053 forAll(meshedPatches_, i)
2060 <<
"Problem : did not find patch " << meshedPatches_[i]
2061 <<
endl <<
"Valid patches are " << patches.
names()
2070 return move(patchIDs);
2081 if (isA<coupledPolyPatch>(patches[
patchi]))
2092 selected[cpp.
start() + i] =
true;
2104 const vector& perturbVec,
2105 const point& location
2112 regioni = cellRegion[celli];
2119 celli = mesh.
findCell(location + perturbVec);
2122 regioni = cellRegion[celli];
2135 const vector& perturbVec,
2142 if (selectionPoints.
outside().size())
2146 selectedCells =
true;
2153 const label regioni = findRegion
2162 forAll(cellRegion, celli)
2164 if (cellRegion[celli] == regioni)
2166 selectedCells[celli] =
false;
2177 const label regioni = findRegion
2182 selectionPoints.
inside()[i]
2186 forAll(cellRegion, celli)
2188 if (cellRegion[celli] == regioni)
2190 selectedCells[celli] =
true;
2196 forAll(selectedCells, celli)
2198 if (!selectedCells[celli])
2200 cellRegion[celli] = -1;
2214 (void)mesh_.tetBasePtIs();
2219 boolList blockedFace(mesh_.nFaces(),
false);
2220 selectSeparatedCoupledFaces(blockedFace);
2237 forAll(cellRegion, celli)
2239 if (cellRegion[celli] == -1)
2241 cellsToRemove.
append(celli);
2244 cellsToRemove.shrink();
2248 cellsToRemove.
size(),
2254 label nCellsToKeep = mesh_.nCells() - cellsToRemove.
size();
2257 Info<<
"Keeping all cells in regions containing any point in " 2259 <<
"Selected for keeping : " << nCellsToKeep <<
" cells." <<
endl;
2271 const label nExposedFaces =
2277 label defaultPatch = 0;
2278 if (globalToMasterPatch.
size())
2280 defaultPatch = globalToMasterPatch[0];
2284 <<
"Removing non-reachable cells exposes " 2285 << nExposedFaces <<
" internal or coupled faces." << endl
2286 <<
" These get put into patch " << defaultPatch <<
endl;
2288 exposedPatch.setSize(exposedFaces.
size(), defaultPatch);
2291 return doRemoveCells
2313 meshCutter_.distribute(map);
2339 geometry[i].distribute
2347 if (faceMap.
valid())
2350 geometry[i].instance() = geometry[i].time().timeName();
2368 topoChange(map, changedFaces, dummyMap, dummyMap, dummyMap);
2380 meshCutter_.storeData
2401 meshCutter_.topoChange
2413 updateIntersections(changedFaces);
2420 if (userFaceData_[i].
first() == KEEPALL)
2425 else if (userFaceData_[i].
first() == MASTERONLY)
2430 forAll(newFaceData, facei)
2436 newFaceData[facei] = data[oldFacei];
2456 if (reverseFaceMap[oldFacei] != facei)
2459 reverseFaceMap[oldFacei] = -1;
2466 forAll(newFaceData, facei)
2472 if (reverseFaceMap[oldFacei] == facei)
2474 newFaceData[facei] = data[oldFacei];
2486 bool writeOk = mesh_.write();
2511 writeOk = writeOk && s.
write();
2528 forAll(meshPoints, pointi)
2544 forAll(meshPoints, pointi)
2548 isPatchMasterPoint[pointi] =
true;
2552 return isPatchMasterPoint;
2567 myEdges[edgei] = globalEdges.toGlobal(edgei);
2583 if (myEdges[edgei] == globalEdges.toGlobal(edgei))
2585 isMasterEdge[edgei] =
true;
2589 return isMasterEdge;
2601 <<
" : cells(local):" << mesh_.nCells()
2602 <<
" faces(local):" << mesh_.nFaces()
2603 <<
" points(local):" << mesh_.nPoints()
2609 label nMasterFaces = 0;
2612 if (isMasterFace[i])
2619 label nMasterPoints = 0;
2620 forAll(isMeshMasterPoint, i)
2622 if (isMeshMasterPoint[i])
2638 const labelList& cellLevel = meshCutter_.cellLevel();
2644 nCells[cellLevel[celli]]++;
2650 Info<<
"Cells per refinement level:" <<
endl;
2653 Info<<
" " << leveli <<
'\t' << nCells[leveli]
2662 if (overwrite_ && mesh_.time().timeIndex() == 0)
2664 return oldInstance_;
2668 return mesh_.time().timeName();
2683 mesh_.time().timeName(),
2693 const labelList& cellLevel = meshCutter_.cellLevel();
2695 forAll(volRefLevel, celli)
2697 volRefLevel[celli] = cellLevel[celli];
2700 volRefLevel.write();
2712 mesh_.time().timeName(),
2722 const labelList& pointLevel = meshCutter_.pointLevel();
2724 forAll(pointRefLevel, pointi)
2726 pointRefLevel[pointi] = pointLevel[pointi];
2729 pointRefLevel.write();
2737 const pointField& cellCentres = mesh_.cellCentres();
2739 OFstream str(prefix +
"_edges.obj");
2741 Pout<<
"meshRefinement::dumpIntersections :" 2742 <<
" Writing cellcentre-cellcentre intersections to file " 2750 labelList neiLevel(mesh_.nFaces() - mesh_.nInternalFaces());
2751 pointField neiCc(mesh_.nFaces() - mesh_.nInternalFaces());
2752 calcNeighbourData(neiLevel, neiCc);
2754 labelList intersectionFaces(intersectedFaces());
2760 forAll(intersectionFaces, i)
2762 const label facei = intersectionFaces[i];
2763 start[i] = cellCentres[mesh_.faceOwner()[facei]];
2765 if (mesh_.isInternalFace(facei))
2767 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
2771 end[i] = neiCc[facei-mesh_.nInternalFaces()];
2777 const vectorField smallVec(rootSmall*(end-start));
2786 surfaces_.findAnyIntersection
2794 forAll(intersectionFaces, i)
2796 if (surfaceHit[i] != -1)
2804 str <<
"l " << vertI-2 <<
' ' << vertI-1 <<
nl 2805 <<
"l " << vertI-1 <<
' ' << vertI <<
nl;
2821 if (writeFlags & WRITEMESH)
2826 if (writeFlags && !(writeFlags & NOWRITEREFINEMENT))
2828 meshCutter_.write();
2829 surfaceIndex_.write();
2832 if (writeFlags & WRITELEVELS)
2834 dumpRefinementLevel();
2837 if (debugFlags & OBJINTERSECTIONS && prefix.size())
2839 dumpIntersections(prefix);
2852 writeLevel_ = flags;
2858 return outputLevel_;
2864 outputLevel_ = flags;
const fvPatchList & patches
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
ListType renumber(const labelUList &oldToNew, const ListType &)
Renumber the values (not the indices) of a list.
virtual labelList decompose(const pointField &points, const scalarField &pointWeights)
Return for every coordinate the wanted processor number.
This class separates the mesh into distinct unconnected regions, each of which is then given a label ...
labelList first(const UList< labelPair > &p)
static void scatterList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Scatter data. Reverse of gatherList.
void printMeshInfo(const bool, const string &) const
Print some mesh stats.
static void listCombineScatter(const List< commsStruct > &comms, List< T > &Value, const int tag, const label comm)
Scatter data. Reverse of combineGather.
#define forAll(list, i)
Loop across all elements in list.
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
autoPtr< polyTopoChangeMap > changeMesh(polyMesh &mesh, const bool inflate, const bool syncParallel=true, const bool orderCells=false, const bool orderPoints=false)
Inplace changes mesh without change of patches.
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
FvWallInfoData< WallInfo, label > 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.
IOoutputType
Enumeration for what to output.
A class for handling file names.
errorManipArg< error, int > exit(error &err, const int errNo=1)
unsigned int get(const label) const
Get value at index I.
A face is a list of labels corresponding to mesh vertices.
void setRefinement(const labelList &cellsToRemove, const labelList &facesToExpose, const labelList &patchIDs, polyTopoChange &) const
Play commands into polyTopoChange to remove cells.
const labelList & faceMap() const
Old face map.
label countHits() const
Count number of intersections (local)
A list of keyword definitions, which are a keyword followed by any number of values (e...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
label nInternalFaces() const
IOdebugType
Enumeration for what to debug.
Various mesh related information for a parallel run. Upon construction, constructs all info using par...
static word meshSubDir
Return the mesh sub-directory name (usually "polyMesh")
void topoChange(const polyTopoChangeMap &, const labelList &changedFaces)
Update for external change to mesh. changedFaces are in new mesh.
static const NamedEnum< IOoutputType, 1 > IOoutputTypeNames
void size(const label)
Override size to be inconsistent with allocated storage.
const boolList & flipMap() const
Return face flip map.
label fcIndex(const label i) const
Return the forward circular index, i.e. the next index.
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
Given list of cells to remove insert all the topology changes.
static tmp< GeometricField< vector, pointPatchField, pointMesh > > New(const word &name, const Internal &, const PtrList< pointPatchField< vector >> &)
Return a temporary field constructed from name,.
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
autoPtr< polyTopoChangeMap > splitFaces(const labelList &splitFaces, const labelPairList &splits)
Split faces into two.
label nTotalCells() const
Return total number of cells in decomposed mesh.
A simple wrapper around bool so that it can be read as a word: true/false, on/off, yes/no, y/n, t/f, or none/any.
labelList intersectedFaces() const
Get faces with intersection.
static writeType writeLevel()
Get/set write level.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
label findPatchID(const word &patchName) const
Find patch index given a name.
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
Encapsulates queries for volume refinement ('refine all cells within shell').
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
label whichFace(const label globalCellID) const
Helper function to re-direct to zone::localID(...)
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
const dimensionSet dimless
virtual const transformer & transform() const =0
Return transformation between the coupled patches.
Pre-declare related SubField type.
PrimitivePatch< IndirectList< face >, const pointField & > indirectPrimitivePatch
Foam::indirectPrimitivePatch.
labelList intersectedPoints() const
Get points on surfaces with intersection and boundary faces.
const fileName & name() const
Return the name of the stream.
Initialise the NamedEnum HashTable from the static list of names.
static void listCombineGather(const List< commsStruct > &comms, List< T > &Value, const CombineOp &cop, const int tag, const label comm)
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
const dimensionSet dimLength
static labelPairList findDuplicateFacePairs(const polyMesh &)
Helper routine to find all baffles (two boundary faces.
IOwriteType
Enumeration for what to write.
Container for data on surfaces used for surface-driven refinement. Contains all the data about the le...
virtual const pointField & points() const
Return raw points.
Mesh representing a set of points created from polyMesh.
wordList names() const
Return a list of zone names.
fileName caseSystem() const
Return system name for the case.
meshRefinement(fvMesh &mesh, const dictionary &refineDict, const scalar mergeDistance, const bool overwrite, refinementSurfaces &, const refinementFeatures &, const refinementRegions &)
Construct from components.
void topoChange(const polyTopoChangeMap &)
Force recalculation of locally stored data on topological change.
static bool constraintType(const word &pt)
Return true if the given type is a constraint type.
Encapsulates queries for features.
void clear()
Delete object (if the pointer is valid) and set pointer to.
const labelList & reverseFaceMap() const
Reverse face map.
const List< point > & inside() const
Return the points inside the surface regions to selected cells.
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
A List obtained as a section of another List.
Sends/receives parts of mesh+fvfields to neighbouring processors. Used in load balancing.
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){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
autoPtr< polyDistributionMap > distribute(const labelList &dist)
Send cells to neighbours according to distribution.
const fileName & pointsInstance() const
Return the current instance directory for points.
An ordered pair of two objects of type <T> with first() and second() elements.
virtual bool coupled() const
Return true if this patch is geometrically coupled (i.e. faces and.
label addFace(const face &f, const label own, const label nei, const label masterPointID, const label masterEdgeID, const label masterFaceID, const bool flipFaceFlux, const label patchID, const label zoneID, const bool zoneFlip)
Add face to cells. Return new face label.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
static void calculateEdgeWeights(const polyMesh &mesh, const PackedBoolList &isMasterEdge, const labelList &meshPoints, const edgeList &edges, scalarField &edgeWeights, scalarField &invSumWeight)
Helper: calculate edge weights (1/length)
const labelUList & faceCells() const
Return face-cell addressing.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
bool found(const Key &) const
Return true if hashedEntry is found in table.
static word timeName(const scalar, const int precision=curPrecision_)
Return time name of given scalar time.
A class for handling words, derived from string.
static PackedBoolList getMasterEdges(const polyMesh &mesh, const labelList &meshEdges)
Determine master edge for subset of edges. If coupled.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
wordList names() const
Return a list of patch names.
void append(const T &)
Append an element at the end of the list.
void setConstraints(const polyMesh &mesh, boolList &blockedFace, PtrList< labelList > &specifiedProcessorFaces, labelList &specifiedProcessor, List< labelPair > &explicitConnections)
Helper: extract constraints:
const word & constant() const
Return constant name.
static const NamedEnum< IOdebugType, 5 > IOdebugTypeNames
static void checkCoupledFaceZones(const polyMesh &)
Helper function: check that face zones are synced.
Container for searchableSurfaces.
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
Pair< label > labelPair
Label pair.
static const label labelMax
List< label > labelList
A List of labels.
Abstract base class for decomposition.
const word & name() const
Return name.
virtual const faceList & faces() const
Return raw faces.
Accumulating histogram of values. Specified bin resolution automatic generation of bins...
const PtrList< surfaceZonesInfo > & surfZones() const
bool valid() const
Return true if the autoPtr valid (ie, the pointer is set)
errorManip< error > abort(error &err)
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
word timeName() const
Replacement for Time::timeName() : return oldInstance (if.
const word & system() const
Return system name.
List< treeBoundBox > meshBb(1, treeBoundBox(boundBox(coarseMesh.points(), false)).extend(1e-3))
const vectorField::subField faceAreas() const
Return face areas.
fileName caseConstant() const
Return constant name for the case.
void checkData()
Debugging: check that all faces still obey start()>end()
Type gMax(const FieldField< Field, Type > &f)
defineTypeNameAndDebug(combustionModel, 0)
Database for solution and other reduced data.
label addMeshedPatch(const word &name, const dictionary &)
Add patch originating from meshing. Update meshedPatches_.
labelList meshedPatches() const
Get patchIDs for patches added in addMeshedPatch.
autoPtr< polyDistributionMap > balance(const bool keepZoneFaces, const bool keepBaffles, const scalarField &cellWeights, decompositionMethod &decomposer, fvMeshDistribute &distributor)
Redecompose according to cell count.
static pointMesh & New(polyMesh &mesh)
void setMinLevelFields(const refinementRegions &shells, const scalar level0EdgeLength, const bool extendedRefinementSpan)
Calculate the refinement level for every element.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurrence of given element and return index,.
static autoPtr< indirectPrimitivePatch > makePatch(const polyMesh &, const labelList &)
Create patch from set of patches.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
static outputType outputLevel()
Get/set output level.
labelList second(const UList< labelPair > &p)
const Type & second() const
Return second.
label size() const
Return the number of elements in the UPtrList.
void distributeFaceData(List< T > &lst) const
Distribute list of face data.
void setInstance(const fileName &)
Set instance of all local IOobjects.
Calculates points shared by more than two processor patches or cyclic patches.
void setSize(const label)
Reset size of List.
void modifyFace(const face &f, const label facei, const label own, const label nei, const bool flipFaceFlux, const label patchID, const label zoneID, const bool zoneFlip)
Modify vertices or cell of face.
void distribute(const polyDistributionMap &)
Update local numbering for mesh redistribution.
static bool & parRun()
Is this a parallel run?
static label nProcs(const label communicator=0)
Number of processes in parallel run.
autoPtr< polyTopoChangeMap > splitMeshRegions(const labelList &globalToMasterPatch, const labelList &globalToSlavePatch, const refinementParameters::cellSelectionPoints &selectionPoints)
Split mesh according to selectionPoints.
void storeData(const labelList &pointsToStore, const labelList &facesToStore, const labelList &cellsToStore)
Signal points/face/cells for which to store data.
vector point
Point is a vector.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
#define WarningInFunction
Report a warning using Foam::Warning.
static void testSyncPointList(const string &msg, const polyMesh &mesh, const List< scalar > &fld)
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
const Time & time() const
Return time.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
prefixOSstream Pout(cout, "Pout")
const meshFaceZones & faceZones() const
Return face zones.
Mesh data needed to do the Finite Volume discretisation.
Direct mesh changes based on v1.3 polyTopoChange syntax.
label start() const
Return start label of this patch in the polyMesh face list.
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
label findCell(const point &p, const cellDecomposition=CELL_TETS) const
Find cell enclosing this location and return index.
void set(entry *)
Assign a new entry, overwrite any existing entry.
static labelList findDuplicateFaces(const primitiveMesh &, const labelList &)
Helper routine to find baffles (two boundary faces using the.
void selectSeparatedCoupledFaces(boolList &) const
Select coupled faces that are not collocated.
Standard boundBox + extra functionality for use in octree.
static const Vector< scalar > one
dimensioned< scalar > mag(const dimensioned< Type > &)
static void findRegions(const polyMesh &, labelList &cellRegion, const vector &perturbVec, const refinementParameters::cellSelectionPoints &selectionPoints)
Find regions points are in and update cellRegion.
static autoPtr< polyPatch > New(const word &patchType, const word &name, const label size, const label start, const label index, const polyBoundaryMesh &bm)
Return a pointer to a new patch created on freestore from.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
const doubleScalar e
Elementary charge.
label size() const
Number of entries.
fileName & instance() const
Return the instance directory, constant, system, <time> etc.
Mesh consisting of general polyhedral cells.
labelList getExposedFaces(const labelList &cellsToRemove) const
Get labels of exposed faces.
A subset of mesh faces organised as a primitive patch.
bool write() const
Write mesh and all data.
virtual bool write(const bool write=true) const
Write using setting from DB.
static tmp< pointVectorField > makeDisplacementField(const pointMesh &pMesh, const labelList &adaptPatchIDs)
Helper function to make a pointVectorField with correct.
A class for managing temporary objects.
A patch is a list of labels that address the faces in the global face list.
static PackedBoolList getMasterPoints(const polyMesh &mesh, const labelList &meshPoints)
Determine master point for subset of points. If coupled.
void dumpIntersections(const fileName &prefix) const
Debug: Write intersection information to OBJ format.
const pointBoundaryMesh & boundary() const
Return reference to boundary mesh.
static labelList countCells(const labelList &)
Helper function: count cells per processor in wanted distribution.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
static label findRegion(const polyMesh &, const labelList &cellRegion, const vector &perturbVec, const point &location)
Find region point is in. Uses optional perturbation to re-test.
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
const Type & first() const
Return first.
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
void dumpRefinementLevel() const
Write refinement level as volScalarFields for postprocessing.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
static const Vector< scalar > zero
const List< point > & outside() const
Return the points outside the surface region to deselect cells.
static const NamedEnum< IOwriteType, 5 > IOwriteTypeNames
Class to hold the points to select cells inside and outside.
const vectorField::subField faceCentres() const
Return face centres.