From 5ece8757250527e8981055cd542c7ce71a8ded9c Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Tue, 31 Jul 2018 15:16:24 +0200
Subject: [PATCH] [PL] applied interface changes to existing BCs

---
 .../ConstraintDirichletBoundaryCondition.cpp           |  3 ++-
 .../ConstraintDirichletBoundaryCondition.h             |  2 +-
 .../BoundaryCondition/DirichletBoundaryCondition.cpp   |  8 +++++---
 .../BoundaryCondition/DirichletBoundaryCondition.h     |  2 +-
 .../GenericNaturalBoundaryCondition-impl.h             |  5 +++--
 .../GenericNaturalBoundaryCondition.h                  | 10 ++++------
 .../GenericNaturalBoundaryConditionLocalAssembler.h    |  5 +++--
 .../GenericNonuniformNaturalBoundaryCondition-impl.h   |  7 ++++---
 .../GenericNonuniformNaturalBoundaryCondition.h        |  6 ++----
 ...cNonuniformNaturalBoundaryConditionLocalAssembler.h |  5 +++--
 .../NeumannBoundaryConditionLocalAssembler.h           |  7 ++++---
 .../NonuniformDirichletBoundaryCondition.h             |  4 +---
 .../NonuniformNeumannBoundaryConditionLocalAssembler.h |  3 ++-
 .../NormalTractionBoundaryCondition-impl.h             |  7 ++++---
 .../NormalTractionBoundaryCondition.h                  |  6 ++----
 .../NormalTractionBoundaryConditionLocalAssembler.h    |  8 +++++---
 ...eFieldIrreversibleDamageOracleBoundaryCondition.cpp |  2 +-
 ...aseFieldIrreversibleDamageOracleBoundaryCondition.h |  2 +-
 .../RobinBoundaryConditionLocalAssembler.h             |  2 +-
 19 files changed, 49 insertions(+), 45 deletions(-)

diff --git a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
index acce3726620..33567c6e25e 100644
--- a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
@@ -139,7 +139,8 @@ void ConstraintDirichletBoundaryCondition::preTimestep(double t,
 }
 
 void ConstraintDirichletBoundaryCondition::getEssentialBCValues(
-    const double t, NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
+    const double t, const GlobalVector& /*x*/,
+    NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
 {
     SpatialPosition pos;
 
diff --git a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
index 253abfceb7f..04d3b4095d6 100644
--- a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
@@ -63,7 +63,7 @@ public:
     void preTimestep(double t, GlobalVector const& x) override;
 
     void getEssentialBCValues(
-        const double t,
+        const double t, const GlobalVector& x,
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
 private:
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
index a81977cdc17..38a7e6d08c2 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
@@ -10,14 +10,15 @@
 #include "DirichletBoundaryCondition.h"
 
 #include <algorithm>
-#include <vector>
 #include <logog/include/logog.hpp>
+#include <vector>
 #include "ProcessLib/Utils/ProcessUtils.h"
 
 namespace ProcessLib
 {
 void DirichletBoundaryCondition::getEssentialBCValues(
-    const double t, NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
+    const double t, GlobalVector const& /*x*/,
+    NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
 {
     SpatialPosition pos;
 
@@ -48,7 +49,8 @@ void DirichletBoundaryCondition::getEssentialBCValues(
         // and MatZeroRowsColumns, which are called to apply the Dirichlet BC,
         // the negative index is not accepted like other matrix or vector
         // PETSc routines. Therefore, the following if-condition is applied.
-        if (g_idx >= 0) {
+        if (g_idx >= 0)
+        {
             bc_values.ids.emplace_back(g_idx);
             bc_values.values.emplace_back(_parameter(t, pos).front());
         }
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
index 721ea5d3ad1..f00681518cf 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
@@ -58,7 +58,7 @@ public:
     }
 
     void getEssentialBCValues(
-        const double t,
+        const double t, GlobalVector const& x,
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
 private:
diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
index b164ed2b8c0..4da13051714 100644
--- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
+++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h
@@ -70,11 +70,12 @@ void GenericNaturalBoundaryCondition<
     LocalAssemblerImplementation>::applyNaturalBC(const double t,
                                                   const GlobalVector& x,
                                                   GlobalMatrix& K,
-                                                  GlobalVector& b)
+                                                  GlobalVector& b,
+                                                  GlobalMatrix* Jac)
 {
     GlobalExecutor::executeMemberOnDereferenced(
         &GenericNaturalBoundaryConditionLocalAssemblerInterface::assemble,
-        _local_assemblers, *_dof_table_boundary, t, x, K, b);
+        _local_assemblers, *_dof_table_boundary, t, x, K, b, Jac);
 }
 
 }  // ProcessLib
diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h
index f68304dc2f8..90b0d164f9a 100644
--- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h
@@ -9,8 +9,8 @@
 
 #pragma once
 
-#include "MeshLib/MeshSubset.h"
 #include "BoundaryCondition.h"
+#include "MeshLib/MeshSubset.h"
 
 namespace ProcessLib
 {
@@ -38,10 +38,8 @@ public:
 
     /// Calls local assemblers which calculate their contributions to the global
     /// matrix and the right-hand-side.
-    void applyNaturalBC(const double t,
-                        GlobalVector const& x,
-                        GlobalMatrix& K,
-                        GlobalVector& b) override;
+    void applyNaturalBC(const double t, GlobalVector const& x, GlobalMatrix& K,
+                        GlobalVector& b, GlobalMatrix* Jac) override;
 
 private:
     /// Data used in the assembly of the specific boundary condition.
@@ -63,6 +61,6 @@ private:
         _local_assemblers;
 };
 
-}  // ProcessLib
+}  // namespace ProcessLib
 
 #include "GenericNaturalBoundaryCondition-impl.h"
diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
index 219085cfc06..1721ef2589d 100644
--- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryConditionLocalAssembler.h
@@ -23,7 +23,8 @@ public:
     virtual void assemble(
         std::size_t const id,
         NumLib::LocalToGlobalIndexMap const& dof_table_boundary, double const t,
-        const GlobalVector& x, GlobalMatrix& K, GlobalVector& b) = 0;
+        const GlobalVector& x, GlobalMatrix& K, GlobalVector& b,
+        GlobalMatrix* Jac) = 0;
 };
 
 template <typename ShapeFunction, typename IntegrationMethod,
@@ -55,4 +56,4 @@ protected:
         _shape_matrices;
 };
 
