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.
This commit is contained in:
Mark Olesen
2022-03-02 14:16:19 +01:00
parent 666e5f6dc4
commit eb676f08a1
12 changed files with 45 additions and 40 deletions

View File

@ -118,9 +118,7 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::writeTemplate
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -219,9 +219,7 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate
const fileName outputFile(surfaceDir/timeName()/fieldName); const fileName outputFile(surfaceDir/timeName()/fieldName);
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -506,10 +506,10 @@ Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::mergeFieldTemplate
template<class Type> template<class Type>
void Foam::surfaceWriter::adjustOutputFieldTemplate Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::adjustFieldTemplate
( (
const word& fieldName, const word& fieldName,
Field<Type>& fld const tmp<Field<Type>>& tfield
) const ) const
{ {
if (verbose_) if (verbose_)
@ -517,6 +517,8 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
Info<< "Writing field " << fieldName; Info<< "Writing field " << fieldName;
} }
tmp<Field<Type>> tadjusted;
// Output scaling for the variable, but not for integer types // Output scaling for the variable, but not for integer types
// which are typically ids etc. // which are typically ids etc.
if (!std::is_integral<Type>::value) if (!std::is_integral<Type>::value)
@ -544,7 +546,14 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
Info<< " [level " << refLevel << ']'; Info<< " [level " << refLevel << ']';
} }
fld -= refLevel; if (!tadjusted)
{
// Steal or clone
tadjusted.reset(tfield.ptr());
}
// Remove offset level
tadjusted.ref() -= refLevel;
} }
// Apply scaling // Apply scaling
@ -558,9 +567,19 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
{ {
Info<< " [scaling " << value << ']'; 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); \ return mergeFieldTemplate(fld); \
} \ } \
\ \
void ThisClass::adjustOutputField \ Foam::tmp<Foam::Field<Type>> \
ThisClass::adjustField \
( \ ( \
const word& fieldName, \ const word& fieldName, \
Field<Type>& fld \ const tmp<Field<Type>>& tfield \
) const \ ) const \
{ \ { \
adjustOutputFieldTemplate(fieldName, fld); \ return adjustFieldTemplate(fieldName, tfield); \
} }
defineSurfaceFieldMethods(Foam::surfaceWriter, Foam::label); defineSurfaceFieldMethods(Foam::surfaceWriter, Foam::label);

View File

@ -195,17 +195,22 @@ protected:
//- Apply refLevel and fieldScaling //- Apply refLevel and fieldScaling
template<class Type> template<class Type>
void adjustOutputFieldTemplate tmp<Field<Type>> adjustFieldTemplate
( (
const word& fieldName, const word& fieldName,
Field<Type>& fld const tmp<Field<Type>>& tfield
) const; ) const;
#undef declareSurfaceFieldMethod #undef declareSurfaceFieldMethod
#define declareSurfaceFieldMethods(Type) \ #define declareSurfaceFieldMethods(Type) \
\ \
tmp<Field<Type>> mergeField(const Field<Type>& fld) const; \ 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(label);
declareSurfaceFieldMethods(scalar); declareSurfaceFieldMethods(scalar);

View File

@ -87,9 +87,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated
} }
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -152,9 +152,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeUncollated
} }
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -194,9 +194,7 @@ Foam::fileName Foam::surfaceWriters::foamWriter::writeTemplate
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -224,9 +224,7 @@ Foam::fileName Foam::surfaceWriters::nastranWriter::writeTemplate
outputFile.ext("bdf"); outputFile.ext("bdf");
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -107,9 +107,7 @@ Foam::fileName Foam::surfaceWriters::rawWriter::writeTemplate
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -207,9 +207,7 @@ Foam::fileName Foam::surfaceWriters::starcdWriter::writeTemplate
outputFile.ext("usr"); outputFile.ext("usr");
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -286,9 +286,7 @@ Foam::fileName Foam::surfaceWriters::vtkWriter::writeTemplate
fileName outputFile = this->write(); fileName outputFile = this->write();
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {

View File

@ -270,9 +270,7 @@ Foam::fileName Foam::surfaceWriters::x3dWriter::writeTemplate
outputFile.ext("x3d"); outputFile.ext("x3d");
// Implicit geometry merge() // Implicit geometry merge()
tmp<Field<Type>> tfield = mergeField(localValues); tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
adjustOutputField(fieldName, tfield.ref());
if (verbose_) if (verbose_)
{ {