From 8fe0d1bacdb274da378f52e3451ad66ab7519a07 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 3 Dec 2020 15:16:17 +0100 Subject: [PATCH] ENH: improvements for managing iso-surfaces - generic isoSurfaceBase. Provides simpler cell-cut detection and various functions that can be used for iso-surfaces or when preparing prefiltered input for iso-surfaces. - rudimentary runtime selection ENH: isoSurface Cell/Topo uses the isoSurfaceBase infrastructure - simpler cell cut detection, common routines - ensure that tetMatcher is only called once per cell ENH: use indirect patch during edge erosion - lower overhead, allows backtracking (future) if needed --- src/sampling/Make/files | 1 + .../isoSurface/sampledIsoSurface.C | 12 +- .../isoSurface/sampledIsoSurfaceTopo.C | 3 +- .../sampledCuttingPlane/sampledCuttingPlane.C | 62 +- .../sampledCuttingPlane/sampledCuttingPlane.H | 4 +- .../sampledCuttingPlaneTemplates.C | 1 - .../surface/distanceSurface/distanceSurface.C | 56 +- .../surface/distanceSurface/distanceSurface.H | 6 +- .../surface/isoSurface/isoSurfaceBase.C | 275 +++++++- .../surface/isoSurface/isoSurfaceBase.H | 185 +++++- .../isoSurface/isoSurfaceBaseMethods.H | 66 ++ .../surface/isoSurface/isoSurfaceBaseNew.C | 107 +++ .../surface/isoSurface/isoSurfaceCell.C | 245 ++----- .../surface/isoSurface/isoSurfaceCell.H | 88 +-- .../isoSurface/isoSurfaceCellTemplates.C | 6 +- .../surface/isoSurface/isoSurfacePoint.C | 81 ++- .../surface/isoSurface/isoSurfacePoint.H | 60 +- .../isoSurface/isoSurfacePointTemplates.C | 18 +- .../surface/isoSurface/isoSurfaceTopo.C | 621 +++++++----------- .../surface/isoSurface/isoSurfaceTopo.H | 82 ++- .../isoSurface/isoSurfaceTopoTemplates.C | 2 +- 21 files changed, 1118 insertions(+), 863 deletions(-) create mode 100644 src/sampling/surface/isoSurface/isoSurfaceBaseMethods.H create mode 100644 src/sampling/surface/isoSurface/isoSurfaceBaseNew.C diff --git a/src/sampling/Make/files b/src/sampling/Make/files index 71007d65bd..72b78a4656 100644 --- a/src/sampling/Make/files +++ b/src/sampling/Make/files @@ -29,6 +29,7 @@ surface/cutting/cuttingSurfaceBase.C surface/cutting/cuttingSurfaceBaseSelection.C surface/distanceSurface/distanceSurface.C surface/isoSurface/isoSurfaceBase.C +surface/isoSurface/isoSurfaceBaseNew.C surface/isoSurface/isoSurfaceParams.C surface/isoSurface/isoSurfaceCell.C surface/isoSurface/isoSurfacePoint.C diff --git a/src/sampling/sampledSurface/isoSurface/sampledIsoSurface.C b/src/sampling/sampledSurface/isoSurface/sampledIsoSurface.C index 19479bd0fb..37a7618967 100644 --- a/src/sampling/sampledSurface/isoSurface/sampledIsoSurface.C +++ b/src/sampling/sampledSurface/isoSurface/sampledIsoSurface.C @@ -27,7 +27,9 @@ License \*---------------------------------------------------------------------------*/ #include "sampledIsoSurface.H" +#include "isoSurfacePoint.H" #include "dictionary.H" +#include "fvMesh.H" #include "volFields.H" #include "volPointInterpolation.H" #include "addToRunTimeSelectionTable.H" @@ -383,13 +385,13 @@ bool Foam::sampledIsoSurface::updateGeometry() const if (debug) { - Pout<< "isoSurfacePoint::updateGeometry() : constructed iso:" - << nl + Pout<< "isoSurfacePoint::updateGeometry() : constructed iso:" << nl << " isoField : " << isoField_ << nl << " isoValue : " << isoVal_ << nl << " average : " << Switch(average_) << nl << " filter : " - << Switch(bool(isoParams_.filter())) << nl; + << Switch(bool(isoParams_.filter())) << nl + << " bounds : " << isoParams_.getClipBounds() << nl; if (subMeshPtr_) { Pout<< " zone size : " @@ -439,10 +441,10 @@ Foam::sampledIsoSurface::sampledIsoSurface { FatalIOErrorInFunction(dict) << "Non-interpolated iso surface not supported since triangles" - << " span across cells." << exit(FatalIOError); + << " span across cells." << nl + << exit(FatalIOError); } - if (!dict.readIfPresent("zones", zoneNames_) && dict.found("zone")) { zoneNames_.resize(1); diff --git a/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceTopo.C b/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceTopo.C index 610ceede0c..a0a46a568f 100644 --- a/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceTopo.C +++ b/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceTopo.C @@ -176,7 +176,7 @@ bool Foam::sampledIsoSurfaceTopo::updateGeometry() const ); surface_.transfer(static_cast(surf)); - meshCells_ = std::move(surf.meshCells()); + meshCells_.transfer(surf.meshCells()); } // if (subMeshPtr_ && meshCells_.size()) @@ -186,6 +186,7 @@ bool Foam::sampledIsoSurfaceTopo::updateGeometry() const // UIndirectList