60 const labelList& eFaces = edgeFaces[edgei];
62 if (eFaces.size() == 2)
64 return (eFaces[0] != facei ? eFaces[0] : eFaces[1]);
73 void Foam::addPatchCellLayer::addVertex
86 if (
f[fp-1] != pointi &&
f[0] != pointi)
96 bool Foam::addPatchCellLayer::sameEdgeNeighbour
101 const label thisGlobalFacei,
102 const label nbrGlobalFacei,
106 const edge&
e = pp.edges()[edgei];
111 addedPoints_[
e[0]].size()
112 || addedPoints_[
e[1]].size()
115 nbrFace(globalEdgeFaces, edgei, thisGlobalFacei)
129 const label patchFacei,
130 const label globalFacei
133 const labelList& fEdges = pp.faceEdges()[patchFacei];
141 label edgei = fEdges[fp];
142 const edge&
e = pp.edges()[edgei];
147 && ( addedPoints_[
e[0]].size() || addedPoints_[
e[1]].size() )
159 label nbrGlobalFacei = nbrFace
166 if (nbrGlobalFacei == -1)
178 const label initFp = startFp;
181 label prevFp = fEdges.rcIndex(startFp);
183 if (prevFp == initFp)
185 const edge&
e = pp.edges()[fEdges[initFp]];
186 const face& localF = pp.localFaces()[patchFacei];
189 <<
"On face:" << patchFacei
190 <<
" fc:" << pp.faceCentres()[patchFacei]
191 <<
" vertices:" << localF
193 << UIndirectList<point>(pp.points(), pp[patchFacei])
194 <<
" edges:" << fEdges
195 <<
" All edges of face seem to have same neighbour "
197 <<
" starting walking from edge " <<
e
223 label nextFp = fEdges.fcIndex(endFp);
254 const label newPatchID,
257 const label inflateFacei,
259 const label ownFacei,
260 const label nbrFacei,
261 const label meshEdgei,
263 const label numEdgeFaces,
265 polyTopoChange& meshMod
270 label addedFacei = -1;
284 if (addedCells[ownFacei].size() < numEdgeFaces)
286 label offset = numEdgeFaces - addedCells[ownFacei].size();
287 if (layeri <= offset)
293 layerOwn = layeri - offset;
307 addedFacei = meshMod.setAction
312 addedCells[ownFacei][layerOwn],
334 if (addedCells[ownFacei].size() > addedCells[nbrFacei].size())
337 addedCells[ownFacei].size() - addedCells[nbrFacei].size();
341 if (layeri <= offset)
347 layerNbr = layeri - offset;
350 else if (addedCells[nbrFacei].size() > addedCells[ownFacei].size())
353 addedCells[nbrFacei].size() - addedCells[ownFacei].size();
357 if (layeri <= offset)
363 layerOwn = layeri - offset;
375 label inflateEdgei = -1;
380 if (mesh_.isInternalFace(meshFaces[i]))
383 inflateEdgei = meshEdgei;
390 addedFacei = meshMod.setAction
395 addedCells[ownFacei][layerOwn],
396 addedCells[nbrFacei][layerNbr],
419 const polyMesh&
mesh,
420 const label nbrProcID
431 refCast<const processorPolyPatch>(
patches[patchi]).neighbProcNo()
442 void Foam::addPatchCellLayer::setFaceProps
444 const polyMesh&
mesh,
462 void Foam::addPatchCellLayer::setFaceProps
464 const polyMesh&
mesh,
485 if (patchI != -1 || zoneI != -1)
487 inflateFaceI = faceI;
493 const edge& ppEdge = pp.edges()[ppEdgeI];
496 pp.meshPoints()[ppEdge[0]],
497 pp.meshPoints()[ppEdge[1]]
504 const edge
e(
f[fp],
f.nextLabel(fp));
514 zoneFlip = !zoneFlip;
523 <<
"Problem: cannot find patch edge " << ppEdgeI
524 <<
" with mesh vertices " << patchEdge
526 <<
" in face " << faceI <<
" with mesh vertices "
530 <<
"Continuing with potentially incorrect faceZone orientation"
538 void Foam::addPatchCellLayer::findZoneFace
540 const bool useInternalFaces,
541 const bool useBoundaryFaces,
543 const polyMesh&
mesh,
562 label faceI = meshFaces[
k];
566 !excludeFaces.found(faceI)
586 if (zoneI != -1 || patchI != -1)
598 Foam::addPatchCellLayer::addPatchCellLayer
605 addToMesh_(addToMesh),
621 forAll(layerFaces, patchFacei)
623 const labelList& faceLabels = layerFaces[patchFacei];
625 if (faceLabels.size())
627 labelList& added = layerCells[patchFacei];
628 added.
setSize(faceLabels.size()-1);
630 for (
label i = 0; i < faceLabels.size()-1; i++)
642 return addedCells(mesh_, layerFaces_);
665 label meshEdgeI = meshEdges[edgeI];
667 const labelList& eFaces = edgeFaces[edgeI];
670 labelList& globalEFaces = globalEdgeFaces[meshEdgeI];
671 globalEFaces.
setSize(eFaces.size());
674 globalEFaces[i] = globalFaces.
toGlobal(pp.addressing()[eFaces[i]]);
694 const bool zoneFromAnyFace,
747 forAll(globalEdgeFaces, edgei)
749 const labelList& eGlobalFaces = globalEdgeFaces[edgei];
752 eGlobalFaces.size() == 2
759 label f0 = eGlobalFaces[0];
760 label f1 = eGlobalFaces[1];
762 label otherProci = -1;
773 if (otherProci != -1)
787 if (nbrProcToPatch.found(otherProci))
789 edgePatchID[edgei] = nbrProcToPatch[otherProci];
794 nbrProcToPatch.insert(otherProci,
nPatches);
795 patchToNbrProc.insert(
nPatches, otherProci);
813 if (edgePatchID[edgei] == -1)
817 label meshEdgei = meshEdges[edgei];
824 if (edgeFaces[edgei].size() == 2)
830 label dummyPatchi = -1;
844 inflateFaceID[edgei],
867 inflateFaceID[edgei],
883 if (edgeFaces[edgei].size() == 1 && edgePatchID[edgei] == -1)
887 <<
"Have no sidePatchID for edge " << edgei <<
" points "
903 edgeFaces[edgei].size() == 1
904 && edgePatchID[edgei] != -1
905 && inflateFaceID[edgei] == -1
910 label myFaceI = pp.addressing()[edgeFaces[edgei][0]];
913 label meshEdgei = meshEdges[edgei];
922 label facei = meshFaces[
k];
963 bitSet sameEdgeOrientation;
978 label cppEdgei = coupledEdges[i];
979 label ppEdgei = patchEdges[i];
981 cppEdgeZoneID[cppEdgei] = edgeZoneID[ppEdgei];
982 if (sameEdgeOrientation[i])
984 cppEdgeFlip[cppEdgei] = edgeFlip[ppEdgei];
988 cppEdgeFlip[cppEdgei] = !edgeFlip[ppEdgei];
1020 label cppEdgei = coupledEdges[i];
1021 label ppEdgei = patchEdges[i];
1023 edgeZoneID[ppEdgei] = cppEdgeZoneID[cppEdgei];
1024 if (sameEdgeOrientation[i])
1026 edgeFlip[ppEdgei] = cppEdgeFlip[cppEdgei];
1030 edgeFlip[ppEdgei] = !cppEdgeFlip[cppEdgei];
1058 Pout<<
"addPatchCellLayer::setRefinement : Adding up to "
1059 <<
gMax(nPointLayers)
1060 <<
" layers of cells to indirectPrimitivePatch with "
1066 pp.
nPoints() != firstLayerDisp.size()
1067 || pp.
nPoints() != nPointLayers.size()
1068 || pp.size() != nFaceLayers.size()
1072 <<
"Size of new points is not same as number of points used by"
1073 <<
" the face subset" <<
endl
1074 <<
" patch.nPoints:" << pp.
nPoints()
1075 <<
" displacement:" << firstLayerDisp.size()
1076 <<
" nPointLayers:" << nPointLayers.size() <<
nl
1077 <<
" patch.nFaces:" << pp.size()
1078 <<
" nFaceLayers:" << nFaceLayers.size()
1084 if (nPointLayers[i] < 0)
1087 <<
"Illegal number of layers " << nPointLayers[i]
1093 if (nFaceLayers[i] < 0)
1096 <<
"Illegal number of layers " << nFaceLayers[i]
1101 forAll(globalEdgeFaces, edgei)
1103 if (globalEdgeFaces[edgei].size() > 2)
1107 if (nPointLayers[
e[0]] > 0 || nPointLayers[
e[1]] > 0)
1110 <<
"Trying to extrude edge "
1112 <<
" which is non-manifold (has "
1113 << globalEdgeFaces[edgei].size()
1114 <<
" local or coupled faces using it)"
1145 label meshPointi = meshPoints[i];
1147 if (
n[meshPointi] != nPointLayers[i])
1150 <<
"At mesh point:" << meshPointi
1151 <<
" coordinate:" << mesh_.points()[meshPointi]
1152 <<
" specified nLayers:" << nPointLayers[i] <<
endl
1153 <<
"On coupled point a different nLayers:"
1154 <<
n[meshPointi] <<
" was specified."
1165 const face&
f = pp[i];
1171 nFromFace[pointi] =
max(nFromFace[pointi], nFaceLayers[i]);
1184 label meshPointi = meshPoints[i];
1189 && nPointLayers[i] != nFromFace[meshPointi]
1193 <<
"At mesh point:" << meshPointi
1194 <<
" coordinate:" << mesh_.points()[meshPointi]
1195 <<
" specified nLayers:" << nPointLayers[i] <<
endl
1196 <<
"but the max nLayers of surrounding faces is:"
1197 << nFromFace[meshPointi]
1216 label meshPointi = meshPoints[i];
1218 if (
mag(d[meshPointi] - firstLayerDisp[i]) > SMALL)
1221 <<
"At mesh point:" << meshPointi
1222 <<
" coordinate:" << mesh_.points()[meshPointi]
1223 <<
" specified displacement:" << firstLayerDisp[i]
1225 <<
"On coupled point a different displacement:"
1226 << d[meshPointi] <<
" was specified."
1242 if (nPointLayers[
e[0]] > 0 || nPointLayers[
e[1]] > 0)
1249 if (eFaces.size() != 1)
1252 <<
"boundary-edge-to-be-extruded:"
1253 << pp.
points()[meshPoints[
e[0]]]
1254 << pp.
points()[meshPoints[
e[1]]]
1255 <<
" has more than two faces using it:" << eFaces
1259 label myFacei = pp.addressing()[eFaces[0]];
1261 label meshEdgei = meshEdges[edgei];
1264 const labelList& meshFaces = mesh_.edgeFaces(meshEdgei, ef);
1273 label facei = meshFaces[i];
1275 if (facei != myFacei)
1277 if (!mesh_.isInternalFace(facei))
1286 <<
"boundary-edge-to-be-extruded:"
1287 << pp.
points()[meshPoints[
e[0]]]
1288 << pp.
points()[meshPoints[
e[1]]]
1289 <<
" has more than two boundary faces"
1292 << mesh_.faceCentres()[bFacei]
1294 <<
" and " << facei <<
" fc:"
1295 << mesh_.faceCentres()[facei]
1314 label meshFacei = pp.addressing()[patchFacei];
1322 addedPoints_.setSize(pp.
nPoints());
1325 label nTruncated = 0;
1327 forAll(nPointLayers, patchPointi)
1329 if (nPointLayers[patchPointi] > 0)
1331 addedPoints_[patchPointi].setSize(nPointLayers[patchPointi]);
1341 Pout<<
"Not adding points at " << nTruncated <<
" out of "
1354 copiedPatchPoints.
setSize(firstLayerDisp.size());
1355 forAll(firstLayerDisp, patchPointi)
1357 if (addedPoints_[patchPointi].size())
1359 label meshPointi = meshPoints[patchPointi];
1360 label zoneI = mesh_.pointZones().whichZone(meshPointi);
1361 copiedPatchPoints[patchPointi] = meshMod.
setAction
1365 mesh_.points()[meshPointi],
1377 forAll(firstLayerDisp, patchPointi)
1379 if (addedPoints_[patchPointi].size())
1381 label meshPointi = meshPoints[patchPointi];
1383 label zoneI = mesh_.pointZones().whichZone(meshPointi);
1385 point pt = mesh_.points()[meshPointi];
1387 vector disp = firstLayerDisp[patchPointi];
1389 forAll(addedPoints_[patchPointi], i)
1398 (addToMesh_ ? meshPointi : -1),
1404 addedPoints_[patchPointi][i] = addedVertI;
1406 disp *= expansionRatio[patchPointi];
1420 if (nFaceLayers[patchFacei] > 0)
1422 addedCells[patchFacei].setSize(nFaceLayers[patchFacei]);
1424 label meshFacei = pp.addressing()[patchFacei];
1426 label ownZoneI = mesh_.cellZones().whichZone
1428 mesh_.faceOwner()[meshFacei]
1431 for (
label i = 0; i < nFaceLayers[patchFacei]; i++)
1435 addedCells[patchFacei][i] = meshMod.
setAction
1442 (addToMesh_ ? mesh_.faceOwner()[meshFacei] : -1),
1458 layerFaces_.setSize(pp.size());
1462 label meshFacei = pp.addressing()[patchFacei];
1464 if (addedCells[patchFacei].size())
1466 layerFaces_[patchFacei].setSize(addedCells[patchFacei].size() + 1);
1471 face newFace(
f.size());
1473 forAll(addedCells[patchFacei], i)
1477 if (addedPoints_[
f[fp]].empty())
1484 : copiedPatchPoints[
f[fp]]
1491 addedPoints_[
f[fp]].size()
1492 - addedCells[patchFacei].size();
1493 newFace[fp] = addedPoints_[
f[fp]][i+offset];
1505 if (i == addedCells[patchFacei].size()-1)
1510 zoneI = mesh_.faceZones().whichZone(meshFacei);
1513 const faceZone& fz = mesh_.faceZones()[zoneI];
1520 nei = addedCells[patchFacei][i+1];
1525 layerFaces_[patchFacei][i+1] = meshMod.
setAction
1530 addedCells[patchFacei][i],
1534 (addToMesh_ ? meshFacei : -1),
1553 if (addedCells[patchFacei].size())
1555 label meshFacei = pp.addressing()[patchFacei];
1557 layerFaces_[patchFacei][0] = meshFacei;
1565 mesh_.faceOwner()[meshFacei],
1566 addedCells[patchFacei][0],
1583 if (nFaceLayers[patchFacei] > 0)
1585 label meshFacei = pp.addressing()[patchFacei];
1586 label zoneI = mesh_.faceZones().whichZone(meshFacei);
1587 bool zoneFlip =
false;
1590 const faceZone& fz = mesh_.faceZones()[zoneI];
1598 f[fp] = copiedPatchPoints[
f[fp]];
1601 layerFaces_[patchFacei][0] = meshMod.
setAction
1606 addedCells[patchFacei][0],
1612 exposedPatchID[patchFacei],
1638 labelList meshEdgeLayers(mesh_.nEdges(), -1);
1642 const edge&
e = edges[edgei];
1644 label meshEdgei = meshEdges[edgei];
1646 if ((nPointLayers[
e[0]] == 0) && (nPointLayers[
e[1]] == 0))
1648 meshEdgeLayers[meshEdgei] = 0;
1656 meshEdgeLayers[meshEdgei] =
max
1658 nFaceLayers[eFaces[i]],
1659 meshEdgeLayers[meshEdgei]
1675 edgeLayers[edgei] = meshEdgeLayers[meshEdges[edgei]];
1688 const labelList& fEdges = faceEdges[patchFacei];
1702 globalFaces.
toGlobal(pp.addressing()[patchFacei])
1711 const label startFp = indexPair[0];
1712 const label endFp = indexPair[1];
1719 const face&
f = localFaces[patchFacei];
1722 if (endFp >= startFp)
1724 stringedVerts.
setSize(endFp-startFp+2);
1728 stringedVerts.
setSize(endFp+
f.size()-startFp+2);
1733 for (
label i = 0; i < stringedVerts.size()-1; i++)
1735 stringedVerts[i] =
f[fp];
1736 doneEdge[fEdges[fp]] =
true;
1739 stringedVerts.last() =
f[fp];
1749 label startEdgei = fEdges[startFp];
1751 label meshEdgei = meshEdges[startEdgei];
1753 label numEdgeSideFaces = edgeLayers[startEdgei];
1755 for (
label i = 0; i < numEdgeSideFaces; i++)
1757 label vEnd = stringedVerts.last();
1758 label vStart = stringedVerts[0];
1761 label newFp = 2*stringedVerts.size();
1767 if (addedPoints_[vEnd].size())
1770 addedPoints_[vEnd].size() - numEdgeSideFaces;
1772 if (addedPoints_[vStart].size())
1775 addedPoints_[vStart].size() - numEdgeSideFaces;
1779 face newFace(newFp);
1787 forAll(stringedVerts, stringedI)
1789 label v = stringedVerts[stringedI];
1795 : copiedPatchPoints[v]
1804 forAll(stringedVerts, stringedI)
1806 label v = stringedVerts[stringedI];
1807 if (addedPoints_[v].size())
1810 addedPoints_[v].size() - numEdgeSideFaces;
1813 addedPoints_[v][i+offset-1],
1825 : copiedPatchPoints[v]
1835 if (numEdgeSideFaces < addedPoints_[vEnd].size())
1837 if (i == 0 && addedPoints_[vEnd].size())
1840 addedPoints_[vEnd].size() - numEdgeSideFaces;
1841 for (
label ioff = 0; ioff < offset; ioff++)
1845 addedPoints_[vEnd][ioff],
1855 label v = stringedVerts[stringedI];
1856 if (addedPoints_[v].size())
1859 addedPoints_[v].size() - numEdgeSideFaces;
1862 addedPoints_[v][i+offset],
1874 : copiedPatchPoints[v]
1884 if (numEdgeSideFaces < addedPoints_[vStart].size())
1886 if (i == 0 && addedPoints_[vStart].size())
1889 addedPoints_[vStart].size() - numEdgeSideFaces;
1890 for (
label ioff = offset-1; ioff >= 0; ioff--)
1894 addedPoints_[vStart][ioff],
1914 if (!verts.insert(newFace[fp]))
1917 <<
"Duplicate vertex in face"
1918 <<
" to be added." <<
nl
1919 <<
"newFace:" << newFace <<
nl
1927 <<
" out of:" << numEdgeSideFaces <<
nl
1928 <<
"ExtrudeEdge:" << meshEdgei
1930 << mesh_.edges()[meshEdgei].line
1934 <<
"string:" << stringedVerts
1952 label nbrFacei = nbrFace
1959 const labelList& meshFaces = mesh_.edgeFaces
1968 bool zoneFlip =
false;
1969 if (edgeZoneID[startEdgei] != -1)
1971 zoneFlip = !edgeFlip[startEdgei];
1980 edgePatchID[startEdgei],
1981 edgeZoneID[startEdgei],
1983 inflateFaceID[startEdgei],
2015 const labelList& added = addedPoints_[oldPointi];
2018 newAdded.
setSize(added.size());
2032 addedPoints_.transfer(newAddedPoints);
2038 forAll(newLayerFaces, newFacei)
2042 const labelList& added = layerFaces_[oldFacei];
2044 labelList& newAdded = newLayerFaces[newFacei];
2045 newAdded.
setSize(added.size());
2054 newAdded[newI++] = newFacei;
2059 layerFaces_.transfer(newLayerFaces);