108 using namespace Foam;
113 const word standardRegionName(
"region");
129 forAll(patchesToRename, i)
136 patches.renamePatches(newNames,
true);
140 template<
class GeoField>
154 mesh.objectRegistry::lookupClass<GeoField>()
158 const GeoField&
fld = *iter();
180 tSubFld.ref().boundaryFieldRef()[
patchi] ==
181 typename GeoField::value_type(
Zero);
186 GeoField* subFld = tSubFld.ptr();
187 subFld->rename(
fld.name());
194 template<
class GeoField>
195 void subsetSurfaceFields
208 mesh.objectRegistry::lookupClass<GeoField>()
212 const GeoField&
fld = *iter();
229 GeoField* subFld = tSubFld.ptr();
230 subFld->rename(
fld.name());
242 if (cellRegion[celli] != regioni)
244 nonRegionCells.append(celli);
247 return nonRegionCells.shrink();
255 const label ownRegion,
256 const label neiRegion,
262 min(ownRegion, neiRegion),
263 max(ownRegion, neiRegion)
271 if (iter != regionsToSize.
end())
275 if (zoneFnd != iter().end())
290 zoneToSize.
insert(zoneID, 1);
291 regionsToSize.
insert(interface, zoneToSize);
299 const bool useFaceZones,
307 if (zones.size() == 0)
311 else if (zones.size() == 1)
318 <<
"Face " << facei <<
" is in more than one zone " << zones
333 void getInterfaceSizes
336 const bool useFaceZones,
359 if (ownRegion != neiRegion)
364 whichZone(mesh, useFaceZones, facei),
381 coupledRegion[i] = cellRegion[celli];
389 label neiRegion = coupledRegion[i];
391 if (ownRegion != neiRegion)
396 whichZone(mesh, useFaceZones, facei),
424 regionsToSize.
find(slaveIter.key());
426 if (masterIter != regionsToSize.
end())
434 label zoneID = iter.key();
435 label slaveSize = iter();
441 if (zoneFnd != masterInfo.
end())
443 zoneFnd() += slaveSize;
447 masterInfo.
insert(zoneID, slaveSize);
453 regionsToSize.
insert(slaveIter.key(), slaveIter());
467 toMaster << regionsToSize;
480 label nInterfaces = 0;
484 nInterfaces += info.
size();
487 interfaces.
setSize(nInterfaces);
488 interfaceNames.
setSize(nInterfaces);
489 interfaceSizes.
setSize(nInterfaces);
495 const edge&
e = iter.key();
502 interfaces[nInterfaces] = iter.key();
503 label zoneID = infoIter.key();
508 name0 +
"_to_" + name1,
509 name1 +
"_to_" + name0
517 zoneName +
"_" + name0 +
"_to_" + name1,
518 zoneName +
"_" + name1 +
"_to_" + name0
521 interfaceSizes[nInterfaces] = infoIter();
523 if (regionsToInterface.found(
e))
525 regionsToInterface[
e].insert(zoneID, nInterfaces);
530 zoneAndInterface.
insert(zoneID, nInterfaces);
531 regionsToInterface.insert(
e, zoneAndInterface);
553 if (ownRegion != neiRegion)
555 const label zoneID = whichZone(mesh, useFaceZones, facei);
559 min(ownRegion, neiRegion),
560 max(ownRegion, neiRegion)
563 faceToInterface[facei] = regionsToInterface[interface][zoneID];
570 label neiRegion = coupledRegion[i];
572 if (ownRegion != neiRegion)
574 const label zoneID = whichZone(mesh, useFaceZones, facei);
578 min(ownRegion, neiRegion),
579 max(ownRegion, neiRegion)
582 faceToInterface[facei] = regionsToInterface[interface][zoneID];
609 coupledRegion[i] = cellRegion[celli];
621 labelList cellsToRemove(getNonRegionCells(cellRegion, regioni));
626 labelList exposedFaces = cellRemover.getExposedFaces(cellsToRemove);
631 label facei = exposedFaces[i];
632 label interfacei = faceToInterface[facei];
635 label neiRegion = -1;
650 label otherRegion = -1;
652 if (ownRegion == regioni && neiRegion != regioni)
654 otherRegion = neiRegion;
656 else if (ownRegion != regioni && neiRegion == regioni)
658 otherRegion = ownRegion;
663 <<
"Exposed face:" << facei
665 <<
" has owner region " << ownRegion
666 <<
" and neighbour region " << neiRegion
667 <<
" when handling region:" << regioni
672 if (regioni < otherRegion)
674 exposedPatchIDs[i] = interfacePatches[interfacei];
678 exposedPatchIDs[i] = interfacePatches[interfacei]+1;
683 cellRemover.setRefinement
709 void createAndWriteRegion
714 const bool prefixRegion,
718 const word& newMeshInstance
721 Info<<
"Creating mesh for region " << regioni
739 forAll(interfacePatches, interfacei)
741 addedPatches.
insert(interfacePatches[interfacei]);
742 addedPatches.
insert(interfacePatches[interfacei]+1);
749 newMesh().topoChange(map());
752 subsetVolFields<volScalarField>
760 subsetVolFields<volVectorField>
768 subsetVolFields<volSphericalTensorField>
776 subsetVolFields<volSymmTensorField>
784 subsetVolFields<volTensorField>
793 subsetSurfaceFields<surfaceScalarField>
801 subsetSurfaceFields<surfaceVectorField>
809 subsetSurfaceFields<surfaceSphericalTensorField>
817 subsetSurfaceFields<surfaceSymmTensorField>
825 subsetSurfaceFields<surfaceTensorField>
846 Info<<
"Deleting empty patches" <<
endl;
853 if (!isA<processorPolyPatch>(pp))
860 sharedPatches.
append(newI);
872 if (isA<processorPolyPatch>(pp) && pp.
size())
874 oldToNew[
patchi] = newI++;
878 const label nNewPatches = newI;
883 if (oldToNew[
patchi] == -1)
885 oldToNew[
patchi] = newI++;
895 Info<<
"Prefixing patches with region name" <<
endl;
897 renamePatches(newMesh(),
regionNames[regioni], sharedPatches);
903 newMesh().setInstance(newMeshInstance);
907 Info<<
"Writing addressing to base mesh" <<
endl;
913 "pointRegionAddressing",
914 newMesh().facesInstance(),
915 newMesh().meshSubDir,
923 Info<<
"Writing map " << pointProcAddressing.name()
924 <<
" from region" << regioni
925 <<
" points back to base mesh." <<
endl;
926 pointProcAddressing.
write();
932 "faceRegionAddressing",
933 newMesh().facesInstance(),
934 newMesh().meshSubDir,
942 forAll(faceProcAddressing, facei)
946 label oldFacei = map().faceMap()[facei];
950 map().cellMap()[newMesh().faceOwner()[facei]]
954 faceProcAddressing[facei] = oldFacei+1;
958 faceProcAddressing[facei] = -(oldFacei+1);
961 Info<<
"Writing map " << faceProcAddressing.name()
962 <<
" from region" << regioni
963 <<
" faces back to base mesh." <<
endl;
964 faceProcAddressing.
write();
970 "cellRegionAddressing",
971 newMesh().facesInstance(),
972 newMesh().meshSubDir,
980 Info<<
"Writing map " <<cellProcAddressing.name()
981 <<
" from region" << regioni
982 <<
" cells back to base mesh." <<
endl;
983 cellProcAddressing.
write();
1003 forAll(interfaces, interI)
1005 const edge&
e = interfaces[interI];
1006 const Pair<word>& names = interfaceNames[interI];
1054 <<
" " << interfacePatches[interI]
1057 <<
" " << interfacePatches[interI]+1
1061 return interfacePatches;
1066 label findCorrespondingRegion
1070 const label nCellRegions,
1072 const label minOverlapSize
1078 forAll(cellRegion, celli)
1080 if (existingZoneID[celli] == zoneI)
1082 cellsInZone[cellRegion[celli]]++;
1093 if (cellsInZone[regioni] < minOverlapSize)
1101 forAll(cellRegion, celli)
1103 if (cellRegion[celli] == regioni && existingZoneID[celli] != zoneI)
1136 const cellZone& cz = cellZones[zoneI];
1140 label celli = cz[i];
1141 if (zoneID[celli] == -1)
1143 zoneID[celli] = zoneI;
1148 <<
"Cell " << celli <<
" with cell centre "
1150 <<
" is multiple zones. This is not allowed." <<
endl
1151 <<
"It is in zone " << cellZones[zoneID[celli]].
name()
1152 <<
" and in zone " << cellZones[zoneI].
name()
1171 const bool sloppyCellZones,
1174 const label nCellRegions,
1177 const word& defaultRegionName,
1186 regionToZone.
setSize(nCellRegions, -1);
1193 getZoneID(mesh, cellZones, zoneID, neiZoneID);
1205 if (zoneNames[proci] != zoneNames[0])
1208 <<
"cellZones not synchronised across processors." <<
endl
1209 <<
"Master has cellZones " << zoneNames[0] <<
endl
1210 <<
"Processor " << proci
1211 <<
" has cellZones " << zoneNames[proci]
1220 cellZones[zoneI].size(),
1227 if (sloppyCellZones)
1229 Info<<
"Trying to match regions to existing cell zones;"
1230 <<
" region can be subset of cell zone." <<
nl <<
endl;
1234 label regioni = findCorrespondingRegion
1240 label(0.5*zoneSizes[zoneI])
1245 Info<<
"Sloppily matched region " << regioni
1247 <<
" to zone " << zoneI <<
" size " << zoneSizes[zoneI]
1249 zoneToRegion[zoneI] = regioni;
1250 regionToZone[regioni] = zoneI;
1257 Info<<
"Trying to match regions to existing cell zones." <<
nl <<
endl;
1261 label regioni = findCorrespondingRegion
1272 zoneToRegion[zoneI] = regioni;
1273 regionToZone[regioni] = zoneI;
1279 label nUnmatchedRegions = 0;
1281 forAll(regionToZone, regioni)
1283 if (regionToZone[regioni] == -1)
1285 nUnmatchedRegions++;
1289 if (nUnmatchedRegions)
1291 label nUnmatchedi = 1;
1294 forAll(regionToZone, regioni)
1296 if (regionToZone[regioni] == -1)
1300 nUnmatchedRegions == 1
1301 && defaultRegionName != standardRegionName
1309 defaultRegionName +
Foam::name(nUnmatchedi++);
1317 void writeCellToRegion(
const fvMesh& mesh,
const labelList& cellRegion)
1334 cellToRegion.write();
1336 Info<<
"Writing region per cell file (for manual decomposition) to "
1337 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1354 zeroGradientFvPatchScalarField::typeName
1356 forAll(cellRegion, celli)
1358 cellToRegion[celli] = cellRegion[celli];
1360 cellToRegion.write();
1362 Info<<
"Writing region per cell as volScalarField to "
1363 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1370 int main(
int argc,
char *argv[])
1374 "splits mesh into multiple regions (detected by walking across faces)"
1381 "additionally split cellZones off into separate regions"
1386 "use cellZones only to split mesh into regions; do not use walking"
1390 "cellZonesFileOnly",
1392 "like -cellZonesOnly, but use specified file"
1398 "specify additional region boundaries that walking does not cross"
1403 "place cells into cellZones instead of splitting mesh"
1408 "only write largest region"
1414 "only write region containing point"
1424 "try to match heuristically regions to existing cell zones"
1429 "use faceZones to patch inter-region faces instead of single patch"
1434 "prefix region name to all patches, not just coupling patches"
1438 "defaultRegionName",
1440 "base name of the unspecified regions, defaults to \"region\""
1445 "do not update fields"
1454 word blockedFacesName;
1457 Info<<
"Reading blocked internal faces from faceSet "
1458 << blockedFacesName <<
nl <<
endl;
1476 (useCellZonesOnly || useCellZonesFile)
1477 && (useCellZones || blockedFacesName.size())
1481 <<
"You cannot specify both -cellZonesOnly or -cellZonesFileOnly"
1482 <<
" (which specify complete split)"
1483 <<
" in combination with -blockedFaces or -cellZones"
1484 <<
" (which imply a split based on topology)"
1491 Info<<
"Using current faceZones to divide inter-region interfaces"
1492 <<
" into multiple patches."
1497 Info<<
"Creating single patch per inter-region interface."
1502 if (insidePoint && largestOnly)
1505 <<
"You cannot specify both -largestOnly"
1506 <<
" (keep region with most cells)"
1507 <<
" and -insidePoint (keep region containing point)"
1511 const word defaultRegionName
1522 getZoneID(mesh, cellZones, zoneID, neiZoneID);
1541 label nCellRegions = 0;
1542 if (useCellZonesOnly)
1544 Info<<
"Using current cellZones to split mesh into regions."
1545 <<
" This requires all"
1546 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1549 if (unzonedCelli != -1)
1552 <<
"For the cellZonesOnly option all cells "
1553 <<
"have to be in a cellZone." <<
endl
1554 <<
"Cell " << unzonedCelli
1556 <<
" is not in a cellZone. There might be more unzoned cells."
1559 cellRegion = zoneID;
1560 nCellRegions =
gMax(cellRegion)+1;
1561 regionToZone.
setSize(nCellRegions);
1564 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1566 regionToZone[regioni] = regioni;
1567 zoneToRegion[regioni] = regioni;
1571 else if (useCellZonesFile)
1574 Info<<
"Reading split from cellZones file " << zoneFile <<
endl
1575 <<
"This requires all"
1576 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1595 getZoneID(mesh, newCellZones, newZoneID, newNeiZoneID);
1598 if (unzonedCelli != -1)
1601 <<
"For the cellZonesFileOnly option all cells "
1602 <<
"have to be in a cellZone." <<
endl
1603 <<
"Cell " << unzonedCelli
1605 <<
" is not in a cellZone. There might be more unzoned cells."
1608 cellRegion = newZoneID;
1609 nCellRegions =
gMax(cellRegion)+1;
1610 zoneToRegion.
setSize(newCellZones.size(), -1);
1611 regionToZone.
setSize(nCellRegions);
1613 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1615 regionToZone[regioni] = regioni;
1616 zoneToRegion[regioni] = regioni;
1617 regionNames[regioni] = newCellZones[regioni].name();
1629 if (blockedFacesName.size())
1631 faceSet blockedFaceSet(mesh, blockedFacesName);
1634 <<
" blocked faces from set " << blockedFacesName <<
nl <<
endl;
1640 blockedFace[iter.key()] =
true;
1654 if (zoneID[own] != zoneID[nei])
1656 blockedFace[facei] =
true;
1665 if (zoneID[mesh.
faceOwner()[facei]] != neiZoneID[i])
1667 blockedFace[facei] =
true;
1674 nCellRegions = regions.nRegions();
1692 if (largestOnly || insidePoint)
1694 forAll(regionToZone, regioni)
1696 if (regionToZone[regioni] == -1)
1702 else if (insidePoint)
1706 else if (largestOnly)
1715 Info<<
endl <<
"Number of regions:" << nCellRegions <<
nl <<
endl;
1719 writeCellToRegion(mesh, cellRegion);
1728 forAll(cellRegion, celli)
1730 regionSizes[cellRegion[celli]]++;
1732 forAll(regionSizes, regioni)
1737 Info<<
"Region\tCells" <<
nl
1738 <<
"------\t-----" <<
endl;
1740 forAll(regionSizes, regioni)
1742 Info<< regioni <<
'\t' << regionSizes[regioni] <<
nl;
1749 Info<<
"Region\tZone\tName" <<
nl
1750 <<
"------\t----\t----" <<
endl;
1751 forAll(regionToZone, regioni)
1753 Info<< regioni <<
'\t' << regionToZone[regioni] <<
'\t'
1791 Info<<
"Sizes of interfaces between regions:" <<
nl <<
nl
1792 <<
"Interface\tRegion\tRegion\tFaces" <<
nl
1793 <<
"---------\t------\t------\t-----" <<
endl;
1795 forAll(interfaces, interI)
1797 const edge&
e = interfaces[interI];
1800 <<
"\t\t" <<
e[0] <<
'\t' <<
e[1]
1801 <<
'\t' << interfaceSizes[interI] <<
nl;
1830 if (nCellRegions == 1)
1832 Info<<
"Only one region. Doing nothing." <<
endl;
1834 else if (makeCellZones)
1836 Info<<
"Putting cells into cellZones instead of splitting mesh."
1841 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1843 label zoneI = regionToZone[regioni];
1847 Info<<
" Region " << regioni <<
" : corresponds to existing"
1849 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1862 zoneI = cellZones.
size();
1879 Info<<
" Region " << regioni <<
" : created new cellZone "
1880 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1895 Info<<
"Writing cellZones as new mesh to time " << runTime.name()
1904 Info<<
"Writing cellSets corresponding to cellZones." <<
nl <<
endl;
1908 const cellZone& cz = cellZones[zoneI];
1952 Info<<
nl <<
"Found point " << insidePoint <<
" in cell " << celli
1957 regioni = cellRegion[celli];
1963 <<
"Subsetting region " << regioni
1964 <<
" containing point " << insidePoint <<
endl;
1969 <<
"Point " << insidePoint
1970 <<
" is not inside the mesh." <<
nl
1971 <<
"Bounding box of the mesh:" << mesh.
bounds()
1975 createAndWriteRegion
1984 (overwrite ? oldInstance : runTime.name())
1987 else if (largestOnly)
1992 <<
"Subsetting region " << regioni
1993 <<
" of size " << regionSizes[regioni]
1996 createAndWriteRegion
2005 (overwrite ? oldInstance : runTime.name())
2011 for (
label regioni = 0; regioni < nCellRegions; regioni++)
2014 <<
"Region " << regioni <<
nl
2015 <<
"-------- " <<
endl;
2017 createAndWriteRegion
2026 (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...
This boundary condition is not designed to be evaluated; it is assumed that the value is assigned via...
A collection of cell labels.
A list of keyword definitions, which are a keyword followed by any number of values (e....
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.
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
const vectorField & cellCentres() const
label nInternalFaces() 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.
#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(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(), 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.
word name(const bool)
Return a word representation of a bool.
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)
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