97 void Foam::meshRefinement::calcNeighbourData
108 if (neiLevel.size() != nBoundaryFaces || neiCc.size() != nBoundaryFaces)
111 << nBoundaryFaces <<
" neiLevel:" << neiLevel.size()
133 neiLevel[bFacei] = cellLevel[faceCells[i]];
134 neiCc[bFacei] = cellCentres[faceCells[i]];
138 else if (addedPatchIDSet.found(
patchi))
148 const vector fn = faceAreas[i]/(
mag(faceAreas[i]) + vSmall);
150 const label own = faceCells[i];
151 const label ownLevel = cellLevel[own];
155 scalar d = ((faceCentres[i] - cellCentres[own]) & fn);
156 if (faceLevel > ownLevel)
161 neiLevel[bFacei] = faceLevel;
163 neiCc[bFacei] = faceCentres[i] + d*fn;
171 neiLevel[bFacei] = cellLevel[faceCells[i]];
172 neiCc[bFacei] = faceCentres[i];
184 void Foam::meshRefinement::updateIntersections(
const labelList& changedFaces)
186 const pointField& cellCentres = mesh_.cellCentres();
192 label nMasterFaces = 0;
193 forAll(isMasterFace, facei)
195 if (isMasterFace.get(facei) == 1)
200 reduce(nMasterFaces, sumOp<label>());
202 label nChangedFaces = 0;
205 if (isMasterFace.get(changedFaces[i]) == 1)
210 reduce(nChangedFaces, sumOp<label>());
212 Info<<
"Edge intersection testing:" <<
nl
213 <<
" Number of edges : " << nMasterFaces <<
nl
214 <<
" Number of edges to retest : " << nChangedFaces
220 labelList neiLevel(mesh_.nFaces() - mesh_.nInternalFaces());
221 pointField neiCc(mesh_.nFaces() - mesh_.nInternalFaces());
222 calcNeighbourData(neiLevel, neiCc);
230 const label facei = changedFaces[i];
231 const label own = mesh_.faceOwner()[facei];
233 start[i] = cellCentres[own];
234 if (mesh_.isInternalFace(facei))
236 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
240 end[i] = neiCc[facei-mesh_.nInternalFaces()];
256 surfaces_.findHigherIntersection
269 surfaceIndex_[changedFaces[i]] = surfaceHit[i];
276 const label nHits = countHits();
279 Info<<
" Number of intersected edges : " << nTotHits <<
endl;
282 setInstance(mesh_.facesInstance());
301 Pout<<
"Checking field " << msg <<
endl;
320 const scalar& minVal = minFld[pointi];
321 const scalar& maxVal = maxFld[pointi];
322 if (
mag(minVal-maxVal) > small)
325 <<
" minFld:" << minVal <<
nl
326 <<
" maxFld:" << maxVal <<
nl
348 Pout<<
"Checking field " << msg <<
endl;
355 point(great, great, great)
367 const point& minVal = minFld[pointi];
368 const point& maxVal = maxFld[pointi];
369 if (
mag(minVal-maxVal) > small)
372 <<
" minFld:" << minVal <<
nl
373 <<
" maxFld:" << maxVal <<
nl
382 Pout<<
"meshRefinement::checkData() : Checking refinement structure."
384 meshCutter_.checkMesh();
386 Pout<<
"meshRefinement::checkData() : Checking refinement levels."
388 meshCutter_.checkRefinementLevels(1,
labelList(0));
391 label nBnd = mesh_.nFaces() - mesh_.nInternalFaces();
393 Pout<<
"meshRefinement::checkData() : Checking synchronisation."
403 mesh_.nInternalFaces()
416 testSyncBoundaryFaceList
419 "testing faceCentres : ",
429 calcNeighbourData(neiLevel, neiCc);
437 start[facei] = mesh_.cellCentres()[mesh_.faceOwner()[facei]];
439 if (mesh_.isInternalFace(facei))
441 end[facei] = mesh_.cellCentres()[mesh_.faceNeighbour()[facei]];
445 end[facei] = neiCc[facei-mesh_.nInternalFaces()];
461 surfaces_.findHigherIntersection
477 mesh_.nInternalFaces()
485 if (surfaceIndex_[facei] != surfaceHit[facei])
487 if (mesh_.isInternalFace(facei))
490 <<
"Internal face:" << facei
491 <<
" fc:" << mesh_.faceCentres()[facei]
492 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
493 <<
" current:" << surfaceHit[facei]
495 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
497 << mesh_.cellCentres()[mesh_.faceNeighbour()[facei]]
503 != neiHit[facei-mesh_.nInternalFaces()]
507 <<
"Boundary face:" << facei
508 <<
" fc:" << mesh_.faceCentres()[facei]
509 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
510 <<
" current:" << surfaceHit[facei]
512 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
513 <<
" end:" << end[facei]
523 mesh_.nFaces() - mesh_.nInternalFaces(),
524 mesh_.nInternalFaces()
527 labelList neiBoundarySurface(boundarySurface);
535 testSyncBoundaryFaceList
538 "testing surfaceIndex() : ",
546 Pout<<
"meshRefinement::checkData() : Counting duplicate faces."
556 mesh_.nInternalFaces(),
557 mesh_.nFaces() - mesh_.nInternalFaces()
568 if (duplicateFace[i] != -1)
574 Pout<<
"meshRefinement::checkData() : Found " << nDup
575 <<
" duplicate pairs of faces." <<
endl;
582 meshCutter_.setInstance(inst);
583 surfaceIndex_.instance() = inst;
610 mesh_.topoChange(map);
613 mesh_.setInstance(
name());
614 setInstance(mesh_.facesInstance());
622 map().reverseFaceMap(),
629 topoChange(map, newExposedFaces);
645 const label facei = splitFaces[i];
646 const face&
f = mesh_.faces()[facei];
651 label nVerts = split[1] - split[0];
679 const label own = mesh_.faceOwner()[facei];
682 if (facei >= mesh_.nInternalFaces())
684 patchi = mesh_.poly().boundary().whichPatch(facei);
688 nei = mesh_.faceNeighbour()[facei];
693 Pout<<
"face:" << facei <<
" verts:" <<
f
694 <<
" split into f0:" << f0
695 <<
" f1:" << f1 <<
endl;
725 mesh_.topoChange(map);
728 mesh_.setInstance(
name());
729 setInstance(mesh_.facesInstance());
732 const labelList& oldToNew = map().reverseFaceMap();
739 label oldFacei = map().faceMap()[facei];
740 if (oldToNew[oldFacei] != facei)
743 newSplitFaces[sz++] = facei;
747 topoChange(map, newSplitFaces);
1104 const scalar mergeDistance,
1112 mergeDistance_(mergeDistance),
1114 oldInstance_(
mesh.pointsInstance()),
1115 surfaces_(surfaces),
1116 features_(features),
1131 mesh_.facesInstance(),
1163 forAll(surfaceIndex_, facei)
1165 if (surfaceIndex_[facei] >= 0 && isMasterFace.
get(facei) == 1)
1320 const bool keepZoneFaces,
1321 const bool keepBaffles,
1338 label nUnblocked = 0;
1352 specifiedProcessorFaces,
1358 if (keepZoneFaces || keepBaffles)
1371 surfaces().surfZones();
1380 const word& fzName = surfZones[surfi].faceZoneName();
1385 const faceZone& fZone = fZones[fzName];
1389 const label facei = fZone[i];
1390 if (blockedFace[facei])
1394 mesh_.isInternalFace(facei)
1398 blockedFace[facei] =
false;
1421 Info<<
"Found " << nUnblocked
1422 <<
" zoned faces to keep together." <<
endl;
1428 boolList separatedCoupledFace(mesh_.nFaces(),
false);
1429 selectSeparatedCoupledFaces(separatedCoupledFace);
1431 label nSeparated = 0;
1432 forAll(separatedCoupledFace, facei)
1434 if (separatedCoupledFace[facei])
1436 if (blockedFace[facei])
1438 blockedFace[facei] =
false;
1444 Info<<
"Found " << nSeparated
1445 <<
" separated coupled faces to keep together." <<
endl;
1447 nUnblocked += nSeparated;
1453 const label nBnd = mesh_.nFaces() - mesh_.nInternalFaces();
1455 labelList coupledFace(mesh_.nFaces(), -1);
1473 const labelPair& baffle = allCouples[i];
1481 forAll(coupledFace, facei)
1483 if (coupledFace[facei] != -1 && facei < coupledFace[facei])
1485 couples[nCpl++] =
labelPair(facei, coupledFace[facei]);
1494 Info<<
"Found " << nCouples <<
" baffles to keep together."
1549 blockedFace[baffle.
first()] =
false;
1550 blockedFace[baffle.
second()] =
false;
1558 specifiedProcessorFaces,
1566 Pout<<
"Wanted distribution:" << nProcCells <<
endl;
1571 Pout<<
"Wanted resulting decomposition:" <<
endl;
1572 forAll(nProcCells, proci)
1574 Pout<<
" " << proci <<
'\t' << nProcCells[proci] <<
endl;
1588 mesh_.setInstance(
name());
1589 setInstance(mesh_.facesInstance());
1598 label nBoundaryFaces = 0;
1600 forAll(surfaceIndex_, facei)
1602 if (surfaceIndex_[facei] != -1)
1611 forAll(surfaceIndex_, facei)
1613 if (surfaceIndex_[facei] != -1)
1615 surfaceFaces[nBoundaryFaces++] = facei;
1618 return surfaceFaces;
1624 const faceList& faces = mesh_.faces();
1628 label nBoundaryPoints = 0;
1630 forAll(surfaceIndex_, facei)
1632 if (surfaceIndex_[facei] != -1)
1634 const face&
f = faces[facei];
1638 if (isBoundaryPoint.
set(
f[fp], 1u))
1675 labelList boundaryPoints(nBoundaryPoints);
1676 nBoundaryPoints = 0;
1677 forAll(isBoundaryPoint, pointi)
1679 if (isBoundaryPoint.
get(pointi) == 1u)
1681 boundaryPoints[nBoundaryPoints++] = pointi;
1685 return boundaryPoints;
1704 nFaces += pp.
size();
1719 addressing[nFaces++] = meshFacei++;
1745 pointPatches.
size(),
1751 patchFieldTypes[adaptPatchIDs[i]] =
1757 if (isA<processorPointPatch>(pointPatches[
patchi]))
1761 else if (isA<cyclicPointPatch>(pointPatches[
patchi]))
1773 "pointDisplacement",
1802 <<
"faceZones are not synchronised on processors." <<
nl
1803 <<
"Processor " << proci <<
" has faceZones "
1804 << zoneNames[proci] <<
nl
1806 <<
" has faceZones "
1820 const faceZone& fZone = fZones[zonei];
1828 if (faceToZone[bFacei] == -1)
1830 faceToZone[bFacei] = zonei;
1832 else if (faceToZone[bFacei] == zonei)
1835 <<
"Face " << fZone[i] <<
" in zone "
1837 <<
" is twice in zone!"
1849 if (faceToZone[i] != neiFaceToZone[i])
1853 <<
" is in zone " << faceToZone[i]
1854 <<
", its coupled face is in zone " << neiFaceToZone[i]
1879 const edge&
e = edges[edgei];
1885 pts[meshPoints[
e[1]]]
1886 - pts[meshPoints[
e[0]]]
1889 edgeWeights[edgei] = 1.0/eMag;
1905 forAll(invSumWeight, pointi)
1907 scalar w = invSumWeight[pointi];
1911 invSumWeight[pointi] = 1.0/w;
1944 if (isA<processorPolyPatch>(pp))
1952 patchDict.set(
"nFaces", 0);
1953 patchDict.set(
"startFace", 0);
1964 mesh_.addPatch(
patchi, ppPtr());
1968 meshedPatches_.append(
name);
1977 mesh_.addedPatches();
1986 forAll(meshedPatches_, i)
1993 <<
"Problem : did not find patch " << meshedPatches_[i]
1994 <<
endl <<
"Valid patches are " <<
patches.names()
2023 selected[cpp.
start() + i] =
true;
2035 const vector& perturbVec,
2036 const point& location
2045 regioni = cellRegion[celli];
2052 celli = searchEngine.
findCell(location + perturbVec);
2055 regioni = cellRegion[celli];
2068 const vector& perturbVec,
2075 if (selectionPoints.
outside().size())
2079 selectedCells =
true;
2086 const label regioni = findRegion
2095 forAll(cellRegion, celli)
2097 if (cellRegion[celli] == regioni)
2099 selectedCells[celli] =
false;
2110 const label regioni = findRegion
2115 selectionPoints.
inside()[i]
2119 forAll(cellRegion, celli)
2121 if (cellRegion[celli] == regioni)
2123 selectedCells[celli] =
true;
2129 forAll(selectedCells, celli)
2131 if (!selectedCells[celli])
2133 cellRegion[celli] = -1;
2147 (void)mesh_.tetBasePtIs();
2152 boolList blockedFace(mesh_.nFaces(),
false);
2153 selectSeparatedCoupledFaces(blockedFace);
2170 forAll(cellRegion, celli)
2172 if (cellRegion[celli] == -1)
2174 cellsToRemove.
append(celli);
2181 cellsToRemove.
size(),
2187 label nCellsToKeep = mesh_.nCells() - cellsToRemove.
size();
2190 Info<<
"Keeping all cells in regions containing any point in "
2192 <<
"Selected for keeping : " << nCellsToKeep <<
" cells." <<
endl;
2204 const label nExposedFaces =
2210 label defaultPatch = 0;
2211 if (globalToMasterPatch.
size())
2213 defaultPatch = globalToMasterPatch[0];
2217 <<
"Removing non-reachable cells exposes "
2218 << nExposedFaces <<
" internal or coupled faces." <<
endl
2219 <<
" These get put into patch " << defaultPatch <<
endl;
2221 exposedPatch.
setSize(exposedFaces.
size(), defaultPatch);
2224 return doRemoveCells
2244 meshCutter_.distribute(map);
2270 geometry[i].distribute
2281 geometry[i].instance() = geometry[i].time().name();
2301 updateIntersections(changedFaces);
2306 labelList& data = userFaceData_[i].second();
2308 if (userFaceData_[i].
first() == KEEPALL)
2313 else if (userFaceData_[i].
first() == MASTERONLY)
2318 forAll(newFaceData, facei)
2324 newFaceData[facei] = data[oldFacei];
2344 if (reverseFaceMap[oldFacei] != facei)
2347 reverseFaceMap[oldFacei] = -1;
2354 forAll(newFaceData, facei)
2360 if (reverseFaceMap[oldFacei] == facei)
2362 newFaceData[facei] = data[oldFacei];
2375 mesh_.setInstance(
name());
2378 bool writeOk = mesh_.write();
2395 s.instance() !=
s.time().system()
2396 &&
s.instance() !=
s.time().caseSystem()
2397 &&
s.instance() !=
s.time().constant()
2398 &&
s.instance() !=
s.time().caseConstant()
2402 s.instance() =
s.time().name();
2403 writeOk = writeOk &&
s.write();
2420 forAll(meshPoints, pointi)
2436 forAll(meshPoints, pointi)
2440 isPatchMasterPoint[pointi] =
true;
2444 return isPatchMasterPoint;
2459 myEdges[edgei] = globalEdges.
toGlobal(edgei);
2475 if (myEdges[edgei] == globalEdges.
toGlobal(edgei))
2477 isMasterEdge[edgei] =
true;
2481 return isMasterEdge;
2493 <<
" : cells(local):" << mesh_.nCells()
2494 <<
" faces(local):" << mesh_.nFaces()
2495 <<
" points(local):" << mesh_.nPoints()
2501 label nMasterFaces = 0;
2504 if (isMasterFace[i])
2511 label nMasterPoints = 0;
2512 forAll(isMeshMasterPoint, i)
2514 if (isMeshMasterPoint[i])
2530 const labelList& cellLevel = meshCutter_.cellLevel();
2536 nCells[cellLevel[celli]]++;
2542 Info<<
"Cells per refinement level:" <<
endl;
2545 Info<<
" " << leveli <<
'\t' << nCells[leveli]
2554 if (overwrite_ && mesh_.time().timeIndex() == 0)
2556 return oldInstance_;
2560 return mesh_.time().name();
2575 mesh_.time().name(),
2585 const labelList& cellLevel = meshCutter_.cellLevel();
2587 forAll(volRefLevel, celli)
2589 volRefLevel[celli] = cellLevel[celli];
2592 volRefLevel.
write();
2604 mesh_.time().name(),
2614 const labelList& pointLevel = meshCutter_.pointLevel();
2616 forAll(pointRefLevel, pointi)
2618 pointRefLevel[pointi] = pointLevel[pointi];
2621 pointRefLevel.
write();
2629 const pointField& cellCentres = mesh_.cellCentres();
2631 OFstream str(prefix +
"_edges.obj");
2633 Pout<<
"meshRefinement::dumpIntersections :"
2634 <<
" Writing cellcentre-cellcentre intersections to file "
2642 labelList neiLevel(mesh_.nFaces() - mesh_.nInternalFaces());
2643 pointField neiCc(mesh_.nFaces() - mesh_.nInternalFaces());
2644 calcNeighbourData(neiLevel, neiCc);
2646 labelList intersectionFaces(intersectedFaces());
2652 forAll(intersectionFaces, i)
2654 const label facei = intersectionFaces[i];
2655 start[i] = cellCentres[mesh_.faceOwner()[facei]];
2657 if (mesh_.isInternalFace(facei))
2659 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
2663 end[i] = neiCc[facei-mesh_.nInternalFaces()];
2669 const vectorField smallVec(rootSmall*(end-start));
2678 surfaces_.findAnyIntersection
2686 forAll(intersectionFaces, i)
2688 if (surfaceHit[i] != -1)
2696 str <<
"l " << vertI-2 <<
' ' << vertI-1 <<
nl
2697 <<
"l " << vertI-1 <<
' ' << vertI <<
nl;
2713 if (writeFlags & WRITEMESH)
2718 if (writeFlags && !(writeFlags & NOWRITEREFINEMENT))
2722 surfaceIndex_.write();
2725 if (writeFlags & WRITELEVELS)
2727 dumpRefinementLevel();
2730 if (debugFlags & OBJINTERSECTIONS && prefix.size())
2732 dumpIntersections(prefix);
2745 writeLevel_ = flags;
2751 return outputLevel_;
2757 outputLevel_ = flags;
#define forAll(list, i)
Loop across all elements in list.
static pointMesh & New(const word &name, const polyMesh &mesh)
Construct and return the named DemandDrivenMeshObject.
wordList toc() const
Return the table of contents.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & append(const T &)
Append an element at the end of the list.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & shrink()
Shrink the allocated space to the number of elements used.
SubField< vector > subField
Declare type of subField.
Generic GeometricField class.
static tmp< GeometricField< Type, pointMesh, Field > > New(const word &name, const Internal &, const PtrList< Patch > &, const HashPtrTable< Source > &=HashPtrTable< Source >())
Return a temporary field constructed from name,.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
A List with indirect addressing.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
void size(const label)
Override size to be inconsistent with allocated storage.
void setSize(const label)
Reset size of List.
Initialise the NamedEnum HashTable from the static list of names.
const fileName & name() const
Return the name of the stream.
void set(const PackedList< 1 > &)
Set specified bits.
label size() const
Number of entries.
unsigned int get(const label) const
Get value at index I.
const Type & second() const
Return second.
const Type & first() const
Return first.
static void scatterList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Scatter data. Reverse of gatherList.
static void listCombineGather(const List< commsStruct > &comms, List< T > &Value, const CombineOp &cop, const int tag, const label comm)
static void listCombineScatter(const List< commsStruct > &comms, List< T > &Value, const int tag, const label comm)
Scatter data. Reverse of combineGather.
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
A List obtained as a section of another List.
A simple wrapper around bool so that it can be read as a word: true/false, on/off,...
label size() const
Return the number of elements in the UList.
label fcIndex(const label i) const
Return the forward circular index, i.e. the next index.
static label nProcs(const label communicator=0)
Number of processes in parallel run.
static bool & parRun()
Is this a parallel run?
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
label size() const
Return the number of elements in the UPtrList.
const word & name() const
Return name.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
void clear()
Delete object (if the pointer is valid) and set pointer to.
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
virtual const transformer & transform() const =0
Return transformation between the coupled patches.
Abstract base class for decomposition.
virtual labelList decompose(const pointField &points, const scalarField &pointWeights)
Return for every coordinate the wanted processor number.
void setConstraints(const polyMesh &mesh, boolList &blockedFace, PtrList< labelList > &specifiedProcessorFaces, labelList &specifiedProcessor, List< labelPair > &explicitConnections)
Helper: extract constraints:
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
T lookupOrDefault(const word &, const T &) const
Find and return a T, if not found return the given default.
Base class for statistical distributions.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Named list of face indices representing a sub-set of the mesh faces.
A face is a list of labels corresponding to mesh vertices.
A class for handling file names.
Sends/receives parts of mesh+fvfields to neighbouring processors. Used in load balancing.
autoPtr< polyDistributionMap > distribute(const labelList &dist)
Send cells to neighbours according to distribution.
static labelList countCells(const labelList &)
Helper function: count cells per processor in wanted distribution.
Mesh data needed to do the Finite Volume discretisation.
const fvBoundaryMesh & boundary() const
Return reference to boundary mesh.
const polyMesh & poly() const
Return reference to polyMesh.
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
label toGlobal(const label i) const
From local to global.
Various mesh related information for a parallel run. Upon construction, constructs all info using par...
label nTotalCells() const
Return total number of cells in decomposed mesh.
Calculates points shared by more than two processor patches or cyclic patches.
Refinement of (split) hexes using polyTopoChange.
scalar level0EdgeLength() const
Typical edge length between unrefined points.
const labelIOList & cellLevel() const
label faceLevel(const label facei) const
Gets level such that the face has four points <= level.
static labelList findDuplicateFaces(const primitiveMesh &, const labelList &)
Helper routine to find baffles (two boundary faces using the.
static labelPairList findDuplicateFacePairs(const polyMesh &)
Helper routine to find all baffles (two boundary faces.
Helper class which maintains intersections of (changing) mesh with (static) surfaces.
autoPtr< polyTopoChangeMap > splitMeshRegions(const labelList &globalToMasterPatch, const labelList &globalToSlavePatch, const refinementParameters::cellSelectionPoints &selectionPoints)
Split mesh according to selectionPoints.
labelList intersectedFaces() const
Get faces with intersection.
labelList intersectedPoints() const
Get points on surfaces with intersection and boundary faces.
meshRefinement(fvMesh &mesh, const dictionary &refineDict, const scalar mergeDistance, const bool overwrite, refinementSurfaces &, const refinementFeatures &, const refinementRegions &)
Construct from components.
static void testSyncPointList(const string &msg, const polyMesh &mesh, const List< scalar > &fld)
void checkData()
Debugging: check that all faces still obey start()>end()
const refinementSurfaces & surfaces() const
Reference to surface search engines.
void topoChange(const polyTopoChangeMap &, const labelList &changedFaces)
Update for external change to mesh. changedFaces are in new mesh.
word name() const
Replacement for Time::name() : return oldInstance (if.
static const NamedEnum< IOwriteType, 5 > IOwriteTypeNames
void printMeshInfo(const bool, const string &) const
Print some mesh stats.
void distribute(const polyDistributionMap &)
Update local numbering for mesh redistribution.
void dumpRefinementLevel() const
Write refinement level as volScalarFields for postprocessing.
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)
label countHits() const
Count number of intersections (local)
static const NamedEnum< IOdebugType, 5 > IOdebugTypeNames
labelList meshedPatches() const
Get patchIDs for patches added in addMeshedPatch.
static void checkCoupledFaceZones(const polyMesh &)
Helper function: check that face zones are synced.
label addMeshedPatch(const word &name, const dictionary &)
Add patch originating from meshing. Update meshedPatches_.
void selectSeparatedCoupledFaces(boolList &) const
Select coupled faces that are not collocated.
static tmp< pointVectorField > makeDisplacementField(const pointMesh &pMesh, const labelList &adaptPatchIDs)
Helper function to make a pointVectorField with correct.
static const NamedEnum< IOoutputType, 1 > IOoutputTypeNames
static PackedBoolList getMasterEdges(const polyMesh &mesh, const labelList &meshEdges)
Determine master edge for subset of edges. If coupled.
static PackedBoolList getMasterPoints(const polyMesh &mesh, const labelList &meshPoints)
Determine master point for subset of points. If coupled.
autoPtr< polyDistributionMap > balance(const bool keepZoneFaces, const bool keepBaffles, const scalarField &cellWeights, decompositionMethod &decomposer, fvMeshDistribute &distributor)
Redecompose according to cell count.
static autoPtr< indirectPrimitivePatch > makePatch(const polyMesh &, const labelList &)
Create patch from set of patches.
bool write() const
Write mesh and all data.
void setInstance(const fileName &)
Set instance of all local IOobjects.
autoPtr< polyTopoChangeMap > splitFaces(const labelList &splitFaces, const labelPairList &splits)
Split faces into two.
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 writeType writeLevel()
Get/set write level.
static void findRegions(const polyMesh &, labelList &cellRegion, const vector &perturbVec, const refinementParameters::cellSelectionPoints &selectionPoints)
Find regions points are in and update cellRegion.
void dumpIntersections(const fileName &prefix) const
Debug: Write intersection information to OBJ format.
static outputType outputLevel()
Get/set output level.
void addedMeshedPatches()
Complete adding patches originating from meshing.
Mesh object that implements searches within the local cells and faces.
label findCell(const point &p, const pointInCellShapes=pointInCellShapes::tets) const
Find the cell containing the given point.
static const meshSearch & New(const polyMesh &mesh, const pointInCellShapes=pointInCellShapes::tets)
Lookup or construct from mesh and cell decomposition option.
Mesh representing a set of points created from polyMesh.
const pointBoundaryMesh & boundary() const
Return reference to boundary mesh.
label findIndex(const word &patchName) const
Find patch index given a name.
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
void distributeFaceData(List< T > &lst) const
Distribute list of face data.
Mesh consisting of general polyhedral cells.
const polyBoundaryMesh & boundary() const
Return boundary mesh.
virtual const faceList & faces() const
Return raw faces.
const faceZoneList & faceZones() const
Return face zones.
virtual const pointField & points() const
Return raw points.
A patch is a list of labels that address the faces in the global face list.
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.
label start() const
Return start label of this patch in the polyMesh face list.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
const labelList & reverseFaceMap() const
Reverse face map.
const labelList & faceMap() const
Old face map.
Direct mesh changes based on v1.3 polyTopoChange syntax.
autoPtr< polyTopoChangeMap > changeMesh(polyMesh &mesh, const bool syncParallel=true, const bool orderCells=false, const bool orderPoints=false)
Inplace changes mesh without change of patches.
void modifyFace(const face &f, const label facei, const label own, const label nei, const bool flipFaceFlux, const label patchID)
Modify vertices or cell of face.
label addFace(const face &f, const label own, const label nei, const label masterFaceID, const bool flipFaceFlux, const label patchID)
Add face to cells and return new face index.
label nInternalFaces() const
const vectorField & cellCentres() const
Encapsulates queries for features.
Class to hold the points to select cells inside and outside.
const List< point > & outside() const
Return the points outside the surface region to deselect cells.
const List< point > & inside() const
Return the points inside the surface regions to selected cells.
Encapsulates queries for volume refinement ('refine all cells within shell').
Container for data on surfaces used for surface-driven refinement. Contains all the data about the le...
void setMinLevelFields(const refinementRegions &shells, const scalar level0EdgeLength, const bool extendedRefinementSpan)
Calculate the refinement level for every element.
virtual bool write(const bool write=true) const
Write using setting from DB.
This class separates the mesh into distinct unconnected regions, each of which is then given a label ...
Given list of cells to remove insert all the topology changes.
void setRefinement(const labelList &cellsToRemove, const labelList &facesToExpose, const labelList &patchIDs, polyTopoChange &) const
Play commands into polyTopoChange to remove cells.
void topoChange(const polyTopoChangeMap &)
Force recalculation of locally stored data on topological change.
labelList getExposedFaces(const labelList &cellsToRemove) const
Get labels of exposed faces.
Container for searchableSurfaces.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines....
A class for managing temporary objects.
Standard boundBox + extra functionality for use in octree.
treeBoundBox extend(const scalar s) const
Return asymmetrically extended bounding box, with guaranteed.
A class for handling words, derived from string.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
gmvFile<< "tracers "<< particles.size()<< nl;{ pointField positions(particles.size());label particlei=0;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter) { positions[particlei++]=iter().position(mesh);} for(i=0;i< pTraits< point >::nComponents;i++) { forAll(positions, particlei) { gmvFile<< component(positions[particlei], i)<< ' ';} gmvFile<< nl;}}forAll(lagrangianScalarNames, i){ const word &name=lagrangianScalarNames[i];IOField< scalar > fld(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const fvPatchList & patches
#define WarningInFunction
Report a warning using Foam::Warning.
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Pair< label > labelPair
Label pair.
const dimensionSet & dimless
List< label > labelList
A List of labels.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
const dimensionSet & dimLength
String typeName(const std::type_info &info)
Return the un-mangled name given the standard type info.
errorManip< error > abort(error &err)
ListType renumber(const labelUList &oldToNew, const ListType &)
Renumber the values (not the indices) of a list.
labelList second(const UList< labelPair > &p)
vectorField pointField
pointField is a vectorField.
vector point
Point is a vector.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
labelList first(const UList< labelPair > &p)
Vector< scalar > vector
A scalar version of the templated Vector.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Field< vector > vectorField
Specialisation of Field<T> for vector.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
Type gMax(const UList< Type > &f, const label comm)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
prefixOSstream Pout(cout, "Pout")
HashSet< label, Hash< label > > labelHashSet
A HashSet with label keys.
tmp< DimensionedField< scalar, GeoMesh, Field > > mag(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurrence of given element and return index,.
static const label labelMax
labelList identityMap(const label len)
Create identity map (map[i] == i) of given length.
defineTypeNameAndDebug(atmosphericBoundaryLayer, 0)
UList< label > labelUList
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)
dimensioned< Type > max(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
List< treeBoundBox > meshBb(1, treeBoundBox(boundBox(coarseMesh.points(), false)).extend(1e-3))