From df91ea8df48f93f008df74e35d563911d431f8cf Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 12 Mar 2020 15:57:57 +0100
Subject: [PATCH] ENH: adjust sampling onto meshed surfaces (#1600)

- base level surface container is now a meshedSurface instead of
  a triSurface. This avoid automatic triangulation of surfaces
  when they are read, and simplifies the internals.

- sampling types:
  * "meshedSurface" (compat: "sampledTriSurfaceMesh")
  * "meshedSurfaceNormal" (compat: "sampledTriSurfaceMeshNormal")
---
 .../pressure/pressureDifferenceSurface.cfg    |   4 +-
 .../surfaceFieldValue/triSurfaceRegion.cfg    |   4 +-
 src/sampling/Make/files                       |   4 +-
 .../sampledMeshedSurface.C}                   | 425 +++++++-----------
 .../sampledMeshedSurface.H}                   |  54 +--
 .../sampledMeshedSurfaceNormal.C}             |  36 +-
 .../sampledMeshedSurfaceNormal.H}             |  38 +-
 .../sampledMeshedSurfaceTemplates.C}          |   8 +-
 .../sampledSurfaces/sampledSurfaces.H         |   4 +-
 .../injectorPipe/system/fieldTransfer         |   2 +-
 .../simpleFoam/squareBend/system/sampling     |   4 +-
 11 files changed, 235 insertions(+), 348 deletions(-)
 rename src/sampling/sampledSurface/{sampledTriSurfaceMesh/sampledTriSurfaceMesh.C => sampledMeshedSurface/sampledMeshedSurface.C} (59%)
 rename src/sampling/sampledSurface/{sampledTriSurfaceMesh/sampledTriSurfaceMesh.H => sampledMeshedSurface/sampledMeshedSurface.H} (91%)
 rename src/sampling/sampledSurface/{sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.C => sampledMeshedSurface/sampledMeshedSurfaceNormal.C} (74%)
 rename src/sampling/sampledSurface/{sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.H => sampledMeshedSurface/sampledMeshedSurfaceNormal.H} (87%)
 rename src/sampling/sampledSurface/{sampledTriSurfaceMesh/sampledTriSurfaceMeshTemplates.C => sampledMeshedSurface/sampledMeshedSurfaceTemplates.C} (95%)

diff --git a/etc/caseDicts/postProcessing/pressure/pressureDifferenceSurface.cfg b/etc/caseDicts/postProcessing/pressure/pressureDifferenceSurface.cfg
index c88ad8b9864..01737a7f2d4 100644
--- a/etc/caseDicts/postProcessing/pressure/pressureDifferenceSurface.cfg
+++ b/etc/caseDicts/postProcessing/pressure/pressureDifferenceSurface.cfg
@@ -1,7 +1,7 @@
 /*--------------------------------*- C++ -*----------------------------------*\
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     | Version:  v1912
+   \\    /   O peration     | Version:  v2006
     \\  /    A nd           | Website:  www.openfoam.com
      \\/     M anipulation  |
 \*---------------------------------------------------------------------------*/
