66 void Foam::createShellMesh::syncEdges
68 const globalMeshData& globalData,
72 const bitSet& sameEdgeOrientation,
73 const bool syncNonCollocated,
75 bitSet& isChangedEdge,
76 DynamicList<label>& changedEdges,
80 const mapDistribute& map = globalData.globalEdgeSlavesMap();
81 const bitSet& cppOrientation = globalData.globalEdgeOrientation();
92 label patchEdgeI = patchEdges[i];
93 label coupledEdgeI = coupledEdges[i];
95 if (isChangedEdge[patchEdgeI])
97 const labelPair& data = allEdgeData[patchEdgeI];
102 if (sameEdgeOrientation[i] == cppOrientation[coupledEdgeI])
104 cppEdgeData[coupledEdgeI] = data;
108 cppEdgeData[coupledEdgeI] =
labelPair(data[1], data[0]);
117 globalData.globalEdgeSlaves(),
120 ? globalData.globalEdgeTransformedSlaves()
130 label patchEdgeI = patchEdges[i];
131 label coupledEdgeI = coupledEdges[i];
135 const labelPair& data = cppEdgeData[coupledEdgeI];
137 if (sameEdgeOrientation[i] == cppOrientation[coupledEdgeI])
139 allEdgeData[patchEdgeI] = data;
143 allEdgeData[patchEdgeI] =
labelPair(data[1], data[0]);
146 if (!isChangedEdge[patchEdgeI])
148 changedEdges.append(patchEdgeI);
149 isChangedEdge.set(patchEdgeI);
160 const bitSet& nonManifoldEdge,
161 const bool syncNonCollocated,
173 bitSet sameEdgeOrientation;
190 label nMaxRegions = 0;
194 nMaxRegions +=
f.size();
203 forAll(pointGlobalRegions, facei)
206 labelList& pRegions = pointGlobalRegions[facei];
210 pRegions[fp] = globalRegions.
toGlobal(nRegions++);
225 if (!nonManifoldEdge[edgeI])
229 label facei =
patch.edgeFaces()[edgeI][0];
232 label fp0 =
f.find(
e[0]);
233 label fp1 =
f.find(
e[1]);
236 pointGlobalRegions[facei][fp0],
237 pointGlobalRegions[facei][fp1]
239 if (!isChangedEdge[edgeI])
241 changedEdges.append(edgeI);
242 isChangedEdge.set(edgeI);
275 forAll(changedEdges, changedI)
277 label edgeI = changedEdges[changedI];
278 const labelPair& edgeData = allEdgeData[edgeI];
285 label facei = eFaces[i];
289 label fp0 =
f.find(
e[0]);
290 if (pointGlobalRegions[facei][fp0] > edgeData[0])
292 pointGlobalRegions[facei][fp0] = edgeData[0];
293 if (!isChangedFace[facei])
295 isChangedFace.set(facei);
296 changedFaces.append(facei);
300 label fp1 =
f.find(
e[1]);
301 if (pointGlobalRegions[facei][fp1] > edgeData[1])
303 pointGlobalRegions[facei][fp1] = edgeData[1];
304 if (!isChangedFace[facei])
306 isChangedFace.set(facei);
307 changedFaces.append(facei);
315 if (nChangedFaces == 0)
324 isChangedEdge =
false;
325 changedEdges.clear();
329 label facei = changedFaces[i];
335 label edgeI = fEdges[fp];
337 if (!nonManifoldEdge[edgeI])
340 label fp0 =
f.find(
e[0]);
341 label region0 = pointGlobalRegions[facei][fp0];
342 label fp1 =
f.find(
e[1]);
343 label region1 = pointGlobalRegions[facei][fp1];
347 (allEdgeData[edgeI][0] > region0)
348 || (allEdgeData[edgeI][1] > region1)
351 allEdgeData[edgeI] =
labelPair(region0, region1);
352 if (!isChangedEdge[edgeI])
354 changedEdges.append(edgeI);
355 isChangedEdge.set(edgeI);
378 if (nChangedEdges == 0)
396 face& pRegions = pointLocalRegions[facei];
400 label globalRegionI = pointGlobalRegions[facei][fp];
402 const auto fnd = globalToLocalRegion.cfind(globalRegionI);
407 pRegions[fp] = fnd();
412 label localRegionI = globalToLocalRegion.size();
413 pRegions[fp] = localRegionI;
414 globalToLocalRegion.insert(globalRegionI, localRegionI);
415 dynLocalToGlobalRegion.
append(globalRegionI);
419 localToGlobalRegion.
transfer(dynLocalToGlobalRegion);
425 Foam::createShellMesh::createShellMesh
433 pointRegions_(pointRegions),
434 regionPoints_(regionPoints)
436 if (pointRegions_.size() != patch_.size())
439 <<
"nFaces:" << patch_.size()
440 <<
" pointRegions:" << pointRegions.size()
451 const scalar expansionRatio,
459 if (firstLayerDisp.size() != regionPoints_.size())
462 <<
"nRegions:" << regionPoints_.size()
463 <<
" firstLayerDisp:" << firstLayerDisp.size()
469 topPatchID.size() != patch_.size()
470 && bottomPatchID.size() != patch_.size()
474 <<
"nFaces:" << patch_.size()
475 <<
" topPatchID:" << topPatchID.size()
476 <<
" bottomPatchID:" << bottomPatchID.size()
480 if (extrudeEdgePatches.size() != patch_.nEdges())
483 <<
"nEdges:" << patch_.nEdges()
484 <<
" extrudeEdgePatches:" << extrudeEdgePatches.size()
495 (nLayers+1)*(patch_.size()+patch_.nEdges())
506 labelList addedCells(nLayers*patch_.size());
509 for (label layerI = 0; layerI < nLayers; layerI++)
511 addedCells[nLayers*facei+layerI] = meshMod.
addCell
516 cellToFaceMap.size(),
519 cellToFaceMap.append(facei);
528 forAll(patch_.localPoints(), pointi)
533 patch_.localPoints()[pointi],
534 pointToPointMap.size(),
538 pointToPointMap.append(pointi);
550 labelList addedPoints(nLayers*regionPoints_.size());
551 forAll(regionPoints_, regionI)
553 label pointi = regionPoints_[regionI];
555 point pt = patch_.localPoints()[pointi];
556 point disp = firstLayerDisp[regionI];
557 for (label layerI = 0; layerI < nLayers; layerI++)
561 addedPoints[nLayers*regionI+layerI] = meshMod.
addPoint
564 pointToPointMap.
size(),
568 pointToPointMap.append(pointi);
570 disp *= expansionRatio;
576 forAll(patch_.localFaces(), facei)
580 patch_.localFaces()[facei].reverseFace(),
581 addedCells[nLayers*facei],
585 faceToFaceMap.size(),
587 bottomPatchID[facei],
591 faceToFaceMap.
append(-facei-1);
605 forAll(patch_.localFaces(), facei)
608 const face&
f = patch_.localFaces()[facei];
612 for (label layerI = 0; layerI < nLayers; layerI++)
617 label region = pointRegions_[facei][fp];
618 newF[fp] = addedPoints[region*nLayers+layerI];
621 label own = addedCells[facei*nLayers+layerI];
624 if (layerI == nLayers-1)
627 patchi = topPatchID[facei];
631 nei = addedCells[facei*nLayers+layerI+1];
642 faceToFaceMap.size(),
648 faceToFaceMap.
append(facei+1);
668 forAll(extrudeEdgePatches, edgeI)
670 const labelList& eFaces = patch_.edgeFaces()[edgeI];
671 const labelList& ePatches = extrudeEdgePatches[edgeI];
673 if (ePatches.size() == 0)
676 if (eFaces.size() != 2)
680 <<
" not internal but does not have side-patches defined."
686 if (eFaces.size() != ePatches.size())
689 <<
"external/feature edge:" << edgeI
690 <<
" has " << eFaces.size() <<
" connected extruded faces "
691 <<
" but only " << ePatches.size()
699 const face&
f = patch_.localFaces()[eFaces[0]];
700 const edge&
e = patch_.edges()[edgeI];
702 label fp0 =
f.find(
e[0]);
703 label fp1 =
f.fcIndex(fp0);
708 fp0 =
f.rcIndex(fp1);
713 for (label layerI = 0; layerI < nLayers; layerI++)
715 label region0 = pointRegions_[eFaces[0]][fp0];
716 label region1 = pointRegions_[eFaces[0]][fp1];
723 newF[2] = addedPoints[nLayers*region1+layerI];
724 newF[3] = addedPoints[nLayers*region0+layerI];
728 newF[0] = addedPoints[nLayers*region0+layerI-1];
729 newF[1] = addedPoints[nLayers*region1+layerI-1];
730 newF[2] = addedPoints[nLayers*region1+layerI];
731 newF[3] = addedPoints[nLayers*region0+layerI];
742 for (label i = 0; i < newF.size()-1; i++)
744 newF[i] = newF[newF.fcIndex(i)];
750 label minCelli = addedCells[nLayers*eFaces[0]+layerI];
753 if (ePatches.size() == 0)
755 maxCelli = addedCells[nLayers*eFaces[1]+layerI];
756 if (minCelli > maxCelli)
759 std::swap(minCelli, maxCelli);
767 patchi = ePatches[0];
793 faceToFaceMap.size(),
800 faceToEdgeMap.
append(edgeI);
805 forAll(extrudeEdgePatches, edgeI)
807 const labelList& eFaces = patch_.edgeFaces()[edgeI];
808 const labelList& ePatches = extrudeEdgePatches[edgeI];
810 if (ePatches.size() >= 2)
812 for (label i = 1; i < ePatches.size(); i++)
815 label minFacei = eFaces[i];
818 const face&
f = patch_.localFaces()[minFacei];
820 const edge&
e = patch_.edges()[edgeI];
821 label fp0 =
f.find(
e[0]);
822 label fp1 =
f.fcIndex(fp0);
827 fp0 =
f.rcIndex(fp1);
831 for (label layerI = 0; layerI < nLayers; layerI++)
833 label region0 = pointRegions_[minFacei][fp0];
834 label region1 = pointRegions_[minFacei][fp1];
840 newF[2] = addedPoints[nLayers*region1+layerI];
841 newF[3] = addedPoints[nLayers*region0+layerI];
845 newF[0] = addedPoints[nLayers*region0+layerI-1];
846 newF[1] = addedPoints[nLayers*region1+layerI-1];
847 newF[2] = addedPoints[nLayers*region1+layerI];
848 newF[3] = addedPoints[nLayers*region0+layerI];
860 for (label i = 0; i < newF.size()-1; i++)
862 newF[i] = newF[newF.fcIndex(i)];
884 addedCells[nLayers*minFacei+layerI],
888 faceToFaceMap.size(),
895 faceToEdgeMap.
append(edgeI);
902 cellToFaceMap_.transfer(cellToFaceMap);
903 faceToFaceMap_.transfer(faceToFaceMap);
904 faceToEdgeMap_.transfer(faceToEdgeMap);
905 pointToPointMap_.transfer(pointToPointMap);