46 bool Foam::refinementHistory::readIOcontents()
59 void Foam::refinementHistory::writeEntry
61 const List<splitCell8>& splitCells,
62 const splitCell8&
split 66 if (
split.addedCellsPtr_)
69 <<
" subCells:" <<
split.addedCellsPtr_()
79 if (
split.parent_ >= 0)
85 writeEntry(splitCells, splitCells[
split.parent_]);
94 const List<splitCell8>& splitCells
100 forAll(visibleCells, celli)
102 label index = visibleCells[celli];
106 Pout<<
"Cell from refinement:" << celli <<
" index:" << index
111 writeEntry(splitCells, splitCells[index]);
116 Pout<<
"Unrefined cell:" << celli <<
" index:" << index <<
endl;
128 addedCellsPtr_(nullptr)
135 addedCellsPtr_(nullptr)
149 parent_(rhs.parent_),
150 addedCellsPtr_(rhs.addedCellsPtr_.
clone())
170 bool Foam::refinementHistory::splitCell8::operator==
184 else if (addedCellsPtr_)
193 bool Foam::refinementHistory::splitCell8::operator!=
195 const splitCell8& rhs
208 is >> sc.parent_ >> addedCells;
210 if (addedCells.size())
212 sc.addedCellsPtr_.reset(
new FixedList<label, 8>(addedCells));
216 sc.addedCellsPtr_.reset(
nullptr);
226 const refinementHistory::splitCell8& sc
235 if (sc.addedCellsPtr_)
237 labels = sc.addedCellsPtr_();
246 void Foam::refinementHistory::checkIndices()
const 251 if (visibleCells_[i] < 0 && visibleCells_[i] >= splitCells_.size())
254 <<
"Illegal entry " << visibleCells_[i]
255 <<
" in visibleCells at location" << i <<
nl 256 <<
"It points outside the range of splitCells : 0.." 257 << splitCells_.size()-1
264 Foam::label Foam::refinementHistory::allocateSplitCell
272 if (freeSplitCells_.
size())
274 index = freeSplitCells_.
back();
277 splitCells_[index] = splitCell8(parent);
281 index = splitCells_.size();
282 splitCells_.push_back(splitCell8(parent));
289 splitCell8& parentSplit = splitCells_[parent];
291 if (!parentSplit.addedCellsPtr_)
294 parentSplit.addedCellsPtr_.reset(
new FixedList<label, 8>(-1));
299 FixedList<label, 8>& parentSplits = parentSplit.addedCellsPtr_();
301 parentSplits[i] = index;
308 void Foam::refinementHistory::freeSplitCell(
const label index)
310 splitCell8&
split = splitCells_[index];
313 if (
split.parent_ >= 0)
315 autoPtr<FixedList<label, 8>>& subCellsPtr =
316 splitCells_[
split.parent_].addedCellsPtr_;
320 FixedList<label, 8>& subCells = subCellsPtr();
322 label myPos = subCells.find(index);
327 <<
"Problem: cannot find myself in" 332 subCells[myPos] = -1;
341 freeSplitCells_.
append(index);
345 void Foam::refinementHistory::markSplit
349 DynamicList<splitCell8>& newSplitCells
352 if (oldToNew[index] == -1)
356 const splitCell8&
split = splitCells_[index];
358 oldToNew[index] = newSplitCells.size();
359 newSplitCells.append(
split);
361 if (
split.parent_ >= 0)
363 markSplit(
split.parent_, oldToNew, newSplitCells);
365 if (
split.addedCellsPtr_)
367 const FixedList<label, 8>& splits =
split.addedCellsPtr_();
373 markSplit(splits[i], oldToNew, newSplitCells);
381 void Foam::refinementHistory::mark
388 splitToVal[index] = val;
390 const splitCell8&
split = splitCells_[index];
392 if (
split.addedCellsPtr_)
394 const FixedList<label, 8>& splits =
split.addedCellsPtr_();
400 mark(val, splits[i], splitToVal);
407 Foam::label Foam::refinementHistory::markCommonCells
414 labelList splitToCluster(splitCells_.size(), -1);
417 forAll(visibleCells_, cellI)
419 label index = visibleCells_[cellI];
424 while (splitCells_[index].parent_ != -1)
426 index = splitCells_[index].parent_;
430 if (splitToCluster[index] == -1)
432 mark(clusterI, index, splitToCluster);
439 cellToCluster.setSize(visibleCells_.
size(), -1);
441 forAll(visibleCells_, cellI)
443 label index = visibleCells_[cellI];
447 cellToCluster[cellI] = splitToCluster[index];
458 PtrList<labelList>& specifiedProcessorFaces,
460 List<labelPair>& explicitConnections
463 const polyMesh&
mesh =
dynamic_cast<const polyMesh&
>(
db());
465 blockedFace.setSize(
mesh.nFaces(),
true);
469 markCommonCells(cellToCluster);
474 label nUnblocked = 0;
478 label ownCluster = cellToCluster[
mesh.faceOwner()[faceI]];
479 label neiCluster = cellToCluster[
mesh.faceNeighbour()[faceI]];
481 if (ownCluster != -1 && ownCluster == neiCluster)
483 if (blockedFace[faceI])
485 blockedFace[faceI] =
false;
504 const PtrList<labelList>& specifiedProcessorFaces,
506 const List<labelPair>& explicitConnections,
510 const polyMesh&
mesh =
dynamic_cast<const polyMesh&
>(
db());
514 label nClusters = markCommonCells(cellToCluster);
525 label own =
mesh.faceOwner()[faceI];
526 label nei =
mesh.faceNeighbour()[faceI];
528 label ownCluster = cellToCluster[own];
529 label neiCluster = cellToCluster[nei];
531 if (ownCluster != -1 && ownCluster == neiCluster)
533 if (clusterToProc[ownCluster] == -1)
535 clusterToProc[ownCluster] = decomposition[own];
538 if (decomposition[own] != clusterToProc[ownCluster])
540 decomposition[own] = clusterToProc[ownCluster];
543 if (decomposition[nei] != clusterToProc[ownCluster])
545 decomposition[nei] = clusterToProc[ownCluster];
553 Info<<
type() <<
" : changed decomposition on " 567 warnNoRereading<refinementHistory>();
578 Pout<<
"refinementHistory::refinementHistory :" 579 <<
" constructed history from IOobject :" 580 <<
" splitCells:" << splitCells_.size()
581 <<
" visibleCells:" << visibleCells_.
size()
582 <<
" active:" << active_
591 const List<splitCell8>& splitCells,
598 splitCells_(splitCells),
600 visibleCells_(visibleCells)
603 warnNoRereading<refinementHistory>();
612 Pout<<
"refinementHistory::refinementHistory :" 613 <<
" constructed history from IOobject or components :" 614 <<
" splitCells:" << splitCells_.size()
615 <<
" visibleCells:" << visibleCells_.
size()
616 <<
" active:" << active_
633 warnNoRereading<refinementHistory>();
635 if (!readIOcontents())
638 splitCells_.setCapacity(nCells);
640 for (label cellI = 0; cellI < nCells; cellI++)
642 visibleCells_[cellI] = cellI;
643 splitCells_.append(splitCell8());
655 Pout<<
"refinementHistory::refinementHistory :" 656 <<
" constructed history from IOobject or initial size :" 657 <<
" splitCells:" << splitCells_.size()
658 <<
" visibleCells:" << visibleCells_.
size()
659 <<
" active:" << active_
678 warnNoRereading<refinementHistory>();
680 if (!readIOcontents())
683 splitCells_.setCapacity(nCells);
685 for (label celli = 0; celli < nCells; celli++)
687 visibleCells_[celli] = celli;
688 splitCells_.append(splitCell8());
697 Pout<<
"refinementHistory::refinementHistory :" 698 <<
" constructed history from IOobject or initial size :" 699 <<
" splitCells:" << splitCells_.size()
700 <<
" visibleCells:" << visibleCells_.
size()
701 <<
" active:" << active_
710 const refinementHistory& rh
715 splitCells_(rh.splitCells()),
716 freeSplitCells_(rh.freeSplitCells()),
717 visibleCells_(rh.visibleCells())
721 Pout<<
"refinementHistory::refinementHistory : constructed initial" 722 <<
" history." <<
endl;
730 const UPtrList<const labelList>& cellMaps,
731 const UPtrList<const refinementHistory>& refs
740 <<
"Read option MUST_READ, READ_IF_PRESENT or READ_MODIFIED" 741 <<
" suggests that a read constructor would be more appropriate." 745 const polyMesh&
mesh =
dynamic_cast<const polyMesh&
>(
db());
753 const DynamicList<splitCell8>& subSplits = refs[refI].splitCells();
754 offsets[refI+1] = offsets[refI]+subSplits.size();
758 splitCells_.setSize(offsets.last());
761 const DynamicList<splitCell8>& subSplits = refs[refI].splitCells();
764 splitCell8& newSplit = splitCells_[offsets[refI]+i];
767 newSplit = subSplits[i];
770 if (newSplit.parent_ >= 0)
772 newSplit.parent_ += offsets[refI];
775 if (newSplit.addedCellsPtr_)
777 FixedList<label, 8>& splits = newSplit.addedCellsPtr_();
783 splits[i] += offsets[refI];
795 const labelList& cellMap = cellMaps[refI];
796 const labelList& subVis = refs[refI].visibleCells();
800 label& newVis = visibleCells_[cellMap[i]];
805 newVis += offsets[refI];
828 Pout<<
"refinementHistory::refinementHistory :" 829 <<
" constructed history from multiple refinementHistories :" 830 <<
" splitCells:" << splitCells_.size()
831 <<
" visibleCells:" << visibleCells_.
size()
851 Pout<<
"refinementHistory::refinementHistory :" 852 <<
" constructed history from Istream" 853 <<
" splitCells:" << splitCells_.size()
854 <<
" visibleCells:" << visibleCells_.
size()
878 oldToNewSplit.setSize(splitCells_.size());
882 DynamicList<splitCell8> newSplitCells(splitCells_.size());
887 forAll(splitCells_, index)
889 if (splitCellProc[index] == procI && splitCellNum[index] == 8)
892 oldToNewSplit[index] = newSplitCells.size();
893 newSplitCells.append(splitCells_[index]);
898 forAll(visibleCells_, cellI)
900 label index = visibleCells_[cellI];
902 if (index >= 0 && decomposition[cellI] == procI)
904 label parent = splitCells_[index].parent_;
907 oldToNewSplit[index] = newSplitCells.size();
908 newSplitCells.append(splitCell8(parent));
918 newSplitCells.shrink();
921 forAll(newSplitCells, index)
923 splitCell8&
split = newSplitCells[index];
925 if (
split.parent_ >= 0)
929 if (
split.addedCellsPtr_)
931 FixedList<label, 8>& splits =
split.addedCellsPtr_();
937 splits[i] = oldToNewSplit[splits[i]];
946 forAll(decomposition, cellI)
948 if (decomposition[cellI] == procI)
957 forAll(visibleCells_, cellI)
959 if (decomposition[cellI] == procI)
961 label index = visibleCells_[cellI];
964 index = oldToNewSplit[index];
966 newVisibleCells[nSub++] = index;
970 return autoPtr<refinementHistory>
972 new refinementHistory
995 decomposition[cellMap[i]] = 1;
1000 labelList splitCellProc(splitCells_.size(), -1);
1005 forAll(visibleCells_, cellI)
1007 label index = visibleCells_[cellI];
1013 splitCells_[index].parent_,
1014 decomposition[cellI],
1034 return autoPtr<refinementHistory>
1036 new refinementHistory
1050 label oldSize = visibleCells_.size();
1054 Pout<<
"refinementHistory::resize from " << oldSize <<
" to " << size
1055 <<
" cells" <<
endl;
1058 visibleCells_.setSize(size);
1061 for (label i = oldSize; i < visibleCells_.size(); i++)
1063 visibleCells_[i] = -1;
1072 const labelList& reverseCellMap = map.reverseCellMap();
1076 labelList newVisibleCells(map.cellMap().size(), -1);
1078 forAll(visibleCells_, celli)
1080 if (visibleCells_[celli] != -1)
1082 label index = visibleCells_[celli];
1085 if (splitCells_[index].addedCellsPtr_)
1091 label newCelli = reverseCellMap[celli];
1095 newVisibleCells[newCelli] = index;
1102 Pout<<
"refinementHistory::updateMesh : from " 1103 << visibleCells_.size()
1104 <<
" to " << newVisibleCells.size()
1105 <<
" cells" <<
endl;
1108 visibleCells_.transfer(newVisibleCells);
1122 labelList newVisibleCells(cellMap.size(), -1);
1124 forAll(newVisibleCells, celli)
1126 label oldCelli = cellMap[celli];
1128 label index = visibleCells_[oldCelli];
1131 if (index >= 0 && splitCells_[index].addedCellsPtr_)
1137 newVisibleCells[celli] = index;
1142 Pout<<
"refinementHistory::updateMesh : from " 1143 << visibleCells_.size()
1144 <<
" to " << newVisibleCells.size()
1145 <<
" cells" <<
endl;
1148 visibleCells_.transfer(newVisibleCells);
1153 void Foam::refinementHistory::countProc
1156 const label newProcNo,
1161 if (splitCellProc[index] != newProcNo)
1165 splitCellProc[index] = newProcNo;
1166 splitCellNum[index] = 1;
1170 splitCellNum[index]++;
1173 if (splitCellNum[index] == 8)
1177 Pout<<
"Moving " << splitCellNum[index]
1178 <<
" cells originating from cell " << index
1180 <<
" to processor " << splitCellProc[index]
1184 label parent = splitCells_[index].parent_;
1188 countProc(parent, newProcNo, splitCellProc, splitCellNum);
1228 labelList destination(visibleCells_.size());
1232 forAll(subCellMap, proci)
1234 const labelList& newToOld = subCellMap[proci];
1238 label oldCelli = newToOld[i];
1240 destination[oldCelli] = proci;
1245 labelList splitCellProc(splitCells_.size(), -1);
1249 forAll(visibleCells_, celli)
1251 label index = visibleCells_[celli];
1257 splitCells_[index].parent_,
1275 PstreamBuffers pBufs;
1282 labelList oldToNew(splitCells_.size(), -1);
1285 DynamicList<splitCell8> newSplitCells(splitCells_.size());
1290 forAll(splitCells_, index)
1292 if (splitCellProc[index] == proci && splitCellNum[index] == 8)
1295 oldToNew[index] = newSplitCells.size();
1296 newSplitCells.append(splitCells_[index]);
1301 forAll(visibleCells_, celli)
1303 label index = visibleCells_[celli];
1305 if (index >= 0 && destination[celli] == proci)
1307 label parent = splitCells_[index].parent_;
1310 oldToNew[index] = newSplitCells.size();
1311 newSplitCells.append(splitCell8(parent));
1321 newSplitCells.shrink();
1324 forAll(newSplitCells, index)
1326 splitCell8&
split = newSplitCells[index];
1328 if (
split.parent_ >= 0)
1332 if (
split.addedCellsPtr_)
1334 FixedList<label, 8>& splits =
split.addedCellsPtr_();
1340 splits[i] = oldToNew[splits[i]];
1347 const labelList& subMap = subCellMap[proci];
1350 labelList newVisibleCells(subMap.size(), -1);
1354 label oldCelli = subMap[newCelli];
1356 label oldIndex = visibleCells_[oldCelli];
1360 newVisibleCells[newCelli] = oldToNew[oldIndex];
1370 UOPstream toNbr(proci, pBufs);
1371 toNbr << newSplitCells << newVisibleCells;
1376 pBufs.finishedSends();
1383 splitCells_.clear();
1385 const polyMesh&
mesh =
dynamic_cast<const polyMesh&
>(db());
1392 UIPstream fromNbr(proci, pBufs);
1393 List<splitCell8> newSplitCells(fromNbr);
1403 label offset = splitCells_.size();
1408 forAll(newSplitCells, index)
1410 splitCell8&
split = newSplitCells[index];
1412 if (
split.parent_ >= 0)
1414 split.parent_ += offset;
1416 if (
split.addedCellsPtr_)
1418 FixedList<label, 8>& splits =
split.addedCellsPtr_();
1424 splits[i] += offset;
1429 splitCells_.append(
split);
1434 const labelList& constructMap = map.cellMap().constructMap()[proci];
1436 forAll(newVisibleCells, i)
1438 if (newVisibleCells[i] >= 0)
1440 visibleCells_[constructMap[i]] = newVisibleCells[i] + offset;
1444 splitCells_.shrink();
1456 Pout<<
"refinementHistory::compact() Entering with:" 1457 <<
" freeSplitCells_:" << freeSplitCells_.size()
1458 <<
" splitCells_:" << splitCells_.size()
1459 <<
" visibleCells_:" << visibleCells_.size()
1463 forAll(freeSplitCells_, i)
1465 label index = freeSplitCells_[i];
1467 if (splitCells_[index].parent_ != -2)
1470 <<
"Problem index:" << index
1476 forAll(visibleCells_, celli)
1480 visibleCells_[celli] >= 0
1481 && splitCells_[visibleCells_[celli]].parent_ == -2
1485 <<
"Problem : visible cell:" << celli
1491 DynamicList<splitCell8> newSplitCells(splitCells_.size());
1494 labelList oldToNew(splitCells_.size(), -1);
1500 forAll(visibleCells_, celli)
1502 label index = visibleCells_[celli];
1510 splitCells_[index].parent_ != -1
1511 || splitCells_[index].addedCellsPtr_
1514 markSplit(index, oldToNew, newSplitCells);
1520 forAll(splitCells_, index)
1522 if (splitCells_[index].parent_ == -2)
1528 splitCells_[index].parent_ == -1
1529 && !splitCells_[index].addedCellsPtr_
1538 markSplit(index, oldToNew, newSplitCells);
1546 forAll(newSplitCells, index)
1548 splitCell8&
split = newSplitCells[index];
1550 if (
split.parent_ >= 0)
1554 if (
split.addedCellsPtr_)
1556 FixedList<label, 8>& splits =
split.addedCellsPtr_();
1562 splits[i] = oldToNew[splits[i]];
1571 Pout<<
"refinementHistory::compact : compacted splitCells from " 1572 << splitCells_.size() <<
" to " << newSplitCells.size() <<
endl;
1575 splitCells_.transfer(newSplitCells);
1576 freeSplitCells_.clearStorage();
1581 Pout<<
"refinementHistory::compact() NOW:" 1582 <<
" freeSplitCells_:" << freeSplitCells_.size()
1583 <<
" splitCells_:" << splitCells_.size()
1584 <<
" newSplitCells:" << newSplitCells.size()
1585 <<
" visibleCells_:" << visibleCells_.size()
1591 forAll(visibleCells_, celli)
1593 label index = visibleCells_[celli];
1598 visibleCells_[celli] = oldToNew[index];
1610 writeDebug(visibleCells_, splitCells_);
1620 label parentIndex = -1;
1622 if (visibleCells_[celli] != -1)
1627 parentIndex = visibleCells_[celli];
1631 visibleCells_[celli] = -1;
1636 parentIndex = allocateSplitCell(-1, -1);
1643 label addedCelli = addedCells[i];
1647 visibleCells_[addedCelli] = allocateSplitCell(parentIndex, i);
1654 const label masterCelli,
1659 label parentIndex = splitCells_[visibleCells_[masterCelli]].parent_;
1664 label celli = combinedCells[i];
1666 freeSplitCell(visibleCells_[celli]);
1667 visibleCells_[celli] = -1;
1670 splitCell8& parentSplit = splitCells_[parentIndex];
1672 visibleCells_[masterCelli] = parentIndex;
1678 bool ok = readData(readStream(typeName));
1715 if (
exists(setsDir/typeName))
1726 rh.freeSplitCells_.clearStorage();
1728 is >> rh.splitCells_ >> rh.visibleCells_;
1739 const_cast<refinementHistory&
>(rh).compact();
1741 return os <<
"// splitCells" <<
nl 1742 << rh.splitCells_ <<
nl 1743 <<
"// visibleCells" <<
nl 1744 << rh.visibleCells_;
void operator=(const splitCell8 &rhs)
Copy assignment (no autoPtr stealing)
void size(const label n)
Older name for setAddressableSize.
autoPtr< IOobject > clone() const
Clone.
A class for handling file names.
bool bad() const noexcept
True if stream is corrupted.
const fileName & facesInstance() const
Return the current instance directory for faces.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
bool active() const
Is there unrefinement history?
static rangeType allProcs(const label communicator=worldComm)
Range of process indices for all processes.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
constexpr char nl
The newline '\n' character (0x0a)
regIOobject(const IOobject &io, const bool isTimeObject=false)
Construct from IOobject. The optional flag adds special handling if the object is the top-level regIO...
static word meshSubDir
Return the mesh sub-directory name (usually "polyMesh")
Ostream & endl(Ostream &os)
Add newline and flush stream.
static bool & parRun() noexcept
Test if this a parallel run.
bool headerOk()
Read and check header info. Does not check the headerClassName.
autoPtr< FixedList< label, 8 > > addedCellsPtr_
Cells this cell was refined into.
splitCell8()
Default construct (parent = -1)
refinementHistory(const IOobject &)
Construct (read) given an IOobject.
static int myProcNo(const label communicator=worldComm)
Rank of this process in the communicator (starting from masterNo()). Can be negative if the process i...
T returnReduce(const T &value, const BinaryOp &bop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
Perform reduction on a copy, using specified binary operation.
List< labelList > labelListList
List of labelList.
void pop_back(label n=1)
Reduce size by 1 or more elements. Can be called on an empty list.
virtual bool writeData(Ostream &) const
WriteData function required for regIOobject write operation.
bool isReadOptional() const noexcept
True if (LAZY_READ) bits are set [same as READ_IF_PRESENT].
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
fileName path() const
The complete path for the object (with instance, local,...).
#define forAll(list, i)
Loop across all elements in list.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
void setSize(const label n)
Alias for resize()
void combineCells(const label masterCelli, const labelList &combinedCells)
Store combining 8 cells into master.
void close()
Close Istream.
Istream & operator>>(Istream &, directionInfo &)
void subset(const labelList &pointMap, const labelList &faceMap, const labelList &cellMap)
Update numbering for subsetting.
const string & prefix() const noexcept
Return the stream prefix.
const objectRegistry & db() const noexcept
Return the local objectRegistry.
bool exists(const fileName &name, const bool checkGzip=true, const bool followLink=true)
Does the name exist (as DIRECTORY or FILE) in the file system?
void append(const T &val)
Copy append an element to the end of this list.
errorManip< error > abort(error &err)
An Ostream is an abstract base class for all output systems (streams, files, token lists...
virtual bool read()
Read object. If global number of visible cells > 0 becomes active.
virtual bool readData(Istream &)
ReadData function required for regIOobject read operation. Note:
int debug
Static debugging option.
OBJstream os(runTime.globalPath()/outputName)
defineTypeNameAndDebug(combustionModel, 0)
void compact()
Compact splitCells_. Removes all freeSplitCells_ elements.
void storeSplit(const label celli, const labelList &addedCells)
Store splitting of cell into 8.
bool isReadRequired() const noexcept
True if (MUST_READ | READ_MODIFIED) bits are set.
void updateMesh(const mapPolyMesh &)
Update numbering for mesh changes.
void distribute(const mapDistributePolyMesh &)
Update local numbering for mesh redistribution.
static bool split(const std::string &line, std::string &key, std::string &val)
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
static void removeFiles(const polyMesh &)
Helper: remove all sets files from mesh instance.
void apply(const boolList &blockedFace, const PtrList< labelList > &specifiedProcessorFaces, const labelList &specifiedProcessor, const List< labelPair > &explicitConnections, labelList &decomposition) const
Apply any additional post-decomposition constraints.
#define WarningInFunction
Report a warning using Foam::Warning.
label nCells() const noexcept
Number of mesh cells.
bool good() const noexcept
True if next operation might succeed.
T & back()
Access last element of the list, position [size()-1].
messageStream Info
Information stream (stdout output on master, null elsewhere)
#define DebugVar(var)
Report a variable name and value.
Mesh consisting of general polyhedral cells.
List< label > labelList
A List of labels.
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, IOobject::NO_REGISTER)
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
void add(boolList &blockedFace, PtrList< labelList > &specifiedProcessorFaces, labelList &specifiedProcessor, List< labelPair > &explicitConnections) const
Add my decomposition constraints.
void writeDebug() const
Debug write.
bool returnReduceOr(const bool value, const label comm=UPstream::worldComm)
Perform logical (or) MPI Allreduce on a copy. Uses UPstream::reduceOr.
Defines the attributes of an object for which implicit objectRegistry management is supported...
List< bool > boolList
A List of bools.
void resize(const label nCells)
Extend/shrink storage. additional visibleCells_ elements get.
Istream & readStream(const word &, const bool readOnProc=true)
Return Istream and check object type against that given.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
bool rm(const fileName &file)
Remove a file (or its gz equivalent), returning true if successful.
static constexpr const zero Zero
Global zero (0)