From 631329c0c059d6a6904b79d89f8cfbb96adc98d8 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Wed, 21 Sep 2016 09:29:00 +0200 Subject: [PATCH] [PL] enable axisymmetric BC creation --- ProcessLib/BoundaryCondition/BoundaryCondition.cpp | 10 ++++++---- .../GenericNaturalBoundaryCondition-impl.h | 9 +++++---- .../GenericNaturalBoundaryCondition.h | 7 ++++--- .../BoundaryCondition/NeumannBoundaryCondition.cpp | 13 ++++++------- .../BoundaryCondition/NeumannBoundaryCondition.h | 7 +++---- .../BoundaryCondition/RobinBoundaryCondition.cpp | 13 ++++++------- .../BoundaryCondition/RobinBoundaryCondition.h | 4 ++-- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index 311377ea6df..fbe44992065 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp @@ -85,15 +85,17 @@ std::unique_ptr<BoundaryCondition> BoundaryConditionBuilder::createBoundaryCondi return createNeumannBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), - dof_table, variable_id, config.component_id, integration_order, - mesh.getDimension(), parameters); + dof_table, variable_id, config.component_id, + mesh.isAxiallySymmetric(), integration_order, mesh.getDimension(), + parameters); } else if (type == "Robin") { return createRobinBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), - dof_table, variable_id, config.component_id, integration_order, - mesh.getDimension(), parameters); + dof_table, variable_id, config.component_id, + mesh.isAxiallySymmetric(), integration_order, mesh.getDimension(), + parameters); } else { diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h index cc81024ed1f..515b653b859 100644 --- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h +++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h @@ -24,11 +24,12 @@ GenericNaturalBoundaryCondition<BoundaryConditionData, typename std::enable_if< std::is_same<typename std::decay<BoundaryConditionData>::type, typename std::decay<Data>::type>::value, - unsigned const>::type integration_order, + bool>::type is_axially_symmetric, + unsigned const integration_order, NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id, int const component_id, - unsigned const global_dim, - std::vector<MeshLib::Element*>&& elements, Data&& data) + unsigned const global_dim, std::vector<MeshLib::Element*>&& elements, + Data&& data) : _data(std::forward<Data>(data)), _elements(std::move(elements)), _integration_order(integration_order) @@ -55,7 +56,7 @@ GenericNaturalBoundaryCondition<BoundaryConditionData, createLocalAssemblers<LocalAssemblerImplementation>( global_dim, _elements, *_dof_table_boundary, _local_assemblers, - false /* TODO */, _integration_order, _data); + is_axially_symmetric, _integration_order, _data); } template <typename BoundaryConditionData, diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h index f40fc809009..5edcf191a73 100644 --- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h +++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h @@ -31,11 +31,12 @@ public: typename std::enable_if< std::is_same<typename std::decay<BoundaryConditionData>::type, typename std::decay<Data>::type>::value, - unsigned const>::type integration_order, + bool>::type is_axially_symmetric, + unsigned const integration_order, NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id, int const component_id, - unsigned const global_dim, - std::vector<MeshLib::Element*>&& elements, Data&& data); + unsigned const global_dim, std::vector<MeshLib::Element*>&& elements, + Data&& data); ~GenericNaturalBoundaryCondition() override; diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp index 448ef07b535..79601405d89 100644 --- a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp @@ -12,13 +12,12 @@ namespace ProcessLib { -std::unique_ptr<NeumannBoundaryCondition> -createNeumannBoundaryCondition( +std::unique_ptr<NeumannBoundaryCondition> createNeumannBoundaryCondition( BaseLib::ConfigTree const& config, std::vector<MeshLib::Element*>&& elements, NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id, - int const component_id, unsigned const integration_order, - unsigned const global_dim, + int const component_id, bool is_axially_symmetric, + unsigned const integration_order, unsigned const global_dim, std::vector<std::unique_ptr<ParameterBase>> const& parameters) { DBUG("Constructing Neumann BC from config."); @@ -32,9 +31,9 @@ createNeumannBoundaryCondition( auto const& param = findParameter<double>(param_name, parameters, 1); return std::unique_ptr<NeumannBoundaryCondition>( - new NeumannBoundaryCondition( - integration_order, dof_table, variable_id, component_id, - global_dim, std::move(elements), param)); + new NeumannBoundaryCondition(is_axially_symmetric, integration_order, + dof_table, variable_id, component_id, + global_dim, std::move(elements), param)); } } // ProcessLib diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h index 53713fb255b..0795935b003 100644 --- a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h +++ b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h @@ -19,13 +19,12 @@ namespace ProcessLib using NeumannBoundaryCondition = GenericNaturalBoundaryCondition< Parameter<double> const&, NeumannBoundaryConditionLocalAssembler>; -std::unique_ptr<NeumannBoundaryCondition> -createNeumannBoundaryCondition( +std::unique_ptr<NeumannBoundaryCondition> createNeumannBoundaryCondition( BaseLib::ConfigTree const& config, std::vector<MeshLib::Element*>&& elements, NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id, - int const component_id, unsigned const integration_order, - unsigned const global_dim, + int const component_id, bool is_axially_symmetric, + unsigned const integration_order, unsigned const global_dim, std::vector<std::unique_ptr<ParameterBase>> const& parameters); } // ProcessLib diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp index df8c74183ae..eab6bc69670 100644 --- a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp @@ -16,8 +16,8 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition( BaseLib::ConfigTree const& config, std::vector<MeshLib::Element*>&& elements, NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id, - int const component_id, unsigned const integration_order, - unsigned const global_dim, + int const component_id, bool is_axially_symmetric, + unsigned const integration_order, unsigned const global_dim, std::vector<std::unique_ptr<ParameterBase>> const& parameters) { DBUG("Constructing RobinBcConfig from config."); @@ -32,11 +32,10 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition( auto const& alpha = findParameter<double>(alpha_name, parameters, 1); auto const& u_0 = findParameter<double>(u_0_name, parameters, 1); - return std::unique_ptr<RobinBoundaryCondition>( - new RobinBoundaryCondition( - integration_order, dof_table, variable_id, component_id, global_dim, - std::move(elements), - RobinBoundaryConditionData{alpha, u_0})); + return std::unique_ptr<RobinBoundaryCondition>(new RobinBoundaryCondition( + is_axially_symmetric, integration_order, dof_table, variable_id, + component_id, global_dim, std::move(elements), + RobinBoundaryConditionData{alpha, u_0})); } } // ProcessLib diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h index 2b67f531c01..5c9357f5df2 100644 --- a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h +++ b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h @@ -39,8 +39,8 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition( BaseLib::ConfigTree const& config, std::vector<MeshLib::Element*>&& elements, NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id, - int const component_id, unsigned const integration_order, - unsigned const global_dim, + int const component_id, bool is_axially_symmetric, + unsigned const integration_order, unsigned const global_dim, std::vector<std::unique_ptr<ParameterBase>> const& parameters); } // ProcessLib -- GitLab