From 2b1c05a2a5e0b324b03863997b2bdfbd96fdc99e Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Tue, 16 May 2017 09:24:16 +0200
Subject: [PATCH] [MGTL] Make SearchLength calculation configurable.

---
 MeshGeoToolsLib/MeshNodeSearcher.cpp               |  8 +++++---
 MeshGeoToolsLib/MeshNodeSearcher.h                 | 11 +++++++----
 ProcessLib/BoundaryCondition/BoundaryCondition.cpp |  5 ++++-
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/MeshGeoToolsLib/MeshNodeSearcher.cpp b/MeshGeoToolsLib/MeshNodeSearcher.cpp
index bca2ddeba8a..79c8e05396d 100644
--- a/MeshGeoToolsLib/MeshNodeSearcher.cpp
+++ b/MeshGeoToolsLib/MeshNodeSearcher.cpp
@@ -137,8 +137,9 @@ MeshNodesAlongSurface& MeshNodeSearcher::getMeshNodesAlongSurface(GeoLib::Surfac
     return *_mesh_nodes_along_surfaces.back();
 }
 
-MeshNodeSearcher&
-MeshNodeSearcher::getMeshNodeSearcher(MeshLib::Mesh const& mesh)
+MeshNodeSearcher& MeshNodeSearcher::getMeshNodeSearcher(
+    MeshLib::Mesh const& mesh,
+    MeshGeoToolsLib::SearchLength const& search_length_algorithm)
 {
     std::size_t const mesh_id = mesh.getID();
     if (_mesh_node_searchers.size() < mesh_id+1)
@@ -146,7 +147,8 @@ MeshNodeSearcher::getMeshNodeSearcher(MeshLib::Mesh const& mesh)
 
     if (!_mesh_node_searchers[mesh_id])
         _mesh_node_searchers[mesh_id].reset(
-            new MeshGeoToolsLib::MeshNodeSearcher(mesh));
+            new MeshGeoToolsLib::MeshNodeSearcher(mesh,
+                                                  search_length_algorithm));
 
     return *_mesh_node_searchers[mesh_id];
 }
diff --git a/MeshGeoToolsLib/MeshNodeSearcher.h b/MeshGeoToolsLib/MeshNodeSearcher.h
index fdd432e4039..a0093aaca7f 100644
--- a/MeshGeoToolsLib/MeshNodeSearcher.h
+++ b/MeshGeoToolsLib/MeshNodeSearcher.h
@@ -59,9 +59,9 @@ public:
      * @param search_all_nodes switch between searching all mesh nodes and
      * searching the base nodes.
      */
-    explicit MeshNodeSearcher(MeshLib::Mesh const& mesh,
-        MeshGeoToolsLib::SearchLength const& search_length_algorithm
-            = MeshGeoToolsLib::SearchLength(),
+    MeshNodeSearcher(
+        MeshLib::Mesh const& mesh,
+        MeshGeoToolsLib::SearchLength const& search_length_algorithm,
         bool search_all_nodes = true);
 
     virtual ~MeshNodeSearcher();
@@ -133,7 +133,10 @@ public:
      * Returns a (possibly new) mesh node searcher for the mesh.
      * A new one will be created, if it does not already exists.
      */
-    static MeshNodeSearcher& getMeshNodeSearcher(MeshLib::Mesh const& mesh);
+    static MeshNodeSearcher& getMeshNodeSearcher(
+        MeshLib::Mesh const& mesh,
+        MeshGeoToolsLib::SearchLength const& search_length_algorithm =
+            MeshGeoToolsLib::SearchLength());
 
 private:
     MeshLib::Mesh const& _mesh;
diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
index f239698e7c9..99caf1eed1f 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
@@ -25,8 +25,11 @@ std::unique_ptr<BoundaryCondition> BoundaryConditionBuilder::createBoundaryCondi
     const unsigned shapefunction_order,
     const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
+    MeshGeoToolsLib::SearchLength search_length_algorithm;
+
     MeshGeoToolsLib::MeshNodeSearcher& mesh_node_searcher =
-        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(mesh);
+        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
+            mesh, search_length_algorithm);
 
     MeshGeoToolsLib::BoundaryElementsSearcher boundary_element_searcher(
         mesh, mesh_node_searcher);
-- 
GitLab