107 using namespace Foam;
112 const word standardRegionName(
"region");
128 forAll(patchesToRename, i)
135 patches.renamePatches(newNames,
true);
139 template<
class GeoField>
153 mesh.objectRegistry::lookupClass<GeoField>()
157 const GeoField&
fld = *iter();
179 tSubFld.ref().boundaryFieldRef()[
patchi] ==
180 typename GeoField::value_type(
Zero);
185 GeoField* subFld = tSubFld.ptr();
186 subFld->rename(
fld.name());
193 template<
class GeoField>
194 void subsetSurfaceFields
207 mesh.objectRegistry::lookupClass<GeoField>()
211 const GeoField&
fld = *iter();
228 GeoField* subFld = tSubFld.ptr();
229 subFld->rename(
fld.name());
241 if (cellRegion[celli] != regioni)
243 nonRegionCells.append(celli);
246 return nonRegionCells.shrink();
254 const label ownRegion,
255 const label neiRegion,
261 min(ownRegion, neiRegion),
262 max(ownRegion, neiRegion)
270 if (iter != regionsToSize.
end())
274 if (zoneFnd != iter().end())
289 zoneToSize.
insert(zoneID, 1);
290 regionsToSize.
insert(interface, zoneToSize);
298 const bool useFaceZones,
306 if (zones.size() == 0)
310 else if (zones.size() == 1)
317 <<
"Face " << facei <<
" is in more than one zone " << zones
332 void getInterfaceSizes
335 const bool useFaceZones,
358 if (ownRegion != neiRegion)
363 whichZone(
mesh, useFaceZones, facei),
380 coupledRegion[i] = cellRegion[celli];
388 label neiRegion = coupledRegion[i];
390 if (ownRegion != neiRegion)
395 whichZone(
mesh, useFaceZones, facei),
423 regionsToSize.
find(slaveIter.key());
425 if (masterIter != regionsToSize.
end())
433 label zoneID = iter.key();
434 label slaveSize = iter();
440 if (zoneFnd != masterInfo.
end())
442 zoneFnd() += slaveSize;
446 masterInfo.
insert(zoneID, slaveSize);
452 regionsToSize.
insert(slaveIter.key(), slaveIter());
466 toMaster << regionsToSize;
479 label nInterfaces = 0;
483 nInterfaces += info.
size();
486 interfaces.
setSize(nInterfaces);
487 interfaceNames.
setSize(nInterfaces);
488 interfaceSizes.
setSize(nInterfaces);
494 const edge&
e = iter.key();
501 interfaces[nInterfaces] = iter.key();
502 label zoneID = infoIter.key();
507 name0 +
"_to_" + name1,
508 name1 +
"_to_" + name0
516 zoneName +
"_" + name0 +
"_to_" + name1,
517 zoneName +
"_" + name1 +
"_to_" + name0
520 interfaceSizes[nInterfaces] = infoIter();
522 if (regionsToInterface.found(
e))
524 regionsToInterface[
e].insert(zoneID, nInterfaces);
529 zoneAndInterface.
insert(zoneID, nInterfaces);
530 regionsToInterface.insert(
e, zoneAndInterface);
552 if (ownRegion != neiRegion)
554 const label zoneID = whichZone(
mesh, useFaceZones, facei);
558 min(ownRegion, neiRegion),
559 max(ownRegion, neiRegion)
562 faceToInterface[facei] = regionsToInterface[interface][zoneID];
569 label neiRegion = coupledRegion[i];
571 if (ownRegion != neiRegion)
573 const label zoneID = whichZone(
mesh, useFaceZones, facei);
577 min(ownRegion, neiRegion),
578 max(ownRegion, neiRegion)
581 faceToInterface[facei] = regionsToInterface[interface][zoneID];
608 coupledRegion[i] = cellRegion[celli];
620 labelList cellsToRemove(getNonRegionCells(cellRegion, regioni));
625 labelList exposedFaces = cellRemover.getExposedFaces(cellsToRemove);
630 label facei = exposedFaces[i];
631 label interfacei = faceToInterface[facei];
634 label neiRegion = -1;
649 label otherRegion = -1;
651 if (ownRegion == regioni && neiRegion != regioni)
653 otherRegion = neiRegion;
655 else if (ownRegion != regioni && neiRegion == regioni)
657 otherRegion = ownRegion;
662 <<
"Exposed face:" << facei
664 <<
" has owner region " << ownRegion
665 <<
" and neighbour region " << neiRegion
666 <<
" when handling region:" << regioni
671 if (regioni < otherRegion)
673 exposedPatchIDs[i] = interfacePatches[interfacei];
677 exposedPatchIDs[i] = interfacePatches[interfacei]+1;
682 cellRemover.setRefinement
708 void createAndWriteRegion
713 const bool prefixRegion,
717 const word& newMeshInstance
720 Info<<
"Creating mesh for region " << regioni
738 forAll(interfacePatches, interfacei)
740 addedPatches.
insert(interfacePatches[interfacei]);
741 addedPatches.
insert(interfacePatches[interfacei]+1);
748 newMesh().topoChange(map());
751 subsetVolFields<volScalarField>
759 subsetVolFields<volVectorField>
767 subsetVolFields<volSphericalTensorField>
775 subsetVolFields<volSymmTensorField>
783 subsetVolFields<volTensorField>
792 subsetSurfaceFields<surfaceScalarField>
800 subsetSurfaceFields<surfaceVectorField>
808 subsetSurfaceFields<surfaceSphericalTensorField>
816 subsetSurfaceFields<surfaceSymmTensorField>
824 subsetSurfaceFields<surfaceTensorField>
845 Info<<
"Deleting empty patches" <<
endl;
852 if (!isA<processorPolyPatch>(pp))
859 sharedPatches.
append(newI);
871 if (isA<processorPolyPatch>(pp) && pp.
size())
873 oldToNew[
patchi] = newI++;
877 const label nNewPatches = newI;
882 if (oldToNew[
patchi] == -1)
884 oldToNew[
patchi] = newI++;
894 Info<<
"Prefixing patches with region name" <<
endl;
896 renamePatches(newMesh(),
regionNames[regioni], sharedPatches);
902 newMesh().setInstance(newMeshInstance);
906 Info<<
"Writing addressing to base mesh" <<
endl;
912 "pointRegionAddressing",
913 newMesh().facesInstance(),
914 newMesh().meshSubDir,
922 Info<<
"Writing map " << pointProcAddressing.name()
923 <<
" from region" << regioni
924 <<
" points back to base mesh." <<
endl;
925 pointProcAddressing.
write();
931 "faceRegionAddressing",
932 newMesh().facesInstance(),
933 newMesh().meshSubDir,
941 forAll(faceProcAddressing, facei)
945 label oldFacei = map().faceMap()[facei];
949 map().cellMap()[newMesh().faceOwner()[facei]]
953 faceProcAddressing[facei] = oldFacei+1;
957 faceProcAddressing[facei] = -(oldFacei+1);
960 Info<<
"Writing map " << faceProcAddressing.name()
961 <<
" from region" << regioni
962 <<
" faces back to base mesh." <<
endl;
963 faceProcAddressing.
write();
969 "cellRegionAddressing",
970 newMesh().facesInstance(),
971 newMesh().meshSubDir,
979 Info<<
"Writing map " <<cellProcAddressing.name()
980 <<
" from region" << regioni
981 <<
" cells back to base mesh." <<
endl;
982 cellProcAddressing.
write();
1002 forAll(interfaces, interI)
1004 const edge&
e = interfaces[interI];
1005 const Pair<word>& names = interfaceNames[interI];
1039 <<
" " << interfacePatches[interI]
1042 <<
" " << interfacePatches[interI]+1
1049 return interfacePatches;
1054 label findCorrespondingRegion
1058 const label nCellRegions,
1060 const label minOverlapSize
1066 forAll(cellRegion, celli)
1068 if (existingZoneID[celli] == zoneI)
1070 cellsInZone[cellRegion[celli]]++;
1081 if (cellsInZone[regioni] < minOverlapSize)
1089 forAll(cellRegion, celli)
1091 if (cellRegion[celli] == regioni && existingZoneID[celli] != zoneI)
1124 const cellZone& cz = cellZones[zoneI];
1128 label celli = cz[i];
1129 if (zoneID[celli] == -1)
1131 zoneID[celli] = zoneI;
1136 <<
"Cell " << celli <<
" with cell centre "
1138 <<
" is multiple zones. This is not allowed." <<
endl
1139 <<
"It is in zone " << cellZones[zoneID[celli]].
name()
1140 <<
" and in zone " << cellZones[zoneI].
name()
1159 const bool sloppyCellZones,
1162 const label nCellRegions,
1165 const word& defaultRegionName,
1174 regionToZone.
setSize(nCellRegions, -1);
1181 getZoneID(
mesh, cellZones, zoneID, neiZoneID);
1193 if (zoneNames[proci] != zoneNames[0])
1196 <<
"cellZones not synchronised across processors." <<
endl
1197 <<
"Master has cellZones " << zoneNames[0] <<
endl
1198 <<
"Processor " << proci
1199 <<
" has cellZones " << zoneNames[proci]
1208 cellZones[zoneI].size(),
1215 if (sloppyCellZones)
1217 Info<<
"Trying to match regions to existing cell zones;"
1218 <<
" region can be subset of cell zone." <<
nl <<
endl;
1222 label regioni = findCorrespondingRegion
1228 label(0.5*zoneSizes[zoneI])
1233 Info<<
"Sloppily matched region " << regioni
1235 <<
" to zone " << zoneI <<
" size " << zoneSizes[zoneI]
1237 zoneToRegion[zoneI] = regioni;
1238 regionToZone[regioni] = zoneI;
1245 Info<<
"Trying to match regions to existing cell zones." <<
nl <<
endl;
1249 label regioni = findCorrespondingRegion
1260 zoneToRegion[zoneI] = regioni;
1261 regionToZone[regioni] = zoneI;
1267 label nUnmatchedRegions = 0;
1269 forAll(regionToZone, regioni)
1271 if (regionToZone[regioni] == -1)
1273 nUnmatchedRegions++;
1277 if (nUnmatchedRegions)
1279 label nUnmatchedi = 1;
1282 forAll(regionToZone, regioni)
1284 if (regionToZone[regioni] == -1)
1288 nUnmatchedRegions == 1
1289 && defaultRegionName != standardRegionName
1297 defaultRegionName +
Foam::name(nUnmatchedi++);
1322 cellToRegion.write();
1324 Info<<
"Writing region per cell file (for manual decomposition) to "
1325 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1342 zeroGradientFvPatchScalarField::typeName
1344 forAll(cellRegion, celli)
1346 cellToRegion[celli] = cellRegion[celli];
1348 cellToRegion.write();
1350 Info<<
"Writing region per cell as volScalarField to "
1351 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1358 int main(
int argc,
char *argv[])
1362 "splits mesh into multiple regions (detected by walking across faces)"
1370 "additionally split cellZones off into separate regions"
1375 "use cellZones only to split mesh into regions; do not use walking"
1379 "cellZonesFileOnly",
1381 "like -cellZonesOnly, but use specified file"
1387 "specify additional region boundaries that walking does not cross"
1392 "place cells into cellZones instead of splitting mesh"
1397 "only write largest region"
1403 "only write region containing point"
1413 "try to match heuristically regions to existing cell zones"
1418 "use faceZones to patch inter-region faces instead of single patch"
1423 "prefix region name to all patches, not just coupling patches"
1427 "defaultRegionName",
1429 "base name of the unspecified regions, defaults to \"region\""
1434 "do not update fields"
1443 word blockedFacesName;
1446 Info<<
"Reading blocked internal faces from faceSet "
1447 << blockedFacesName <<
nl <<
endl;
1465 (useCellZonesOnly || useCellZonesFile)
1466 && (useCellZones || blockedFacesName.size())
1470 <<
"You cannot specify both -cellZonesOnly or -cellZonesFileOnly"
1471 <<
" (which specify complete split)"
1472 <<
" in combination with -blockedFaces or -cellZones"
1473 <<
" (which imply a split based on topology)"
1480 Info<<
"Using current faceZones to divide inter-region interfaces"
1481 <<
" into multiple patches."
1486 Info<<
"Creating single patch per inter-region interface."
1491 if (insidePoint && largestOnly)
1494 <<
"You cannot specify both -largestOnly"
1495 <<
" (keep region with most cells)"
1496 <<
" and -insidePoint (keep region containing point)"
1500 const word defaultRegionName
1511 getZoneID(
mesh, cellZones, zoneID, neiZoneID);
1530 label nCellRegions = 0;
1531 if (useCellZonesOnly)
1533 Info<<
"Using current cellZones to split mesh into regions."
1534 <<
" This requires all"
1535 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1538 if (unzonedCelli != -1)
1541 <<
"For the cellZonesOnly option all cells "
1542 <<
"have to be in a cellZone." <<
endl
1543 <<
"Cell " << unzonedCelli
1545 <<
" is not in a cellZone. There might be more unzoned cells."
1548 cellRegion = zoneID;
1549 nCellRegions =
gMax(cellRegion)+1;
1550 regionToZone.
setSize(nCellRegions);
1553 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1555 regionToZone[regioni] = regioni;
1556 zoneToRegion[regioni] = regioni;
1560 else if (useCellZonesFile)
1563 Info<<
"Reading split from cellZones file " << zoneFile <<
endl
1564 <<
"This requires all"
1565 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1584 getZoneID(
mesh, newCellZones, newZoneID, newNeiZoneID);
1587 if (unzonedCelli != -1)
1590 <<
"For the cellZonesFileOnly option all cells "
1591 <<
"have to be in a cellZone." <<
endl
1592 <<
"Cell " << unzonedCelli
1594 <<
" is not in a cellZone. There might be more unzoned cells."
1597 cellRegion = newZoneID;
1598 nCellRegions =
gMax(cellRegion)+1;
1599 zoneToRegion.
setSize(newCellZones.size(), -1);
1600 regionToZone.
setSize(nCellRegions);
1602 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1604 regionToZone[regioni] = regioni;
1605 zoneToRegion[regioni] = regioni;
1606 regionNames[regioni] = newCellZones[regioni].name();
1618 if (blockedFacesName.size())
1623 <<
" blocked faces from set " << blockedFacesName <<
nl <<
endl;
1629 blockedFace[iter.key()] =
true;
1643 if (zoneID[own] != zoneID[nei])
1645 blockedFace[facei] =
true;
1656 blockedFace[facei] =
true;
1663 nCellRegions = regions.nRegions();
1681 if (largestOnly || insidePoint)
1683 forAll(regionToZone, regioni)
1685 if (regionToZone[regioni] == -1)
1691 else if (insidePoint)
1695 else if (largestOnly)
1704 Info<<
endl <<
"Number of regions:" << nCellRegions <<
nl <<
endl;
1708 writeCellToRegion(
mesh, cellRegion);
1717 forAll(cellRegion, celli)
1719 regionSizes[cellRegion[celli]]++;
1721 forAll(regionSizes, regioni)
1726 Info<<
"Region\tCells" <<
nl
1727 <<
"------\t-----" <<
endl;
1729 forAll(regionSizes, regioni)
1731 Info<< regioni <<
'\t' << regionSizes[regioni] <<
nl;
1738 Info<<
"Region\tZone\tName" <<
nl
1739 <<
"------\t----\t----" <<
endl;
1740 forAll(regionToZone, regioni)
1742 Info<< regioni <<
'\t' << regionToZone[regioni] <<
'\t'
1780 Info<<
"Sizes of interfaces between regions:" <<
nl <<
nl
1781 <<
"Interface\tRegion\tRegion\tFaces" <<
nl
1782 <<
"---------\t------\t------\t-----" <<
endl;
1784 forAll(interfaces, interI)
1786 const edge&
e = interfaces[interI];
1789 <<
"\t\t" <<
e[0] <<
'\t' <<
e[1]
1790 <<
'\t' << interfaceSizes[interI] <<
nl;
1819 if (nCellRegions == 1)
1821 Info<<
"Only one region. Doing nothing." <<
endl;
1823 else if (makeCellZones)
1825 Info<<
"Putting cells into cellZones instead of splitting mesh."
1830 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1832 label zoneI = regionToZone[regioni];
1836 Info<<
" Region " << regioni <<
" : corresponds to existing"
1838 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1851 zoneI = cellZones.
size();
1868 Info<<
" Region " << regioni <<
" : created new cellZone "
1869 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1884 Info<<
"Writing cellZones as new mesh to time " << runTime.name()
1893 Info<<
"Writing cellSets corresponding to cellZones." <<
nl <<
endl;
1897 const cellZone& cz = cellZones[zoneI];
1939 Info<<
nl <<
"Found point " << insidePoint <<
" in cell " << celli
1944 regioni = cellRegion[celli];
1950 <<
"Subsetting region " << regioni
1951 <<
" containing point " << insidePoint <<
endl;
1956 <<
"Point " << insidePoint
1957 <<
" is not inside the mesh." <<
nl
1958 <<
"Bounding box of the mesh:" <<
mesh.
bounds()
1962 createAndWriteRegion
1971 (
overwrite ? oldInstance : runTime.name())
1974 else if (largestOnly)
1979 <<
"Subsetting region " << regioni
1980 <<
" of size " << regionSizes[regioni]
1983 createAndWriteRegion
1992 (
overwrite ? oldInstance : runTime.name())
1998 for (
label regioni = 0; regioni < nCellRegions; regioni++)
2001 <<
"Region " << regioni <<
nl
2002 <<
"-------- " <<
endl;
2004 createAndWriteRegion
2013 (
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...
label findCell(const point &p, const pointInCellShapes=pointInCellShapes::tets) const
Find the cell containing the given point.
static const meshSearch & New(const polyMesh &mesh, const pointInCellShapes=pointInCellShapes::tets)
Lookup or construct from mesh and cell decomposition option.
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.
virtual const labelList & faceOwner() const
Return face owner.
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