49 void Foam::undoableMeshCutter::printCellRefTree
53 const splitCell* splitCellPtr
58 os << indent << splitCellPtr->cellLabel() <<
endl;
60 word subIndent = indent +
"--";
62 printCellRefTree(os, subIndent, splitCellPtr->master());
64 printCellRefTree(os, subIndent, splitCellPtr->slave());
70 void Foam::undoableMeshCutter::printRefTree(Ostream& os)
const
75 iter != liveSplitCells_.end();
79 const splitCell* splitPtr = iter();
82 while (splitPtr->parent())
84 if (!splitPtr->isMaster())
92 splitPtr = splitPtr->parent();
100 printCellRefTree(os, word(
""), splitPtr);
108 void Foam::undoableMeshCutter::updateLabels
111 Map<splitCell*>& liveSplitCells
116 bool changed =
false;
120 const splitCell* splitPtr = iter();
126 "undoableMeshCutter::updateLabels"
127 "(const labelList&, Map<splitCell*>&)"
128 ) <<
"Problem: null pointer on liveSplitCells list"
132 label cellI = splitPtr->cellLabel();
134 if (cellI != map[cellI])
149 Map<splitCell*> newLiveSplitCells(2*liveSplitCells.size());
151 forAllIter(Map<splitCell*>, liveSplitCells, iter)
153 splitCell* splitPtr = iter();
155 label cellI = splitPtr->cellLabel();
157 label newCellI = map[cellI];
159 if (debug && (cellI != newCellI))
161 Pout<<
"undoableMeshCutter::updateLabels :"
162 <<
" Updating live (split)cell from " << cellI
163 <<
" to " << newCellI <<
endl;
170 splitPtr->cellLabel() = newCellI;
173 newLiveSplitCells.insert(newCellI, splitPtr);
176 liveSplitCells = newLiveSplitCells;
184 Foam::undoableMeshCutter::undoableMeshCutter
192 liveSplitCells_(mesh.
nCells()/100 + 100),
221 otherSidePtr->
parent() = NULL;
223 splitPtr->
parent() = NULL;
229 splitPtr = parentPtr;
251 label cellI = iter.key();
253 label addedCellI = iter();
260 liveSplitCells_.
find(cellI);
262 if (findCell == liveSplitCells_.
end())
277 parentPtr->
master() = masterPtr;
278 parentPtr->
slave() = slavePtr;
282 if (liveSplitCells_.found(addedCellI))
285 <<
"problem addedCell:" << addedCellI
289 liveSplitCells_.insert(cellI, masterPtr);
290 liveSplitCells_.insert(addedCellI, slavePtr);
298 liveSplitCells_.erase(findCell);
306 parentPtr->
master() = masterPtr;
307 parentPtr->
slave() = slavePtr;
311 if (liveSplitCells_.found(addedCellI))
314 <<
"problem addedCell:" << addedCellI
318 liveSplitCells_.insert(cellI, masterPtr);
319 liveSplitCells_.insert(addedCellI, slavePtr);
325 Pout<<
"** After refinement: liveSplitCells_:" <<
endl;
341 faceRemover_.updateMesh(morphMap);
356 <<
"Only call if constructed with unrefinement capability"
369 <<
"Live split cell without parent" <<
endl
381 liveSplitCells_.found(slavePtr->
cellLabel())
391 label slaveCellI = slavePtr->
cellLabel();
401 liveSplitFaces.append(commonFaceI);
406 return liveSplitFaces.shrink();
417 <<
"Only call if constructed with unrefinement capability"
421 Map<label> addedCells(liveSplitCells_.size());
430 <<
"Live split cell without parent" <<
endl
442 liveSplitCells_.found(slavePtr->
cellLabel())
464 FatalErrorIn(
"undoableMeshCutter::removeSplitFaces(const labelList&)")
465 <<
"Only call if constructed with unrefinement capability"
475 faceRemover().compatibleRemoves
483 if (facesToRemove.
size() != splitFaces.
size())
485 Pout<<
"cellRegion:" << cellRegion <<
endl;
486 Pout<<
"cellRegionMaster:" << cellRegionMaster <<
endl;
490 "undoableMeshCutter::removeSplitFaces(const labelList&)"
491 ) <<
"Faces to remove:" << splitFaces << endl
492 <<
"to be removed:" << facesToRemove
499 forAll(facesToRemove, facesToRemoveI)
501 label faceI = facesToRemove[facesToRemoveI];
503 if (!
mesh().isInternalFace(faceI))
507 "undoableMeshCutter::removeSplitFaces(const labelList&)"
508 ) <<
"Trying to remove face that is not internal"
522 (ownFind == liveSplitCells_.
end())
523 || (nbrFind == liveSplitCells_.
end())
543 Pout<<
"Updating for removed splitFace " << faceI
544 <<
" own:" << own <<
" nbr:" << nbr
553 "undoableMeshCutter::removeSplitFaces(const labelList&)"
554 ) <<
"No parent for owner " << ownPtr->
cellLabel()
562 "undoableMeshCutter::removeSplitFaces(const labelList&)"
563 ) <<
"No parent for neighbour " << nbrPtr->
cellLabel()
567 if (parentPtr != nbrPtr->
parent())
571 "undoableMeshCutter::removeSplitFaces(const labelList&)"
572 ) <<
"Owner and neighbour liveSplitCell entries do not have"
573 <<
" same parent. faceI:" << faceI <<
" owner:" << own
574 <<
" ownparent:" << parentPtr->
cellLabel()
575 <<
" neighbour:" << nbr
590 "undoableMeshCutter::removeSplitFaces(const labelList&)"
591 ) <<
"Owner and neighbour liveSplitCell entries are"
592 <<
" refined themselves or the parent is not refined"
595 <<
" neighbour unrefined:" << nbrPtr->
isUnrefined()
596 <<
" master unrefined:" << parentPtr->
isUnrefined()
601 liveSplitCells_.erase(ownFind);
604 liveSplitCells_.erase(liveSplitCells_.find(nbr));
624 liveSplitCells_.insert(own, parentPtr);
637 faceRemover().setRefinement
645 return facesToRemove;