-}  // ProcessLib
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h
index a7b50d8957a..bf3e122f78b 100644
--- a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h
+++ b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h
@@ -89,12 +89,13 @@ void GenericNonuniformNaturalBoundaryCondition<
     LocalAssemblerImplementation>::applyNaturalBC(const double t,
                                                   const GlobalVector& x,
                                                   GlobalMatrix& K,
-                                                  GlobalVector& b)
+                                                  GlobalVector& b,
+                                                  GlobalMatrix* Jac)
 {
     GlobalExecutor::executeMemberOnDereferenced(
         &GenericNonuniformNaturalBoundaryConditionLocalAssemblerInterface::
             assemble,
-        _local_assemblers, *_dof_table_boundary, t, x, K, b);
+        _local_assemblers, *_dof_table_boundary, t, x, K, b, Jac);
 }
 
-}  // ProcessLib
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition.h b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition.h
index d6753d96719..37249a52c5a 100644
--- a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition.h
@@ -33,10 +33,8 @@ public:
 
     /// Calls local assemblers which calculate their contributions to the global
     /// matrix and the right-hand-side.
-    void applyNaturalBC(const double t,
-                        GlobalVector const& x,
-                        GlobalMatrix& K,
-                        GlobalVector& b) override;
+    void applyNaturalBC(const double t, GlobalVector const& x, GlobalMatrix& K,
+                        GlobalVector& b, GlobalMatrix* Jac) override;
 
 private:
     void constructDofTable();
diff --git a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryConditionLocalAssembler.h
index 72929d11a5e..3cf49814d08 100644
--- a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryConditionLocalAssembler.h
@@ -24,7 +24,8 @@ public:
     virtual void assemble(
         std::size_t const id,
         NumLib::LocalToGlobalIndexMap const& dof_table_boundary, double const t,
-        const GlobalVector& x, GlobalMatrix& K, GlobalVector& b) = 0;
+        const GlobalVector& x, GlobalMatrix& K, GlobalVector& b,
+        GlobalMatrix* Jac) = 0;
 };
 
 template <typename ShapeFunction, typename IntegrationMethod,
@@ -88,4 +89,4 @@ protected:
         _ns_and_weights;
 };
 
-}  // ProcessLib
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
index cface4f4cdb..a88661d70cd 100644
--- a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
@@ -9,9 +9,9 @@
 
 #pragma once
 
+#include "GenericNaturalBoundaryConditionLocalAssembler.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "ProcessLib/Parameter/Parameter.h"
-#include "GenericNaturalBoundaryConditionLocalAssembler.h"
 
 namespace ProcessLib
 {
@@ -42,7 +42,8 @@ public:
     void assemble(std::size_t const id,
                   NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
                   double const t, const GlobalVector& /*x*/,
-                  GlobalMatrix& /*K*/, GlobalVector& b) override
+                  GlobalMatrix& /*K*/, GlobalVector& b,
+                  GlobalMatrix* /*Jac*/) override
     {
         _local_rhs.setZero();
 
@@ -74,4 +75,4 @@ public:
     EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
 };
 
