From aa30d0e7d50b6eb04cccc8aacd832dbab34f72cf Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Fri, 22 Jul 2016 16:53:49 +0100 Subject: [PATCH] checkMesh: Added option to write sets - the checking for point-connected multiple-regions now also writes the conflicting points to a pointSet - with the -writeSets option it now also reconstructs & writes pointSets --- .../mesh/manipulation/checkMesh/Make/options | 1 + .../manipulation/checkMesh/checkGeometry.C | 90 ++++++++------ .../manipulation/checkMesh/checkGeometry.H | 4 +- .../mesh/manipulation/checkMesh/checkMesh.C | 37 ++++-- .../mesh/manipulation/checkMesh/checkTools.C | 115 +++++++++++++++++- .../mesh/manipulation/checkMesh/checkTools.H | 13 +- .../manipulation/checkMesh/checkTopology.C | 56 ++++++--- .../manipulation/checkMesh/checkTopology.H | 4 +- 8 files changed, 255 insertions(+), 65 deletions(-) diff --git a/applications/utilities/mesh/manipulation/checkMesh/Make/options b/applications/utilities/mesh/manipulation/checkMesh/Make/options index 4700e225a5..0653767f3e 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/Make/options +++ b/applications/utilities/mesh/manipulation/checkMesh/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/fileFormats/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/surfMesh/lnInclude \ diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C index 1d8dd74e71..9b058128e5 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C @@ -8,9 +8,11 @@ #include "wedgePolyPatch.H" #include "unitConversion.H" #include "polyMeshTetDecomposition.H" -#include "surfaceWriter.H" -#include "checkTools.H" + #include "vtkSurfaceWriter.H" +#include "writer.H" + +#include "checkTools.H" #include "cyclicAMIPolyPatch.H" #include "Time.H" @@ -481,7 +483,8 @@ Foam::label Foam::checkGeometry ( const polyMesh& mesh, const bool allGeometry, - const autoPtr& writer + const autoPtr& surfWriter, + const autoPtr>& setWriter ) { label noFailedChecks = 0; @@ -538,6 +541,10 @@ Foam::label Foam::checkGeometry << nonAlignedPoints.name() << endl; nonAlignedPoints.instance() = mesh.pointsInstance(); nonAlignedPoints.write(); + if (setWriter.valid()) + { + mergeAndWrite(setWriter, nonAlignedPoints); + } } } } @@ -568,9 +575,9 @@ Foam::label Foam::checkGeometry << " non closed cells to set " << cells.name() << endl; cells.instance() = mesh.pointsInstance(); cells.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), cells); + mergeAndWrite(surfWriter(), cells); } } } @@ -584,9 +591,9 @@ Foam::label Foam::checkGeometry << aspectCells.name() << endl; aspectCells.instance() = mesh.pointsInstance(); aspectCells.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), aspectCells); + mergeAndWrite(surfWriter(), aspectCells); } } } @@ -605,9 +612,9 @@ Foam::label Foam::checkGeometry << " zero area faces to set " << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -627,9 +634,9 @@ Foam::label Foam::checkGeometry << " zero volume cells to set " << cells.name() << endl; cells.instance() = mesh.pointsInstance(); cells.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), cells); + mergeAndWrite(surfWriter(), cells); } } } @@ -650,9 +657,9 @@ Foam::label Foam::checkGeometry << " non-orthogonal faces to set " << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -672,9 +679,9 @@ Foam::label Foam::checkGeometry << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -694,9 +701,9 @@ Foam::label Foam::checkGeometry << " skew faces to set " << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -718,9 +725,9 @@ Foam::label Foam::checkGeometry << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -751,9 +758,9 @@ Foam::label Foam::checkGeometry << "decomposition tets to set " << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -776,6 +783,10 @@ Foam::label Foam::checkGeometry << endl; points.instance() = mesh.pointsInstance(); points.write(); + if (setWriter.valid()) + { + mergeAndWrite(setWriter, points); + } } } @@ -795,6 +806,10 @@ Foam::label Foam::checkGeometry << " apart) points to set " << nearPoints.name() << endl; nearPoints.instance() = mesh.pointsInstance(); nearPoints.write(); + if (setWriter.valid()) + { + mergeAndWrite(setWriter, nearPoints); + } } } } @@ -815,9 +830,9 @@ Foam::label Foam::checkGeometry << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -838,9 +853,9 @@ Foam::label Foam::checkGeometry << " warped faces to set " << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -859,9 +874,9 @@ Foam::label Foam::checkGeometry << " under-determined cells to set " << cells.name() << endl; cells.instance() = mesh.pointsInstance(); cells.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), cells); + mergeAndWrite(surfWriter(), cells); } } } @@ -879,9 +894,9 @@ Foam::label Foam::checkGeometry << " concave cells to set " << cells.name() << endl; cells.instance() = mesh.pointsInstance(); cells.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), cells); + mergeAndWrite(surfWriter(), cells); } } } @@ -900,9 +915,9 @@ Foam::label Foam::checkGeometry << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -921,9 +936,9 @@ Foam::label Foam::checkGeometry << faces.name() << endl; faces.instance() = mesh.pointsInstance(); faces.write(); - if (writer.valid()) + if (surfWriter.valid()) { - mergeAndWrite(writer(), faces); + mergeAndWrite(surfWriter(), faces); } } } @@ -936,11 +951,16 @@ Foam::label Foam::checkGeometry const word procAndTime(Foam::name(Pstream::myProcNo()) + "_" + tmName); autoPtr patchWriter; - if (!writer.valid()) + if (!surfWriter.valid()) { patchWriter.reset(new vtkSurfaceWriter()); } - const surfaceWriter& wr = (writer.valid() ? writer() : patchWriter()); + const surfaceWriter& wr = + ( + surfWriter.valid() + ? surfWriter() + : patchWriter() + ); forAll(pbm, patchi) { diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.H b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.H index 9658512eb1..d0111fd1e1 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.H +++ b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.H @@ -1,6 +1,7 @@ #include "label.H" #include "HashSet.H" #include "labelVector.H" +#include "writer.H" namespace Foam { @@ -26,6 +27,7 @@ namespace Foam ( const polyMesh& mesh, const bool allGeometry, - const autoPtr& + const autoPtr&, + const autoPtr>& ); } diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C index ce83db08e5..dbcc641e64 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C @@ -47,7 +47,8 @@ Usage - \par -writeSets \ Reconstruct all cellSets and faceSets geometry and write to postProcessing directory according to surfaceFormat - (e.g. vtk or ensight) + (e.g. vtk or ensight). Additionally reconstructs all pointSets and + writes as vtk format. \*---------------------------------------------------------------------------*/ @@ -56,7 +57,8 @@ Usage #include "Time.H" #include "polyMesh.H" #include "globalMeshData.H" -#include "vtkSurfaceWriter.H" +#include "surfaceWriter.H" +#include "vtkSetWriter.H" #include "checkTools.H" #include "checkTopology.H" @@ -94,7 +96,7 @@ int main(int argc, char *argv[]) argList::addOption ( "writeSets", - "" + "surfaceFormat", "reconstruct and write all faceSets and cellSets in selected format" ); @@ -156,10 +158,12 @@ int main(int argc, char *argv[]) } - autoPtr writer; + autoPtr surfWriter; + autoPtr> setWriter; if (writeSets) { - writer = surfaceWriter::New(surfaceFormat); + surfWriter = surfaceWriter::New(surfaceFormat); + setWriter = writer::New(vtkSetWriter::typeName); } @@ -192,15 +196,22 @@ int main(int argc, char *argv[]) mesh, allTopology, allGeometry, - writer + surfWriter, + setWriter ); } - nFailedChecks += checkGeometry(mesh, allGeometry, writer); + nFailedChecks += checkGeometry + ( + mesh, + allGeometry, + surfWriter, + setWriter + ); if (meshQuality) { - nFailedChecks += checkMeshQuality(mesh, qualDict(), writer); + nFailedChecks += checkMeshQuality(mesh, qualDict(), surfWriter); } @@ -221,11 +232,17 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; - label nFailedChecks = checkGeometry(mesh, allGeometry, writer); + label nFailedChecks = checkGeometry + ( + mesh, + allGeometry, + surfWriter, + setWriter + ); if (meshQuality) { - nFailedChecks += checkMeshQuality(mesh, qualDict(), writer); + nFailedChecks += checkMeshQuality(mesh, qualDict(), surfWriter); } diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkTools.C b/applications/utilities/mesh/manipulation/checkMesh/checkTools.C index e68ff5d7eb..aeabdf754b 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkTools.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkTools.C @@ -33,6 +33,7 @@ License #include "tetWedgeMatcher.H" #include "tetMatcher.H" #include "IOmanip.H" +#include "pointSet.H" #include "faceSet.H" #include "cellSet.H" #include "Time.H" @@ -369,6 +370,118 @@ void Foam::mergeAndWrite / set.name() ); - mergeAndWrite(mesh, writer, set.name(), setPatch, outputDir); } + + +void Foam::mergeAndWrite +( + const writer& writer, + const pointSet& set +) +{ + const polyMesh& mesh = refCast(set.db()); + + pointField mergedPts; + labelList mergedIDs; + + if (Pstream::parRun()) + { + // Note: we explicitly do not merge the points + // (mesh.globalData().mergePoints etc) since this might + // hide any synchronisation problem + + globalIndex globalNumbering(mesh.nPoints()); + + mergedPts.setSize(returnReduce(set.size(), sumOp