50 void Foam::removePoints::modifyFace
54 polyTopoChange& meshMod
73 bool zoneFlip =
false;
77 const faceZone& fZone = mesh_.
faceZones()[zoneID];
79 zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)];
103 Foam::removePoints::removePoints
129 const edgeList& edges = mesh_.edges();
133 const edge&
e = edges[edgeI];
137 label pointI = e[eI];
139 if (edge0[pointI] == -2)
143 else if (edge0[pointI] == -1)
146 edge0[pointI] = edgeI;
152 if (edge1[pointI] == -1)
155 edge1[pointI] = edgeI;
171 pointCanBeDeleted.
setSize(mesh_.nPoints());
172 pointCanBeDeleted =
false;
177 if (edge0[pointI] >= 0 && edge1[pointI] >= 0)
181 const edge& e0 = edges[edge0[pointI]];
182 const edge& e1 = edges[edge1[pointI]];
188 vector e0Vec = points[common] - points[vLeft];
189 e0Vec /=
mag(e0Vec) + VSMALL;
191 vector e1Vec = points[vRight] - points[common];
192 e1Vec /=
mag(e1Vec) + VSMALL;
194 if ((e0Vec & e1Vec) > minCos)
196 pointCanBeDeleted[pointI] =
true;
200 else if (edge0[pointI] == -1)
203 pointCanBeDeleted[pointI] =
true;
213 forAll(mesh_.faces(), faceI)
215 const face&
f = mesh_.faces()[faceI];
220 if (pointCanBeDeleted[f[fp]])
226 if ((f.
size() - nCollapse) < 3)
231 if (pointCanBeDeleted[f[fp]])
233 pointCanBeDeleted[f[fp]] =
false;
267 forAll(pointCanBeDeleted, pointI)
269 if (pointCanBeDeleted[pointI])
286 savedPoints_.setSize(nDeleted);
287 pointToSaved.
resize(2*nDeleted);
296 forAll(pointCanBeDeleted, pointI)
298 if (pointCanBeDeleted[pointI])
302 pointToSaved.
insert(pointI, nDeleted);
303 savedPoints_[nDeleted++] = mesh_.points()[pointI];
312 facesAffected.
insert(pFaces[i]);
325 savedFaceLabels_.setSize(facesAffected.
size());
326 savedFaces_.setSize(facesAffected.
size());
332 label faceI = iter.key();
334 const face&
f = mesh_.faces()[faceI];
342 label pointI = f[fp];
344 if (!pointCanBeDeleted[pointI])
346 newFace[newI++] = pointI;
352 modifyFace(faceI, newFace, meshMod);
357 savedFaceLabels_[nSaved] = faceI;
359 face& savedFace = savedFaces_[nSaved++];
364 label pointI = f[fp];
366 if (pointCanBeDeleted[pointI])
368 savedFace[fp] = -pointToSaved[pointI]-1;
372 savedFace[fp] = pointI;
383 forAll(savedFaceLabels_, saveI)
391 mesh_.faces()[savedFaceLabels_[saveI]]
406 if (meshPoints != keptPoints)
409 <<
"faceI:" << savedFaceLabels_[saveI] <<
nl
410 <<
"meshPoints:" << meshPoints <<
nl
411 <<
"keptPoints:" << keptPoints <<
nl
424 forAll(savedFaceLabels_, localI)
426 if (savedFaceLabels_[localI] >= 0)
434 "removePoints::updateMesh(const mapPolyMesh&)"
435 ) <<
"Old face " << savedFaceLabels_[localI]
436 <<
" seems to have dissapeared."
439 savedFaceLabels_[localI] = newFaceI;
448 face&
f = savedFaces_[i];
452 label pointI = f[fp];
462 "removePoints::updateMesh(const mapPolyMesh&)"
463 ) <<
"Old point " << pointI
464 <<
" seems to have dissapeared."
475 forAll(savedFaceLabels_, saveI)
477 if (savedFaceLabels_[saveI] >= 0)
479 const face&
f = mesh_.faces()[savedFaceLabels_[saveI]];
482 const face& savedFace = savedFaces_[saveI];
489 label pointI = savedFace[fp];
493 keptFace[keptFp++] = pointI;
503 <<
"faceI:" << savedFaceLabels_[saveI] <<
nl
504 <<
"face:" << f <<
nl
505 <<
"keptFace:" << keptFace <<
nl
536 "removePoints::getUnrefimentSet(const labelList&"
537 ", labelList&, labelList&) const"
538 ) <<
"removePoints not constructed with"
539 <<
" unrefinement capability."
546 faceSet undoFacesSet(mesh_,
"undoFacesSet", undoFaces);
547 label sz = undoFacesSet.
size();
549 undoFacesSet.
sync(mesh_);
550 if (sz != undoFacesSet.
size())
554 "removePoints::getUnrefimentSet(const labelList&"
555 ", labelList&, labelList&) const"
556 ) <<
"undoFaces not synchronised across coupled faces." <<
endl
557 <<
"Size before sync:" << sz
558 <<
" after sync:" << undoFacesSet.
size()
582 forAll(savedFaceLabels_, saveI)
584 if (savedFaceLabels_[saveI] < 0)
588 "removePoints::getUnrefimentSet(const labelList&"
589 ", labelList&, labelList&) const"
590 ) <<
"Illegal face label " << savedFaceLabels_[saveI]
591 <<
" at index " << saveI
595 if (undoFacesSet.
found(savedFaceLabels_[saveI]))
597 const face& savedFace = savedFaces_[saveI];
601 if (savedFace[fp] < 0)
603 label savedPointI = -savedFace[fp]-1;
609 "removePoints::getUnrefimentSet"
610 "(const labelList&, labelList&, labelList&)"
612 ) <<
"Trying to restore point " << savedPointI
613 <<
" from mesh face " << savedFaceLabels_[saveI]
614 <<
" saved face:" << savedFace
615 <<
" which has already been undone."
619 localPointsSet.insert(savedPointI);
630 boolListList faceVertexRestore(mesh_.nFaces()-mesh_.nInternalFaces());
633 forAll(savedFaces_, saveI)
635 label bFaceI = savedFaceLabels_[saveI] - mesh_.nInternalFaces();
639 const face& savedFace = savedFaces_[saveI];
641 boolList& fRestore = faceVertexRestore[bFaceI];
648 if (savedFace[fp] < 0)
650 label savedPointI = -savedFace[fp]-1;
652 if (localPointsSet.found(savedPointI))
665 faceEqOp<bool, orEqOp>(),
675 forAll(savedFaces_, saveI)
677 label bFaceI = savedFaceLabels_[saveI] - mesh_.nInternalFaces();
681 const boolList& fRestore = faceVertexRestore[bFaceI];
683 const face& savedFace = savedFaces_[saveI];
690 if (savedFace[fp] >= 0)
694 "removePoints::getUnrefimentSet"
695 "(const labelList&, labelList&, labelList&)"
697 ) <<
"Problem: on coupled face:"
698 << savedFaceLabels_[saveI]
700 << mesh_.faceCentres()[savedFaceLabels_[saveI]]
702 <<
" my neighbour tries to restore the vertex"
703 <<
" at index " << fp
704 <<
" whereas my saved face:" << savedFace
705 <<
" does not indicate a deleted vertex"
706 <<
" at that position."
710 label savedPointI = -savedFace[fp]-1;
712 localPointsSet.insert(savedPointI);
719 localPoints = localPointsSet.toc();
727 forAll(savedFaces_, saveI)
729 const face& savedFace = savedFaces_[saveI];
733 if (savedFace[fp] < 0)
735 label savedPointI = -savedFace[fp]-1;
737 if (localPointsSet.found(savedPointI))
739 localFacesSet.insert(saveI);
744 localFaces = localFacesSet.toc();
765 "removePoints::setUnrefinement(const labelList&"
766 ", labelList&, polyTopoChange&)"
767 ) <<
"removePoints not constructed with"
768 <<
" unrefinement capability."
774 labelList addedPoints(savedPoints_.size(), -1);
778 label localI = localPoints[i];
784 "removePoints::setUnrefinement(const labelList&"
785 ", labelList&, polyTopoChange&)"
786 ) <<
"Saved point " << localI <<
" already restored!"
794 savedPoints_[localI],
807 label saveI = localFaces[i];
811 face& savedFace = savedFaces_[saveI];
816 bool hasSavedPoints =
false;
820 if (savedFace[fp] < 0)
822 label addedPointI = addedPoints[-savedFace[fp]-1];
824 if (addedPointI != -1)
826 savedFace[fp] = addedPointI;
827 newFace[newFp++] = addedPointI;
831 hasSavedPoints =
true;
836 newFace[newFp++] = savedFace[fp];
841 modifyFace(savedFaceLabels_[saveI], newFace, meshMod);
846 savedFaceLabels_[saveI] = -1;
847 savedFaces_[saveI].clear();
855 forAll(savedFaceLabels_, saveI)
857 if (savedFaceLabels_[saveI] != -1)
859 if (newSaveI != saveI)
861 savedFaceLabels_[newSaveI] = savedFaceLabels_[saveI];
862 savedFaces_[newSaveI].transfer(savedFaces_[saveI]);
868 savedFaceLabels_.setSize(newSaveI);
869 savedFaces_.setSize(newSaveI);
875 forAll(savedFaceLabels_, saveI)
877 const face& savedFace = savedFaces_[saveI];
881 if (savedFace[fp] < 0)
883 label addedPointI = addedPoints[-savedFace[fp]-1];
885 if (addedPointI != -1)
888 <<
"Face:" << savedFaceLabels_[saveI]
889 <<
" savedVerts:" << savedFace
890 <<
" uses restored point:" << -savedFace[fp]-1
891 <<
" with new pointlabel:" << addedPointI