71 Info<<
"Adding exposed internal faces to " 72 << (
patchId == -1 ?
"new" :
"existing")
73 <<
" patch \"" << patchName <<
"\"" <<
nl <<
endl;
104 patchFaces[nFaces] =
pp.start()+i;
125 bool haveWarned =
false;
128 if (!faceData[faceI].valid(deltaCalc.data()))
133 <<
"Did not visit some faces, e.g. face " << faceI
135 <<
"Using patch " <<
patchIDs[0] <<
" as nearest" 143 nearest[faceI] = faceData[faceI].
data();
155 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
164 const word fieldType = FieldType::typeName;
172 for (
const word& fieldName : fieldNames)
176 Info<<
"Subsetting " << fieldType <<
" (";
200 subFields[nFields].rename(fieldName);
213 void subsetPointFields
222 const word fieldType = FieldType::typeName;
230 for (
const word& fieldName : fieldNames)
234 Info<<
"Subsetting " << fieldType <<
" (";
258 subFields[nFields].rename(fieldName);
271 void subsetDimensionedFields
279 const word fieldType = FieldType::typeName;
287 for (
const word& fieldName : fieldNames)
291 Info<<
"Subsetting " << fieldType <<
" (";
315 subFields[nFields].rename(fieldName);
327 template<
class TopoSet>
339 ReadFields<TopoSet>(objects, sets);
344 const TopoSet&
set = sets[seti];
346 Info<<
"Subsetting " <<
set.type() <<
" " <<
set.name() <<
endl;
352 if (
set.
found(map[i]))
374 int main(
int argc,
char *argv[])
378 "Create a mesh subset for a particular region of interest based on a" 379 " cellSet or cellZone(s) specified as the first command argument.\n" 380 "See setSet/topoSet utilities on how to select cells based on" 389 "The cellSet name, but with the -zone option this is interpreted" 390 " to be a cellZone selection by name(s) or regex.\n" 391 "Eg 'mixer' or '( mixer \"moving.*\" )'" 398 "Add exposed internal faces to specified patch" 399 " instead of \"oldInternalFaces\"" 405 "Add exposed internal faces to closest of specified patches" 406 " instead of \"oldInternalFaces\"" 411 "Subset with cellZone(s) instead of cellSet." 412 " The command argument may be a list of words or regexs" 418 "Specify a time for the resulting mesh" 434 const bool useCellZone =
args.
found(
"zone");
435 const bool overwrite =
args.
found(
"overwrite");
441 if (specifiedInstance)
444 meshInstance = fieldsInstance;
457 exposedPatchIDs.first() =
465 Info<<
"Adding exposed internal faces to nearest of patches " 468 if (exposedPatchIDs.empty())
471 <<
nl <<
"No patches matched. Patches: " 479 exposedPatchIDs.first() =
484 Info<<
"Adding exposed internal faces to patch \"" 486 <<
"\" (created if necessary)" <<
nl 514 Info<<
"Using cellSet " << selectionName <<
nl <<
endl;
531 if (exposedPatchIDs.size() == 1)
534 subsetter.
reset(selectedCells, exposedPatchIDs.first(),
true);
539 labelList nearestExposedPatch(nearestPatch(
mesh, exposedPatchIDs));
543 subsetter.getExposedFaces(selectedCells,
true)
559 <<
" cells" <<
nl <<
nl;
571 subsetFields(subsetter, availableFields, vScalarFlds);
574 subsetFields(subsetter, availableFields, vVectorFlds);
577 subsetFields(subsetter, availableFields, vSphTensorFlds);
580 subsetFields(subsetter, availableFields, vSymmTensorFlds);
583 subsetFields(subsetter, availableFields, vTensorFlds);
590 subsetFields(subsetter, availableFields, sScalarFlds);
593 subsetFields(subsetter, availableFields, sVectorFlds);
596 subsetFields(subsetter, availableFields, sSphTensorFlds);
599 subsetFields(subsetter, availableFields, sSymmTensorFlds);
602 subsetFields(subsetter, availableFields, sTensorFlds);
611 subsetPointFields(subsetter, pMesh, availableFields, pScalarFlds);
614 subsetPointFields(subsetter, pMesh, availableFields, pVectorFlds);
617 subsetPointFields(subsetter, pMesh, availableFields, pSphTensorFlds);
620 subsetPointFields(subsetter, pMesh, availableFields, pSymmTensorFlds);
623 subsetPointFields(subsetter, pMesh, availableFields, pTensorFlds);
630 subsetDimensionedFields(subsetter, availableFields, dScalarFlds);
633 subsetDimensionedFields(subsetter, availableFields, dVectorFlds);
636 subsetDimensionedFields(subsetter, availableFields, dSphTensorFlds);
639 subsetDimensionedFields(subsetter, availableFields, dSymmTensorFlds);
642 subsetDimensionedFields(subsetter, availableFields, dTensorFlds);
656 objects.
remove(*cellSetPtr);
688 if (overwrite || specifiedInstance)
709 for (
const auto&
fld : vScalarFlds) {
fld.write(); }
710 for (
const auto&
fld : vVectorFlds) {
fld.write(); }
711 for (
const auto&
fld : vSphTensorFlds) {
fld.write(); }
712 for (
const auto&
fld : vSymmTensorFlds) {
fld.write(); }
713 for (
const auto&
fld : vTensorFlds) {
fld.write(); }
716 for (
const auto&
fld : sScalarFlds) {
fld.write(); }
717 for (
const auto&
fld : sVectorFlds) {
fld.write(); }
718 for (
const auto&
fld : sSphTensorFlds) {
fld.write(); }
719 for (
const auto&
fld : sSymmTensorFlds) {
fld.write(); }
720 for (
const auto&
fld : sTensorFlds) {
fld.write(); }
723 for (
const auto&
fld : pScalarFlds) {
fld.write(); }
724 for (
const auto&
fld : pVectorFlds) {
fld.write(); }
725 for (
const auto&
fld : pSphTensorFlds) {
fld.write(); }
726 for (
const auto&
fld : pSymmTensorFlds) {
fld.write(); }
727 for (
const auto&
fld : pTensorFlds) {
fld.write(); }
730 for (
const auto&
fld : dScalarFlds) {
fld.write(); }
731 for (
const auto&
fld : dVectorFlds) {
fld.write(); }
732 for (
const auto&
fld : dSphTensorFlds) {
fld.write(); }
733 for (
const auto&
fld : dSymmTensorFlds) {
fld.write(); }
734 for (
const auto&
fld : dTensorFlds) {
fld.write(); }
label findPatchID(const word &patchName, const bool allowNotFound=true) const
Find patch index given a name, return -1 if not found.
const polyBoundaryMesh & pbm
static tmp< DimensionedField< Type, volMesh > > interpolate(const DimensionedField< Type, volMesh > &, const fvMesh &sMesh, const labelUList &cellMap)
Map volume internal (dimensioned) field.
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.
const labelList patchIDs(pbm.patchSet(polyPatchNames, false, true).sortedToc())
List of IOobjects with searching and retrieving facilities. Implemented as a HashTable, so the various sorted methods should be used if traversing in parallel.
errorManipArg< error, int > exit(error &err, const int errNo=1)
const fileName & facesInstance() const
Return the current instance directory for faces.
void transfer(List< T > &list)
Transfer the contents of the argument List into this list and annul the argument list.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
label findIndex(const wordRe &key) const
Zone index for the first match, return -1 if not found.
static const pointMesh & New(const polyMesh &mesh, Args &&... args)
Get existing or create a new MeshObject. Registered with typeName.
void setCellSubset(const bitSet &selectedCells, const label patchID=-1, const bool syncPar=true)
Use the specified subset of cells. Same as reset()
constexpr char nl
The newline '\n' character (0x0a)
T * data() noexcept
Return pointer to the underlying array serving as data storage.
UIndirectList< label > labelUIndList
UIndirectList of labels.
T & first()
Access first element of the list, position [0].
Ostream & endl(Ostream &os)
Add newline and flush stream.
Wave propagation of information through grid. Every iteration information goes through one layer of c...
List< T > getList(const label index) const
Get a List of values from the argument at index.
static void addBoolOption(const word &optName, const string &usage="", bool advanced=false)
Add a bool option to validOptions with usage information.
Generic GeometricField class.
Field reading functions for post-processing utilities.
const fvMesh & baseMesh() const noexcept
Original mesh.
Ignore writing from objectRegistry::writeObject()
const Time & time() const
Return the top-level database.
label nFaces() const noexcept
Number of mesh faces.
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 labelList & faceMap() const
Return face map.
Mesh representing a set of points created from polyMesh.
#define forAll(list, i)
Loop across all elements in list.
const fvMesh & subMesh() const
Return reference to subset mesh.
const fileName & pointsInstance() const
Return the current instance directory for points.
void setSize(const label n)
Alias for resize()
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
const polyBoundaryMesh & boundaryMesh() const noexcept
Return boundary mesh.
A class for handling words, derived from Foam::string.
wordList names() const
Return a list of patch names.
label size() const noexcept
The number of entries in the list.
wordList patchNames(nPatches)
const labelList & pointMap() const
Return point map.
void reset()
Reset subMesh and all maps. Same as clear()
A List of wordRe with additional matching capabilities.
static void addOption(const word &optName, const string ¶m="", const string &usage="", bool advanced=false)
Add an option to validOptions with usage information.
const globalMeshData & globalData() const
Return parallel info.
virtual void setTime(const Time &t)
Reset the time and time-index to those of the given time.
const labelList & cellMap() const
Return cell map.
A HashTable similar to std::unordered_map.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
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...
virtual bool write(const bool writeOnProc=true) const
Write mesh using IO settings from time.
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO...
static word timeName(const scalar t, const int precision=precision_)
Return time name of given scalar time formatted with the given precision.
Holds a reference to the original mesh (the baseMesh) and optionally to a subset of that mesh (the su...
void setSize(const label newLen)
Same as resize()
label nTotalCells() const noexcept
Return total number of cells in decomposed mesh.
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;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const vectorField & faceCentres() const
List< T > subset(const BoolListType &select, const UList< T > &input, const bool invert=false)
Extract elements of the input list when select is true.
An instant of time. Contains the time value and name. Uses Foam::Time when formatting the name...
static word exposedPatchName
Name for exposed internal faces (default: oldInternalFaces)
T get(const label index) const
Get a value from the argument at index.
void setInstance(const fileName &instance, const IOobjectOption::writeOption wOpt=IOobject::AUTO_WRITE)
Set the instance for mesh files.
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
#define WarningInFunction
Report a warning using Foam::Warning.
label nCells() const noexcept
Number of mesh cells.
autoPtr< IOobject > remove(const IOobject &io)
Remove object from the list by its IOobject::name().
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
static void setInstance(const fileName &instance, Container &)
Helper: set instance on all sets in container.
Mesh data needed to do the Finite Volume discretisation.
List< Key > sortedToc() const
The table of contents (the keys) in sorted order.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Automatically write from objectRegistry::writeObject()
For use with FaceCellWave. Determines topological distance to starting faces. Templated on passive tr...
static void addArgument(const string &argName, const string &usage="")
Append a (mandatory) argument to validArgs.
const cellZoneMesh & cellZones() const noexcept
Return cell zone mesh.
messageStream Info
Information stream (stdout output on master, null elsewhere)
bitSet selection(const labelUList &zoneIds) const
Return all elements (cells, faces, points) contained in the listed zones.
labelHashSet patchSet(const UList< wordRe > &patchNames, const bool warnNotFound=true, const bool useGroups=true) const
Return the set of patch IDs corresponding to the given names.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Mesh consisting of general polyhedral cells.
bool readIfPresent(const word &optName, T &val) const
Read a value from the named option if present.
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
static autoPtr< T > New(Args &&... args)
Construct autoPtr with forwarding arguments.
A patch is a list of labels that address the faces in the global face list.
bitSet create(const label n, const labelHashSet &locations, const bool on=true)
Create a bitSet with length n with the specified on locations.
Foam::argList args(argc, argv)
Extends Foam::fvMeshSubset with two-step subsetting (uses polyTopoChange modification).
Defines the attributes of an object for which implicit objectRegistry management is supported...
bool found(const word &optName) const
Return true if the named option is found.
uindirectPrimitivePatch pp(UIndirectList< face >(mesh.faces(), faceLabels), mesh.points())
A class representing the concept of 1 (one) that can be used to avoid manipulating objects known to b...
FlatOutput::OutputAdaptor< Container, Delimiters > flatOutput(const Container &obj, Delimiters delim)
Global flatOutput() function with specified output delimiters.