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