From 1a55829ef9841b4491a1bfeddb55a9d69b36c01d Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 28 Feb 2022 13:56:42 +0100 Subject: [PATCH] ENH: add fieldLevel handling for surface writers (#2382) - this can be used to apply a uniform field level to remove from a sampled field. For example, fieldLevel { "p.*" 1e5; // Absolute -> gauge [Pa] T 273.15; // [K] -> [C] U #eval{ 10/sqrt(3) }; // Uniform mag(U)=10 } After the fieldLevel has been removed, any fieldScale is applied. For example fieldScale { "p.*" 0.01; // [Pa] -> [mbar] } The fieldLevel for vector and tensor fields may still need some further refinement. --- .../writers/abaqus/abaqusSurfaceWriter.C | 2 - .../writers/abaqus/abaqusSurfaceWriter.H | 14 +-- .../writers/abaqus/abaqusSurfaceWriterImpl.C | 21 +---- .../boundary/boundaryDataSurfaceWriter.C | 27 ++---- .../boundary/boundaryDataSurfaceWriter.H | 14 +-- src/surfMesh/writers/common/surfaceWriter.C | 92 +++++++++++++++++-- src/surfMesh/writers/common/surfaceWriter.H | 52 ++++++++--- .../writers/ensight/ensightSurfaceWriter.H | 4 +- .../ensight/ensightSurfaceWriterCollated.C | 11 ++- .../ensight/ensightSurfaceWriterUncollated.C | 12 ++- src/surfMesh/writers/foam/foamSurfaceWriter.C | 27 ++---- src/surfMesh/writers/foam/foamSurfaceWriter.H | 15 +-- .../writers/nastran/nastranSurfaceWriter.C | 4 +- .../writers/nastran/nastranSurfaceWriter.H | 8 +- .../nastran/nastranSurfaceWriterImpl.C | 22 +---- src/surfMesh/writers/raw/rawSurfaceWriter.C | 6 +- src/surfMesh/writers/raw/rawSurfaceWriter.H | 10 +- .../writers/raw/rawSurfaceWriterImpl.C | 20 +--- .../writers/starcd/starcdSurfaceWriter.C | 28 ++---- .../writers/starcd/starcdSurfaceWriter.H | 8 +- src/surfMesh/writers/vtk/vtkSurfaceWriter.C | 23 +---- src/surfMesh/writers/vtk/vtkSurfaceWriter.H | 12 ++- src/surfMesh/writers/x3d/x3dSurfaceWriter.C | 19 ++-- src/surfMesh/writers/x3d/x3dSurfaceWriter.H | 7 +- .../squareBend/system/samplingDebug | 7 +- 25 files changed, 245 insertions(+), 220 deletions(-) diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C index 8932d90684..9d3fd373e0 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C @@ -238,7 +238,6 @@ Foam::surfaceWriters::abaqusWriter::abaqusWriter() : surfaceWriter(), geometryScale_(1), - fieldScale_(), noGeometry_(false), outputLayout_(outputLayoutType::BY_FIELD) {} @@ -251,7 +250,6 @@ Foam::surfaceWriters::abaqusWriter::abaqusWriter : surfaceWriter(options), geometryScale_(options.getOrDefault("scale", 1)), - fieldScale_(options.subOrEmptyDict("fieldScale")), noGeometry_(options.getOrDefault("noGeometry", false)), outputLayout_(outputLayoutType::BY_FIELD) {} diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H index 891b6885a1..24bdf22eda 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -33,7 +33,8 @@ Description \table Property | Description | Required | Default scale | output geometry scaling | no | 1 - fieldScale | output field scaling (dictionary) | no | empty + fieldLevel | Subtract field level before scaling | no | empty dict + fieldScale | Output field scaling | no | empty dict noGeometry | Suppress geometry output (beta feature) | no | false \endtable @@ -44,9 +45,13 @@ Description abaqus { scale 1000; // [m] -> [mm] + fieldLevel + { + p 1e5; // Absolute -> gauge [Pa] + } fieldScale { - "p.*" 0.01; // [Pa] -> [mbar] + "p.*" 0.01; // [Pa] -> [mbar] } } } @@ -110,9 +115,6 @@ class abaqusWriter //- Output geometry scaling const scalar geometryScale_; - //- Output field scaling - const dictionary fieldScale_; - //- BETA feature bool noGeometry_; diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C index 5d1a8635d4..5de351d28e 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -117,30 +117,17 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::writeTemplate outputFile.ext("inp"); - // Output scaling for the variable, but not for integer types. - // could also solve with clever templating + // Implicit geometry merge() + tmp> tfield = mergeField(localValues); - const scalar varScale = - ( - std::is_integral::value - ? scalar(1) - : fieldScale_.getOrDefault(fieldName, 1) - ); + adjustOutputField(fieldName, tfield.ref()); if (verbose_) { - Info<< "Writing field " << fieldName; - if (!equal(varScale, 1)) - { - Info<< " (scaling " << varScale << ')'; - } Info<< " to " << outputFile << endl; } - // Implicit geometry merge() - tmp> tfield = mergeField(localValues) * varScale; - const meshedSurf& surf = surface(); if (Pstream::master() || !parallel_) diff --git a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C index 844debe8da..85c095f766 100644 --- a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C +++ b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -56,8 +56,7 @@ Foam::surfaceWriters::boundaryDataWriter::boundaryDataWriter() : surfaceWriter(), header_(true), - streamOpt_(), - fieldScale_() + streamOpt_() {} @@ -72,8 +71,7 @@ Foam::surfaceWriters::boundaryDataWriter::boundaryDataWriter ( IOstreamOption::formatEnum("format", options, IOstreamOption::ASCII), IOstreamOption::compressionEnum("compression", options) - ), - fieldScale_(options.subOrEmptyDict("fieldScale")) + ) {} @@ -220,25 +218,20 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate const fileName outputFile(surfaceDir/timeName()/fieldName); + // Implicit geometry merge() + tmp> tfield = mergeField(localValues); - // Output scaling for the variable, but not for integer types. - // could also solve with clever templating + adjustOutputField(fieldName, tfield.ref()); - const scalar varScale = - ( - std::is_integral::value - ? scalar(1) - : fieldScale_.getOrDefault(fieldName, 1) - ); + if (verbose_) + { + Info<< " to " << outputFile << endl; + } // Dummy Time to use as objectRegistry autoPtr