50 template<
class T,
template<
class>
class CombineOp>
69 CombineOp<T>()(
x[i],
y[j]);
82 void Foam::removePoints::modifyFace
86 polyTopoChange& meshMod
105 bool zoneFlip =
false;
111 zoneFlip = fZone.flipMap()[fZone.whichFace(facei)];
134 Foam::removePoints::removePoints
160 const edgeList& edges = mesh_.edges();
164 const edge&
e = edges[edgeI];
168 label pointi =
e[eI];
170 if (edge0[pointi] == -2)
174 else if (edge0[pointi] == -1)
177 edge0[pointi] = edgeI;
183 if (edge1[pointi] == -1)
186 edge1[pointi] = edgeI;
202 pointCanBeDeleted.
setSize(mesh_.nPoints());
203 pointCanBeDeleted =
false;
208 if (edge0[pointi] >= 0 && edge1[pointi] >= 0)
212 const edge& e0 = edges[edge0[pointi]];
213 const edge& e1 = edges[edge1[pointi]];
222 if ((e0Vec & e1Vec) > minCos)
224 pointCanBeDeleted[pointi] =
true;
228 else if (edge0[pointi] == -1)
231 pointCanBeDeleted[pointi] =
true;
241 forAll(mesh_.faces(), facei)
243 const face&
f = mesh_.faces()[facei];
248 if (pointCanBeDeleted[
f[fp]])
254 if ((
f.size() - nCollapse) < 3)
259 if (pointCanBeDeleted[
f[fp]])
261 pointCanBeDeleted[
f[fp]] =
false;
283 forAll(pointCanBeDeleted, pointi)
285 if (pointCanBeDeleted[pointi])
303 forAll(pointCanBeDeleted, pointi)
305 if (pointCanBeDeleted[pointi])
322 savedPoints_.setSize(nDeleted);
323 pointToSaved.resize(2*nDeleted);
332 forAll(pointCanBeDeleted, pointi)
334 if (pointCanBeDeleted[pointi])
338 pointToSaved.insert(pointi, nDeleted);
339 savedPoints_[nDeleted++] = mesh_.points()[pointi];
358 savedFaceLabels_.setSize(facesAffected.
size());
359 savedFaces_.setSize(facesAffected.
size());
363 for (
const label facei : facesAffected)
365 const face&
f = mesh_.faces()[facei];
367 face newFace(
f.size());
373 label pointi =
f[fp];
375 if (!pointCanBeDeleted[pointi])
377 newFace[newI++] = pointi;
383 modifyFace(facei, newFace, meshMod);
388 savedFaceLabels_[nSaved] = facei;
390 face& savedFace = savedFaces_[nSaved++];
395 label pointi =
f[fp];
397 if (pointCanBeDeleted[pointi])
399 savedFace[fp] = -pointToSaved[pointi]-1;
403 savedFace[fp] = pointi;
414 forAll(savedFaceLabels_, saveI)
422 mesh_.faces()[savedFaceLabels_[saveI]]
437 if (meshPoints != keptPoints)
440 <<
"facei:" << savedFaceLabels_[saveI] <<
nl
441 <<
"meshPoints:" << meshPoints <<
nl
442 <<
"keptPoints:" << keptPoints <<
nl
455 forAll(savedFaceLabels_, localI)
457 if (savedFaceLabels_[localI] >= 0)
464 <<
"Old face " << savedFaceLabels_[localI]
465 <<
" seems to have disappeared."
468 savedFaceLabels_[localI] = newFacei;
477 face&
f = savedFaces_[i];
481 label pointi =
f[fp];
490 <<
"Old point " << pointi
491 <<
" seems to have disappeared."
502 forAll(savedFaceLabels_, saveI)
504 if (savedFaceLabels_[saveI] >= 0)
506 const face&
f = mesh_.faces()[savedFaceLabels_[saveI]];
509 const face& savedFace = savedFaces_[saveI];
511 face keptFace(savedFace.size());
516 label pointi = savedFace[fp];
520 keptFace[keptFp++] = pointi;
530 <<
"facei:" << savedFaceLabels_[saveI] <<
nl
531 <<
"face:" <<
f <<
nl
532 <<
"keptFace:" << keptFace <<
nl
562 <<
"removePoints not constructed with"
563 <<
" unrefinement capability."
570 faceSet undoFacesSet(mesh_,
"undoFacesSet", undoFaces);
571 label sz = undoFacesSet.
size();
573 undoFacesSet.
sync(mesh_);
574 if (sz != undoFacesSet.
size())
577 <<
"undoFaces not synchronised across coupled faces." <<
endl
578 <<
"Size before sync:" << sz
579 <<
" after sync:" << undoFacesSet.
size()
603 forAll(savedFaceLabels_, saveI)
605 if (savedFaceLabels_[saveI] < 0)
608 <<
"Illegal face label " << savedFaceLabels_[saveI]
609 <<
" at index " << saveI
613 if (undoFacesSet.
found(savedFaceLabels_[saveI]))
615 const face& savedFace = savedFaces_[saveI];
619 if (savedFace[fp] < 0)
621 label savedPointi = -savedFace[fp]-1;
626 <<
"Trying to restore point " << savedPointi
627 <<
" from mesh face " << savedFaceLabels_[saveI]
628 <<
" saved face:" << savedFace
629 <<
" which has already been undone."
633 localPointsSet.insert(savedPointi);
647 forAll(savedFaces_, saveI)
649 label bFacei = savedFaceLabels_[saveI] - mesh_.nInternalFaces();
653 const face& savedFace = savedFaces_[saveI];
655 boolList& fRestore = faceVertexRestore[bFacei];
657 fRestore.
setSize(savedFace.size());
662 if (savedFace[fp] < 0)
664 label savedPointi = -savedFace[fp]-1;
666 if (localPointsSet.found(savedPointi))
689 forAll(savedFaces_, saveI)
691 label bFacei = savedFaceLabels_[saveI] - mesh_.nInternalFaces();
695 const boolList& fRestore = faceVertexRestore[bFacei];
697 const face& savedFace = savedFaces_[saveI];
704 if (savedFace[fp] >= 0)
707 <<
"Problem: on coupled face:"
708 << savedFaceLabels_[saveI]
710 << mesh_.faceCentres()[savedFaceLabels_[saveI]]
712 <<
" my neighbour tries to restore the vertex"
713 <<
" at index " << fp
714 <<
" whereas my saved face:" << savedFace
715 <<
" does not indicate a deleted vertex"
716 <<
" at that position."
720 label savedPointi = -savedFace[fp]-1;
722 localPointsSet.insert(savedPointi);
729 localPoints = localPointsSet.toc();
737 forAll(savedFaces_, saveI)
739 const face& savedFace = savedFaces_[saveI];
743 if (savedFace[fp] < 0)
745 label savedPointi = -savedFace[fp]-1;
747 if (localPointsSet.found(savedPointi))
749 localFacesSet.insert(saveI);
754 localFaces = localFacesSet.toc();
774 <<
"removePoints not constructed with"
775 <<
" unrefinement capability."
781 labelList addedPoints(savedPoints_.size(), -1);
785 label localI = localPoints[i];
790 <<
"Saved point " << localI <<
" already restored!"
798 savedPoints_[localI],
811 label saveI = localFaces[i];
815 face& savedFace = savedFaces_[saveI];
817 face newFace(savedFace.size());
820 bool hasSavedPoints =
false;
824 if (savedFace[fp] < 0)
826 label addedPointi = addedPoints[-savedFace[fp]-1];
828 if (addedPointi != -1)
830 savedFace[fp] = addedPointi;
831 newFace[newFp++] = addedPointi;
835 hasSavedPoints =
true;
840 newFace[newFp++] = savedFace[fp];
845 modifyFace(savedFaceLabels_[saveI], newFace, meshMod);
850 savedFaceLabels_[saveI] = -1;
851 savedFaces_[saveI].clear();
859 forAll(savedFaceLabels_, saveI)
861 if (savedFaceLabels_[saveI] != -1)
863 if (newSaveI != saveI)
865 savedFaceLabels_[newSaveI] = savedFaceLabels_[saveI];
866 savedFaces_[newSaveI].transfer(savedFaces_[saveI]);
872 savedFaceLabels_.setSize(newSaveI);
873 savedFaces_.setSize(newSaveI);
879 forAll(savedFaceLabels_, saveI)
881 const face& savedFace = savedFaces_[saveI];
885 if (savedFace[fp] < 0)
887 label addedPointi = addedPoints[-savedFace[fp]-1];
889 if (addedPointi != -1)
892 <<
"Face:" << savedFaceLabels_[saveI]
893 <<
" savedVerts:" << savedFace
894 <<
" uses restored point:" << -savedFace[fp]-1
895 <<
" with new pointlabel:" << addedPointi