106 using namespace Foam;
111 const word standardRegionName(
"region");
127 forAll(patchesToRename, i)
134 patches.renamePatches(newNames,
true);
138 template<
class GeoField>
152 mesh.objectRegistry::lookupClass<GeoField>()
156 const GeoField&
fld = *iter();
178 tSubFld.ref().boundaryFieldRef()[
patchi] ==
179 typename GeoField::value_type(
Zero);
184 GeoField* subFld = tSubFld.ptr();
185 subFld->rename(
fld.name());
192 template<
class GeoField>
193 void subsetSurfaceFields
206 mesh.objectRegistry::lookupClass<GeoField>()
210 const GeoField&
fld = *iter();
227 GeoField* subFld = tSubFld.ptr();
228 subFld->rename(
fld.name());
240 if (cellRegion[celli] != regioni)
242 nonRegionCells.append(celli);
245 return nonRegionCells.shrink();
253 const label ownRegion,
254 const label neiRegion,
260 min(ownRegion, neiRegion),
261 max(ownRegion, neiRegion)
269 if (iter != regionsToSize.
end())
273 if (zoneFnd != iter().end())
288 zoneToSize.
insert(zoneID, 1);
289 regionsToSize.
insert(interface, zoneToSize);
297 const bool useFaceZones,
305 if (zones.size() == 0)
309 else if (zones.size() == 1)
316 <<
"Face " << facei <<
" is in more than one zone " << zones
331 void getInterfaceSizes
334 const bool useFaceZones,
357 if (ownRegion != neiRegion)
362 whichZone(
mesh, useFaceZones, facei),
379 coupledRegion[i] = cellRegion[celli];
387 label neiRegion = coupledRegion[i];
389 if (ownRegion != neiRegion)
394 whichZone(
mesh, useFaceZones, facei),
422 regionsToSize.
find(slaveIter.key());
424 if (masterIter != regionsToSize.
end())
432 label zoneID = iter.key();
433 label slaveSize = iter();
439 if (zoneFnd != masterInfo.
end())
441 zoneFnd() += slaveSize;
445 masterInfo.
insert(zoneID, slaveSize);
451 regionsToSize.
insert(slaveIter.key(), slaveIter());
465 toMaster << regionsToSize;
478 label nInterfaces = 0;
482 nInterfaces += info.
size();
485 interfaces.
setSize(nInterfaces);
486 interfaceNames.
setSize(nInterfaces);
487 interfaceSizes.
setSize(nInterfaces);
493 const edge&
e = iter.key();
500 interfaces[nInterfaces] = iter.key();
501 label zoneID = infoIter.key();
506 name0 +
"_to_" + name1,
507 name1 +
"_to_" + name0
515 zoneName +
"_" + name0 +
"_to_" + name1,
516 zoneName +
"_" + name1 +
"_to_" + name0
519 interfaceSizes[nInterfaces] = infoIter();
521 if (regionsToInterface.found(
e))
523 regionsToInterface[
e].insert(zoneID, nInterfaces);
528 zoneAndInterface.
insert(zoneID, nInterfaces);
529 regionsToInterface.insert(
e, zoneAndInterface);
551 if (ownRegion != neiRegion)
553 const label zoneID = whichZone(
mesh, useFaceZones, facei);
557 min(ownRegion, neiRegion),
558 max(ownRegion, neiRegion)
561 faceToInterface[facei] = regionsToInterface[interface][zoneID];
568 label neiRegion = coupledRegion[i];
570 if (ownRegion != neiRegion)
572 const label zoneID = whichZone(
mesh, useFaceZones, facei);
576 min(ownRegion, neiRegion),
577 max(ownRegion, neiRegion)
580 faceToInterface[facei] = regionsToInterface[interface][zoneID];
607 coupledRegion[i] = cellRegion[celli];
619 labelList cellsToRemove(getNonRegionCells(cellRegion, regioni));
624 labelList exposedFaces = cellRemover.getExposedFaces(cellsToRemove);
629 label facei = exposedFaces[i];
630 label interfacei = faceToInterface[facei];
633 label neiRegion = -1;
648 label otherRegion = -1;
650 if (ownRegion == regioni && neiRegion != regioni)
652 otherRegion = neiRegion;
654 else if (ownRegion != regioni && neiRegion == regioni)
656 otherRegion = ownRegion;
661 <<
"Exposed face:" << facei
663 <<
" has owner region " << ownRegion
664 <<
" and neighbour region " << neiRegion
665 <<
" when handling region:" << regioni
670 if (regioni < otherRegion)
672 exposedPatchIDs[i] = interfacePatches[interfacei];
676 exposedPatchIDs[i] = interfacePatches[interfacei]+1;
681 cellRemover.setRefinement
707 void createAndWriteRegion
712 const bool prefixRegion,
716 const word& newMeshInstance
719 Info<<
"Creating mesh for region " << regioni
737 forAll(interfacePatches, interfacei)
739 addedPatches.
insert(interfacePatches[interfacei]);
740 addedPatches.
insert(interfacePatches[interfacei]+1);
747 newMesh().topoChange(map());
750 subsetVolFields<volScalarField>
758 subsetVolFields<volVectorField>
766 subsetVolFields<volSphericalTensorField>
774 subsetVolFields<volSymmTensorField>
782 subsetVolFields<volTensorField>
791 subsetSurfaceFields<surfaceScalarField>
799 subsetSurfaceFields<surfaceVectorField>
807 subsetSurfaceFields<surfaceSphericalTensorField>
815 subsetSurfaceFields<surfaceSymmTensorField>
823 subsetSurfaceFields<surfaceTensorField>
844 Info<<
"Deleting empty patches" <<
endl;
851 if (!isA<processorPolyPatch>(pp))
858 sharedPatches.
append(newI);
870 if (isA<processorPolyPatch>(pp) && pp.
size())
872 oldToNew[
patchi] = newI++;
876 const label nNewPatches = newI;
881 if (oldToNew[
patchi] == -1)
883 oldToNew[
patchi] = newI++;
893 Info<<
"Prefixing patches with region name" <<
endl;
895 renamePatches(newMesh(),
regionNames[regioni], sharedPatches);
901 newMesh().setInstance(newMeshInstance);
905 Info<<
"Writing addressing to base mesh" <<
endl;
911 "pointRegionAddressing",
912 newMesh().facesInstance(),
913 newMesh().meshSubDir,
921 Info<<
"Writing map " << pointProcAddressing.name()
922 <<
" from region" << regioni
923 <<
" points back to base mesh." <<
endl;
924 pointProcAddressing.
write();
930 "faceRegionAddressing",
931 newMesh().facesInstance(),
932 newMesh().meshSubDir,
940 forAll(faceProcAddressing, facei)
944 label oldFacei = map().faceMap()[facei];
948 map().cellMap()[newMesh().faceOwner()[facei]]
952 faceProcAddressing[facei] = oldFacei+1;
956 faceProcAddressing[facei] = -(oldFacei+1);
959 Info<<
"Writing map " << faceProcAddressing.name()
960 <<
" from region" << regioni
961 <<
" faces back to base mesh." <<
endl;
962 faceProcAddressing.
write();
968 "cellRegionAddressing",
969 newMesh().facesInstance(),
970 newMesh().meshSubDir,
978 Info<<
"Writing map " <<cellProcAddressing.name()
979 <<
" from region" << regioni
980 <<
" cells back to base mesh." <<
endl;
981 cellProcAddressing.
write();
1001 forAll(interfaces, interI)
1003 const edge&
e = interfaces[interI];
1004 const Pair<word>& names = interfaceNames[interI];
1038 <<
" " << interfacePatches[interI]
1041 <<
" " << interfacePatches[interI]+1
1048 return interfacePatches;
1053 label findCorrespondingRegion
1057 const label nCellRegions,
1059 const label minOverlapSize
1065 forAll(cellRegion, celli)
1067 if (existingZoneID[celli] == zoneI)
1069 cellsInZone[cellRegion[celli]]++;
1080 if (cellsInZone[regioni] < minOverlapSize)
1088 forAll(cellRegion, celli)
1090 if (cellRegion[celli] == regioni && existingZoneID[celli] != zoneI)
1123 const cellZone& cz = cellZones[zoneI];
1127 label celli = cz[i];
1128 if (zoneID[celli] == -1)
1130 zoneID[celli] = zoneI;
1135 <<
"Cell " << celli <<
" with cell centre "
1137 <<
" is multiple zones. This is not allowed." <<
endl
1138 <<
"It is in zone " << cellZones[zoneID[celli]].
name()
1139 <<
" and in zone " << cellZones[zoneI].
name()
1158 const bool sloppyCellZones,
1161 const label nCellRegions,
1164 const word& defaultRegionName,
1173 regionToZone.
setSize(nCellRegions, -1);
1180 getZoneID(
mesh, cellZones, zoneID, neiZoneID);
1192 if (zoneNames[proci] != zoneNames[0])
1195 <<
"cellZones not synchronised across processors." <<
endl
1196 <<
"Master has cellZones " << zoneNames[0] <<
endl
1197 <<
"Processor " << proci
1198 <<
" has cellZones " << zoneNames[proci]
1207 cellZones[zoneI].size(),
1214 if (sloppyCellZones)
1216 Info<<
"Trying to match regions to existing cell zones;"
1217 <<
" region can be subset of cell zone." <<
nl <<
endl;
1221 label regioni = findCorrespondingRegion
1227 label(0.5*zoneSizes[zoneI])
1232 Info<<
"Sloppily matched region " << regioni
1234 <<
" to zone " << zoneI <<
" size " << zoneSizes[zoneI]
1236 zoneToRegion[zoneI] = regioni;
1237 regionToZone[regioni] = zoneI;
1244 Info<<
"Trying to match regions to existing cell zones." <<
nl <<
endl;
1248 label regioni = findCorrespondingRegion
1259 zoneToRegion[zoneI] = regioni;
1260 regionToZone[regioni] = zoneI;
1266 label nUnmatchedRegions = 0;
1268 forAll(regionToZone, regioni)
1270 if (regionToZone[regioni] == -1)
1272 nUnmatchedRegions++;
1276 if (nUnmatchedRegions)
1278 label nUnmatchedi = 1;
1281 forAll(regionToZone, regioni)
1283 if (regionToZone[regioni] == -1)
1287 nUnmatchedRegions == 1
1288 && defaultRegionName != standardRegionName
1296 defaultRegionName +
Foam::name(nUnmatchedi++);
1321 cellToRegion.write();
1323 Info<<
"Writing region per cell file (for manual decomposition) to "
1324 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1341 zeroGradientFvPatchScalarField::typeName
1343 forAll(cellRegion, celli)
1345 cellToRegion[celli] = cellRegion[celli];
1347 cellToRegion.write();
1349 Info<<
"Writing region per cell as volScalarField to "
1350 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1357 int main(
int argc,
char *argv[])
1361 "splits mesh into multiple regions (detected by walking across faces)"
1369 "additionally split cellZones off into separate regions"
1374 "use cellZones only to split mesh into regions; do not use walking"
1378 "cellZonesFileOnly",
1380 "like -cellZonesOnly, but use specified file"
1386 "specify additional region boundaries that walking does not cross"
1391 "place cells into cellZones instead of splitting mesh"
1396 "only write largest region"
1402 "only write region containing point"
1412 "try to match heuristically regions to existing cell zones"
1417 "use faceZones to patch inter-region faces instead of single patch"
1422 "prefix region name to all patches, not just coupling patches"
1426 "defaultRegionName",
1428 "base name of the unspecified regions, defaults to \"region\""
1433 "do not update fields"
1442 word blockedFacesName;
1445 Info<<
"Reading blocked internal faces from faceSet "
1446 << blockedFacesName <<
nl <<
endl;
1464 (useCellZonesOnly || useCellZonesFile)
1465 && (useCellZones || blockedFacesName.size())
1469 <<
"You cannot specify both -cellZonesOnly or -cellZonesFileOnly"
1470 <<
" (which specify complete split)"
1471 <<
" in combination with -blockedFaces or -cellZones"
1472 <<
" (which imply a split based on topology)"
1479 Info<<
"Using current faceZones to divide inter-region interfaces"
1480 <<
" into multiple patches."
1485 Info<<
"Creating single patch per inter-region interface."
1490 if (insidePoint && largestOnly)
1493 <<
"You cannot specify both -largestOnly"
1494 <<
" (keep region with most cells)"
1495 <<
" and -insidePoint (keep region containing point)"
1499 const word defaultRegionName
1510 getZoneID(
mesh, cellZones, zoneID, neiZoneID);
1529 label nCellRegions = 0;
1530 if (useCellZonesOnly)
1532 Info<<
"Using current cellZones to split mesh into regions."
1533 <<
" This requires all"
1534 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1537 if (unzonedCelli != -1)
1540 <<
"For the cellZonesOnly option all cells "
1541 <<
"have to be in a cellZone." <<
endl
1542 <<
"Cell " << unzonedCelli
1544 <<
" is not in a cellZone. There might be more unzoned cells."
1547 cellRegion = zoneID;
1548 nCellRegions =
gMax(cellRegion)+1;
1549 regionToZone.
setSize(nCellRegions);
1552 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1554 regionToZone[regioni] = regioni;
1555 zoneToRegion[regioni] = regioni;
1559 else if (useCellZonesFile)
1562 Info<<
"Reading split from cellZones file " << zoneFile <<
endl
1563 <<
"This requires all"
1564 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1583 getZoneID(
mesh, newCellZones, newZoneID, newNeiZoneID);
1586 if (unzonedCelli != -1)
1589 <<
"For the cellZonesFileOnly option all cells "
1590 <<
"have to be in a cellZone." <<
endl
1591 <<
"Cell " << unzonedCelli
1593 <<
" is not in a cellZone. There might be more unzoned cells."
1596 cellRegion = newZoneID;
1597 nCellRegions =
gMax(cellRegion)+1;
1598 zoneToRegion.
setSize(newCellZones.size(), -1);
1599 regionToZone.
setSize(nCellRegions);
1601 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1603 regionToZone[regioni] = regioni;
1604 zoneToRegion[regioni] = regioni;
1605 regionNames[regioni] = newCellZones[regioni].name();
1617 if (blockedFacesName.size())
1622 <<
" blocked faces from set " << blockedFacesName <<
nl <<
endl;
1628 blockedFace[iter.key()] =
true;
1642 if (zoneID[own] != zoneID[nei])
1644 blockedFace[facei] =
true;
1655 blockedFace[facei] =
true;
1662 nCellRegions = regions.nRegions();
1680 if (largestOnly || insidePoint)
1682 forAll(regionToZone, regioni)
1684 if (regionToZone[regioni] == -1)
1690 else if (insidePoint)
1694 else if (largestOnly)
1703 Info<<
endl <<
"Number of regions:" << nCellRegions <<
nl <<
endl;
1707 writeCellToRegion(
mesh, cellRegion);
1716 forAll(cellRegion, celli)
1718 regionSizes[cellRegion[celli]]++;
1720 forAll(regionSizes, regioni)
1725 Info<<
"Region\tCells" <<
nl
1726 <<
"------\t-----" <<
endl;
1728 forAll(regionSizes, regioni)
1730 Info<< regioni <<
'\t' << regionSizes[regioni] <<
nl;
1737 Info<<
"Region\tZone\tName" <<
nl
1738 <<
"------\t----\t----" <<
endl;
1739 forAll(regionToZone, regioni)
1741 Info<< regioni <<
'\t' << regionToZone[regioni] <<
'\t'
1779 Info<<
"Sizes of interfaces between regions:" <<
nl <<
nl
1780 <<
"Interface\tRegion\tRegion\tFaces" <<
nl
1781 <<
"---------\t------\t------\t-----" <<
endl;
1783 forAll(interfaces, interI)
1785 const edge&
e = interfaces[interI];
1788 <<
"\t\t" <<
e[0] <<
'\t' <<
e[1]
1789 <<
'\t' << interfaceSizes[interI] <<
nl;
1818 if (nCellRegions == 1)
1820 Info<<
"Only one region. Doing nothing." <<
endl;
1822 else if (makeCellZones)
1824 Info<<
"Putting cells into cellZones instead of splitting mesh."
1829 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1831 label zoneI = regionToZone[regioni];
1835 Info<<
" Region " << regioni <<
" : corresponds to existing"
1837 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1850 zoneI = cellZones.
size();
1867 Info<<
" Region " << regioni <<
" : created new cellZone "
1868 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1883 Info<<
"Writing cellZones as new mesh to time " << runTime.name()
1892 Info<<
"Writing cellSets corresponding to cellZones." <<
nl <<
endl;
1896 const cellZone& cz = cellZones[zoneI];
1940 Info<<
nl <<
"Found point " << insidePoint <<
" in cell " << celli
1945 regioni = cellRegion[celli];
1951 <<
"Subsetting region " << regioni
1952 <<
" containing point " << insidePoint <<
endl;
1957 <<
"Point " << insidePoint
1958 <<
" is not inside the mesh." <<
nl
1959 <<
"Bounding box of the mesh:" <<
mesh.
bounds()
1963 createAndWriteRegion
1972 (
overwrite ? oldInstance : runTime.name())
1975 else if (largestOnly)
1980 <<
"Subsetting region " << regioni
1981 <<
" of size " << regionSizes[regioni]
1984 createAndWriteRegion
1993 (
overwrite ? oldInstance : runTime.name())
1999 for (
label regioni = 0; regioni < nCellRegions; regioni++)
2002 <<
"Region " << regioni <<
nl
2003 <<
"-------- " <<
endl;
2005 createAndWriteRegion
2014 (
overwrite ? oldInstance : runTime.name())
Field reading functions for post-processing utilities.
#define forAll(list, i)
Loop across all elements in list.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object of type.
wordList toc() const
Return the table of contents.
Map from edge (expressed as its endpoints) to value.
Generic GeometricField class.
bool insert(const Key &key)
Insert a new entry.
An STL-conforming hash table.
label size() const
Return number of elements in table.
bool insert(const Key &, const T &newElmt)
Insert a new hashedEntry.
iterator find(const Key &)
Find and return an iterator set at the hashedEntry.
bool found(const Key &) const
Return true if hashedEntry is found in table.
List of IOobjects with searching and retrieving facilities.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
writeOption writeOpt() const
const word & name() const
Return name.
Input inter-processor communications stream.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
void size(const label)
Override size to be inconsistent with allocated storage.
void setSize(const label)
Reset size of List.
Output inter-processor communications stream.
virtual Ostream & write(const char)=0
Write character.
static void scatter(const List< commsStruct > &comms, T &Value, const int tag, const label comm)
Scatter data. Distribute without modification. Reverse of gather.
static void scatterList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Scatter data. Reverse of gatherList.
static void listCombineGather(const List< commsStruct > &comms, List< T > &Value, const CombineOp &cop, const int tag, const label comm)
static void listCombineScatter(const List< commsStruct > &comms, List< T > &Value, const int tag, const label comm)
Scatter data. Reverse of combineGather.
static void gatherList(const List< commsStruct > &comms, List< T > &Values, const int tag, const label comm)
Gather data but keep individual values separate.
autoPtr< T > set(const label, const word &key, T *)
Set element to pointer provided and return old element.
label findIndex(const word &key) const
Return the index of the given the key or -1 if not found.
void append(T *)
Append an element at the end of the list.
void setSize(const label)
Reset size of PtrList. If extending the PtrList, new entries are.
label size() const
Return the number of elements in the UList.
static int masterNo()
Process index of the master.
static bool master(const label communicator=0)
Am I the master process.
static int lastSlave(const label communicator=0)
Process index of last slave.
static label nProcs(const label communicator=0)
Number of processes in parallel run.
static int firstSlave()
Process index of first slave.
static bool & parRun()
Is this a parallel run?
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
label size() const
Return the number of elements in the UPtrList.
labelList whichZones(const label objectIndex) const
Given a global object index, return the list of zones it is in.
bool checkParallelSync(const bool report=false) const
Check whether all procs have all zones and in same order. Return.
const word & name() const
Return name.
static void addOption(const word &opt, const string ¶m="", const string &usage="")
Add to an option to validOptions with usage information.
static void addNote(const string &)
Add extra notes for the usage information.
T optionRead(const word &opt) const
Read a value from the named option.
static void addBoolOption(const word &opt, const string &usage="")
Add to a bool option to validOptions with usage information.
bool optionFound(const word &opt) const
Return true if the named option is found.
const string & option(const word &opt) const
Return the argument string associated with the named option.
bool optionReadIfPresent(const word &opt, T &) const
Read a value from the named option if present.
T optionLookupOrDefault(const word &opt, const T &deflt) const
Read a value from the named option if present.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
A collection of cell labels.
Named list of cell indices representing a sub-set of the mesh.
const word & name() const
Return const reference to name.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
static tmp< VolField< Type > > interpolate(const VolField< Type > &, const fvMesh &sMesh, const labelList &patchMap, const labelList &cellMap, const labelList &faceMap)
Map volume field.
Mesh data needed to do the Finite Volume discretisation.
const Time & time() const
Return the top-level database.
virtual bool write(const bool write=true) const
Write mesh using IO settings from time.
const word & name() const
Return reference to name.
void clearOut()
Clear all geometry and addressing.
Wall poly patch which can do interpolative mapping of values from another globally conforming poly pa...
bool checkParallelSync(const bool report=false) const
Check whether all procs have all patches and in same order. Return.
Mesh consisting of general polyhedral cells.
const fileName & facesInstance() const
Return the current instance directory for faces.
const cellZoneList & cellZones() const
Return cell zones.
static word defaultRegion
Return the default region name.
label findCell(const point &p, const cellDecomposition=CELL_TETS) const
Find cell enclosing this location and return index.
virtual const labelList & faceOwner() const
Return face owner.
const labelIOList & tetBasePtIs() const
Return the tetBasePtIs.
const fileName & pointsInstance() const
Return the current instance directory for points.
const faceZoneList & faceZones() const
Return face zones.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
virtual const labelList & faceNeighbour() const
Return face neighbour.
static word meshSubDir
Return the mesh sub-directory name (usually "polyMesh")
void setInstance(const fileName &)
Set the instance for mesh files.
const boundBox & bounds() const
Return mesh bounding box.
A patch is a list of labels that address the faces in the global face list.
Direct mesh changes based on v1.3 polyTopoChange syntax.
const vectorField & faceCentres() const
label nInternalFaces() const
const vectorField & cellCentres() const
bool isInternalFace(const label faceIndex) const
Return true if given face label is internal to the mesh.
virtual bool write(const bool write=true) const
Write using setting from DB.
This class separates the mesh into distinct unconnected regions, each of which is then given a label ...
Given list of cells to remove insert all the topology changes.
A class for managing temporary objects.
A class for handling words, derived from string.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
int main(int argc, char *argv[])
gmvFile<< "tracers "<< particles.size()<< nl;{ pointField positions(particles.size());label particlei=0;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter) { positions[particlei++]=iter().position(mesh);} for(i=0;i< pTraits< point >::nComponents;i++) { forAll(positions, particlei) { gmvFile<< component(positions[particlei], i)<< ' ';} gmvFile<< nl;}}forAll(lagrangianScalarNames, i){ const word &name=lagrangianScalarNames[i];IOField< scalar > fld(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const fvPatchList & patches
Info<< "Calculating turbulent flame speed field St\n"<< endl;volScalarField St(IOobject("St", runTime.name(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), flameWrinkling->Xi() *Su);multivariateSurfaceInterpolationScheme< scalar >::fieldTable fields
errorManipArg< error, int > exit(error &err, const int errNo=1)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
label findMax(const ListType &, const label start=0)
Find index of max element (and larger than given element).
Ostream & endl(Ostream &os)
Add newline and flush stream.
labelList findIndices(const ListType &, typename ListType::const_reference, const label start=0)
Find all occurrences of given element. Linear search.
const dimensionSet dimless
const word & regionName(const solver ®ion)
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
label findIndex(const ListType &, typename ListType::const_reference, const label start=0)
Find first occurrence of given element and return index,.
labelList identityMap(const label len)
Create identity map (map[i] == i) of given length.
Type gMax(const FieldField< Field, Type > &f)
const Foam::wordList regionNames(args.optionFound("allRegions") ? runTime .controlDict().subDict("regionSolvers").toc() :wordList(1, args.optionFound("region") ? args.optionRead< word >("region") :polyMesh::defaultRegion))
Foam::argList args(argc, argv)
static iteratorEnd end()
iteratorEnd set to beyond the end of any HashTable