50 const globalIndex& globalFaces,
84 label meshEdgeI = meshEdges[edgeI];
88 const labelList& eFaces = edgeFaces[edgeI];
91 labelList& globalEFaces = globalEdgeFaces[meshEdgeI];
92 globalEFaces.
setSize(eFaces.size());
96 globalFaces.toGlobal(pp.addressing()[eFaces[i]]);
112 return UIndirectList<labelList>(globalEdgeFaces, meshEdges);
116 Foam::label Foam::addPatchCellLayer::nbrFace
123 const labelList& eFaces = edgeFaces[edgeI];
125 if (eFaces.size() == 2)
127 return (eFaces[0] != faceI ? eFaces[0] : eFaces[1]);
136 void Foam::addPatchCellLayer::addVertex
149 if (f[fp-1] != pointI && f[0] != pointI)
159 for (label i = 0; i < fp; i++)
170 "addPatchCellLayer::addVertex(const label, face&"
172 ) <<
"Point " << pointI <<
" already present in face "
183 bool Foam::addPatchCellLayer::sameEdgeNeighbour
188 const label thisGlobalFaceI,
189 const label nbrGlobalFaceI,
193 const edge&
e = pp.edges()[edgeI];
198 addedPoints_[e[0]].size()
199 || addedPoints_[e[1]].size()
202 nbrFace(globalEdgeFaces, edgeI, thisGlobalFaceI)
216 const label patchFaceI,
217 const label globalFaceI
220 const labelList& fEdges = pp.faceEdges()[patchFaceI];
228 label edgeI = fEdges[fp];
229 const edge& e = pp.edges()[edgeI];
234 && ( addedPoints_[e[0]].size() || addedPoints_[e[1]].size() )
246 label nbrGlobalFaceI = nbrFace
253 if (nbrGlobalFaceI == -1)
266 label prevFp = fEdges.rcIndex(startFp);
290 label nextFp = fEdges.fcIndex(endFp);
317 Foam::label Foam::addPatchCellLayer::addSideFace
323 const label ownFaceI,
324 const label nbrFaceI,
325 const label patchEdgeI,
326 const label meshEdgeI,
328 const label numEdgeFaces,
330 polyTopoChange& meshMod
334 label inflateEdgeI = -1;
339 if (mesh_.isInternalFace(meshFaces[i]))
342 inflateEdgeI = meshEdgeI;
349 label meshFaceI = pp.addressing()[ownFaceI];
355 label addedFaceI = -1;
363 const polyBoundaryMesh&
patches = mesh_.boundaryMesh();
367 label otherPatchID = patchID[ownFaceI];
371 label faceI = meshFaces[
k];
376 && !mesh_.isInternalFace(faceI)
379 otherPatchID = patches.whichPatch(faceI);
380 zoneI = mesh_.faceZones().whichZone(faceI);
383 label index = mesh_.faceZones()[zoneI].whichFace(faceI);
384 flip = mesh_.faceZones()[zoneI].flipMap()[index];
396 if (addedCells[ownFaceI].size() < numEdgeFaces)
398 label offset = numEdgeFaces - addedCells[ownFaceI].size();
399 if (layerI <= offset)
405 layerOwn = layerI - offset;
419 addedFaceI = meshMod.setAction
424 addedCells[ownFaceI][layerOwn],
446 if (addedCells[ownFaceI].size() > addedCells[nbrFaceI].size())
449 addedCells[ownFaceI].size() - addedCells[nbrFaceI].size();
453 if (layerI <= offset)
459 layerNbr = layerI - offset;
462 else if (addedCells[nbrFaceI].size() > addedCells[ownFaceI].size())
465 addedCells[nbrFaceI].size() - addedCells[ownFaceI].size();
469 if (layerI <= offset)
475 layerOwn = layerI - offset;
485 addedFaceI = meshMod.setAction
490 addedCells[ownFaceI][layerOwn],
491 addedCells[nbrFaceI][layerNbr],
515 Foam::addPatchCellLayer::addPatchCellLayer(
const polyMesh& mesh)
533 forAll(layerFaces, patchFaceI)
535 const labelList& faceLabels = layerFaces[patchFaceI];
537 if (faceLabels.
size())
539 labelList& added = layerCells[patchFaceI];
542 for (label i = 0; i < faceLabels.
size()-1; i++)
554 return addedCells(mesh_, layerFaces_);
570 Pout<<
"addPatchCellLayer::setRefinement : Adding up to "
572 <<
" layers of cells to indirectPrimitivePatch with "
580 || pp.size() != nFaceLayers.
size()
585 "addPatchCellLayer::setRefinement"
586 "(const scalar, const indirectPrimitivePatch&"
587 ", const labelList&, const vectorField&, polyTopoChange&)"
588 ) <<
"Size of new points is not same as number of points used by"
589 <<
" the face subset" <<
endl
590 <<
" patch.nPoints:" << pp.
nPoints()
591 <<
" displacement:" << firstLayerDisp.
size()
592 <<
" nPointLayers:" << nPointLayers.
size() <<
nl
593 <<
" patch.nFaces:" << pp.size()
594 <<
" nFaceLayers:" << nFaceLayers.
size()
600 if (nPointLayers[i] < 0)
604 "addPatchCellLayer::setRefinement"
605 "(const scalar, const indirectPrimitivePatch&"
606 ", const labelList&, const vectorField&, polyTopoChange&)"
607 ) <<
"Illegal number of layers " << nPointLayers[i]
613 if (nFaceLayers[i] < 0)
617 "addPatchCellLayer::setRefinement"
618 "(const scalar, const indirectPrimitivePatch&"
619 ", const labelList&, const vectorField&, polyTopoChange&)"
620 ) <<
"Illegal number of layers " << nFaceLayers[i]
631 labelList meshEdges(calcMeshEdges(mesh_, pp));
646 label meshPointI = meshPoints[i];
648 if (n[meshPointI] != nPointLayers[i])
652 "addPatchCellLayer::setRefinement"
653 "(const scalar, const indirectPrimitivePatch&"
654 ", const labelList&, const vectorField&"
656 ) <<
"At mesh point:" << meshPointI
657 <<
" coordinate:" << mesh_.points()[meshPointI]
658 <<
" specified nLayers:" << nPointLayers[i] <<
endl
659 <<
"On coupled point a different nLayers:"
660 << n[meshPointI] <<
" was specified."
671 const face& f = pp[i];
675 label pointI = f[fp];
677 nFromFace[pointI] =
max(nFromFace[pointI], nFaceLayers[i]);
691 label meshPointI = meshPoints[i];
696 && nPointLayers[i] != nFromFace[meshPointI]
701 "addPatchCellLayer::setRefinement"
702 "(const scalar, const indirectPrimitivePatch&"
703 ", const labelList&, const vectorField&"
705 ) <<
"At mesh point:" << meshPointI
706 <<
" coordinate:" << mesh_.points()[meshPointI]
707 <<
" specified nLayers:" << nPointLayers[i] <<
endl
708 <<
"but the max nLayers of surrounding faces is:"
709 << nFromFace[meshPointI]
729 label meshPointI = meshPoints[i];
731 if (
mag(d[meshPointI] - firstLayerDisp[i]) > SMALL)
735 "addPatchCellLayer::setRefinement"
736 "(const scalar, const indirectPrimitivePatch&"
737 ", const labelList&, const vectorField&"
739 ) <<
"At mesh point:" << meshPointI
740 <<
" coordinate:" << mesh_.points()[meshPointI]
741 <<
" specified displacement:" << firstLayerDisp[i]
743 <<
"On coupled point a different displacement:"
744 << d[meshPointI] <<
" was specified."
760 if (nPointLayers[e[0]] > 0 || nPointLayers[e[1]] > 0)
767 if (eFaces.
size() != 1)
771 "addPatchCellLayer::setRefinement"
772 "(const scalar, const indirectPrimitivePatch&"
773 ", const labelList&, const vectorField&"
775 ) <<
"boundary-edge-to-be-extruded:"
776 << pp.
points()[meshPoints[e[0]]]
777 << pp.
points()[meshPoints[e[1]]]
778 <<
" has more than two faces using it:" << eFaces
782 label myFaceI = pp.addressing()[eFaces[0]];
784 label meshEdgeI = meshEdges[edgeI];
789 const labelList& meshFaces = mesh_.edgeFaces(meshEdgeI, ef);
798 label faceI = meshFaces[i];
800 if (faceI != myFaceI)
802 if (!mesh_.isInternalFace(faceI))
812 "addPatchCellLayer::setRefinement"
814 ", const indirectPrimitivePatch&"
815 ", const labelList&, const vectorField&"
817 ) <<
"boundary-edge-to-be-extruded:"
818 << pp.
points()[meshPoints[e[0]]]
819 << pp.
points()[meshPoints[e[1]]]
820 <<
" has more than two boundary faces"
823 << mesh_.faceCentres()[bFaceI]
825 <<
" and " << faceI <<
" fc:"
826 << mesh_.faceCentres()[faceI]
840 addedPoints_.setSize(pp.
nPoints());
843 label nTruncated = 0;
845 forAll(nPointLayers, patchPointI)
847 if (nPointLayers[patchPointI] > 0)
849 addedPoints_[patchPointI].setSize(nPointLayers[patchPointI]);
859 Pout<<
"Not adding points at " << nTruncated <<
" out of "
868 forAll(firstLayerDisp, patchPointI)
870 if (addedPoints_[patchPointI].size())
872 label meshPointI = meshPoints[patchPointI];
874 label zoneI = mesh_.pointZones().whichZone(meshPointI);
876 point pt = mesh_.points()[meshPointI];
878 vector disp = firstLayerDisp[patchPointI];
880 for (label i = 0; i < addedPoints_[patchPointI].size(); i++)
895 addedPoints_[patchPointI][i] = addedVertI;
897 disp *= expansionRatio[patchPointI];
911 if (nFaceLayers[patchFaceI] > 0)
913 addedCells[patchFaceI].setSize(nFaceLayers[patchFaceI]);
915 label meshFaceI = pp.addressing()[patchFaceI];
917 label ownZoneI = mesh_.cellZones().whichZone
919 mesh_.faceOwner()[meshFaceI]
922 for (label i = 0; i < nFaceLayers[patchFaceI]; i++)
926 addedCells[patchFaceI][i] = meshMod.
setAction
933 mesh_.faceOwner()[meshFaceI],
955 label meshFaceI = pp.addressing()[patchFaceI];
957 patchID[patchFaceI] = patches.
whichPatch(meshFaceI);
967 layerFaces_.setSize(pp.size());
971 label meshFaceI = pp.addressing()[patchFaceI];
973 if (addedCells[patchFaceI].size())
975 layerFaces_[patchFaceI].setSize(addedCells[patchFaceI].size() + 1);
976 layerFaces_[patchFaceI][0] = meshFaceI;
983 for (label i = 0; i < addedCells[patchFaceI].size(); i++)
987 if (addedPoints_[f[fp]].empty())
990 newFace[fp] = meshPoints[f[fp]];
996 addedPoints_[f[fp]].
size()
997 - addedCells[patchFaceI].size();
998 newFace[fp] = addedPoints_[f[fp]][i+offset];
1010 if (i == addedCells[patchFaceI].size()-1)
1014 patchI = patchID[patchFaceI];
1015 zoneI = mesh_.faceZones().whichZone(meshFaceI);
1018 const faceZone& fz = mesh_.faceZones()[zoneI];
1025 nei = addedCells[patchFaceI][i+1];
1030 layerFaces_[patchFaceI][i+1] = meshMod.
setAction
1035 addedCells[patchFaceI][i],
1060 if (addedCells[patchFaceI].size())
1062 label meshFaceI = pp.addressing()[patchFaceI];
1070 mesh_.faceOwner()[meshFaceI],
1071 addedCells[patchFaceI][0],
1102 labelList meshEdgeLayers(mesh_.nEdges(), -1);
1106 const edge& e = edges[edgeI];
1108 label meshEdgeI = meshEdges[edgeI];
1110 if ((nPointLayers[e[0]] == 0) && (nPointLayers[e[1]] == 0))
1112 meshEdgeLayers[meshEdgeI] = 0;
1120 meshEdgeLayers[meshEdgeI] =
max
1122 nFaceLayers[eFaces[i]],
1123 meshEdgeLayers[meshEdgeI]
1140 edgeLayers[edgeI] = meshEdgeLayers[meshEdges[edgeI]];
1169 const labelList& fEdges = faceEdges[patchFaceI];
1183 globalFaces.toGlobal(pp.addressing()[patchFaceI])
1192 const label startFp = indexPair[0];
1193 const label endFp = indexPair[1];
1200 const face& f = localFaces[patchFaceI];
1203 if (endFp >= startFp)
1205 stringedVerts.
setSize(endFp-startFp+2);
1214 for (label i = 0; i < stringedVerts.
size()-1; i++)
1216 stringedVerts[i] = f[fp];
1217 doneEdge[fEdges[fp]] =
true;
1220 stringedVerts[stringedVerts.
size()-1] = f[fp];
1230 label startEdgeI = fEdges[startFp];
1232 label meshEdgeI = meshEdges[startEdgeI];
1234 label numEdgeSideFaces = edgeLayers[startEdgeI];
1236 for (label i = 0; i < numEdgeSideFaces; i++)
1238 label vEnd = stringedVerts[stringedVerts.
size()-1];
1239 label vStart = stringedVerts[0];
1242 label newFp = 2*stringedVerts.
size();
1248 if (addedPoints_[vEnd].size())
1251 addedPoints_[vEnd].size() - numEdgeSideFaces;
1253 if (addedPoints_[vStart].size())
1256 addedPoints_[vStart].size() - numEdgeSideFaces;
1260 face newFace(newFp);
1268 forAll(stringedVerts, stringedI)
1270 label v = stringedVerts[stringedI];
1271 addVertex(meshPoints[v], newFace, newFp);
1276 forAll(stringedVerts, stringedI)
1278 label v = stringedVerts[stringedI];
1279 if (addedPoints_[v].size())
1282 addedPoints_[v].
size() - numEdgeSideFaces;
1285 addedPoints_[v][i+offset-1],
1292 addVertex(meshPoints[v], newFace, newFp);
1298 if (numEdgeSideFaces < addedPoints_[vEnd].size())
1300 if (i == 0 && addedPoints_[vEnd].size())
1303 addedPoints_[vEnd].size() - numEdgeSideFaces;
1304 for (label ioff = 0; ioff < offset; ioff++)
1308 addedPoints_[vEnd][ioff],
1318 label v = stringedVerts[stringedI];
1319 if (addedPoints_[v].size())
1322 addedPoints_[v].
size() - numEdgeSideFaces;
1325 addedPoints_[v][i+offset],
1332 addVertex(meshPoints[v], newFace, newFp);
1338 if (numEdgeSideFaces < addedPoints_[vStart].size())
1340 if (i == 0 && addedPoints_[vStart].size())
1343 addedPoints_[vStart].size() - numEdgeSideFaces;
1344 for (label ioff = offset; ioff > 0; ioff--)
1348 addedPoints_[vStart][ioff-1],
1363 label nbrFaceI = nbrFace
1370 const labelList& meshFaces = mesh_.edgeFaces
1409 forAll(newAddedPoints, newPointI)
1411 label oldPointI = pointMap[newPointI];
1413 const labelList& added = addedPoints_[oldPointI];
1415 labelList& newAdded = newAddedPoints[newPointI];
1425 newAdded[newI++] = newPointI;
1430 addedPoints_.transfer(newAddedPoints);
1436 forAll(newLayerFaces, newFaceI)
1438 label oldFaceI = faceMap[newFaceI];
1440 const labelList& added = layerFaces_[oldFaceI];
1442 labelList& newAdded = newLayerFaces[newFaceI];
1452 newAdded[newI++] = newFaceI;
1457 layerFaces_.transfer(newLayerFaces);
1470 forAll(meshEdges, patchEdgeI)