From 0c8915472975b3123d91d7f3ee6ddb0dbb2c51f1 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 29 Jul 2021 15:43:05 +0200 Subject: [PATCH] ENH: add fallback behaviour for distanceSurface proximity regions (#1631) - using the proximityRegions filter when there is no enclosing surface to segregate domains causes a surface of zero-faces to be created. In most cases, this means that a simpler proximityFaces filter would have been more appropriate. To increase overall robustness, revert to the simpler proximityFaces filter logic when the proximityRegions would otherwise result in zero faces (globally seen). --- .../surface/distanceSurface/distanceSurface.C | 2 ++ .../distanceSurface/distanceSurfaceFilter.C | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/sampling/surface/distanceSurface/distanceSurface.C b/src/sampling/surface/distanceSurface/distanceSurface.C index 3f634f04f9..e2baa1b14c 100644 --- a/src/sampling/surface/distanceSurface/distanceSurface.C +++ b/src/sampling/surface/distanceSurface/distanceSurface.C @@ -279,6 +279,7 @@ Foam::distanceSurface::distanceSurface || (distance_ < 0) || dict.getOrDefault("signed", true) ), + isoParams_ ( dict, @@ -374,6 +375,7 @@ Foam::distanceSurface::distanceSurface || (distance_ < 0) || useSignedDistance ), + isoParams_(params), topoFilter_(topologyFilterType::NONE), nearestPoints_(), diff --git a/src/sampling/surface/distanceSurface/distanceSurfaceFilter.C b/src/sampling/surface/distanceSurface/distanceSurfaceFilter.C index 0ca4e4961b..b3e8779a04 100644 --- a/src/sampling/surface/distanceSurface/distanceSurfaceFilter.C +++ b/src/sampling/surface/distanceSurface/distanceSurfaceFilter.C @@ -429,6 +429,27 @@ void Foam::distanceSurface::filterRegionProximity } + // If filtering with region proximity results in zero faces, + // revert to face-only proximity filter + if (returnReduce(acceptFaces.none(), andOp())) + { + acceptFaces.reset(); + prune = false; + + // Consider the absolute proximity of the face centres + forAll(faceDistance, facei) + { + if (absProximity_ < faceDistance[facei]) + { + prune = true; + } + else + { + acceptFaces.set(facei); + } + } + } + if (prune) { labelList pointMap, faceMap;