From 14c798939533076ad25087497f3063aa3b11eb4c Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 28 Feb 2012 14:32:02 +0100
Subject: [PATCH] Fix RuinaFunction::evaluate() hopefully

---
 dune/tectonic/nicefunction.hh | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/dune/tectonic/nicefunction.hh b/dune/tectonic/nicefunction.hh
index 626c59e6..93234e1d 100644
--- a/dune/tectonic/nicefunction.hh
+++ b/dune/tectonic/nicefunction.hh
@@ -56,11 +56,13 @@ class RuinaFunction : public NiceFunction {
     rho = exp(-mu/a)
   */
   void virtual evaluate(double const &x, double &y) const {
-    double const arg = std::max(eta * x / h, rho);
-    double const r = arg * (a * (std::log(arg) - 1) + mu + compound_state);
-    y = 1 / eta * normalStress * (r + a * rho + mu + compound_state);
-    y *= coefficient;
-    y *= h;
+    double const arg = eta * x / h;
+    if (arg <= rho) {
+      y = -log(rho); // TODO: We can write this out explicitly
+      return;
+    }
+    y = arg * (log(arg) - 1) - arg * log(rho) + rho - log(rho);
+    y *= coefficient * h * normalStress / eta;
   }
 
   /*
-- 
GitLab