From af60a986811332e80c56ef7f4e6eda0572bedcd6 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Mon, 21 Mar 2011 14:57:32 +0000
Subject: [PATCH] BUG: searchableCylinder: point on centreline incorrect
 nearest

---
 .../searchableSurface/searchableCylinder.C    | 21 +++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/meshTools/searchableSurface/searchableCylinder.C b/src/meshTools/searchableSurface/searchableCylinder.C
index 3569fd17acc..d8fef7917a1 100644
--- a/src/meshTools/searchableSurface/searchableCylinder.C
+++ b/src/meshTools/searchableSurface/searchableCylinder.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -91,7 +91,24 @@ Foam::pointIndexHit Foam::searchableCylinder::findNearest
         // distance to cylinder wall: magV-radius_
 
         // Nearest cylinder point
-        point cylPt = sample + (radius_-magV)*v;
+        point cylPt;
+        if (magV < ROOTVSMALL)
+        {
+            // Point exactly on centre line. Take any point on wall.
+            vector e1 = point(1,0,0) ^ unitDir_;
+            scalar magE1 = mag(e1);
+            if (magE1 < SMALL)
+            {
+                e1 = point(0,1,0) ^ unitDir_;
+                magE1 = mag(e1);
+            }
+            e1 /= magE1;
+            cylPt = sample + radius_*e1;
+        }
+        else
+        {
+            cylPt = sample + (radius_-magV)*v;
+        }
 
         if (parallel < 0.5*magDir_)
         {
-- 
GitLab