diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index 6f32be6249dd62f9d6d20d9da49f292b4f25beea..10665357dc938546ec4164d80e69c0de086024ce 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 045668a88a2c18fc4edbc5b722cea7ff53011054..e72923933438ca38cd5bdb42769f3e3051c260cc 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 49165f61538363b9ebc108c230fd9c8a9200fc5e..a79074eb986aff4b6bb8b269a23952ce55c66d00 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 e57380d7a60be4e06a5c7fb91a981c2e8e0a4e85..90eddbe0d9e616794d0eff184ed080fd6bd2f55d 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; };