diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C index 5de351d28ee605a05fb878cdb768332752bac88c..1ca932b147e7fcc0972567388b85eb35fbf60780 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 85c095f76642c1a66602903c7bf05e0a5853837d..fde30e2ebcc6a15e96ffa84279b74949d0d9d4a7 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 2b73f957ef9e38471cb52d249110790a607ba4fa..382e9d0fd9b50158359fbad521ee2c9f55d04082 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 4d22644f1fc429a83c21f3cda53ec644897ad694..bb9817e2d2db378c456efbbb14121a8aa94b881c 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 473676df975eacee1374719bf8a7317288f0c18b..179cfbdb8e09171468ae6000a69c83cd6ac97dc2 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 8d334dea37a2ad3b927f9976cfa8c4a9c7ec5501..6519f49205c69b9127bdf8d3646de15ddc562f0e 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 693df2f839ff5b1b6808f01ab13f57ca0a0a0261..0006c67eb85643c960ef22b726c59a755c2fe161 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 9dcb111d5b5dbbce89bbb74cc887853c70e31650..1653bdbcfd310b218fa711d424213deea897fd41 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 d4a089bd64937cc2247fb175342806842ae3a91b..fec67c262f5845537cbf8439538cc465c3974681 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 cc1797fc38d74f34debb7c3abfb83465e9f08ac7..4817d1f4f1d69d0d6b4667b990c7746033b66c4d 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 8fc7b438651b485eac1de00844263c254e556336..862a616967bae1bf4ae9b69856d0769e8983c44d 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 a97f94e9240843e4f5cc0a41ab9740fc9978299f..25b657f8a0e848fb4bb04453d9fe7e76cad3d850 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_) {