ENH: Add edgeCollapser utility and libraries.

edgeCollapser collapses small edges and faces.
Works in parallel by using PointEdgeWave.
This commit is contained in:
laurence
2012-12-11 17:12:27 +00:00
parent a2c8736f23
commit e81813a9c2
15 changed files with 3428 additions and 1826 deletions

View File

@ -473,6 +473,7 @@ int main(int argc, char *argv[])
)
{
label nbrProcI = patchToNbrProc[patchI];
word name =
"procBoundary"
+ Foam::name(Pstream::myProcNo())
@ -755,6 +756,9 @@ int main(int argc, char *argv[])
const edgeList& edges = mesh.edges();
const pointField& points = mesh.points();
PackedBoolList collapseEdge(mesh.nEdges());
Map<point> collapsePointToLocation(mesh.nPoints());
forAll(edges, edgeI)
{
const edge& e = edges[edgeI];
@ -766,15 +770,29 @@ int main(int argc, char *argv[])
Info<< "Merging edge " << e << " since length " << d
<< " << " << mergeDim << nl;
// Collapse edge to e[0]
collapser.collapseEdge(edgeI, e[0]);
collapseEdge[edgeI] = true;
collapsePointToLocation.set(e[1], points[e[0]]);
}
}
List<pointEdgeCollapse> allPointInfo;
const globalIndex globalPoints(mesh.nPoints());
labelList pointPriority(mesh.nPoints(), 0);
collapser.consistentCollapse
(
globalPoints,
pointPriority,
collapsePointToLocation,
collapseEdge,
allPointInfo
);
// Topo change container
polyTopoChange meshMod(mesh);
// Put all modifications into meshMod
bool anyChange = collapser.setRefinement(meshMod);
bool anyChange = collapser.setRefinement(allPointInfo, meshMod);
if (anyChange)
{

View File

@ -43,6 +43,7 @@ Note
#include "edgeCollapser.H"
#include "addPatchCellLayer.H"
#include "patchToPoly2DMesh.H"
#include "globalIndex.H"
using namespace Foam;
@ -260,6 +261,9 @@ int main(int argc, char *argv[])
const boundBox& bb = mesh().bounds();
const scalar mergeDim = 1e-4 * bb.minDim();
PackedBoolList collapseEdge(mesh().nEdges());
Map<point> collapsePointToLocation(mesh().nPoints());
forAll(edges, edgeI)
{
const edge& e = edges[edgeI];
@ -271,14 +275,27 @@ int main(int argc, char *argv[])
Info<< "Merging edge " << e << " since length " << d
<< " << " << mergeDim << nl;
// Collapse edge to e[0]
collapser.collapseEdge(edgeI, e[0]);
collapseEdge[edgeI] = true;
collapsePointToLocation.set(e[1], points[e[0]]);
}
}
List<pointEdgeCollapse> allPointInfo;
const globalIndex globalPoints(mesh().nPoints());
labelList pointPriority(mesh().nPoints(), 0);
collapser.consistentCollapse
(
globalPoints,
pointPriority,
collapsePointToLocation,
collapseEdge,
allPointInfo
);
polyTopoChange meshModCollapse(mesh());
collapser.setRefinement(meshModCollapse);
collapser.setRefinement(allPointInfo, meshModCollapse);
// Create a mesh from topo changes.
autoPtr<mapPolyMesh> morphMap