From e8a231d2a815a433eef3161b2a192d304584f5a4 Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Sat, 29 Jun 2013 00:08:57 +0000
Subject: [PATCH]

---
 Numeric/JacobianBasis.h      | 2 +-
 Numeric/bezierBasis.cpp      | 8 ++++++++
 Plugin/AnalyseCurvedMesh.cpp | 2 +-
 Plugin/AnalyseCurvedMesh.h   | 2 +-
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Numeric/JacobianBasis.h b/Numeric/JacobianBasis.h
index 5aa77258dc..31890fc5f0 100644
--- a/Numeric/JacobianBasis.h
+++ b/Numeric/JacobianBasis.h
@@ -62,7 +62,7 @@ class JacobianBasis {
   inline void primJac2Jac(const fullVector<double> &primJac, fullVector<double> &jac) const {
     matrixPrimJac2Jac.mult(primJac,jac);
   }
-  inline void subDivisor(const fullVector<double> &bez, fullVector<double> &result) const {
+  inline void subdivideBezierCoeff(const fullVector<double> &bez, fullVector<double> &result) const {
     bezier->subDivisor.mult(bez,result);
   }
 
diff --git a/Numeric/bezierBasis.cpp b/Numeric/bezierBasis.cpp
index cf2d14c8e4..c7ea74ce3c 100644
--- a/Numeric/bezierBasis.cpp
+++ b/Numeric/bezierBasis.cpp
@@ -287,6 +287,14 @@ static std::vector< fullMatrix<double> > generateSubPointsPyr(int order)
   prox.add(.5);
 
   for (int i = 0; i < 8; ++i) {
+    if (i == 0) {
+      for (int j = 0; j < nPts; ++j) {
+        const double factor = (1. - 2*subPoints[i](j, 2));
+        subPoints[i](j, 0) = subPoints[i](j, 0) * factor;
+        subPoints[i](j, 1) = subPoints[i](j, 1) * factor;
+      }
+      continue;
+    }
     for (int j = 0; j < nPts; ++j) {
       const double factor = (1. - subPoints[i](j, 2));
       subPoints[i](j, 0) = subPoints[i](j, 0) * factor;
diff --git a/Plugin/AnalyseCurvedMesh.cpp b/Plugin/AnalyseCurvedMesh.cpp
index 182e76d5da..58f3d04685 100644
--- a/Plugin/AnalyseCurvedMesh.cpp
+++ b/Plugin/AnalyseCurvedMesh.cpp
@@ -336,7 +336,7 @@ int GMSH_AnalyseCurvedMeshPlugin::subDivision(const JacobianBasis *jb,
                                               int depth)
 {
   fullVector<double> newJacobian(jb->getNumSubNodes());
-  jb->subDivisor(jacobian, newJacobian);
+  jb->subdivideBezierCoeff(jacobian, newJacobian);
 
   for (int i = 0; i < jb->getNumDivisions(); i++)
   for (int j = 0; j < jb->getNumLagCoeff(); j++)
diff --git a/Plugin/AnalyseCurvedMesh.h b/Plugin/AnalyseCurvedMesh.h
index 5f8ed13125..46c4d0d3a7 100644
--- a/Plugin/AnalyseCurvedMesh.h
+++ b/Plugin/AnalyseCurvedMesh.h
@@ -72,7 +72,7 @@ private:
 public:
   BezierJacobian(fullVector<double> &, const JacobianBasis *, int depth);
   void subDivisions(fullVector<double> &vect) const
-    {_jfs->subDivisor(_jacBez, vect);}
+    {_jfs->subdivideBezierCoeff(_jacBez, vect);}
   
   inline int depth() const {return _depthSub;}
   inline double minJ() const {return _minJ;}
-- 
GitLab