68 void insertDuplicateMerge
81 label otherFacei = duplicates[bFacei];
83 if (otherFacei != -1 && otherFacei > bFacei)
90 label own0 = faceOwner[face0];
91 label own1 = faceOwner[face1];
97 bool zoneFlip =
false;
101 const faceZone& fZone = faceZones[zoneID];
126 bool zoneFlip =
false;
130 const faceZone& fZone = faceZones[zoneID];
169 forAll(duplicates, bFacei)
171 if (duplicates[bFacei] != -1)
176 if (isA<processorPolyPatch>(patches[patchi]))
179 <<
"Duplicate face " << facei
180 <<
" is on a processorPolyPatch." 181 <<
"This is not allowed." <<
nl 199 forAll(duplicates, bFacei)
201 label otherFacei = duplicates[bFacei];
203 if (otherFacei != -1 && otherFacei > bFacei)
210 Pout<<
"Writing " << duplicateSet.size()
211 <<
" duplicate faces to faceSet " << duplicateSet.objectPath()
213 duplicateSet.
write();
222 int main(
int argc,
char *argv[])
226 "Detect faces that share points (baffles).\n" 227 "Merge them or duplicate the points." 235 "find baffles only, but do not merge or split them" 240 "topologically split duplicate surfaces" 245 runTime.functionObjects().off();
265 findBaffles(mesh, boundaryFaces);
314 Pout<<
"Topologically splitting duplicate surfaces" 315 <<
", i.e. duplicating points internal to duplicate surfaces." 325 pointDuplicator.setRefinement(
regionSide, meshMod);
329 Pout<<
"Merging duplicate faces." 333 labelList duplicates(findBaffles(mesh, boundaryFaces));
336 insertDuplicateMerge(mesh, duplicates, meshMod);
351 if (map().hasMotionPoints())
360 Pout<<
"Writing mesh to time " << runTime.timeName() <<
endl;
366 const labelList& pointMap = map().pointMap();
368 labelList nDupPerPoint(map().nOldPoints(), 0);
370 pointSet dupPoints(mesh,
"duplicatedPoints", 100);
374 label oldPointi = pointMap[pointi];
376 nDupPerPoint[oldPointi]++;
378 if (nDupPerPoint[oldPointi] > 1)
380 dupPoints.insert(map().reversePointMap()[oldPointi]);
381 dupPoints.insert(pointi);
385 Pout<<
"Writing " << dupPoints.size()
386 <<
" duplicated points to pointSet " 387 << dupPoints.objectPath() <<
nl <<
endl;
Class containing data for face removal.
virtual tmp< scalarField > movePoints(const pointField &)
Move points, returns volumes swept by faces in motion.
wordList ReadFields(const Mesh &mesh, const IOobjectList &objects, PtrList< GeoField > &fields, const bool syncPar=true)
Read all fields of the specified type.
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
List of IOobjects with searching and retrieving facilities.
const boolList & flipMap() const
Return face flip map.
Class describing modification of a face.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Field reading functions for post-processing utilities.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Takes mesh with 'baffles' (= boundary faces sharing points). Determines for selected points on bounda...
label whichFace(const label globalCellID) const
Helper function to re-direct to zone::localID(...)
Determines the 'side' for every face and connected to a singly-connected (through edges) region of fa...
bool optionFound(const word &opt) const
Return true if the named option is found.
virtual void updateMesh(const mapPolyMesh &mpm)
Update the mesh corresponding to given map.
A class for handling words, derived from string.
errorManip< error > abort(error &err)
prefixOSstream Pout(cout,"Pout")
void setInstance(const fileName &)
Set the instance for mesh files.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
const fileName & pointsInstance() const
Return the current instance directory for points.
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
label whichZone(const label objectIndex) const
Given a global object index, return the zone it is in.
Direct mesh changes based on v1.3 polyTopoChange syntax.
virtual bool write() const
Write using setting from DB.
static labelList findDuplicateFaces(const primitiveMesh &, const labelList &)
Helper routine to find baffles (two boundary faces using the.
const faceZoneMesh & faceZones() const
Return face zone mesh.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
virtual Ostream & write(const token &)=0
Write next token to stream.
Mesh consisting of general polyhedral cells.
static void addBoolOption(const word &opt, const string &usage="")
Add to a bool option to validOptions with usage information.
A subset of mesh faces organised as a primitive patch.
static void addNote(const string &)
Add extra notes for the usage information.
autoPtr< mapPolyMesh > changeMesh(polyMesh &mesh, const bool inflate, const bool syncParallel=true, const bool orderCells=false, const bool orderPoints=false)
Inplace changes mesh without change of patches.
virtual const labelList & faceOwner() const
Return face owner.
virtual const faceList & faces() const
Return raw faces.
Foam::argList args(argc, argv)
label nInternalFaces() const
const word & name() const
Return name.
label setAction(const topoAction &action)
For compatibility with polyTopoChange: set topological action.