From 09a467fd8b966db2f7350b925bfbd3751623cedd Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Tue, 20 Sep 2016 18:19:25 +0200
Subject: [PATCH] [PL] started axial symmetry

---
 .../GenericNaturalBoundaryCondition-impl.h            |  4 ++--
 .../GenericNaturalBoundaryConditionLocalAssembler.h   |  5 +++--
 .../NeumannBoundaryConditionLocalAssembler.h          |  3 ++-
 .../RobinBoundaryConditionLocalAssembler.h            | 11 ++++++-----
 ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h       |  3 ++-
 ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp |  4 ++--
 ProcessLib/HeatConduction/HeatConductionFEM.h         |  4 +++-
 ProcessLib/HeatConduction/HeatConductionProcess.cpp   |  4 ++--
 ProcessLib/SmallDeformation/SmallDeformationFEM.h     |  2 +-
 ProcessLib/TES/TESLocalAssembler-impl.h               |  3 ++-
 ProcessLib/TES/TESLocalAssembler.h                    |  1 +
 ProcessLib/TES/TESProcess.cpp                         |  4 ++--
 12 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
index 8c0db0201b8..cc81024ed1f 100644
--- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
+++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
@@ -54,8 +54,8 @@ GenericNaturalBoundaryCondition<BoundaryConditionData,
         variable_id, component_id, std::move(all_mesh_subsets), _elements));
 
     createLocalAssemblers<LocalAssemblerImplementation>(
-        global_dim, _elements, *_dof_table_boundary, _integration_order,
-        _local_assemblers, _data);
+        global_dim, _elements, *_dof_table_boundary, _local_assemblers,
+        false /* TODO */, _integration_order, _data);
 }
 
 template <typename BoundaryConditionData,
diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
index bac5f8e35a4..523e55abed4 100644
--- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
@@ -38,11 +38,12 @@ protected:
 
 public:
     GenericNaturalBoundaryConditionLocalAssembler(
-        MeshLib::Element const& e, unsigned const integration_order)
+        MeshLib::Element const& e, bool is_axially_symmetric,
+        unsigned const integration_order)
         : _integration_method(integration_order),
           _shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType,
                                             IntegrationMethod, GlobalDim>(
-              e, _integration_method))
+              e, is_axially_symmetric, _integration_method))
     {
     }
 
diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
index fd9a5d43e9b..94d28e6c3c2 100644
--- a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
@@ -31,9 +31,10 @@ public:
     NeumannBoundaryConditionLocalAssembler(
         MeshLib::Element const& e,
         std::size_t const local_matrix_size,
+        bool is_axially_symmetric,
         unsigned const integration_order,
         Parameter<double> const& neumann_bc_parameter)
