From 418f40bf0a5c84a05c239754db14d76036b84f62 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 28 Feb 2018 11:23:59 +0100
Subject: [PATCH] BUG: faceOnlySet sampling does not stop at 'end' (closes
 #745)

---
 src/sampling/sampledSet/face/faceOnlySet.C    |  7 ++-
 .../damBreak/damBreak/system/controlDict      |  1 +
 .../laminar/damBreak/damBreak/system/sampling | 54 +++++++++++++++++++
 3 files changed, 60 insertions(+), 2 deletions(-)
 create mode 100644 tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/sampling

diff --git a/src/sampling/sampledSet/face/faceOnlySet.C b/src/sampling/sampledSet/face/faceOnlySet.C
index ba351d2237e..bf1793d9444 100644
--- a/src/sampling/sampledSet/face/faceOnlySet.C
+++ b/src/sampling/sampledSet/face/faceOnlySet.C
@@ -54,6 +54,8 @@ bool Foam::faceOnlySet::trackToBoundary
     DynamicList<scalar>& samplingCurveDist
 ) const
 {
+    const vector offset = (end_ - start_);
+
     particle::trackingData td(particleCloud);
 
     point trackPt = singleParticle.position();
@@ -75,9 +77,10 @@ bool Foam::faceOnlySet::trackToBoundary
             samplingCurveDist.append(mag(trackPt - start_));
         }
 
-        if (mag(trackPt - end_) < smallDist)
+        if (-smallDist < ((trackPt - end_) & offset))
         {
-            // End reached
+            // Projected onto sampling vector
+            // - done when we are near or past the end of the sampling vector
             return false;
         }
         else if (singleParticle.onBoundaryFace())
diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
index e306a5ca5c9..06168ee7c29 100644
--- a/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
@@ -52,5 +52,6 @@ maxAlphaCo      1;
 
 maxDeltaT       1;
 
+#includeIfPresent "sampling"
 
 // ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/sampling b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/sampling
new file mode 100644
index 00000000000..7ea90283925
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/sampling
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      sampling;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+functions
+{
+    sampleSets
+    {
+        type    sets;
+        libs    ("libsampling.so");
+
+        writeControl  timeStep;
+        writeInterval 1;
+
+        setFormat           vtk;
+        interpolationScheme cellPointFace;
+        fields ( alpha.water );
+
+        sets
+        (
+            gauge_1
+            {
+                type    face;
+                axis    y;
+                start   (0.02 0.20 0.005);
+                end     (0.02 0.25 0.005);
+                nPoints 100;
+            }
+
+            gauge_2
+            {
+                type    face;
+                axis    y;
+                start   (0.2 0.03 0.005);
+                end     (0.2 0.55 0.005);
+                nPoints 100;
+            }
+        );
+    }
+}
+
+// ************************************************************************* //
-- 
GitLab