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()
tmp<Field<Type>> tfield = mergeField(localValues);
adjustOutputField(fieldName, tfield.ref());
tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
if (verbose_)
{

View File

@ -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_)
{

View File

@ -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);

View File

@ -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);

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{

View File

@ -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_)
{