Revert "ENH: rolling back WIP on face filtering."

This reverts commit bd87fc30a4.
This commit is contained in:
graham
2011-06-30 09:44:01 +01:00
parent 8898bc4622
commit cb48cefe70
3 changed files with 178 additions and 131 deletions

View File

@ -67,6 +67,7 @@ SourceFiles
#include "wallPolyPatch.H" #include "wallPolyPatch.H"
#include "processorPolyPatch.H" #include "processorPolyPatch.H"
#include "zeroGradientFvPatchFields.H" #include "zeroGradientFvPatchFields.H"
#include "globalIndex.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -782,7 +783,8 @@ private:
void indexDualVertices void indexDualVertices
( (
pointField& pts, pointField& pts,
PackedBoolList& boundaryPts PackedBoolList& boundaryPts,
const globalIndex& globalParallelPointIndices
); );
//- Re-index all of the the Delaunay cells //- Re-index all of the the Delaunay cells

View File

@ -58,73 +58,90 @@ void Foam::conformalVoronoiMesh::calcDualMesh
++cit ++cit
) )
{ {
if
(
!cit->vertex(0)->real()
|| !cit->vertex(1)->real()
|| !cit->vertex(2)->real()
|| !cit->vertex(3)->real()
)
{
cit->filterCount() = 100;
}
else
{
cit->filterCount() = 0; cit->filterCount() = 0;
}
} }
for // for
( // (
Delaunay::Finite_vertices_iterator vit = finite_vertices_begin(); // Delaunay::Finite_cells_iterator cit = finite_cells_begin();
vit != finite_vertices_end(); // cit != finite_cells_end();
vit++ // ++cit
) // )
{ // {
std::list<Cell_handle> cells; // if
incident_cells(vit, std::back_inserter(cells)); // (
// !cit->vertex(0)->real()
// || !cit->vertex(1)->real()
// || !cit->vertex(2)->real()
// || !cit->vertex(3)->real()
// )
// {
// cit->filterCount() = 100;
// }
// else
// {
// cit->filterCount() = 0;
// }
// }
bool hasProcPt = false; // for
// (
// Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
// vit != finite_vertices_end();
// vit++
// )
// {
// std::list<Cell_handle> cells;
// incident_cells(vit, std::back_inserter(cells));
for // bool hasProcPt = false;
(
std::list<Cell_handle>::iterator cit=cells.begin();
cit != cells.end();
++cit
)
{
if
(
!(*cit)->vertex(0)->real()
|| !(*cit)->vertex(1)->real()
|| !(*cit)->vertex(2)->real()
|| !(*cit)->vertex(3)->real()
)
{
hasProcPt = true;
break; // for
} // (
} // std::list<Cell_handle>::iterator cit=cells.begin();
// cit != cells.end();
// ++cit
// )
// {
// if
// (
// !(*cit)->vertex(0)->real()
// || !(*cit)->vertex(1)->real()
// || !(*cit)->vertex(2)->real()
// || !(*cit)->vertex(3)->real()
// )
// {
// hasProcPt = true;
if (hasProcPt) // break;
{ // }
for // }
(
std::list<Cell_handle>::iterator cit=cells.begin(); // if (hasProcPt)
cit != cells.end(); // {
++cit // for
) // (
{ // std::list<Cell_handle>::iterator cit=cells.begin();
(*cit)->filterCount() = 100; // cit != cells.end();
} // ++cit
} // )
} // {
// (*cit)->filterCount() = 100;
// }
// }
// }
PackedBoolList boundaryPts(number_of_cells(), false); PackedBoolList boundaryPts(number_of_cells(), false);
indexDualVertices(points, boundaryPts); globalIndex globalParallelPointIndices(number_of_cells());
indexDualVertices
(
points,
boundaryPts,
globalParallelPointIndices
);
{ {
// Ideally requires a no-risk face filtering to get rid of zero area // Ideally requires a no-risk face filtering to get rid of zero area
@ -182,7 +199,12 @@ void Foam::conformalVoronoiMesh::calcDualMesh
// Reindexing the Delaunay cells and regenerating the // Reindexing the Delaunay cells and regenerating the
// points resets the mesh to the starting condition. // points resets the mesh to the starting condition.
indexDualVertices(points, boundaryPts); indexDualVertices
(
points,
boundaryPts,
globalParallelPointIndices
);
{ {
Info<< nl << "Merging close points" << endl; Info<< nl << "Merging close points" << endl;
@ -1529,65 +1551,65 @@ Foam::labelHashSet Foam::conformalVoronoiMesh::checkPolyMeshQuality
List<polyPatch*> patches(patchStarts.size()); List<polyPatch*> patches(patchStarts.size());
label nValidPatches = 0; // label nValidPatches = 0;
forAll(patches, p)
{
if (patchTypes[p] == processorPolyPatch::typeName)
{
// Do not create empty processor patches
if (patchSizes[p] > 0)
{
patches[nValidPatches] = new processorPolyPatch
(
patchNames[p],
patchSizes[p],
patchStarts[p],
nValidPatches,
pMesh.boundaryMesh(),
Pstream::myProcNo(),
procNeighbours[p]
);
nValidPatches++;
}
}
else
{
patches[nValidPatches] = polyPatch::New
(
patchTypes[p],
patchNames[p],
patchSizes[p],
patchStarts[p],
nValidPatches,
pMesh.boundaryMesh()
).ptr();
nValidPatches++;
}
}
patches.setSize(nValidPatches);
pMesh.addPatches(patches);
// Info<< "ADDPATCHES NOT IN PARALLEL" << endl;
// forAll(patches, p) // forAll(patches, p)
// { // {
// patches[p] = new polyPatch // if (patchTypes[p] == processorPolyPatch::typeName)
// ( // {
// patchNames[p], // // Do not create empty processor patches
// patchSizes[p],
// patchStarts[p], // if (patchSizes[p] > 0)
// p, // {
// pMesh.boundaryMesh() // patches[nValidPatches] = new processorPolyPatch
// ); // (
// patchNames[p],
// patchSizes[p],
// patchStarts[p],
// nValidPatches,
// pMesh.boundaryMesh(),
// Pstream::myProcNo(),
// procNeighbours[p]
// );
// nValidPatches++;
// }
// }
// else
// {
// patches[nValidPatches] = polyPatch::New
// (
// patchTypes[p],
// patchNames[p],
// patchSizes[p],
// patchStarts[p],
// nValidPatches,
// pMesh.boundaryMesh()
// ).ptr();
// nValidPatches++;
// }
// } // }
// pMesh.addPatches(patches, false); // patches.setSize(nValidPatches);
// pMesh.addPatches(patches);
Info<< "ADDPATCHES NOT IN PARALLEL" << endl;
forAll(patches, p)
{
patches[p] = new polyPatch
(
patchNames[p],
patchSizes[p],
patchStarts[p],
p,
pMesh.boundaryMesh()
);
}
pMesh.addPatches(patches, false);
// pMesh.overrideCellCentres(cellCentres); // pMesh.overrideCellCentres(cellCentres);
@ -1785,7 +1807,8 @@ Foam::labelHashSet Foam::conformalVoronoiMesh::checkPolyMeshQuality
void Foam::conformalVoronoiMesh::indexDualVertices void Foam::conformalVoronoiMesh::indexDualVertices
( (
pointField& pts, pointField& pts,
PackedBoolList& boundaryPts PackedBoolList& boundaryPts,
const globalIndex& globalParallelPointIndices
) )
{ {
// Indexing Delaunay cells, which are the dual vertices // Indexing Delaunay cells, which are the dual vertices
@ -1798,6 +1821,16 @@ void Foam::conformalVoronoiMesh::indexDualVertices
boundaryPts = false; boundaryPts = false;
OFstream tetStr
(
runTime_.path()
/"processor_"
+ name(Pstream::myProcNo())
+ "_parallelTets.obj"
);
label pTetI = 0;
for for
( (
Delaunay::Finite_cells_iterator cit = finite_cells_begin(); Delaunay::Finite_cells_iterator cit = finite_cells_begin();
@ -1807,23 +1840,35 @@ void Foam::conformalVoronoiMesh::indexDualVertices
{ {
if (cit->internalOrBoundaryDualVertex()) if (cit->internalOrBoundaryDualVertex())
{ {
cit->cellIndex() = dualVertI; if (cit->parallelDualVertex())
{
cit->cellIndex() = globalParallelPointIndices.toGlobal
(
dualVertI
);
drawDelaunayCell(tetStr, cit, pTetI++);
}
else
{
cit->cellIndex() = dualVertI;
if
(
!cit->vertex(0)->internalOrBoundaryPoint()
|| !cit->vertex(1)->internalOrBoundaryPoint()
|| !cit->vertex(2)->internalOrBoundaryPoint()
|| !cit->vertex(3)->internalOrBoundaryPoint()
)
{
// This is a boundary dual vertex
boundaryPts[dualVertI] = true;
}
}
pts[dualVertI] = topoint(dual(cit)); pts[dualVertI] = topoint(dual(cit));
if
(
!cit->vertex(0)->internalOrBoundaryPoint()
|| !cit->vertex(1)->internalOrBoundaryPoint()
|| !cit->vertex(2)->internalOrBoundaryPoint()
|| !cit->vertex(3)->internalOrBoundaryPoint()
)
{
// This is a boundary dual vertex
boundaryPts[dualVertI] = true;
}
dualVertI++; dualVertI++;
} }
else else

View File

@ -423,10 +423,10 @@ void Foam::conformalVoronoiMesh::writeMesh
patches.setSize(nValidPatches); patches.setSize(nValidPatches);
mesh.addFvPatches(patches); // mesh.addFvPatches(patches);
// Info<< "ADDPATCHES NOT IN PARALLEL" << endl; Info<< "ADDPATCHES NOT IN PARALLEL" << endl;
// mesh.addFvPatches(patches, false); mesh.addFvPatches(patches, false);
if (!mesh.write()) if (!mesh.write())
{ {
@ -456,7 +456,7 @@ void Foam::conformalVoronoiMesh::writeMesh
// cellCs.write(); // cellCs.write();
writeCellSizes(mesh); // writeCellSizes(mesh);
findRemainingProtrusionSet(mesh); findRemainingProtrusionSet(mesh);
} }