mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
|
-I$(LIB_SRC)/fileFormats/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/sampling/lnInclude \
|
-I$(LIB_SRC)/sampling/lnInclude \
|
||||||
-I$(LIB_SRC)/surfMesh/lnInclude \
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
|
|||||||
@ -8,9 +8,11 @@
|
|||||||
#include "wedgePolyPatch.H"
|
#include "wedgePolyPatch.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "polyMeshTetDecomposition.H"
|
#include "polyMeshTetDecomposition.H"
|
||||||
#include "surfaceWriter.H"
|
|
||||||
#include "checkTools.H"
|
|
||||||
#include "vtkSurfaceWriter.H"
|
#include "vtkSurfaceWriter.H"
|
||||||
|
#include "writer.H"
|
||||||
|
|
||||||
|
#include "checkTools.H"
|
||||||
#include "cyclicAMIPolyPatch.H"
|
#include "cyclicAMIPolyPatch.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
|
|
||||||
@ -481,7 +483,8 @@ Foam::label Foam::checkGeometry
|
|||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const bool allGeometry,
|
const bool allGeometry,
|
||||||
const autoPtr<surfaceWriter>& writer
|
const autoPtr<surfaceWriter>& surfWriter,
|
||||||
|
const autoPtr<writer<scalar>>& setWriter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
label noFailedChecks = 0;
|
label noFailedChecks = 0;
|
||||||
@ -538,6 +541,10 @@ Foam::label Foam::checkGeometry
|
|||||||
<< nonAlignedPoints.name() << endl;
|
<< nonAlignedPoints.name() << endl;
|
||||||
nonAlignedPoints.instance() = mesh.pointsInstance();
|
nonAlignedPoints.instance() = mesh.pointsInstance();
|
||||||
nonAlignedPoints.write();
|
nonAlignedPoints.write();
|
||||||
|
if (setWriter.valid())
|
||||||
|
{
|
||||||
|
mergeAndWrite(setWriter, nonAlignedPoints);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -568,9 +575,9 @@ Foam::label Foam::checkGeometry
|
|||||||
<< " non closed cells to set " << cells.name() << endl;
|
<< " non closed cells to set " << cells.name() << endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
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.name() << endl;
|
||||||
aspectCells.instance() = mesh.pointsInstance();
|
aspectCells.instance() = mesh.pointsInstance();
|
||||||
aspectCells.write();
|
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;
|
<< " zero area faces to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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;
|
<< " zero volume cells to set " << cells.name() << endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
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;
|
<< " non-orthogonal faces to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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;
|
<< " skew faces to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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;
|
<< "decomposition tets to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
faces.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), faces);
|
mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -776,6 +783,10 @@ Foam::label Foam::checkGeometry
|
|||||||
<< endl;
|
<< endl;
|
||||||
points.instance() = mesh.pointsInstance();
|
points.instance() = mesh.pointsInstance();
|
||||||
points.write();
|
points.write();
|
||||||
|
if (setWriter.valid())
|
||||||
|
{
|
||||||
|
mergeAndWrite(setWriter, points);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,6 +806,10 @@ Foam::label Foam::checkGeometry
|
|||||||
<< " apart) points to set " << nearPoints.name() << endl;
|
<< " apart) points to set " << nearPoints.name() << endl;
|
||||||
nearPoints.instance() = mesh.pointsInstance();
|
nearPoints.instance() = mesh.pointsInstance();
|
||||||
nearPoints.write();
|
nearPoints.write();
|
||||||
|
if (setWriter.valid())
|
||||||
|
{
|
||||||
|
mergeAndWrite(setWriter, nearPoints);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,9 +830,9 @@ Foam::label Foam::checkGeometry
|
|||||||
<< endl;
|
<< endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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;
|
<< " warped faces to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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;
|
<< " under-determined cells to set " << cells.name() << endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
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;
|
<< " concave cells to set " << cells.name() << endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
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.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
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);
|
const word procAndTime(Foam::name(Pstream::myProcNo()) + "_" + tmName);
|
||||||
|
|
||||||
autoPtr<surfaceWriter> patchWriter;
|
autoPtr<surfaceWriter> patchWriter;
|
||||||
if (!writer.valid())
|
if (!surfWriter.valid())
|
||||||
{
|
{
|
||||||
patchWriter.reset(new vtkSurfaceWriter());
|
patchWriter.reset(new vtkSurfaceWriter());
|
||||||
}
|
}
|
||||||
const surfaceWriter& wr = (writer.valid() ? writer() : patchWriter());
|
const surfaceWriter& wr =
|
||||||
|
(
|
||||||
|
surfWriter.valid()
|
||||||
|
? surfWriter()
|
||||||
|
: patchWriter()
|
||||||
|
);
|
||||||
|
|
||||||
forAll(pbm, patchi)
|
forAll(pbm, patchi)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#include "label.H"
|
#include "label.H"
|
||||||
#include "HashSet.H"
|
#include "HashSet.H"
|
||||||
#include "labelVector.H"
|
#include "labelVector.H"
|
||||||
|
#include "writer.H"
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
@ -26,6 +27,7 @@ namespace Foam
|
|||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const bool allGeometry,
|
const bool allGeometry,
|
||||||
const autoPtr<surfaceWriter>&
|
const autoPtr<surfaceWriter>&,
|
||||||
|
const autoPtr<writer<scalar>>&
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,8 @@ Usage
|
|||||||
- \par -writeSets \<surfaceFormat\>
|
- \par -writeSets \<surfaceFormat\>
|
||||||
Reconstruct all cellSets and faceSets geometry and write to
|
Reconstruct all cellSets and faceSets geometry and write to
|
||||||
postProcessing directory according to surfaceFormat
|
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 "Time.H"
|
||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "globalMeshData.H"
|
#include "globalMeshData.H"
|
||||||
#include "vtkSurfaceWriter.H"
|
#include "surfaceWriter.H"
|
||||||
|
#include "vtkSetWriter.H"
|
||||||
|
|
||||||
#include "checkTools.H"
|
#include "checkTools.H"
|
||||||
#include "checkTopology.H"
|
#include "checkTopology.H"
|
||||||
@ -94,7 +96,7 @@ int main(int argc, char *argv[])
|
|||||||
argList::addOption
|
argList::addOption
|
||||||
(
|
(
|
||||||
"writeSets",
|
"writeSets",
|
||||||
"<surfaceFormat>"
|
"surfaceFormat",
|
||||||
"reconstruct and write all faceSets and cellSets in selected format"
|
"reconstruct and write all faceSets and cellSets in selected format"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -156,10 +158,12 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
autoPtr<surfaceWriter> writer;
|
autoPtr<surfaceWriter> surfWriter;
|
||||||
|
autoPtr<writer<scalar>> setWriter;
|
||||||
if (writeSets)
|
if (writeSets)
|
||||||
{
|
{
|
||||||
writer = surfaceWriter::New(surfaceFormat);
|
surfWriter = surfaceWriter::New(surfaceFormat);
|
||||||
|
setWriter = writer<scalar>::New(vtkSetWriter<scalar>::typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -192,15 +196,22 @@ int main(int argc, char *argv[])
|
|||||||
mesh,
|
mesh,
|
||||||
allTopology,
|
allTopology,
|
||||||
allGeometry,
|
allGeometry,
|
||||||
writer
|
surfWriter,
|
||||||
|
setWriter
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
nFailedChecks += checkGeometry(mesh, allGeometry, writer);
|
nFailedChecks += checkGeometry
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
allGeometry,
|
||||||
|
surfWriter,
|
||||||
|
setWriter
|
||||||
|
);
|
||||||
|
|
||||||
if (meshQuality)
|
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;
|
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||||
|
|
||||||
label nFailedChecks = checkGeometry(mesh, allGeometry, writer);
|
label nFailedChecks = checkGeometry
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
allGeometry,
|
||||||
|
surfWriter,
|
||||||
|
setWriter
|
||||||
|
);
|
||||||
|
|
||||||
if (meshQuality)
|
if (meshQuality)
|
||||||
{
|
{
|
||||||
nFailedChecks += checkMeshQuality(mesh, qualDict(), writer);
|
nFailedChecks += checkMeshQuality(mesh, qualDict(), surfWriter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,7 @@ License
|
|||||||
#include "tetWedgeMatcher.H"
|
#include "tetWedgeMatcher.H"
|
||||||
#include "tetMatcher.H"
|
#include "tetMatcher.H"
|
||||||
#include "IOmanip.H"
|
#include "IOmanip.H"
|
||||||
|
#include "pointSet.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "cellSet.H"
|
#include "cellSet.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
@ -369,6 +370,118 @@ void Foam::mergeAndWrite
|
|||||||
/ set.name()
|
/ set.name()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
mergeAndWrite(mesh, writer, set.name(), setPatch, outputDir);
|
mergeAndWrite(mesh, writer, set.name(), setPatch, outputDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::mergeAndWrite
|
||||||
|
(
|
||||||
|
const writer<scalar>& writer,
|
||||||
|
const pointSet& set
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const polyMesh& mesh = refCast<const polyMesh>(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<label>()));
|
||||||
|
mergedIDs.setSize(mergedPts.size());
|
||||||
|
|
||||||
|
labelList setPointIDs(set.sortedToc());
|
||||||
|
|
||||||
|
// Get renumbered local data
|
||||||
|
pointField myPoints(mesh.points(), setPointIDs);
|
||||||
|
labelList myIDs(setPointIDs.size());
|
||||||
|
forAll(setPointIDs, i)
|
||||||
|
{
|
||||||
|
myIDs[i] = globalNumbering.toGlobal(setPointIDs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
// Insert master data first
|
||||||
|
label pOffset = 0;
|
||||||
|
SubList<point>(mergedPts, myPoints.size(), pOffset) = myPoints;
|
||||||
|
SubList<label>(mergedIDs, myIDs.size(), pOffset) = myIDs;
|
||||||
|
pOffset += myPoints.size();
|
||||||
|
|
||||||
|
// Receive slave ones
|
||||||
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
|
{
|
||||||
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
|
||||||
|
pointField slavePts(fromSlave);
|
||||||
|
labelList slaveIDs(fromSlave);
|
||||||
|
|
||||||
|
SubList<point>(mergedPts, slavePts.size(), pOffset) = slavePts;
|
||||||
|
SubList<label>(mergedIDs, slaveIDs.size(), pOffset) = slaveIDs;
|
||||||
|
pOffset += slaveIDs.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Construct processor stream with estimate of size. Could
|
||||||
|
// be improved.
|
||||||
|
OPstream toMaster
|
||||||
|
(
|
||||||
|
Pstream::scheduled,
|
||||||
|
Pstream::masterNo(),
|
||||||
|
myPoints.byteSize() + myIDs.byteSize()
|
||||||
|
);
|
||||||
|
toMaster << myPoints << myIDs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mergedIDs = set.sortedToc();
|
||||||
|
mergedPts = pointField(mesh.points(), mergedIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Write with scalar pointID
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
scalarField scalarPointIDs(mergedIDs.size());
|
||||||
|
forAll(mergedIDs, i)
|
||||||
|
{
|
||||||
|
scalarPointIDs[i] = 1.0*mergedIDs[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
coordSet points(set.name(), "distance", mergedPts, mag(mergedPts));
|
||||||
|
|
||||||
|
List<const scalarField*> flds(1, &scalarPointIDs);
|
||||||
|
|
||||||
|
wordList fldNames(1, "pointID");
|
||||||
|
|
||||||
|
// Output e.g. pointSet p0 to
|
||||||
|
// postProcessing/<time>/p0.vtk
|
||||||
|
const fileName outputDir
|
||||||
|
(
|
||||||
|
set.time().path()
|
||||||
|
/ (Pstream::parRun() ? ".." : "")
|
||||||
|
/ "postProcessing"
|
||||||
|
/ mesh.pointsInstance()
|
||||||
|
// set.name()
|
||||||
|
);
|
||||||
|
mkDir(outputDir);
|
||||||
|
|
||||||
|
fileName outputFile(outputDir/writer.getFileName(points, wordList()));
|
||||||
|
//fileName outputFile(outputDir/set.name());
|
||||||
|
|
||||||
|
OFstream os(outputFile);
|
||||||
|
|
||||||
|
writer.write(points, fldNames, flds, os);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
#include "scalar.H"
|
#include "scalar.H"
|
||||||
#include "indirectPrimitivePatch.H"
|
#include "indirectPrimitivePatch.H"
|
||||||
|
#include "writer.H"
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
class surfaceWriter;
|
class surfaceWriter;
|
||||||
|
class pointSet;
|
||||||
class faceSet;
|
class faceSet;
|
||||||
class cellSet;
|
class cellSet;
|
||||||
class fileName;
|
class fileName;
|
||||||
@ -23,11 +25,18 @@ namespace Foam
|
|||||||
const fileName& outputDir
|
const fileName& outputDir
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Write vtk representation of (assembled) faceSet to vtk file in
|
//- Write vtk representation of (assembled) faceSet to surface file in
|
||||||
// postProcessing/ directory
|
// postProcessing/ directory
|
||||||
void mergeAndWrite(const surfaceWriter&, const faceSet&);
|
void mergeAndWrite(const surfaceWriter&, const faceSet&);
|
||||||
|
|
||||||
//- Write vtk representation of (assembled) cellSet to vtk file in
|
//- Write vtk representation of (assembled) cellSet to surface file in
|
||||||
// postProcessing/ directory
|
// postProcessing/ directory
|
||||||
void mergeAndWrite(const surfaceWriter&, const cellSet&);
|
void mergeAndWrite(const surfaceWriter&, const cellSet&);
|
||||||
|
|
||||||
|
//- Write vtk representation of (assembled) pointSet to 'set' file in
|
||||||
|
// postProcessing/ directory
|
||||||
|
void mergeAndWrite(const writer<scalar>&, const pointSet&);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -43,7 +43,8 @@ Foam::label Foam::checkTopology
|
|||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const bool allTopology,
|
const bool allTopology,
|
||||||
const bool allGeometry,
|
const bool allGeometry,
|
||||||
const autoPtr<surfaceWriter>& writer
|
const autoPtr<surfaceWriter>& surfWriter,
|
||||||
|
const autoPtr<writer<scalar>>& setWriter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
label noFailedChecks = 0;
|
label noFailedChecks = 0;
|
||||||
@ -129,9 +130,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< " illegal cells to set " << cells.name() << endl;
|
<< " illegal cells to set " << cells.name() << endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
cells.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), cells);
|
mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -154,6 +155,10 @@ Foam::label Foam::checkTopology
|
|||||||
<< " unused points to set " << points.name() << endl;
|
<< " unused points to set " << points.name() << endl;
|
||||||
points.instance() = mesh.pointsInstance();
|
points.instance() = mesh.pointsInstance();
|
||||||
points.write();
|
points.write();
|
||||||
|
if (setWriter.valid())
|
||||||
|
{
|
||||||
|
mergeAndWrite(setWriter, points);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,9 +177,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< " unordered faces to set " << faces.name() << endl;
|
<< " unordered faces to set " << faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
faces.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), faces);
|
mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -192,9 +197,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< faces.name() << endl;
|
<< faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
faces.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), faces);
|
mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -213,9 +218,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< endl;
|
<< endl;
|
||||||
cells.instance() = mesh.pointsInstance();
|
cells.instance() = mesh.pointsInstance();
|
||||||
cells.write();
|
cells.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), cells);
|
mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -237,9 +242,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< faces.name() << endl;
|
<< faces.name() << endl;
|
||||||
faces.instance() = mesh.pointsInstance();
|
faces.instance() = mesh.pointsInstance();
|
||||||
faces.write();
|
faces.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), faces);
|
mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -292,9 +297,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< endl;
|
<< endl;
|
||||||
oneCells.instance() = mesh.pointsInstance();
|
oneCells.instance() = mesh.pointsInstance();
|
||||||
oneCells.write();
|
oneCells.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), oneCells);
|
mergeAndWrite(surfWriter(), oneCells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,9 +313,9 @@ Foam::label Foam::checkTopology
|
|||||||
<< endl;
|
<< endl;
|
||||||
twoCells.instance() = mesh.pointsInstance();
|
twoCells.instance() = mesh.pointsInstance();
|
||||||
twoCells.write();
|
twoCells.write();
|
||||||
if (writer.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
mergeAndWrite(writer(), twoCells);
|
mergeAndWrite(surfWriter(), twoCells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -349,6 +354,13 @@ Foam::label Foam::checkTopology
|
|||||||
ctr.write();
|
ctr.write();
|
||||||
|
|
||||||
|
|
||||||
|
// Points in multiple regions
|
||||||
|
pointSet points
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
"multiRegionPoints",
|
||||||
|
mesh.nPoints()/1000
|
||||||
|
);
|
||||||
|
|
||||||
// Is region disconnected
|
// Is region disconnected
|
||||||
boolList regionDisconnected(rs.nRegions(), true);
|
boolList regionDisconnected(rs.nRegions(), true);
|
||||||
@ -386,6 +398,7 @@ Foam::label Foam::checkTopology
|
|||||||
regionDisconnected[regionI] = false;
|
regionDisconnected[regionI] = false;
|
||||||
regionDisconnected[pRegion] = false;
|
regionDisconnected[pRegion] = false;
|
||||||
pRegion = -2;
|
pRegion = -2;
|
||||||
|
points.insert(f[fp]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -437,6 +450,19 @@ Foam::label Foam::checkTopology
|
|||||||
|
|
||||||
cellRegions[i].write();
|
cellRegions[i].write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label nPoints = returnReduce(points.size(), sumOp<label>());
|
||||||
|
if (nPoints)
|
||||||
|
{
|
||||||
|
Info<< " <<Writing " << nPoints
|
||||||
|
<< " points that are in multiple regions to set "
|
||||||
|
<< points.name() << endl;
|
||||||
|
points.write();
|
||||||
|
if (setWriter.valid())
|
||||||
|
{
|
||||||
|
mergeAndWrite(setWriter, points);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
#include "label.H"
|
#include "label.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
|
#include "writer.H"
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
@ -11,6 +12,7 @@ namespace Foam
|
|||||||
const polyMesh&,
|
const polyMesh&,
|
||||||
const bool,
|
const bool,
|
||||||
const bool,
|
const bool,
|
||||||
const autoPtr<surfaceWriter>&
|
const autoPtr<surfaceWriter>&,
|
||||||
|
const autoPtr<writer<scalar>>&
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user