diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C index 3779ff20d3..48b65330f9 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C @@ -32,6 +32,7 @@ License #include "mapPolyMesh.H" #include "volFields.H" #include "HashOps.H" +#include "ListOps.H" #include "Time.H" #include "UIndirectList.H" #include "addToRunTimeSelectionTable.H" @@ -168,12 +169,18 @@ void Foam::sampledSurfaces::countFields() forAll(*this, surfi) { const sampledSurface& s = (*this)[surfi]; + surfaceWriter& outWriter = writers_[surfi]; - writers_[surfi].nFields() = + outWriter.nFields() = ( nVolumeFields + (s.withSurfaceFields() ? nSurfaceFields : 0) - + ((s.hasFaceIds() && !s.interpolate()) ? 1 : 0) + + + ( + // Face-id field, but not if the writer manages that itself + !s.interpolate() && s.hasFaceIds() && !outWriter.usesFaceIds() + ? 1 : 0 + ) ); } } @@ -319,7 +326,7 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) const dictionary& surfDict = dEntry.dict(); autoPtr surf = - sampledSurface::New + sampledSurface::New ( dEntry.keyword(), mesh_, @@ -555,20 +562,29 @@ bool Foam::sampledSurfaces::performAction(unsigned request) outWriter.beginTime(obr_.time()); - // Write original ids - if (s.hasFaceIds() && !s.interpolate()) + // Face-id field, but not if the writer manages that itself + if (!s.interpolate() && s.hasFaceIds() && !outWriter.usesFaceIds()) { // This is still quite horrible. Field