From 09c650f93729684fbe6ea27c9b05dcbe1219cd24 Mon Sep 17 00:00:00 2001
From: Simon Praetorius <simon.praetorius@tu-dresden.de>
Date: Mon, 7 May 2012 15:04:07 +0000
Subject: [PATCH] error in evalAtPoint corrected

---
 AMDiS/src/DOFVector.cc |  8 ++++----
 AMDiS/src/DOFVector.hh | 10 +++++++---
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/AMDiS/src/DOFVector.cc b/AMDiS/src/DOFVector.cc
index 3eaf62de..36ac7118 100644
--- a/AMDiS/src/DOFVector.cc
+++ b/AMDiS/src/DOFVector.cc
@@ -96,8 +96,8 @@ namespace AMDiS {
 
     if (inside) {
       basFcts->getLocalIndices(elInfo->getElement(), feSpace->getAdmin(), localIndices);
-      ElementVector uh(lambda.size());
-      for (int i = 0; i < lambda.size(); i++)
+      ElementVector uh(nBasFcts);
+      for (int i = 0; i < nBasFcts; i++)
         uh[i] = operator[](localIndices[i]);
       value = basFcts->evalUh(lambda, uh);
     } else
@@ -145,8 +145,8 @@ namespace AMDiS {
 
     if (inside) {
       basFcts->getLocalIndices(elInfo->getElement(), feSpace->getAdmin(), localIndices);
-      mtl::dense_vector<WorldVector<double> > uh(lambda.size());
-      for (int i = 0; i < lambda.size(); i++)
+      mtl::dense_vector<WorldVector<double> > uh(nBasFcts);
+      for (int i = 0; i < nBasFcts; i++)
         uh[i] = operator[](localIndices[i]);
       *val = basFcts->evalUh(lambda, uh);
     } else
diff --git a/AMDiS/src/DOFVector.hh b/AMDiS/src/DOFVector.hh
index ffb06041..15085ee9 100644
--- a/AMDiS/src/DOFVector.hh
+++ b/AMDiS/src/DOFVector.hh
@@ -980,16 +980,20 @@ namespace AMDiS {
       return false;
     
     basFcts->getLocalIndices(elInfo->getElement(), this->feSpace->getAdmin(), localIndices);
-    FixVec<WorldVector<double>, VERTEX> coords = elInfo->getCoords();
+    
+    WorldVector<double> coord;
     int minIdx = -1;
     double minDist = 1.e15;
     
-    for (int i = 0; i < coords.size(); i++) {
-      WorldVector<double> dist = coords[i] - p;
+    for (int i = 0; i < numBasFcts; i++) {
+      elInfo->coordToWorld(*(basFcts->getCoords(i)), coord);
+      WorldVector<double> dist = coord - p;
       double newDist = norm(dist);
       if (newDist < minDist) {
 	minIdx = i;
 	minDist = newDist;
+	if (minDist < 1.e-10)
+	  break;
       }
     }
     
-- 
GitLab