From 3a964fc90f2fa153c3ca7395e949ab57f3fcb5a1 Mon Sep 17 00:00:00 2001 From: podlesny <podlesny@zedat.fu-berlin.de> Date: Sun, 28 Feb 2021 21:04:25 +0100 Subject: [PATCH] new velocity bc for velocity step test --- dune/tectonic/problem-data/bc.hh | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/dune/tectonic/problem-data/bc.hh b/dune/tectonic/problem-data/bc.hh index 075f5749..76a233ec 100644 --- a/dune/tectonic/problem-data/bc.hh +++ b/dune/tectonic/problem-data/bc.hh @@ -1,6 +1,8 @@ #ifndef SRC_ONE_BODY_PROBLEM_DATA_BC_HH #define SRC_ONE_BODY_PROBLEM_DATA_BC_HH +#include <cassert> + #include <dune/common/function.hh> class VelocityDirichletCondition @@ -35,6 +37,38 @@ class VelocityDirichletCondition const double threshold_; }; +class VelocityStepDirichletCondition + : public Dune::VirtualFunction<double, double> { + +public: + VelocityStepDirichletCondition(const double initialVelocity = 5e-5, const double finalVelocity = 1e-4, const double loadingThreshold = 0.1, const double stepTime = 0.5) : + initialVelocity_(initialVelocity), + finalVelocity_(finalVelocity), + loadingThreshold_(loadingThreshold), + stepTime_(stepTime) + { + assert(loadingThreshold_ < stepTime_); + } + + void evaluate(double const &relativeTime, double &y) const { + // Assumed to vanish at time zero + + y = finalVelocity_; + + if (relativeTime <= loadingThreshold_) { + y = initialVelocity_ * (1.0 - std::cos(relativeTime * M_PI / loadingThreshold_)) / 2.0; + } else if (relativeTime < stepTime_) { + y = initialVelocity_; + } + } + +private: + const double initialVelocity_; + const double finalVelocity_; + const double loadingThreshold_; + const double stepTime_; +}; + class NeumannCondition : public Dune::VirtualFunction<double, double> { public: NeumannCondition(double c = 0.0) : c_(c) {} -- GitLab