@@ -14,7 +14,7 @@ region1
 
     sampledSurfaceDict
     {
-        type        sampledTriSurfaceMesh;
+        type        meshedSurface;
         regionType  cells;
         interpolate true;
         surface     $triSurface1;
diff --git a/etc/caseDicts/postProcessing/surfaceFieldValue/triSurfaceRegion.cfg b/etc/caseDicts/postProcessing/surfaceFieldValue/triSurfaceRegion.cfg
index 006d796c7b1..538b9ed3b58 100644
--- a/etc/caseDicts/postProcessing/surfaceFieldValue/triSurfaceRegion.cfg
+++ b/etc/caseDicts/postProcessing/surfaceFieldValue/triSurfaceRegion.cfg
@@ -1,7 +1,7 @@
 /*--------------------------------*- C++ -*----------------------------------*\
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     | Version:  v1912
+   \\    /   O peration     | Version:  v2006
     \\  /    A nd           | Website:  www.openfoam.com
      \\/     M anipulation  |
 \*---------------------------------------------------------------------------*/
@@ -12,7 +12,7 @@ regionType sampledSurface;
 
 sampledSurfaceDict
 {
-    type        sampledTriSurfaceMesh;
+    type        meshedSurface;
     surface     $triSurface;
     source      cells;
     interpolate true;
diff --git a/src/sampling/Make/files b/src/sampling/Make/files
index 7c2727ce536..2d2796dcca5 100644
--- a/src/sampling/Make/files
+++ b/src/sampling/Make/files
@@ -44,11 +44,11 @@ sampledSurface/isoSurface/sampledIsoSurfaceTopo.C
 sampledSurface/distanceSurface/sampledDistanceSurface.C
 sampledSurface/sampledCuttingPlane/sampledCuttingPlane.C
 sampledSurface/sampledCuttingSurface/sampledCuttingSurface.C
+sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C
+sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.C
 sampledSurface/sampledSurface/sampledSurface.C
 sampledSurface/sampledSurface/sampledSurfaceRegister.C
 sampledSurface/sampledSurfaces/sampledSurfaces.C
-sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C
-sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.C
 sampledSurface/thresholdCellFaces/sampledThresholdCellFaces.C
 
 readers = sampledSurface/readers
diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C
similarity index 59%
rename from src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C
rename to src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C
index f00bca31123..9506a9e85fa 100644
--- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C
+++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C
@@ -26,7 +26,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "sampledTriSurfaceMesh.H"
+#include "sampledMeshedSurface.H"
 #include "meshSearch.H"
 #include "Tuple2.H"
 #include "globalIndex.H"
@@ -39,9 +39,9 @@ License
 
 const Foam::Enum
 <
-    Foam::sampledTriSurfaceMesh::samplingSource
+    Foam::sampledMeshedSurface::samplingSource
 >
-Foam::sampledTriSurfaceMesh::samplingSourceNames_
+Foam::sampledMeshedSurface::samplingSourceNames_
 ({
     { samplingSource::cells, "cells" },
     { samplingSource::insideCells, "insideCells" },
@@ -51,12 +51,22 @@ Foam::sampledTriSurfaceMesh::samplingSourceNames_
 
 namespace Foam
 {
-    defineTypeNameAndDebug(sampledTriSurfaceMesh, 0);
-    addToRunTimeSelectionTable
+    defineTypeNameAndDebug(sampledMeshedSurface, 0);
+    // Use shorter name only
+    addNamedToRunTimeSelectionTable
     (
         sampledSurface,
-        sampledTriSurfaceMesh,
-        word
+        sampledMeshedSurface,
+        word,
+        meshedSurface
+    );
+    // Compatibility name (1912)
+    addNamedToRunTimeSelectionTable
+    (
+        sampledSurface,
+        sampledMeshedSurface,
+        word,
+        sampledTriSurfaceMesh
     );
 
     //- Private class for finding nearest
@@ -104,50 +114,63 @@ inline static IOobject selectReadIO(const word& name, const Time& runTime)
 } // End namespace Foam
 
 
-// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-void Foam::sampledTriSurfaceMesh::setZoneMap
-(
-    const surfZoneList& zoneLst,
-    labelList& zoneIds
-)
+void Foam::sampledMeshedSurface::setZoneMap()
 {
-    label sz = 0;
-    for (const surfZone& zn : zoneLst)
+    // Ensure zoneIds_ are correctly populated
+
+    const meshedSurface& s = static_cast<const meshedSurface&>(*this);
+
+    const auto& zones = s.surfZones();
+
+    zoneIds_.resize(s.size());
+
+    // Trivial case
+    if (zoneIds_.empty() || zones.size() <= 1)
     {
-        sz += zn.size();
+        zoneIds_ = 0;
+        return;
     }
-    zoneIds.resize(sz);
 
-    forAll(zoneLst, zonei)
+
+    label beg = 0;
+
+    forAll(zones, zonei)
     {
-        const surfZone& zn = zoneLst[zonei];
+        const label len = min(zones[zonei].size(), zoneIds_.size() - beg);
 
         // Assign sub-zone Ids
-        SubList<label>(zoneIds, zn.range()) = zonei;
+        SubList<label>(zoneIds_, len, beg) = zonei;
+
+        beg += len;
+    }
+
+    // Anything remaining? Should not happen
+    {
+        const label len = (zoneIds_.size() - beg);
+
+        if (len > 0)
+        {
+            SubList<label>(zoneIds_, len, beg) = max(0, zones.size()-1);
+        }
     }
 }
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
+bool Foam::sampledMeshedSurface::update(const meshSearch& meshSearcher)
 {
+    // Global numbering for cells/faces
+    // - only used to uniquely identify local elements
+    globalIndex globalCells(onBoundary() ? mesh().nFaces() : mesh().nCells());
+
     // Find the cells the triangles of the surface are in.
     // Does approximation by looking at the face centres only
     const pointField& fc = surface_.faceCentres();
 
-    List<nearInfo> nearest(fc.size());
-
-    // Global numbering for cells/faces - only used to uniquely identify local
-    // elements
-    globalIndex globalCells(onBoundary() ? mesh().nFaces() : mesh().nCells());
-
-    for (nearInfo& near : nearest)
-    {
-        near.first()  = GREAT;
-        near.second() = labelMax;
-    }
+    List<nearInfo> nearest(fc.size(), nearInfo(GREAT, labelMax));
 
     if (sampleSource_ == cells)
     {
@@ -155,17 +178,16 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
 
         const indexedOctree<treeDataCell>& cellTree = meshSearcher.cellTree();
 
-        forAll(fc, triI)
+        forAll(fc, facei)
         {
-            pointIndexHit nearInfo = cellTree.findNearest
-            (
-                fc[triI],
-                sqr(GREAT)
-            );
-            if (nearInfo.hit())
+            const point& pt = fc[facei];
+
+            pointIndexHit info = cellTree.findNearest(pt, sqr(GREAT));
+
+            if (info.hit())
             {
-                nearest[triI].first()  = magSqr(nearInfo.hitPoint()-fc[triI]);
-                nearest[triI].second() = globalCells.toGlobal(nearInfo.index());
+                nearest[facei].first()  = magSqr(info.hitPoint()-pt);
+                nearest[facei].second() = globalCells.toGlobal(info.index());
             }
         }
     }
@@ -173,17 +195,19 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
     {
         // Search for cell containing point
 
-        const indexedOctree<treeDataCell>& cellTree = meshSearcher.cellTree();
+        const auto& cellTree = meshSearcher.cellTree();
 
-        forAll(fc, triI)
+        forAll(fc, facei)
         {
-            if (cellTree.bb().contains(fc[triI]))
+            const point& pt = fc[facei];
+
+            if (cellTree.bb().contains(pt))
             {
-                const label index = cellTree.findInside(fc[triI]);
+                const label index = cellTree.findInside(pt);
                 if (index != -1)
                 {
-                    nearest[triI].first()  = 0.0;
-                    nearest[triI].second() = globalCells.toGlobal(index);
+                    nearest[facei].first()  = 0;
+                    nearest[facei].second() = globalCells.toGlobal(index);
                 }
             }
         }
@@ -193,23 +217,22 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
         // Search for nearest boundaryFace
 
         //- Search on all non-coupled boundary faces
-        const indexedOctree<treeDataFace>& bTree =
-            meshSearcher.nonCoupledBoundaryTree();
+        const auto& bndTree = meshSearcher.nonCoupledBoundaryTree();
 
-        forAll(fc, triI)
+        forAll(fc, facei)
         {
-            pointIndexHit nearInfo = bTree.findNearest
-            (
-                fc[triI],
-                sqr(GREAT)
-            );
-            if (nearInfo.hit())
+            const point& pt = fc[facei];
+
+            pointIndexHit info = bndTree.findNearest(pt, sqr(GREAT));
+
+            if (info.hit())
             {
-                nearest[triI].first()  = magSqr(nearInfo.hitPoint()-fc[triI]);
-                nearest[triI].second() = globalCells.toGlobal
-                (
-                    bTree.shapes().faceLabels()[nearInfo.index()]
-                );
+                nearest[facei].first()  = magSqr(info.hitPoint()-pt);
+                nearest[facei].second() =
+                    globalCells.toGlobal
+                    (
+                        bndTree.shapes().faceLabels()[info.index()]
+                    );
             }
         }
     }
@@ -223,20 +246,20 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
 
     labelList cellOrFaceLabels(fc.size(), -1);
 
-    label nFound = 0;
-    forAll(nearest, triI)
+    bitSet facesToSubset(fc.size());
+
+    forAll(nearest, facei)
     {
-        if (nearest[triI].second() == labelMax)
+        const label index = nearest[facei].second();
+
+        if (index == labelMax)
         {
             // Not found on any processor. How to map?
         }
-        else if (globalCells.isLocal(nearest[triI].second()))
+        else if (globalCells.isLocal(index))
         {
-            cellOrFaceLabels[triI] = globalCells.toLocal
-            (
-                nearest[triI].second()
-            );
-            nFound++;
+            cellOrFaceLabels[facei] = globalCells.toLocal(index);
+            facesToSubset.set(facei);
         }
     }
 
@@ -244,206 +267,59 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
     if (debug)
     {
         Pout<< "Local out of faces:" << cellOrFaceLabels.size()
-            << " keeping:" << nFound << endl;
+            << " keeping:" << facesToSubset.count() << endl;
     }
 
-    // Now subset the surface.
-    // Done manually in case the original had non-compact point numbering
-
-    const triSurface& s = surface_;
-
-    // Compact to original triangle
-    labelList faceMap(s.size());
-    // Compact to original points
-    labelList pointMap(s.points().size());
-    // From original point to compact points
-    labelList reversePointMap(s.points().size(), -1);
-
-    // Handle region-wise sorting (makes things slightly more complicated)
-    zoneIds_.setSize(s.size(), -1);
 
-    // Better not to use triSurface::sortedZones here,
-    // since we'll sort ourselves
+    // Subset the surface
+    meshedSurface& s = static_cast<meshedSurface&>(*this);
 
-    // Get zone/region sizes used, store under the original region Id
-    Map<label> zoneSizes;
+    labelList pointMap;
+    labelList faceMap;
 
-    // Recover region names from the input surface
-    Map<word> zoneNames;
-    {
-        const geometricSurfacePatchList& patches = s.patches();
-
-        forAll(patches, patchi)
-        {
-            zoneNames.set
-            (
-                patchi,
-                (
-                    patches[patchi].name().empty()
-                  ? geometricSurfacePatch::defaultName(patchi)
-                  : patches[patchi].name()
-                )
-            );
-
-            zoneSizes.set(patchi, 0);
-        }
-    }
-
-
-    {
-        label newPointi = 0;
-        label newFacei = 0;
-
-        forAll(s, facei)
-        {
-            if (cellOrFaceLabels[facei] != -1)
-            {
-                const triSurface::FaceType& f = s[facei];
-                const label regionid = f.region();
-
-                auto fnd = zoneSizes.find(regionid);
-                if (fnd.found())
-                {
-                    ++(*fnd);
-                }
-                else
-                {
-                    // This shouldn't happen
-                    zoneSizes.insert(regionid, 1);
-                    zoneNames.set
-                    (
-                        regionid,
-                        geometricSurfacePatch::defaultName(regionid)
-                    );
-                }
+    s = surface_.subsetMesh(facesToSubset, pointMap, faceMap);
 
-                // Store new faces compact
-                faceMap[newFacei] = facei;
-                zoneIds_[newFacei] = regionid;
-                ++newFacei;
+    // Ensure zoneIds_ are indeed correct
+    setZoneMap();
 
-                // Renumber face points
-                for (const label labi : f)
-                {
-                    if (reversePointMap[labi] == -1)
-                    {
-                        pointMap[newPointi] = labi;
-                        reversePointMap[labi] = newPointi++;
-                    }
-                }
-            }
-        }
-
-        // Trim
-        faceMap.setSize(newFacei);
-        zoneIds_.setSize(newFacei);
-        pointMap.setSize(newPointi);
-    }
-
-
-    // Assign start/size (and name) to the newZones
-    // re-use the lookup to map (zoneId => zoneI)
-    surfZoneList zoneLst(zoneSizes.size());
-    label start = 0;
-    label zoneI = 0;
-    forAllIters(zoneSizes, iter)
+    // This is currently only partially useful
+    if (keepIds_)
     {
-        // No negative regionids, so Map<label> usually sorts properly
-        const label regionid = iter.key();
-
-        word name;
-        auto fnd = zoneNames.cfind(regionid);
-        if (fnd.found())
-        {
-            name = *fnd;
-        }
-        if (name.empty())
-        {
-            name = geometricSurfacePatch::defaultName(regionid);
-        }
-
-        zoneLst[zoneI] = surfZone
-        (
-            name,
-            0,           // initialize with zero size
-            start,
-            zoneI
-        );
-
-        // Adjust start for the next zone and save (zoneId => zoneI) mapping
-        start += iter();
-        iter() = zoneI++;
+        originalIds_ = faceMap;
     }
-
-
-    // At this stage:
-    // - faceMap to map the (unsorted) compact to original triangle
-    // - zoneIds for the next sorting
-    // - zoneSizes contains region -> count information
-
-    // Rebuild the faceMap for the sorted order
-    labelList sortedFaceMap(faceMap.size());
-
-    forAll(zoneIds_, facei)
+    else
     {
-        const label zonei = zoneIds_[facei];
-        label sortedFacei = zoneLst[zonei].start() + zoneLst[zonei].size()++;
-        sortedFaceMap[sortedFacei] = faceMap[facei];
+        originalIds_.clear();
     }
 
-    // zoneIds are now simply flat values
-    setZoneMap(zoneLst, zoneIds_);
-
-    // Replace the faceMap with the properly sorted face map
-    faceMap.transfer(sortedFaceMap);
-
-    if (keepIds_)
-    {
-        originalIds_ = faceMap;
-    }
 
     // Subset cellOrFaceLabels (for compact faces)
     cellOrFaceLabels = labelUIndList(cellOrFaceLabels, faceMap)();
 
-    // Store any face per point (without using pointFaces())
-    labelList pointToFace(pointMap.size());
-
-    // Create faces and points for subsetted surface
-    faceList& surfFaces = this->storedFaces();
-    surfFaces.setSize(faceMap.size());
 
-    this->storedZones().transfer(zoneLst);
+    // Collect the samplePoints and sampleElements
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    forAll(faceMap, facei)
+    if (sampledSurface::interpolate())
     {
-        face& f = surfFaces[facei];
-
-        f = s[faceMap[facei]];                  // Copy original face
-        inplaceRenumber(reversePointMap, f);    // renumber point ids
-
-        for (const label labi : f)
-        {
-            pointToFace[labi] = facei;
-        }
-    }
+        // With point interpolation
 
-    this->storedPoints() = pointField(s.points(), pointMap);
-
-    if (debug)
-    {
-        print(Pout);
-        Pout<< endl;
-    }
+        samplePoints_.resize(pointMap.size());
+        sampleElements_.resize(pointMap.size(), -1);
 
+        // Store any face per point (without using pointFaces())
+        labelList pointToFace(std::move(pointMap));
 
+        forAll(s, facei)
+        {
+            const face& f = s[facei];
 
-    // Collect the samplePoints and sampleElements
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            for (const label labi : f)
+            {
+                pointToFace[labi] = facei;
+            }
+        }
 
-    if (sampledSurface::interpolate())
-    {
-        samplePoints_.setSize(pointMap.size());
-        sampleElements_.setSize(pointMap.size(), -1);
 
         if (sampleSource_ == cells)
         {
@@ -453,7 +329,9 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
             forAll(points(), pointi)
             {
                 const point& pt = points()[pointi];
-                label celli = cellOrFaceLabels[pointToFace[pointi]];
+
+                const label celli = cellOrFaceLabels[pointToFace[pointi]];
+
                 sampleElements_[pointi] = celli;
 
                 // Check if point inside cell
@@ -472,14 +350,15 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
                 else
                 {
                     // Find nearest point on faces of cell
-                    const cell& cFaces = mesh().cells()[celli];
 
                     scalar minDistSqr = VGREAT;
 
-                    forAll(cFaces, i)
+                    for (const label facei : mesh().cells()[celli])
                     {
-                        const face& f = mesh().faces()[cFaces[i]];
+                        const face& f = mesh().faces()[facei];
+
                         pointHit info = f.nearestPoint(pt, mesh().points());
+
                         if (info.distance() < minDistSqr)
                         {
                             minDistSqr = info.distance();
@@ -497,7 +376,9 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
             forAll(points(), pointi)
             {
                 const point& pt = points()[pointi];
-                label celli = cellOrFaceLabels[pointToFace[pointi]];
+
+                const label celli = cellOrFaceLabels[pointToFace[pointi]];
+
                 sampleElements_[pointi] = celli;
                 samplePoints_[pointi] = pt;
             }
@@ -511,7 +392,9 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
             forAll(points(), pointi)
             {
                 const point& pt = points()[pointi];
-                label facei = cellOrFaceLabels[pointToFace[pointi]];
+
+                const label facei = cellOrFaceLabels[pointToFace[pointi]];
+
                 sampleElements_[pointi] = facei;
                 samplePoints_[pointi] = mesh().faces()[facei].nearestPoint
                 (
@@ -591,7 +474,7 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher)
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh
+Foam::sampledMeshedSurface::sampledMeshedSurface
 (
     const word& name,
     const polyMesh& mesh,
@@ -617,7 +500,7 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh
 {}
 
 
-Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh
+Foam::sampledMeshedSurface::sampledMeshedSurface
 (
     const word& name,
     const polyMesh& mesh,
@@ -628,7 +511,7 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh
     MeshStorage(),
     surfaceName_
     (
-        triSurface::findFile
+        meshedSurface::findFile
         (
             selectReadIO(dict.get<word>("surface"), mesh.time()),
             dict
@@ -651,13 +534,13 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-bool Foam::sampledTriSurfaceMesh::needsUpdate() const
+bool Foam::sampledMeshedSurface::needsUpdate() const
 {
     return needsUpdate_;
 }
 
 
-bool Foam::sampledTriSurfaceMesh::expire()
+bool Foam::sampledMeshedSurface::expire()
 {
     // already marked as expired
     if (needsUpdate_)
@@ -678,7 +561,7 @@ bool Foam::sampledTriSurfaceMesh::expire()
 }
 
 
-bool Foam::sampledTriSurfaceMesh::update()
+bool Foam::sampledMeshedSurface::update()
 {
     if (!needsUpdate_)
     {
@@ -724,7 +607,7 @@ bool Foam::sampledTriSurfaceMesh::update()
 }
 
 
-bool Foam::sampledTriSurfaceMesh::update(const treeBoundBox& bb)
+bool Foam::sampledMeshedSurface::update(const treeBoundBox& bb)
 {
     if (!needsUpdate_)
     {
@@ -738,7 +621,7 @@ bool Foam::sampledTriSurfaceMesh::update(const treeBoundBox& bb)
 }
 
 
-Foam::tmp<Foam::scalarField> Foam::sampledTriSurfaceMesh::sample
+Foam::tmp<Foam::scalarField> Foam::sampledMeshedSurface::sample
 (
     const interpolation<scalar>& sampler
 ) const
@@ -747,7 +630,7 @@ Foam::tmp<Foam::scalarField> Foam::sampledTriSurfaceMesh::sample
 }
 
 
-Foam::tmp<Foam::vectorField> Foam::sampledTriSurfaceMesh::sample
+Foam::tmp<Foam::vectorField> Foam::sampledMeshedSurface::sample
 (
     const interpolation<vector>& sampler
 ) const
@@ -756,7 +639,7 @@ Foam::tmp<Foam::vectorField> Foam::sampledTriSurfaceMesh::sample
 }
 
 
-Foam::tmp<Foam::sphericalTensorField> Foam::sampledTriSurfaceMesh::sample
+Foam::tmp<Foam::sphericalTensorField> Foam::sampledMeshedSurface::sample
 (
     const interpolation<sphericalTensor>& sampler
 ) const
@@ -765,7 +648,7 @@ Foam::tmp<Foam::sphericalTensorField> Foam::sampledTriSurfaceMesh::sample
 }
 
 
-Foam::tmp<Foam::symmTensorField> Foam::sampledTriSurfaceMesh::sample
+Foam::tmp<Foam::symmTensorField> Foam::sampledMeshedSurface::sample
 (
     const interpolation<symmTensor>& sampler
 ) const
@@ -774,7 +657,7 @@ Foam::tmp<Foam::symmTensorField> Foam::sampledTriSurfaceMesh::sample
 }
 
 
-Foam::tmp<Foam::tensorField> Foam::sampledTriSurfaceMesh::sample
+Foam::tmp<Foam::tensorField> Foam::sampledMeshedSurface::sample
 (
     const interpolation<tensor>& sampler
 ) const
@@ -783,7 +666,7 @@ Foam::tmp<Foam::tensorField> Foam::sampledTriSurfaceMesh::sample
 }
 
 
-Foam::tmp<Foam::scalarField> Foam::sampledTriSurfaceMesh::interpolate
+Foam::tmp<Foam::scalarField> Foam::sampledMeshedSurface::interpolate
 (
     const interpolation<scalar>& interpolator
 ) const
@@ -792,7 +675,7 @@ Foam::tmp<Foam::scalarField> Foam::sampledTriSurfaceMesh::interpolate
 }
 
 
-Foam::tmp<Foam::vectorField> Foam::sampledTriSurfaceMesh::interpolate
+Foam::tmp<Foam::vectorField> Foam::sampledMeshedSurface::interpolate
 (
     const interpolation<vector>& interpolator
 ) const
@@ -800,7 +683,7 @@ Foam::tmp<Foam::vectorField> Foam::sampledTriSurfaceMesh::interpolate
     return sampleOnPoints(interpolator);
 }
 
-Foam::tmp<Foam::sphericalTensorField> Foam::sampledTriSurfaceMesh::interpolate
+Foam::tmp<Foam::sphericalTensorField> Foam::sampledMeshedSurface::interpolate
 (
     const interpolation<sphericalTensor>& interpolator
 ) const
@@ -809,7 +692,7 @@ Foam::tmp<Foam::sphericalTensorField> Foam::sampledTriSurfaceMesh::interpolate
 }
 
 
-Foam::tmp<Foam::symmTensorField> Foam::sampledTriSurfaceMesh::interpolate
+Foam::tmp<Foam::symmTensorField> Foam::sampledMeshedSurface::interpolate
 (
     const interpolation<symmTensor>& interpolator
 ) const
@@ -818,7 +701,7 @@ Foam::tmp<Foam::symmTensorField> Foam::sampledTriSurfaceMesh::interpolate
 }
 
 
-Foam::tmp<Foam::tensorField> Foam::sampledTriSurfaceMesh::interpolate
+Foam::tmp<Foam::tensorField> Foam::sampledMeshedSurface::interpolate
 (
     const interpolation<tensor>& interpolator
 ) const
@@ -827,9 +710,9 @@ Foam::tmp<Foam::tensorField> Foam::sampledTriSurfaceMesh::interpolate
 }
 
 
-void Foam::sampledTriSurfaceMesh::print(Ostream& os) const
+void Foam::sampledMeshedSurface::print(Ostream& os) const
 {
-    os  << "sampledTriSurfaceMesh: " << name() << " :"
+    os  << "meshedSurface: " << name() << " :"
         << " surface:" << surfaceName_
         << " faces:"   << faces().size()
         << " points:"  << points().size()
diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H
similarity index 91%
rename from src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H
rename to src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H
index 47290a690dd..a6ab32d799f 100644
--- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H
+++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H
@@ -25,11 +25,11 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::sampledTriSurfaceMesh
+    Foam::sampledMeshedSurface
 
 Description
     A sampledSurface from a meshed surface.
-    It samples on the points/faces of the triSurface.
+    It samples on the points/faces of the meshed surface.
 
     - it either samples cells or (non-coupled) boundary faces
 
@@ -69,36 +69,35 @@ Usage
     Example of function object partial specification:
     \verbatim
     surfaces
-    (
+    {
         surface1
         {
-            type    sampledTriSurfaceMesh;
+            type    meshedSurface;
             surface something.obj;
             source  cells;
         }
-    );
+    }
     \endverbatim
 
     Where the sub-entries comprise:
     \table
         Property | Description                             | Required | Default
-        type     | sampledTriSurfaceMesh                   | yes      |
+        type     | meshedSurface                           | yes      |
         surface  | surface name in triSurface/             | yes      |
         source   | cells/insideCells/boundaryFaces         | yes      |
         keepIds  | pass through id numbering               | no       | false
     \endtable
 
 SourceFiles
-    sampledTriSurfaceMesh.C
-    sampledTriSurfaceMeshTemplates.C
+    sampledMeshedSurface.C
+    sampledMeshedSurfaceTemplates.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef sampledTriSurfaceMesh_H
-#define sampledTriSurfaceMesh_H
+#ifndef sampledMeshedSurface_H
+#define sampledMeshedSurface_H
 
 #include "sampledSurface.H"
-#include "triSurface.H"
 #include "MeshedSurface.H"
 #include "MeshedSurfacesFwd.H"
 
@@ -107,14 +106,14 @@ SourceFiles
 namespace Foam
 {
 
-class treeDataFace;
+// Forward Declarations
 class meshSearch;
 
 /*---------------------------------------------------------------------------*\
-                       Class sampledTriSurfaceMesh Declaration
+                       Class sampledMeshedSurface Declaration
 \*---------------------------------------------------------------------------*/
 
-class sampledTriSurfaceMesh
+class sampledMeshedSurface
 :
     public sampledSurface,
     public meshedSurface
@@ -134,7 +133,7 @@ private:
         typedef meshedSurface MeshStorage;
 
 
-    // Private data
+    // Private Data
 
         static const Enum<samplingSource> samplingSourceNames_;
 
@@ -142,7 +141,7 @@ private:
         word surfaceName_;
 
         //- Surface to sample on
-        const triSurface surface_;
+        const meshedSurface surface_;
 
         //- Whether to sample internal cell values or boundary values
         const samplingSource sampleSource_;
@@ -169,6 +168,9 @@ private:
 
     // Private Member Functions
 
+        //- Set zoneIds list based on the surfZone information
+        void setZoneMap();
+
         //- Sample volume field onto surface faces
         template<class Type>
         tmp<Field<Type>> sampleOnFaces
@@ -187,14 +189,14 @@ private:
 
 public:
 
-    //- Runtime type information
-    TypeName("sampledTriSurfaceMesh");
+    //- Declare type-name, virtual type (with debug switch)
+    TypeName("sampledMeshedSurface");
 
 
     // Constructors
 
         //- Construct from components
-        sampledTriSurfaceMesh
+        sampledMeshedSurface
         (
             const word& name,
             const polyMesh& mesh,
@@ -203,7 +205,7 @@ public:
         );
 
         //- Construct from dictionary
-        sampledTriSurfaceMesh
+        sampledMeshedSurface
         (
             const word& name,
             const polyMesh& mesh,
@@ -212,19 +214,11 @@ public:
 
 
     //- Destructor
-    virtual ~sampledTriSurfaceMesh() = default;
+    virtual ~sampledMeshedSurface() = default;
 
 
     // Member Functions
 
-        //- Set new zoneIds list based on the surfZoneList information
-        static void setZoneMap
-        (
-            const surfZoneList& zoneLst,
-            labelList& zoneIds
-        );
-
-
         //- Does the surface need an update?
         virtual bool needsUpdate() const;
 
@@ -378,7 +372,7 @@ public:
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #ifdef NoRepository
-    #include "sampledTriSurfaceMeshTemplates.C"
+    #include "sampledMeshedSurfaceTemplates.C"
 #endif
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.C b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.C
similarity index 74%
rename from src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.C
rename to src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.C
index af263f509b8..d5e0f9341d4 100644
--- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.C
+++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.C
@@ -25,26 +25,36 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "sampledTriSurfaceMeshNormal.H"
+#include "sampledMeshedSurfaceNormal.H"
 #include "addToRunTimeSelectionTable.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
 {
-    defineTypeNameAndDebug(sampledTriSurfaceMeshNormal, 0);
-    addToRunTimeSelectionTable
+    defineTypeNameAndDebug(sampledMeshedSurfaceNormal, 0);
+    // Use shorter name only
+    addNamedToRunTimeSelectionTable
     (
         sampledSurface,
-        sampledTriSurfaceMeshNormal,
-        word
+        sampledMeshedSurfaceNormal,
+        word,
+        meshedSurfaceNormal
+    );
+    // Compatibility name (1912)
+    addNamedToRunTimeSelectionTable
+    (
+        sampledSurface,
+        sampledMeshedSurfaceNormal,
+        word,
+        sampledTriSurfaceMeshNormal
     );
 }
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::sampledTriSurfaceMeshNormal::sampledTriSurfaceMeshNormal
+Foam::sampledMeshedSurfaceNormal::sampledMeshedSurfaceNormal
 (
     const word& name,
     const polyMesh& mesh,
@@ -52,25 +62,25 @@ Foam::sampledTriSurfaceMeshNormal::sampledTriSurfaceMeshNormal
     const samplingSource sampleSource
 )
 :
-    sampledTriSurfaceMesh(name, mesh, surfaceName, sampleSource)
+    sampledMeshedSurface(name, mesh, surfaceName, sampleSource)
 {}
 
 
-Foam::sampledTriSurfaceMeshNormal::sampledTriSurfaceMeshNormal
+Foam::sampledMeshedSurfaceNormal::sampledMeshedSurfaceNormal
 (
     const word& name,
     const polyMesh& mesh,
     const dictionary& dict
 )
 :
-    sampledTriSurfaceMesh(name, mesh, dict)
+    sampledMeshedSurface(name, mesh, dict)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 Foam::tmp<Foam::Field<Foam::vector>>
-Foam::sampledTriSurfaceMeshNormal::sample
+Foam::sampledMeshedSurfaceNormal::sample
 (
     const interpolation<vector>& sampler
 ) const
@@ -81,7 +91,7 @@ Foam::sampledTriSurfaceMeshNormal::sample
     (
         0,
         meshedSurface::faceNormals()
-       &sampledTriSurfaceMesh::sample(sampler)
+       &sampledMeshedSurface::sample(sampler)
     );
 
     return tvalues;
@@ -89,7 +99,7 @@ Foam::sampledTriSurfaceMeshNormal::sample
 
 
 Foam::tmp<Foam::Field<Foam::vector>>
-Foam::sampledTriSurfaceMeshNormal::interpolate
+Foam::sampledMeshedSurfaceNormal::interpolate
 (
     const interpolation<vector>& interpolator
 ) const
@@ -103,7 +113,7 @@ Foam::sampledTriSurfaceMeshNormal::interpolate
     (
         0,
         allNormals
-       &sampledTriSurfaceMesh::interpolate(interpolator)
+       &sampledMeshedSurface::interpolate(interpolator)
     );
 
     return tvalues;
diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.H b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H
similarity index 87%
rename from src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.H
rename to src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H
index c96407dd3e6..7b595d64611 100644
--- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshNormal.H
+++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H
@@ -24,10 +24,10 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::sampledTriSurfaceMeshNormal
+    Foam::sampledMeshedSurfaceNormal
 
 Description
-    Variant of sampledTriSurfaceMesh that samples the surface-normal component
+    Variant of sampledMeshedSurface that samples the surface-normal component
     of a vector field.
 
     Returns a vector field with the value in the first component and sets
@@ -39,38 +39,38 @@ Usage
     Example of function object partial specification:
     \verbatim
     surfaces
-    (
+    {
         surface1
         {
-            type    sampledTriSurfaceMeshNormal;
+            type    sampledMeshedSurfaceNormal;
             surface something.obj;
             source  cells;
         }
-    );
+    }
     \endverbatim
 
     Where the sub-entries comprise:
     \table
         Property | Description                             | Required | Default
-        type     | sampledTriSurfaceMeshNormal             | yes      |
+        type     | meshedSurfaceNormal                     | yes      |
         surface  | surface name in triSurface/             | yes      |
         source   | cells/insideCells/boundaryFaces         | yes      |
         keepIds  | pass through id numbering               | no       | false
     \endtable
 
 SeeAlso
-    Foam::sampledTriSurfaceMesh
+    Foam::sampledMeshedSurface
 
 SourceFiles
-    sampledTriSurfaceMeshNormal.C
-    sampledTriSurfaceMeshNormalTemplates.C
+    sampledMeshedSurfaceNormal.C
+    sampledMeshedSurfaceNormalTemplates.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef sampledTriSurfaceMeshNormal_H
-#define sampledTriSurfaceMeshNormal_H
+#ifndef sampledMeshedSurfaceNormal_H
+#define sampledMeshedSurfaceNormal_H
 
-#include "sampledTriSurfaceMesh.H"
+#include "sampledMeshedSurface.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -78,23 +78,23 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class sampledTriSurfaceMeshNormal Declaration
+                 Class sampledMeshedSurfaceNormal Declaration
 \*---------------------------------------------------------------------------*/
 
-class sampledTriSurfaceMeshNormal
+class sampledMeshedSurfaceNormal
 :
-    public sampledTriSurfaceMesh
+    public sampledMeshedSurface
 {
 public:
 
     //- Runtime type information
-    TypeName("sampledTriSurfaceMeshNormal");
+    TypeName("sampledMeshedSurfaceNormal");
 
 
     // Constructors
 
         //- Construct from components
-        sampledTriSurfaceMeshNormal
+        sampledMeshedSurfaceNormal
         (
             const word& name,
             const polyMesh& mesh,
@@ -103,7 +103,7 @@ public:
         );
 
         //- Construct from dictionary
-        sampledTriSurfaceMeshNormal
+        sampledMeshedSurfaceNormal
         (
             const word& name,
             const polyMesh& mesh,
@@ -112,7 +112,7 @@ public:
 
 
     //- Destructor
-    virtual ~sampledTriSurfaceMeshNormal() = default;
+    virtual ~sampledMeshedSurfaceNormal() = default;
 
 
     // Member Functions
diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshTemplates.C b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceTemplates.C
similarity index 95%
rename from src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshTemplates.C
rename to src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceTemplates.C
index 67dbf0a0b52..dd8cd7c2592 100644
--- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMeshTemplates.C
+++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceTemplates.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2016-2018 OpenCFD Ltd.
+    Copyright (C) 2016-2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -26,13 +26,13 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "sampledTriSurfaceMesh.H"
+#include "sampledMeshedSurface.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 template<class Type>
 Foam::tmp<Foam::Field<Type>>
-Foam::sampledTriSurfaceMesh::sampleOnFaces
+Foam::sampledMeshedSurface::sampleOnFaces
 (
     const interpolation<Type>& sampler
 ) const
@@ -95,7 +95,7 @@ Foam::sampledTriSurfaceMesh::sampleOnFaces
 
 template<class Type>
 Foam::tmp<Foam::Field<Type>>
-Foam::sampledTriSurfaceMesh::sampleOnPoints
+Foam::sampledMeshedSurface::sampleOnPoints
 (
     const interpolation<Type>& interpolator
 ) const
diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
index d6b4a7b74b6..a5dd2fe7a5f 100644
--- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
+++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2015-2019 OpenCFD Ltd.
+    Copyright (C) 2015-2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -72,7 +72,7 @@ Description
         (
             f0surf
             {
-                type        sampledTriSurfaceMesh;
+                type        meshedSurface;
                 surface     f0surf.obj;
                 source      cells;
 
diff --git a/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer
index dbc7fa61561..ff827d803c5 100644
--- a/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer
+++ b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer
@@ -23,7 +23,7 @@ sampled
 
     _sampleMesh
     {
-        type    sampledTriSurfaceMesh;
+        type    meshedSurface;
         source  cells;
         store   true;
     }
diff --git a/tutorials/incompressible/simpleFoam/squareBend/system/sampling b/tutorials/incompressible/simpleFoam/squareBend/system/sampling
index 36e9166391f..696cea14d6e 100644
--- a/tutorials/incompressible/simpleFoam/squareBend/system/sampling
+++ b/tutorials/incompressible/simpleFoam/squareBend/system/sampling
@@ -1,7 +1,7 @@
 /*--------------------------------*- C++ -*----------------------------------*\
 | =========                 |                                                 |
 | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  v1912                                 |
+|  \\    /   O peration     | Version:  v2006                                 |
 |   \\  /    A nd           | Website:  www.openfoam.com                      |
 |    \\/     M anipulation  |                                                 |
 \*---------------------------------------------------------------------------*/
@@ -168,7 +168,7 @@ nonWeightedAreaAverage
     name            sampledTriSurf;
     sampledSurfaceDict
     {
-        type        sampledTriSurfaceMesh;
+        type        meshedSurface;
         surface     angledPlane.obj;
         source      insideCells;
         interpolate true;
-- 
GitLab