From 70f1496786b8c44bf8779157e78bfa80be30f6da Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Thu, 31 Oct 2013 13:55:52 +0000
Subject: [PATCH] fix barycenter and lagPointFast in 2D (not tested)

---
 Geo/MElement.cpp          | 12 ++++++------
 Numeric/ElementType.cpp   |  2 --
 Numeric/JacobianBasis.cpp |  5 +++--
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index fbca931698..6457df851b 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1464,11 +1464,11 @@ MElement *MElementFactory::create(int type, std::vector<MVertex*> &v,
   case MSH_PRI_18:  return new MPrism18(v, num, part);
   case MSH_PRI_40:  return new MPrismN(v, 3, num, part);
   case MSH_PRI_75:  return new MPrismN(v, 4, num, part);
-  case MSH_PRI_126:  return new MPrismN(v, 5, num, part);
-  case MSH_PRI_196:  return new MPrismN(v, 6, num, part);
-  case MSH_PRI_288:  return new MPrismN(v, 7, num, part);
-  case MSH_PRI_405:  return new MPrismN(v, 8, num, part);
-  case MSH_PRI_550:  return new MPrismN(v, 9, num, part);
+  case MSH_PRI_126: return new MPrismN(v, 5, num, part);
+  case MSH_PRI_196: return new MPrismN(v, 6, num, part);
+  case MSH_PRI_288: return new MPrismN(v, 7, num, part);
+  case MSH_PRI_405: return new MPrismN(v, 8, num, part);
+  case MSH_PRI_550: return new MPrismN(v, 9, num, part);
   case MSH_PRI_24:  return new MPrismN(v, 3, num, part);
   case MSH_PRI_33:  return new MPrismN(v, 4, num, part);
   case MSH_PRI_42:  return new MPrismN(v, 5, num, part);
@@ -1476,7 +1476,7 @@ MElement *MElementFactory::create(int type, std::vector<MVertex*> &v,
   case MSH_PRI_60:  return new MPrismN(v, 7, num, part);
   case MSH_PRI_69:  return new MPrismN(v, 8, num, part);
   case MSH_PRI_78:  return new MPrismN(v, 9, num, part);
-  case MSH_PRI_1:  return new MPrismN(v, 0, num, part);
+  case MSH_PRI_1:   return new MPrismN(v, 0, num, part);
   case MSH_TET_20:  return new MTetrahedronN(v, 3, num, part);
   case MSH_TET_35:  return new MTetrahedronN(v, 4, num, part);
   case MSH_TET_56:  return new MTetrahedronN(v, 5, num, part);
diff --git a/Numeric/ElementType.cpp b/Numeric/ElementType.cpp
index 92444c0314..dbfbd8f8d4 100644
--- a/Numeric/ElementType.cpp
+++ b/Numeric/ElementType.cpp
@@ -98,7 +98,6 @@ int ElementType::ParentTypeFromTag(int tag)
 
 int ElementType::OrderFromTag(int tag)
 {
-
   switch (tag) {
   case MSH_PNT     : return 0;
   case MSH_LIN_1   : return 0;
@@ -228,7 +227,6 @@ int ElementType::OrderFromTag(int tag)
     Msg::Error("Unknown element tag %d, assuming order 1.",tag);
     return 1;
   }
-
 }
 
 int ElementType::DimensionFromTag(int tag)
diff --git a/Numeric/JacobianBasis.cpp b/Numeric/JacobianBasis.cpp
index 3caa50265f..bec6e56d98 100644
--- a/Numeric/JacobianBasis.cpp
+++ b/Numeric/JacobianBasis.cpp
@@ -101,7 +101,7 @@ JacobianBasis::JacobianBasis(int tag)
   double xBar = 0., yBar = 0., zBar = 0.;
   double barycenter[3] = {0., 0., 0.};
   for (int i = 0; i < numPrimMapNodes; i++) {
-    for (int j = 0; i < primMapBasis->points.size2(); ++i) {
+    for (int j = 0; j < primMapBasis->points.size2(); ++j) {
       barycenter[j] += primMapBasis->points(i, j);
     }
   }
@@ -126,7 +126,8 @@ JacobianBasis::JacobianBasis(int tag)
   // Compute "fast" Jacobian evaluation matrices (at 1st order nodes + barycenter)
   numJacNodesFast = numPrimMapNodes+1;
   fullMatrix<double> lagPointsFast(numJacNodesFast,3);                                  // Sampling points
-  lagPointsFast.copy(primMapBasis->points,0,numPrimMapNodes,0,3,0,0);                   // 1st order nodes
+  lagPointsFast.copy(primMapBasis->points,0,numPrimMapNodes,
+                     0,primMapBasis->points.size2(),0,0);                               // 1st order nodes
   lagPointsFast(numPrimMapNodes,0) = barycenter[0];                                     // Last point = barycenter
   lagPointsFast(numPrimMapNodes,1) = barycenter[1];
   lagPointsFast(numPrimMapNodes,2) = barycenter[2];
-- 
GitLab