From aeb9644db4328638f4141c551963be6c82b06f55 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 19 May 2021 23:54:47 +0200 Subject: [PATCH] ENH: use common internal calls for VTK begin/end DataArray - reduces common boilerplate, ensures that label fields are more easily handled. --- .../output/foamVtkInternalWriterTemplates.C | 69 ++---------- .../vtk/output/foamVtkPatchWriterTemplates.C | 74 ++----------- .../vtk/output/foamVtkSurfaceFieldWriter.C | 42 ++------ src/fileFormats/vtk/file/foamVtkFileWriter.C | 49 +++++++++ src/fileFormats/vtk/file/foamVtkFileWriter.H | 18 ++++ .../vtk/file/foamVtkFileWriterTemplates.C | 77 ++++---------- src/fileFormats/vtk/write/foamVtkPolyWriter.C | 32 +----- .../lagrangian/vtkCloud/vtkCloudTemplates.C | 3 +- .../vtk/mesh/foamVtkInternalMeshWriter.C | 100 ++---------------- .../mesh/foamVtkInternalMeshWriterTemplates.C | 24 +---- .../output/vtk/patch/foamVtkPatchMeshWriter.C | 95 ++--------------- 11 files changed, 129 insertions(+), 454 deletions(-) diff --git a/src/conversion/vtk/output/foamVtkInternalWriterTemplates.C b/src/conversion/vtk/output/foamVtkInternalWriterTemplates.C index a740e1a9c3..d289ba8741 100644 --- a/src/conversion/vtk/output/foamVtkInternalWriterTemplates.C +++ b/src/conversion/vtk/output/foamVtkInternalWriterTemplates.C @@ -49,25 +49,10 @@ void Foam::vtk::internalWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); - const labelList& addPointCellLabels = vtuCells_.addPointCellLabels(); - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), field.name(), numberOfPoints_); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(numberOfPoints_); - format().beginDataArray(field.name()); - format().writeSize(payLoad); - } - } + this->beginDataArray(field.name(), numberOfPoints_); if (parallel_) { @@ -92,11 +77,7 @@ void Foam::vtk::internalWriter::write } } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } @@ -138,8 +119,6 @@ void Foam::vtk::internalWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); - typedef DimensionedField PointFieldType; // Use tmp intermediate. Compiler sometimes weird otherwise. @@ -148,21 +127,8 @@ void Foam::vtk::internalWriter::write const labelList& addPointCellLabels = vtuCells_.addPointCellLabels(); - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), vfield.name(), numberOfPoints_); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(numberOfPoints_); - format().beginDataArray(vfield.name()); - format().writeSize(payLoad); - } - } + this->beginDataArray(vfield.name(), numberOfPoints_); if (parallel_) { @@ -179,11 +145,7 @@ void Foam::vtk::internalWriter::write vtk::writeLists(format(), pfield, vfield, addPointCellLabels); } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } @@ -205,8 +167,6 @@ void Foam::vtk::internalWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); - typedef GeometricField PointFieldType; // Use tmp intermediate. Compiler sometimes weird otherwise. @@ -215,21 +175,8 @@ void Foam::vtk::internalWriter::write const labelList& addPointCellLabels = vtuCells_.addPointCellLabels(); - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), vfield.name(), numberOfPoints_); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(numberOfPoints_); - format().beginDataArray(vfield.name()); - format().writeSize(payLoad); - } - } + this->beginDataArray(vfield.name(), numberOfPoints_); if (parallel_) { @@ -246,11 +193,7 @@ void Foam::vtk::internalWriter::write vtk::writeLists(format(), pfield, vfield, addPointCellLabels); } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } diff --git a/src/conversion/vtk/output/foamVtkPatchWriterTemplates.C b/src/conversion/vtk/output/foamVtkPatchWriterTemplates.C index 905290b49a..9dc41948e4 100644 --- a/src/conversion/vtk/output/foamVtkPatchWriterTemplates.C +++ b/src/conversion/vtk/output/foamVtkPatchWriterTemplates.C @@ -47,7 +47,6 @@ void Foam::vtk::patchWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); label nPoints = nLocalPoints_; @@ -57,22 +56,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), field.name(), nPoints); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(nPoints); - - format().beginDataArray(field.name()); - format().writeSize(payLoad); - } - } - + this->beginDataArray(field.name(), nPoints); if (parallel_ ? Pstream::master() : true) { @@ -144,11 +128,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } @@ -169,8 +149,6 @@ void Foam::vtk::patchWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); - label nFaces = nLocalFaces_; if (parallel_) @@ -179,22 +157,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), field.name(), nFaces); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(nFaces); - - format().beginDataArray(field.name()); - format().writeSize(payLoad); - } - } - + this->beginDataArray(field.name(), nFaces); if (parallel_ ? Pstream::master() : true) { @@ -261,11 +224,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } @@ -287,8 +246,6 @@ void Foam::vtk::patchWriter::write << exit(FatalError); } - const direction nCmpt(pTraits::nComponents); - label nPoints = nLocalPoints_; if (parallel_) @@ -297,22 +254,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - if (legacy()) - { - legacy::floatField(format(), field.name(), nPoints); - } - else - { - const uint64_t payLoad = - vtk::sizeofData(nPoints); - - format().beginDataArray(field.name()); - format().writeSize(payLoad); - } - } - + this->beginDataArray(field.name(), nPoints); if (parallel_ ? Pstream::master() : true) { @@ -396,11 +338,7 @@ void Foam::vtk::patchWriter::write } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } diff --git a/src/conversion/vtk/output/foamVtkSurfaceFieldWriter.C b/src/conversion/vtk/output/foamVtkSurfaceFieldWriter.C index 3cdd62314c..8bb1a1ee49 100644 --- a/src/conversion/vtk/output/foamVtkSurfaceFieldWriter.C +++ b/src/conversion/vtk/output/foamVtkSurfaceFieldWriter.C @@ -159,29 +159,19 @@ bool Foam::vtk::surfaceFieldWriter::writeGeometry() ); } - // - if (format_) - { - const uint64_t payLoad = - vtk::sizeofData(numberOfPoints_); - - format().tag(vtk::fileTag::POINTS) - .beginDataArray(vtk::dataArrayAttr::POINTS); - - format().writeSize(payLoad); - } + this->beginPoints(numberOfPoints_); if (parallel_) { - // Internal faces + // Centres for internal faces vtk::writeListParallel ( format_.ref(), SubList(centres, mesh_.nInternalFaces()) ); - // Boundary faces + // Centres for boundary faces vtk::writeListParallel ( format_.ref(), @@ -195,15 +185,7 @@ bool Foam::vtk::surfaceFieldWriter::writeGeometry() vtk::writeList(format(), centres); } - if (format_) - { - format().flush(); - - // Non-legacy - format() - .endDataArray() - .endTag(vtk::fileTag::POINTS); - } + this->endPoints(); return true; } @@ -251,15 +233,7 @@ void Foam::vtk::surfaceFieldWriter::write(const surfaceVectorField& field) << exit(FatalError); } - if (format_) - { - // Non-legacy - const uint64_t payLoad = - vtk::sizeofData(nFaces); - - format().beginDataArray(field.name()); - format().writeSize(payLoad); - } + this->beginDataArray(field.name(), nFaces); // Internal field @@ -289,11 +263,7 @@ void Foam::vtk::surfaceFieldWriter::write(const surfaceVectorField& field) } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } diff --git a/src/fileFormats/vtk/file/foamVtkFileWriter.C b/src/fileFormats/vtk/file/foamVtkFileWriter.C index 1aac7e0109..aff45b9017 100644 --- a/src/fileFormats/vtk/file/foamVtkFileWriter.C +++ b/src/fileFormats/vtk/file/foamVtkFileWriter.C @@ -190,6 +190,55 @@ bool Foam::vtk::fileWriter::enter_PointData(label nEntries, label nFields) } +void Foam::vtk::fileWriter::endDataArray() +{ + if (format_) + { + format().flush(); + format().endDataArray(); + } +} + + +void Foam::vtk::fileWriter::beginPoints(const label nPoints) +{ + if (format_) + { + if (legacy()) + { + legacy::beginPoints(os_, nPoints); + } + else + { + const uint64_t payLoad = + vtk::sizeofData(nPoints); + + format() + .tag(vtk::fileTag::POINTS) + .beginDataArray(vtk::dataArrayAttr::POINTS); + + format().writeSize(payLoad); + } + } +} + + +void Foam::vtk::fileWriter::endPoints() +{ + if (format_) + { + format().flush(); + format().endDataArray(); + + if (!legacy()) + { + format() + .endTag(vtk::fileTag::POINTS); + } + } +} + + bool Foam::vtk::fileWriter::exit_File() { // Finish other output diff --git a/src/fileFormats/vtk/file/foamVtkFileWriter.H b/src/fileFormats/vtk/file/foamVtkFileWriter.H index f5cd071590..19a1d4e150 100644 --- a/src/fileFormats/vtk/file/foamVtkFileWriter.H +++ b/src/fileFormats/vtk/file/foamVtkFileWriter.H @@ -134,6 +134,24 @@ protected: //- True if the output state does not correspond to the test state. inline bool notState(outputState test) const; + //- Start of a field or DataArray output (legacy or non-legacy). + template + void beginDataArray + ( + const word& fieldName, + const label nValues + ); + + //- Flush formatter and end of DataArray output (non-legacy) + void endDataArray(); + + //- Start of a POINTS DataArray + void beginPoints(const label nPoints); + + //- End of a POINTS DataArray + void endPoints(); + + //- Write uniform field content. // No context checking (eg, file-open, CellData, PointData, etc) template diff --git a/src/fileFormats/vtk/file/foamVtkFileWriterTemplates.C b/src/fileFormats/vtk/file/foamVtkFileWriterTemplates.C index dda7cc9df1..79a774fce9 100644 --- a/src/fileFormats/vtk/file/foamVtkFileWriterTemplates.C +++ b/src/fileFormats/vtk/file/foamVtkFileWriterTemplates.C @@ -31,10 +31,9 @@ License // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template -void Foam::vtk::fileWriter::writeUniform +void Foam::vtk::fileWriter::beginDataArray ( const word& fieldName, - const Type& val, const label nValues ) { @@ -59,7 +58,8 @@ void Foam::vtk::fileWriter::writeUniform } else { - const uint64_t payLoad = vtk::sizeofData(nValues); + const uint64_t payLoad = + vtk::sizeofData(nValues); format().beginDataArray(fieldName); format().writeSize(payLoad); @@ -73,24 +73,33 @@ void Foam::vtk::fileWriter::writeUniform } else { - const uint64_t payLoad = vtk::sizeofData(nValues); + const uint64_t payLoad = + vtk::sizeofData(nValues); format().beginDataArray(fieldName); format().writeSize(payLoad); } } } +} + + +template +void Foam::vtk::fileWriter::writeUniform +( + const word& fieldName, + const Type& val, + const label nValues +) +{ + this->beginDataArray(fieldName, nValues); if (format_) { vtk::write(format(), val, nValues); } - if (format_) - { - format().flush(); - format().endDataArray(); - } + this->endDataArray(); } @@ -101,17 +110,6 @@ void Foam::vtk::fileWriter::writeBasicField const UList& field ) { - static_assert - ( - ( - std::is_same::cmptType>::value - || std::is_floating_point::cmptType>::value - ), - "Label and Floating-point vector space only" - ); - - const direction nCmpt(pTraits::nComponents); - label nValues = field.size(); if (parallel_) @@ -119,38 +117,7 @@ void Foam::vtk::fileWriter::writeBasicField reduce(nValues, sumOp