-}   // namespace ProcessLib
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NonuniformDirichletBoundaryCondition.h b/ProcessLib/BoundaryCondition/NonuniformDirichletBoundaryCondition.h
index 69399374203..49ae3aacf7e 100644
--- a/ProcessLib/BoundaryCondition/NonuniformDirichletBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/NonuniformDirichletBoundaryCondition.h
@@ -60,11 +60,9 @@ public:
     }
 
     void getEssentialBCValues(
-        const double /*t*/,
+        const double /*t*/, GlobalVector const& /*x*/,
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override
     {
-        SpatialPosition pos;
-
         bc_values.ids.clear();
         bc_values.values.clear();
 
diff --git a/ProcessLib/BoundaryCondition/NonuniformNeumannBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NonuniformNeumannBoundaryConditionLocalAssembler.h
index d995082e418..3666afdcd39 100644
--- a/ProcessLib/BoundaryCondition/NonuniformNeumannBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NonuniformNeumannBoundaryConditionLocalAssembler.h
@@ -57,7 +57,8 @@ public:
     void assemble(std::size_t const id,
                   NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
                   double const /*t*/, const GlobalVector& /*x*/,
-                  GlobalMatrix& /*K*/, GlobalVector& b) override
+                  GlobalMatrix& /*K*/, GlobalVector& b,
+                  GlobalMatrix* /*Jac*/) override
     {
         _local_rhs.setZero();
 
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
index c0c26e40d99..ab5fad4556b 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
@@ -65,11 +65,12 @@ void NormalTractionBoundaryCondition<
     LocalAssemblerImplementation>::applyNaturalBC(const double t,
                                                   const GlobalVector& x,
                                                   GlobalMatrix& K,
-                                                  GlobalVector& b)
+                                                  GlobalVector& b,
+                                                  GlobalMatrix* Jac)
 {
     GlobalExecutor::executeMemberOnDereferenced(
         &NormalTractionBoundaryConditionLocalAssemblerInterface::assemble,
-        _local_assemblers, *_dof_table_boundary, t, x, K, b);
+        _local_assemblers, *_dof_table_boundary, t, x, K, b, Jac);
 }
 
 std::unique_ptr<NormalTractionBoundaryCondition<
@@ -98,4 +99,4 @@ createNormalTractionBoundaryCondition(
 }
 
 }  // namespace NormalTractionBoundaryCondition
-}  // ProcessLib
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
index 9f849aadc89..14cb196809e 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
@@ -44,10 +44,8 @@ public:
 
     /// Calls local assemblers which calculate their contributions to the global
     /// matrix and the right-hand-side.
-    void applyNaturalBC(const double t,
-                        GlobalVector const& x,
-                        GlobalMatrix& K,
-                        GlobalVector& b) override;
+    void applyNaturalBC(const double t, GlobalVector const& x, GlobalMatrix& K,
+                        GlobalVector& b, GlobalMatrix* Jac) override;
 
 private:
     MeshLib::Mesh const& _bc_mesh;
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
index e296fa1071d..cfe97bbc449 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
@@ -10,8 +10,8 @@
 
 #pragma once
 
-#include "MeshLib/Elements/FaceRule.h"
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
+#include "MeshLib/Elements/FaceRule.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "ProcessLib/Parameter/Parameter.h"
 
@@ -45,7 +45,8 @@ public:
     virtual void assemble(
         std::size_t const id,
         NumLib::LocalToGlobalIndexMap const& dof_table_boundary, double const t,
-        const GlobalVector& /*x*/, GlobalMatrix& /*K*/, GlobalVector& b) = 0;
+        const GlobalVector& /*x*/, GlobalMatrix& /*K*/, GlobalVector& b,
+        GlobalMatrix* /*Jac*/) = 0;
     virtual ~NormalTractionBoundaryConditionLocalAssemblerInterface() = default;
 };
 
@@ -126,7 +127,8 @@ public:
     void assemble(std::size_t const id,
                   NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
                   double const t, const GlobalVector& /*x*/,
-                  GlobalMatrix& /*K*/, GlobalVector& local_rhs)
+                  GlobalMatrix& /*K*/, GlobalVector& local_rhs,
+                  GlobalMatrix* /*Jac*/) override
     {
         _local_rhs.setZero();
 
diff --git a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
index bc72d5b4733..c9c70288dba 100644
--- a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
@@ -17,7 +17,7 @@
 namespace ProcessLib
 {
 void PhaseFieldIrreversibleDamageOracleBoundaryCondition::getEssentialBCValues(
-    const double /*t*/,
+    const double /*t*/, GlobalVector const& /*x*/,
     NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
 {
     SpatialPosition pos;
diff --git a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
index 9afa9f2426c..c14b1745271 100644
--- a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
@@ -43,7 +43,7 @@ public:
     }
 
     void getEssentialBCValues(
-        const double t,
+        const double t, const GlobalVector& x,
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
     void preTimestep(const double t, const GlobalVector& x) override;
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
index f3bdc6181ee..1b780d40b04 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
@@ -46,7 +46,7 @@ public:
     void assemble(std::size_t const id,
                   NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
                   double const t, const GlobalVector& /*x*/, GlobalMatrix& K,
-                  GlobalVector& b) override
+                  GlobalVector& b, GlobalMatrix* /*Jac*/) override
     {
         _local_K.setZero();
         _local_rhs.setZero();
-- 
GitLab