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);
298 void getInterfaceSizes
301 const bool useFaceZones,
324 if (ownRegion != neiRegion)
346 coupledRegion[i] = cellRegion[celli];
354 label neiRegion = coupledRegion[i];
356 if (ownRegion != neiRegion)
389 regionsToSize.
find(slaveIter.key());
391 if (masterIter != regionsToSize.
end())
399 label zoneID = iter.key();
400 label slaveSize = iter();
406 if (zoneFnd != masterInfo.
end())
408 zoneFnd() += slaveSize;
412 masterInfo.
insert(zoneID, slaveSize);
418 regionsToSize.
insert(slaveIter.key(), slaveIter());
432 toMaster << regionsToSize;
445 label nInterfaces = 0;
449 nInterfaces += info.
size();
452 interfaces.
setSize(nInterfaces);
453 interfaceNames.
setSize(nInterfaces);
454 interfaceSizes.
setSize(nInterfaces);
460 const edge&
e = iter.key();
467 interfaces[nInterfaces] = iter.key();
468 label zoneID = infoIter.key();
473 name0 +
"_to_" + name1,
474 name1 +
"_to_" + name0
482 zoneName +
"_" + name0 +
"_to_" + name1,
483 zoneName +
"_" + name1 +
"_to_" + name0
486 interfaceSizes[nInterfaces] = infoIter();
488 if (regionsToInterface.found(
e))
490 regionsToInterface[
e].insert(zoneID, nInterfaces);
495 zoneAndInterface.
insert(zoneID, nInterfaces);
496 regionsToInterface.insert(
e, zoneAndInterface);
518 if (ownRegion != neiRegion)
528 min(ownRegion, neiRegion),
529 max(ownRegion, neiRegion)
532 faceToInterface[facei] = regionsToInterface[interface][zoneID];
539 label neiRegion = coupledRegion[i];
541 if (ownRegion != neiRegion)
551 min(ownRegion, neiRegion),
552 max(ownRegion, neiRegion)
555 faceToInterface[facei] = regionsToInterface[interface][zoneID];
589 Info<<
"Testing:" << io.objectPath() <<
endl;
596 dummyDict.
add(
"divSchemes", divDict);
598 dummyDict.
add(
"gradSchemes", gradDict);
600 dummyDict.
add(
"laplacianSchemes", laplDict);
632 coupledRegion[i] = cellRegion[celli];
644 labelList cellsToRemove(getNonRegionCells(cellRegion, regioni));
649 labelList exposedFaces = cellRemover.getExposedFaces(cellsToRemove);
654 label facei = exposedFaces[i];
655 label interfacei = faceToInterface[facei];
658 label neiRegion = -1;
673 label otherRegion = -1;
675 if (ownRegion == regioni && neiRegion != regioni)
677 otherRegion = neiRegion;
679 else if (ownRegion != regioni && neiRegion == regioni)
681 otherRegion = ownRegion;
686 <<
"Exposed face:" << facei
688 <<
" has owner region " << ownRegion
689 <<
" and neighbour region " << neiRegion
690 <<
" when handling region:" << regioni
695 if (regioni < otherRegion)
697 exposedPatchIDs[i] = interfacePatches[interfacei];
701 exposedPatchIDs[i] = interfacePatches[interfacei]+1;
706 cellRemover.setRefinement
732 void createAndWriteRegion
737 const bool prefixRegion,
741 const word& newMeshInstance
744 Info<<
"Creating mesh for region " << regioni
762 forAll(interfacePatches, interfacei)
764 addedPatches.
insert(interfacePatches[interfacei]);
765 addedPatches.
insert(interfacePatches[interfacei]+1);
772 newMesh().topoChange(map());
775 subsetVolFields<volScalarField>
783 subsetVolFields<volVectorField>
791 subsetVolFields<volSphericalTensorField>
799 subsetVolFields<volSymmTensorField>
807 subsetVolFields<volTensorField>
816 subsetSurfaceFields<surfaceScalarField>
824 subsetSurfaceFields<surfaceVectorField>
832 subsetSurfaceFields<surfaceSphericalTensorField>
840 subsetSurfaceFields<surfaceSymmTensorField>
848 subsetSurfaceFields<surfaceTensorField>
869 Info<<
"Deleting empty patches" <<
endl;
876 if (!isA<processorPolyPatch>(pp))
883 sharedPatches.
append(newI);
895 if (isA<processorPolyPatch>(pp) && pp.size())
897 oldToNew[
patchi] = newI++;
901 const label nNewPatches = newI;
906 if (oldToNew[
patchi] == -1)
908 oldToNew[
patchi] = newI++;
918 Info<<
"Prefixing patches with region name" <<
endl;
920 renamePatches(newMesh(),
regionNames[regioni], sharedPatches);
926 newMesh().setInstance(newMeshInstance);
930 Info<<
"Writing addressing to base mesh" <<
endl;
936 "pointRegionAddressing",
937 newMesh().facesInstance(),
938 newMesh().meshSubDir,
946 Info<<
"Writing map " << pointProcAddressing.name()
947 <<
" from region" << regioni
948 <<
" points back to base mesh." <<
endl;
949 pointProcAddressing.
write();
955 "faceRegionAddressing",
956 newMesh().facesInstance(),
957 newMesh().meshSubDir,
965 forAll(faceProcAddressing, facei)
969 label oldFacei = map().faceMap()[facei];
973 map().cellMap()[newMesh().faceOwner()[facei]]
977 faceProcAddressing[facei] = oldFacei+1;
981 faceProcAddressing[facei] = -(oldFacei+1);
984 Info<<
"Writing map " << faceProcAddressing.name()
985 <<
" from region" << regioni
986 <<
" faces back to base mesh." <<
endl;
987 faceProcAddressing.
write();
993 "cellRegionAddressing",
994 newMesh().facesInstance(),
995 newMesh().meshSubDir,
1003 Info<<
"Writing map " <<cellProcAddressing.name()
1004 <<
" from region" << regioni
1005 <<
" cells back to base mesh." <<
endl;
1006 cellProcAddressing.
write();
1026 forAll(interfaces, interI)
1028 const edge&
e = interfaces[interI];
1029 const Pair<word>& names = interfaceNames[interI];
1077 <<
" " << interfacePatches[interI]
1080 <<
" " << interfacePatches[interI]+1
1084 return interfacePatches;
1089 label findCorrespondingRegion
1093 const label nCellRegions,
1095 const label minOverlapSize
1101 forAll(cellRegion, celli)
1103 if (existingZoneID[celli] == zoneI)
1105 cellsInZone[cellRegion[celli]]++;
1116 if (cellsInZone[regioni] < minOverlapSize)
1124 forAll(cellRegion, celli)
1126 if (cellRegion[celli] == regioni && existingZoneID[celli] != zoneI)
1159 const cellZone& cz = cellZones[zoneI];
1163 label celli = cz[i];
1164 if (zoneID[celli] == -1)
1166 zoneID[celli] = zoneI;
1171 <<
"Cell " << celli <<
" with cell centre "
1173 <<
" is multiple zones. This is not allowed." <<
endl
1174 <<
"It is in zone " << cellZones[zoneID[celli]].
name()
1175 <<
" and in zone " << cellZones[zoneI].
name()
1194 const bool sloppyCellZones,
1197 const label nCellRegions,
1200 const word& defaultRegionName,
1209 regionToZone.
setSize(nCellRegions, -1);
1216 getZoneID(mesh, cellZones, zoneID, neiZoneID);
1228 if (zoneNames[proci] != zoneNames[0])
1231 <<
"cellZones not synchronised across processors." <<
endl
1232 <<
"Master has cellZones " << zoneNames[0] <<
endl
1233 <<
"Processor " << proci
1234 <<
" has cellZones " << zoneNames[proci]
1243 cellZones[zoneI].size(),
1250 if (sloppyCellZones)
1252 Info<<
"Trying to match regions to existing cell zones;"
1253 <<
" region can be subset of cell zone." <<
nl <<
endl;
1257 label regioni = findCorrespondingRegion
1263 label(0.5*zoneSizes[zoneI])
1268 Info<<
"Sloppily matched region " << regioni
1270 <<
" to zone " << zoneI <<
" size " << zoneSizes[zoneI]
1272 zoneToRegion[zoneI] = regioni;
1273 regionToZone[regioni] = zoneI;
1280 Info<<
"Trying to match regions to existing cell zones." <<
nl <<
endl;
1284 label regioni = findCorrespondingRegion
1295 zoneToRegion[zoneI] = regioni;
1296 regionToZone[regioni] = zoneI;
1302 label nUnmatchedRegions = 0;
1304 forAll(regionToZone, regioni)
1306 if (regionToZone[regioni] == -1)
1308 nUnmatchedRegions++;
1312 if (nUnmatchedRegions)
1314 label nUnmatchedi = 1;
1317 forAll(regionToZone, regioni)
1319 if (regionToZone[regioni] == -1)
1323 nUnmatchedRegions == 1
1324 && defaultRegionName != standardRegionName
1332 defaultRegionName +
Foam::name(nUnmatchedi++);
1340 void writeCellToRegion(
const fvMesh& mesh,
const labelList& cellRegion)
1357 cellToRegion.write();
1359 Info<<
"Writing region per cell file (for manual decomposition) to "
1360 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1377 zeroGradientFvPatchScalarField::typeName
1379 forAll(cellRegion, celli)
1381 cellToRegion[celli] = cellRegion[celli];
1383 cellToRegion.write();
1385 Info<<
"Writing region per cell as volScalarField to "
1386 << cellToRegion.relativeObjectPath() <<
nl <<
endl;
1393 int main(
int argc,
char *argv[])
1397 "splits mesh into multiple regions (detected by walking across faces)"
1404 "additionally split cellZones off into separate regions"
1409 "use cellZones only to split mesh into regions; do not use walking"
1413 "cellZonesFileOnly",
1415 "like -cellZonesOnly, but use specified file"
1421 "specify additional region boundaries that walking does not cross"
1426 "place cells into cellZones instead of splitting mesh"
1431 "only write largest region"
1437 "only write region containing point"
1447 "try to match heuristically regions to existing cell zones"
1452 "use faceZones to patch inter-region faces instead of single patch"
1457 "prefix region name to all patches, not just coupling patches"
1461 "defaultRegionName",
1463 "base name of the unspecified regions, defaults to \"region\""
1468 "do not update fields"
1477 word blockedFacesName;
1480 Info<<
"Reading blocked internal faces from faceSet "
1481 << blockedFacesName <<
nl <<
endl;
1499 (useCellZonesOnly || useCellZonesFile)
1500 && (useCellZones || blockedFacesName.size())
1504 <<
"You cannot specify both -cellZonesOnly or -cellZonesFileOnly"
1505 <<
" (which specify complete split)"
1506 <<
" in combination with -blockedFaces or -cellZones"
1507 <<
" (which imply a split based on topology)"
1514 Info<<
"Using current faceZones to divide inter-region interfaces"
1515 <<
" into multiple patches."
1520 Info<<
"Creating single patch per inter-region interface."
1525 if (insidePoint && largestOnly)
1528 <<
"You cannot specify both -largestOnly"
1529 <<
" (keep region with most cells)"
1530 <<
" and -insidePoint (keep region containing point)"
1534 const word defaultRegionName
1545 getZoneID(mesh, cellZones, zoneID, neiZoneID);
1561 label nCellRegions = 0;
1562 if (useCellZonesOnly)
1564 Info<<
"Using current cellZones to split mesh into regions."
1565 <<
" This requires all"
1566 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1569 if (unzonedCelli != -1)
1572 <<
"For the cellZonesOnly option all cells "
1573 <<
"have to be in a cellZone." <<
endl
1574 <<
"Cell " << unzonedCelli
1576 <<
" is not in a cellZone. There might be more unzoned cells."
1579 cellRegion = zoneID;
1580 nCellRegions =
gMax(cellRegion)+1;
1581 regionToZone.
setSize(nCellRegions);
1584 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1586 regionToZone[regioni] = regioni;
1587 zoneToRegion[regioni] = regioni;
1591 else if (useCellZonesFile)
1594 Info<<
"Reading split from cellZones file " << zoneFile <<
endl
1595 <<
"This requires all"
1596 <<
" cells to be in one and only one cellZone." <<
nl <<
endl;
1615 getZoneID(mesh, newCellZones, newZoneID, newNeiZoneID);
1618 if (unzonedCelli != -1)
1621 <<
"For the cellZonesFileOnly option all cells "
1622 <<
"have to be in a cellZone." <<
endl
1623 <<
"Cell " << unzonedCelli
1625 <<
" is not in a cellZone. There might be more unzoned cells."
1628 cellRegion = newZoneID;
1629 nCellRegions =
gMax(cellRegion)+1;
1630 zoneToRegion.
setSize(newCellZones.size(), -1);
1631 regionToZone.
setSize(nCellRegions);
1633 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1635 regionToZone[regioni] = regioni;
1636 zoneToRegion[regioni] = regioni;
1637 regionNames[regioni] = newCellZones[regioni].name();
1649 if (blockedFacesName.size())
1651 faceSet blockedFaceSet(mesh, blockedFacesName);
1654 <<
" blocked faces from set " << blockedFacesName <<
nl <<
endl;
1660 blockedFace[iter.key()] =
true;
1674 if (zoneID[own] != zoneID[nei])
1676 blockedFace[facei] =
true;
1685 if (zoneID[mesh.
faceOwner()[facei]] != neiZoneID[i])
1687 blockedFace[facei] =
true;
1694 nCellRegions = regions.nRegions();
1712 if (largestOnly || insidePoint)
1714 forAll(regionToZone, regioni)
1716 if (regionToZone[regioni] == -1)
1722 else if (insidePoint)
1726 else if (largestOnly)
1735 Info<<
endl <<
"Number of regions:" << nCellRegions <<
nl <<
endl;
1739 writeCellToRegion(mesh, cellRegion);
1748 forAll(cellRegion, celli)
1750 regionSizes[cellRegion[celli]]++;
1752 forAll(regionSizes, regioni)
1757 Info<<
"Region\tCells" <<
nl
1758 <<
"------\t-----" <<
endl;
1760 forAll(regionSizes, regioni)
1762 Info<< regioni <<
'\t' << regionSizes[regioni] <<
nl;
1769 Info<<
"Region\tZone\tName" <<
nl
1770 <<
"------\t----\t----" <<
endl;
1771 forAll(regionToZone, regioni)
1773 Info<< regioni <<
'\t' << regionToZone[regioni] <<
'\t'
1811 Info<<
"Sizes of interfaces between regions:" <<
nl <<
nl
1812 <<
"Interface\tRegion\tRegion\tFaces" <<
nl
1813 <<
"---------\t------\t------\t-----" <<
endl;
1815 forAll(interfaces, interI)
1817 const edge&
e = interfaces[interI];
1820 <<
"\t\t" <<
e[0] <<
'\t' <<
e[1]
1821 <<
'\t' << interfaceSizes[interI] <<
nl;
1850 if (nCellRegions == 1)
1852 Info<<
"Only one region. Doing nothing." <<
endl;
1854 else if (makeCellZones)
1856 Info<<
"Putting cells into cellZones instead of splitting mesh."
1861 for (
label regioni = 0; regioni < nCellRegions; regioni++)
1863 label zoneI = regionToZone[regioni];
1867 Info<<
" Region " << regioni <<
" : corresponds to existing"
1869 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1882 zoneI = cellZones.
size();
1901 Info<<
" Region " << regioni <<
" : created new cellZone "
1902 << zoneI <<
' ' << cellZones[zoneI].
name() <<
endl;
1917 Info<<
"Writing cellZones as new mesh to time " << runTime.name()
1926 Info<<
"Writing cellSets corresponding to cellZones." <<
nl <<
endl;
1930 const cellZone& cz = cellZones[zoneI];
1974 Info<<
nl <<
"Found point " << insidePoint <<
" in cell " << celli
1979 regioni = cellRegion[celli];
1985 <<
"Subsetting region " << regioni
1986 <<
" containing point " << insidePoint <<
endl;
1991 <<
"Point " << insidePoint
1992 <<
" is not inside the mesh." <<
nl
1993 <<
"Bounding box of the mesh:" << mesh.
bounds()
1997 createAndWriteRegion
2006 (overwrite ? oldInstance : runTime.name())
2009 else if (largestOnly)
2014 <<
"Subsetting region " << regioni
2015 <<
" of size " << regionSizes[regioni]
2018 createAndWriteRegion
2027 (overwrite ? oldInstance : runTime.name())
2033 for (
label regioni = 0; regioni < nCellRegions; regioni++)
2036 <<
"Region " << regioni <<
nl
2037 <<
"-------- " <<
endl;
2039 createAndWriteRegion
2048 (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.
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.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
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.
label findZoneID(const word &zoneName) const
Find zone index given a name.
void clearAddressing()
Clear addressing.
label whichZone(const label objectIndex) const
Given a global object index, return the zone it is in.
wordList names() const
Return a list of zone names.
bool checkParallelSync(const bool report=false) const
Check whether all procs have all zones and in same order. Return.
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.
bool set(const label) const
Is element set.
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.
static const word & system()
Return system name.
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.
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....
bool add(entry *, bool mergeEntry=false)
Add a new entry.
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 patch which holds a mapping engine to map values from another patch.
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.
static word defaultRegion
Return the default region name.
const meshFaceZones & faceZones() const
Return face zones.
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 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.
const meshCellZones & cellZones() const
Return cell zones.
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.
Templated form of IOobject providing type information for file reading and header type checking.
A class for handling words, derived from string.
const word & name() const
Return name.
#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
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