76 pName += mesh0.
name();
78 pName += mesh1.
name();
85 const word& entryName,
86 const word& AMIMethod,
121 const auto& ppi =
meshes[meshi].boundaryMesh()[patchesi[i]];
125 const auto& ppj =
meshes[meshj].boundaryMesh()[patchesj[j]];
130 AMPtr->calculate(ppi, ppj,
nullptr);
133 gAverage(AMPtr->tgtWeightsSum()) > SMALL
134 ||
gAverage(AMPtr->srcWeightsSum()) > SMALL
137 const label inti = interfaceMesh0.
size();
139 Info<<
"Introducing interface " << inti <<
" between" 140 <<
" mesh " <<
meshes[meshi].name()
142 <<
" patch " << ppi.name()
143 <<
" and mesh " <<
meshes[meshj].name()
145 <<
" patch " << ppj.name()
152 auto& intMesh0 = interfaceMesh0.
last();
153 intMesh0.
setSize(nSourcei, -1);
154 intMesh0[sourcei] = meshi;
156 interfaceSource0.
append(sourcei);
159 auto& intPatch0 = interfacePatch0.
last();
160 intPatch0.
setSize(nSourcei, -1);
161 intPatch0[sourcei] = ppi.index();
164 auto& intNames0 = interfaceNames0.
last();
174 auto& intMesh1 = interfaceMesh1.
last();
175 intMesh1.
setSize(nSourcej, -1);
176 intMesh1[sourcej] = meshj;
178 interfaceSource1.
append(sourcej);
181 auto& intPatch1 = interfacePatch1.
last();
182 intPatch1.
setSize(nSourcej, -1);
183 intPatch1[sourcej] = ppj.index();
186 auto& intNames1 = interfaceNames1.
last();
192 auto& intFaces0 = interfaceFaces0.
last();
193 intFaces0.setSize(nSourcei);
198 auto& intFaces1 = interfaceFaces1.
last();
199 intFaces1.setSize(nSourcej);
214 const scalarField& weights = AMPtr->srcWeightsSum();
218 const scalar
sum = weights[facei];
226 targetMask = AMPtr->interpolateToTarget(mask);
231 const scalarField& weights = AMPtr->tgtWeightsSum();
235 const scalar
sum = weights[facei];
243 sourceMask = AMPtr->interpolateToSource(mask);
247 const scalarField& weights = AMPtr->srcWeightsSum();
250 if (weights[facei] > 0.5 || sourceMask[facei] > SMALL)
252 faces0.
append(ppi.start()+facei);
257 const scalarField& weights = AMPtr->tgtWeightsSum();
260 if (weights[facei] > 0.5 || targetMask[facei] > SMALL)
262 faces1.
append(ppj.start()+facei);
277 const bool includeOwn,
303 const label meshjStart(includeOwn ? meshi : meshi+1);
305 for (label meshj = meshjStart; meshj <
meshes.
size(); meshj++)
309 for (
const label sourcei : interRegionSources[meshi])
311 const labelList& patchesi = allPatchesi[sourcei];
313 for (
const label sourcej : interRegionSources[meshj])
315 const labelList& patchesj = allPatchesj[sourcej];
325 AMIMethods[meshi][sourcei].size()
326 ? AMIMethods[meshi][sourcei]
327 : faceAreaWeightAMI2D::typeName
329 patchInfoDicts[meshi][sourcei],
371 bool zoneFlip =
false;
403 bitSet& isRepatchedBoundary,
413 <<
" is not an external face of the mesh." <<
endl 414 <<
"This application can only repatch" 420 static label nWarnings = 0;
423 const label newPatchi = meshMod.
region()[facei];
428 <<
" marked for patch " <<
patchID 430 <<
" is already marked for patch " << newPatchi
432 <<
". Suppressing further warnings" 451 if (cpp && cpp->
owner())
453 const auto& cycPatch = *cpp;
458 OFstream str(prefix+cycPatch.name()+
".obj");
459 Pout<<
"Dumping " << cycPatch.
name()
460 <<
" faces to " << str.
name() <<
endl;
470 OFstream str(prefix+nbrPatch.name()+
".obj");
471 Pout<<
"Dumping " << nbrPatch.
name()
472 <<
" faces to " << str.
name() <<
endl;
483 OFstream str(prefix+cycPatch.name()+nbrPatch.name()+
"_match.obj");
486 Pout<<
"Dumping cyclic match as lines between face centres to " 498 str<<
"l " << vertI-1 <<
' ' << vertI <<
nl;
511 if (separation.
size() == 1)
517 field[i] += separation[0];
520 else if (separation.
size() ==
field.size())
524 field[i] += separation[i];
530 <<
"Sizes of field and transformation not equal. field:" 531 <<
field.size() <<
" transformation:" << separation.
size()
538 template<
class CombineOp>
543 const CombineOp& cop,
544 const point& nullValue
551 <<
" is not equal to the number of points in the mesh " 558 bool hasTransformation =
false;
565 for (
const label patchi : procPatches)
568 const auto& procPatch = refCast<const processorPolyPatch>(
pp);
573 pointField patchInfo(procPatch.nPoints(), nullValue);
575 const labelList& meshPts = procPatch.meshPoints();
576 const labelList& nbrPts = procPatch.neighbPoints();
580 label nbrPointi = nbrPts[pointi];
581 if (nbrPointi >= 0 && nbrPointi < patchInfo.size())
583 patchInfo[nbrPointi] =
points[meshPts[pointi]];
590 procPatch.neighbProcNo()
599 for (
const label patchi : procPatches)
602 const auto& procPatch = refCast<const processorPolyPatch>(
pp);
613 procPatch.neighbProcNo()
615 fromNbr >> nbrPatchInfo;
618 nbrPatchInfo.setSize(procPatch.nPoints(), nullValue);
620 if (!procPatch.parallel())
622 hasTransformation =
true;
625 else if (procPatch.separated())
627 hasTransformation =
true;
628 separateList(-procPatch.separation(), nbrPatchInfo);
631 const labelList& meshPts = procPatch.meshPoints();
635 label meshPointi = meshPts[pointi];
636 points[meshPointi] = nbrPatchInfo[pointi];
647 if (cpp && cpp->
owner())
651 const auto& cycPatch = *cpp;
654 const edgeList& coupledPoints = cycPatch.coupledPoints();
655 const labelList& meshPts = cycPatch.meshPoints();
656 const labelList& nbrMeshPts = nbrPatch.meshPoints();
662 const edge&
e = coupledPoints[i];
663 label point0 = meshPts[
e[0]];
664 half0Values[i] =
points[point0];
667 if (!cycPatch.parallel())
669 hasTransformation =
true;
672 else if (cycPatch.separated())
674 hasTransformation =
true;
675 separateList(cycPatch.separation(), half0Values);
680 const edge&
e = coupledPoints[i];
681 label point1 = nbrMeshPts[
e[1]];
682 points[point1] = half0Values[i];
696 if (hasTransformation)
699 <<
"There are decomposed cyclics in this mesh with" 700 <<
" transformations." <<
endl 701 <<
"This is not supported. The result will be incorrect" 731 int main(
int argc,
char *argv[])
735 "Create patches out of selected boundary faces, which are either" 736 " from existing patches or from a faceSet" 746 "Write obj files showing the cyclic matching process" 755 const bool overwrite =
args.
found(
"overwrite");
759 const bool writeObj =
args.
found(
"writeObj");
787 const auto&
dict = dicts[meshi];
790 matchPatchIDs[meshi].
setSize(patchSources.size());
791 matchMethods[meshi].setSize(patchSources.size());
792 patchInfoDicts[meshi].setSize(patchSources.size());
795 forAll(patchSources, sourcei)
797 const auto& pDict = patchSources[sourcei];
805 patchInfoDicts[meshi].set
810 dictionary& patchDict = patchInfoDicts[meshi][sourcei];
811 if (patchDict.
found(
"AMIMethod"))
813 matchMethods[meshi][sourcei] = patchDict.
get<
word>(
"AMIMethod");
816 patchDict.
add(
"requireMatch",
false);
822 matchPatchIDs[meshi][sourcei] =
826 if (pDict.get<
word>(
"constructFrom") ==
"autoPatch")
828 interRegionSources[meshi].append(sourcei);
908 bool noFields =
true;
909 for (
const auto& d : patchInfoDicts[meshi])
911 if (d.found(
"patchFields"))
954 dumpCyclicMatch(
"initial_",
mesh);
964 forAll(patchSources, sourcei)
978 dictionary patchDict(patchInfoDicts[meshi][sourcei]);
979 patchDict.
set(
"nFaces", 0);
980 patchDict.
set(
"startFace", 0);
983 if (sourceType ==
"autoPatch")
988 forAll(interfaceMesh0, inti)
990 const labelList& allMeshes0 = interfaceMesh0[inti];
991 const wordList& allNames0 = interfaceNames0[inti];
992 const labelList& allMeshes1 = interfaceMesh1[inti];
993 const wordList& allNames1 = interfaceNames1[inti];
997 interfaceSource0[inti] == sourcei
998 && allMeshes0[sourcei] == meshi
1002 const label sourcej = interfaceSource1[inti];
1003 const word& patchName = allNames0[sourcei];
1007 const auto& mesh1 =
meshes[allMeshes1[sourcej]];
1008 allDict.
set(
"sampleRegion", mesh1.
name());
1009 const auto& destPatch = allNames1[sourcej];
1010 allDict.
set(
"samplePatch", destPatch);
1011 allDict.set(
"neighbourPatch", destPatch);
1013 Info<<
"Adding new patch " << patchName
1014 <<
" from " << allDict <<
endl;
1038 forAll(interfaceMesh1, inti)
1040 const labelList& allMeshes0 = interfaceMesh0[inti];
1041 const wordList& allNames0 = interfaceNames0[inti];
1042 const labelList& allMeshes1 = interfaceMesh1[inti];
1043 const wordList& allNames1 = interfaceNames1[inti];
1047 interfaceSource1[inti] == sourcei
1048 && allMeshes1[sourcei] == meshi
1053 const label sourcej = interfaceSource0[inti];
1054 const word& patchName = allNames1[sourcei];
1058 const auto& destPatch = allNames0[sourcej];
1059 const auto& mesh0 =
meshes[allMeshes0[sourcej]];
1060 allDict.
set(
"sampleRegion", mesh0.
name());
1061 allDict.
set(
"samplePatch", destPatch);
1062 allDict.set(
"neighbourPatch", destPatch);
1064 Info<<
"Adding new patch " << patchName
1065 <<
" from " << allDict <<
endl;
1093 Info<<
"Adding new patch " << patchName
1094 <<
" from " << patchDict <<
endl;
1136 const bool pointSync(
dict.
get<
bool>(
"pointSync"));
1148 forAll(patchSources, sourcei)
1151 const word patchName
1162 if (sourceType ==
"autoPatch")
1164 forAll(interfaceMesh0, inti)
1166 const labelList& allMeshes0 = interfaceMesh0[inti];
1167 const wordList& allNames0 = interfaceNames0[inti];
1168 const auto& allFaces0 = interfaceFaces0[inti];
1170 const labelList& allMeshes1 = interfaceMesh1[inti];
1171 const wordList& allNames1 = interfaceNames1[inti];
1172 const auto& allFaces1 = interfaceFaces1[inti];
1176 interfaceSource0[inti] == sourcei
1177 && allMeshes0[sourcei] == meshi
1182 const label destPatchi =
1196 isRepatchedBoundary,
1202 interfaceSource1[inti] == sourcei
1203 && allMeshes1[sourcei] == meshi
1208 const label destPatchi =
1222 isRepatchedBoundary,
1228 else if (sourceType ==
"patches")
1237 for (
const label patchi : patchSources)
1241 Info<<
"Moving faces from patch " <<
pp.name()
1242 <<
" to patch " << destPatchi <<
endl;
1249 isRepatchedBoundary,
1254 else if (sourceType ==
"set")
1262 <<
" faces from faceSet " <<
set.name() <<
endl;
1272 isRepatchedBoundary,
1279 <<
"Invalid source type " << sourceType <<
endl 1280 <<
"Valid source types are 'patches' 'set'" 1288 Info<<
"Doing topology modification to order faces." <<
nl <<
endl;
1291 if (map().hasMotionPoints())
1307 const auto& oldToNew = map().reverseFaceMap();
1308 forAll(interfaceMesh0, inti)
1310 const labelList& allMeshes0 = interfaceMesh0[inti];
1311 forAll(allMeshes0, sourcei)
1313 if (allMeshes0[sourcei] == meshi)
1319 forAll(interfaceMesh1, inti)
1321 const labelList& allMeshes1 = interfaceMesh1[inti];
1322 forAll(allMeshes1, sourcei)
1324 if (allMeshes1[sourcei] == meshi)
1334 dumpCyclicMatch(
"coupled_",
mesh);
1340 Info<<
"Not synchronising points." <<
nl <<
endl;
1344 Info<<
"Synchronising points." <<
nl <<
endl;
1357 if (
pp.size() && isA<coupledPolyPatch>(
pp))
1360 refCast<const coupledPolyPatch>(
pp);
1364 Info<<
"On coupled patch " <<
pp.name()
1365 <<
" separation[0] was " 1368 if (isA<cyclicPolyPatch>(
pp) &&
pp.size())
1371 refCast<const cyclicPolyPatch>(
pp);
1380 Info<<
"On cyclic translation patch " 1382 <<
" forcing uniform separation of " 1383 << cycpp.separationVector() <<
endl;
1389 const auto& nbr = cycpp.neighbPatch();
1399 Info<<
"On coupled patch " <<
pp.name()
1400 <<
" forcing uniform separation of " 1405 Info<<
"On coupled patch " <<
pp.name()
1406 <<
" forcing uniform rotation of " 1418 Info<<
"On coupled patch " <<
pp.name()
1419 <<
" forcing uniform rotation of " 1425 Info<<
"Synchronising points." <<
endl;
1434 point(GREAT, GREAT, GREAT)
1448 Info<<
"Removing patches with no faces in them." <<
nl <<
endl;
1452 forAll(oldPatchNames, patchi)
1454 const word& pName = oldPatchNames[patchi];
1457 Info<<
"Removed zero-sized patch " << pName
1458 <<
" type " << oldPatchTypes[patchi]
1459 <<
" at position " << patchi <<
endl;
1466 dumpCyclicMatch(
"final_",
mesh);
label findPatchID(const word &patchName, const bool allowNotFound=true) const
Find patch index given a name, return -1 if not found.
const labelList & sharedPointLabels() const
Return indices of local points that are globally shared.
virtual const fileName & name() const
Get the name of the output serial stream. (eg, the name of the Fstream file name) ...
ITstream & lookup(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return an entry data stream. FatalIOError if not found, or not a stream. ...
void clearOut()
Clear all geometry and addressing.
label nPoints() const
Number of points supporting patch faces.
scalar diff(const triad &A, const triad &B)
Return a quantity of the difference between two triads.
static void noFunctionObjects(bool addWithOption=false)
Remove '-noFunctionObjects' option and ignore any occurrences.
static void addNote(const string ¬e)
Add extra notes for the usage information.
void size(const label n)
Older name for setAddressableSize.
static void removeFiles(const polyMesh &mesh)
Helper: remove all procAddressing files from mesh instance.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1)
"blocking" : (MPI_Bsend, MPI_Recv)
void set(const bitSet &bitset)
Set specified bits from another bitset.
A class for handling file names.
wordList ReadFields(const typename GeoMesh::Mesh &mesh, const IOobjectList &objects, PtrList< GeometricField< Type, PatchField, GeoMesh >> &fields, const bool syncPar=true, const bool readOldTime=false)
Read Geometric fields of templated type.
virtual bool separated() const
Are the planes separated.
List of IOobjects with searching and retrieving facilities. Implemented as a HashTable, so the various sorted methods should be used if traversing in parallel.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Class describing modification of a face.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
label nPoints() const noexcept
Number of mesh points.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const word & name() const noexcept
Return the object name.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
Various mesh related information for a parallel run. Upon construction, constructs all info using par...
Output to file stream, using an OSstream.
const labelList & processorPatches() const noexcept
Return list of processor patch labels.
constexpr char nl
The newline '\n' character (0x0a)
const word dictName("faMeshDefinition")
const DynamicList< label > & region() const
Ostream & endl(Ostream &os)
Add newline and flush stream.
virtual void movePoints(const pointField &)
Move points, returns volumes swept by faces in motion.
static bool & parRun() noexcept
Test if this a parallel run.
static unsigned int defaultPrecision() noexcept
Return the default precision.
static void addBoolOption(const word &optName, const string &usage="", bool advanced=false)
Add a bool option to validOptions with usage information.
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
void setCapacity(const label len)
Alter the size of the underlying storage.
entry * add(entry *entryPtr, bool mergeEntry=false)
Add a new entry.
label whichFace(const label globalCellID) const
Helper function to re-direct to zone::localID(...)
Field reading functions for post-processing utilities.
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T. FatalIOError if not found, or if the number of tokens is incorrect.
wordList types() const
Return a list of patch types.
autoPtr< mapPolyMesh > changeMesh(polyMesh &mesh, const labelUList &patchMap, const bool inflate, const bool syncParallel=true, const bool orderCells=false, const bool orderPoints=false)
Inplace changes mesh without change of patches.
labelList faceLabels(nFaceLabels)
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.
virtual const vectorField & separation() const
If the planes are separated the separation vector.
bool isInternalFace(const label faceIndex) const noexcept
Return true if given face label is internal to the mesh.
virtual const tensorField & forwardT() const
Return face transformation tensor.
bool found(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find an entry (const access) with the given keyword.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
virtual const pointField & points() const
Return raw points.
#define forAll(list, i)
Loop across all elements in list.
Input inter-processor communications stream.
points setSize(newPointi)
virtual bool parallel() const
Are the cyclic planes parallel.
virtual bool owner() const
Does this side own the patch ?
static void removeFiles(const polyMesh &)
Helper: remove all sets files from mesh instance.
label nGlobalPoints() const
Return number of globally shared points.
vectorField pointField
pointField is a vectorField.
const dimensionedScalar e
Elementary charge.
const fileName & pointsInstance() const
Return the current instance directory for points.
void setSize(const label n)
Alias for resize()
virtual void updateMesh(const mapPolyMesh &mpm)
Update mesh corresponding to the given map.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
An edge is a list of two vertex labels. This can correspond to a directed graph edge or an edge on a ...
labelList identity(const label len, label start=0)
Return an identity map of the given length with (map[i] == i)
const polyBoundaryMesh & boundaryMesh() const noexcept
Return boundary mesh.
A class for handling words, derived from Foam::string.
wordList names() const
Return a list of patch names.
label size() const noexcept
The number of entries in the list.
wordList patchNames(nPatches)
Foam::PtrList< Foam::fvMesh > meshes(regionNames.size())
virtual const labelList & faceOwner() const
Return face owner.
static const word null
An empty word.
A List of wordRe with additional matching capabilities.
static void addOption(const word &optName, const string ¶m="", const string &usage="", bool advanced=false)
Add an option to validOptions with usage information.
const globalMeshData & globalData() const
Return parallel info.
label nInternalFaces() const noexcept
Number of internal faces.
void append(const T &val)
Copy append an element to the end of this list.
virtual const faceList & faces() const
Return raw faces.
errorManip< error > abort(error &err)
const T * set(const label i) const
Return const pointer to element (can be nullptr), or nullptr for out-of-range access (ie...
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
virtual bool write(const bool writeOnProc=true) const
Write mesh using IO settings from time.
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO...
bool checkParallelSync(const bool report=false) const
Check whether all procs have all patches and in same order.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
static word timeName(const scalar t, const int precision=precision_)
Return time name of given scalar time formatted with the given precision.
static std::string name(const std::string &str)
Return basename (part beyond last /), including its extension.
Type gMax(const FieldField< Field, Type > &f)
DynamicList< T, SizeMin > & shrink()
Shrink the allocated space to the number of elements used.
const faceZoneMesh & faceZones() const noexcept
Return face zone mesh.
defineTemplateTypeNameAndDebug(faScalarMatrix, 0)
void clear() noexcept
Clear the addressed list, i.e. set the size to zero.
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
Find and return a sub-dictionary as a copy, otherwise return an empty dictionary. ...
Output inter-processor communications stream.
T & last()
Access last element of the list, position [size()-1].
const fileName & instance() const noexcept
Read access to instance path component.
label whichZone(const label objectIndex) const
Given a global object index, return the zone it is in.
const vectorField & faceCentres() const
List< word > wordList
List of word.
virtual const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
A PtrList of objects of type <T> with automated input and output.
void transformList(const tensor &rotTensor, UList< T > &field)
Inplace transform a list of elements.
void inplaceRenumber(const labelUList &oldToNew, IntListType &input)
Inplace renumber the values (not the indices) of a list.
vector point
Point is a vector.
void setInstance(const fileName &instance, const IOobjectOption::writeOption wOpt=IOobject::AUTO_WRITE)
Set the instance for mesh files.
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
#define WarningInFunction
Report a warning using Foam::Warning.
const word & name() const
Return reference to name.
Type gAverage(const FieldField< Field, Type > &f)
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
Mesh data needed to do the Finite Volume discretisation.
List< Key > sortedToc() const
The table of contents (the keys) in sorted order.
Direct mesh changes based on v1.3 polyTopoChange syntax.
const polyBoundaryMesh & patches
static const word & calculatedType() noexcept
The type name for calculated patch fields.
const boolList & flipMap() const noexcept
Return face flip map.
List< label > sortedToc(const UList< bool > &bools)
Return the (sorted) values corresponding to 'true' entries.
messageStream Info
Information stream (stdout output on master, null elsewhere)
labelHashSet patchSet(const UList< wordRe > &patchNames, const bool warnNotFound=true, const bool useGroups=true) const
Return the set of patch IDs corresponding to the given names.
static autoPtr< polyPatch > New(const word &patchType, const word &name, const label size, const label start, const label index, const polyBoundaryMesh &bm)
Return pointer to a new patch created on freestore from components.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Mesh consisting of general polyhedral cells.
entry * set(entry *entryPtr)
Assign a new entry, overwriting any existing entry.
static autoPtr< AMIInterpolation > New(const word &modelName, const dictionary &dict, const bool reverseTarget=false)
Selector for dictionary.
A subset of mesh faces organised as a primitive patch.
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T, or return the given default value. FatalIOError if it is found and the number of...
List< label > labelList
A List of labels.
const cyclicPolyPatch & neighbPatch() const
A patch is a list of labels that address the faces in the global face list.
label nBoundaryFaces() const noexcept
Number of boundary faces (== nFaces - nInternalFaces)
Foam::argList args(argc, argv)
const labelList & sharedPointAddr() const
Return addressing into the complete globally shared points.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
bool found(const word &optName) const
Return true if the named option is found.
bool set(const Key &key, const T &obj)
Copy assign a new entry, overwriting existing entries.
uindirectPrimitivePatch pp(UIndirectList< face >(mesh.faces(), faceLabels), mesh.points())
static void listCombineReduce(List< T > &values, const CombineOp &cop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
After completion all processors have the same data.
label setAction(const topoAction &action)
For compatibility with polyTopoChange: set topological action.
static constexpr const zero Zero
Global zero (0)