From 1538606f58791e3158fd2b5a50651484274e9f85 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs@hunt.opencfd.co.uk>
Date: Fri, 7 Nov 2008 11:46:13 +0000
Subject: [PATCH] signed distance

---
 .../distanceSurface/distanceSurface.C         | 36 +++++++++++++++----
 .../distanceSurface/distanceSurface.H         |  3 ++
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
index 66cfac6fb52..fca90949cac 100644
--- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
+++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
@@ -56,13 +56,36 @@ void Foam::distanceSurface::createGeometry() const
             scalarField(mesh().nCells(), GREAT),
             nearest
         );
-        forAll(cellDistance, cellI)
+
+        if (signed_)
         {
-            cellDistance[cellI] = Foam::mag
-            (
-                nearest[cellI].hitPoint()
-              - mesh().cellCentres()[cellI]
-            );
+            vectorField normal;
+            surfPtr_().getNormal(nearest, normal);
+
+            forAll(cellDistance, cellI)
+            {
+                vector d(mesh().cellCentres()[cellI]-nearest[cellI].hitPoint());
+
+                if ((d&normal[cellI]) > 0)
+                {
+                    cellDistance[cellI] = Foam::mag(d);
+                }
+                else
+                {
+                    cellDistance[cellI] = -Foam::mag(d);
+                }
+            }
+        }
+        else
+        {
+            forAll(cellDistance, cellI)
+            {
+                cellDistance[cellI] = Foam::mag
+                (
+                    nearest[cellI].hitPoint()
+                  - mesh().cellCentres()[cellI]
+                );
+            }
         }
     }
 
@@ -166,6 +189,7 @@ Foam::distanceSurface::distanceSurface
         )
     ),
     distance_(readScalar(dict.lookup("distance"))),
+    signed_(readBool(dict.lookup("signed"))),
     regularise_(dict.lookupOrDefault("regularise", true)),
     zoneName_(word::null),
     facesPtr_(NULL),
diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
index bb7290c5d84..82fba8a83f3 100644
--- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
+++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
@@ -62,6 +62,9 @@ class distanceSurface
         //- distance value
         const scalar distance_;
 
+        //- signed distance
+        const bool signed_;
+
         //- Whether to coarsen
         const Switch regularise_;
 
-- 
GitLab