From d41ab9d202db1d29b0c32932065dc6896d681173 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Tue, 28 Jan 2014 15:09:51 +0100
Subject: [PATCH] [MGT] Replace iterative search with explicit solution.

---
 MeshGeoToolsLib/HeuristicSearchLength.cpp | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/MeshGeoToolsLib/HeuristicSearchLength.cpp b/MeshGeoToolsLib/HeuristicSearchLength.cpp
index d023236747c..7913057c951 100644
--- a/MeshGeoToolsLib/HeuristicSearchLength.cpp
+++ b/MeshGeoToolsLib/HeuristicSearchLength.cpp
@@ -48,15 +48,11 @@ HeuristicSearchLength::HeuristicSearchLength(MeshLib::Mesh const& mesh)
 	// happen due to numerics).
 	_search_length = mean/2;
 
-	if (variance > 0.0) {
-		const double std_deviation (sqrt(variance));
-		// heuristic to prevent negative search lengths
-		// in the case of a big standard deviation
-		double c(2.0);
-		while (mean < c * std_deviation) {
-			c *= 0.9;
-		}
-		_search_length = (mean - c * std_deviation)/2;
+	if (variance > 0) {
+		if (variance < mean*mean/4)
+			_search_length -= std::sqrt(variance);
+		else
+			_search_length = std::numeric_limits<double>::epsilon();
 	}
 
 	DBUG("[MeshNodeSearcher::MeshNodeSearcher] Calculated search length for mesh \"%s\" is %f.",
-- 
GitLab