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()
151 auto& intMesh0 = interfaceMesh0.
emplace_back(nSourcei, -1);
152 intMesh0[sourcei] = meshi;
156 auto& intPatch0 = interfacePatch0.
emplace_back(nSourcei, -1);
157 intPatch0[sourcei] = ppi.index();
159 auto& intNames0 = interfaceNames0.
emplace_back(nSourcei);
167 auto& intMesh1 = interfaceMesh1.
emplace_back(nSourcej, -1);
168 intMesh1[sourcej] = meshj;
172 auto& intPatch1 = interfacePatch1.
emplace_back(nSourcej, -1);
173 intPatch1[sourcej] = ppj.index();
175 auto& intNames1 = interfaceNames1.
emplace_back(nSourcej);
179 auto& intFaces0 = interfaceFaces0.
emplace_back(nSourcei);
183 auto& intFaces1 = interfaceFaces1.
emplace_back(nSourcej);
198 const scalarField& weights = AMPtr->srcWeightsSum();
202 const scalar
sum = weights[facei];
210 targetMask = AMPtr->interpolateToTarget(mask);
215 const scalarField& weights = AMPtr->tgtWeightsSum();
219 const scalar
sum = weights[facei];
227 sourceMask = AMPtr->interpolateToSource(mask);
231 const scalarField& weights = AMPtr->srcWeightsSum();
234 if (weights[facei] > 0.5 || sourceMask[facei] > SMALL)
241 const scalarField& weights = AMPtr->tgtWeightsSum();
244 if (weights[facei] > 0.5 || targetMask[facei] > SMALL)
261 const bool includeOwn,
287 const label meshjStart(includeOwn ? meshi : meshi+1);
289 for (label meshj = meshjStart; meshj <
meshes.
size(); meshj++)
293 for (
const label sourcei : interRegionSources[meshi])
295 const labelList& patchesi = allPatchesi[sourcei];
297 for (
const label sourcej : interRegionSources[meshj])
299 const labelList& patchesj = allPatchesj[sourcej];
309 AMIMethods[meshi][sourcei].size()
310 ? AMIMethods[meshi][sourcei]
311 : faceAreaWeightAMI2D::typeName
313 patchInfoDicts[meshi][sourcei],
355 bool zoneFlip =
false;
387 bitSet& isRepatchedBoundary,
397 <<
" is not an external face of the mesh." <<
endl 398 <<
"This application can only repatch" 404 static label nWarnings = 0;
407 const label newPatchi = meshMod.
region()[facei];
412 <<
" marked for patch " <<
patchID 414 <<
" is already marked for patch " << newPatchi
416 <<
". Suppressing further warnings" 435 if (cpp && cpp->
owner())
437 const auto& cycPatch = *cpp;
442 OFstream str(prefix+cycPatch.name()+
".obj");
443 Pout<<
"Dumping " << cycPatch.
name()
444 <<
" faces to " << str.
name() <<
endl;
454 OFstream str(prefix+nbrPatch.name()+
".obj");
455 Pout<<
"Dumping " << nbrPatch.
name()
456 <<
" faces to " << str.
name() <<
endl;
467 OFstream str(prefix+cycPatch.name()+nbrPatch.name()+
"_match.obj");
470 Pout<<
"Dumping cyclic match as lines between face centres to " 482 str<<
"l " << vertI-1 <<
' ' << vertI <<
nl;
495 if (separation.
size() == 1)
501 field[i] += separation[0];
504 else if (separation.
size() ==
field.size())
508 field[i] += separation[i];
514 <<
"Sizes of field and transformation not equal. field:" 515 <<
field.size() <<
" transformation:" << separation.
size()
522 template<
class CombineOp>
527 const CombineOp& cop,
528 const point& nullValue
535 <<
" is not equal to the number of points in the mesh " 542 bool hasTransformation =
false;
549 for (
const label patchi : procPatches)
552 const auto& procPatch = refCast<const processorPolyPatch>(
pp);
557 pointField patchInfo(procPatch.nPoints(), nullValue);
559 const labelList& meshPts = procPatch.meshPoints();
560 const labelList& nbrPts = procPatch.neighbPoints();
564 label nbrPointi = nbrPts[pointi];
565 if (nbrPointi >= 0 && nbrPointi < patchInfo.size())
567 patchInfo[nbrPointi] =
points[meshPts[pointi]];
574 procPatch.neighbProcNo()
583 for (
const label patchi : procPatches)
586 const auto& procPatch = refCast<const processorPolyPatch>(
pp);
597 nbrPatchInfo.
setSize(procPatch.nPoints(), nullValue);
599 if (!procPatch.parallel())
601 hasTransformation =
true;
604 else if (procPatch.separated())
606 hasTransformation =
true;
607 separateList(-procPatch.separation(), nbrPatchInfo);
610 const labelList& meshPts = procPatch.meshPoints();
614 label meshPointi = meshPts[pointi];
615 points[meshPointi] = nbrPatchInfo[pointi];
626 if (cpp && cpp->
owner())
630 const auto& cycPatch = *cpp;
633 const edgeList& coupledPoints = cycPatch.coupledPoints();
634 const labelList& meshPts = cycPatch.meshPoints();
635 const labelList& nbrMeshPts = nbrPatch.meshPoints();
641 const edge&
e = coupledPoints[i];
642 label point0 = meshPts[
e[0]];
643 half0Values[i] =
points[point0];
646 if (!cycPatch.parallel())
648 hasTransformation =
true;
651 else if (cycPatch.separated())
653 hasTransformation =
true;
654 separateList(cycPatch.separation(), half0Values);
659 const edge&
e = coupledPoints[i];
660 label point1 = nbrMeshPts[
e[1]];
661 points[point1] = half0Values[i];
675 if (hasTransformation)
678 <<
"There are decomposed cyclics in this mesh with" 679 <<
" transformations." <<
endl 680 <<
"This is not supported. The result will be incorrect" 710 int main(
int argc,
char *argv[])
714 "Create patches out of selected boundary faces, which are either" 715 " from existing patches or from a faceSet" 725 "Write obj files showing the cyclic matching process" 734 const bool overwrite =
args.
found(
"overwrite");
738 const bool writeObj =
args.
found(
"writeObj");
766 const auto&
dict = dicts[meshi];
769 matchPatchIDs[meshi].
setSize(patchSources.size());
770 matchMethods[meshi].setSize(patchSources.size());
771 patchInfoDicts[meshi].setSize(patchSources.size());
774 forAll(patchSources, sourcei)
776 const auto& pDict = patchSources[sourcei];
784 patchInfoDicts[meshi].set
789 dictionary& patchDict = patchInfoDicts[meshi][sourcei];
790 if (patchDict.
found(
"AMIMethod"))
792 matchMethods[meshi][sourcei] = patchDict.
get<
word>(
"AMIMethod");
795 patchDict.
add(
"requireMatch",
false);
801 matchPatchIDs[meshi][sourcei] =
805 if (pDict.get<
word>(
"constructFrom") ==
"autoPatch")
807 interRegionSources[meshi].push_back(sourcei);
887 bool noFields =
true;
888 for (
const auto& d : patchInfoDicts[meshi])
890 if (d.found(
"patchFields"))
933 dumpCyclicMatch(
"initial_",
mesh);
943 forAll(patchSources, sourcei)
957 dictionary patchDict(patchInfoDicts[meshi][sourcei]);
958 patchDict.
set(
"nFaces", 0);
959 patchDict.
set(
"startFace", 0);
962 if (sourceType ==
"autoPatch")
967 forAll(interfaceMesh0, inti)
969 const labelList& allMeshes0 = interfaceMesh0[inti];
970 const wordList& allNames0 = interfaceNames0[inti];
971 const labelList& allMeshes1 = interfaceMesh1[inti];
972 const wordList& allNames1 = interfaceNames1[inti];
976 interfaceSource0[inti] == sourcei
977 && allMeshes0[sourcei] == meshi
981 const label sourcej = interfaceSource1[inti];
982 const word& patchName = allNames0[sourcei];
986 const auto& mesh1 =
meshes[allMeshes1[sourcej]];
987 allDict.
set(
"sampleRegion", mesh1.
name());
988 const auto& destPatch = allNames1[sourcej];
989 allDict.
set(
"samplePatch", destPatch);
990 allDict.set(
"neighbourPatch", destPatch);
992 Info<<
"Adding new patch " << patchName
993 <<
" from " << allDict <<
endl;
1017 forAll(interfaceMesh1, inti)
1019 const labelList& allMeshes0 = interfaceMesh0[inti];
1020 const wordList& allNames0 = interfaceNames0[inti];
1021 const labelList& allMeshes1 = interfaceMesh1[inti];
1022 const wordList& allNames1 = interfaceNames1[inti];
1026 interfaceSource1[inti] == sourcei
1027 && allMeshes1[sourcei] == meshi
1032 const label sourcej = interfaceSource0[inti];
1033 const word& patchName = allNames1[sourcei];
1037 const auto& destPatch = allNames0[sourcej];
1038 const auto& mesh0 =
meshes[allMeshes0[sourcej]];
1039 allDict.
set(
"sampleRegion", mesh0.
name());
1040 allDict.
set(
"samplePatch", destPatch);
1041 allDict.set(
"neighbourPatch", destPatch);
1043 Info<<
"Adding new patch " << patchName
1044 <<
" from " << allDict <<
endl;
1072 Info<<
"Adding new patch " << patchName
1073 <<
" from " << patchDict <<
endl;
1115 const bool pointSync(
dict.
get<
bool>(
"pointSync"));
1127 forAll(patchSources, sourcei)
1130 const word patchName
1141 if (sourceType ==
"autoPatch")
1143 forAll(interfaceMesh0, inti)
1145 const labelList& allMeshes0 = interfaceMesh0[inti];
1146 const wordList& allNames0 = interfaceNames0[inti];
1147 const auto& allFaces0 = interfaceFaces0[inti];
1149 const labelList& allMeshes1 = interfaceMesh1[inti];
1150 const wordList& allNames1 = interfaceNames1[inti];
1151 const auto& allFaces1 = interfaceFaces1[inti];
1155 interfaceSource0[inti] == sourcei
1156 && allMeshes0[sourcei] == meshi
1161 const label destPatchi =
1175 isRepatchedBoundary,
1181 interfaceSource1[inti] == sourcei
1182 && allMeshes1[sourcei] == meshi
1187 const label destPatchi =
1201 isRepatchedBoundary,
1207 else if (sourceType ==
"patches")
1216 for (
const label patchi : patchSources)
1220 Info<<
"Moving faces from patch " <<
pp.name()
1221 <<
" to patch " << destPatchi <<
endl;
1228 isRepatchedBoundary,
1233 else if (sourceType ==
"set")
1241 <<
" faces from faceSet " <<
set.name() <<
endl;
1251 isRepatchedBoundary,
1258 <<
"Invalid source type " << sourceType <<
endl 1259 <<
"Valid source types are 'patches' 'set'" 1267 Info<<
"Doing topology modification to order faces." <<
nl <<
endl;
1270 if (map().hasMotionPoints())
1286 const auto& oldToNew = map().reverseFaceMap();
1287 forAll(interfaceMesh0, inti)
1289 const labelList& allMeshes0 = interfaceMesh0[inti];
1290 forAll(allMeshes0, sourcei)
1292 if (allMeshes0[sourcei] == meshi)
1298 forAll(interfaceMesh1, inti)
1300 const labelList& allMeshes1 = interfaceMesh1[inti];
1301 forAll(allMeshes1, sourcei)
1303 if (allMeshes1[sourcei] == meshi)
1313 dumpCyclicMatch(
"coupled_",
mesh);
1319 Info<<
"Not synchronising points." <<
nl <<
endl;
1323 Info<<
"Synchronising points." <<
nl <<
endl;
1336 if (
pp.size() && isA<coupledPolyPatch>(
pp))
1339 refCast<const coupledPolyPatch>(
pp);
1343 Info<<
"On coupled patch " <<
pp.name()
1344 <<
" separation[0] was " 1347 if (isA<cyclicPolyPatch>(
pp) &&
pp.size())
1350 refCast<const cyclicPolyPatch>(
pp);
1359 Info<<
"On cyclic translation patch " 1361 <<
" forcing uniform separation of " 1362 << cycpp.separationVector() <<
endl;
1368 const auto& nbr = cycpp.neighbPatch();
1378 Info<<
"On coupled patch " <<
pp.name()
1379 <<
" forcing uniform separation of " 1384 Info<<
"On coupled patch " <<
pp.name()
1385 <<
" forcing uniform rotation of " 1397 Info<<
"On coupled patch " <<
pp.name()
1398 <<
" forcing uniform rotation of " 1404 Info<<
"Synchronising points." <<
endl;
1413 point(GREAT, GREAT, GREAT)
1427 Info<<
"Removing patches with no faces in them." <<
nl <<
endl;
1431 forAll(oldPatchNames, patchi)
1433 const word& pName = oldPatchNames[patchi];
1436 Info<<
"Removed zero-sized patch " << pName
1437 <<
" type " << oldPatchTypes[patchi]
1438 <<
" at position " << patchi <<
endl;
1445 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.
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. ...
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)
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.
labelHashSet patchSet(const UList< wordRe > &select, const bool warnNotFound=true, const bool useGroups=true) const
Return the set of patch IDs corresponding to the given names.
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 as an OSstream, normally using std::ofstream for the actual output...
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.
void clearOut(const bool isMeshUpdate=false)
Clear all geometry and addressing.
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.
virtual const fileName & name() const override
Get the name of the output serial stream. (eg, the name of the Fstream file name) ...
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.
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.
static void recv(Type &value, const int fromProcNo, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm, IOstreamOption::streamFormat fmt=IOstreamOption::BINARY)
Receive and deserialize a value. Uses operator>> for de-serialization.
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 expressions::valueTypeCode::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), works like std::iota() but returning a...
const polyBoundaryMesh & boundaryMesh() const noexcept
Return boundary mesh.
A class for handling words, derived from Foam::string.
T & emplace_back(Args &&... args)
Construct an element at the end of the list, return reference to the new list element.
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 (demand-driven)
label nInternalFaces() const noexcept
Number of internal faces.
virtual const faceList & faces() const
Return raw faces.
static unsigned int minPrecision(unsigned int prec) noexcept
Set the minimum default precision.
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 a time name for the given scalar time value 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()
Calls shrink_to_fit() and returns a reference to the DynamicList.
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.
void push_back(const T &val)
Copy append an element to the end of this list.
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
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 within 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)
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...
"buffered" : (MPI_Bsend, MPI_Recv)
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 list.
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)
Combines List elements. 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)