From e38cf84a8bfee289b5f4eecc11fcb28c1985e753 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Sun, 5 Jan 2014 22:19:02 +0100
Subject: [PATCH] [Extend]  Allow for cohesion

---
 dune/tectonic/frictiondata.hh       | 6 ++++--
 dune/tectonic/frictionpotential.hh  | 2 +-
 dune/tectonic/globalfrictiondata.hh | 3 ++-
 src/myglobalfrictiondata.hh         | 5 ++++-
 src/one-body-sample.parset          | 1 +
 5 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/dune/tectonic/frictiondata.hh b/dune/tectonic/frictiondata.hh
index 5f2c43c6..ee4bde11 100644
--- a/dune/tectonic/frictiondata.hh
+++ b/dune/tectonic/frictiondata.hh
@@ -3,9 +3,11 @@
 #include <dune/common/parametertree.hh>
 
 struct FrictionData {
-  explicit FrictionData(double _L, double _V0, double _a, double _b, double _mu0)
-      : L(_L), V0(_V0), a(_a), b(_b), mu0(_mu0) {}
+  explicit FrictionData(double _C, double _L, double _V0, double _a, double _b,
+                        double _mu0)
+      : C(_C), L(_L), V0(_V0), a(_a), b(_b), mu0(_mu0) {}
 
+  double const C;
   double const L;
   double const V0;
   double const a;
diff --git a/dune/tectonic/frictionpotential.hh b/dune/tectonic/frictionpotential.hh
index 03d74518..e9fe0d51 100644
--- a/dune/tectonic/frictionpotential.hh
+++ b/dune/tectonic/frictionpotential.hh
@@ -41,7 +41,7 @@ class FrictionPotential : public FrictionPotentialWrapper {
   }
 
   double differential(double V) const {
-    return weight * (-normalStress) * coefficientOfFriction(V);
+    return weight * (fd.C - normalStress * coefficientOfFriction(V));
   }
 
   double second_deriv(double V) const {
diff --git a/dune/tectonic/globalfrictiondata.hh b/dune/tectonic/globalfrictiondata.hh
index 65003523..1b2a5bf1 100644
--- a/dune/tectonic/globalfrictiondata.hh
+++ b/dune/tectonic/globalfrictiondata.hh
@@ -18,7 +18,7 @@ double evaluateScalarFunction(
 template <int dimension> class GlobalFrictionData {
 public:
   FrictionData operator()(Dune::FieldVector<double, dimension> const &x) const {
-    return FrictionData(L(), V0(), evaluateScalarFunction(a(), x),
+    return FrictionData(C(), L(), V0(), evaluateScalarFunction(a(), x),
                         evaluateScalarFunction(b(), x), mu0());
   }
 
@@ -26,6 +26,7 @@ template <int dimension> class GlobalFrictionData {
   using VirtualFunction = Dune::VirtualFunction<
       Dune::FieldVector<double, dimension>, Dune::FieldVector<double, 1>>;
 
+  double virtual const &C() const = 0;
   double virtual const &L() const = 0;
   double virtual const &V0() const = 0;
   VirtualFunction virtual const &a() const = 0;
diff --git a/src/myglobalfrictiondata.hh b/src/myglobalfrictiondata.hh
index 43d6b9cf..9215edc5 100644
--- a/src/myglobalfrictiondata.hh
+++ b/src/myglobalfrictiondata.hh
@@ -17,12 +17,14 @@ class MyGlobalFrictionData : public GlobalFrictionData<dimension> {
 
 public:
   MyGlobalFrictionData(Dune::ParameterTree const &parset, MyGeometry const &tri)
-      : L_(parset.get<double>("L")),
+      : C_(parset.get<double>("C")),
+        L_(parset.get<double>("L")),
         V0_(parset.get<double>("V0")),
         a_(parset.get<double>("a")),
         b_(parset.get<double>("b")),
         mu0_(parset.get<double>("mu0")) {}
 
+  double virtual const &C() const override { return C_; }
   double virtual const &L() const override { return L_; }
   double virtual const &V0() const override { return V0_; }
   VirtualFunction virtual const &a() const override { return a_; }
@@ -33,6 +35,7 @@ class MyGlobalFrictionData : public GlobalFrictionData<dimension> {
   using MyConstantFunction = ConstantFunction<
       Dune::FieldVector<double, dimension>, Dune::FieldVector<double, 1>>;
 
+  double const C_;
   double const L_;
   double const V0_;
   MyConstantFunction const a_;
diff --git a/src/one-body-sample.parset b/src/one-body-sample.parset
index 182207f0..7f477c49 100644
--- a/src/one-body-sample.parset
+++ b/src/one-body-sample.parset
@@ -16,6 +16,7 @@ shearViscosity = 0
 bulkViscosity  = 0
 
 [boundary.friction]
+C            = 0.0
 mu0          = 0.6
 a            = 0.010
 b            = 0.015
-- 
GitLab