From 76f1ac2cb966ab284f09b6de0134497064299aa0 Mon Sep 17 00:00:00 2001
From: renchao_lu <renchao.lu@gmail.com>
Date: Mon, 7 Sep 2020 14:46:39 +0200
Subject: [PATCH] [PL/BC] Tackle boundary condition in the postTimeStep.

---
 ProcessLib/BoundaryCondition/BoundaryCondition.h         | 7 +++++++
 .../BoundaryCondition/BoundaryConditionCollection.h      | 9 +++++++++
 ProcessLib/Process.cpp                                   | 2 ++
 3 files changed, 18 insertions(+)

diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.h b/ProcessLib/BoundaryCondition/BoundaryCondition.h
index 4b0bc7d3d6c..3f65b8516f9 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.h
@@ -62,6 +62,13 @@ public:
         // A hook added for solution dependent dirichlet
     }
 
+    virtual void postTimestep(const double /*t*/,
+                              std::vector<GlobalVector*> const& /*x*/,
+                              int const /*process_id*/)
+    {
+        // A hook added for solution dependent dirichlet
+    }
+
     virtual ~BoundaryCondition() = default;
 };
 
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
index 71a0180bcb1..cac16dfe185 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
@@ -63,6 +63,15 @@ public:
         }
     }
 
+    void postTimestep(const double t, std::vector<GlobalVector*> const& x,
+                      int const process_id)
+    {
+        for (auto const& bc_ptr : _boundary_conditions)
+        {
+            bc_ptr->postTimestep(t, x, process_id);
+        }
+    }
+
 private:
     mutable std::vector<NumLib::IndexValueVector<GlobalIndexType>> _dirichlet_bcs;
     std::vector<std::unique_ptr<BoundaryCondition>> _boundary_conditions;
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index d901c528d94..ccd405951fa 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -384,6 +384,8 @@ void Process::postTimestep(std::vector<GlobalVector*> const& x, const double t,
     for (auto* const solution : x)
         MathLib::LinAlg::setLocalAccessibleVector(*solution);
     postTimestepConcreteProcess(x, t, delta_t, process_id);
+
+    _boundary_conditions[process_id].postTimestep(t, x, process_id);
 }
 
 void Process::postNonLinearSolver(GlobalVector const& x, const double t,
-- 
GitLab