75 label sizeCoeffToRefinement
77 const scalar level0Coeff,
78 const scalar sizeCoeff
81 return round(::
log(level0Coeff/sizeCoeff)/::
log(2));
90 const label gapLevelIncrement,
91 const scalar level0Coeff
100 const word& geomName = allGeometry.
names()[geomi];
102 if (surfacesDict.
found(geomName))
129 const word& geomName = allGeometry.
names()[geomi];
138 names[surfi] = geomName;
139 surfaces[surfi] = geomi;
146 const word scsFuncName =
147 shapeDict.
get<
word>(
"surfaceCellSizeFunction");
152 const scalar surfaceCellSize =
153 scsDict.
get<scalar>(
"surfaceCellSizeCoeff");
155 const label refLevel = sizeCoeffToRefinement
161 globalMinLevel[surfi] = refLevel;
162 globalMaxLevel[surfi] = refLevel;
163 globalLevelIncr[surfi] = gapLevelIncrement;
179 if (shapeDict.
found(
"patchInfo"))
191 if (shapeDict.
found(
"regions"))
195 allGeometry[surfaces[surfi]].regions();
207 if (regionDict.
found(
"patchInfo"))
209 regionPatchInfo[surfi].insert
220 if (shapeDict.
found(
"regions"))
225 allGeometry[surfaces[surfi]].regions();
232 shapeControlRegionsDict.
subDict 237 const word scsFuncName =
238 shapeControlRegionDict.
get<
word>
240 "surfaceCellSizeFunction" 245 scsFuncName +
"Coeffs" 248 const scalar surfaceCellSize =
249 scsDict.
get<scalar>(
"surfaceCellSizeCoeff");
251 const label refLevel = sizeCoeffToRefinement
257 regionMinLevel[surfi].insert(regioni, refLevel);
258 regionMaxLevel[surfi].insert(regioni, refLevel);
259 regionLevelIncr[surfi].insert(regioni, 0);
273 regionOffset[surfi] = nRegions;
274 nRegions += allGeometry[surfaces[surfi]].regions().
size();
283 forAll(globalMinLevel, surfi)
285 label nRegions = allGeometry[surfaces[surfi]].regions().
size();
288 for (label i = 0; i < nRegions; i++)
290 label globalRegioni = regionOffset[surfi] + i;
291 minLevel[globalRegioni] = globalMinLevel[surfi];
292 maxLevel[globalRegioni] = globalMaxLevel[surfi];
293 gapLevel[globalRegioni] =
294 maxLevel[globalRegioni]
295 + globalLevelIncr[surfi];
297 if (globalPatchInfo.set(surfi))
302 globalPatchInfo[surfi].clone()
310 label globalRegioni = regionOffset[surfi] + iter.key();
312 minLevel[globalRegioni] = iter();
313 maxLevel[globalRegioni] = regionMaxLevel[surfi][iter.key()];
314 gapLevel[globalRegioni] =
315 maxLevel[globalRegioni]
316 + regionLevelIncr[surfi][iter.key()];
322 label globalRegioni = regionOffset[surfi] + iter.key();
323 patchInfo.
set(globalRegioni, iter()().clone());
362 <<
setw(10) <<
"Min Level" 363 <<
setw(10) <<
"Max Level" 364 <<
setw(10) <<
"Gap Level" <<
nl 365 <<
setw(maxLen) <<
"------" 366 <<
setw(10) <<
"---------" 367 <<
setw(10) <<
"---------" 408 for (
const label patchi : includePatches)
411 patchSize.insert(pp.
name(), pp.size());
423 compactZoneID.insert(iter.key(), compactZoneID.size());
433 label patchi =
bMesh.findPatchID(iter.key());
436 patchToCompactZone[patchi] = iter.val();
443 for (
const label patchi : includePatches)
448 faceLabels.append(pp.
start()+i);
449 compactZones.append(patchToCompactZone[pp.
index()]);
466 allBoundary.meshPoints(),
467 allBoundary.meshPointMap(),
503 gatheredPoints.clear();
505 faceList allFaces = ListListOps::combine<faceList>
510 gatheredFaces.clear();
512 labelList allZones = ListListOps::combine<labelList>
517 gatheredZones.clear();
525 Info<<
"surfZone " << iter() <<
" : " << surfZones[iter()].name()
546 globalCasePath.
clean();
548 Info<<
"Writing merged surface to " << globalCasePath <<
endl;
550 sortedFace.
write(globalCasePath);
561 label nUnaligned = 0;
565 const face&
f = faces[facei];
571 const scalar magV(
mag(v));
572 if (magV > ROOTVSMALL)
577 dir < pTraits<vector>::nComponents;
581 const scalar
s(
mag(v[dir]));
582 if (
s > magV*tol &&
s < magV*(1-tol))
596 os <<
"Initial mesh has " << nUnaligned
597 <<
" edges unaligned with any of the coordinate axes" <<
nl <<
endl;
604 scalar getMergeDistance
607 const scalar mergeTol,
612 scalar mergeDist = mergeTol *
meshBb.mag();
615 <<
"Overall mesh bounding box : " <<
meshBb <<
nl 616 <<
"Relative tolerance : " << mergeTol <<
nl 617 <<
"Absolute matching distance : " << mergeDist <<
nl 629 if (mergeTol < writeTol)
632 <<
"Your current settings specify ASCII writing with " 634 <<
"Your merging tolerance (" << mergeTol
635 <<
") is finer than this." <<
nl 636 <<
"Change to binary writeFormat, " 637 <<
"or increase the writePrecision" <<
endl 638 <<
"or adjust the merge tolerance (mergeTol)." 663 if (!isA<processorPolyPatch>(pp))
667 isA<coupledPolyPatch>(pp)
672 oldToNew[patchi] = newPatchi++;
681 if (isA<processorPolyPatch>(pp))
683 oldToNew[patchi] = newPatchi++;
688 const label nKeepPatches = newPatchi;
691 if (nKeepPatches != pbm.
size())
698 if (oldToNew[patchi] == -1)
701 <<
" type " << pbm[patchi].type()
702 <<
" at position " << patchi <<
endl;
703 oldToNew[patchi] = newPatchi++;
741 Info<<
"Wrote mesh in = " 746 int main(
int argc,
char *argv[])
750 "Automatic split hex mesher. Refines and snaps to surface" 759 "Check all surface geometry for quality" 763 "Check case set-up only using a single time step" 769 "Simplify the surface using snappyHexMesh starting from a boundBox" 774 "(patch0 .. patchN)",
775 "Only triangulate selected patches (wildcards supported)" 781 "Name of the file to save the simplified surface to" 790 const bool overwrite =
args.
found(
"overwrite");
792 const bool surfaceSimplify =
args.
found(
"surfaceSimplify");
797 Info<<
"Operating in dry-run mode to detect set-up errors" 803 Info<<
"Read mesh in = " 845 const scalar mergeDist = getMergeDistance
848 meshRefinement::get<scalar>
867 coordSetWriters::vtkWriter::typeName
879 const scalar maxSizeRatio
914 decomposeDict = *dictPtr;
918 decomposeDict.
add(
"method",
"none");
919 decomposeDict.
add(
"numberOfSubdomains", 1);
1023 Info<<
"Reading refinement surfaces." <<
endl;
1025 if (surfaceSimplify)
1027 addProfiling(surfaceSimplify,
"snappyHexMesh::surfaceSimplify");
1043 "geometryToConformTo" 1047 foamyHexMeshDict.
subDict(
"motionControl");
1050 motionDict.
subDict(
"shapeControlFunctions");
1053 const scalar defaultCellSize =
1054 motionDict.
get<scalar>(
"defaultCellSize");
1056 const scalar initialCellSize =
::pow(
mesh.
V()[0], 1.0/3.0);
1064 createRefinementSurfaces
1070 initialCellSize/defaultCellSize
1085 "refinementSurfaces",
1093 Info<<
"Read refinement surfaces in = " 1111 forAll(surfaceGeometry, surfi)
1113 label geomi = surfaceGeometry[surfi];
1117 forAll(regNames, regioni)
1119 label globalRegioni = surfaces.
globalRegion(surfi, regioni);
1121 if (patchInfo.
set(globalRegioni))
1124 meshRefinement::get<word>
1126 patchInfo[globalRegioni],
1135 patchTypes[geomi][regioni] = wallPolyPatch::typeName;
1164 Info<<
"Checking for geometry size relative to mesh." <<
endl;
1166 forAll(allGeometry, geomi)
1172 if (ratio > maxSizeRatio || ratio < 1.0/maxSizeRatio)
1175 <<
" " << allGeometry.
names()[geomi]
1176 <<
" bounds differ from mesh" 1177 <<
" by more than a factor " << maxSizeRatio <<
":" <<
nl 1178 <<
" bounding box : " << bb <<
nl 1179 <<
" mesh bounding box : " <<
meshBb 1182 if (!
meshBb.contains(bb))
1185 <<
" " << allGeometry.
names()[geomi]
1186 <<
" bounds not fully contained in mesh" <<
nl 1187 <<
" bounding box : " << bb <<
nl 1188 <<
" mesh bounding box : " <<
meshBb 1201 Info<<
"Reading refinement shells." <<
endl;
1208 Info<<
"Read refinement shells in = " 1212 Info<<
"Setting refinement level of surface to be consistent" 1213 <<
" with shells." <<
endl;
1215 Info<<
"Checked shell refinement in = " 1224 if (!limitDict.empty())
1226 Info<<
"Reading limit shells." <<
endl;
1231 if (!limitDict.empty())
1233 Info<<
"Read limit shells in = " 1243 unusedGeometries.erase(surfaces.
surfaces());
1244 unusedGeometries.erase(shells.shells());
1245 unusedGeometries.erase(limitShells.shells());
1247 if (unusedGeometries.size())
1250 <<
"The following geometry entries are not used:" <<
nl;
1251 for (
const label geomi : unusedGeometries)
1253 Info<<
" " << allGeomNames[geomi] <<
nl;
1265 Info<<
"Reading features." <<
endl;
1275 Info<<
"Read features in = " 1282 Info<<
"Checking for line geometry size relative to surface geometry." 1286 bool hasErrors = features.checkSizes
1304 <<
"Determining initial surface intersections" <<
nl 1305 <<
"-----------------------------------------" <<
nl 1325 Info<<
"Calculated surface intersections in = " 1347 Info<<
"Setting refinement level of surface to be consistent" 1348 <<
" with curvature." <<
endl;
1351 refineParams.curvature(),
1354 Info<<
"Checked curvature refinement in = " 1379 refineParams.addCellZonesToMesh(
mesh);
1394 <<
"Adding patches for surface regions" <<
nl 1395 <<
"----------------------------------" <<
nl 1405 <<
setw(6) <<
"Patch" 1406 <<
setw(20) <<
"Type" 1407 <<
setw(30) <<
"Region" <<
nl 1408 <<
setw(6) <<
"-----" 1409 <<
setw(20) <<
"----" 1417 forAll(surfaceGeometry, surfi)
1419 label geomi = surfaceGeometry[surfi];
1429 surfaces.
surfZones()[surfi].faceZoneNames();
1431 if (fzNames.
empty())
1440 if (surfacePatchInfo.
set(globalRegioni))
1445 surfacePatchInfo[globalRegioni]
1451 patchInfo.
set(
"type", wallPolyPatch::typeName);
1463 <<
setw(6) << patchi
1464 <<
setw(20) << pbm[patchi].type()
1465 <<
setw(30) << regNames[i] <<
nl;
1468 globalToMasterPatch[globalRegioni] = patchi;
1469 globalToSlavePatch[globalRegioni] = patchi;
1483 if (surfacePatchInfo.
set(globalRegioni))
1488 surfacePatchInfo[globalRegioni]
1494 patchInfo.
set(
"type", wallPolyPatch::typeName);
1506 <<
setw(6) << patchi
1507 <<
setw(20) << pbm[patchi].type()
1508 <<
setw(30) << regNames[i] <<
nl;
1511 globalToMasterPatch[globalRegioni] = patchi;
1515 const word slaveName = regNames[i] +
"_slave";
1518 if (surfacePatchInfo.
set(globalRegioni))
1523 surfacePatchInfo[globalRegioni]
1529 patchInfo.
set(
"type", wallPolyPatch::typeName);
1541 <<
setw(6) << patchi
1542 <<
setw(20) << pbm[patchi].type()
1543 <<
setw(30) << slaveName <<
nl;
1546 globalToSlavePatch[globalRegioni] = patchi;
1552 if (regNames.
size())
1556 const word& fzName = fzNames[fzi];
1557 label globalRegioni = surfaces.
globalRegion(surfi, fzi);
1562 pbm[globalToMasterPatch[globalRegioni]].
name(),
1563 pbm[globalToSlavePatch[globalRegioni]].
name(),
1575 Info<<
"Added patches in = " 1598 if (i != string::npos)
1600 word cz0 = fzName.substr(0, i);
1601 word cz1 = fzName.substr(i+4, fzName.size()-i+4);
1602 word slaveName(cz1 +
"_to_" + cz0);
1608 const word slaveName = fzName +
"_slave";
1614 if (faceZoneToPatches.
size())
1636 nFaces += pbm[adaptPatchIDs[i]].size();
1643 const polyPatch& pp = pbm[adaptPatchIDs[i]];
1646 faceLabels[nFaces++] = pp.
start()+i;
1671 <<
"You have selected decomposition method " 1672 << decomposer.typeName
1673 <<
" which is not parallel aware." <<
endl 1674 <<
"Please select one that is (hierarchical, ptscotch)" 1688 const bool wantRefine
1690 meshRefinement::get<bool>(
meshDict,
"castellatedMesh", dryRun)
1694 meshRefinement::get<bool>(
meshDict,
"snap", dryRun)
1696 const bool wantLayers
1698 meshRefinement::get<bool>(
meshDict,
"addLayers", dryRun)
1706 if (errorMsg.size() || IOerrorMsg.size())
1715 <<
"Missing/incorrect required dictionary entries:" <<
nl 1717 << IOerrorMsg.c_str() <<
nl 1718 << errorMsg.c_str() <<
nl <<
nl 1719 <<
"Exiting dry-run" <<
nl <<
endl;
1731 meshRefinement::FaceMergeType::GEOMETRIC;
1733 const bool mergePatchFaces
1738 if (!mergePatchFaces)
1740 Info<<
"Not merging patch-faces of cell to preserve" 1741 <<
" (split)hex cell shape." 1743 mergeType = meshRefinement::FaceMergeType::NONE;
1747 const bool mergeAcrossPatches
1752 if (mergeAcrossPatches)
1754 Info<<
"Merging co-planar patch-faces of cells" 1755 <<
", regardless of patch assignment" 1757 mergeType = meshRefinement::FaceMergeType::IGNOREPATCH;
1773 globalToMasterPatch,
1780 if (!overwrite && !debugLevel)
1786 refineDriver.doRefine
1791 refineParams.handleSnapProblems(),
1797 if (!keepPatches && !wantSnap && !wantLayers)
1813 Info<<
"Mesh refined in = " 1814 <<
timer.cpuTimeIncrement() <<
" s." <<
endl;
1826 globalToMasterPatch,
1831 if (!overwrite && !debugLevel)
1837 scalar curvature = refineParams.curvature();
1838 scalar planarAngle = refineParams.planarAngle();
1851 if (!keepPatches && !wantLayers)
1867 Info<<
"Mesh snapped in = " 1868 <<
timer.cpuTimeIncrement() <<
" s." <<
endl;
1888 globalToMasterPatch,
1894 const bool preBalance =
1898 if (!overwrite && !debugLevel)
1903 layerDriver.doLayers
1931 Info<<
"Layers added in = " 1932 <<
timer.cpuTimeIncrement() <<
" s." <<
endl;
1942 Info<<
"Checking final mesh ..." <<
endl;
1953 Info<<
"Finished meshing with " << nErrors <<
" illegal faces" 1954 <<
" (concave, zero area or negative cell pyramid volume)" 1960 Info<<
"Finished meshing without any errors" <<
endl;
1967 if (surfaceSimplify)
1969 addProfiling(surfaceSimplify,
"snappyHexMesh::surfaceSimplify");
1977 includePatches =
bMesh.patchSet
1988 if (!isA<processorPolyPatch>(
patch))
1990 includePatches.insert(patchi);
2000 "constant/triSurface/simplifiedSurface.stl" 2016 "internalCellCentres",
2025 cellCentres.
write();
2030 Info<<
"Finished meshing in = " 2039 if (errorMsg.size() || IOerrorMsg.size())
2047 <<
"Missing/incorrect required dictionary entries:" <<
nl 2049 << IOerrorMsg.c_str() <<
nl 2050 << errorMsg.c_str() <<
nl <<
nl 2051 <<
"Exiting dry-run" <<
nl <<
endl;
const IOdictionary & meshDict
A surface geometry mesh, in which the surface zone information is conveyed by the 'zoneId' associated...
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
static bool checkMesh(const bool report, const polyMesh &mesh, const dictionary &dict, labelHashSet &wrongFaces, const bool dryRun=false)
Check mesh with mesh settings in dict. Collects incorrect faces.
static void mapCombineGather(const List< commsStruct > &comms, Container &values, const CombineOp &cop, const int tag, const label comm)
prefixOSstream Perr
OSstream wrapped stderr (std::cerr) with parallel prefix.
void printMeshInfo(const bool, const string &) const
Print some mesh stats.
label addFaceZone(const word &fzName, const word &masterPatch, const word &slavePatch, const surfaceZonesInfo::faceZoneType &fzType)
Add/lookup faceZone and update information. Return index of.
static void noFunctionObjects(bool addWithOption=false)
Remove '-noFunctionObjects' option and ignore any occurrences.
static void addNote(const string ¬e)
Add extra notes for the usage information.
void size(const label n)
Older name for setAddressableSize.
static void removeFiles(const polyMesh &mesh)
Helper: remove all procAddressing files from mesh instance.
static const dictionary & subDict(const dictionary &dict, const word &keyword, const bool noExit, enum keyType::option matchOpt=keyType::REGEX)
Wrapper around dictionary::subDict which does not exit.
#define addProfiling(name, descr)
Define profiling trigger with specified name and description string.
fileName path() const
Return path.
Simple container to keep together layer specific information.
void clear() const
Clear any messages.
List< word > names(const UPtrList< T > &list, const UnaryMatchPredicate &matcher)
List of names generated by calling name() for each list item and filtered for matches.
A class for handling file names.
const labelList & surfaces() const
Ostream & indent(Ostream &os)
Indent stream.
virtual bool parallelAware() const =0
Is method parallel aware?
Identifies a surface patch/zone by name and index, with optional geometric type.
label checkTopology(const bool report) const
All topological checks. Return number of failed checks.
dimensionedScalar log(const dimensionedScalar &ds)
errorManipArg< error, int > exit(error &err, const int errNo=1)
A face is a list of labels corresponding to mesh vertices.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
bool getFaceZoneInfo(const word &fzName, label &masterPatchID, label &slavePatchID, surfaceZonesInfo::faceZoneType &fzType) const
Lookup faceZone information. Return false if no information.
const word & name() const noexcept
Return the object name.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
constexpr char nl
The newline '\n' character (0x0a)
static ITstream & lookup(const dictionary &dict, const word &keyword, const bool noExit, enum keyType::option matchOpt=keyType::REGEX)
Wrapper around dictionary::lookup which does not exit.
Implements a timeout mechanism via sigalarm.
bool empty() const noexcept
True if the UList is empty (ie, size() is zero)
wordList patchTypes(nPatches)
const word dictName("faMeshDefinition")
Object access operator or list access operator.
Ostream & endl(Ostream &os)
Add newline and flush stream.
List< T > getList(const label index) const
Get a List of values from the argument at index.
static bool & parRun() noexcept
Test if this a parallel run.
static writeType writeLevel()
Get/set write level.
virtual const dictionary & dict() const =0
Return dictionary, if entry is a dictionary.
static unsigned int defaultPrecision() noexcept
Return the default precision.
static void addBoolOption(const word &optName, const string &usage="", bool advanced=false)
Add a bool option to validOptions with usage information.
bool store()
Register object with its registry and transfer ownership to the registry.
static bool writeNow()
Write profiling information now.
static labelList addCellZonesToMesh(const PtrList< surfaceZonesInfo > &surfList, const labelList &namedSurfaces, polyMesh &mesh)
A bounding box defined in terms of min/max extrema points.
label size() const noexcept
The number of elements in table.
entry * add(entry *entryPtr, bool mergeEntry=false)
Add a new entry.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
autoPtr< globalIndex > mergePoints(labelList &pointToGlobal, labelList &uniquePoints) const
Helper for merging (collocated!) mesh point data.
const labelList & minLevel() const
From global region number to refinement level.
Ignore writing from objectRegistry::writeObject()
static int myProcNo(const label communicator=worldComm)
Number of this process (starting from masterNo() = 0)
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T. FatalIOError if not found, or if the number of tokens is incorrect.
T getOrDefault(const word &optName, const T &deflt) const
Get a value from the named option if present, or return default.
const Time & time() const
Return the top-level database.
label nFaces() const noexcept
Number of mesh faces.
const DimensionedField< scalar, volMesh > & V() const
Return cell volumes.
Simple container to keep together refinement specific information.
T returnReduce(const T &value, const BinaryOp &bop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
Perform reduction on a copy, using specified binary operation.
const dictionary & subDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
autoPtr< dictionary > clone() const
Construct and return clone.
bool processorCase() const noexcept
Return true if this is a processor case.
scalar level0EdgeLength() const
Typical edge length between unrefined points.
wordList toc() const
Return the table of contents.
static void broadcast(Type &value, const label comm=UPstream::worldComm)
Broadcast content (contiguous or non-contiguous) to all processes in communicator.
const fvMesh & mesh() const
Reference to mesh.
bool found(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find an entry (const access) with the given keyword.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Container for data on surfaces used for surface-driven refinement. Contains all the data about the le...
virtual const pointField & points() const
Return raw points.
#define forAll(list, i)
Loop across all elements in list.
label fcIndex(const label i) const noexcept
The forward circular index. The next index in the list which returns to the first at the end of the l...
void reset(T *p=nullptr) noexcept
Delete managed object and set to new given pointer.
static const Enum< writeType > writeTypeNames
Encapsulates queries for features.
bool insert(const Key &key, const T &obj)
Copy insert a new entry, not overwriting existing entries.
const dictionary & optionalSubDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary, otherwise return this dictionary.
static autoPtr< coordSetWriter > New(const word &writeFormat)
Return a reference to the selected writer.
A list of faces which address into the list of points.
static label nProcs(const label communicator=worldComm)
Number of ranks in parallel run (for given communicator) is 1 for serial run.
Sends/receives parts of mesh+fvfields to neighbouring processors. Used in load balancing.
static void removeFiles(const polyMesh &)
Helper: remove all sets files from mesh instance.
vectorField pointField
pointField is a vectorField.
static void gatherList(const List< commsStruct > &comms, List< T > &values, const int tag, const label comm)
Gather data, but keep individual values separate. Uses the specified communication schedule...
const dimensionedScalar e
Elementary charge.
void setSize(const label n)
Alias for resize()
const keyType & keyword() const noexcept
Return keyword.
FaceMergeType
Enumeration for what to do with co-planar patch faces on a single.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
labelList identity(const label len, label start=0)
Return an identity map of the given length with (map[i] == i)
A class for handling words, derived from Foam::string.
static void addDryRunOption(const string &usage, bool advanced=false)
Enable a 'dry-run' bool option, with usage information.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Simple container to keep together snap specific information.
int dryRun() const noexcept
Return the dry-run flag.
Reading required, file watched for runTime modification.
const labelList & gapLevel() const
From global region number to small gap refinement level.
const List< wordList > & regionNames() const
Region names per surface.
scalar mag() const
The magnitude/length of the bounding box diagonal.
label size() const noexcept
The number of elements in the list.
string message() const
The accumulated error message.
const word & system() const noexcept
Return system name.
static void checkCoupledFaceZones(const polyMesh &)
Helper function: check that face zones are synced.
static const word null
An empty word.
Container for searchableSurfaces. The collection is specified as a dictionary. For example...
static void addOption(const word &optName, const string ¶m="", const string &usage="", bool advanced=false)
Add an option to validOptions with usage information.
virtual bool write(const token &tok)=0
Write token to stream or otherwise handle it.
Smanip< ios_base::fmtflags > setf(const ios_base::fmtflags flags)
const globalMeshData & globalData() const
Return parallel info.
Abstract base class for domain decomposition.
Encapsulates queries for volume refinement ('refine all cells within shell').
virtual const faceList & faces() const
Return raw faces.
graph_traits< Graph >::vertices_size_type size_type
const PtrList< surfaceZonesInfo > & surfZones() const
const vectorField & cellCentres() const
const T * set(const label i) const
Return const pointer to element (can be nullptr), or nullptr for out-of-range access (ie...
A wordRe is a Foam::word, but can contain a regular expression for matching words or strings...
word timeName() const
Replacement for Time::timeName() that returns oldInstance (if overwrite_)
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO...
const wordList surface
Standard surface field types (scalar, vector, tensor, etc)
const hexRef8 & meshCutter() const
Reference to meshcutting engine.
const word & name() const noexcept
The patch name.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Istream and Ostream manipulators taking arguments.
static int readFlags(const EnumContainer &namedEnum, const wordList &words)
Helper: convert wordList into bit pattern using provided Enum.
bool checkParallelSync(const bool report=false) const
Check whether all procs have all patches and in same order.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
static word timeName(const scalar t, const int precision=precision_)
Return time name of given scalar time formatted with the given precision.
const word & constant() const noexcept
Return constant name.
int debug
Static debugging option.
bool readIfPresent(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX) const
Find an entry if present, and assign to T val. FatalIOError if it is found and the number of tokens i...
OBJstream os(runTime.globalPath()/outputName)
const faceZoneMesh & faceZones() const noexcept
Return face zone mesh.
static bool clean(std::string &str)
Cleanup filename string, possibly applies other transformations such as changing the path separator e...
label addMeshedPatch(const word &name, const dictionary &)
Add patch originating from meshing. Update meshedPatches_.
labelList meshedPatches() const
Get patchIDs for patches added in addMeshedPatch.
Ostream & decrIndent(Ostream &os)
Decrement the indent level.
static const word canonicalName
The canonical name ("decomposeParDict") under which the MeshObject is registered. ...
virtual void rename(const word &newName)
Rename.
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
Find and return a sub-dictionary as a copy, otherwise return an empty dictionary. ...
All to do with adding layers.
double cpuTimeIncrement() const
Return CPU time (in seconds) since last call to cpuTimeIncrement()
static void addFaceZones(meshRefinement &meshRefiner, const refinementParameters &refineParams, const HashTable< Pair< word >> &faceZoneToPatches)
Helper: add faceZones and patches.
IOstreamOption::streamFormat writeFormat() const noexcept
The write stream format.
void updateIntersections(const labelList &changedFaces)
Find any intersection of surface. Store in surfaceIndex_.
messageStream Warning
Warning stream (stdout output on master, null elsewhere), with additional 'FOAM Warning' header text...
void setCurvatureMinLevelFields(const scalar cosAngle, const scalar level0EdgeLength)
Update minLevelFields according to (triSurface-only) curvature.
Helper class which maintains intersections of (changing) mesh with (static) surfaces.
bool erase(T *item)
Remove the specified element from the list and delete it.
All to do with snapping to surface.
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
static autoPtr< decompositionMethod > New(const dictionary &decompDict, const word ®ionName="")
Return a reference to the selected decomposition method, optionally region-specific.
const boundBox & bounds() const
Return mesh bounding box.
const wordList & names() const
Names of surfaces.
void inplaceRenumber(const labelUList &oldToNew, IntListType &input)
Inplace renumber the values (not the indices) of a list.
static void removeFiles(const polyMesh &)
Helper: remove all sets files from mesh instance.
label checkGeometry(const scalar maxRatio, const scalar tolerance, autoPtr< coordSetWriter > &setWriter, const scalar minQuality, const bool report) const
All geometric checks. Return number of failed checks.
label nCells() const noexcept
Number of mesh cells.
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
const wordList & names() const
Surface names, not region names.
Mesh data needed to do the Finite Volume discretisation.
A List with indirect addressing. Like IndirectList but does not store addressing. ...
static bool master(const label communicator=worldComm)
Am I the master rank.
label start() const
Return start label of this patch in the polyMesh face list.
Automatically write from objectRegistry::writeObject()
const std::string patch
OpenFOAM patch number as a std::string.
label globalRegion(const label surfI, const label regionI) const
From surface and region on surface to global region.
void reduce(const List< UPstream::commsStruct > &comms, T &value, const BinaryOp &bop, const int tag, const label comm)
Reduce inplace (cf. MPI Allreduce) using specified communication schedule.
const entry * findEntry(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find an entry (const access) with the given keyword.
static const Enum< debugType > debugTypeNames
static labelList getNamedSurfaces(const PtrList< surfaceZonesInfo > &surfList)
Get indices of named surfaces (surfaces with faceZoneName)
messageStream Info
Information stream (stdout output on master, null elsewhere)
const PtrList< dictionary > & patchInfo() const
From global region number to patch type.
writeType
Enumeration for what to write. Used as a bit-pattern.
faceZoneType
What to do with faceZone faces.
#define IOWarningInFunction(ios)
Report an IO warning using Foam::Warning.
debugType
Enumeration for what to debug. Used as a bit-pattern.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Mesh consisting of general polyhedral cells.
entry * set(entry *entryPtr)
Assign a new entry, overwriting any existing entry.
Omanip< int > setw(const int i)
word setFormat(propsDict.getOrDefault< word >("setFormat", "vtk"))
label index() const noexcept
The index of this patch in the boundaryMesh.
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T, or return the given default value. FatalIOError if it is found and the number of...
bool write() const
Write mesh and all data.
double elapsedCpuTime() const
Return CPU time (in seconds) from the start.
List< label > labelList
A List of labels.
A patch is a list of labels that address the faces in the global face list.
virtual bool write(const bool valid=true) const
Write using setting from DB.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
void setMinLevelFields(const shellSurfaces &shells)
Calculate minLevelFields according to both surface- and.
Foam::argList args(argc, argv)
bool returnReduceOr(const bool value, const label comm=UPstream::worldComm)
Perform logical (or) MPI Allreduce on a copy. Uses UPstream::reduceOr.
void writeStats(const List< wordList > &, Ostream &) const
Write some stats.
Ostream & incrIndent(Ostream &os)
Increment the indent level.
Defines the attributes of an object for which implicit objectRegistry management is supported...
Output to string buffer, using a OSstream. Always UNCOMPRESSED.
A primitive field of type <T> with automated input and output.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
List< treeBoundBox > meshBb(1, treeBoundBox(coarseMesh.points()).extend(rndGen, 1e-3))
bool found(const word &optName) const
Return true if the named option is found.
forAllConstIters(mixture.phases(), phase)
A keyword and a list of tokens is an 'entry'.
static IOobject selectIO(const IOobject &io, const fileName &altFile, const word &ioName="")
Return the IOobject, but also consider an alternative file name.
fileName globalPath() const
Return global path for the case.
A HashTable to objects of type <T> with a label key.
const labelList & maxLevel() const
From global region number to refinement level.
label checkGeometry(const polyMesh &mesh, const bool allGeometry, autoPtr< surfaceWriter > &surfWriter, autoPtr< coordSetWriter > &setWriter)
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
static constexpr const zero Zero
Global zero (0)
Starts timing CPU usage and return elapsed time from start.