-        : Base(e, integration_order),
+        : Base(e, is_axially_symmetric, integration_order),
           _neumann_bc_parameter(neumann_bc_parameter),
           _local_rhs(local_matrix_size)
     {
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
index a6322168e37..e5878a606ad 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
@@ -31,11 +31,12 @@ class RobinBoundaryConditionLocalAssembler final
         ShapeFunction, IntegrationMethod, GlobalDim>;
 
 public:
-    RobinBoundaryConditionLocalAssembler(
-        MeshLib::Element const& e, std::size_t const local_matrix_size,
-        unsigned const integration_order,
-        RobinBoundaryConditionData const& data)
-        : Base(e, integration_order),
+    RobinBoundaryConditionLocalAssembler(MeshLib::Element const& e,
+                                         std::size_t const local_matrix_size,
+                                         bool is_axially_symmetric,
+                                         unsigned const integration_order,
+                                         RobinBoundaryConditionData const& data)
+        : Base(e, is_axially_symmetric, integration_order),
           _data(data),
           _local_K(local_matrix_size, local_matrix_size),
           _local_rhs(local_matrix_size)
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
index 48f74795395..cc166a41148 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
@@ -66,6 +66,7 @@ public:
     /// element matrix.
     LocalAssemblerData(MeshLib::Element const& element,
                        std::size_t const /*local_matrix_size*/,
+                       bool is_axially_symmetric,
                        unsigned const integration_order,
                        GroundwaterFlowProcessData const& process_data)
         : _element(element),
@@ -73,7 +74,7 @@ public:
           _integration_method(integration_order),
           _shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType,
                                             IntegrationMethod, GlobalDim>(
-              element, _integration_method))
+              element, is_axially_symmetric, _integration_method))
     {
     }
 
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
index 7fd6d066dff..38c6120716e 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
@@ -44,8 +44,8 @@ void GroundwaterFlowProcess::initializeConcreteProcess(
     unsigned const integration_order)
 {
     ProcessLib::createLocalAssemblers<LocalAssemblerData>(
-        mesh.getDimension(), mesh.getElements(), dof_table, integration_order,
-        _local_assemblers, _process_data);
+        mesh.getDimension(), mesh.getElements(), dof_table, _local_assemblers,
+        mesh.isAxiallySymmetric(), integration_order, _process_data);
 
     _secondary_variables.addSecondaryVariable(
         "darcy_velocity_x", 1,
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM.h b/ProcessLib/HeatConduction/HeatConductionFEM.h
index f4cdd26d186..1bf18ee1254 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM.h
@@ -62,6 +62,7 @@ public:
     /// element matrix.
     LocalAssemblerData(MeshLib::Element const& element,
                        std::size_t const local_matrix_size,
+                       bool is_axially_symmetric,
                        unsigned const integration_order,
                        HeatConductionProcessData const& process_data)
         : _element(element),
@@ -69,11 +70,12 @@ public:
           _integration_method(integration_order),
           _shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType,
                                             IntegrationMethod, GlobalDim>(
-              element, _integration_method))
+              element, is_axially_symmetric, _integration_method))
     {
         // This assertion is valid only if all nodal d.o.f. use the same shape
         // matrices.
         assert(local_matrix_size == ShapeFunction::NPOINTS * NUM_NODAL_DOF);
+        (void) local_matrix_size;
     }
 
     void assemble(double const t, std::vector<double> const& local_x,
diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
index 8523f864870..4b556ed908e 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
@@ -38,8 +38,8 @@ void HeatConductionProcess::initializeConcreteProcess(
     unsigned const integration_order)
 {
     ProcessLib::createLocalAssemblers<LocalAssemblerData>(
-        mesh.getDimension(), mesh.getElements(), dof_table, integration_order,
-        _local_assemblers, _process_data);
+        mesh.getDimension(), mesh.getElements(), dof_table, _local_assemblers,
+        mesh.isAxiallySymmetric(), integration_order, _process_data);
 
     _secondary_variables.addSecondaryVariable(
         "heat_flux_x", 1,
diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
index 01cb3ab818c..e2a898836b1 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
@@ -151,7 +151,7 @@ public:
         auto const shape_matrices =
             initShapeMatrices<ShapeFunction, ShapeMatricesType,
                               IntegrationMethod, DisplacementDim>(
-                e, _integration_method);
+                e, false /* TODO */, _integration_method);
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
         {
diff --git a/ProcessLib/TES/TESLocalAssembler-impl.h b/ProcessLib/TES/TESLocalAssembler-impl.h
index 86bc01e390b..4e7f78fadcc 100644
--- a/ProcessLib/TES/TESLocalAssembler-impl.h
+++ b/ProcessLib/TES/TESLocalAssembler-impl.h
@@ -110,12 +110,13 @@ template <typename ShapeFunction_, typename IntegrationMethod_,
 TESLocalAssembler<ShapeFunction_, IntegrationMethod_, GlobalDim>::
     TESLocalAssembler(MeshLib::Element const& e,
                       std::size_t const /*local_matrix_size*/,
+                      bool is_axially_symmetric,
                       unsigned const integration_order,
                       AssemblyParams const& asm_params)
     : _integration_method(integration_order),
       _shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType,
                                         IntegrationMethod_, GlobalDim>(
-          e, _integration_method)),
+          e, is_axially_symmetric, _integration_method)),
       _d(asm_params,
          // TODO narrowing conversion
          static_cast<const unsigned>(
diff --git a/ProcessLib/TES/TESLocalAssembler.h b/ProcessLib/TES/TESLocalAssembler.h
index 86adf8f649e..5b9b4cd232d 100644
--- a/ProcessLib/TES/TESLocalAssembler.h
+++ b/ProcessLib/TES/TESLocalAssembler.h
@@ -66,6 +66,7 @@ public:
 
     TESLocalAssembler(MeshLib::Element const& e,
                       std::size_t const local_matrix_size,
+                      bool is_axially_symmetric,
                       unsigned const integration_order,
                       AssemblyParams const& asm_params);
 
diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp
index b8532baeb50..ed754c9485b 100644
--- a/ProcessLib/TES/TESProcess.cpp
+++ b/ProcessLib/TES/TESProcess.cpp
@@ -140,8 +140,8 @@ void TESProcess::initializeConcreteProcess(
     MeshLib::Mesh const& mesh, unsigned const integration_order)
 {
     ProcessLib::createLocalAssemblers<TESLocalAssembler>(
-        mesh.getDimension(), mesh.getElements(), dof_table, integration_order,
-        _local_assemblers, _assembly_params);
+        mesh.getDimension(), mesh.getElements(), dof_table, _local_assemblers,
+        mesh.isAxiallySymmetric(), integration_order, _assembly_params);
 
     initializeSecondaryVariables();
 }
-- 
GitLab