mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: mergePoints: new API, now templated
This commit is contained in:
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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
|
||||||
// (
|
// (
|
||||||
|
|||||||
@ -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];
|
||||||
|
|||||||
@ -2096,7 +2096,8 @@ Foam::triSurface Foam::triSurfaceTools::mergePoints
|
|||||||
(
|
(
|
||||||
newTriangles,
|
newTriangles,
|
||||||
surf.patches(),
|
surf.patches(),
|
||||||
newPoints
|
newPoints,
|
||||||
|
true //reuse storage
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user