diff --git a/dune/elasticity/common/trustregionsolver.cc b/dune/elasticity/common/trustregionsolver.cc index 0d1da517579abca3b98f6ebe52e357054f8f4c74..304e2841088887eb294ceae5fac6031b8b9f9bbc 100644 --- a/dune/elasticity/common/trustregionsolver.cc +++ b/dune/elasticity/common/trustregionsolver.cc @@ -39,7 +39,8 @@ setup(const typename BasisType::GridView::Grid& grid, int nu1, int nu2, int baseIterations, - double baseTolerance) + double baseTolerance, + double damping) { grid_ = &grid; @@ -53,6 +54,7 @@ setup(const typename BasisType::GridView::Grid& grid, ignoreNodes_ = std::make_shared<Dune::BitSetVector<blocksize>>(dirichletNodes); baseIterations_ = baseIterations; baseTolerance_ = baseTolerance; + damping_ = damping; int numLevels = grid_->maxLevel()+1; diff --git a/dune/elasticity/common/trustregionsolver.hh b/dune/elasticity/common/trustregionsolver.hh index d819a2a9102814e18d87ef4d4b9e730a577fc72d..2043fb3a0166481d32f6a615a55e12d223900b06 100644 --- a/dune/elasticity/common/trustregionsolver.hh +++ b/dune/elasticity/common/trustregionsolver.hh @@ -79,7 +79,8 @@ public: int nu1, int nu2, int baseIterations, - double baseTolerance); + double baseTolerance, + double damping); void setIgnoreNodes(const Dune::BitSetVector<blocksize>& ignoreNodes) { @@ -119,6 +120,9 @@ protected: /** \brief Error tolerance of the multigrid QP solver */ double innerTolerance_; + /** \brief Damping for the smoothers in the multigrid QP solver */ + double damping_; + /** \brief Maximum number of base solver iterations */ int baseIterations_; diff --git a/problems/finite-strain-elasticity-bending.parset b/problems/finite-strain-elasticity-bending.parset index 03cebdb9ebd6079a0a0e97883c4b3915dfcc31ab..3eaf945fc5d06b37bbd7433adf63a813374489ec 100644 --- a/problems/finite-strain-elasticity-bending.parset +++ b/problems/finite-strain-elasticity-bending.parset @@ -35,6 +35,9 @@ nu1 = 3 # Number of postsmoothing steps nu2 = 3 +# Damping for the smoothers of the multigrid solver +damping = 1.0 + # Number of coarse grid corrections mu = 1 diff --git a/src/finite-strain-elasticity.cc b/src/finite-strain-elasticity.cc index e5dccd81003cbfa9df6eacfbf8f7782899ab1c65..28e49701200c4b641e56be92074f5de5b12f3f7b 100644 --- a/src/finite-strain-elasticity.cc +++ b/src/finite-strain-elasticity.cc @@ -109,6 +109,7 @@ int main (int argc, char *argv[]) try const int baseIterations = parameterSet.get<int>("baseIt"); const double mgTolerance = parameterSet.get<double>("mgTolerance"); const double baseTolerance = parameterSet.get<double>("baseTolerance"); + const double damping = parameterSet.get<double>("damping"); std::string resultPath = parameterSet.get("resultPath", ""); // /////////////////////////////////////// @@ -333,7 +334,8 @@ int main (int argc, char *argv[]) try mgTolerance, mu, nu1, nu2, baseIterations, - baseTolerance + baseTolerance, + damping ); ////////////////////////////////////////////////////////