From eb676f08a1b17e7ce0b2ac99814647628e21dc08 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> 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 5de351d28ee..1ca932b147e 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C index 85c095f7664..fde30e2ebcc 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/common/surfaceWriter.C b/src/surfMesh/writers/common/surfaceWriter.C index 2b73f957ef9..382e9d0fd9b 100644 --- a/src/surfMesh/writers/common/surfaceWriter.C +++ b/src/surfMesh/writers/common/surfaceWriter.C @@ -506,10 +506,10 @@ Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::mergeFieldTemplate template<class Type> -void Foam::surfaceWriter::adjustOutputFieldTemplate +Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::adjustFieldTemplate ( const word& fieldName, - Field<Type>& fld + const tmp<Field<Type>>& tfield ) const { if (verbose_) @@ -517,6 +517,8 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate Info<< "Writing field " << fieldName; } + tmp<Field<Type>> tadjusted; + // Output scaling for the variable, but not for integer types // which are typically ids etc. if (!std::is_integral<Type>::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<Foam::Field<Type>> \ + ThisClass::adjustField \ ( \ const word& fieldName, \ - Field<Type>& fld \ + const tmp<Field<Type>>& 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 4d22644f1fc..bb9817e2d2d 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<class Type> - void adjustOutputFieldTemplate + tmp<Field<Type>> adjustFieldTemplate ( const word& fieldName, - Field<Type>& fld + const tmp<Field<Type>>& tfield ) const; #undef declareSurfaceFieldMethod #define declareSurfaceFieldMethods(Type) \ \ tmp<Field<Type>> mergeField(const Field<Type>& fld) const; \ - void adjustOutputField(const word& fieldName, Field<Type>& fld) const; + \ + tmp<Field<Type>> adjustField \ + ( \ + const word& fieldName, \ + const tmp<Field<Type>>& tfield \ + ) const; declareSurfaceFieldMethods(label); declareSurfaceFieldMethods(scalar); diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C index 473676df975..179cfbdb8e0 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C index 8d334dea37a..6519f49205c 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/foam/foamSurfaceWriter.C b/src/surfMesh/writers/foam/foamSurfaceWriter.C index 693df2f839f..0006c67eb85 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C b/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C index 9dcb111d5b5..1653bdbcfd3 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C index d4a089bd649..fec67c262f5 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/starcd/starcdSurfaceWriter.C b/src/surfMesh/writers/starcd/starcdSurfaceWriter.C index cc1797fc38d..4817d1f4f1d 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C index 8fc7b438651..862a616967b 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { diff --git a/src/surfMesh/writers/x3d/x3dSurfaceWriter.C b/src/surfMesh/writers/x3d/x3dSurfaceWriter.C index a97f94e9240..25b657f8a0e 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<Field<Type>> tfield = mergeField(localValues); - - adjustOutputField(fieldName, tfield.ref()); + tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues)); if (verbose_) { -- GitLab