From a9bf69b551e0066f19dbe8d0c8b02321ceafc1f7 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Tue, 8 Sep 2020 09:17:35 +0200 Subject: [PATCH] ENH: suppress surface Face-id field if writer manages that itself (#1600) - for CAE formats such as abaqus, nastran, starcd, etc, the element id is already part of the output format itself. For these cases, there is no use in generating an additional "Ids" field. ENH: add code to ignore negative face ids - these will arise from very special cases, such as when a solid element and side are encoded into a single integer. BUG: starcd surface values output did not use original face ids --- .../sampledSurfaces/sampledSurfaces.C | 38 +++++++++++++------ .../abaqus/ABAQUSsurfaceFormat.C | 12 ++++-- .../surfaceFormats/nas/NASsurfaceFormat.C | 11 ++++-- .../starcd/STARCDsurfaceFormat.C | 3 +- .../writers/nastran/nastranSurfaceWriter.C | 10 +++-- .../writers/nastran/nastranSurfaceWriter.H | 6 +++ .../nastran/nastranSurfaceWriterImpl.C | 7 ++-- .../writers/starcd/starcdSurfaceWriter.C | 37 ++++++++++++++---- .../writers/starcd/starcdSurfaceWriter.H | 6 +++ src/surfMesh/writers/surfaceWriter.H | 8 ++++ 10 files changed, 105 insertions(+), 33 deletions(-) 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