From eb676f08a1b17e7ce0b2ac99814647628e21dc08 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 2 Mar 2022 14:16:19 +0100 Subject: [PATCH] BUG: access of non-const tmp value in surface writers - was inadvertently introduced with the previous commit. Affected non-parallel use of the surface writers. --- .../writers/abaqus/abaqusSurfaceWriterImpl.C | 4 +-- .../boundary/boundaryDataSurfaceWriter.C | 4 +-- src/surfMesh/writers/common/surfaceWriter.C | 34 +++++++++++++++---- src/surfMesh/writers/common/surfaceWriter.H | 11 ++++-- .../ensight/ensightSurfaceWriterCollated.C | 4 +-- .../ensight/ensightSurfaceWriterUncollated.C | 4 +-- src/surfMesh/writers/foam/foamSurfaceWriter.C | 4 +-- .../nastran/nastranSurfaceWriterImpl.C | 4 +-- .../writers/raw/rawSurfaceWriterImpl.C | 4 +-- .../writers/starcd/starcdSurfaceWriter.C | 4 +-- src/surfMesh/writers/vtk/vtkSurfaceWriter.C | 4 +-- src/surfMesh/writers/x3d/x3dSurfaceWriter.C | 4 +-- 12 files changed, 45 insertions(+), 40 deletions(-) diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C index 5de351d28e..1ca932b147 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C @@ -118,9 +118,7 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::writeTemplate // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C index 85c095f766..fde30e2ebc 100644 --- a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C +++ b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C @@ -219,9 +219,7 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate const fileName outputFile(surfaceDir/timeName()/fieldName); // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/common/surfaceWriter.C b/src/surfMesh/writers/common/surfaceWriter.C index 2b73f957ef..382e9d0fd9 100644 --- a/src/surfMesh/writers/common/surfaceWriter.C +++ b/src/surfMesh/writers/common/surfaceWriter.C @@ -506,10 +506,10 @@ Foam::tmp> Foam::surfaceWriter::mergeFieldTemplate template -void Foam::surfaceWriter::adjustOutputFieldTemplate +Foam::tmp> Foam::surfaceWriter::adjustFieldTemplate ( const word& fieldName, - Field& fld + const tmp>& tfield ) const { if (verbose_) @@ -517,6 +517,8 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate Info<< "Writing field " << fieldName; } + tmp> tadjusted; + // Output scaling for the variable, but not for integer types // which are typically ids etc. if (!std::is_integral::value) @@ -544,7 +546,14 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate Info<< " [level " << refLevel << ']'; } - fld -= refLevel; + if (!tadjusted) + { + // Steal or clone + tadjusted.reset(tfield.ptr()); + } + + // Remove offset level + tadjusted.ref() -= refLevel; } // Apply scaling @@ -558,9 +567,19 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate { Info<< " [scaling " << value << ']'; } - fld *= value; + + if (!tadjusted) + { + // Steal or clone + tadjusted.reset(tfield.ptr()); + } + + // Apply scaling + tadjusted.ref() *= value; } } + + return (tadjusted ? tadjusted : tfield); } @@ -571,13 +590,14 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate return mergeFieldTemplate(fld); \ } \ \ - void ThisClass::adjustOutputField \ + Foam::tmp> \ + ThisClass::adjustField \ ( \ const word& fieldName, \ - Field& fld \ + const tmp>& tfield \ ) const \ { \ - adjustOutputFieldTemplate(fieldName, fld); \ + return adjustFieldTemplate(fieldName, tfield); \ } defineSurfaceFieldMethods(Foam::surfaceWriter, Foam::label); diff --git a/src/surfMesh/writers/common/surfaceWriter.H b/src/surfMesh/writers/common/surfaceWriter.H index 4d22644f1f..bb9817e2d2 100644 --- a/src/surfMesh/writers/common/surfaceWriter.H +++ b/src/surfMesh/writers/common/surfaceWriter.H @@ -195,17 +195,22 @@ protected: //- Apply refLevel and fieldScaling template - void adjustOutputFieldTemplate + tmp> adjustFieldTemplate ( const word& fieldName, - Field& fld + const tmp>& tfield ) const; #undef declareSurfaceFieldMethod #define declareSurfaceFieldMethods(Type) \ \ tmp> mergeField(const Field& fld) const; \ - void adjustOutputField(const word& fieldName, Field& fld) const; + \ + tmp> adjustField \ + ( \ + const word& fieldName, \ + const tmp>& tfield \ + ) const; declareSurfaceFieldMethods(label); declareSurfaceFieldMethods(scalar); diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C index 473676df97..179cfbdb8e 100644 --- a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C +++ b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C @@ -87,9 +87,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated } // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C index 8d334dea37..6519f49205 100644 --- a/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C +++ b/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C @@ -152,9 +152,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeUncollated } // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/foam/foamSurfaceWriter.C b/src/surfMesh/writers/foam/foamSurfaceWriter.C index 693df2f839..0006c67eb8 100644 --- a/src/surfMesh/writers/foam/foamSurfaceWriter.C +++ b/src/surfMesh/writers/foam/foamSurfaceWriter.C @@ -194,9 +194,7 @@ Foam::fileName Foam::surfaceWriters::foamWriter::writeTemplate // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C b/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C index 9dcb111d5b..1653bdbcfd 100644 --- a/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C +++ b/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C @@ -224,9 +224,7 @@ Foam::fileName Foam::surfaceWriters::nastranWriter::writeTemplate outputFile.ext("bdf"); // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C index d4a089bd64..fec67c262f 100644 --- a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C +++ b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C @@ -107,9 +107,7 @@ Foam::fileName Foam::surfaceWriters::rawWriter::writeTemplate // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/starcd/starcdSurfaceWriter.C b/src/surfMesh/writers/starcd/starcdSurfaceWriter.C index cc1797fc38..4817d1f4f1 100644 --- a/src/surfMesh/writers/starcd/starcdSurfaceWriter.C +++ b/src/surfMesh/writers/starcd/starcdSurfaceWriter.C @@ -207,9 +207,7 @@ Foam::fileName Foam::surfaceWriters::starcdWriter::writeTemplate outputFile.ext("usr"); // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C index 8fc7b43865..862a616967 100644 --- a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C +++ b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C @@ -286,9 +286,7 @@ Foam::fileName Foam::surfaceWriters::vtkWriter::writeTemplate fileName outputFile = this->write(); // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/x3d/x3dSurfaceWriter.C b/src/surfMesh/writers/x3d/x3dSurfaceWriter.C index a97f94e924..25b657f8a0 100644 --- a/src/surfMesh/writers/x3d/x3dSurfaceWriter.C +++ b/src/surfMesh/writers/x3d/x3dSurfaceWriter.C @@ -270,9 +270,7 @@ Foam::fileName Foam::surfaceWriters::x3dWriter::writeTemplate outputFile.ext("x3d"); // Implicit geometry merge() - tmp> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) {