122 void Foam::meshRefinement::calcNeighbourData
128 const labelList& cellLevel = meshCutter_.cellLevel();
129 const pointField& cellCentres = mesh_.cellCentres();
131 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]];
174 fn /=
mag(fn)+vSmall;
176 label own = faceCells[i];
177 label ownLevel = cellLevel[own];
178 label faceLevel = meshCutter_.faceLevel(pp.
start()+i);
181 scalar d = ((faceCentres[i] - cellCentres[own]) & fn);
182 if (faceLevel > ownLevel)
187 neiLevel[bFacei] = faceLevel;
189 neiCc[bFacei] = faceCentres[i] + d*fn;
197 neiLevel[bFacei] = cellLevel[faceCells[i]];
198 neiCc[bFacei] = faceCentres[i];
210 void Foam::meshRefinement::updateIntersections(
const labelList& changedFaces)
212 const pointField& cellCentres = mesh_.cellCentres();
218 label nMasterFaces = 0;
219 forAll(isMasterFace, facei)
221 if (isMasterFace.
get(facei) == 1)
228 label nChangedFaces = 0;
231 if (isMasterFace.
get(changedFaces[i]) == 1)
238 Info<<
"Edge intersection testing:" <<
nl 239 <<
" Number of edges : " << nMasterFaces <<
nl 240 <<
" Number of edges to retest : " << nChangedFaces
246 labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces());
247 pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces());
248 calcNeighbourData(neiLevel, neiCc);
256 label facei = changedFaces[i];
257 label own = mesh_.faceOwner()[facei];
259 start[i] = cellCentres[own];
260 if (mesh_.isInternalFace(facei))
262 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
266 end[i] = neiCc[facei-mesh_.nInternalFaces()];
282 surfaces_.findHigherIntersection
295 surfaceIndex_[changedFaces[i]] = surfaceHit[i];
302 label nHits = countHits();
305 Info<<
" Number of intersected edges : " << nTotHits <<
endl;
308 setInstance(mesh_.facesInstance());
323 <<
"fld size:" << fld.
size() <<
" mesh points:" << mesh.
nPoints()
327 Pout<<
"Checking field " << msg <<
endl;
346 const scalar& minVal = minFld[pointi];
347 const scalar& maxVal = maxFld[pointi];
348 if (
mag(minVal-maxVal) > small)
351 <<
" minFld:" << minVal <<
nl 352 <<
" maxFld:" << maxVal <<
nl 370 <<
"fld size:" << fld.
size() <<
" mesh points:" << mesh.
nPoints()
374 Pout<<
"Checking field " << msg <<
endl;
381 point(great, great, great)
393 const point& minVal = minFld[pointi];
394 const point& maxVal = maxFld[pointi];
395 if (
mag(minVal-maxVal) > small)
398 <<
" minFld:" << minVal <<
nl 399 <<
" maxFld:" << maxVal <<
nl 408 Pout<<
"meshRefinement::checkData() : Checking refinement structure." 410 meshCutter_.checkMesh();
412 Pout<<
"meshRefinement::checkData() : Checking refinement levels." 414 meshCutter_.checkRefinementLevels(1,
labelList(0));
417 label nBnd = mesh_.nFaces()-mesh_.nInternalFaces();
419 Pout<<
"meshRefinement::checkData() : Checking synchronisation." 429 mesh_.nInternalFaces()
442 testSyncBoundaryFaceList
445 "testing faceCentres : ",
455 calcNeighbourData(neiLevel, neiCc);
463 start[facei] = mesh_.cellCentres()[mesh_.faceOwner()[facei]];
465 if (mesh_.isInternalFace(facei))
467 end[facei] = mesh_.cellCentres()[mesh_.faceNeighbour()[facei]];
471 end[facei] = neiCc[facei-mesh_.nInternalFaces()];
487 surfaces_.findHigherIntersection
503 mesh_.nInternalFaces()
511 if (surfaceIndex_[facei] != surfaceHit[facei])
513 if (mesh_.isInternalFace(facei))
516 <<
"Internal face:" << facei
517 <<
" fc:" << mesh_.faceCentres()[facei]
518 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
519 <<
" current:" << surfaceHit[facei]
521 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
523 << mesh_.cellCentres()[mesh_.faceNeighbour()[facei]]
529 != neiHit[facei-mesh_.nInternalFaces()]
533 <<
"Boundary face:" << facei
534 <<
" fc:" << mesh_.faceCentres()[facei]
535 <<
" cached surfaceIndex_:" << surfaceIndex_[facei]
536 <<
" current:" << surfaceHit[facei]
538 << mesh_.cellCentres()[mesh_.faceOwner()[facei]]
539 <<
" end:" << end[facei]
549 mesh_.nFaces()-mesh_.nInternalFaces(),
550 mesh_.nInternalFaces()
553 labelList neiBoundarySurface(boundarySurface);
561 testSyncBoundaryFaceList
564 "testing surfaceIndex() : ",
572 Pout<<
"meshRefinement::checkData() : Counting duplicate faces." 580 identity(mesh_.nFaces()-mesh_.nInternalFaces())
581 + mesh_.nInternalFaces()
591 if (duplicateFace[i] != -1)
597 Pout<<
"meshRefinement::checkData() : Found " << nDup
598 <<
" duplicate pairs of faces." <<
endl;
605 meshCutter_.setInstance(inst);
606 surfaceIndex_.instance() = inst;
633 mesh_.updateMesh(map);
636 if (map().hasMotionPoints())
638 mesh_.movePoints(map().preMotionPoints());
648 setInstance(mesh_.facesInstance());
656 map().reverseFaceMap(),
663 updateMesh(map, newExposedFaces);
679 label facei = splitFaces[i];
680 const face&
f = mesh_.faces()[facei];
685 label nVerts = split[1]-split[0];
713 label own = mesh_.faceOwner()[facei];
716 if (facei >= mesh_.nInternalFaces())
718 patchi = mesh_.boundaryMesh().whichPatch(facei);
722 nei = mesh_.faceNeighbour()[facei];
725 label zoneI = mesh_.faceZones().whichZone(facei);
726 bool zoneFlip =
false;
729 const faceZone& fz = mesh_.faceZones()[zoneI];
736 Pout<<
"face:" << facei <<
" verts:" << f
737 <<
" split into f0:" << f0
775 mesh_.updateMesh(map);
778 if (map().hasMotionPoints())
780 mesh_.movePoints(map().preMotionPoints());
790 setInstance(mesh_.facesInstance());
793 const labelList& oldToNew = map().reverseFaceMap();
800 label oldFacei = map().faceMap()[facei];
801 if (oldToNew[oldFacei] != facei)
804 newSplitFaces[sz++] = facei;
808 updateMesh(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(),
1200 updateIntersections(
identity(mesh_.nFaces()));
1213 forAll(surfaceIndex_, facei)
1215 if (surfaceIndex_[facei] >= 0 && isMasterFace.
get(facei) == 1)
1370 const bool keepZoneFaces,
1371 const bool keepBaffles,
1388 label nUnblocked = 0;
1402 specifiedProcessorFaces,
1408 if (keepZoneFaces || keepBaffles)
1430 const word& fzName = surfZones[surfI].faceZoneName();
1435 const faceZone& fZone = fZones[fzName];
1439 label facei = fZone[i];
1440 if (blockedFace[facei])
1444 mesh_.isInternalFace(facei)
1448 blockedFace[facei] =
false;
1471 Info<<
"Found " << nUnblocked
1472 <<
" zoned faces to keep together." <<
endl;
1478 boolList separatedCoupledFace(mesh_.nFaces(),
false);
1479 selectSeparatedCoupledFaces(separatedCoupledFace);
1481 label nSeparated = 0;
1482 forAll(separatedCoupledFace, facei)
1484 if (separatedCoupledFace[facei])
1486 if (blockedFace[facei])
1488 blockedFace[facei] =
false;
1494 Info<<
"Found " << nSeparated
1495 <<
" separated coupled faces to keep together." <<
endl;
1497 nUnblocked += nSeparated;
1503 label nBnd = mesh_.nFaces()-mesh_.nInternalFaces();
1505 labelList coupledFace(mesh_.nFaces(), -1);
1523 const labelPair& baffle = allCouples[i];
1531 forAll(coupledFace, facei)
1533 if (coupledFace[facei] != -1 && facei < coupledFace[facei])
1535 couples[nCpl++] =
labelPair(facei, coupledFace[facei]);
1544 Info<<
"Found " << nCouples <<
" baffles to keep together." 1599 blockedFace[baffle.
first()] =
false;
1600 blockedFace[baffle.
second()] =
false;
1608 specifiedProcessorFaces,
1616 Pout<<
"Wanted distribution:" << nProcCells <<
endl;
1621 Pout<<
"Wanted resulting decomposition:" <<
endl;
1622 forAll(nProcCells, proci)
1624 Pout<<
" " << proci <<
'\t' << nProcCells[proci] <<
endl;
1639 setInstance(mesh_.facesInstance());
1648 label nBoundaryFaces = 0;
1650 forAll(surfaceIndex_, facei)
1652 if (surfaceIndex_[facei] != -1)
1661 forAll(surfaceIndex_, facei)
1663 if (surfaceIndex_[facei] != -1)
1665 surfaceFaces[nBoundaryFaces++] = facei;
1668 return surfaceFaces;
1674 const faceList& faces = mesh_.faces();
1678 label nBoundaryPoints = 0;
1680 forAll(surfaceIndex_, facei)
1682 if (surfaceIndex_[facei] != -1)
1684 const face&
f = faces[facei];
1688 if (isBoundaryPoint.set(f[fp], 1u))
1725 labelList boundaryPoints(nBoundaryPoints);
1726 nBoundaryPoints = 0;
1727 forAll(isBoundaryPoint, pointi)
1729 if (isBoundaryPoint.get(pointi) == 1u)
1731 boundaryPoints[nBoundaryPoints++] = pointi;
1735 return boundaryPoints;
1752 const polyPatch& pp = patches[patchIDs[i]];
1754 nFaces += pp.size();
1763 const polyPatch& pp = patches[patchIDs[i]];
1769 addressing[nFaces++] = meshFacei++;
1795 pointPatches.
size(),
1796 slipPointPatchVectorField::typeName
1801 patchFieldTypes[adaptPatchIDs[i]] =
1802 fixedValuePointPatchVectorField::typeName;
1807 if (isA<processorPointPatch>(pointPatches[
patchi]))
1809 patchFieldTypes[
patchi] = calculatedPointPatchVectorField::typeName;
1811 else if (isA<cyclicPointPatch>(pointPatches[patchi]))
1813 patchFieldTypes[
patchi] = cyclicSlipPointPatchVectorField::typeName;
1823 "pointDisplacement",
1852 <<
"faceZones are not synchronised on processors." <<
nl 1853 <<
"Processor " << proci <<
" has faceZones " 1854 << zoneNames[proci] <<
nl 1856 <<
" has faceZones " 1870 const faceZone& fZone = fZones[zoneI];
1878 if (faceToZone[bFacei] == -1)
1880 faceToZone[bFacei] = zoneI;
1882 else if (faceToZone[bFacei] == zoneI)
1885 <<
"Face " << fZone[i] <<
" in zone " 1887 <<
" is twice in zone!" 1893 <<
"Face " << fZone[i] <<
" in zone " 1895 <<
" is also in zone " 1896 << fZones[faceToZone[bFacei]].
name()
1908 if (faceToZone[i] != neiFaceToZone[i])
1912 <<
" is in zone " << faceToZone[i]
1913 <<
", its coupled face is in zone " << neiFaceToZone[i]
1938 const edge&
e = edges[edgeI];
1944 pts[meshPoints[e[1]]]
1945 - pts[meshPoints[e[0]]]
1948 edgeWeights[edgeI] = 1.0/eMag;
1964 forAll(invSumWeight, pointi)
1966 scalar w = invSumWeight[pointi];
1970 invSumWeight[pointi] = 1.0/w;
1998 patchi = pbm.
size();
2003 if (isA<processorPolyPatch>(pp))
2011 patchDict.
set(
"nFaces", 0);
2012 patchDict.
set(
"startFace", 0);
2034 meshedPatches_.append(name);
2046 forAll(meshedPatches_, i)
2053 <<
"Problem : did not find patch " << meshedPatches_[i]
2054 <<
endl <<
"Valid patches are " << patches.
names()
2063 return move(patchIDs);
2074 if (isA<coupledPolyPatch>(patches[
patchi]))
2085 selected[cpp.
start()+i] =
true;
2097 const vector& perturbVec,
2105 regionI = cellToRegion[celli];
2112 celli = mesh.
findCell(p+perturbVec);
2115 regionI = cellToRegion[celli];
2127 const point& keepPoint
2131 (void)mesh_.tetBasePtIs();
2136 boolList blockedFace(mesh_.nFaces(),
false);
2137 selectSeparatedCoupledFaces(blockedFace);
2141 label regionI = findRegion
2145 mergeDistance_*
vector(1,1,1),
2152 <<
"Point " << keepPoint
2153 <<
" is not inside the mesh." <<
nl 2154 <<
"Bounding box of the mesh:" << mesh_.bounds()
2163 forAll(cellRegion, celli)
2165 if (cellRegion[celli] != regionI)
2167 cellsToRemove.
append(celli);
2170 cellsToRemove.shrink();
2172 label nCellsToKeep = mesh_.nCells() - cellsToRemove.
size();
2175 Info<<
"Keeping all cells in region " << regionI
2176 <<
" containing point " << keepPoint <<
endl 2177 <<
"Selected for keeping : " 2179 <<
" cells." <<
endl;
2197 label defaultPatch = 0;
2198 if (globalToMasterPatch.
size())
2200 defaultPatch = globalToMasterPatch[0];
2204 <<
"Removing non-reachable cells exposes " 2205 << nExposedFaces <<
" internal or coupled faces." << endl
2206 <<
" These get put into patch " << defaultPatch <<
endl;
2207 exposedPatch.setSize(exposedFaces.
size(), defaultPatch);
2210 return doRemoveCells
2227 meshCutter_.distribute(map);
2253 geometry[i].distribute
2261 if (faceMap.
valid())
2264 geometry[i].instance() = geometry[i].time().timeName();
2282 updateMesh(map, changedFaces, dummyMap, dummyMap, dummyMap);
2294 meshCutter_.storeData
2315 meshCutter_.updateMesh
2327 updateIntersections(changedFaces);
2334 if (userFaceData_[i].first() == KEEPALL)
2339 else if (userFaceData_[i].first() == MASTERONLY)
2344 forAll(newFaceData, facei)
2350 newFaceData[facei] = data[oldFacei];
2370 if (reverseFaceMap[oldFacei] != facei)
2373 reverseFaceMap[oldFacei] = -1;
2380 forAll(newFaceData, facei)
2386 if (reverseFaceMap[oldFacei] == facei)
2388 newFaceData[facei] = data[oldFacei];
2400 bool writeOk = mesh_.write();
2425 writeOk = writeOk && s.
write();
2442 forAll(meshPoints, pointi)
2458 forAll(meshPoints, pointi)
2462 isPatchMasterPoint[pointi] =
true;
2466 return isPatchMasterPoint;
2481 myEdges[edgeI] = globalEdges.toGlobal(edgeI);
2497 if (myEdges[edgeI] == globalEdges.toGlobal(edgeI))
2499 isMasterEdge[edgeI] =
true;
2503 return isMasterEdge;
2515 <<
" : cells(local):" << mesh_.nCells()
2516 <<
" faces(local):" << mesh_.nFaces()
2517 <<
" points(local):" << mesh_.nPoints()
2523 label nMasterFaces = 0;
2526 if (isMasterFace[i])
2533 label nMasterPoints = 0;
2534 forAll(isMeshMasterPoint, i)
2536 if (isMeshMasterPoint[i])
2552 const labelList& cellLevel = meshCutter_.cellLevel();
2558 nCells[cellLevel[celli]]++;
2564 Info<<
"Cells per refinement level:" <<
endl;
2567 Info<<
" " << levelI <<
'\t' << nCells[levelI]
2576 if (overwrite_ && mesh_.time().timeIndex() == 0)
2578 return oldInstance_;
2582 return mesh_.time().timeName();
2597 mesh_.time().timeName(),
2607 const labelList& cellLevel = meshCutter_.cellLevel();
2609 forAll(volRefLevel, celli)
2611 volRefLevel[celli] = cellLevel[celli];
2614 volRefLevel.write();
2626 mesh_.time().timeName(),
2636 const labelList& pointLevel = meshCutter_.pointLevel();
2638 forAll(pointRefLevel, pointi)
2640 pointRefLevel[pointi] = pointLevel[pointi];
2643 pointRefLevel.write();
2651 const pointField& cellCentres = mesh_.cellCentres();
2653 OFstream str(prefix +
"_edges.obj");
2655 Pout<<
"meshRefinement::dumpIntersections :" 2656 <<
" Writing cellcentre-cellcentre intersections to file " 2664 labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces());
2665 pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces());
2666 calcNeighbourData(neiLevel, neiCc);
2668 labelList intersectionFaces(intersectedFaces());
2674 forAll(intersectionFaces, i)
2676 label facei = intersectionFaces[i];
2677 start[i] = cellCentres[mesh_.faceOwner()[facei]];
2679 if (mesh_.isInternalFace(facei))
2681 end[i] = cellCentres[mesh_.faceNeighbour()[facei]];
2685 end[i] = neiCc[facei-mesh_.nInternalFaces()];
2691 const vectorField smallVec(rootSmall*(end-start));
2700 surfaces_.findAnyIntersection
2708 forAll(intersectionFaces, i)
2710 if (surfaceHit[i] != -1)
2718 str <<
"l " << vertI-2 <<
' ' << vertI-1 <<
nl 2719 <<
"l " << vertI-1 <<
' ' << vertI <<
nl;
2735 if (writeFlags & WRITEMESH)
2740 if (writeFlags && !(writeFlags & NOWRITEREFINEMENT))
2742 meshCutter_.write();
2743 surfaceIndex_.write();
2746 if (writeFlags & WRITELEVELS)
2748 dumpRefinementLevel();
2751 if (debugFlags & OBJINTERSECTIONS && prefix.size())
2753 dumpIntersections(prefix);
2766 writeLevel_ = flags;
2772 return outputLevel_;
2778 outputLevel_ = flags;
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 ...
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.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
const word & name() const
Return name.
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.
label countHits() const
Count number of intersections (local)
A list of keyword definitions, which are a keyword followed by any number of values (e...
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
label nInternalFaces() const
IOdebugType
Enumeration for what to debug.
static label findRegion(const polyMesh &, const labelList &cellRegion, const vector &perturbVec, const point &p)
Find region point is in. Uses optional perturbation to re-test.
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")
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.
label nTotalCells() const
Return total number of cells in decomposed mesh.
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').
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
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(...)
static word timeName(const scalar, const int precision=precision_)
Return time name of given scalar time.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
Vector< scalar > vector
A scalar version of the templated Vector.
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)
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
autoPtr< mapPolyMesh > splitMeshRegions(const labelList &globalToMasterPatch, const labelList &globalToSlavePatch, const point &keepPoint)
Split mesh. Keep part containing point.
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.
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.
void distribute(const mapDistributePolyMesh &)
Update local numbering for mesh redistribution.
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))
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.
void distributeFaceData(List< T > &lst) const
Distribute list of face data.
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.
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.
autoPtr< mapPolyMesh > splitFaces(const labelList &splitFaces, const labelPairList &splits)
Split faces into two.
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.
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.
autoPtr< mapDistributePolyMesh > balance(const bool keepZoneFaces, const bool keepBaffles, const scalarField &cellWeights, decompositionMethod &decomposer, fvMeshDistribute &distributor)
Redecompose according to cell count.
virtual const faceList & faces() const
Return raw faces.
Accumulating histogram of values. Specified bin resolution automatic generation of bins...
void updateMesh(const mapPolyMesh &)
Force recalculation of locally stored data on topological change.
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.
static pointMesh & New(polyMesh &mesh)
autoPtr< mapDistributePolyMesh > distribute(const labelList &dist)
Send cells to neighbours according to distribution.
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.
const labelList & faceMap() const
Old face map.
void updateMesh(const mapPolyMesh &, const labelList &changedFaces)
Update for external change to mesh. changedFaces are in new mesh.
const Type & second() const
Return second.
label size() const
Return the number of elements in the UPtrList.
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.
static bool & parRun()
Is this a parallel run?
const fileName & instance() const
static label nProcs(const label communicator=0)
Number of processes in parallel run.
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.
#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.
dimensioned< scalar > mag(const dimensioned< Type > &)
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.
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.
autoPtr< mapPolyMesh > 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.
bool write() const
Write mesh and all data.
meshRefinement(fvMesh &mesh, const scalar mergeDistance, const bool overwrite, const refinementSurfaces &, const refinementFeatures &, const refinementRegions &)
Construct from components.
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 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.
A List with indirect addressing.
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 labelList & reverseFaceMap() const
Reverse face map.
static const NamedEnum< IOwriteType, 5 > IOwriteTypeNames
const vectorField::subField faceCentres() const
Return face centres.