diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H index 763b3fa3d9..9151adb6c1 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H @@ -313,7 +313,13 @@ Description internalWriter->beginPointData ( nVolFields + nDimFields + nPointFields + + (withPointIds ? 1 : 0) ); + + if (withPointIds) + { + internalWriter->writePointIDs(); + } } forAll(patchWriters, writeri) diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index d85ebedcde..6c2c7c8607 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -91,6 +91,9 @@ Usage - \par -no-point-data Suppress conversion of pointFields. No interpolated PointData. + - \par -with-point-ids + Additional pointID field for internal mesh + - \par -poly-decomp Decompose polyhedral cells into tets/pyramids @@ -379,6 +382,12 @@ int main(int argc, char *argv[]) ); argList::addOptionCompat("no-point-data", {"noPointValues", 1806}); + argList::addBoolOption + ( + "with-point-ids", + "Additional pointID field for internal mesh" + ); + argList::addBoolOption ( "one-boundary", // allPatches @@ -495,6 +504,19 @@ int main(int argc, char *argv[]) << 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; if (doBoundary) { diff --git a/src/conversion/vtk/output/foamVtkInternalWriter.C b/src/conversion/vtk/output/foamVtkInternalWriter.C index 6e0769ee68..af675ce176 100644 --- a/src/conversion/vtk/output/foamVtkInternalWriter.C +++ b/src/conversion/vtk/output/foamVtkInternalWriter.C @@ -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