ENH: mergePoints: new API, now templated

This commit is contained in:
mattijs
2011-12-08 16:32:46 +00:00
parent 735dd36124
commit 17a38cff7c
6 changed files with 22 additions and 31 deletions

View File

@ -49,19 +49,17 @@ void Foam::meshDualiser::checkPolyTopoChange(const polyTopoChange& meshMod)
} }
labelList oldToNew; labelList oldToNew;
pointField newPoints; label nUnique = mergePoints
bool hasMerged = mergePoints
( (
points, points,
1E-6, 1E-6,
false, false,
oldToNew, oldToNew
newPoints
); );
if (hasMerged) if (nUnique < points.size())
{ {
labelListList newToOld(invertOneToMany(newPoints.size(), oldToNew)); labelListList newToOld(invertOneToMany(nUnique, oldToNew));
forAll(newToOld, newI) forAll(newToOld, newI)
{ {
@ -225,17 +223,15 @@ Foam::label Foam::meshDualiser::addInternalFace
pointField facePoints(meshMod.points(), newFace); pointField facePoints(meshMod.points(), newFace);
labelList oldToNew; labelList oldToNew;
pointField newPoints; label nUnique = mergePoints
bool hasMerged = mergePoints
( (
facePoints, facePoints,
1E-6, 1E-6,
false, false,
oldToNew, oldToNew
newPoints
); );
if (hasMerged) if (nUnique < facePoints.size())
{ {
FatalErrorIn("addInternalFace(..)") FatalErrorIn("addInternalFace(..)")
<< "verts:" << verts << " newFace:" << newFace << "verts:" << verts << " newFace:" << newFace

View File

@ -45,6 +45,7 @@ primitives/Tensor/lists/symmTensorList.C
primitives/Tensor/lists/tensorList.C primitives/Tensor/lists/tensorList.C
primitives/Vector/complexVector/complexVector.C primitives/Vector/complexVector/complexVector.C
primitives/Vector/floatVector/floatVector.C
primitives/Vector/labelVector/labelVector.C primitives/Vector/labelVector/labelVector.C
primitives/Vector/vector/vector.C primitives/Vector/vector/vector.C
primitives/Vector/lists/vectorList.C primitives/Vector/lists/vectorList.C
@ -501,7 +502,6 @@ meshes/treeBoundBox/treeBoundBox.C
meshTools = meshes/meshTools meshTools = meshes/meshTools
$(meshTools)/matchPoints.C $(meshTools)/matchPoints.C
$(meshTools)/mergePoints.C
fields/UniformDimensionedFields/uniformDimensionedFields.C fields/UniformDimensionedFields/uniformDimensionedFields.C
fields/cloud/cloud.C fields/cloud/cloud.C

View File

@ -36,7 +36,6 @@ License
#include "removeCells.H" #include "removeCells.H"
#include "polyModifyFace.H" #include "polyModifyFace.H"
#include "polyRemovePoint.H" #include "polyRemovePoint.H"
#include "mergePoints.H"
#include "mapDistributePolyMesh.H" #include "mapDistributePolyMesh.H"
#include "surfaceFields.H" #include "surfaceFields.H"
#include "syncTools.H" #include "syncTools.H"

View File

@ -1859,24 +1859,22 @@ Foam::Map<Foam::label> Foam::polyMeshAdder::findSharedPoints
); );
labelList toMergedPoints; labelList toMergedPoints;
pointField mergedPoints; label nUnique = Foam::mergePoints
bool hasMerged = Foam::mergePoints
( (
connectedPoints, connectedPoints,
mergeDist, mergeDist,
false, false,
toMergedPoints, toMergedPoints
mergedPoints
); );
if (hasMerged) if (nUnique < connectedPoints.size())
{ {
// Invert toMergedPoints // Invert toMergedPoints
const labelListList mergeSets const labelListList mergeSets
( (
invertOneToMany invertOneToMany
( (
mergedPoints.size(), nUnique,
toMergedPoints toMergedPoints
) )
); );
@ -1919,8 +1917,7 @@ Foam::Map<Foam::label> Foam::polyMeshAdder::findSharedPoints
//- Old: geometric merging. Causes problems for two close shared points. //- Old: geometric merging. Causes problems for two close shared points.
//labelList sharedToMerged; //labelList sharedToMerged;
//pointField mergedPoints; //label nUnique = Foam::mergePoints
//bool hasMerged = Foam::mergePoints
//( //(
// pointField // pointField
// ( // (
@ -1929,8 +1926,7 @@ Foam::Map<Foam::label> Foam::polyMeshAdder::findSharedPoints
// ), // ),
// mergeDist, // mergeDist,
// false, // false,
// sharedToMerged, // sharedToMerged
// mergedPoints
//); //);
// //
//// Find out which sets of points get merged and create a map from //// Find out which sets of points get merged and create a map from
@ -1938,7 +1934,7 @@ Foam::Map<Foam::label> Foam::polyMeshAdder::findSharedPoints
// //
//Map<label> pointToMaster(10*sharedToMerged.size()); //Map<label> pointToMaster(10*sharedToMerged.size());
// //
//if (hasMerged) //if (nUnique < sharedPointLabels.size())
//{ //{
// labelListList mergeSets // labelListList mergeSets
// ( // (

View File

@ -63,27 +63,26 @@ Foam::label Foam::autoSnapDriver::getCollocatedPoints
) )
{ {
labelList pointMap; labelList pointMap;
pointField newPoints; label nUnique = mergePoints
bool hasMerged = mergePoints
( (
points, // points points, // points
tol, // mergeTol tol, // mergeTol
false, // verbose false, // verbose
pointMap, pointMap
newPoints
); );
bool hasMerged = (nUnique < points.size());
if (!returnReduce(hasMerged, orOp<bool>())) if (!returnReduce(hasMerged, orOp<bool>()))
{ {
return 0; return 0;
} }
// Determine which newPoints are referenced more than once // Determine which merged points are referenced more than once
label nCollocated = 0; label nCollocated = 0;
// Per old point the newPoint. Or -1 (not set yet) or -2 (already seen // Per old point the newPoint. Or -1 (not set yet) or -2 (already seen
// twice) // twice)
labelList firstOldPoint(newPoints.size(), -1); labelList firstOldPoint(nUnique, -1);
forAll(pointMap, oldPointI) forAll(pointMap, oldPointI)
{ {
label newPointI = pointMap[oldPointI]; label newPointI = pointMap[oldPointI];

View File

@ -2096,7 +2096,8 @@ Foam::triSurface Foam::triSurfaceTools::mergePoints
( (
newTriangles, newTriangles,
surf.patches(), surf.patches(),
newPoints newPoints,
true //reuse storage
); );
} }
else else