From 3a625ee19bf869e4d165af6ec7e4551b188db272 Mon Sep 17 00:00:00 2001 From: podlesny <podlesny@zedat.fu-berlin.de> Date: Sat, 6 Mar 2021 13:30:35 +0100 Subject: [PATCH] fix Tresca friction --- .../friction/frictionpotential.hh | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/dune/tectonic/data-structures/friction/frictionpotential.hh b/dune/tectonic/data-structures/friction/frictionpotential.hh index becfb81d..81b47741 100644 --- a/dune/tectonic/data-structures/friction/frictionpotential.hh +++ b/dune/tectonic/data-structures/friction/frictionpotential.hh @@ -34,14 +34,14 @@ class TruncatedRateState : public FrictionPotential { : fd(_fd), weight(_weight), weightedNormalStress(_weightedNormalStress) {} double coefficientOfFriction(double V) const override { - if (V <= Vmin or Vmin == 0.0) + if (V <= Vmin or regularity(V)>10e8) return 0.0; //std::cout << "V: " << V << " Vmin: " << Vmin << std::endl; auto res = fd.a * std::log(V / Vmin); if (std::isinf(res)) { - std::cout << "V: " << V << " Vmin: " << Vmin << std::endl; + //std::cout << "V: " << V << " Vmin: " << Vmin << std::endl; } return res; @@ -49,16 +49,19 @@ class TruncatedRateState : public FrictionPotential { double differential(double V) const override { //std::cout << "differential: " << weight * fd.C - weightedNormalStress * coefficientOfFriction(V) << std::endl; + if (V <= Vmin or regularity(V)>10e8) + return 0.0; + return weight * fd.C - weightedNormalStress * coefficientOfFriction(V); } double second_deriv(double V) const override { //std::cout << "second deriv: " << ((V<=Vmin) ? 0.0 : -weightedNormalStress * (fd.a / V)) << std::endl; - if (V <= Vmin or Vmin == 0.0) + if (V <= Vmin) return 0.0; - return -weightedNormalStress * (fd.a / V); + return - weightedNormalStress * (fd.a / V); } double regularity(double V) const override { @@ -71,10 +74,7 @@ class TruncatedRateState : public FrictionPotential { } double evaluate(double V) const override { - - //std::cout << "second deriv: " << ((V<=Vmin) ? 0.0 : weight * fd.C * V - weightedNormalStress * fd.a * V * (std::log(V / Vmin) - 1)) << std::endl; - - if (V <= Vmin or Vmin == 0.0) + if (V <= Vmin or regularity(V)>10e8) return 0.0; return weight * fd.C * V - weightedNormalStress * fd.a * V * (std::log(V / Vmin) - 1); @@ -83,9 +83,7 @@ class TruncatedRateState : public FrictionPotential { void updateAlpha(double alpha) override { double const logrest = (fd.mu0 + fd.b * alpha) / fd.a; Vmin = fd.V0 / std::exp(logrest); - - if (Vmin == 0.0) - std::cout << " logrest: " << logrest << " alpha: " << alpha << std::endl; + //Vmin = 0.0; } private: @@ -143,6 +141,8 @@ class Tresca : public FrictionPotential { } double differential(double V) const override { + //if (std::isinf(regularity(V))) + // return 0.0; return - weightedNormalStress * coefficientOfFriction(V); } @@ -151,11 +151,14 @@ class Tresca : public FrictionPotential { } double regularity(double V) const override { + if (std::abs(V) < 1e-14) // TODO + return std::numeric_limits<double>::infinity(); + return std::abs(second_deriv(V)); } double evaluate(double V) const override { - return 0; + return - weightedNormalStress * fd.mu0 * V; } void updateAlpha(double alpha) override {} -- GitLab