From b55e7ad809684eb1af3263af9e082e442e88e305 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Tue, 16 May 2017 14:59:38 +0200
Subject: [PATCH] [PL/BC] Move creation of searchers to createBCs methods.

Need this as a preparation to have several searchers for different boundary conditions.
---
 .../BoundaryCondition/BoundaryCondition.cpp   | 56 ++++++++++---------
 .../BoundaryCondition/BoundaryCondition.h     | 19 +++----
 .../BoundaryConditionBuilder.cpp              | 16 +++++-
 .../BoundaryConditionBuilder.h                |  5 +-
 4 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
index 6f32be6249d..10665357dc9 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
@@ -10,6 +10,7 @@
 #include "BoundaryCondition.h"
 #include "MeshGeoToolsLib/BoundaryElementsSearcher.h"
 #include "MeshGeoToolsLib/MeshNodeSearcher.h"
+#include "MeshGeoToolsLib/SearchLength.h"
 #include "BoundaryConditionConfig.h"
 #include "DirichletBoundaryCondition.h"
 #include "NeumannBoundaryCondition.h"
@@ -17,23 +18,14 @@
 
 namespace ProcessLib
 {
-
-std::unique_ptr<BoundaryCondition> BoundaryConditionBuilder::createBoundaryCondition(
+std::unique_ptr<BoundaryCondition>
+BoundaryConditionBuilder::createBoundaryCondition(
     const BoundaryConditionConfig& config,
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned integration_order,
     const unsigned shapefunction_order,
     const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
-    MeshGeoToolsLib::SearchLength search_length_algorithm;
-
-    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher =
-        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
-            mesh, std::move(search_length_algorithm));
-
-    MeshGeoToolsLib::BoundaryElementsSearcher boundary_element_searcher(
-        mesh, mesh_node_searcher);
-
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
     auto const type = config.config.peekConfigParameter<std::string>("type");
 
@@ -41,22 +33,19 @@ std::unique_ptr<BoundaryCondition> BoundaryConditionBuilder::createBoundaryCondi
     {
         return createDirichletBoundaryCondition(
                     config, dof_table, mesh, variable_id,
-                    integration_order, shapefunction_order, parameters,
-                    mesh_node_searcher, boundary_element_searcher);
+                    integration_order, shapefunction_order, parameters);
     }
     else if (type == "Neumann")
     {
         return createNeumannBoundaryCondition(
                     config, dof_table, mesh, variable_id,
-                    integration_order, shapefunction_order, parameters,
-                    mesh_node_searcher, boundary_element_searcher);
+                    integration_order, shapefunction_order, parameters);
     }
     else if (type == "Robin")
     {
         return createRobinBoundaryCondition(
                     config, dof_table, mesh, variable_id,
-                    integration_order, shapefunction_order, parameters,
-                    mesh_node_searcher, boundary_element_searcher);
+                    integration_order, shapefunction_order, parameters);
     }
     else
     {
@@ -70,10 +59,13 @@ BoundaryConditionBuilder::createDirichletBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned /*integration_order*/,
     const unsigned /*shapefunction_order*/,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
-    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher,
-    MeshGeoToolsLib::BoundaryElementsSearcher& /*boundary_element_searcher*/)
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
+    MeshGeoToolsLib::SearchLength search_length_algorithm;
+    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher =
+        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
+            mesh, std::move(search_length_algorithm));
+
     // Find nodes' ids on the given mesh on which this boundary condition
     // is defined.
     std::vector<std::size_t> ids =
@@ -119,10 +111,16 @@ BoundaryConditionBuilder::createNeumannBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned integration_order,
     const unsigned shapefunction_order,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
