mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: support VTK output of point ids
- can be useful for diagnosing mesh internals and the locations of decomposed cells.
This commit is contained in:
committed by
Andrew Heather
parent
9cb6338c58
commit
fe445ac516
@ -313,7 +313,13 @@ Description
|
|||||||
internalWriter->beginPointData
|
internalWriter->beginPointData
|
||||||
(
|
(
|
||||||
nVolFields + nDimFields + nPointFields
|
nVolFields + nDimFields + nPointFields
|
||||||
|
+ (withPointIds ? 1 : 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (withPointIds)
|
||||||
|
{
|
||||||
|
internalWriter->writePointIDs();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(patchWriters, writeri)
|
forAll(patchWriters, writeri)
|
||||||
|
|||||||
@ -91,6 +91,9 @@ Usage
|
|||||||
- \par -no-point-data
|
- \par -no-point-data
|
||||||
Suppress conversion of pointFields. No interpolated PointData.
|
Suppress conversion of pointFields. No interpolated PointData.
|
||||||
|
|
||||||
|
- \par -with-point-ids
|
||||||
|
Additional pointID field for internal mesh
|
||||||
|
|
||||||
- \par -poly-decomp
|
- \par -poly-decomp
|
||||||
Decompose polyhedral cells into tets/pyramids
|
Decompose polyhedral cells into tets/pyramids
|
||||||
|
|
||||||
@ -379,6 +382,12 @@ int main(int argc, char *argv[])
|
|||||||
);
|
);
|
||||||
argList::addOptionCompat("no-point-data", {"noPointValues", 1806});
|
argList::addOptionCompat("no-point-data", {"noPointValues", 1806});
|
||||||
|
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"with-point-ids",
|
||||||
|
"Additional pointID field for internal mesh"
|
||||||
|
);
|
||||||
|
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"one-boundary", // allPatches
|
"one-boundary", // allPatches
|
||||||
@ -495,6 +504,19 @@ int main(int argc, char *argv[])
|
|||||||
<< nl;
|
<< nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool withPointIds = args.found("with-point-ids");
|
||||||
|
if (withPointIds)
|
||||||
|
{
|
||||||
|
Info<< "Write point ids requested";
|
||||||
|
|
||||||
|
if (noPointValues)
|
||||||
|
{
|
||||||
|
Info<< ", but ignored due to the '-no-point-data' option";
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< nl;
|
||||||
|
}
|
||||||
|
|
||||||
wordRes includePatches, excludePatches;
|
wordRes includePatches, excludePatches;
|
||||||
if (doBoundary)
|
if (doBoundary)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -730,4 +730,75 @@ bool Foam::vtk::internalWriter::writeProcIDs()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::vtk::internalWriter::writePointIDs()
|
||||||
|
{
|
||||||
|
if (isState(outputState::POINT_DATA))
|
||||||
|
{
|
||||||
|
++nPointData_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Bad writer state (" << stateNames[state_]
|
||||||
|
<< ") - should be (" << stateNames[outputState::POINT_DATA]
|
||||||
|
<< ") for pointID field" << nl << endl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format_)
|
||||||
|
{
|
||||||
|
if (legacy())
|
||||||
|
{
|
||||||
|
vtk::legacy::intField<1>(format(), "pointID", numberOfPoints_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const uint64_t payLoad = vtk::sizeofData<label>(numberOfPoints_);
|
||||||
|
|
||||||
|
format().beginDataArray<label>("pointID");
|
||||||
|
format().writeSize(payLoad);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Point offset for regular mesh points (without decomposed)
|
||||||
|
const label pointOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(vtuCells_.nPoints()).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
// Cell offset for *regular* mesh cells (without decomposed)
|
||||||
|
const label cellOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(vtuCells_.nCells()).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
labelList pointIds = identity(vtuCells_.nFieldPoints(), pointOffset);
|
||||||
|
|
||||||
|
// The pointID for added points is the cellID, tag as a negative number
|
||||||
|
label pointi = vtuCells_.nPoints();
|
||||||
|
for (const label celli : vtuCells_.addPointCellLabels())
|
||||||
|
{
|
||||||
|
pointIds[pointi] = (-1 - celli - cellOffset);
|
||||||
|
++pointi;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parallel_)
|
||||||
|
{
|
||||||
|
vtk::writeListParallel(format_.ref(), pointIds);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vtk::writeList(format(), pointIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format_)
|
||||||
|
{
|
||||||
|
format().flush();
|
||||||
|
format().endDataArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -207,6 +207,10 @@ public:
|
|||||||
// Must be called within the CELL_DATA state.
|
// Must be called within the CELL_DATA state.
|
||||||
bool writeProcIDs();
|
bool writeProcIDs();
|
||||||
|
|
||||||
|
//- Write point ids as PointData.
|
||||||
|
// Must be called within the POINT_DATA state.
|
||||||
|
void writePointIDs();
|
||||||
|
|
||||||
|
|
||||||
// Write
|
// Write
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user