From 7b16aec23adeac43fe914dbabfcb86eed16882e6 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 22 Apr 2009 08:40:57 +0000
Subject: [PATCH] simpler evaluate of the function value.  Now only works with
 in the triangle, because there are some singularities lurking outside

[[Imported from SVN: r4076]]
---
 src/localgeodesicfefunction.hh | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/localgeodesicfefunction.hh b/src/localgeodesicfefunction.hh
index 25e27848..ad69cbe0 100644
--- a/src/localgeodesicfefunction.hh
+++ b/src/localgeodesicfefunction.hh
@@ -195,13 +195,17 @@ evaluate(const Dune::FieldVector<ctype, dim>& local)
     for (int i=0; i<dim; i++)
         extraCoord -= local[i];
 
-    ctype normalizingFactor = extraCoord+local[0];
+    ctype normalizingFactor = extraCoord;
 
-    TargetSpace result = TargetSpace::interpolate(coefficients_[0], coefficients_[1], local[0]/normalizingFactor);
+    TargetSpace result = coefficients_[0];
 
-    for (int i=1; i<dim; i++) {
+    for (int i=0; i<dim; i++) {
+        assert(local[i]>=0);
         normalizingFactor += local[i];
-        result = TargetSpace::interpolate(result, coefficients_[i+1], local[i] / normalizingFactor);
+        result = TargetSpace::interpolate(result, coefficients_[i+1], 
+                                          (std::abs(normalizingFactor) > 1e-10)
+                                          ? local[i] / normalizingFactor
+                                          : 0);
     }
 
     return result;
-- 
GitLab