-    MeshGeoToolsLib::MeshNodeSearcher const& /*mesh_node_searcher*/,
-    MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher)
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
+    MeshGeoToolsLib::SearchLength search_length_algorithm;
+    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher =
+        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
+            mesh, std::move(search_length_algorithm));
+
+    MeshGeoToolsLib::BoundaryElementsSearcher boundary_element_searcher(
+        mesh, mesh_node_searcher);
+
     return ProcessLib::createNeumannBoundaryCondition(
         config.config,
         getClonedElements(boundary_element_searcher, config.geometry),
@@ -137,10 +135,16 @@ BoundaryConditionBuilder::createRobinBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned integration_order,
     const unsigned shapefunction_order,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
-    MeshGeoToolsLib::MeshNodeSearcher const& /*mesh_node_searcher*/,
-    MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher)
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
+    MeshGeoToolsLib::SearchLength search_length_algorithm;
+    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher =
+        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
+            mesh, std::move(search_length_algorithm));
+
+    MeshGeoToolsLib::BoundaryElementsSearcher boundary_element_searcher(
+        mesh, mesh_node_searcher);
+
     return ProcessLib::createRobinBoundaryCondition(
         config.config,
         getClonedElements(boundary_element_searcher, config.geometry),
diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.h b/ProcessLib/BoundaryCondition/BoundaryCondition.h
index 045668a88a2..e7292393343 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.h
@@ -24,6 +24,7 @@ class Mesh;
 
 namespace MeshGeoToolsLib
 {
+class SearchLength;
 class MeshNodeSearcher;
 class BoundaryElementsSearcher;
 }
@@ -73,10 +74,12 @@ public:
 
     virtual std::unique_ptr<BoundaryCondition> createBoundaryCondition(
         const BoundaryConditionConfig& config,
-        const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
+        const NumLib::LocalToGlobalIndexMap& dof_table,
+        const MeshLib::Mesh& mesh,
         const int variable_id, const unsigned integration_order,
         const unsigned shapefunction_order,
-        const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters);
+        const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>&
+            parameters);
 
 protected:
     virtual std::unique_ptr<BoundaryCondition> createDirichletBoundaryCondition(
@@ -86,9 +89,7 @@ protected:
         const unsigned integration_order,
         const unsigned shapefunction_order,
         const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>&
-            parameters,
-        MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher,
-        MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher);
+            parameters);
 
     virtual std::unique_ptr<BoundaryCondition> createNeumannBoundaryCondition(
         const BoundaryConditionConfig& config,
@@ -96,9 +97,7 @@ protected:
         const MeshLib::Mesh& mesh, const int variable_id,
         const unsigned integration_order, const unsigned shapefunction_order,
         const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>&
-            parameters,
-        MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher,
-        MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher);
+            parameters);
 
     virtual std::unique_ptr<BoundaryCondition> createRobinBoundaryCondition(
         const BoundaryConditionConfig& config,
@@ -106,9 +105,7 @@ protected:
         const MeshLib::Mesh& mesh, const int variable_id,
         const unsigned integration_order, const unsigned shapefunction_order,
         const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>&
-            parameters,
-        MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher,
-        MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher);
+            parameters);
 
     static std::vector<MeshLib::Element*> getClonedElements(
         MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher,
diff --git a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp
index 49165f61538..a79074eb986 100644
--- a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp
+++ b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp
@@ -9,6 +9,10 @@
 
 #include "BoundaryConditionBuilder.h"
 
+#include "MeshGeoToolsLib/SearchLength.h"
+#include "MeshGeoToolsLib/BoundaryElementsSearcher.h"
+#include "MeshGeoToolsLib/MeshNodeSearcher.h"
+
 #include "ProcessLib/BoundaryCondition/BoundaryConditionConfig.h"
 
 #include "NeumannBoundaryCondition.h"
@@ -23,10 +27,16 @@ BoundaryConditionBuilder::createNeumannBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned integration_order,
     const unsigned shapefunction_order,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
-    MeshGeoToolsLib::MeshNodeSearcher const& /*mesh_node_searcher*/,
-    MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher)
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
 {
+    MeshGeoToolsLib::SearchLength search_length_algorithm;
+    MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher =
+        MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(
+            mesh, std::move(search_length_algorithm));
+
+    MeshGeoToolsLib::BoundaryElementsSearcher boundary_element_searcher(
+        mesh, mesh_node_searcher);
+
     return ProcessLib::LIE::createNeumannBoundaryCondition(
         config.config,
         getClonedElements(boundary_element_searcher, config.geometry),
diff --git a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.h b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.h
index e57380d7a60..90eddbe0d9e 100644
--- a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.h
+++ b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.h
@@ -45,10 +45,7 @@ private:
         const MeshLib::Mesh& mesh, const int variable_id,
         const unsigned integration_order, const unsigned shapefunction_order,
         const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>&
-            parameters,
-        MeshGeoToolsLib::MeshNodeSearcher const& mesh_node_searcher,
-        MeshGeoToolsLib::BoundaryElementsSearcher& boundary_element_searcher)
-        override;
+            parameters) override;
 
     FractureProperty const& _fracture_prop;
 };
-- 
GitLab