45 void Foam::refinementHistory::writeEntry
47 const List<splitCell8>& splitCells,
48 const splitCell8& split
52 if (split.addedCellsPtr_.valid())
54 Pout<<
"parent:" << split.parent_
55 <<
" subCells:" << split.addedCellsPtr_()
60 Pout<<
"parent:" << split.parent_
65 if (split.parent_ >= 0)
71 writeEntry(splitCells, splitCells[split.parent_]);
80 const List<splitCell8>& splitCells
86 forAll(visibleCells, cellI)
88 label index = visibleCells[cellI];
92 Pout<<
"Cell from refinement:" << cellI <<
" index:" << index
97 writeEntry(splitCells, splitCells[index]);
102 Pout<<
"Unrefined cell:" << cellI <<
" index:" << index <<
endl;
140 sc.addedCellsPtr_.valid()
141 ? new
FixedList<label, 8>(sc.addedCellsPtr_())
153 is >> sc.
parent_ >> addedCells;
155 if (addedCells.
size())
171 const refinementHistory::splitCell8& sc
192 void Foam::refinementHistory::checkIndices()
const
197 if (visibleCells_[i] < 0 && visibleCells_[i] >= splitCells_.
size())
200 <<
"Illegal entry " << visibleCells_[i]
201 <<
" in visibleCells at location" << i <<
nl
202 <<
"It points outside the range of splitCells : 0.."
203 << splitCells_.
size()-1
210 Foam::label Foam::refinementHistory::allocateSplitCell
218 if (freeSplitCells_.
size())
220 index = freeSplitCells_.
remove();
222 splitCells_[index] = splitCell8(parent);
226 index = splitCells_.
size();
228 splitCells_.
append(splitCell8(parent));
235 splitCell8& parentSplit = splitCells_[parent];
237 if (parentSplit.addedCellsPtr_.empty())
240 parentSplit.addedCellsPtr_.reset(
new FixedList<label, 8>(-1));
245 FixedList<label, 8>& parentSplits = parentSplit.addedCellsPtr_();
247 parentSplits[i] = index;
254 void Foam::refinementHistory::freeSplitCell(
const label index)
256 splitCell8& split = splitCells_[index];
259 if (split.parent_ >= 0)
261 autoPtr<FixedList<label, 8> >& subCellsPtr =
262 splitCells_[split.parent_].addedCellsPtr_;
264 if (subCellsPtr.valid())
266 FixedList<label, 8>& subCells = subCellsPtr();
268 label myPos =
findIndex(subCells, index);
273 <<
"Problem: cannot find myself in"
278 subCells[myPos] = -1;
287 freeSplitCells_.
append(index);
292 void Foam::refinementHistory::markSplit
296 DynamicList<splitCell8>& newSplitCells
299 if (oldToNew[index] == -1)
303 const splitCell8& split = splitCells_[index];
305 oldToNew[index] = newSplitCells.
size();
306 newSplitCells.append(split);
308 if (split.parent_ >= 0)
310 markSplit(split.parent_, oldToNew, newSplitCells);
312 if (split.addedCellsPtr_.valid())
314 const FixedList<label, 8>& splits = split.addedCellsPtr_();
320 markSplit(splits[i], oldToNew, newSplitCells);
346 Pout<<
"refinementHistory::refinementHistory :"
347 <<
" constructed history from IOobject :"
348 <<
" splitCells:" << splitCells_.
size()
349 <<
" visibleCells:" << visibleCells_.
size()
364 splitCells_(splitCells),
366 visibleCells_(visibleCells)
374 readStream(typeName) >> *
this;
383 Pout<<
"refinementHistory::refinementHistory :"
384 <<
" constructed history from IOobject or components :"
385 <<
" splitCells:" << splitCells_.size()
386 <<
" visibleCells:" << visibleCells_.size()
408 readStream(typeName) >> *
this;
413 visibleCells_.setSize(nCells);
414 splitCells_.setCapacity(nCells);
416 for (label cellI = 0; cellI < nCells; cellI++)
418 visibleCells_[cellI] = cellI;
428 Pout<<
"refinementHistory::refinementHistory :"
429 <<
" constructed history from IOobject or initial size :"
430 <<
" splitCells:" << splitCells_.size()
431 <<
" visibleCells:" << visibleCells_.size()
451 Pout<<
"refinementHistory::refinementHistory : constructed initial"
452 <<
" history." <<
endl;
470 Pout<<
"refinementHistory::refinementHistory :"
471 <<
" constructed history from Istream"
472 <<
" splitCells:" << splitCells_.
size()
473 <<
" visibleCells:" << visibleCells_.
size()
483 label oldSize = visibleCells_.size();
487 Pout<<
"refinementHistory::resize from " << oldSize <<
" to " << size
491 visibleCells_.setSize(size);
494 for (label i = oldSize; i < visibleCells_.size(); i++)
496 visibleCells_[i] = -1;
511 forAll(visibleCells_, cellI)
513 if (visibleCells_[cellI] != -1)
515 label index = visibleCells_[cellI];
518 if (splitCells_[index].addedCellsPtr_.valid())
522 "refinementHistory::updateMesh(const mapPolyMesh&)"
526 label newCellI = reverseCellMap[cellI];
530 newVisibleCells[newCellI] = index;
537 Pout<<
"refinementHistory::updateMesh : from "
538 << visibleCells_.size()
539 <<
" to " << newVisibleCells.size()
543 visibleCells_.transfer(newVisibleCells);
560 forAll(newVisibleCells, cellI)
562 label oldCellI = cellMap[cellI];
564 label index = visibleCells_[oldCellI];
567 if (index >= 0 && splitCells_[index].addedCellsPtr_.valid())
571 "refinementHistory::subset"
572 "(const labelList&, const labelList&, const labelList&)"
576 newVisibleCells[cellI] = index;
581 Pout<<
"refinementHistory::updateMesh : from "
582 << visibleCells_.size()
583 <<
" to " << newVisibleCells.size()
587 visibleCells_.transfer(newVisibleCells);
592 void Foam::refinementHistory::countProc
595 const label newProcNo,
600 if (splitCellProc[index] != newProcNo)
604 splitCellProc[index] = newProcNo;
605 splitCellNum[index] = 1;
609 splitCellNum[index]++;
612 if (splitCellNum[index] == 8)
614 Pout<<
"Moving " << splitCellNum[index]
615 <<
" cells originating from cell " << index
617 <<
" to processor " << splitCellProc[index]
620 label parent = splitCells_[index].parent_;
627 countProc(parent, newProcNo, splitCellProc, splitCellNum);
642 "refinementHistory::distribute(const mapDistributePolyMesh&)"
671 labelList destination(visibleCells_.size());
677 const labelList& newToOld = subCellMap[procI];
681 label oldCellI = newToOld[i];
683 destination[oldCellI] = procI;
691 labelList splitCellProc(splitCells_.size(), -1);
693 labelList splitCellNum(splitCells_.size(), 0);
695 forAll(visibleCells_, cellI)
697 label index = visibleCells_[cellI];
703 splitCells_[index].parent_,
711 Pout<<
"refinementHistory::distribute :"
712 <<
" splitCellProc:" << splitCellProc <<
endl;
714 Pout<<
"refinementHistory::distribute :"
715 <<
" splitCellNum:" << splitCellNum <<
endl;
722 Pout<<
"-- Subetting for processor " << procI <<
endl;
725 labelList oldToNew(splitCells_.size(), -1);
733 forAll(splitCells_, index)
740 if (splitCellProc[index] == procI && splitCellNum[index] == 8)
743 oldToNew[index] = newSplitCells.size();
744 newSplitCells.append(splitCells_[index]);
746 Pout<<
"Added oldCell " << index
747 <<
" info " << newSplitCells[newSplitCells.size()-1]
748 <<
" at position " << newSplitCells.size()-1
754 forAll(visibleCells_, cellI)
756 label index = visibleCells_[cellI];
758 if (index >= 0 && destination[cellI] == procI)
760 label parent = splitCells_[index].parent_;
762 Pout<<
"Adding refined cell " << cellI
763 <<
" since moves to "
764 << procI <<
" old parent:" << parent <<
endl;
767 oldToNew[index] = newSplitCells.size();
778 newSplitCells.shrink();
781 forAll(newSplitCells, index)
797 splits[i] = oldToNew[splits[i]];
804 const labelList& subMap = subCellMap[procI];
811 label oldCellI = subMap[newCellI];
813 label oldIndex = visibleCells_[oldCellI];
817 newVisibleCells[newCellI] = oldToNew[oldIndex];
828 toNbr << newSplitCells << newVisibleCells;
854 label offset = splitCells_.size();
856 Pout<<
"**Renumbering data from proc " << procI <<
" with offset "
859 forAll(newSplitCells, index)
880 splitCells_.append(split);
887 forAll(newVisibleCells, i)
889 visibleCells_[constructMap[i]] = newVisibleCells[i] + offset;
892 splitCells_.shrink();
904 Pout<<
"refinementHistory::compact() Entering with:"
905 <<
" freeSplitCells_:" << freeSplitCells_.size()
906 <<
" splitCells_:" << splitCells_.size()
907 <<
" visibleCells_:" << visibleCells_.size()
911 forAll(freeSplitCells_, i)
913 label index = freeSplitCells_[i];
915 if (splitCells_[index].parent_ != -2)
918 <<
"Problem index:" << index
924 forAll(visibleCells_, cellI)
928 visibleCells_[cellI] >= 0
929 && splitCells_[visibleCells_[cellI]].parent_ == -2
933 <<
"Problem : visible cell:" << cellI
942 labelList oldToNew(splitCells_.size(), -1);
948 forAll(visibleCells_, cellI)
950 label index = visibleCells_[cellI];
958 splitCells_[index].parent_ != -1
959 || splitCells_[index].addedCellsPtr_.valid()
962 markSplit(index, oldToNew, newSplitCells);
968 forAll(splitCells_, index)
970 if (splitCells_[index].parent_ == -2)
976 splitCells_[index].parent_ == -1
977 && splitCells_[index].addedCellsPtr_.empty()
986 markSplit(index, oldToNew, newSplitCells);
994 forAll(newSplitCells, index)
1010 splits[i] = oldToNew[splits[i]];
1019 Pout<<
"refinementHistory::compact : compacted splitCells from "
1020 << splitCells_.size() <<
" to " << newSplitCells.size() <<
endl;
1023 splitCells_.transfer(newSplitCells);
1024 freeSplitCells_.clearStorage();
1029 Pout<<
"refinementHistory::compact() NOW:"
1030 <<
" freeSplitCells_:" << freeSplitCells_.size()
1031 <<
" splitCells_:" << splitCells_.size()
1032 <<
" newSplitCells:" << newSplitCells.size()
1033 <<
" visibleCells_:" << visibleCells_.size()
1039 forAll(visibleCells_, cellI)
1041 label index = visibleCells_[cellI];
1046 visibleCells_[cellI] = oldToNew[index];
1058 writeDebug(visibleCells_, splitCells_);
1068 label parentIndex = -1;
1070 if (visibleCells_[cellI] != -1)
1075 parentIndex = visibleCells_[cellI];
1079 visibleCells_[cellI] = -1;
1084 parentIndex = allocateSplitCell(-1, -1);
1091 label addedCellI = addedCells[i];
1095 visibleCells_[addedCellI] = allocateSplitCell(parentIndex, i);
1102 const label masterCellI,
1107 label parentIndex = splitCells_[visibleCells_[masterCellI]].parent_;
1112 label cellI = combinedCells[i];
1114 freeSplitCell(visibleCells_[cellI]);
1115 visibleCells_[cellI] = -1;
1118 splitCell8& parentSplit = splitCells_[parentIndex];
1120 visibleCells_[masterCellI] = parentIndex;
1145 is >> rh.splitCells_ >> rh.visibleCells_;
1156 const_cast<refinementHistory&
>(rh).compact();
1158 return os <<
"// splitCells" <<
nl
1159 << rh.splitCells_ <<
nl
1160 <<
"// visibleCells" <<
nl
1161 << rh.visibleCells_;