From 2a07e34fb0ca2a3f9ede05ddc9275a3b8ad78273 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 1 Jun 2016 17:43:14 +0100 Subject: [PATCH] ENH: vtkSurfaceWriter: user-specifiable precision. Partly solves #65. Ensight writer is fixed but all the other ones probably need doing as well. --- .../postProcessing/sampling/sample/sampleDict | 5 +++++ .../functionObjectFile/functionObjectFile.C | 6 +++--- .../writers/vtk/vtkSurfaceWriter.C | 21 +++++++++++++++++-- .../writers/vtk/vtkSurfaceWriter.H | 10 ++++++++- .../writers/vtk/vtkSurfaceWriterTemplates.C | 1 + 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/applications/utilities/postProcessing/sampling/sample/sampleDict b/applications/utilities/postProcessing/sampling/sample/sampleDict index d23f8a380f..8e77428d6a 100644 --- a/applications/utilities/postProcessing/sampling/sample/sampleDict +++ b/applications/utilities/postProcessing/sampling/sample/sampleDict @@ -74,6 +74,11 @@ formatOptions //collateTimes true; // write single file containing multiple timesteps // (only for static surfaces) } + vtk + { + // Non-default write precision for floating point numbers + writePrecision 10; + } nastran { // From OpenFOAM field name to Nastran field name diff --git a/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C index b8d24fff8a..4154146074 100644 --- a/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C +++ b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -122,7 +122,7 @@ void Foam::functionObjectFile::resetFile(const word& fileName) Foam::Omanip Foam::functionObjectFile::valueWidth(const label offset) const { - return setw(IOstream::defaultPrecision() + addChars + offset); + return setw(writePrecision_ + addChars + offset); } @@ -211,7 +211,7 @@ bool Foam::functionObjectFile::writeToFile() const Foam::label Foam::functionObjectFile::charWidth() const { - return IOstream::defaultPrecision() + addChars; + return writePrecision_ + addChars; } diff --git a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.C b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.C index 5ab19e05be..e4eef949ca 100644 --- a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -31,6 +31,7 @@ License namespace Foam { makeSurfaceWriterType(vtkSurfaceWriter); + addToRunTimeSelectionTable(surfaceWriter, vtkSurfaceWriter, wordDict); } @@ -202,7 +203,22 @@ namespace Foam Foam::vtkSurfaceWriter::vtkSurfaceWriter() : - surfaceWriter() + surfaceWriter(), + writePrecision_(IOstream::defaultPrecision()) +{} + + +Foam::vtkSurfaceWriter::vtkSurfaceWriter(const dictionary& dict) +: + surfaceWriter(), + writePrecision_ + ( + dict.lookupOrDefault + ( + "writePrecision", + IOstream::defaultPrecision() + ) + ) {} @@ -229,6 +245,7 @@ Foam::fileName Foam::vtkSurfaceWriter::write } OFstream os(outputDir/surfaceName + ".vtk"); + os.precision(writePrecision_); if (verbose) { diff --git a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.H b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.H index 03d0029727..f3d17fc2b9 100644 --- a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.H +++ b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriter.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -50,6 +50,11 @@ class vtkSurfaceWriter : public surfaceWriter { + // Private data + + const unsigned int writePrecision_; + + // Private Member Functions static void writeGeometry(Ostream&, const pointField&, const faceList&); @@ -84,6 +89,9 @@ public: //- Construct null vtkSurfaceWriter(); + //- Construct with some output options + vtkSurfaceWriter(const dictionary& options); + //- Destructor virtual ~vtkSurfaceWriter(); diff --git a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriterTemplates.C b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriterTemplates.C index aaf17bbfeb..6ceb45e464 100644 --- a/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriterTemplates.C +++ b/src/sampling/sampledSurface/writers/vtk/vtkSurfaceWriterTemplates.C @@ -63,6 +63,7 @@ Foam::fileName Foam::vtkSurfaceWriter::writeTemplate } OFstream os(outputDir/fieldName + '_' + surfaceName + ".vtk"); + os.precision(writePrecision_); if (verbose) {