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