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