From b68b01d1875d96878d6deacec879284d8621b418 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Tue, 13 Dec 2011 22:17:31 +0100
Subject: [PATCH] Return zero at zero (for gradient/hessian)

---
 dune/tectonic/localnonlinearity.hh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/dune/tectonic/localnonlinearity.hh b/dune/tectonic/localnonlinearity.hh
index 285f309e..97f61a11 100644
--- a/dune/tectonic/localnonlinearity.hh
+++ b/dune/tectonic/localnonlinearity.hh
@@ -62,6 +62,9 @@ template <int dimension> class LocalNonlinearity {
     = (h2 - h1ox) * x[i] * x[j] / normX2
   */
   void addHessian(VectorType const &x, MatrixType &A) const {
+    if (x == VectorType(0))
+      return;
+
     double const normX2 = x.two_norm2();
     double const normX = sqrt(normX2);
     double const h1ox = func_->rightDifferential(normX) / normX;
@@ -79,6 +82,9 @@ template <int dimension> class LocalNonlinearity {
   }
 
   void addGradient(VectorType const &x, VectorType &y) const {
+    if (x == VectorType(0))
+      return;
+
     VectorType tmp;
     upperGradient(x, tmp); // TODO
     y += tmp;
-- 
GitLab