diff --git a/dune/tectonic/globalfriction.hh b/dune/tectonic/globalfriction.hh index 579134e1073d5ca68369c2c2a72c97365ca7ad7d..3aff30217892e26b551c2abade26ecabcbd1b89b 100644 --- a/dune/tectonic/globalfriction.hh +++ b/dune/tectonic/globalfriction.hh @@ -82,6 +82,12 @@ template <class Matrix, class Vector> class GlobalFriction { return res->regularity(x); } + void coefficientOfFriction(Vector const &x, ScalarVector &coefficient) { + coefficient.resize(x.size()); + for (size_t i = 0; i < x.size(); ++i) + coefficient[i] = restriction(i)->coefficientOfFriction(x[i]); + } + void virtual updateAlpha(ScalarVector const &alpha) = 0; }; #endif diff --git a/dune/tectonic/globalratestatefriction.hh b/dune/tectonic/globalratestatefriction.hh index 0e30a7ba195ddb540e28e36a05ea084ed11e46e7..ddc2af2debf3e1893fc815346fdbc211c1bf7f15 100644 --- a/dune/tectonic/globalratestatefriction.hh +++ b/dune/tectonic/globalratestatefriction.hh @@ -56,13 +56,6 @@ class GlobalRateStateFriction : public GlobalFriction<Matrix, Vector> { restrictions[i]->updateAlpha(alpha[i]); } - void coefficientOfFriction(Vector const &x, ScalarVector &coefficient) { - assert(x.size() == restrictions.size()); - coefficient.resize(restrictions.size()); - for (size_t i = 0; i < restrictions.size(); ++i) - coefficient[i] = restrictions[i]->coefficientOfFriction(x[i]); - } - /* Return a restriction of the outer function to the i'th node. */ diff --git a/src/assemblers.cc b/src/assemblers.cc index 1cd1d02fadb0b278d880da4048381926a450dc2e..b42bb3017d3a95cc85b354eb95f0a60483a6ec3d 100644 --- a/src/assemblers.cc +++ b/src/assemblers.cc @@ -17,6 +17,8 @@ #include <dune/fufem/functions/constantfunction.hh> #include <dune/fufem/quadraturerules/quadraturerulecache.hh> +#include <dune/tectonic/globalratestatefriction.hh> + #include "assemblers.hh" template <class GridView, int dimension> @@ -122,7 +124,7 @@ auto MyAssembler<GridView, dimension>::assembleFrictionNonlinearity( BoundaryPatch<GridView> const &frictionalBoundary, GlobalFrictionData<dimension> const &frictionInfo, ScalarVector const &normalStress) - -> std::shared_ptr<GlobalRateStateFriction<Matrix, Vector, GridView>> { + -> std::shared_ptr<GlobalFriction<Matrix, Vector>> { // Lump negative normal stress (kludge) ScalarVector weights; { diff --git a/src/assemblers.hh b/src/assemblers.hh index 2f944c71e4977b399db0b91438b6f203ab1a85cf..7b0c26c92a079f237c343b0dfc86e9f4e03d59fc 100644 --- a/src/assemblers.hh +++ b/src/assemblers.hh @@ -13,8 +13,8 @@ #pragma clang diagnostic pop #include <dune/fufem/functionspacebases/p1nodalbasis.hh> +#include <dune/tectonic/globalfriction.hh> #include <dune/tectonic/globalfrictiondata.hh> -#include <dune/tectonic/globalratestatefriction.hh> template <class GridView, int dimension> class MyAssembler { public: @@ -75,8 +75,7 @@ template <class GridView, int dimension> class MyAssembler { ScalarVector &normalStress, double youngModulus, double poissonRatio, Vector const &displacement); - std::shared_ptr<GlobalRateStateFriction<Matrix, Vector, GridView>> - assembleFrictionNonlinearity( + std::shared_ptr<GlobalFriction<Matrix, Vector>> assembleFrictionNonlinearity( BoundaryPatch<GridView> const &frictionalBoundary, GlobalFrictionData<dimension> const &frictionInfo, ScalarVector const &normalStress);