From 8bb2301483fa5fef09067a950a862ca5c2681689 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Thu, 21 Feb 2008 09:46:17 +0000
Subject: [PATCH] *** empty log message ***

---
 Common/GmshMatrix.h         |  141 ++-
 Geo/GEdge.cpp               |   18 +-
 Geo/GEdge.h                 |    1 +
 Geo/GFace.cpp               |   28 +-
 Geo/GFace.h                 |    5 +
 Geo/MElement.cpp            |  363 +-----
 Geo/Makefile                | 2181 ++++++++++++++++++++++++++++++++++-
 Mesh/BDS.cpp                |   54 +-
 Mesh/BackgroundMesh.cpp     |    8 +-
 Mesh/HighOrder.cpp          |  736 +++++++-----
 Mesh/meshGFaceBDS.cpp       |   91 +-
 Mesh/qualityMeasures.cpp    |   14 +-
 Mesh/qualityMeasures.h      |    4 +-
 Numeric/FunctionSpace.cpp   |  559 +++++++++
 Numeric/FunctionSpace.h     |  109 ++
 Numeric/GaussLegendre1D.h   |  101 ++
 Numeric/Makefile            |    3 +-
 benchmarks/2d/naca12_2d.geo |    2 +-
 18 files changed, 3737 insertions(+), 681 deletions(-)
 create mode 100644 Numeric/FunctionSpace.cpp
 create mode 100644 Numeric/FunctionSpace.h
 create mode 100644 Numeric/GaussLegendre1D.h

diff --git a/Common/GmshMatrix.h b/Common/GmshMatrix.h
index d813a57a4b..eaa6384001 100644
--- a/Common/GmshMatrix.h
+++ b/Common/GmshMatrix.h
@@ -108,6 +108,18 @@ public:
   {
     throw;
   }
+  Gmsh_Matrix cofactor(int i,int j) const 
+  {
+    throw;
+  }
+  inline void invert ()
+  {
+    throw;
+  }
+  double determinant() const {
+    throw;
+  }
+
 };
 
 #ifdef HAVE_GSL
@@ -142,28 +154,60 @@ public:
   {
     return *gsl_vector_ptr (data,i);
   }
+  inline double norm(){
+    return gsl_blas_dnrm2(data);
+  }
+ inline void scale (const double & y)
+ {
+   if (y == 0.0)  gsl_vector_set_zero( data );
+   else gsl_vector_scale ( data, y );
+ }
 };
 
 class GSL_Matrix
 {
 private:
+  gsl_matrix_view view;
   int r,c;
 public:
-  inline int size1() const {return r;}
-  inline int size2() const {return c;}
+  inline size_t size1() const {return data->size1;}
+  inline size_t size2() const {return data->size2;}
   gsl_matrix *data;
-  ~GSL_Matrix() {gsl_matrix_free (data);}
-  GSL_Matrix(int R,int C)
-    : r(R),c(C)
-  {
-    data = gsl_matrix_calloc (r, c);
-  }
-  GSL_Matrix(const GSL_Matrix&other)
-    : r(other.r),c(other.c)
+  GSL_Matrix(gsl_matrix_view _data)
+    : view(_data),data(&view.matrix)
+    {}
+  
+  GSL_Matrix(size_t R, size_t C)
+      { data = gsl_matrix_calloc (R, C);  }
+  
+  GSL_Matrix() : data(0)
+    {}
+
+  GSL_Matrix(const GSL_Matrix&other):
+    data(0)
+    {
+      if(data)gsl_matrix_free (data);
+      data = gsl_matrix_calloc (other.data->size1, other.data->size2);
+      gsl_matrix_memcpy (data, other.data);
+    }
+  virtual ~GSL_Matrix() {if(data && data->owner == 1)gsl_matrix_free (data);}
+  
+  GSL_Matrix & operator = (const GSL_Matrix&other)
+    {
+      if (&other != this)
+        {
+          if(data)gsl_matrix_free (data);
+          data = gsl_matrix_calloc (other.data->size1, other.data->size2);
+          gsl_matrix_memcpy (data, other.data);
+        }
+      return *this;
+    }
+
+  void memcpy (const GSL_Matrix&other)
   {
-    data = gsl_matrix_calloc (r, c);
     gsl_matrix_memcpy (data, other.data);
   }
+
   inline double operator () (int i, int j) const
   {
     return gsl_matrix_get (data,i,j);
@@ -176,6 +220,10 @@ public:
   {
     gsl_blas_dgemm (CblasNoTrans,CblasNoTrans, 1.0, data, x.data, 1.0, b.data);
   }
+  inline void set_all (const double & m ) 
+    {
+      gsl_matrix_set_all (data, m);
+    }
   inline void least_squares (const GSL_Vector & rhs, GSL_Vector & result)
   {
     assert (r > c);
@@ -198,10 +246,81 @@ public:
     gsl_linalg_LU_solve ( data ,  p, rhs.data, result.data ) ;
     gsl_permutation_free (p);
   }
+  inline void invert ()
+  {
+    int s;
+    gsl_permutation * p = gsl_permutation_alloc (size1());
+    gsl_linalg_LU_decomp ( data, p, &s);
+    gsl_matrix *data_inv = gsl_matrix_calloc (size1(), size2());
+    gsl_linalg_LU_invert ( data ,  p, data_inv ) ;
+    gsl_matrix_memcpy (data, data_inv);
+    gsl_matrix_free (data_inv);
+    gsl_permutation_free (p);
+  }
+  inline bool invertSecure (double& det)
+    {
+      int s;
+      gsl_permutation * p = gsl_permutation_alloc (size1());
+      gsl_linalg_LU_decomp ( data, p, &s);
+      det = gsl_linalg_LU_det(data,s);
+      gsl_matrix *data_inv = gsl_matrix_calloc (size1(), size2());
+      gsl_linalg_LU_invert ( data ,  p, data_inv ) ;
+      gsl_matrix_memcpy (data, data_inv);
+      gsl_matrix_free (data_inv);
+      gsl_permutation_free (p);
+
+      return (det != 0.);
+    }
+  double determinant() const 
+  {
+    GSL_Matrix copy = *this;
+    double det;
+    copy.invertSecure(det);
+    return det;
+  } 
+  GSL_Matrix cofactor(int i,int j) const 
+    {
+      int ni = size1();
+      int nj = size2();
+      GSL_Matrix cof(ni-1,nj-1);
+      if (i>0) {
+	if (j>0)    GSL_Matrix(cof.touchSubmatrix(0,i,0,   j  )).memcpy(GSL_Matrix(seeSubmatrix(0,i,0  ,   j)));
+	if (j<nj-1) GSL_Matrix(cof.touchSubmatrix(0,i,j,nj-j-1)).memcpy(GSL_Matrix(seeSubmatrix(0,i,j+1,nj-j-1)));
+      }
+      
+      if (i<ni-1) {  
+	if (j<nj-1) GSL_Matrix(cof.touchSubmatrix(i,ni-i-1,j,nj-j-1)).memcpy(GSL_Matrix(seeSubmatrix(i+1,ni-i-1,j+1,nj-j-1)));
+	if (j>0)    GSL_Matrix(cof.touchSubmatrix(i,ni-i-1,0,     j)).memcpy(GSL_Matrix(seeSubmatrix(i+1,ni-i-1,0  ,   j)));
+      }      
+      return cof;
+    }
+ 
   inline void mult (const GSL_Vector & x, GSL_Vector & b )
   {
     gsl_blas_dgemv (CblasNoTrans, 1.0, data, x.data, 1.0, b.data);
   }
+  inline gsl_matrix_view touchSubmatrix(int i0,int ni,int j0,int nj) 
+  {
+    return gsl_matrix_submatrix (data,i0,j0,ni,nj);
+  }  
+  inline const gsl_matrix_view seeSubmatrix(int i0,int ni,int j0,int nj) const
+  {
+    return gsl_matrix_submatrix (data,i0,j0,ni,nj);
+  }
+  inline void scale (const double & m ) 
+    {
+      if (m == 0.0)  gsl_matrix_set_zero ( data );
+      else gsl_matrix_scale (data, m);
+    }
+  inline void add (const double & a ) 
+    {
+      gsl_matrix_add_constant (data, a);
+    }
+  inline void add (const GSL_Matrix & m ) 
+    {
+      gsl_matrix_add (data, m.data);
+    }
+
 };
 typedef GSL_Matrix Double_Matrix;
 typedef GSL_Vector Double_Vector;
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index af59f8be2f..7f035b612e 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -1,4 +1,4 @@
-// $Id: GEdge.cpp,v 1.38 2008-02-17 09:30:25 geuzaine Exp $
+// $Id: GEdge.cpp,v 1.39 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -25,6 +25,7 @@
 #include "GFace.h"
 #include "MElement.h"
 #include "GmshDefines.h"
+#include "GaussLegendre1D.h"
 
 #if defined(HAVE_GMSH_EMBEDDED)
 #  include "GmshEmbedded.h"
@@ -170,3 +171,18 @@ double GEdge::curvature(double par) const
   SVector3 d = one_over_D * (n2 - n1);
   return norm(d);
 }
+
+
+double GEdge::length (const double &u0, const double &u1, const int nbQuadPoints){
+  double *t=0,*w=0;
+  gmshGaussLegendre1D (nbQuadPoints , &t, &w);
+  double L = 0.0;
+  const double rapJ = (u1-u0)*.5;
+  for (int i=0;i<nbQuadPoints;i++){    
+    const double ui = u0 * 0.5 * (1.-t[i]) + u1 * 0.5 * (1.+t[i]);
+    SVector3 der = firstDer(ui);
+    const double d = norm(der);
+    L += d * w[i] * rapJ;
+  }
+  return L;
+}
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 0d6fd8c977..b52403652c 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -102,6 +102,7 @@ class GEdge : public GEntity {
   // the length of the model edge
   inline double length() const { return _length; }
   inline void setLength(const double l) { _length = l; }
+  double length (const double &u0, const double &u1, const int nbQuadPoints = 4);
 
   // one can impose the mesh size at an edge
   virtual double prescribedMeshSizeAtVertex() const { return meshAttributes.meshSize; }
diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 64b004f87f..dea69e09e5 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -1,4 +1,4 @@
-// $Id: GFace.cpp,v 1.51 2008-02-17 09:30:28 geuzaine Exp $
+// $Id: GFace.cpp,v 1.52 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -23,6 +23,7 @@
 #include "GFace.h"
 #include "GEdge.h"
 #include "MElement.h"
+#include "GaussLegendre1D.h"
 
 #if defined(HAVE_GMSH_EMBEDDED)
 #  include "GmshEmbedded.h"
@@ -687,3 +688,28 @@ bool GFace::buildSTLTriangulation()
   return true;
 #endif
 }
+// by default we assume that straight lines are geodesics
+SPoint2 GFace::geodesic(const SPoint2 &pt1 , const SPoint2 &pt2 , double t){
+  return pt1 + (pt2-pt1) * t;
+}
+// length of a curve drawn on a surface
+// S = (X(u,v), Y(u,v), Z(u,v) );
+// u = u(t) , v = v(t)
+// C = C ( u(t), v(t) )
+// dC/dt = dC/du du/dt + dC/dv dv/dt
+double GFace::length(const SPoint2 &pt1 , const SPoint2 &pt2, int nbQuadPoints){
+  double *t=0,*w=0;
+  double L = 0.0;
+  gmshGaussLegendre1D (nbQuadPoints , &t, &w);
+  for (int i=0;i<nbQuadPoints;i++){    
+    const double ti = 0.5 * (1.+t[i]);
+    SPoint2 pi = geodesic (pt1, pt2, ti);
+    Pair<SVector3,SVector3> der2 = firstDer(pi);    
+    SVector3 der = der2.left() * (pt2.x()-pt1.x()) + der2.right() * (pt2.y()-pt1.y());
+    const double d = norm(der);
+    L += d * w[i] ;
+  }
+  return L;
+
+
+}
diff --git a/Geo/GFace.h b/Geo/GFace.h
index 995bc29437..fb416da9d1 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -100,6 +100,11 @@ class GFace : public GEntity
   // Return the point on the face corresponding to the given parameter.
   virtual GPoint point(double par1, double par2) const = 0;
   virtual GPoint point(const SPoint2 &pt) const { return point(pt.x(), pt.y()); }
+  // computes, in parametric space, the interpolation from pt1 to pt2 alon the geodesic
+  // of the surface
+  virtual SPoint2 geodesic ( const SPoint2 &pt1 , const SPoint2 &pt2 , double t);
+  // computes the length of a geodesic between two points in parametric space
+  virtual double  length   ( const SPoint2 &pt1 , const SPoint2 &pt2, int n=4);
 
   // If the mapping is a conforming mapping, i.e. a mapping that
   // conserves angles, this function returns the eigenvalue of the
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index f91823770e..589d788d35 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1,4 +1,4 @@
-// $Id: MElement.cpp,v 1.52 2008-02-17 08:47:58 geuzaine Exp $
+// $Id: MElement.cpp,v 1.53 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -23,6 +23,8 @@
 #include "MElement.h"
 #include "GEntity.h"
 #include "GFace.h"
+#include "FunctionSpace.h"
+#include "GmshMatrix.h"
 
 #if defined(HAVE_GMSH_EMBEDDED)
 #  include "GmshEmbedded.h"
@@ -641,301 +643,32 @@ void MTriangle::circumcenterXY(double *res) const
   circumcenterXY(p1, p2, p3, res);
 }
 
-int P1[3][2] = {
-  {0,0},
-  {1,0},
-  {0,1}
-};
-
-int P2[6][2] = {
-  {0,0},
-  {1,0},
-  {0,1},
-  {2,0},
-  {0,2},
-  {1,1}
-};
-
-int P3[9][2] = {
-  {0,0},
-  {1,0},
-  {0,1},
-  {2,0},
-  {0,2},
-  {3,0},
-  {0,3},
-  {2,1},
-  {1,2}
-};
-
-int P4[12][2] = {
-  {0,0},
-  {1,0},
-  {0,1},
-  {2,0},
-  {0,2},
-  {3,0},
-  {0,3},
-  {4,0},
-  {0,4},
-  {3,1},
-  {1,3},
-  {2,2}
-};
-
-int P5[15][2] = {
-  {0,0},
-  {1,0},
-  {0,1},
-  {2,0},
-  {0,2},
-  {3,0},
-  {0,3},
-  {4,0},
-  {0,4},
-  {5,0},
-  {0,5},
-  {4,1},
-  {3,2},
-  {2,3},
-  {1,4}
-};
-
-double coef1[3][3]={
-  {  1.00000000,  -1.00000000,  -1.00000000},
-  {  0.00000000,   1.00000000,   0.00000000},
-  {  0.00000000,   0.00000000,   1.00000000}
-};
-
-double coef2[6][6]={
-  {  1.00000000,  -3.00000000,  -3.00000000,   2.00000000,   2.00000000,   4.00000000},
-  {  0.00000000,  -1.00000000,   0.00000000,   2.00000000,  -0.00000000,  -0.00000000},
-  {  0.00000000,   0.00000000,  -1.00000000,  -0.00000000,   2.00000000,  -0.00000000},
-  {  0.00000000,   4.00000000,   0.00000000,  -4.00000000,  -0.00000000,  -4.00000000},
-  {  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,   4.00000000},
-  {  0.00000000,   0.00000000,   4.00000000,  -0.00000000,  -4.00000000,  -4.00000000}
-};
-
-double coef3[9][9]={
-  {  1.00000000,  -5.50000000,  -5.50000000,   9.00000000,   9.00000000,  -4.50000000,
-     -4.50000000,   4.50000000,   4.50000000},
-  {  0.00000000,   1.00000000,   0.00000000,  -4.50000000,  -0.00000000,   4.50000000,
-     -0.00000000,  -0.00000000,  -0.00000000},
-  {  0.00000000,   0.00000000,   1.00000000,  -0.00000000,  -4.50000000,  -0.00000000,
-     4.50000000,  -0.00000000,  -0.00000000},
-  {  0.00000000,   9.00000000,   0.00000000, -22.50000000,  -0.00000000,  13.50000000,
-     0.00000000,   4.50000000,  -9.00000000},
-  {  0.00000000,  -4.50000000,  -0.00000000,  18.00000000,   0.00000000, -13.50000000,
-     -0.00000000,  -9.00000000,   4.50000000},
-  {  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,  -0.00000000,
-     0.00000000,   9.00000000,  -4.50000000},
-  {  0.00000000,   0.00000000,  -0.00000000,  -0.00000000,   0.00000000,  -0.00000000,
-     -0.00000000,  -4.50000000,   9.00000000},
-  {  0.00000000,   0.00000000,  -4.50000000,  -0.00000000,  18.00000000,  -0.00000000,
-     -13.50000000,   4.50000000,  -9.00000000},
-  {  0.00000000,   0.00000000,   9.00000000,  -0.00000000, -22.50000000,  -0.00000000,
-     13.50000000,  -9.00000000,   4.50000000}
-};
-
-double coef4[12][12]={
-{  1.00000000,  -8.33333333,  -8.33333333,  23.33333333,  23.33333333, -26.66666667,
-   -26.66666667,  10.66666667,  10.66666667,   9.33333333,   9.33333333,  -2.66666667},
-{  0.00000000,  -1.00000000,   0.00000000,   7.33333333,  -0.00000000, -16.00000000,
-   0.00000000,  10.66666667,  -0.00000000,  -0.00000000,  -0.00000000,  -0.00000000},
-{  0.00000000,   0.00000000,  -1.00000000,  -0.00000000,   7.33333333,  -0.00000000,
-   -16.00000000,  -0.00000000,  10.66666667,  -0.00000000,  -0.00000000,  -0.00000000},
-{  0.00000000,  16.00000000,  -0.00000000, -69.33333333,   0.00000000,  96.00000000,
-    -0.00000000, -42.66666667,   0.00000000,  -5.33333333, -16.00000000,  21.33333333},
-{  0.00000000, -12.00000000,   0.00000000,  76.00000000,  -0.00000000, -128.00000000,
-    0.00000000,  64.00000000,  -0.00000000,  12.00000000,  12.00000000, -40.00000000},
-{  0.00000000,   5.33333333,  -0.00000000, -37.33333333,   0.00000000,  74.66666667,
-    -0.00000000, -42.66666667,   0.00000000, -16.00000000,  -5.33333333,  21.33333333},
-{  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,  -0.00000000,
-    0.00000000,  -0.00000000,  -0.00000000,  16.00000000,   5.33333333, -21.33333333},
-{  0.00000000,   0.00000000,  -0.00000000,  -0.00000000,   0.00000000,  -0.00000000,
-    -0.00000000,  -0.00000000,   0.00000000, -12.00000000, -12.00000000,  40.00000000},
-{  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,  -0.00000000,
-    0.00000000,  -0.00000000,  -0.00000000,   5.33333333,  16.00000000, -21.33333333},
-{  0.00000000,   0.00000000,   5.33333333,  -0.00000000, -37.33333333,  -0.00000000,
-    74.66666667,  -0.00000000, -42.66666667,  -5.33333333, -16.00000000,  21.33333333},
-{  0.00000000,   0.00000000, -12.00000000,  -0.00000000,  76.00000000,  -0.00000000,
-    -128.00000000,  -0.00000000,  64.00000000,  12.00000000,  12.00000000, -40.00000000},
-{  0.00000000,   0.00000000,  16.00000000,  -0.00000000, -69.33333333,  -0.00000000,
-    96.00000000,  -0.00000000, -42.66666667, -16.00000000,  -5.33333333,  21.33333333}
-};
-double coef5[15][15]={
-{  1.00000000, -11.41666667, -11.41666667,  46.87500000,  46.87500000, -88.54166667,
-   -88.54166667,  78.12500000,  78.12500000, -26.04166667, -26.04166667,  10.41666667,
-   5.20833333,   5.20833333,  10.41666667},
-{  0.00000000,   1.00000000,  -0.00000000, -10.41666667,   0.00000000,  36.45833333,
-   -0.00000000, -52.08333333,   0.00000000,  26.04166667,   0.00000000,  -0.00000000,
-   0.00000000,  -0.00000000,   0.00000000},
-{  0.00000000,   0.00000000,   1.00000000,  -0.00000000, -10.41666667,  -0.00000000,
-   36.45833333,  -0.00000000, -52.08333333,   0.00000000,  26.04166667,  -0.00000000,
-   0.00000000,  -0.00000000,   0.00000000},
-{  0.00000000,  25.00000000,  -0.00000000, -160.41666667,   0.00000000, 369.79166667,
-   -0.00000000, -364.58333333,   0.00000000, 130.20833333,  -0.00000000,   6.25000000,
-   -38.54166667,  60.41666667, -25.00000000},
-{  0.00000000, -25.00000000,   0.00000000, 222.91666667,  -0.00000000, -614.58333333,
-   0.00000000, 677.08333333,  -0.00000000, -260.41666667,   0.00000000, -16.66666667,
-   95.83333333, -122.91666667,  25.00000000},
-{  0.00000000,  16.66666667,  -0.00000000, -162.50000000,   0.00000000, 510.41666667,
-   -0.00000000, -625.00000000,   0.00000000, 260.41666667,  -0.00000000,  25.00000000,
-   -122.91666667,  95.83333333, -16.66666667},
-{  0.00000000,  -6.25000000,   0.00000000,  63.54166667,  -0.00000000, -213.54166667, 
-   0.00000000, 286.45833333,  -0.00000000, -130.20833333,   0.00000000, -25.00000000,
-    60.41666667, -38.54166667,   6.25000000},
-{  0.00000000,   0.00000000,  -0.00000000,  -0.00000000,   0.00000000,  -0.00000000,
-    -0.00000000,  -0.00000000,   0.00000000,   0.00000000,  -0.00000000,  25.00000000,
-    -60.41666667,  38.54166667,  -6.25000000},
-{  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,  -0.00000000,
-    0.00000000,  -0.00000000,  -0.00000000,   0.00000000,   0.00000000, -25.00000000,
-    122.91666667, -95.83333333,  16.66666667},
-{  0.00000000,   0.00000000,  -0.00000000,  -0.00000000,   0.00000000,  -0.00000000,
-    -0.00000000,  -0.00000000,   0.00000000,   0.00000000,  -0.00000000,  16.66666667,
-    -95.83333333, 122.91666667, -25.00000000},
-{  0.00000000,   0.00000000,   0.00000000,  -0.00000000,  -0.00000000,  -0.00000000,
-    0.00000000,  -0.00000000,  -0.00000000,   0.00000000,   0.00000000,  -6.25000000,
-    38.54166667, -60.41666667,  25.00000000},
-{  0.00000000,   0.00000000,  -6.25000000,  -0.00000000,  63.54166667,  -0.00000000,
-    -213.54166667,  -0.00000000, 286.45833333,   0.00000000, -130.20833333,   6.25000000,
-    -38.54166667,  60.41666667, -25.00000000},
-{  0.00000000,   0.00000000,  16.66666667,  -0.00000000, -162.50000000,  -0.00000000,
-    510.41666667,  -0.00000000, -625.00000000,   0.00000000, 260.41666667, -16.66666667,
-    95.83333333, -122.91666667,  25.00000000},
-{  0.00000000,   0.00000000, -25.00000000,  -0.00000000, 222.91666667,  -0.00000000,
-    -614.58333333,  -0.00000000, 677.08333333,   0.00000000, -260.41666667,  25.00000000,
-    -122.91666667,  95.83333333, -16.66666667},
-{  0.00000000,   0.00000000,  25.00000000,  -0.00000000, -160.41666667,  -0.00000000,
-    369.79166667,  -0.00000000, -364.58333333,   0.00000000, 130.20833333, -25.00000000,
-    60.41666667, -38.54166667,   6.25000000}
-};
-
-void GeomShapeFunctionP1(double u, double v, double *sf) 
-{
-  for (int i = 0; i < 3; i++){
-    sf[i] = 0;
-    for(int j = 0; j < 3; j++){
-      sf[i] += coef1[i][j] * pow(u,P1[j][0]) * pow(v, P1[j][1]);
-    }
-  }
-}
-
-
-void GradGeomShapeFunctionP1(double u, double v, double grads[6][2]) 
-{
-  for (int i = 0; i < 3; i++){
-    grads[i][0] = 0;
-    grads[i][1] = 0;
-    for(int j = 0; j < 3; j++){
-      if(P1[j][0] > 0) grads[i][0] += coef1[i][j] * P1[j][0] * pow(u,P1[j][0] - 1) * pow(v, P1[j][1]);
-      if(P1[j][1] > 0) grads[i][1] += coef1[i][j] * P1[j][1] * pow(u,P1[j][0]) * pow(v, P1[j][1] - 1);
-    }
-  }
-}
-
-void GeomShapeFunctionP2(double u, double v, double *sf) 
-{
-  for (int i = 0; i < 6; i++){
-    sf[i] = 0;
-    for(int j = 0; j < 6; j++){
-      sf[i] += coef2[i][j] * pow(u,P2[j][0]) * pow(v, P2[j][1]);
-    }
-  }
-}
-
-void GradGeomShapeFunctionP2(double u, double v, double grads[6][2]) 
-{
-  for(int i = 0; i < 6; i++){
-    grads[i][0] = 0;
-    grads[i][1] = 0;
-    for (int j = 0; j < 6; j++){
-      if(P2[j][0] > 0) grads[i][0] += coef2[i][j] * P2[j][0] * pow(u, P2[j][0] - 1) * pow(v, P2[j][1]);
-      if(P2[j][1] > 0) grads[i][1] += coef2[i][j] * P2[j][1] * pow(u, P2[j][0]) * pow(v, P2[j][1] - 1);
-    }
-  }
-}
-
-void GeomShapeFunctionP3(double u, double v, double *sf) 
-{
-  for (int i = 0; i < 9; i++){
-    sf[i] = 0;
-    for(int j = 0; j < 9; j++){
-      sf[i] += coef3[i][j] * pow(u,P3[j][0]) * pow(v, P3[j][1]);
-    }
-  }
-}
-
-void GradGeomShapeFunctionP3 (double u, double v, double grads[9][2])
-{
-  for(int i = 0; i < 9; i++){
-    grads[i][0] = 0;
-    grads[i][1] = 0;
-    for(int j = 0; j < 9; j++){
-      if(P3[j][0] > 0) grads[i][0] += coef3[i][j] * P3[j][0] * pow(u, P3[j][0] - 1) * pow(v, P3[j][1]);
-      if(P3[j][1] > 0) grads[i][1] += coef3[i][j] * P3[j][1] * pow(u, P3[j][0]) * pow(v, P3[j][1] - 1);
-    }
-  }
-}
 
-void GeomShapeFunctionP4(double u, double v, double *sf) 
-{
-  for (int i = 0; i < 12; i++){
-    sf[i] = 0;
-    for(int j = 0; j < 12; j++){
-      sf[i] += coef4[i][j] * pow(u,P4[j][0]) * pow(v, P4[j][1]);
-    }
-  }
-}
-
-
-void GradGeomShapeFunctionP4(double u, double v, double grads[12][2]) 
-{
-  for(int i = 0; i < 12; i++){
-    grads[i][0] = 0;
-    grads[i][1] = 0;
-    for(int j = 0; j < 12; j++){
-      if(P4[j][0] > 0) grads[i][0] += coef4[i][j] * P4[j][0] * pow(u, P4[j][0] - 1) * pow(v, P4[j][1]);
-      if(P4[j][1] > 0) grads[i][1] += coef4[i][j] * P4[j][1] * pow(u, P4[j][0]) * pow(v, P4[j][1] - 1);
-    }
-  }
-}
-
-void GeomShapeFunctionP5(double u, double v, double *sf) 
+void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double j[2][3])
 {
-  for (int i = 0; i < 15; i++){
-    sf[i] = 0;
-    for(int j = 0; j < 15; j++){
-      sf[i] += coef5[i][j] * pow(u,P5[j][0]) * pow(v, P5[j][1]);
+  double grads[256][2];
+  int nf = getNumFaceVertices();
+
+  if (!nf){
+    switch(ord){
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu,vv,grads); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu,vv,grads); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_9).df(uu,vv,grads); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_12).df(uu,vv,grads); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_15I).df(uu,vv,grads); break;
+    default: throw;
     }
   }
-}
-
-void GradGeomShapeFunctionP5(double u, double v, double grads[15][2]) 
-{
-  for(int i = 0; i < 15; i++){
-    grads[i][0] = 0;
-    grads[i][1] = 0;
-    for (int j = 0; j < 15; j++){
-      if(P5[j][0] > 0) grads[i][0] += coef5[i][j] * P5[j][0] * pow(u, P5[j][0] - 1) * pow(v, P5[j][1]);
-      if(P5[j][1] > 0) grads[i][1] += coef5[i][j] * P5[j][1] * pow(u, P5[j][0]) * pow(v, P5[j][1] - 1);
+  else{
+    switch(ord){
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu,vv,grads); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu,vv,grads); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_10).df(uu,vv,grads); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_15).df(uu,vv,grads); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_21).df(uu,vv,grads); break;
+    default: throw;
     }
   }
-}
-
-void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double j[2][3])
-{
-  double grads[256][2];
-
-
-  switch(ord){
-  case 1: GradGeomShapeFunctionP1(uu, vv, grads); break;
-  case 2: GradGeomShapeFunctionP2(uu, vv, grads); break;
-  case 3: GradGeomShapeFunctionP3(uu, vv, grads); break;
-  case 4: GradGeomShapeFunctionP4(uu, vv, grads); break;
-  case 5: GradGeomShapeFunctionP5(uu, vv, grads); break;
-  default: throw;
-  }
   j[0][0] = 0 ; for(int i = 0; i < 3; i++) j[0][0] += grads [i][0] * _v[i] -> x();
   j[1][0] = 0 ; for(int i = 0; i < 3; i++) j[1][0] += grads [i][1] * _v[i] -> x();
   j[0][1] = 0 ; for(int i = 0; i < 3; i++) j[0][1] += grads [i][0] * _v[i] -> y();
@@ -943,36 +676,49 @@ void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double j[2][3]
   j[0][2] = 0 ; for(int i = 0; i < 3; i++) j[0][2] += grads [i][0] * _v[i] -> z();
   j[1][2] = 0 ; for(int i = 0; i < 3; i++) j[1][2] += grads [i][1] * _v[i] -> z();
 
+  if (ord == 1)return;
 
-  for(int i = 3; i < 3 * ord; i++) j[0][0] += grads[i][0] * vs[i - 3] -> x();
-  for(int i = 3; i < 3 * ord; i++) j[1][0] += grads[i][1] * vs[i - 3] -> x();
-  for(int i = 3; i < 3 * ord; i++) j[0][1] += grads[i][0] * vs[i - 3] -> y();
-  for(int i = 3; i < 3 * ord; i++) j[1][1] += grads[i][1] * vs[i - 3] -> y();
-  for(int i = 3; i < 3 * ord; i++) j[0][2] += grads[i][0] * vs[i - 3] -> z();
-  for(int i = 3; i < 3 * ord; i++) j[1][2] += grads[i][1] * vs[i - 3] -> z();
-
+  for(int i = 3; i < 3 * ord + nf; i++) j[0][0] += grads[i][0] * vs[i - 3] -> x();
+  for(int i = 3; i < 3 * ord + nf; i++) j[1][0] += grads[i][1] * vs[i - 3] -> x();
+  for(int i = 3; i < 3 * ord + nf; i++) j[0][1] += grads[i][0] * vs[i - 3] -> y();
+  for(int i = 3; i < 3 * ord + nf; i++) j[1][1] += grads[i][1] * vs[i - 3] -> y();
+  for(int i = 3; i < 3 * ord + nf; i++) j[0][2] += grads[i][0] * vs[i - 3] -> z();
+  for(int i = 3; i < 3 * ord + nf; i++) j[1][2] += grads[i][1] * vs[i - 3] -> z();
 }
 
 void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, SPoint3 &p)
 {
   double sf[256];
-
-  switch(ord){
-  case 1: GeomShapeFunctionP1(uu, vv, sf); break;
-  case 2: GeomShapeFunctionP2(uu, vv, sf); break;
-  case 3: GeomShapeFunctionP3(uu, vv, sf); break;
-  case 4: GeomShapeFunctionP4(uu, vv, sf); break;
-  case 5: GeomShapeFunctionP5(uu, vv, sf); break;
-  default: throw;
+  int nf = getNumFaceVertices();
+
+  if (!nf){
+    switch(ord){
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu,vv,sf); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu,vv,sf); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_9).f(uu,vv,sf); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_12).f(uu,vv,sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_15I).f(uu,vv,sf); break;
+    default: throw;
+    }
+  }
+  else{
+    switch(ord){
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu,vv,sf); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu,vv,sf); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_10).f(uu,vv,sf); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_15).f(uu,vv,sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_21).f(uu,vv,sf); break;
+    default: throw;
+    }
   }
   
   double x = 0 ; for(int i = 0; i < 3; i++) x += sf[i] * _v[i] -> x();
   double y = 0 ; for(int i = 0; i < 3; i++) y += sf[i] * _v[i] -> y();
   double z = 0 ; for(int i = 0; i < 3; i++) z += sf[i] * _v[i] -> z();
 
-  for(int i = 3; i < 3 * ord; i++) x += sf[i] * vs[i - 3] -> x();
-  for(int i = 3; i < 3 * ord; i++) y += sf[i] * vs[i - 3] -> y();
-  for(int i = 3; i < 3 * ord; i++) z += sf[i] * vs[i - 3] -> z();
+  for(int i = 3; i < 3 * ord + nf; i++) x += sf[i] * vs[i - 3] -> x();
+  for(int i = 3; i < 3 * ord + nf; i++) y += sf[i] * vs[i - 3] -> y();
+  for(int i = 3; i < 3 * ord + nf; i++) z += sf[i] * vs[i - 3] -> z();
 
   p = SPoint3(x,y,z);
 
@@ -1072,3 +818,4 @@ void MTriangleN::getEdgeRep (int num, double *x, double *y, double *z, SVector3
     z[0] = pnt1.z();z[1] = pnt2.z();
   }
 }
+
diff --git a/Geo/Makefile b/Geo/Makefile
index 51c629aa6d..8c2e429b9a 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.184 2008-02-17 08:47:58 geuzaine Exp $
+# $Id: Makefile,v 1.185 2008-02-21 09:45:15 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -82,16 +82,53 @@ GVertex.o: GVertex.cpp GVertex.h GEntity.h Range.h SPoint3.h \
 GEdge.o: GEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
   GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h
+  MVertex.h MEdge.h MFace.h ../Numeric/GaussLegendre1D.h \
+  ../Common/Message.h
 GEdgeLoop.o: GEdgeLoop.cpp GEdgeLoop.h GEdge.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h \
   ../Common/Message.h
 GFace.o: GFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
   GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Common/VertexArray.h ../Geo/SVector3.h \
-  ../Common/Context.h ../DataStr/List.h
+  MVertex.h MEdge.h MFace.h ../Numeric/GaussLegendre1D.h \
+  ../Common/Message.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h \
+  ../DataStr/List.h /sw//include/gsl/gsl_vector.h \
+  /sw//include/gsl/gsl_vector_complex_long_double.h \
+  /sw//include/gsl/gsl_types.h /sw//include/gsl/gsl_errno.h \
+  /sw//include/gsl/gsl_complex.h /sw//include/gsl/gsl_check_range.h \
+  /sw//include/gsl/gsl_vector_long_double.h \
+  /sw//include/gsl/gsl_block_long_double.h \
+  /sw//include/gsl/gsl_vector_complex.h \
+  /sw//include/gsl/gsl_block_complex_long_double.h \
+  /sw//include/gsl/gsl_vector_complex_double.h \
+  /sw//include/gsl/gsl_vector_double.h \
+  /sw//include/gsl/gsl_block_double.h \
+  /sw//include/gsl/gsl_block_complex_double.h \
+  /sw//include/gsl/gsl_vector_complex_float.h \
+  /sw//include/gsl/gsl_vector_float.h /sw//include/gsl/gsl_block_float.h \
+  /sw//include/gsl/gsl_block_complex_float.h \
+  /sw//include/gsl/gsl_vector_ulong.h /sw//include/gsl/gsl_block_ulong.h \
+  /sw//include/gsl/gsl_vector_long.h /sw//include/gsl/gsl_block_long.h \
+  /sw//include/gsl/gsl_vector_uint.h /sw//include/gsl/gsl_block_uint.h \
+  /sw//include/gsl/gsl_vector_int.h /sw//include/gsl/gsl_block_int.h \
+  /sw//include/gsl/gsl_vector_ushort.h \
+  /sw//include/gsl/gsl_block_ushort.h /sw//include/gsl/gsl_vector_short.h \
+  /sw//include/gsl/gsl_block_short.h /sw//include/gsl/gsl_vector_uchar.h \
+  /sw//include/gsl/gsl_block_uchar.h /sw//include/gsl/gsl_vector_char.h \
+  /sw//include/gsl/gsl_block_char.h /sw//include/gsl/gsl_linalg.h \
+  /sw//include/gsl/gsl_mode.h /sw//include/gsl/gsl_permutation.h \
+  /sw//include/gsl/gsl_matrix.h \
+  /sw//include/gsl/gsl_matrix_complex_long_double.h \
+  /sw//include/gsl/gsl_matrix_complex_double.h \
+  /sw//include/gsl/gsl_matrix_complex_float.h \
+  /sw//include/gsl/gsl_matrix_long_double.h \
+  /sw//include/gsl/gsl_matrix_double.h \
+  /sw//include/gsl/gsl_matrix_float.h /sw//include/gsl/gsl_matrix_ulong.h \
+  /sw//include/gsl/gsl_matrix_long.h /sw//include/gsl/gsl_matrix_uint.h \
+  /sw//include/gsl/gsl_matrix_int.h /sw//include/gsl/gsl_matrix_ushort.h \
+  /sw//include/gsl/gsl_matrix_short.h /sw//include/gsl/gsl_matrix_uchar.h \
+  /sw//include/gsl/gsl_matrix_char.h
 GRegion.o: GRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
   GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
@@ -124,25 +161,1688 @@ gmshRegion.o: gmshRegion.cpp GModel.h GVertex.h GEntity.h Range.h \
   ../Common/Message.h
 gmshSurface.o: gmshSurface.cpp gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Common/Message.h
+  ../Numeric/NumericEmbedded.h ../Common/Message.h \
+  ../contrib/MathEval/matheval.h
 OCCVertex.o: OCCVertex.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h
+  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h \
+  /usr/local/opencascade/inc/config.h \
+  /usr/local/opencascade/inc/BRep_Tool.hxx \
+  /usr/local/opencascade/inc/Standard_Boolean.hxx \
+  /usr/local/opencascade/inc/Standard_TypeDef.hxx \
+  /usr/local/opencascade/inc/Standard_Macro.hxx \
+  /usr/local/opencascade/inc/Standard_Stream.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Surface.hxx \
+  /usr/local/opencascade/inc/Standard.hxx \
+  /usr/local/opencascade/inc/Standard_Address.hxx \
+  /usr/local/opencascade/inc/Standard_Integer.hxx \
+  /usr/local/opencascade/inc/Standard_values.h \
+  /usr/local/opencascade/inc/Standard_OStream.hxx \
+  /usr/local/opencascade/inc/Standard_CString.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_PrimitiveTypes.hxx \
+  /usr/local/opencascade/inc/Standard_Real.hxx \
+  /usr/local/opencascade/inc/Standard_Character.hxx \
+  /usr/local/opencascade/inc/Standard_ctype.hxx \
+  /usr/local/opencascade/inc/Standard_ExtCharacter.hxx \
+  /usr/local/opencascade/inc/Standard_ExtString.hxx \
+  /usr/local/opencascade/inc/Standard_Storable.hxx \
+  /usr/local/opencascade/inc/Standard_Transient_proto.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon3D.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon2D.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_PolygonOnTriangulation.hxx \
+  /usr/local/opencascade/inc/GeomAbs_Shape.hxx \
+  /usr/local/opencascade/inc/Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_Type.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Type.hxx \
+  /usr/local/opencascade/inc/Standard_KindOfType.hxx \
+  /usr/local/opencascade/inc/Standard_Type.lxx \
+  /usr/local/opencascade/inc/Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Geom_Surface.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPS.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_SurfacePtr.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElS.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.lxx /usr/local/opencascade/inc/gp.hxx \
+  /usr/local/opencascade/inc/gp.lxx /usr/local/opencascade/inc/gp_Mat.hxx \
+  /usr/local/opencascade/inc/gp_Mat.lxx \
+  /usr/local/opencascade/inc/Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_SStream.hxx \
+  /usr/local/opencascade/inc/Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.lxx \
+  /usr/local/opencascade/inc/Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.lxx \
+  /usr/local/opencascade/inc/gp_Trsf.hxx \
+  /usr/local/opencascade/inc/gp_TrsfForm.hxx \
+  /usr/local/opencascade/inc/gp_Trsf.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.lxx \
+  /usr/local/opencascade/inc/gp_XY.hxx \
+  /usr/local/opencascade/inc/gp_XY.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.lxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.hxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec2d.hxx \
+  /usr/local/opencascade/inc/gp_Vec2d.lxx \
+  /usr/local/opencascade/inc/gp_Dir2d.hxx \
+  /usr/local/opencascade/inc/gp_Dir2d.lxx \
+  /usr/local/opencascade/inc/gp_Ax2d.hxx \
+  /usr/local/opencascade/inc/gp_Ax2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec.hxx \
+  /usr/local/opencascade/inc/gp_Vec.lxx \
+  /usr/local/opencascade/inc/gp_Dir.hxx \
+  /usr/local/opencascade/inc/gp_Dir.lxx \
+  /usr/local/opencascade/inc/gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Handle_gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.lxx \
+  /usr/local/opencascade/inc/Extrema_GenExtPS.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray2OfPnt.hxx \
+  /usr/local/opencascade/inc/Extrema_FuncExtPS.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfReal.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.lxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_SeqNode.hxx \
+  /usr/local/opencascade/inc/TCollection_Sequence.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/math_FunctionSetWithDerivatives.hxx \
+  /usr/local/opencascade/inc/math_FunctionSet.hxx \
+  /usr/local/opencascade/inc/GeomAbs_SurfaceType.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/Quantity_Parameter.hxx \
+  /usr/local/opencascade/inc/Quantity_Length.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElC.hxx \
+  /usr/local/opencascade/inc/Extrema_POnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_Point.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_EPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_PCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Extrema_SeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/math_FunctionWithDerivative.hxx \
+  /usr/local/opencascade/inc/math_Function.hxx \
+  /usr/local/opencascade/inc/GeomAbs_CurveType.hxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.lxx \
+  /usr/local/opencascade/inc/BRepTools.hxx \
+  /usr/local/opencascade/inc/Standard_IStream.hxx \
+  /usr/local/opencascade/inc/TopExp.hxx \
+  /usr/local/opencascade/inc/TopAbs_ShapeEnum.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.hxx \
+  /usr/local/opencascade/inc/TopLoc_SListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_SListNodeOfSListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/TCollection_SList.lxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_Datum3D.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.lxx \
+  /usr/local/opencascade/inc/TopLoc_ItemLocation.hxx \
+  /usr/local/opencascade/inc/TopLoc_TrsfPtr.hxx \
+  /usr/local/opencascade/inc/TopAbs_Orientation.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_MapNode.hxx \
+  /usr/local/opencascade/inc/TCollection_List.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.lxx \
+  /usr/local/opencascade/inc/TopAbs.hxx \
+  /usr/local/opencascade/inc/TopAbs_State.hxx \
+  /usr/local/opencascade/inc/TopTools_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepLib_Command.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShapeModification.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Command.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepOffsetAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/Handle_BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.hxx \
+  /usr/local/opencascade/inc/TCollection_MapNodePtr.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.lxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedMapNodeOfIndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/TopTools_MapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_StdMapNodeOfMapOfShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.lxx \
+  /usr/local/opencascade/inc/BRepLProp_SLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/TopoDS_Face.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/LProp_Status.hxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt.hxx \
+  /usr/local/opencascade/inc/TCollection_Array1.lxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/Poly_Array1OfTriangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.lxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.lxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/GProp_GProps.hxx \
+  /usr/local/opencascade/inc/BRepGProp.hxx \
+  /usr/local/opencascade/inc/TopoDS.hxx \
+  /usr/local/opencascade/inc/TopoDS.lxx \
+  /usr/local/opencascade/inc/Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/TopoDS_Solid.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.hxx \
+  /usr/local/opencascade/inc/TopExp_Stack.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.lxx \
+  /usr/local/opencascade/inc/BRep_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder3D.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Wire.hxx \
+  /usr/local/opencascade/inc/BRepTools_WireExplorer.hxx \
+  /usr/local/opencascade/inc/TopoDS_Edge.hxx \
+  /usr/local/opencascade/inc/TopoDS_Vertex.hxx \
+  /usr/local/opencascade/inc/BRepLProp_CLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurveOnSurface.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.hxx \
+  /usr/local/opencascade/inc/XSControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_XSControl_WorkSession.hxx \
+  /usr/local/opencascade/inc/Handle_IFSelect_WorkSession.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/TopTools_SequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_SequenceNodeOfSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/IFSelect_ReturnStatus.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_InterfaceModel.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintCount.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESModel.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintFail.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.lxx \
+  /usr/local/opencascade/inc/STEPControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_StepData_StepModel.hxx \
+  /usr/local/opencascade/inc/IGESToBRep_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_IGESToBRep_Actor.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfTransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_TransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Handle_MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.lxx \
+  /usr/local/opencascade/inc/Interface_ParamType.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfInteger.hxx \
+  /usr/local/opencascade/inc/Interface_StaticSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Interface_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/Interface_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueType.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HExtendedString.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.lxx \
+  /usr/local/opencascade/inc/MoniTool_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfHAsciiString.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtCC.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.lxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.hxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.lxx \
+  /usr/local/opencascade/inc/ShapeUpgrade_ShellSewing.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_BasicMsgRegistrator.hxx \
+  /usr/local/opencascade/inc/Message_Gravity.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.lxx \
+  /usr/local/opencascade/inc/Precision.hxx \
+  /usr/local/opencascade/inc/Precision.lxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Edge.hxx \
+  /usr/local/opencascade/inc/ShapeExtend_Status.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Compound.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.lxx \
+  /usr/local/opencascade/inc/ShapeExtend.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_HSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.lxx \
+  /usr/local/opencascade/inc/BRepMesh.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IncrementalMesh.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.lxx \
+  /usr/local/opencascade/inc/BRepBndLib.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis.hxx \
+  /usr/local/opencascade/inc/ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/IGESControl_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_FinderProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForFinder.hxx \
+  /usr/local/opencascade/inc/IGESData_BasicEditor.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_Protocol.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Protocol.hxx \
+  /usr/local/opencascade/inc/Interface_GeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_NodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GeneralModule.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GlobalNodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/IGESData_SpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_NodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESEntity.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_SpecificModule.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_GlobalNodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/STEPControl_Writer.hxx \
+  /usr/local/opencascade/inc/STEPControl_StepModelType.hxx \
+  /usr/local/opencascade/inc/StlAPI_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_StlMesh_Mesh.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeTolerance.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_DataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_DataMapNodeOfDataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Fuse.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_BooleanOperation.hxx \
+  /usr/local/opencascade/inc/BOP_Operation.hxx \
+  /usr/local/opencascade/inc/BOPTools_PDSFiller.hxx \
+  /usr/local/opencascade/inc/BOP_PBuilder.hxx \
+  /usr/local/opencascade/inc/Handle_BOP_HistoryCollector.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.hxx \
+  /usr/local/opencascade/inc/BRepCheck_DataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_Result.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_DataMapNodeOfDataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.lxx \
+  /usr/local/opencascade/inc/BRepLib.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Plane.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/ShapeFix.hxx \
+  /usr/local/opencascade/inc/ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/TCollection_ListIterator.lxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.lxx \
+  /usr/local/opencascade/inc/Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeSphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Sphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Revolution.hxx \
+  /usr/local/opencascade/inc/BRepPrim_OneAxis.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.lxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeOneAxis.hxx \
+  /usr/local/opencascade/inc/TopTools_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Common.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Cut.hxx MVertex.h OCCEdge.h \
+  OCCFace.h
 OCCEdge.o: OCCEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
   GEdgeLoop.h Pair.h GRegion.h ../Common/Message.h OCCEdge.h OCCVertex.h \
-  OCCIncludes.h MVertex.h OCCFace.h ../Common/Context.h ../DataStr/List.h
+  OCCIncludes.h /usr/local/opencascade/inc/config.h \
+  /usr/local/opencascade/inc/BRep_Tool.hxx \
+  /usr/local/opencascade/inc/Standard_Boolean.hxx \
+  /usr/local/opencascade/inc/Standard_TypeDef.hxx \
+  /usr/local/opencascade/inc/Standard_Macro.hxx \
+  /usr/local/opencascade/inc/Standard_Stream.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Surface.hxx \
+  /usr/local/opencascade/inc/Standard.hxx \
+  /usr/local/opencascade/inc/Standard_Address.hxx \
+  /usr/local/opencascade/inc/Standard_Integer.hxx \
+  /usr/local/opencascade/inc/Standard_values.h \
+  /usr/local/opencascade/inc/Standard_OStream.hxx \
+  /usr/local/opencascade/inc/Standard_CString.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_PrimitiveTypes.hxx \
+  /usr/local/opencascade/inc/Standard_Real.hxx \
+  /usr/local/opencascade/inc/Standard_Character.hxx \
+  /usr/local/opencascade/inc/Standard_ctype.hxx \
+  /usr/local/opencascade/inc/Standard_ExtCharacter.hxx \
+  /usr/local/opencascade/inc/Standard_ExtString.hxx \
+  /usr/local/opencascade/inc/Standard_Storable.hxx \
+  /usr/local/opencascade/inc/Standard_Transient_proto.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon3D.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon2D.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_PolygonOnTriangulation.hxx \
+  /usr/local/opencascade/inc/GeomAbs_Shape.hxx \
+  /usr/local/opencascade/inc/Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_Type.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Type.hxx \
+  /usr/local/opencascade/inc/Standard_KindOfType.hxx \
+  /usr/local/opencascade/inc/Standard_Type.lxx \
+  /usr/local/opencascade/inc/Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Geom_Surface.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPS.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_SurfacePtr.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElS.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.lxx /usr/local/opencascade/inc/gp.hxx \
+  /usr/local/opencascade/inc/gp.lxx /usr/local/opencascade/inc/gp_Mat.hxx \
+  /usr/local/opencascade/inc/gp_Mat.lxx \
+  /usr/local/opencascade/inc/Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_SStream.hxx \
+  /usr/local/opencascade/inc/Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.lxx \
+  /usr/local/opencascade/inc/Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.lxx \
+  /usr/local/opencascade/inc/gp_Trsf.hxx \
+  /usr/local/opencascade/inc/gp_TrsfForm.hxx \
+  /usr/local/opencascade/inc/gp_Trsf.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.lxx \
+  /usr/local/opencascade/inc/gp_XY.hxx \
+  /usr/local/opencascade/inc/gp_XY.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.lxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.hxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec2d.hxx \
+  /usr/local/opencascade/inc/gp_Vec2d.lxx \
+  /usr/local/opencascade/inc/gp_Dir2d.hxx \
+  /usr/local/opencascade/inc/gp_Dir2d.lxx \
+  /usr/local/opencascade/inc/gp_Ax2d.hxx \
+  /usr/local/opencascade/inc/gp_Ax2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec.hxx \
+  /usr/local/opencascade/inc/gp_Vec.lxx \
+  /usr/local/opencascade/inc/gp_Dir.hxx \
+  /usr/local/opencascade/inc/gp_Dir.lxx \
+  /usr/local/opencascade/inc/gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Handle_gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.lxx \
+  /usr/local/opencascade/inc/Extrema_GenExtPS.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray2OfPnt.hxx \
+  /usr/local/opencascade/inc/Extrema_FuncExtPS.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfReal.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.lxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_SeqNode.hxx \
+  /usr/local/opencascade/inc/TCollection_Sequence.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/math_FunctionSetWithDerivatives.hxx \
+  /usr/local/opencascade/inc/math_FunctionSet.hxx \
+  /usr/local/opencascade/inc/GeomAbs_SurfaceType.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/Quantity_Parameter.hxx \
+  /usr/local/opencascade/inc/Quantity_Length.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElC.hxx \
+  /usr/local/opencascade/inc/Extrema_POnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_Point.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_EPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_PCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Extrema_SeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/math_FunctionWithDerivative.hxx \
+  /usr/local/opencascade/inc/math_Function.hxx \
+  /usr/local/opencascade/inc/GeomAbs_CurveType.hxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.lxx \
+  /usr/local/opencascade/inc/BRepTools.hxx \
+  /usr/local/opencascade/inc/Standard_IStream.hxx \
+  /usr/local/opencascade/inc/TopExp.hxx \
+  /usr/local/opencascade/inc/TopAbs_ShapeEnum.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.hxx \
+  /usr/local/opencascade/inc/TopLoc_SListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_SListNodeOfSListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/TCollection_SList.lxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_Datum3D.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.lxx \
+  /usr/local/opencascade/inc/TopLoc_ItemLocation.hxx \
+  /usr/local/opencascade/inc/TopLoc_TrsfPtr.hxx \
+  /usr/local/opencascade/inc/TopAbs_Orientation.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_MapNode.hxx \
+  /usr/local/opencascade/inc/TCollection_List.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.lxx \
+  /usr/local/opencascade/inc/TopAbs.hxx \
+  /usr/local/opencascade/inc/TopAbs_State.hxx \
+  /usr/local/opencascade/inc/TopTools_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepLib_Command.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShapeModification.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Command.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepOffsetAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/Handle_BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.hxx \
+  /usr/local/opencascade/inc/TCollection_MapNodePtr.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.lxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedMapNodeOfIndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/TopTools_MapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_StdMapNodeOfMapOfShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.lxx \
+  /usr/local/opencascade/inc/BRepLProp_SLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/TopoDS_Face.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/LProp_Status.hxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt.hxx \
+  /usr/local/opencascade/inc/TCollection_Array1.lxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/Poly_Array1OfTriangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.lxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.lxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/GProp_GProps.hxx \
+  /usr/local/opencascade/inc/BRepGProp.hxx \
+  /usr/local/opencascade/inc/TopoDS.hxx \
+  /usr/local/opencascade/inc/TopoDS.lxx \
+  /usr/local/opencascade/inc/Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/TopoDS_Solid.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.hxx \
+  /usr/local/opencascade/inc/TopExp_Stack.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.lxx \
+  /usr/local/opencascade/inc/BRep_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder3D.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Wire.hxx \
+  /usr/local/opencascade/inc/BRepTools_WireExplorer.hxx \
+  /usr/local/opencascade/inc/TopoDS_Edge.hxx \
+  /usr/local/opencascade/inc/TopoDS_Vertex.hxx \
+  /usr/local/opencascade/inc/BRepLProp_CLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurveOnSurface.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.hxx \
+  /usr/local/opencascade/inc/XSControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_XSControl_WorkSession.hxx \
+  /usr/local/opencascade/inc/Handle_IFSelect_WorkSession.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/TopTools_SequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_SequenceNodeOfSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/IFSelect_ReturnStatus.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_InterfaceModel.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintCount.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESModel.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintFail.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.lxx \
+  /usr/local/opencascade/inc/STEPControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_StepData_StepModel.hxx \
+  /usr/local/opencascade/inc/IGESToBRep_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_IGESToBRep_Actor.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfTransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_TransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Handle_MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.lxx \
+  /usr/local/opencascade/inc/Interface_ParamType.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfInteger.hxx \
+  /usr/local/opencascade/inc/Interface_StaticSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Interface_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/Interface_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueType.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HExtendedString.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.lxx \
+  /usr/local/opencascade/inc/MoniTool_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfHAsciiString.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtCC.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.lxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.hxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.lxx \
+  /usr/local/opencascade/inc/ShapeUpgrade_ShellSewing.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_BasicMsgRegistrator.hxx \
+  /usr/local/opencascade/inc/Message_Gravity.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.lxx \
+  /usr/local/opencascade/inc/Precision.hxx \
+  /usr/local/opencascade/inc/Precision.lxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Edge.hxx \
+  /usr/local/opencascade/inc/ShapeExtend_Status.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Compound.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.lxx \
+  /usr/local/opencascade/inc/ShapeExtend.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_HSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.lxx \
+  /usr/local/opencascade/inc/BRepMesh.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IncrementalMesh.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.lxx \
+  /usr/local/opencascade/inc/BRepBndLib.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis.hxx \
+  /usr/local/opencascade/inc/ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/IGESControl_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_FinderProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForFinder.hxx \
+  /usr/local/opencascade/inc/IGESData_BasicEditor.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_Protocol.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Protocol.hxx \
+  /usr/local/opencascade/inc/Interface_GeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_NodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GeneralModule.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GlobalNodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/IGESData_SpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_NodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESEntity.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_SpecificModule.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_GlobalNodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/STEPControl_Writer.hxx \
+  /usr/local/opencascade/inc/STEPControl_StepModelType.hxx \
+  /usr/local/opencascade/inc/StlAPI_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_StlMesh_Mesh.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeTolerance.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_DataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_DataMapNodeOfDataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Fuse.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_BooleanOperation.hxx \
+  /usr/local/opencascade/inc/BOP_Operation.hxx \
+  /usr/local/opencascade/inc/BOPTools_PDSFiller.hxx \
+  /usr/local/opencascade/inc/BOP_PBuilder.hxx \
+  /usr/local/opencascade/inc/Handle_BOP_HistoryCollector.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.hxx \
+  /usr/local/opencascade/inc/BRepCheck_DataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_Result.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_DataMapNodeOfDataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.lxx \
+  /usr/local/opencascade/inc/BRepLib.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Plane.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/ShapeFix.hxx \
+  /usr/local/opencascade/inc/ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/TCollection_ListIterator.lxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.lxx \
+  /usr/local/opencascade/inc/Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeSphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Sphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Revolution.hxx \
+  /usr/local/opencascade/inc/BRepPrim_OneAxis.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.lxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeOneAxis.hxx \
+  /usr/local/opencascade/inc/TopTools_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Common.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Cut.hxx MVertex.h OCCFace.h \
+  ../Common/Context.h ../DataStr/List.h \
+  /usr/local/opencascade/inc/Geom2dLProp_CLProps2d.hxx \
+  /usr/local/opencascade/inc/Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfReal.hxx \
+  /usr/local/opencascade/inc/Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Geom_OffsetCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_OffsetCurve.hxx \
+  /usr/local/opencascade/inc/Geom_Ellipse.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Ellipse.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Conic.hxx \
+  /usr/local/opencascade/inc/Geom_Conic.hxx \
+  /usr/local/opencascade/inc/Geom_Parabola.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Parabola.hxx \
+  /usr/local/opencascade/inc/Geom_Hyperbola.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Hyperbola.hxx \
+  /usr/local/opencascade/inc/Geom_TrimmedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_TrimmedCurve.hxx \
+  /usr/local/opencascade/inc/Geom_Circle.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Circle.hxx \
+  /usr/local/opencascade/inc/Geom_Line.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Line.hxx
 OCCFace.o: OCCFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h ../Common/Message.h ../Numeric/Numeric.h \
+  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h \
+  /usr/local/opencascade/inc/config.h \
+  /usr/local/opencascade/inc/BRep_Tool.hxx \
+  /usr/local/opencascade/inc/Standard_Boolean.hxx \
+  /usr/local/opencascade/inc/Standard_TypeDef.hxx \
+  /usr/local/opencascade/inc/Standard_Macro.hxx \
+  /usr/local/opencascade/inc/Standard_Stream.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Surface.hxx \
+  /usr/local/opencascade/inc/Standard.hxx \
+  /usr/local/opencascade/inc/Standard_Address.hxx \
+  /usr/local/opencascade/inc/Standard_Integer.hxx \
+  /usr/local/opencascade/inc/Standard_values.h \
+  /usr/local/opencascade/inc/Standard_OStream.hxx \
+  /usr/local/opencascade/inc/Standard_CString.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_PrimitiveTypes.hxx \
+  /usr/local/opencascade/inc/Standard_Real.hxx \
+  /usr/local/opencascade/inc/Standard_Character.hxx \
+  /usr/local/opencascade/inc/Standard_ctype.hxx \
+  /usr/local/opencascade/inc/Standard_ExtCharacter.hxx \
+  /usr/local/opencascade/inc/Standard_ExtString.hxx \
+  /usr/local/opencascade/inc/Standard_Storable.hxx \
+  /usr/local/opencascade/inc/Standard_Transient_proto.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon3D.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon2D.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_PolygonOnTriangulation.hxx \
+  /usr/local/opencascade/inc/GeomAbs_Shape.hxx \
+  /usr/local/opencascade/inc/Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_Type.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Type.hxx \
+  /usr/local/opencascade/inc/Standard_KindOfType.hxx \
+  /usr/local/opencascade/inc/Standard_Type.lxx \
+  /usr/local/opencascade/inc/Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Geom_Surface.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPS.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_SurfacePtr.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElS.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.lxx /usr/local/opencascade/inc/gp.hxx \
+  /usr/local/opencascade/inc/gp.lxx /usr/local/opencascade/inc/gp_Mat.hxx \
+  /usr/local/opencascade/inc/gp_Mat.lxx \
+  /usr/local/opencascade/inc/Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_SStream.hxx \
+  /usr/local/opencascade/inc/Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.lxx \
+  /usr/local/opencascade/inc/Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.lxx \
+  /usr/local/opencascade/inc/gp_Trsf.hxx \
+  /usr/local/opencascade/inc/gp_TrsfForm.hxx \
+  /usr/local/opencascade/inc/gp_Trsf.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.lxx \
+  /usr/local/opencascade/inc/gp_XY.hxx \
+  /usr/local/opencascade/inc/gp_XY.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.lxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.hxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec2d.hxx \
+  /usr/local/opencascade/inc/gp_Vec2d.lxx \
+  /usr/local/opencascade/inc/gp_Dir2d.hxx \
+  /usr/local/opencascade/inc/gp_Dir2d.lxx \
+  /usr/local/opencascade/inc/gp_Ax2d.hxx \
+  /usr/local/opencascade/inc/gp_Ax2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec.hxx \
+  /usr/local/opencascade/inc/gp_Vec.lxx \
+  /usr/local/opencascade/inc/gp_Dir.hxx \
+  /usr/local/opencascade/inc/gp_Dir.lxx \
+  /usr/local/opencascade/inc/gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Handle_gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.lxx \
+  /usr/local/opencascade/inc/Extrema_GenExtPS.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray2OfPnt.hxx \
+  /usr/local/opencascade/inc/Extrema_FuncExtPS.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfReal.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.lxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_SeqNode.hxx \
+  /usr/local/opencascade/inc/TCollection_Sequence.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/math_FunctionSetWithDerivatives.hxx \
+  /usr/local/opencascade/inc/math_FunctionSet.hxx \
+  /usr/local/opencascade/inc/GeomAbs_SurfaceType.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/Quantity_Parameter.hxx \
+  /usr/local/opencascade/inc/Quantity_Length.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElC.hxx \
+  /usr/local/opencascade/inc/Extrema_POnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_Point.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_EPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_PCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Extrema_SeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/math_FunctionWithDerivative.hxx \
+  /usr/local/opencascade/inc/math_Function.hxx \
+  /usr/local/opencascade/inc/GeomAbs_CurveType.hxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.lxx \
+  /usr/local/opencascade/inc/BRepTools.hxx \
+  /usr/local/opencascade/inc/Standard_IStream.hxx \
+  /usr/local/opencascade/inc/TopExp.hxx \
+  /usr/local/opencascade/inc/TopAbs_ShapeEnum.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.hxx \
+  /usr/local/opencascade/inc/TopLoc_SListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_SListNodeOfSListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/TCollection_SList.lxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_Datum3D.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.lxx \
+  /usr/local/opencascade/inc/TopLoc_ItemLocation.hxx \
+  /usr/local/opencascade/inc/TopLoc_TrsfPtr.hxx \
+  /usr/local/opencascade/inc/TopAbs_Orientation.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_MapNode.hxx \
+  /usr/local/opencascade/inc/TCollection_List.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.lxx \
+  /usr/local/opencascade/inc/TopAbs.hxx \
+  /usr/local/opencascade/inc/TopAbs_State.hxx \
+  /usr/local/opencascade/inc/TopTools_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepLib_Command.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShapeModification.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Command.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepOffsetAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/Handle_BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.hxx \
+  /usr/local/opencascade/inc/TCollection_MapNodePtr.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.lxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedMapNodeOfIndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/TopTools_MapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_StdMapNodeOfMapOfShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.lxx \
+  /usr/local/opencascade/inc/BRepLProp_SLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/TopoDS_Face.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/LProp_Status.hxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt.hxx \
+  /usr/local/opencascade/inc/TCollection_Array1.lxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/Poly_Array1OfTriangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.lxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.lxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/GProp_GProps.hxx \
+  /usr/local/opencascade/inc/BRepGProp.hxx \
+  /usr/local/opencascade/inc/TopoDS.hxx \
+  /usr/local/opencascade/inc/TopoDS.lxx \
+  /usr/local/opencascade/inc/Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/TopoDS_Solid.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.hxx \
+  /usr/local/opencascade/inc/TopExp_Stack.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.lxx \
+  /usr/local/opencascade/inc/BRep_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder3D.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Wire.hxx \
+  /usr/local/opencascade/inc/BRepTools_WireExplorer.hxx \
+  /usr/local/opencascade/inc/TopoDS_Edge.hxx \
+  /usr/local/opencascade/inc/TopoDS_Vertex.hxx \
+  /usr/local/opencascade/inc/BRepLProp_CLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurveOnSurface.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.hxx \
+  /usr/local/opencascade/inc/XSControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_XSControl_WorkSession.hxx \
+  /usr/local/opencascade/inc/Handle_IFSelect_WorkSession.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/TopTools_SequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_SequenceNodeOfSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/IFSelect_ReturnStatus.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_InterfaceModel.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintCount.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESModel.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintFail.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.lxx \
+  /usr/local/opencascade/inc/STEPControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_StepData_StepModel.hxx \
+  /usr/local/opencascade/inc/IGESToBRep_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_IGESToBRep_Actor.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfTransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_TransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Handle_MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.lxx \
+  /usr/local/opencascade/inc/Interface_ParamType.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfInteger.hxx \
+  /usr/local/opencascade/inc/Interface_StaticSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Interface_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/Interface_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueType.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HExtendedString.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.lxx \
+  /usr/local/opencascade/inc/MoniTool_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfHAsciiString.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtCC.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.lxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.hxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.lxx \
+  /usr/local/opencascade/inc/ShapeUpgrade_ShellSewing.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_BasicMsgRegistrator.hxx \
+  /usr/local/opencascade/inc/Message_Gravity.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.lxx \
+  /usr/local/opencascade/inc/Precision.hxx \
+  /usr/local/opencascade/inc/Precision.lxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Edge.hxx \
+  /usr/local/opencascade/inc/ShapeExtend_Status.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Compound.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.lxx \
+  /usr/local/opencascade/inc/ShapeExtend.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_HSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.lxx \
+  /usr/local/opencascade/inc/BRepMesh.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IncrementalMesh.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.lxx \
+  /usr/local/opencascade/inc/BRepBndLib.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis.hxx \
+  /usr/local/opencascade/inc/ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/IGESControl_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_FinderProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForFinder.hxx \
+  /usr/local/opencascade/inc/IGESData_BasicEditor.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_Protocol.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Protocol.hxx \
+  /usr/local/opencascade/inc/Interface_GeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_NodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GeneralModule.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GlobalNodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/IGESData_SpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_NodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESEntity.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_SpecificModule.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_GlobalNodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/STEPControl_Writer.hxx \
+  /usr/local/opencascade/inc/STEPControl_StepModelType.hxx \
+  /usr/local/opencascade/inc/StlAPI_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_StlMesh_Mesh.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeTolerance.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_DataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_DataMapNodeOfDataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Fuse.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_BooleanOperation.hxx \
+  /usr/local/opencascade/inc/BOP_Operation.hxx \
+  /usr/local/opencascade/inc/BOPTools_PDSFiller.hxx \
+  /usr/local/opencascade/inc/BOP_PBuilder.hxx \
+  /usr/local/opencascade/inc/Handle_BOP_HistoryCollector.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.hxx \
+  /usr/local/opencascade/inc/BRepCheck_DataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_Result.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_DataMapNodeOfDataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.lxx \
+  /usr/local/opencascade/inc/BRepLib.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Plane.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/ShapeFix.hxx \
+  /usr/local/opencascade/inc/ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/TCollection_ListIterator.lxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.lxx \
+  /usr/local/opencascade/inc/Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeSphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Sphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Revolution.hxx \
+  /usr/local/opencascade/inc/BRepPrim_OneAxis.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.lxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeOneAxis.hxx \
+  /usr/local/opencascade/inc/TopTools_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Common.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Cut.hxx MVertex.h OCCEdge.h \
+  OCCFace.h ../Common/Message.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Common/VertexArray.h ../Geo/SVector3.h \
-  ../Common/Context.h ../DataStr/List.h
+  ../Common/Context.h ../DataStr/List.h \
+  /usr/local/opencascade/inc/Geom_CylindricalSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_CylindricalSurface.hxx \
+  /usr/local/opencascade/inc/Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/gp_Ax3.hxx \
+  /usr/local/opencascade/inc/gp_Ax3.lxx \
+  /usr/local/opencascade/inc/Geom_ConicalSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ConicalSurface.hxx \
+  /usr/local/opencascade/inc/Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/GeomAbs_BSplKnotDistribution.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray2OfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfInteger.hxx \
+  /usr/local/opencascade/inc/Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Geom_SphericalSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_SphericalSurface.hxx \
+  /usr/local/opencascade/inc/Geom_ToroidalSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ToroidalSurface.hxx \
+  /usr/local/opencascade/inc/Geom_SurfaceOfRevolution.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_SurfaceOfRevolution.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_SweptSurface.hxx \
+  /usr/local/opencascade/inc/Geom_SweptSurface.hxx \
+  /usr/local/opencascade/inc/Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Geom_Plane.hxx \
+  /usr/local/opencascade/inc/gp_Pln.hxx \
+  /usr/local/opencascade/inc/gp_Pln.lxx \
+  /usr/local/opencascade/inc/gp_Lin.hxx \
+  /usr/local/opencascade/inc/gp_Lin.lxx \
+  /usr/local/opencascade/inc/BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfVertexInteger.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfVertexInteger.hxx \
+  /usr/local/opencascade/inc/MeshShape_DataMapOfShapeListOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_MeshShape_DataMapNodeOfDataMapOfShapeListOfTransient.hxx \
+  /usr/local/opencascade/inc/MeshShape_DataMapOfIntegerPnt.hxx \
+  /usr/local/opencascade/inc/Handle_MeshShape_DataMapNodeOfDataMapOfIntegerPnt.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IndexedMapOfVertex.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_IndexedMapNodeOfIndexedMapOfVertex.hxx \
+  /usr/local/opencascade/inc/TColStd_IndexedMapOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_IndexedMapNodeOfIndexedMapOfInteger.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfIntegerListOfXY.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfIntegerListOfXY.hxx \
+  /usr/local/opencascade/inc/BRepMesh_Status.hxx \
+  /usr/local/opencascade/inc/TColStd_IndexedMapOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_IndexedMapNodeOfIndexedMapOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepAdaptor_HSurface.hxx \
+  /usr/local/opencascade/inc/BRepMesh_FastDiscret.lxx
 OCCRegion.o: OCCRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h OCCRegion.h ../Common/Message.h
+  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h \
+  /usr/local/opencascade/inc/config.h \
+  /usr/local/opencascade/inc/BRep_Tool.hxx \
+  /usr/local/opencascade/inc/Standard_Boolean.hxx \
+  /usr/local/opencascade/inc/Standard_TypeDef.hxx \
+  /usr/local/opencascade/inc/Standard_Macro.hxx \
+  /usr/local/opencascade/inc/Standard_Stream.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Surface.hxx \
+  /usr/local/opencascade/inc/Standard.hxx \
+  /usr/local/opencascade/inc/Standard_Address.hxx \
+  /usr/local/opencascade/inc/Standard_Integer.hxx \
+  /usr/local/opencascade/inc/Standard_values.h \
+  /usr/local/opencascade/inc/Standard_OStream.hxx \
+  /usr/local/opencascade/inc/Standard_CString.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_PrimitiveTypes.hxx \
+  /usr/local/opencascade/inc/Standard_Real.hxx \
+  /usr/local/opencascade/inc/Standard_Character.hxx \
+  /usr/local/opencascade/inc/Standard_ctype.hxx \
+  /usr/local/opencascade/inc/Standard_ExtCharacter.hxx \
+  /usr/local/opencascade/inc/Standard_ExtString.hxx \
+  /usr/local/opencascade/inc/Standard_Storable.hxx \
+  /usr/local/opencascade/inc/Standard_Transient_proto.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon3D.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon2D.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_PolygonOnTriangulation.hxx \
+  /usr/local/opencascade/inc/GeomAbs_Shape.hxx \
+  /usr/local/opencascade/inc/Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_Type.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Type.hxx \
+  /usr/local/opencascade/inc/Standard_KindOfType.hxx \
+  /usr/local/opencascade/inc/Standard_Type.lxx \
+  /usr/local/opencascade/inc/Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Geom_Surface.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPS.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_SurfacePtr.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElS.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.lxx /usr/local/opencascade/inc/gp.hxx \
+  /usr/local/opencascade/inc/gp.lxx /usr/local/opencascade/inc/gp_Mat.hxx \
+  /usr/local/opencascade/inc/gp_Mat.lxx \
+  /usr/local/opencascade/inc/Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_SStream.hxx \
+  /usr/local/opencascade/inc/Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.lxx \
+  /usr/local/opencascade/inc/Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.lxx \
+  /usr/local/opencascade/inc/gp_Trsf.hxx \
+  /usr/local/opencascade/inc/gp_TrsfForm.hxx \
+  /usr/local/opencascade/inc/gp_Trsf.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.lxx \
+  /usr/local/opencascade/inc/gp_XY.hxx \
+  /usr/local/opencascade/inc/gp_XY.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.lxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.hxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec2d.hxx \
+  /usr/local/opencascade/inc/gp_Vec2d.lxx \
+  /usr/local/opencascade/inc/gp_Dir2d.hxx \
+  /usr/local/opencascade/inc/gp_Dir2d.lxx \
+  /usr/local/opencascade/inc/gp_Ax2d.hxx \
+  /usr/local/opencascade/inc/gp_Ax2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec.hxx \
+  /usr/local/opencascade/inc/gp_Vec.lxx \
+  /usr/local/opencascade/inc/gp_Dir.hxx \
+  /usr/local/opencascade/inc/gp_Dir.lxx \
+  /usr/local/opencascade/inc/gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Handle_gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.lxx \
+  /usr/local/opencascade/inc/Extrema_GenExtPS.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray2OfPnt.hxx \
+  /usr/local/opencascade/inc/Extrema_FuncExtPS.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfReal.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.lxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_SeqNode.hxx \
+  /usr/local/opencascade/inc/TCollection_Sequence.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/math_FunctionSetWithDerivatives.hxx \
+  /usr/local/opencascade/inc/math_FunctionSet.hxx \
+  /usr/local/opencascade/inc/GeomAbs_SurfaceType.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/Quantity_Parameter.hxx \
+  /usr/local/opencascade/inc/Quantity_Length.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElC.hxx \
+  /usr/local/opencascade/inc/Extrema_POnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_Point.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_EPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_PCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Extrema_SeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/math_FunctionWithDerivative.hxx \
+  /usr/local/opencascade/inc/math_Function.hxx \
+  /usr/local/opencascade/inc/GeomAbs_CurveType.hxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.lxx \
+  /usr/local/opencascade/inc/BRepTools.hxx \
+  /usr/local/opencascade/inc/Standard_IStream.hxx \
+  /usr/local/opencascade/inc/TopExp.hxx \
+  /usr/local/opencascade/inc/TopAbs_ShapeEnum.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.hxx \
+  /usr/local/opencascade/inc/TopLoc_SListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_SListNodeOfSListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/TCollection_SList.lxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_Datum3D.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.lxx \
+  /usr/local/opencascade/inc/TopLoc_ItemLocation.hxx \
+  /usr/local/opencascade/inc/TopLoc_TrsfPtr.hxx \
+  /usr/local/opencascade/inc/TopAbs_Orientation.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_MapNode.hxx \
+  /usr/local/opencascade/inc/TCollection_List.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.lxx \
+  /usr/local/opencascade/inc/TopAbs.hxx \
+  /usr/local/opencascade/inc/TopAbs_State.hxx \
+  /usr/local/opencascade/inc/TopTools_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepLib_Command.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShapeModification.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Command.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepOffsetAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/Handle_BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.hxx \
+  /usr/local/opencascade/inc/TCollection_MapNodePtr.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.lxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedMapNodeOfIndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/TopTools_MapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_StdMapNodeOfMapOfShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.lxx \
+  /usr/local/opencascade/inc/BRepLProp_SLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/TopoDS_Face.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/LProp_Status.hxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt.hxx \
+  /usr/local/opencascade/inc/TCollection_Array1.lxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/Poly_Array1OfTriangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.lxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.lxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/GProp_GProps.hxx \
+  /usr/local/opencascade/inc/BRepGProp.hxx \
+  /usr/local/opencascade/inc/TopoDS.hxx \
+  /usr/local/opencascade/inc/TopoDS.lxx \
+  /usr/local/opencascade/inc/Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/TopoDS_Solid.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.hxx \
+  /usr/local/opencascade/inc/TopExp_Stack.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.lxx \
+  /usr/local/opencascade/inc/BRep_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder3D.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Wire.hxx \
+  /usr/local/opencascade/inc/BRepTools_WireExplorer.hxx \
+  /usr/local/opencascade/inc/TopoDS_Edge.hxx \
+  /usr/local/opencascade/inc/TopoDS_Vertex.hxx \
+  /usr/local/opencascade/inc/BRepLProp_CLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurveOnSurface.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.hxx \
+  /usr/local/opencascade/inc/XSControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_XSControl_WorkSession.hxx \
+  /usr/local/opencascade/inc/Handle_IFSelect_WorkSession.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/TopTools_SequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_SequenceNodeOfSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/IFSelect_ReturnStatus.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_InterfaceModel.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintCount.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESModel.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintFail.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.lxx \
+  /usr/local/opencascade/inc/STEPControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_StepData_StepModel.hxx \
+  /usr/local/opencascade/inc/IGESToBRep_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_IGESToBRep_Actor.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfTransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_TransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Handle_MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.lxx \
+  /usr/local/opencascade/inc/Interface_ParamType.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfInteger.hxx \
+  /usr/local/opencascade/inc/Interface_StaticSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Interface_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/Interface_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueType.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HExtendedString.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.lxx \
+  /usr/local/opencascade/inc/MoniTool_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfHAsciiString.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtCC.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.lxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.hxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.lxx \
+  /usr/local/opencascade/inc/ShapeUpgrade_ShellSewing.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_BasicMsgRegistrator.hxx \
+  /usr/local/opencascade/inc/Message_Gravity.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.lxx \
+  /usr/local/opencascade/inc/Precision.hxx \
+  /usr/local/opencascade/inc/Precision.lxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Edge.hxx \
+  /usr/local/opencascade/inc/ShapeExtend_Status.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Compound.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.lxx \
+  /usr/local/opencascade/inc/ShapeExtend.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_HSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.lxx \
+  /usr/local/opencascade/inc/BRepMesh.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IncrementalMesh.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.lxx \
+  /usr/local/opencascade/inc/BRepBndLib.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis.hxx \
+  /usr/local/opencascade/inc/ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/IGESControl_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_FinderProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForFinder.hxx \
+  /usr/local/opencascade/inc/IGESData_BasicEditor.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_Protocol.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Protocol.hxx \
+  /usr/local/opencascade/inc/Interface_GeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_NodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GeneralModule.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GlobalNodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/IGESData_SpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_NodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESEntity.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_SpecificModule.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_GlobalNodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/STEPControl_Writer.hxx \
+  /usr/local/opencascade/inc/STEPControl_StepModelType.hxx \
+  /usr/local/opencascade/inc/StlAPI_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_StlMesh_Mesh.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeTolerance.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_DataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_DataMapNodeOfDataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Fuse.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_BooleanOperation.hxx \
+  /usr/local/opencascade/inc/BOP_Operation.hxx \
+  /usr/local/opencascade/inc/BOPTools_PDSFiller.hxx \
+  /usr/local/opencascade/inc/BOP_PBuilder.hxx \
+  /usr/local/opencascade/inc/Handle_BOP_HistoryCollector.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.hxx \
+  /usr/local/opencascade/inc/BRepCheck_DataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_Result.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_DataMapNodeOfDataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.lxx \
+  /usr/local/opencascade/inc/BRepLib.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Plane.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/ShapeFix.hxx \
+  /usr/local/opencascade/inc/ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/TCollection_ListIterator.lxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.lxx \
+  /usr/local/opencascade/inc/Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeSphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Sphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Revolution.hxx \
+  /usr/local/opencascade/inc/BRepPrim_OneAxis.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.lxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeOneAxis.hxx \
+  /usr/local/opencascade/inc/TopTools_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Common.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Cut.hxx MVertex.h OCCEdge.h \
+  OCCFace.h OCCRegion.h ../Common/Message.h
 fourierEdge.o: fourierEdge.cpp fourierEdge.h GEdge.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h \
   GModel.h GFace.h GEdgeLoop.h Pair.h GRegion.h fourierVertex.h MVertex.h \
@@ -162,12 +1862,12 @@ GModel.o: GModel.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   MVertex.h MEdge.h MFace.h ../Common/Message.h gmshSurface.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Mesh/Field.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/Geo.h \
-  ../Geo/gmshSurface.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Geo/GEdge.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h ../Mesh/BackgroundMesh.h \
-  ../Common/Context.h
+  ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../contrib/ANN/include/ANN/ANN.h ../Geo/Geo.h ../Geo/gmshSurface.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../Geo/SPoint2.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Geo/GEdge.h \
+  ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
+  ../Mesh/BackgroundMesh.h ../Common/Context.h
 GModelIO_Geo.o: GModelIO_Geo.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
   GFace.h GEdgeLoop.h Pair.h GRegion.h Geo.h ../Common/GmshDefines.h \
@@ -187,8 +1887,407 @@ GModelIO_Mesh.o: GModelIO_Mesh.cpp GModel.h GVertex.h GEntity.h Range.h \
 GModelIO_OCC.o: GModelIO_OCC.cpp GModelIO_OCC.h GModel.h GVertex.h \
   GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
   SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h OCCIncludes.h \
-  ../Common/Message.h ../Common/Context.h ../DataStr/List.h OCCVertex.h \
-  MVertex.h OCCEdge.h OCCFace.h OCCRegion.h
+  /usr/local/opencascade/inc/config.h \
+  /usr/local/opencascade/inc/BRep_Tool.hxx \
+  /usr/local/opencascade/inc/Standard_Boolean.hxx \
+  /usr/local/opencascade/inc/Standard_TypeDef.hxx \
+  /usr/local/opencascade/inc/Standard_Macro.hxx \
+  /usr/local/opencascade/inc/Standard_Stream.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Surface.hxx \
+  /usr/local/opencascade/inc/Standard.hxx \
+  /usr/local/opencascade/inc/Standard_Address.hxx \
+  /usr/local/opencascade/inc/Standard_Integer.hxx \
+  /usr/local/opencascade/inc/Standard_values.h \
+  /usr/local/opencascade/inc/Standard_OStream.hxx \
+  /usr/local/opencascade/inc/Standard_CString.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_PrimitiveTypes.hxx \
+  /usr/local/opencascade/inc/Standard_Real.hxx \
+  /usr/local/opencascade/inc/Standard_Character.hxx \
+  /usr/local/opencascade/inc/Standard_ctype.hxx \
+  /usr/local/opencascade/inc/Standard_ExtCharacter.hxx \
+  /usr/local/opencascade/inc/Standard_ExtString.hxx \
+  /usr/local/opencascade/inc/Standard_Storable.hxx \
+  /usr/local/opencascade/inc/Standard_Transient_proto.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon3D.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_Polygon2D.hxx \
+  /usr/local/opencascade/inc/Handle_Poly_PolygonOnTriangulation.hxx \
+  /usr/local/opencascade/inc/GeomAbs_Shape.hxx \
+  /usr/local/opencascade/inc/Geom_Curve.hxx \
+  /usr/local/opencascade/inc/Geom_Geometry.hxx \
+  /usr/local/opencascade/inc/MMgt_TShared.hxx \
+  /usr/local/opencascade/inc/Standard_Transient.hxx \
+  /usr/local/opencascade/inc/Standard_Type.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Type.hxx \
+  /usr/local/opencascade/inc/Standard_KindOfType.hxx \
+  /usr/local/opencascade/inc/Standard_Type.lxx \
+  /usr/local/opencascade/inc/Geom2d_Curve.hxx \
+  /usr/local/opencascade/inc/Geom2d_Geometry.hxx \
+  /usr/local/opencascade/inc/Geom_Surface.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPS.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_SurfacePtr.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElS.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.hxx \
+  /usr/local/opencascade/inc/gp_XYZ.lxx /usr/local/opencascade/inc/gp.hxx \
+  /usr/local/opencascade/inc/gp.lxx /usr/local/opencascade/inc/gp_Mat.hxx \
+  /usr/local/opencascade/inc/gp_Mat.lxx \
+  /usr/local/opencascade/inc/Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_OutOfRange.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_SStream.hxx \
+  /usr/local/opencascade/inc/Standard_RangeError.hxx \
+  /usr/local/opencascade/inc/Standard_DomainError.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.hxx \
+  /usr/local/opencascade/inc/Standard_Failure.lxx \
+  /usr/local/opencascade/inc/Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_ConstructionError.hxx \
+  /usr/local/opencascade/inc/gp_Pnt.lxx \
+  /usr/local/opencascade/inc/gp_Trsf.hxx \
+  /usr/local/opencascade/inc/gp_TrsfForm.hxx \
+  /usr/local/opencascade/inc/gp_Trsf.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.hxx \
+  /usr/local/opencascade/inc/gp_Mat2d.lxx \
+  /usr/local/opencascade/inc/gp_XY.hxx \
+  /usr/local/opencascade/inc/gp_XY.lxx \
+  /usr/local/opencascade/inc/gp_Trsf2d.lxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.hxx \
+  /usr/local/opencascade/inc/gp_Pnt2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec2d.hxx \
+  /usr/local/opencascade/inc/gp_Vec2d.lxx \
+  /usr/local/opencascade/inc/gp_Dir2d.hxx \
+  /usr/local/opencascade/inc/gp_Dir2d.lxx \
+  /usr/local/opencascade/inc/gp_Ax2d.hxx \
+  /usr/local/opencascade/inc/gp_Ax2d.lxx \
+  /usr/local/opencascade/inc/gp_Vec.hxx \
+  /usr/local/opencascade/inc/gp_Vec.lxx \
+  /usr/local/opencascade/inc/gp_Dir.hxx \
+  /usr/local/opencascade/inc/gp_Dir.lxx \
+  /usr/local/opencascade/inc/gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Handle_gp_VectorWithNullMagnitude.hxx \
+  /usr/local/opencascade/inc/Extrema_POnSurf.lxx \
+  /usr/local/opencascade/inc/Extrema_GenExtPS.hxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray2OfPnt.hxx \
+  /usr/local/opencascade/inc/Extrema_FuncExtPS.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfReal.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.hxx \
+  /usr/local/opencascade/inc/TCollection_BaseSequence.lxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_SeqNode.hxx \
+  /usr/local/opencascade/inc/TCollection_Sequence.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnSurf.hxx \
+  /usr/local/opencascade/inc/math_FunctionSetWithDerivatives.hxx \
+  /usr/local/opencascade/inc/math_FunctionSet.hxx \
+  /usr/local/opencascade/inc/GeomAbs_SurfaceType.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineSurface.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/Quantity_Parameter.hxx \
+  /usr/local/opencascade/inc/Quantity_Length.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnSurf.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtPElC.hxx \
+  /usr/local/opencascade/inc/Extrema_POnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_Point.lxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfPOnCurv.hxx \
+  /usr/local/opencascade/inc/Extrema_EPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Extrema_PCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/Extrema_SeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSeqPCOfPCFOfEPCOfExtPC.hxx \
+  /usr/local/opencascade/inc/math_FunctionWithDerivative.hxx \
+  /usr/local/opencascade/inc/math_Function.hxx \
+  /usr/local/opencascade/inc/GeomAbs_CurveType.hxx \
+  /usr/local/opencascade/inc/Extrema_SequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/Handle_Extrema_SequenceNodeOfSequenceOfBoolean.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Adaptor3d_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BezierCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BoundedCurve.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_BSplineCurve.hxx \
+  /usr/local/opencascade/inc/GeomAdaptor_Curve.lxx \
+  /usr/local/opencascade/inc/GeomAPI_ProjectPointOnCurve.lxx \
+  /usr/local/opencascade/inc/BRepTools.hxx \
+  /usr/local/opencascade/inc/Standard_IStream.hxx \
+  /usr/local/opencascade/inc/TopExp.hxx \
+  /usr/local/opencascade/inc/TopAbs_ShapeEnum.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeVertex.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.hxx \
+  /usr/local/opencascade/inc/TopLoc_SListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_SListNodeOfSListOfItemLocation.hxx \
+  /usr/local/opencascade/inc/TCollection_SList.lxx \
+  /usr/local/opencascade/inc/Handle_TopLoc_Datum3D.hxx \
+  /usr/local/opencascade/inc/TopLoc_Location.lxx \
+  /usr/local/opencascade/inc/TopLoc_ItemLocation.hxx \
+  /usr/local/opencascade/inc/TopLoc_TrsfPtr.hxx \
+  /usr/local/opencascade/inc/TopAbs_Orientation.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shape.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopoDS_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_MapNode.hxx \
+  /usr/local/opencascade/inc/TCollection_List.lxx \
+  /usr/local/opencascade/inc/TopoDS_TShape.lxx \
+  /usr/local/opencascade/inc/TopAbs.hxx \
+  /usr/local/opencascade/inc/TopAbs_State.hxx \
+  /usr/local/opencascade/inc/TopTools_ListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_ListNodeOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepLib_Command.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShapeModification.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Command.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeShell.hxx \
+  /usr/local/opencascade/inc/BRepLib_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_ShellError.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepLib_MakeSolid.hxx \
+  /usr/local/opencascade/inc/BRepOffsetAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/Handle_BRepBuilderAPI_Sewing.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.hxx \
+  /usr/local/opencascade/inc/TCollection_MapNodePtr.hxx \
+  /usr/local/opencascade/inc/TCollection_BasicMap.lxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedMapNodeOfIndexedMapOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_IndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_IndexedDataMapNodeOfIndexedDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeShape.hxx \
+  /usr/local/opencascade/inc/TopTools_DataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_DataMapNodeOfDataMapOfShapeListOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/TopTools_MapOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_StdMapNodeOfMapOfShape.hxx \
+  /usr/local/opencascade/inc/BRepBuilderAPI_Sewing.lxx \
+  /usr/local/opencascade/inc/BRepLProp_SLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.hxx \
+  /usr/local/opencascade/inc/TopoDS_Face.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Surface.lxx \
+  /usr/local/opencascade/inc/LProp_Status.hxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.hxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt.hxx \
+  /usr/local/opencascade/inc/TCollection_Array1.lxx \
+  /usr/local/opencascade/inc/Handle_TColgp_HArray1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/Poly_Array1OfTriangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.hxx \
+  /usr/local/opencascade/inc/Poly_Triangle.lxx \
+  /usr/local/opencascade/inc/Poly_Triangulation.lxx \
+  /usr/local/opencascade/inc/TColgp_Array1OfPnt2d.hxx \
+  /usr/local/opencascade/inc/GProp_GProps.hxx \
+  /usr/local/opencascade/inc/BRepGProp.hxx \
+  /usr/local/opencascade/inc/TopoDS.hxx \
+  /usr/local/opencascade/inc/TopoDS.lxx \
+  /usr/local/opencascade/inc/Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_TypeMismatch.hxx \
+  /usr/local/opencascade/inc/TopoDS_Solid.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.hxx \
+  /usr/local/opencascade/inc/TopExp_Stack.hxx \
+  /usr/local/opencascade/inc/TopExp_Explorer.lxx \
+  /usr/local/opencascade/inc/BRep_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder3D.hxx \
+  /usr/local/opencascade/inc/TopoDS_Builder.hxx \
+  /usr/local/opencascade/inc/TopoDS_Wire.hxx \
+  /usr/local/opencascade/inc/BRepTools_WireExplorer.hxx \
+  /usr/local/opencascade/inc/TopoDS_Edge.hxx \
+  /usr/local/opencascade/inc/TopoDS_Vertex.hxx \
+  /usr/local/opencascade/inc/BRepLProp_CLProps.hxx \
+  /usr/local/opencascade/inc/BRepAdaptor_Curve.hxx \
+  /usr/local/opencascade/inc/Handle_Adaptor3d_HCurveOnSurface.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.hxx \
+  /usr/local/opencascade/inc/XSControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_XSControl_WorkSession.hxx \
+  /usr/local/opencascade/inc/Handle_IFSelect_WorkSession.hxx \
+  /usr/local/opencascade/inc/TColStd_SequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_SequenceNodeOfSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/TopTools_SequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_SequenceNodeOfSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/IFSelect_ReturnStatus.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_InterfaceModel.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfTransient.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintCount.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESModel.hxx \
+  /usr/local/opencascade/inc/IFSelect_PrintFail.hxx \
+  /usr/local/opencascade/inc/IGESControl_Reader.lxx \
+  /usr/local/opencascade/inc/STEPControl_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_StepData_StepModel.hxx \
+  /usr/local/opencascade/inc/IGESToBRep_Reader.hxx \
+  /usr/local/opencascade/inc/Handle_IGESToBRep_Actor.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfTransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ActorOfProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_TransientProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForTransient.hxx \
+  /usr/local/opencascade/inc/Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Static.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Handle_MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.hxx \
+  /usr/local/opencascade/inc/TCollection_AsciiString.lxx \
+  /usr/local/opencascade/inc/Interface_ParamType.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HArray1OfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfInteger.hxx \
+  /usr/local/opencascade/inc/Interface_StaticSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Interface_TypedValue.hxx \
+  /usr/local/opencascade/inc/Interface_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/Interface_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/MoniTool_TypedValue.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueType.hxx \
+  /usr/local/opencascade/inc/MoniTool_ValueInterpret.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_TCollection_HExtendedString.hxx \
+  /usr/local/opencascade/inc/TCollection_HAsciiString.lxx \
+  /usr/local/opencascade/inc/MoniTool_ValueSatisfies.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfAsciiString.hxx \
+  /usr/local/opencascade/inc/Handle_Dico_DictionaryOfTransient.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfHAsciiString.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.hxx \
+  /usr/local/opencascade/inc/Extrema_ExtCC.hxx \
+  /usr/local/opencascade/inc/GeomAPI_ExtremaCurveCurve.lxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.hxx \
+  /usr/local/opencascade/inc/Standard_ErrorHandler.lxx \
+  /usr/local/opencascade/inc/ShapeUpgrade_ShellSewing.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shape.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_BasicMsgRegistrator.hxx \
+  /usr/local/opencascade/inc/Message_Gravity.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Root.lxx \
+  /usr/local/opencascade/inc/Precision.hxx \
+  /usr/local/opencascade/inc/Precision.lxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Edge.hxx \
+  /usr/local/opencascade/inc/ShapeExtend_Status.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shape.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Solid.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Shell.hxx \
+  /usr/local/opencascade/inc/TopoDS_Compound.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Shell.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Surface.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Face.lxx \
+  /usr/local/opencascade/inc/ShapeExtend.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeExtend_WireData.hxx \
+  /usr/local/opencascade/inc/Handle_TopTools_HSequenceOfShape.hxx \
+  /usr/local/opencascade/inc/Handle_TColStd_HSequenceOfInteger.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_Wire.lxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_Wireframe.hxx \
+  /usr/local/opencascade/inc/ShapeFix_Wireframe.lxx \
+  /usr/local/opencascade/inc/BRepMesh.hxx \
+  /usr/local/opencascade/inc/BRepMesh_IncrementalMesh.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_FastDiscret.hxx \
+  /usr/local/opencascade/inc/BRepMesh_DataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Handle_BRepMesh_DataMapNodeOfDataMapOfShapeReal.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.hxx \
+  /usr/local/opencascade/inc/Bnd_Box.lxx \
+  /usr/local/opencascade/inc/BRepBndLib.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis.hxx \
+  /usr/local/opencascade/inc/ShapeBuild_ReShape.hxx \
+  /usr/local/opencascade/inc/BRepTools_ReShape.hxx \
+  /usr/local/opencascade/inc/IGESControl_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_FinderProcess.hxx \
+  /usr/local/opencascade/inc/Handle_Transfer_ProcessForFinder.hxx \
+  /usr/local/opencascade/inc/IGESData_BasicEditor.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_Protocol.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_Protocol.hxx \
+  /usr/local/opencascade/inc/Interface_GeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_NodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GeneralModule.hxx \
+  /usr/local/opencascade/inc/Handle_Interface_GlobalNodeOfGeneralLib.hxx \
+  /usr/local/opencascade/inc/IGESData_SpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_NodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_IGESEntity.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_SpecificModule.hxx \
+  /usr/local/opencascade/inc/Handle_IGESData_GlobalNodeOfSpecificLib.hxx \
+  /usr/local/opencascade/inc/STEPControl_Writer.hxx \
+  /usr/local/opencascade/inc/STEPControl_StepModelType.hxx \
+  /usr/local/opencascade/inc/StlAPI_Writer.hxx \
+  /usr/local/opencascade/inc/Handle_StlMesh_Mesh.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeTolerance.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_ShapeContents.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.hxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_CheckSmallFace.lxx \
+  /usr/local/opencascade/inc/ShapeAnalysis_DataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeAnalysis_DataMapNodeOfDataMapOfShapeListOfReal.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Fuse.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_BooleanOperation.hxx \
+  /usr/local/opencascade/inc/BOP_Operation.hxx \
+  /usr/local/opencascade/inc/BOPTools_PDSFiller.hxx \
+  /usr/local/opencascade/inc/BOP_PBuilder.hxx \
+  /usr/local/opencascade/inc/Handle_BOP_HistoryCollector.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.hxx \
+  /usr/local/opencascade/inc/BRepCheck_DataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_Result.hxx \
+  /usr/local/opencascade/inc/Handle_BRepCheck_DataMapNodeOfDataMapOfShapeResult.hxx \
+  /usr/local/opencascade/inc/BRepCheck_Analyzer.lxx \
+  /usr/local/opencascade/inc/BRepLib.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_Plane.hxx \
+  /usr/local/opencascade/inc/Handle_Geom_ElementarySurface.hxx \
+  /usr/local/opencascade/inc/ShapeFix.hxx \
+  /usr/local/opencascade/inc/ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/Handle_ShapeFix_FixSmallFace.hxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.hxx \
+  /usr/local/opencascade/inc/TopoDS_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/TCollection_ListIterator.lxx \
+  /usr/local/opencascade/inc/TopoDS_Iterator.lxx \
+  /usr/local/opencascade/inc/Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/Handle_Standard_NoSuchObject.hxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeSphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Sphere.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Revolution.hxx \
+  /usr/local/opencascade/inc/BRepPrim_OneAxis.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.hxx \
+  /usr/local/opencascade/inc/BRepPrim_Builder.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.hxx \
+  /usr/local/opencascade/inc/gp_Ax1.lxx \
+  /usr/local/opencascade/inc/gp_Ax2.lxx \
+  /usr/local/opencascade/inc/BRepPrimAPI_MakeOneAxis.hxx \
+  /usr/local/opencascade/inc/TopTools_ListIteratorOfListOfShape.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Common.hxx \
+  /usr/local/opencascade/inc/BRepAlgoAPI_Cut.hxx ../Common/Message.h \
+  ../Common/Context.h ../DataStr/List.h OCCVertex.h MVertex.h OCCEdge.h \
+  OCCFace.h OCCRegion.h
 GModelIO_Fourier.o: GModelIO_Fourier.cpp GModel.h GVertex.h GEntity.h \
   Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
   SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/Message.h \
@@ -244,5 +2343,43 @@ MFace.o: MFace.cpp MFace.h MVertex.h SPoint3.h SVector3.h \
 MElement.o: MElement.cpp MElement.h ../Common/GmshDefines.h MVertex.h \
   SPoint3.h MEdge.h SVector3.h MFace.h GEntity.h Range.h SBoundingBox3d.h \
   GFace.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h SPoint2.h Pair.h \
+  ../Numeric/FunctionSpace.h ../Common/GmshMatrix.h \
+  /sw//include/gsl/gsl_linalg.h /sw//include/gsl/gsl_mode.h \
+  /sw//include/gsl/gsl_permutation.h /sw//include/gsl/gsl_types.h \
+  /sw//include/gsl/gsl_errno.h /sw//include/gsl/gsl_check_range.h \
+  /sw//include/gsl/gsl_vector.h \
+  /sw//include/gsl/gsl_vector_complex_long_double.h \
+  /sw//include/gsl/gsl_complex.h \
+  /sw//include/gsl/gsl_vector_long_double.h \
+  /sw//include/gsl/gsl_block_long_double.h \
+  /sw//include/gsl/gsl_vector_complex.h \
+  /sw//include/gsl/gsl_block_complex_long_double.h \
+  /sw//include/gsl/gsl_vector_complex_double.h \
+  /sw//include/gsl/gsl_vector_double.h \
+  /sw//include/gsl/gsl_block_double.h \
+  /sw//include/gsl/gsl_block_complex_double.h \
+  /sw//include/gsl/gsl_vector_complex_float.h \
+  /sw//include/gsl/gsl_vector_float.h /sw//include/gsl/gsl_block_float.h \
+  /sw//include/gsl/gsl_block_complex_float.h \
+  /sw//include/gsl/gsl_vector_ulong.h /sw//include/gsl/gsl_block_ulong.h \
+  /sw//include/gsl/gsl_vector_long.h /sw//include/gsl/gsl_block_long.h \
+  /sw//include/gsl/gsl_vector_uint.h /sw//include/gsl/gsl_block_uint.h \
+  /sw//include/gsl/gsl_vector_int.h /sw//include/gsl/gsl_block_int.h \
+  /sw//include/gsl/gsl_vector_ushort.h \
+  /sw//include/gsl/gsl_block_ushort.h /sw//include/gsl/gsl_vector_short.h \
+  /sw//include/gsl/gsl_block_short.h /sw//include/gsl/gsl_vector_uchar.h \
+  /sw//include/gsl/gsl_block_uchar.h /sw//include/gsl/gsl_vector_char.h \
+  /sw//include/gsl/gsl_block_char.h /sw//include/gsl/gsl_matrix.h \
+  /sw//include/gsl/gsl_matrix_complex_long_double.h \
+  /sw//include/gsl/gsl_matrix_complex_double.h \
+  /sw//include/gsl/gsl_matrix_complex_float.h \
+  /sw//include/gsl/gsl_matrix_long_double.h \
+  /sw//include/gsl/gsl_matrix_double.h \
+  /sw//include/gsl/gsl_matrix_float.h /sw//include/gsl/gsl_matrix_ulong.h \
+  /sw//include/gsl/gsl_matrix_long.h /sw//include/gsl/gsl_matrix_uint.h \
+  /sw//include/gsl/gsl_matrix_int.h /sw//include/gsl/gsl_matrix_ushort.h \
+  /sw//include/gsl/gsl_matrix_short.h /sw//include/gsl/gsl_matrix_uchar.h \
+  /sw//include/gsl/gsl_matrix_char.h /sw//include/gsl/gsl_blas.h \
+  /sw//include/gsl/gsl_blas_types.h /sw//include/gsl/gsl_cblas.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Message.h \
   ../Common/Context.h ../DataStr/List.h ../Mesh/qualityMeasures.h
diff --git a/Mesh/BDS.cpp b/Mesh/BDS.cpp
index 3aba6a4072..6817bdca97 100644
--- a/Mesh/BDS.cpp
+++ b/Mesh/BDS.cpp
@@ -1,4 +1,4 @@
-// $Id: BDS.cpp,v 1.100 2008-02-17 08:48:00 geuzaine Exp $
+// $Id: BDS.cpp,v 1.101 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -25,6 +25,7 @@
 #include "BDS.h"
 #include "Message.h"
 #include "GFace.h"
+#include "meshGFaceDelaunayInsertion.h"
 #include "qualityMeasures.h"
 
 bool test_move_point_parametric_triangle(BDS_Point *p, double u, double v, BDS_Face *t);
@@ -1247,28 +1248,39 @@ bool BDS_Mesh::smooth_point_centroid(BDS_Point *p, GFace *gf, bool test_quality)
   double U = 0;
   double V = 0;
   double LC = 0;
+  double oldU=p->u;
+  double oldV=p->v;
 
   std::list<BDS_Face*> ts;
   p->getTriangles(ts);
-  std::list<BDS_Face*>::iterator it = ts.begin();
-  std::list<BDS_Face*>::iterator ite = ts.end();
+  std::list < BDS_Edge * >::iterator ited  = p->edges.begin();
+  std::list < BDS_Edge * >::iterator itede = p->edges.end();
 
   double sTot = 0;
-  while(it != ite) {
-    BDS_Face *t = *it;
-    BDS_Point *n[4];
-    t->getNodes(n);
-    // double S = fabs(surface_triangle(n[0], n[1], n[2])); 
-    double S = 1;
-    sTot += S;
-    U  += (n[0]->u + n[1]->u + n[2]->u) *S;
-    V  += (n[0]->v + n[1]->v + n[2]->v) *S;
-    LC += (n[0]->lc() + n[1]->lc() + n[2]->lc()) *S;
-    ++it;
+  while(ited != itede) {
+    BDS_Edge  *e = *ited;
+    BDS_Point *n = e->othervertex(p);
+//      double uv[2] = {(n->u + p->u)/2.0,(n->v + p->v)/2.0};
+//      double metric[3];
+//      buildMetric ( gf ,uv,metric);
+//      double du[2] = {n->u - p->u,n->v - p->v};
+//      double ldu = sqrt(DSQR(du[0])+DSQR(du[1]));
+//      du[0]/=ldu;
+//      du[1]/=ldu;
+//      double fact = 1./sqrt (metric[0] * du[0] * du[0] +
+//  		      2 * metric[1] * du[0] * du[1] + 
+//  		      metric[2] * du[1] * du[1]);
+    double fact = 1.0;
+    
+    sTot += fact;
+    U  += n->u * fact;
+    V  += n->v * fact;
+    LC += n->lc() * fact;
+    ++ited;
   }
-  U /= (3.*sTot); 
-  V /= (3.*sTot);
-  LC /= (3.*sTot);
+  U /= (sTot); 
+  V /= (sTot);
+  LC /= (sTot);
 
   GPoint gp = gf->point(U * scalingU, V * scalingV);
 
@@ -1276,11 +1288,9 @@ bool BDS_Mesh::smooth_point_centroid(BDS_Point *p, GFace *gf, bool test_quality)
   const double oldY = p->Y;
   const double oldZ = p->Z;
 
-  double oldU = p->u;
-  double oldV = p->v;
-
-  it = ts.begin();
-  double s1 = 0, s2 = 0;
+  std::list<BDS_Face*>::iterator it = ts.begin();
+  std::list<BDS_Face*>::iterator ite = ts.end();
+  double s1=0,s2=0;
 
   double newWorst = 1.0;
   double oldWorst = 1.0;
diff --git a/Mesh/BackgroundMesh.cpp b/Mesh/BackgroundMesh.cpp
index 184964f0c0..1e90129e24 100644
--- a/Mesh/BackgroundMesh.cpp
+++ b/Mesh/BackgroundMesh.cpp
@@ -1,4 +1,4 @@
-// $Id: BackgroundMesh.cpp,v 1.36 2008-02-17 08:48:00 geuzaine Exp $
+// $Id: BackgroundMesh.cpp,v 1.37 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -111,9 +111,9 @@ double LC_MVertex_CURV(GEntity *ge, double U, double V)
 {
   double Crv = 0;
   switch(ge->dim()){
-  case 0:
-    //    Crv = max_edge_curvature ( (const GVertex *)ge);
-    //    Crv = std::max(max_surf_curvature ( (const GVertex *)ge),Crv);
+  case 0:        
+    //Crv = max_edge_curvature ( (const GVertex *)ge);
+    //  Crv = std::max(max_surf_curvature ( (const GVertex *)ge),Crv);
     Crv = max_surf_curvature ( (const GVertex *)ge);
     //    printf("point %d coucou %g\n",ge->tag(),Crv);
     break;
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index 2bcd4fabdc..163b139193 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -1,4 +1,4 @@
-// $Id: HighOrder.cpp,v 1.19 2008-02-17 08:48:00 geuzaine Exp $
+// $Id: HighOrder.cpp,v 1.20 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -26,126 +26,11 @@
 #include "OS.h"
 #include "Numeric.h"
 #include "Context.h"
+#include "GmshMatrix.h"
+#include "FunctionSpace.h"
 
 extern Context_T CTX;
 
-void computeMidPoints(const double *p1,
-		      const double *p2, 
-		      const double *t1, 
-		      const double *t2, 
-		      double *p3){
-	// computes the mid point p3 of the second order parametric polynomial curve according to extreme points p1,p2 and tangents t1,t2
-	// The tangent directions given in t1 and t2 are the outgoing normals !!! to the curve p1-p2
-	double x0 = p1[0];
-	double y0 = p1[1];
-	double x1 = p2[0];
-	double y1 = p2[1];
-	double t0x = -t1[0];
-	double t0y = -t1[1];
-	double t1x = t2[0];
-	double t1y = t2[1];
-
-	//computation of the rotation parameters
-	double delta_x = x1-x0;
-	double delta_y = y1-y0;
-	double L = sqrt(delta_x*delta_x+delta_y*delta_y);
-	double theta = atan2(delta_y,delta_x);
-	//	double theta = atan(delta_y/delta_x);
-	//	if (delta_x<0)
-	//	  theta += M_PI;
-	double costheta = cos(theta);
-	double sintheta = sin(theta);
-	double theta0 = atan2(t0y,t0x)-theta;
-	double theta1 = atan2(t1y,t1x)-theta;
-	double tan0 = tan(theta0);
-	double tan1 = tan(theta1);
-	delta_x = L;
-	delta_y = 0;
-
-
-	//	printf("theta0 = %g theta1 = %g\n",theta0,theta1);
-
-	// computes the 6 coefficients: solving the linear system
-	// x(t) = a1 t^2 * b1 t + c1
-	// y(t) = a2 t^2 * b2 t + c2
-	// for t in [0,1]
-	// with :
-	// x(t), y(t) on pts 0 and 1 (4 conditions)
-	// and dy/dx = dy/dt*dt/dx on those 2 pts (2 conditions)
-
-	if (tan0 == tan1)
-	  {
-	    p3[0] = 0.5 * (p1[0]+p2[0]);
-	    p3[1] = 0.5 * (p1[1]+p2[1]);
-	  }
-	else
-	  {
-	    double b1 = 2*(delta_y-delta_x*tan1)/(tan0-tan1);
-	    double a1 = delta_x-b1;
-	    double b2 = tan0 * b1;
-	    double a2 = delta_y - b2;
-	    double c1 = 0;// in general : x0... 
-	    double c2 = 0;// in general : y0... but axis have changed...
-	    
-	    // back to the initial axis
-	    double ax = costheta*a1 - sintheta*a2;
-	    double bx = costheta*b1 - sintheta*b2;
-	    double cx = x0;//costheta*c1 - sintheta*c2 + x0;
-	    double ay = sintheta*a1 + costheta*a2;
-	    double by = sintheta*b1 + costheta*b2;
-	    double cy = y0;//sintheta*c1 + costheta*c2 + y0;
-	    
-	    // computes the mid point (x,y)
-	    double t=0.5;
-	    double tsquare=t*t;
-	    p3[0] = ax*tsquare + bx*t + cx;
-	    p3[1] = ay*tsquare + by*t + cy;
-	  }
-	return;
-}
-
-void Hermite2D_C1(SPoint3 &p1, SPoint3 &p2, SPoint3 &t1, SPoint3 &t2,
-		  SPoint3 &one_third, SPoint3 &two_third)
-{
-   double L = sqrt((p1.x()-p2.x())*(p1.x()-p2.x()) + (p1.y()-p2.y()) * (p1.y()-p2.y()));
-   SVector3 p1p2 (p2,p1);
-   double theta  = atan2(p2.x()-p1.x(),p2.y()-p1.y());
-   double theta1 = atan2(t1.x(),t1.y());
-   double theta2 = atan2(t2.x(),t2.y());
-   double rot[2][2] =
-     {{cos(theta),-sin(theta)},
-      {sin(theta),cos(theta)}};
-
-   double ts[2] = {1./3.,2./3.};
-   SPoint3 *pt[2] = {&one_third,&two_third};
-   for (int i=0 ; i < 2; i++){
-     const double t = ts[i];
-     double H2 = L*t*(t-1)*(t-1);
-     double H4 = -L*(1-t)*t*t;
-     double x3 = t * L;
-     double y3 = H2 * theta1 + H4 * theta2;     
-     //     pt[i]->x() = p1.x() + x3 * rot[0][0] + y3 * rot[0][1]; 
-     //     pt[i]->y() = p1.y() + x3 * rot[1][0] + y3 * rot[1][1]; 
-   }
-
-   
-
-  // SVector3 tt1  (t1.x(),t1.y(),0);
-  // SVector3 tt2  (t2.x(),t2.y(),0);
-  // const double cost1 = p1p2 * tt1;
-  // const double cost2 = p1p2 * tt2;
-  // const double ts[2] = { 1./3.,2./3.};
-  // for (int i=0 ; i < 2; i++){
-  //   const double t = ts[i];
-  //   const double H1 = (2*t+1)*(t-1)*(t-1);
-  //   const double H2 = L*t*(t-1)*(t-1);
-  //   const double H3 = t*t*(-2*t+3);
-  //   const double H4 = -L*(1-t)*t*t;
-  //   if (i == 0)one_third = p1*H1 + t1*H2 + p2*H3 + t2*H4;
-  //   else two_third = p1*H1 + t1*H2 + p2*H3 + t2*H4;
-  // }  
-}
-
 // for each pair of vertices (an edge), we build a list of vertices
 // that are the high order representation of the edge. The ordering of
 // vertices in the list is supposed to be (by construction) consistent
@@ -188,6 +73,191 @@ bool reparamOnFace(MVertex *v, GFace *gf, SPoint2 &param)
   return true;
 }
 
+
+/*
+  The aim here is to build a polynomial representation
+  that consist in polynomial segments of equal length
+*/
+
+static double mylength ( GEdge *ge , int i, double *u){
+  //  printf("from %22.15E to %22.15E (curve %d)\n",u[i],u[i+1],ge->tag());
+  return ge->length ( u[i] , u[i+1], 6 );
+}
+
+static void myresid ( int N , GEdge *ge , double *u, Double_Vector &r ){
+  double L[100];
+  for (int i=0;i<N-1;i++)L[i] = mylength(ge,i,u);  
+  for (int i=0;i<N-2;i++)r(i) = L[i+1]-L[i];
+  //  printf("%22.15E %22.15E %22.15E\n",L[0],L[1],r(0));
+}
+
+bool computeEquidistantParameters ( GEdge *ge , double u0, double uN , int N, double *u){
+#define NR_PRECISION       1.e-6
+#define NR_MAX_ITER        50
+  
+  const double eps = (uN-u0)*1.e-5;
+
+  // newton algorithm
+  // N is the total number of points (3 for quadratic, 4 for cubic ...)
+  // u[0] = u0;
+  // u[N-1] = uN;
+  // dist ( ge(u[i]), ge(u[i+1]) ) =  dist ( ge(u[i+1]), ge(u[i+2]) ) , i = 0,...,N-2
+  
+  // initialize as equidistant in parameter space
+  u[0] = u0;
+  double du = (uN-u0)/(N-1);
+  for (int i=1 ; i < N ; i++){
+    u[i] = u[i-1] + du;
+  }
+  // create the tangent matrix
+
+  const int M = N-2;
+  Double_Matrix J(M,M);
+  Double_Vector DU(M);
+  Double_Vector R(M);
+  Double_Vector Rp(M);
+  
+  int      iter = 1 ;
+
+  double L[100];
+
+  //  printf("M = %d u = %12.5E %12.5E %12.5E\n",M,u[0],u[1],u[2]);
+
+  while (iter < NR_MAX_ITER){
+    
+    iter++ ;
+
+    myresid ( N, ge, u , R); 
+
+    for (int i=0;i<M;i++){
+      u[i+1] += eps;
+      myresid ( N, ge, u, Rp);
+      for (int j=0;j<M;j++){
+	J(i,j) = ( Rp(j) - R(j)) / eps;
+      }
+      u[i+1] -= eps;
+    }
+    
+    //    printf("J(0,0) = %12.5E\n",J(0,0));
+    if (M == 1)
+      DU(0) = R(0)/J(0,0);
+    else
+      J.lu_solve(R,DU);
+    
+    for (int i=0;i<M;i++){
+      u[i+1] -= DU(i);
+    }
+    if (u[1] < u0)break;
+    if (u[N-1] > uN)break;
+
+    double newt_norm = DU.norm();      
+    //    printf("iter %d u = %12.5E %12.5E %12.5E res %12.5E du %12.5E\n",iter,u[0],u[1],u[2],R(0),DU(0));
+    
+    if (newt_norm < NR_PRECISION)return true;
+  }
+  // FAILED, use equidistant in param space
+  for (int i=1 ; i < N ; i++){
+    u[i] = u[i-1] + du;
+  }
+  return false;
+}
+
+static double mylength ( GFace *gf , int i, double *u, double *v){
+  return gf->length ( SPoint2(u[i],v[i]) , SPoint2(u[i+1],v[i+1]), 4 );
+}
+
+static void myresid ( int N , GFace *gf , double *u, double *v, Double_Vector &r ){
+  double L[100];
+  for (int i=0;i<N-1;i++)L[i] = mylength(gf,i,u,v);  
+  for (int i=0;i<N-2;i++)r(i) = L[i+1]-L[i];
+  //  printf("%22.15E %22.15E %22.15E\n",L[0],L[1],r(0));
+}
+
+bool computeEquidistantParameters ( GFace *gf , double u0, double uN , double v0, double vN, int N, double *u, double *v){
+#define NR_PRECISION       1.e-6
+#define NR_MAX_ITER        50
+  
+  const double eps = 1.e-4;
+
+  double t[100];
+
+  // initialize the points by equal subdivision of geodesics
+  u[0] = u0;
+  v[0] = v0;
+  t[0] = 0;
+  for (int i=1 ; i < N ; i++){
+    t[i] = (double)i/(N-1);
+    SPoint2 p = gf->geodesic ( SPoint2(u0,v0), SPoint2(uN,vN), t[i] );
+    u[i] = p.x();
+    v[i] = p.y();
+  }
+  u[N] = uN;
+  v[N] = vN;
+  t[N] = 1.0;
+
+  // create the tangent matrix
+
+  const int M = N-2;
+  Double_Matrix J(M,M);
+  Double_Vector DU(M);
+  Double_Vector R(M);
+  Double_Vector Rp(M);
+  
+  int      iter = 1 ;
+
+  double L[100];
+
+  //  printf("M = %d u = %12.5E %12.5E %12.5E\n",M,u[0],u[1],u[2]);
+
+  while (iter < NR_MAX_ITER){
+    
+    iter++ ;
+
+    myresid ( N, gf, u , v, R); 
+
+    for (int i=0;i<M;i++){
+      t[i+1] += eps;
+      double tempu = u[i+1];
+      double tempv = v[i+1];
+      SPoint2 p = gf->geodesic ( SPoint2(u0,v0), SPoint2(uN,vN), t[i+1] );
+      u[i+1] = p.x();
+      v[i+1] = p.y();
+      myresid ( N, gf, u, v, Rp);
+      for (int j=0;j<M;j++){
+	J(i,j) = ( Rp(j) - R(j)) / eps;
+      }
+      t[i+1] -= eps;
+      u[i+1] = tempu;
+      v[i+1] = tempv;
+    }
+    
+    //    printf("J(0,0) = %12.5E\n",J(0,0));
+    if (M == 1)
+      DU(0) = R(0)/J(0,0);
+    else
+      J.lu_solve(R,DU);
+    
+    for (int i=0;i<M;i++){
+      t[i+1] -= DU(i);
+      SPoint2 p = gf->geodesic ( SPoint2(u0,v0), SPoint2(uN,vN), t[i+1] );
+      u[i+1] = p.x();
+      v[i+1] = p.y();
+    }
+    double newt_norm = DU.norm();      
+    //    printf("iter %d u = %12.5E %12.5E %12.5E res %12.5E du %12.5E\n",iter,u[0],u[1],u[2],R(0),DU(0));
+    
+    if (newt_norm < NR_PRECISION)return true;
+  }
+  // FAILED, use equidistant in param space
+   for (int i=1 ; i < N ; i++){
+     t[i] = (double)i/(N-1);
+     SPoint2 p = gf->geodesic ( SPoint2(u0,v0), SPoint2(uN,vN), t[i] );
+     u[i] = p.x();
+     v[i] = p.y();
+   }
+  return false;
+}
+
 bool reparamOnEdge(MVertex *v, GEdge *ge, double &param)
 {
   param = 1.e6;
@@ -206,8 +276,6 @@ bool reparamOnEdge(MVertex *v, GEdge *ge, double &param)
 void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
 		     edgeContainer &edgeVertices, bool linear, int nPts = 1)
 {
-  bool c1 = CTX.mesh.c1_continuity;
-
   for(int i = 0; i < ele->getNumEdges(); i++){
     MEdge edge = ele->getEdge(i);
     std::pair<MVertex*, MVertex*> p(edge.getMinVertex(), edge.getMaxVertex());
@@ -221,51 +289,40 @@ void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
       MVertex *v0 = edge.getVertex(0), *v1 = edge.getVertex(1);            
       double u0 = 0., u1 = 0.;
       bool reparamOK = true;
-      if(c1 || (!linear && 
-		ge->geomType() != GEntity::DiscreteCurve &&
-		ge->geomType() != GEntity::BoundaryLayerCurve)){
+      if(!linear && ge->geomType() != GEntity::DiscreteCurve &&
+	 ge->geomType() != GEntity::BoundaryLayerCurve){
 	reparamOK &= reparamOnEdge(v0, ge, u0);
 	reparamOK &= reparamOnEdge(v1, ge, u1);
       }
-      if(nPts == 1 && c1){
-	SVector3 tv1 = ge->firstDer(u0);
-	SVector3 tv2 = ge->firstDer(u1);
-	double  t1[2] = {-tv1.x(),-tv1.y()};
-	double  t2[2] = { tv2.x(), tv2.y()};	
-	double  p1[2] = { v0->x(), v0->y()};
-	double  p2[2] = { v1->x(), v1->y()};
-	double  p3[2];
-	computeMidPoints(p1,p2,t1,t2,p3);
-	MVertex *hv = new MVertex(p3[0],p3[1],0);
-	ge->mesh_vertices.push_back(hv);
-	ve.push_back(hv);
-	edgeVertices[p].push_back(hv);
-      }
-      else{
-	std::vector<MVertex*> temp;
-	for(int j = 0; j < nPts; j++){
-	  const double t = (double)(j + 1)/(nPts + 1);
-	  double uc = (1. - t) * u0 + t * u1;
-	  MVertex *v;
-	  if(!reparamOK || linear || ge->geomType() == GEntity::DiscreteCurve || 
-	     uc < u0 || uc > u1){ // need to treat periodic curves properly!
-	    SPoint3 pc = edge.interpolate(t);
-	    v = new MVertex(pc.x(), pc.y(), pc.z(), ge);
-	    v->setParameter (0,t);
-	  }
-	  else {
-	    GPoint pc = ge->point(uc);
-	    v = new MEdgeVertex(pc.x(), pc.y(), pc.z(), ge, uc);
-	  }
-	  temp.push_back(v);
-	  ge->mesh_vertices.push_back(v);
-	  ve.push_back(v);
+      std::vector<MVertex*> temp;
+
+      double US[100];
+      if(reparamOK && !linear && ge->geomType() != GEntity::DiscreteCurve){
+	computeEquidistantParameters ( ge , u0, u1 , nPts+2, US);	  
+      } 
+      
+      for(int j = 0; j < nPts; j++){
+	const double t = (double)(j + 1)/(nPts + 1);
+	double uc = (1. - t) * u0 + t * u1;
+	MVertex *v;
+	if(!reparamOK || linear || ge->geomType() == GEntity::DiscreteCurve || 
+	   uc < u0 || uc > u1){ // need to treat periodic curves properly!
+	  SPoint3 pc = edge.interpolate(t);
+	  v = new MVertex(pc.x(), pc.y(), pc.z(), ge);
+	  v->setParameter (0,t);
 	}
-	if(edge.getVertex(0) == edge.getMinVertex())
-	  edgeVertices[p].insert(edgeVertices[p].end(), temp.begin(), temp.end());
-	else
-	  edgeVertices[p].insert(edgeVertices[p].end(), temp.rbegin(), temp.rend());
+	else {
+	  GPoint pc = ge->point(US[j+1]);
+	  v = new MEdgeVertex(pc.x(), pc.y(), pc.z(), ge, US[j+1]);
+	}
+	temp.push_back(v);
+	ge->mesh_vertices.push_back(v);
+	ve.push_back(v);
       }
+      if(edge.getVertex(0) == edge.getMinVertex())
+	edgeVertices[p].insert(edgeVertices[p].end(), temp.begin(), temp.end());
+      else
+	edgeVertices[p].insert(edgeVertices[p].end(), temp.rbegin(), temp.rend());
     }
   }
 }
@@ -293,6 +350,12 @@ void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve,
 	reparamOK &= reparamOnFace(v1, gf, p1);
       }
       std::vector<MVertex*> temp;
+
+      double US[100],VS[100];
+      if(reparamOK && !linear && gf->geomType() != GEntity::DiscreteCurve){
+	computeEquidistantParameters (gf , p0[0], p1[0], p0[1], p1[1], nPts+2, US,VS);
+      }
+
       for(int j = 0; j < nPts; j++){
 	const double t = (double)(j + 1) / (nPts + 1);
 	MVertex *v;
@@ -303,8 +366,8 @@ void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve,
 	else{
 	  double uc = (1. - t) * p0[0] + t * p1[0];
 	  double vc = (1. - t) * p0[1] + t * p1[1];
-	  GPoint pc = gf->point(uc, vc);
-	  v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, uc, vc);
+	  GPoint pc = gf->point(US[j+1], VS[j+1]);
+	  v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, US[j+1], VS[j+1]);
 	}
 	temp.push_back(v);
 	gf->mesh_vertices.push_back(v);
@@ -351,6 +414,25 @@ void getEdgeVertices(GRegion *gr, MElement *ele, std::vector<MVertex*> &ve,
 void getFaceVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &vf,
 		     faceContainer &faceVertices, bool linear, int nPts = 1)
 {
+  Double_Matrix points;
+  int start;
+  switch (nPts){
+  case 2 :
+    points=  gmshFunctionSpaces::find(MSH_TRI_10).points;
+    start = 9;
+    break;
+  case 3 :
+    points=  gmshFunctionSpaces::find(MSH_TRI_15).points;
+    start = 12;
+    break;
+  case 4 :
+    points=  gmshFunctionSpaces::find(MSH_TRI_21).points;
+    start = 15;
+    break;
+  default :  
+    throw;
+  }
+
   for(int i = 0; i < ele->getNumFaces(); i++){
     MFace face = ele->getFace(i);
     std::vector<MVertex*> p;
@@ -364,34 +446,36 @@ void getFaceVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &vf,
       if(!linear && 
 	 gf->geomType() != GEntity::DiscreteSurface &&
 	 gf->geomType() != GEntity::BoundaryLayerSurface){
-	reparamOK &= reparamOnFace(p[0], gf, p0);
-	reparamOK &= reparamOnFace(p[1], gf, p1);
-	reparamOK &= reparamOnFace(p[2], gf, p2);
+	reparamOK &= reparamOnFace(ele->getVertex(0), gf, p0);
+	reparamOK &= reparamOnFace(ele->getVertex(1), gf, p1);
+	reparamOK &= reparamOnFace(ele->getVertex(2), gf, p2);
 	if(face.getNumVertices() == 4)
-	  reparamOK &= reparamOnFace(p[3], gf, p3);
+	  reparamOK &= reparamOnFace(ele->getVertex(3), gf, p3);
       }
       if(face.getNumVertices() == 3){ // triangles
-	for(int j = 0; j < nPts; j++){
-	  for(int k = 0 ; k < nPts - j - 1; k++){
-	    MVertex *v;
-	    double t1 = (double)(j + 1) / (nPts + 1);
-	    double t2 = (double)(k + 1) / (nPts + 1);
-	    if(!reparamOK || linear || gf->geomType() == GEntity::DiscreteSurface){
-	      SPoint3 pc = face.interpolate(t1, t2);
-	      v = new MVertex(pc.x(), pc.y(), pc.z(), gf);
-	    }
-	    else{
-	      double uc = (1. - t1 - t2) * p0[0] + t1 * p1[0] + t2 * p2[0];
-	      double vc = (1. - t1 - t2) * p0[1] + t1 * p1[1] + t2 * p2[1];
-	      GPoint pc = gf->point(uc, vc);
-	      v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, uc, vc);
-	      v->setParameter (0,uc);
-	      v->setParameter (1,vc);
-	    }
-	    faceVertices[p].push_back(v);
-	    gf->mesh_vertices.push_back(v);
-	    vf.push_back(v);
+	//	for(int j = 0; j < nPts; j++){
+	  //	  for(int k = 0 ; k < nPts - j - 1; k++){	
+	for(int k = start ; k < points.size1() ; k++){
+	  MVertex *v;
+	  // 	    double t1 = (double)(j + 1) / (nPts + 1);
+	  // 	    double t2 = (double)(k + 1) / (nPts + 1);
+	  const double t1 = points(k,0);
+	  const double t2 = points(k,1);
+	  if(!reparamOK || linear || gf->geomType() == GEntity::DiscreteSurface){
+	    SPoint3 pc = face.interpolate(t1, t2);
+	    v = new MVertex(pc.x(), pc.y(), pc.z(), gf);
 	  }
+	  else{
+	    double uc = (1. - t1 - t2) * p0[0] + t1 * p1[0] + t2 * p2[0];
+	    double vc = (1. - t1 - t2) * p0[1] + t1 * p1[1] + t2 * p2[1];
+	    GPoint pc = gf->point(uc, vc);
+	    v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, uc, vc);
+	    v->setParameter (0,uc);
+	    v->setParameter (1,vc);
+	  }
+	  faceVertices[p].push_back(v);
+	  gf->mesh_vertices.push_back(v);
+	  vf.push_back(v);
 	}
       }
       else if(face.getNumVertices() == 4){ // quadrangles
@@ -718,16 +802,18 @@ FILE *MYFILE = 0;
 void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ)
 {
   double mat[2][3];  
-  int n = 10;
+  int n = 3;
 
   t->jac(1,0,0,0,mat);
   double v1[3] = {mat[0][0],mat[0][1],mat[0][2]};
   double v2[3] = {mat[1][0],mat[1][1],mat[1][2]};
   double normal1[3],normal[3];  
   prodve(v1,v2,normal1);
-  norme(normal1);
-  double sign = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
-  double invsign = 1./(sign);
+  //  norme(normal1);
+  double nn = sqrt(DSQR(normal1[0]) + DSQR(normal1[1]) + DSQR(normal1[2])) ;
+
+  //  double sign = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
+  //  double invsign = 1./(sign);
 
   for(int i = 0; i < n; i++){
     for(int k = 0; k < n - i; k++){
@@ -738,13 +824,13 @@ void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ)
       double v1b[3] = {mat[0][0],mat[0][1],mat[0][2]};
       double v2b[3] = {mat[1][0],mat[1][1],mat[1][2]};
       prodve(v1b,v2b,normal);
-      //double sign; prosca(normal1,normal,&sign);
-      //double det = norm3(normal) * (sign>0?1.:-1.);
-      double det = invsign*(mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]) * (sign>0?1.:-1.);
+      double sign; prosca(normal1,normal,&sign);
+      double det = norm3(normal) * (sign>0?1.:-1.) / nn;
+      //double det = invsign*(mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]) * (sign>0?1.:-1.);
       //      double det2 = 1./det1;
       //      double det = std::max(det1,det2);
       //      if(MYFILE)fprintf(MYFILE,"SP(%g,%g,%g){%g};\n",pt.x(),pt.y(),pt.z(),det);
-      minJ = std::min(det, minJ);
+      minJ = std::min(1./det,std::min(det, minJ));
       maxJ = std::max(det, maxJ);
     }
   }
@@ -841,9 +927,55 @@ void deriv_smoothing_objective_function_HighOrderN(double *uv, double *dF, doubl
   }
 }
 
+void optimizeNodeLocations ( GFace *gf, smoothVertexDataHON &vdN , double eps = .2){
+
+  if(!vdN.v.size())return;
+  double uv[20];
+  for (unsigned int i = 0; i < vdN.v.size(); i++){
+    if (!vdN.v[i]->getParameter (0,uv[2*i]))throw;
+    if (!vdN.v[i]->getParameter (1,uv[2*i+1]))throw;
+  }
+
+  double F = -smooth_obj_HighOrderN(uv, &vdN);
+  if (F < eps){
+    double val;
+    minimize_N ( 2*vdN.v.size(), 
+		 smooth_obj_HighOrderN, 
+		 deriv_smoothing_objective_function_HighOrderN, 
+		 &vdN, 1, uv,val);
+    double Fafter = -smooth_obj_HighOrderN(uv, &vdN);
+    printf("%12.5E %12.5E\n",F,Fafter);
+    if (F < Fafter){
+      for (unsigned int i = 0; i < vdN.v.size(); i++){
+	vdN.v[i]->setParameter ( 0,uv[2*i]);
+	vdN.v[i]->setParameter ( 1,uv[2*i+1]);
+	GPoint gp = gf->point(uv[2*i],uv[2*i+1]);
+	vdN.v[i]->x() = gp.x();
+	vdN.v[i]->y() = gp.y();
+	vdN.v[i]->z() = gp.z();
+      }
+    }	  
+  }
+}
+
+void optimizeHighOrderMeshInternalNodes(GFace *gf){
+
+  for(unsigned int i = 0; i < gf->triangles.size(); i++){
+    MTriangle *t = gf->triangles[i];
+    smoothVertexDataHON vdN;
+    int start = t->getNumVertices() - t->getNumFaceVertices();
+    for (int j=start;j<t->getNumVertices();j++)
+      vdN.v.push_back(t->getVertex(j));
+    vdN.gf = gf;
+    vdN.ts.push_back(t);
+    optimizeNodeLocations ( gf, vdN , .9);
+  }
+
+}
 
 
-bool optimizeHighOrderMesh(GModel *modl, GFace *gf, edgeContainer &edgeVertices){
+
+bool optimizeHighOrderMesh(GFace *gf, edgeContainer &edgeVertices){
 
   v2t_cont adjv;
   buildVertexToTriangle ( gf->triangles ,  adjv );
@@ -858,7 +990,44 @@ bool optimizeHighOrderMesh(GModel *modl, GFace *gf, edgeContainer &edgeVertices)
       e2t[p].push_back(t);
     }
   }
+  /*
+  v2t_cont :: iterator it = adjv.begin();      
+  while (it != adjv.end()){
+    MVertex *ver= it->first;
+    GEntity *ge = ver->onWhat();
+    if (ge->dim() == 2){
+      double initu,initv;
+      ver->getParameter ( 0,initu);
+      ver->getParameter ( 1,initv);	  
+
+      smoothVertexDataHON vdN;
+      vdN.ts = it->second;
+      for (int i=0;i<vdN.ts.size();i++){
+	MTriangle *t = vdN.ts[i];
+      }
+
+      vdN.v = e;
+      vdN.gf = gf;
 
+      double val;      
+      double F = -smooth_obj_HighOrder(initu,initv, &vd);
+      if (F < .2){
+	minimize_2 ( smooth_obj_HighOrder, deriv_smoothing_objective_function_HighOrder, &vd, 1, initu,initv,val);
+	double Fafter = -smooth_obj_HighOrder(initu,initv, &vd);
+	if (F < Fafter){
+	  success = true;
+	  ver->setParameter(0,initu);
+	  ver->setParameter(1,initv);
+	  GPoint gp = gf->point(initu,initv);
+	  ver->x() = gp.x();
+	  ver->y() = gp.y();
+	  ver->z() = gp.z();  
+	}
+      }				
+    }
+    ++it;
+  }
+  */
   bool success = false;
   
   for(edge2tris::iterator it = e2t.begin(); it != e2t.end(); ++it){
@@ -875,110 +1044,18 @@ bool optimizeHighOrderMesh(GModel *modl, GFace *gf, edgeContainer &edgeVertices)
       else
 	e = edgeVertices[std::make_pair<MVertex*, MVertex*> (n4, n2)];
 
-      if (e.size() == 1){
-	double initu,initv;
-	e[0]->getParameter ( 0,initu);
-	e[0]->getParameter ( 1,initv);	  
-	smoothVertexDataHO vd;
-	vd.v = e[0];
-	vd.gf = gf;
-        vd.ts.push_back(t1);
-        vd.ts.push_back(t2);
-	double val;
-	minimize_2 ( smooth_obj_HighOrder, deriv_smoothing_objective_function_HighOrder, &vd, 1, initu,initv,val);
-	vd.v->setParameter(0,initu);
-	vd.v->setParameter(1,initv);
-	GPoint gp = gf->point(initu,initv);
-	vd.v->x() = gp.x();
-	vd.v->y() = gp.y();
-	vd.v->z() = gp.z();  				
-      }
-      else if (e.size() < 5){
-	double uv[20];
-	for (unsigned int i = 0; i < e.size(); i++){
-	  if (!e[i]->getParameter (0,uv[2*i]))throw;
-	  if (!e[i]->getParameter (1,uv[2*i+1]))throw;
-	}
+      if (e.size() < 5){
 	smoothVertexDataHON vdN;
 	vdN.v = e;
 	vdN.gf = gf;
 	vdN.ts.clear();
         vdN.ts.push_back(t1);
-        vdN.ts.push_back(t2);
-	double val;
-	double F = -smooth_obj_HighOrderN(uv, &vdN);
-	//	printf("F = %12.5E %p %p\n",F,t1,t2);
-	if (F < .2){
-	  minimize_N ( 2*e.size(), smooth_obj_HighOrderN, deriv_smoothing_objective_function_HighOrderN, &vdN, 1, uv,val);
-	  double Fafter = -smooth_obj_HighOrderN(uv, &vdN);
-	  if (F < Fafter){
-	    //	    printf("found a pattern with f = %22.15E -> %22.15E (%22.15E) %d points\n",F,Fafter,val,e.size());
-	    success = true;
-// 	    checkHighOrderTriangles(modl);
-// 	    double minJ=1.e22,maxJ=-1.e22;
-// 	    getMinMaxJac (t1, minJ, maxJ);
-// 	    printf("AVANT 1 minJ %22.15E maxJ %22.15E\n",minJ,maxJ);
-// 	    minJ=1.e22;maxJ=-1.e22;
-// 	    getMinMaxJac (t2, minJ, maxJ);
-// 	    printf("AVANT 2 minJ %22.15E maxJ %22.15E\n",minJ,maxJ);
-// 	    checkHighOrderTriangles(modl);
-
-	    for (unsigned int i = 0; i < vdN.v.size(); i++){
-	      vdN.v[i]->setParameter ( 0,uv[2*i]);
-	      vdN.v[i]->setParameter ( 1,uv[2*i+1]);
-	      GPoint gp = gf->point(uv[2*i],uv[2*i+1]);
-	      vdN.v[i]->x() = gp.x();
-	      vdN.v[i]->y() = gp.y();
-	      vdN.v[i]->z() = gp.z();
-	    }
-// 	    minJ=1.e22;maxJ=-1.e22;
-// 	    getMinMaxJac (t1, minJ, maxJ);
-// 	    printf("APRES 1 minJ %22.15E maxJ %22.15E\n",minJ,maxJ);
-// 	    minJ=1.e22;maxJ=-1.e22;
-// 	    getMinMaxJac (t2, minJ, maxJ);
-// 	    printf("APRES 2 minJ %22.15E maxJ %22.15E\n",minJ,maxJ);
-// 	    checkHighOrderTriangles(modl);
-// 	    return true;
-	  }	  
-	}
+        vdN.ts.push_back(t2);	
+	optimizeNodeLocations ( gf, vdN );
       }
     }
   }
 
-  while (1){
-    v2t_cont :: iterator it = adjv.begin();      
-    while (it != adjv.end()){
-      MVertex *ver= it->first;
-      GEntity *ge = ver->onWhat();
-      if (ge->dim() == 2){
-	double initu,initv;
-	ver->getParameter ( 0,initu);
-	ver->getParameter ( 1,initv);	  
-	smoothVertexDataHO vd;
-	vd.v = ver;
-	vd.gf = gf;
-        vd.ts = it->second;
-	double val;
-
-	double F = -smooth_obj_HighOrder(initu,initv, &vd);
-	if (F < .2){
-	  minimize_2 ( smooth_obj_HighOrder, deriv_smoothing_objective_function_HighOrder, &vd, 1, initu,initv,val);
-	  double Fafter = -smooth_obj_HighOrder(initu,initv, &vd);
-	  if (F < Fafter){
-	    success = true;
-	    ver->setParameter(0,initu);
-	    ver->setParameter(1,initv);
-	    GPoint gp = gf->point(initu,initv);
-	    ver->x() = gp.x();
-	    ver->y() = gp.y();
-	    ver->z() = gp.z();  
-	  }
-	}				
-      }
-      ++it;
-    }
-    break;
-  }  
   return success;
 }
 
@@ -1034,7 +1111,6 @@ bool smoothInternalEdges(GFace *gf, edgeContainer &edgeVertices)
       if((!straightLine(e1, n1, n2) || !straightLine(e2, n2, n3) ||
 	  !straightLine(e3, n3, n4) || !straightLine(e4, n4, n1))){
 
-
 	double Unew[NBST][10],Vnew[NBST][10];
 	double Xold[10],Yold[10],Zold[10];
 	
@@ -1152,6 +1228,65 @@ void checkHighOrderTriangles(GModel *m)
   else Msg(WARNING, "Jacobian Range (%12.5E,%12.5E)",minJGlob, maxJGlob);
 }  
 
+void printJacobians(GModel *m, const char *nm)
+{
+  const int n = 22;
+  double D[n][n];
+  double X[n][n];
+  double Y[n][n];
+  double Z[n][n];
+
+  FILE *f = fopen(nm,"w");
+  fprintf(f,"View \"\"{\n");
+  for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){
+    double minJ = 1.e22;
+    double maxJ = -1.e22;
+    for(unsigned int i = 0; i < (*it)->triangles.size(); i++){
+      MTriangle *t = (*it)->triangles[i];
+      double mat[2][3];  
+      t->jac(1,0,0,0,mat);
+      double dj0 = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
+
+      for(int i = 0; i < n; i++){
+	for(int k = 0; k < n - i; k++){
+	  SPoint3 pt;
+	  t->jac((double)i / (n - 1), (double)k / (n - 1), mat);	  
+	  t->pnt((double)i / (n - 1), (double)k / (n - 1), pt);	  
+	  const double det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
+	  D[i][k] = std::min(det/dj0,dj0/det);
+	  X[i][k] = pt.x();
+	  Y[i][k] = pt.y();
+	  Z[i][k] = pt.z();
+	}
+      }
+      for(int i = 0; i < n -1; i++){
+	for(int k = 0; k < n - i -1; k++){
+	  fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%22.15E,%22.15E,%22.15E};\n",
+		  X[i][k],Y[i][k],Z[i][k],
+		  X[i+1][k],Y[i+1][k],Z[i+1][k],
+		  X[i][k+1],Y[i][k+1],Z[i][k+1],
+		  D[i][k],
+		  D[i+1][k],
+		  D[i][k+1]);
+	  if (i != n-2 && k != n - i -2)
+	    fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%22.15E,%22.15E,%22.15E};\n",
+		    X[i+1][k],Y[i+1][k],Z[i+1][k],
+		    X[i+1][k+1],Y[i+1][k+1],Z[i+1][k+1],
+		    X[i][k+1],Y[i][k+1],Z[i][k+1],
+		    D[i+1][k],
+		    D[i+1][k+1],
+		    D[i][k+1]);
+	}
+      }
+    }
+
+
+
+  }
+  fprintf(f,"};\n");
+  fclose(f);
+}
+
 void SetOrderN(GModel *m, int order, bool linear, bool incomplete)
 {
   // replace all the elements in the mesh with second order elements
@@ -1187,23 +1322,26 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete)
   for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it)
     setHighOrder(*it, edgeVertices, faceVertices, linear, incomplete, nPts);
 
+  printJacobians(m,"detjIni.pos");  
+
   if(CTX.mesh.smooth_internal_edges){
     checkHighOrderTriangles(m);
-     for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){      
-       Msg(INFO, "Smoothing internal Edges in Surface %d",(*it)->tag());
-       for (int i = 0; i < 10; i++) {
-	 if (!smoothInternalEdges(*it, edgeVertices))break;
+    for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){      
+      Msg(INFO, "Smoothing internal Edges in Surface %d",(*it)->tag());
+      for (int i = 0; i < 10; i++) {
+	if (!smoothInternalEdges(*it, edgeVertices))break;
  	checkHighOrderTriangles(m);
-       }
-     }
+      }
+      optimizeHighOrderMeshInternalNodes(*it);
+    }
     for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){      
       for (int i=0;i<CTX.mesh.nb_smoothing;i++){
-	if(!optimizeHighOrderMesh(m,*it, edgeVertices))break;
+	if(!optimizeHighOrderMesh(*it, edgeVertices))break;
 	checkHighOrderTriangles(m);
       }
     }
   }
-
+  printJacobians(m,"detjOpt.pos");  
   //  MYFILE = fopen("jacs.pos","w");
   //  fprintf(MYFILE,"View \"\"{\n");
   checkHighOrderTriangles(m);
diff --git a/Mesh/meshGFaceBDS.cpp b/Mesh/meshGFaceBDS.cpp
index 94e1c15022..708b5fc2bb 100644
--- a/Mesh/meshGFaceBDS.cpp
+++ b/Mesh/meshGFaceBDS.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGFaceBDS.cpp,v 1.5 2008-02-17 08:48:01 geuzaine Exp $
+// $Id: meshGFaceBDS.cpp,v 1.6 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -399,7 +399,7 @@ void gmshDelaunayizeBDS ( GFace *gf, BDS_Mesh &m, int &nb_swap )
   }
 }
 
-void splitEdgePass ( GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split)
+void splitEdgePassUnsorted ( GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split)
 {
   int NN1 = m.edges.size();
   int NN2 = 0;
@@ -410,8 +410,8 @@ void splitEdgePass ( GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split)
       double lone = NewGetLc ( *it,gf,m.scalingU,m.scalingV);
       if ((*it)->numfaces() == 2 && (lone >  MAXE_)){
 	
-	const double coord = 0.5;
-	//const double coord = computeEdgeMiddleCoord((*it)->p1,(*it)->p2,gf,m.scalingU,m.scalingV);
+	//const double coord = 0.5;
+	const double coord = computeEdgeMiddleCoord((*it)->p1,(*it)->p2,gf,m.scalingU,m.scalingV);
 	BDS_Point *mid ;
 	mid  = m.add_point(++m.MAXPOINTNUMBER,
 			   coord * (*it)->p1->u + (1 - coord) * (*it)->p2->u,
@@ -430,11 +430,84 @@ void splitEdgePass ( GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split)
   }
 }
 
+void splitEdgePass ( GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split)
+{
+  std::list<BDS_Edge*>::iterator it = m.edges.begin();
+  std::vector<std::pair<double, BDS_Edge*> > edges;
+
+  while (it != m.edges.end()){
+    if(!(*it)->deleted && (*it)->numfaces() == 2){
+      double lone = NewGetLc(*it, gf,m.scalingU,m.scalingV);
+      if(lone > MAXE_){
+	edges.push_back (std::make_pair (-lone, *it) );
+      }
+    }
+    ++it;
+  }
+
+  std::sort(edges.begin(),edges.end());
+
+  for (int i=0;i<edges.size();++i){
+    BDS_Edge *e = edges[i].second;
+    if (!e->deleted){
+      const double coord = 0.5;
+      //const double coord = computeEdgeMiddleCoord(e->p1,e->p2,gf,m.scalingU,m.scalingV);
+      BDS_Point *mid ;
+      mid  = m.add_point(++m.MAXPOINTNUMBER,
+			 coord * e->p1->u + (1 - coord) * e->p2->u,
+			 coord * e->p1->v + (1 - coord) * e->p2->v,gf);
+      
+      mid->lcBGM() = BGM_MeshSize(gf,
+				  (coord * e->p1->u + (1 - coord) * e->p2->u)*m.scalingU,
+				  (coord * e->p1->v + (1 - coord) * e->p2->v)*m.scalingV,
+				  mid->X,mid->Y,mid->Z);
+      mid->lc() = 0.5 * ( e->p1->lc() +  e->p2->lc() );		  
+      if(!m.split_edge ( e, mid )) m.del_point(mid);
+      else nb_split++;
+    }
+  }
+}
+
+
 void collapseEdgePass(GFace *gf, BDS_Mesh &m, double MINE_, int MAXNP, int &nb_collaps)
+{
+  std::list<BDS_Edge*>::iterator it = m.edges.begin();
+  std::vector<std::pair<double, BDS_Edge*> > edges;
+
+  while (it != m.edges.end()){
+    if(!(*it)->deleted && (*it)->numfaces() == 2){
+      double lone = NewGetLc(*it, gf,m.scalingU,m.scalingV);
+      if(lone < MINE_){
+	edges.push_back (std::make_pair (lone, *it) );
+      }
+    }
+    ++it;
+  }
+
+  std::sort(edges.begin(),edges.end());
+
+  for (int i=0;i<edges.size();i++){
+    BDS_Edge *e = edges[i].second;
+    //    printf("%12.5E\n",edges[i].first);
+    if(!e->deleted){
+      bool res = false;
+      if(e->p1->iD > MAXNP)
+	res = m.collapse_edge_parametric(e,e->p1);
+      else if(e->p2->iD > MAXNP)
+	res = m.collapse_edge_parametric(e,e->p2);
+      if(res)
+	nb_collaps++;
+    }
+  }
+}
+
+
+void collapseEdgePassUnSorted(GFace *gf, BDS_Mesh &m, double MINE_, int MAXNP, int &nb_collaps)
 {
   int NN1 = m.edges.size();
   int NN2 = 0;
   std::list<BDS_Edge*>::iterator it = m.edges.begin();
+
   while (1){
     if(NN2++ >= NN1) break;
     
@@ -454,8 +527,10 @@ void collapseEdgePass(GFace *gf, BDS_Mesh &m, double MINE_, int MAXNP, int &nb_c
   }
 }
 
+
 void smoothVertexPass(GFace *gf, BDS_Mesh &m, int &nb_smooth, bool q)
 {
+  //  return;
   std::set<BDS_Point*,PointLessThan>::iterator itp = m.points.begin();
   while(itp != m.points.end()){      
     if(m.smooth_point_centroid(*itp, gf,q))
@@ -543,7 +618,7 @@ void gmshRefineMeshBDS (GFace *gf,
       double t3 = Cpu();
       collapseEdgePass ( gf, m, minE , MAXNP, nb_collaps);
       double t4 = Cpu();
-      //      swapEdgePass ( gf, m, nb_swap); 
+      //     swapEdgePass ( gf, m, nb_swap); 
       double t5 = Cpu();
       smoothVertexPass ( gf, m, nb_smooth,false);
       double t6 = Cpu();
@@ -764,10 +839,10 @@ void gmshCollapseSmallEdges (GModel &gm){
   }
   BDS_Mesh *pm = gmsh2BDS (faces);
   outputScalarField(pm->triangles,"all.pos",0);
-
   
   for (GModel::eiter eit = gm.firstEdge(); eit != gm.lastEdge(); eit++){
-  }
-  
+  } 
+
 
+  delete pm;
 }
diff --git a/Mesh/qualityMeasures.cpp b/Mesh/qualityMeasures.cpp
index 52645af783..68aacd7806 100644
--- a/Mesh/qualityMeasures.cpp
+++ b/Mesh/qualityMeasures.cpp
@@ -1,4 +1,4 @@
-// $Id: qualityMeasures.cpp,v 1.7 2008-02-17 08:48:01 geuzaine Exp $
+// $Id: qualityMeasures.cpp,v 1.8 2008-02-21 09:45:15 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -79,6 +79,18 @@ double qmTriangle(const double &xa, const double &ya, const double &za,
       else quality = 2 * (2*sina*sinb*sinc/(sina + sinb + sinc) );
     }
     break;
+    // condition number
+  case QMTRI_COND:
+    {
+      double a [3] = {xc-xa,yc-ya,zc-za};
+      double b [3] = {xb-xa,yb-ya,zb-za};
+      double c [3] ; prodve(a,b,c); norme(c);
+      double A[3][3] = { a[0] , b[0] , c[0] ,
+			 a[1] , b[1] , c[1] ,
+			 a[2] , b[2] , c[2] };            
+      quality = -1;
+    }
+    break;
   default:
     throw;
   }  
diff --git a/Mesh/qualityMeasures.h b/Mesh/qualityMeasures.h
index 71c56d093e..1443288a4d 100644
--- a/Mesh/qualityMeasures.h
+++ b/Mesh/qualityMeasures.h
@@ -25,8 +25,8 @@ class BDS_Face;
 class MVertex;
 class MTriangle;
 class MTetrahedron;
-enum gmshQualityMeasure4Triangle {QMTRI_RHO};
-enum gmshQualityMeasure4Tet      {QMTET_1,QMTET_2,QMTET_3,QMTET_ONE};
+enum gmshQualityMeasure4Triangle {QMTRI_RHO,QMTRI_COND};
+enum gmshQualityMeasure4Tet      {QMTET_1,QMTET_2,QMTET_3,QMTET_ONE,QMTET_COND};
 
 double qmTriangle(MTriangle *f, const gmshQualityMeasure4Triangle &cr); 
 double qmTriangle(BDS_Face *f, const gmshQualityMeasure4Triangle &cr); 
diff --git a/Numeric/FunctionSpace.cpp b/Numeric/FunctionSpace.cpp
new file mode 100644
index 0000000000..9dc7527aa6
--- /dev/null
+++ b/Numeric/FunctionSpace.cpp
@@ -0,0 +1,559 @@
+#include <cmath>
+#include "FunctionSpace.h"
+#include "GmshDefines.h"
+
+Double_Matrix generatePascalTriangle(int order) {
+  
+  Double_Matrix monomials((order+1)*(order+2)/2,2);
+  int index = 0;
+  for (int i=0;i<=order;i++) {
+    for (int j=0;j<=i;j++) {
+      monomials(index,0) = i - j;
+      monomials(index,1) = j;
+      index++;
+    }
+  }
+  return monomials;
+}
+
+// -----------------------------------------------------------------------------
+/*! generate the exterior hull of the Pascal triangle for Serendipity element */
+// -----------------------------------------------------------------------------
+
+Double_Matrix generatePascalSerendipityTriangle(int order) {
+
+  Double_Matrix monomials(3 * order,2);
+
+  monomials(0,0) = 0;
+  monomials(0,1) = 0;
+  
+  int index = 1;
+  for (int i=1;i<=order;i++) {
+    if (i==order) {
+      for (int j=0;j<=i;j++) {
+        monomials(index,0) = i - j;
+        monomials(index,1) = j;
+        index++;
+      }
+    }
+    else {
+      monomials(index,0) = i;
+      monomials(index,1) = 0;
+      index++;
+
+      monomials(index,0) = 0;
+      monomials(index,1) = i;
+      index++;
+    }
+  }
+  return monomials;
+}
+
+
+// -----------------------------------------------------------------------------
+/*!\brief generate the monomials subspace of all monomials of order exactly == p */
+// -----------------------------------------------------------------------------
+
+Double_Matrix generateMonomialSubspace(int dim,int p) {
+  
+  Double_Matrix monomials;
+  
+  switch (dim) {
+  case 1:
+    monomials = Double_Matrix(1,1);
+    monomials(0,0) = p;
+    break;
+  case 2:
+    monomials = Double_Matrix(p+1,2);
+    for (int k=0;k<=p;k++) {
+      monomials(k,0) = p - k;
+      monomials(k,1) = k;
+    }
+    break;
+  case 3:
+    monomials = Double_Matrix((p+1)*(p+2)/2,3);
+    int index = 0;
+    for (int i=0;i<=p;i++) {
+      for (int k=0;k<=p-i;k++) {
+        monomials(index,0) = p - i - k;
+        monomials(index,1) = k;
+        monomials(index,2) = i;
+        index++;
+      }
+    }
+    break;
+  }
+  return monomials;
+}
+
+
+// -----------------------------------------------------------------------------
+/*!\brief generate external hull of the Pascal tetrahedron */
+// -----------------------------------------------------------------------------
+
+Double_Matrix generatePascalSerendipityTetrahedron(int order) {
+
+  int nbMonomials = 4 + 6 * std::max(0,order-1) + 4 * std::max(0,(order-2)*(order-1)/2);
+  Double_Matrix monomials(nbMonomials,3);
+
+  // order 0
+  
+  monomials.set_all(0);
+  
+  monomials(0,0) = 0;
+  monomials(0,1) = 0;
+  monomials(0,2) = 0;
+
+  int index = 1;
+  for (int p=1;p<order;p++) {
+    for (int i=0;i<3;i++) {
+      int j = (i+1)%3;
+      int k = (i+2)%3;
+      for (int ii=0;ii<p;ii++) {
+        monomials(index,i) = p - ii;
+        monomials(index,j) = ii;
+        monomials(index,k) = 0;
+        index++;
+      }
+    }
+  }
+  Double_Matrix monomialsMaxOrder = generateMonomialSubspace(3,order);
+  int nbMaxOrder = monomialsMaxOrder.size1();
+    
+  Double_Matrix(monomials.touchSubmatrix(index,nbMaxOrder,0,3)).memcpy(monomialsMaxOrder);
+  return monomials;
+}
+
+// -----------------------------------------------------------------------------
+/*!\brief generate Pascal tetrahedron */
+// -----------------------------------------------------------------------------
+
+
+Double_Matrix generatePascalTetrahedron(int order) {
+
+  int nbMonomials = (order+1)*(order+2)*(order+3) / 6;
+
+  Double_Matrix monomials(nbMonomials,3);
+
+  int index = 0;
+  for (int p=0;p<=order;p++) {
+    Double_Matrix monOrder = generateMonomialSubspace(3,p);
+    int nb = monOrder.size1();
+    Double_Matrix(monomials.touchSubmatrix(index,nb,0,3)).memcpy(monOrder);
+    index += nb;
+  }
+
+  return monomials;
+}  
+
+
+
+int nbdoftriangle(int order) {return (order+1)*(order+2)/2;}
+int nbdoftriangleserendip(int order) {return 3 * order;}
+
+void nodepositionface0(int order,  double *u,  double *v,  double *w){
+
+  int ndofT = nbdoftriangle(order);
+  if (order ==0) {u[0]=0.;v[0]=0.; return;}     
+  
+  u[0]= 0.;    v[0]= 0.;  w[0] = 0.;
+  u[1]= order; v[1]= 0;   w[1] = 0.;
+  u[2]= 0.;    v[2]= order; w[2] = 0.;
+  // edges
+  for (int k=0; k< (order-1); k++){
+    u[3+k] = k+1; v[3+k]=0.; w[3+k] = 0.;
+    u[3+order-1+k] = order -1 -k ; v [3+order-1+k] = k+1; w[3+order-1+k] = 0.;
+    u[3+2*(order-1)+k] = 0. ; v [3+2*(order-1)+k] = order -1 -k; w [3+2*(order-1)+k] = 0.;
+  }
+  if (order >2){
+    int nbdoftemp = nbdoftriangle(order-3);
+    nodepositionface0(order-3,&u[3+3*(order-1)], &v[3+3*(order-1)], &w[3+3*(order-1)]);
+    for (int k=0; k< nbdoftemp; k++){
+      u[3+k+3*(order-1)] = u[3+k+3*(order-1)]*(order-3)+1.;
+      v[3+k+3*(order-1)] = v[3+k+3*(order-1)]*(order-3)+1.;
+      w[3+k+3*(order-1)] = w[3+k+3*(order-1)]*(order-3);
+      }
+  }
+  for (int k=0; k< ndofT; k++){
+    u[k] = u[k]/order;
+    v[k] = v[k]/order;
+    w[k] = w[k]/order;
+  }
+  return;     
+};
+
+
+// -----------------------------------------------------------------------------
+void nodepositionface1(int order,  double *u,  double *v,  double *w){
+   int ndofT = nbdoftriangle(order);
+   if (order ==0) {u[0]=0.;v[0]=0.; return;}     
+   
+   u[0]= 0.;    v[0]= 0.;  w[0] = 0.;
+   u[1]= order; v[1]= 0;   w[1] = 0.;
+   u[2]= 0.;    v[2]= 0.;  w[2] = order;
+   // edges
+   for (int k=0; k< (order-1); k++){
+     u[3+k] = k+1; v[3+k]=0.; w[3+k] = 0.;
+     u[3+order-1+k] = order -1 -k; v[3+order-1+k] = 0.;     w[3+order-1+k] = k+1; 
+     u[3+2*(order-1)+k] = 0. ;     v[3+2*(order-1)+k] = 0.; w[3+2*(order-1)+k] = order -1 -k; 
+   }
+   if (order >2){
+     int nbdoftemp = nbdoftriangle(order-3);
+     nodepositionface1(order-3,&u[3+3*(order-1)], &v[3+3*(order-1)], &w[3+3*(order-1)]);
+      for (int k=0; k< nbdoftemp; k++){
+	u[3+k+3*(order-1)] = u[3+k+3*(order-1)]*(order-3)+1.;
+        v[3+k+3*(order-1)] = v[3+k+3*(order-1)]*(order-3);
+	w[3+k+3*(order-1)] = w[3+k+3*(order-1)]*(order-3)+1.;
+      }
+   }
+   for (int k=0; k< ndofT; k++){
+     u[k] = u[k]/order;
+     v[k] = v[k]/order;
+     w[k] = w[k]/order;
+   }
+   return;
+};
+
+// -----------------------------------------------------------------------------
+void nodepositionface2(int order,  double *u,  double *v,  double *w){
+   int ndofT = nbdoftriangle(order);
+   if (order ==0) {u[0]=0.;v[0]=0.; return;}     
+   
+   u[0]= order;    v[0]= 0.;  w[0] = 0.;
+   u[1]= 0.; v[1]= order;   w[1] = 0.;
+   u[2]= 0.;    v[2]= 0.;   w[2] = order;
+   // edges
+   for (int k=0; k< (order-1); k++){
+     u[3+k] = order -1 -k;     v[3+k]= k+1;                  w[3+k] = 0.;
+     u[3+order-1+k] = 0.;      v[3+order-1+k] = order -1 -k; w[3+order-1+k] = k+1; 
+     u[3+2*(order-1)+k] = k+1; v[3+2*(order-1)+k] = 0.;      w[3+2*(order-1)+k] = order -1 -k; 
+   }
+   if (order >2){
+     int nbdoftemp = nbdoftriangle(order-3);
+     nodepositionface2(order-3,&u[3+3*(order-1)], &v[3+3*(order-1)], &w[3+3*(order-1)]);
+      for (int k=0; k< nbdoftemp; k++){
+        u[3+k+3*(order-1)] = u[3+k+3*(order-1)]*(order-3)+1.;
+        v[3+k+3*(order-1)] = v[3+k+3*(order-1)]*(order-3)+1.;
+	w[3+k+3*(order-1)] = w[3+k+3*(order-1)]*(order-3)+1.;
+      }
+   }
+   for (int k=0; k< ndofT; k++){
+     u[k] = u[k]/order;
+     v[k] = v[k]/order;
+     w[k] = w[k]/order;
+   }
+   return;
+};
+
+// -----------------------------------------------------------------------------
+void nodepositionface3(int order,  double *u,  double *v,  double *w){
+   int ndofT = nbdoftriangle(order);
+   if (order ==0) {u[0]=0.;v[0]=0.; return;}     
+   
+   u[0]= 0.;    v[0]= 0.;  w[0] = 0.;
+   u[1]= 0.;    v[1]= order;   w[1] = 0.;
+   u[2]= 0.;    v[2]= 0.;   w[2] = order;
+   // edges
+   for (int k=0; k< (order-1); k++){
+     u[3+k] = 0.;             v[3+k]= k+1;                  w[3+k] = 0.;
+     u[3+order-1+k] = 0.;     v[3+order-1+k] = order -1 -k; w[3+order-1+k] = k+1; 
+     u[3+2*(order-1)+k] = 0.; v[3+2*(order-1)+k] = 0.;      w[3+2*(order-1)+k] = order -1 -k; 
+   }
+   if (order >2){
+     int nbdoftemp = nbdoftriangle(order-3);
+     nodepositionface3(order-3,&u[3+3*(order-1)], &v[3+3*(order-1)], &w[3+3*(order-1)]);
+      for (int k=0; k< nbdoftemp; k++){
+	u[3+k+3*(order-1)] = u[3+k+3*(order-1)]*(order-3);
+        v[3+k+3*(order-1)] = v[3+k+3*(order-1)]*(order-3)+1.;
+	w[3+k+3*(order-1)] = w[3+k+3*(order-1)]*(order-3)+1.;
+      }
+   }
+   for (int k=0; k< ndofT; k++){
+     u[k] = u[k]/order;
+     v[k] = v[k]/order;
+     w[k] = w[k]/order;
+   }
+   return;
+}
+
+// -----------------------------------------------------------------------------
+Double_Matrix gmshGeneratePointsTetrahedron(int order,bool serendip) {
+
+  int nbPoints = (serendip ?
+                  4 +  6 * std::max(0,order-1) + 4 * std::max(0,(order-2)*(order-1)/2):
+                  (order+1)*(order+2)*(order+3)/6);
+  
+  Double_Matrix point(nbPoints,3);
+
+  double overOrder = 1./order;
+
+  point(0,0)= 0.;
+  point(0,1)= 0.;
+  point(0,2)= 0.;
+
+  if (order > 0) {
+    
+  
+    point(1,0)= order;
+    point(1,1)= 0;
+    point(1,2)= 0;
+    
+    point(2,0)= 0.;
+    point(2,1)= order;
+    point(2,2)= 0.;
+    
+    point(3,0)= 0.;
+    point(3,1)= 0.;
+    point(3,2)= order;
+    
+    if (order > 1) {
+      for (int k=0; k< (order-1); k++) {
+        point(4+k,0) = k+1;
+        point(4+order-1+k,0)  = order-1-k;
+        point(4+2*(order-1)+k,0)  = 0.; 
+        point(4+3*(order-1)+k,0)  = 0.;
+        point(4+4*(order-1)+k,0)  = order-1-k;
+        point(4+5*(order-1)+k,0)  = 0.;
+	
+        point(4+k,1) = 0.;
+        point(4+order-1+k,1)      = k+1;
+        point(4+2*(order-1)+k,1)  = order-1-k; 
+        point(4+3*(order-1)+k,1)  = 0.;
+        point(4+4*(order-1)+k,1)  = 0.;
+        point(4+5*(order-1)+k,1)  = order-1-k;
+        
+        point(4+k,2) = 0.;
+        point(4+order-1+k,2)      = 0.;
+        point(4+2*(order-1)+k,2)  = 0.; 
+        point(4+3*(order-1)+k,2)  = k+1;
+        point(4+4*(order-1)+k,2)  = k+1;
+        point(4+5*(order-1)+k,2)  = k+1; 
+      }
+      
+      if (order > 2) {
+        int ns = 4+6*(order-1);
+        int nbdofface = nbdoftriangle(order-3);
+        
+        double *u = new double[nbdofface];
+        double *v = new double[nbdofface];
+        double *w = new double[nbdofface];
+        
+        nodepositionface0(order-3, u,v,w);
+
+        for (int i=0; i < nbdofface; i++){
+          point(ns+i,0) = u[i]*(order-3) + 1.;
+          point(ns+i,1) = v[i]*(order-3) + 1.;
+          point(ns+i,2) = w[i]*(order-3);
+        }
+        
+        ns = ns + nbdofface;
+
+        nodepositionface1(order-3, u,v,w);
+        
+        for (int i=0; i < nbdofface; i++){
+          point(ns+i,0) = u[i]*(order-3) + 1.;
+          point(ns+i,1) = v[i]*(order-3) ;
+          point(ns+i,2) = w[i]*(order-3) + 1.;
+        }
+        
+        ns = ns + nbdofface;
+
+        nodepositionface2(order-3, u,v,w);
+        
+        for (int i=0; i < nbdofface; i++){
+          point(ns+i,0) = u[i]*(order-3) + 1.;
+          point(ns+i,1) = v[i]*(order-3) + 1.;
+          point(ns+i,2) = w[i]*(order-3) + 1.;
+        }
+
+        ns =ns +nbdofface;
+
+        nodepositionface3(order-3, u,v,w);
+
+        for (int i=0; i < nbdofface; i++){
+          point(ns+i,0) = u[i]*(order-3);
+          point(ns+i,1) = v[i]*(order-3) + 1.;
+          point(ns+i,2) = w[i]*(order-3) + 1.;
+        }
+
+        ns =ns + nbdofface;
+
+        delete [] u;
+        delete [] v;
+        delete [] w;
+        
+        
+        if (!serendip && order > 3) {
+  
+          Double_Matrix interior = gmshGeneratePointsTetrahedron (order-4,false); // tetrahedron order - 4
+          for (size_t k=0; k< interior.size1() ; k++) {
+            point(ns+k,0) = 1.+interior(k,0)*(order-4);
+            point(ns+k,1) = 1.+interior(k,1)*(order-4);
+            point(ns+k,2) = 1.+interior(k,2)*(order-4);
+          }
+        }
+      }
+    }
+  }
+  
+  point.scale(overOrder);  
+  return point;
+}
+
+
+Double_Matrix gmshGeneratePointsTriangle(int order,bool serendip) {
+
+  int nbPoints = serendip ? 3 * order : (order+1)*(order+2)/2;
+  Double_Matrix point(nbPoints,2);
+  
+  point(0,0) = 0;
+  point(0,1) = 0;
+  
+  double dd = 1./order;
+
+  if (order > 0) {
+ 
+    point(1,0) = 1;
+    point(1,1) = 0;
+    point(2,0) = 0;
+    point(2,1) = 1;
+    
+    int index = 3;
+    
+    if (order > 1) {
+      
+      double ksi = 0;
+      double eta = 0;
+      
+      for (int i=0;i<order-1;i++,index++) {
+        ksi += dd;
+        point(index,0) = ksi;
+        point(index,1) = eta;
+      }
+      
+      ksi = 1.;
+      
+      for (int i=0;i<order-1;i++,index++) {
+        ksi -= dd;
+        eta += dd;
+        point(index,0) = ksi;
+        point(index,1) = eta;
+      } 
+        
+      eta = 1.;
+      ksi = 0.;
+
+      for (int i=0;i<order-1;i++,index++) {
+        eta -= dd;
+        point(index,0) = ksi;
+        point(index,1) = eta;
+      } 
+
+      if (order > 2 && !serendip) {
+        Double_Matrix inner = gmshGeneratePointsTriangle(order - 3, serendip);
+        inner.scale(1.-3.*dd);
+        inner.add(dd);
+        Double_Matrix(point.touchSubmatrix(index,nbPoints - index,0,2)).memcpy(inner);
+      }
+    }
+  }
+  return point;  
+}
+
+Double_Matrix generateLagrangeMonomialCoefficients(const Double_Matrix& monomial,const Double_Matrix& point) {
+  
+  if (monomial.size1() != point.size1()) throw;
+  if (monomial.size2() != point.size2()) throw;
+  
+  int ndofs = monomial.size1();
+  int dim   = monomial.size2();
+  
+  Double_Matrix Vandermonde(ndofs,ndofs);
+  
+  for (int i=0;i<ndofs;i++) {
+    for (int j=0;j<ndofs;j++) {
+      double dd = 1.;
+      for (int k=0;k<dim;k++) dd *= pow(point(i,k),monomial(j,k));
+      Vandermonde(i,j) = dd;
+    }
+  }
+  
+  // check for independence
+  
+  double det = Vandermonde.determinant();
+
+  if (det == 0.0)throw;
+
+  Double_Matrix coefficient(ndofs,ndofs);
+  
+  for (int i=0;i<ndofs;i++) {
+    for (int j=0;j<ndofs;j++) {
+      int f = (i+j)%2 == 0 ? 1 : -1;
+      Double_Matrix cofactor = Vandermonde.cofactor(i,j);
+      coefficient(i,j) = f * cofactor.determinant()/det;
+    }
+  }
+
+  Vandermonde.set_all(0.);
+  
+  for (int i=0;i<ndofs;i++) {
+    for (int j=0;j<ndofs;j++) {
+      double dd = 1.;
+      for (int k=0;k<dim;k++) dd *= pow(point(i,k),monomial(j,k));
+      
+      for (int k=0;k<ndofs;k++) {
+        Vandermonde(i,k) += coefficient(k,j)*dd;
+      }
+    }
+  }
+  return coefficient;
+}
+
+std::map<int,gmshFunctionSpace> gmshFunctionSpaces::fs ;
+
+const gmshFunctionSpace & gmshFunctionSpaces::find (int tag) {
+  std::map<int,gmshFunctionSpace>::const_iterator it = fs.find(tag);
+  if (it != fs.end())return it->second;
+  
+  gmshFunctionSpace F;
+  
+  switch ( tag ){
+  case MSH_TRI_3 :
+    F.monomials = generatePascalTriangle (1);
+    F.points =    gmshGeneratePointsTriangle(1, false);
+    break;
+  case MSH_TRI_6 :
+    F.monomials = generatePascalTriangle (2);
+    F.points =    gmshGeneratePointsTriangle(2, false);
+    break;
+  case MSH_TRI_9 :
+    F.monomials = generatePascalSerendipityTriangle (3);
+    F.points =    gmshGeneratePointsTriangle(3, true);
+    break;
+  case MSH_TRI_10 :
+    F.monomials = generatePascalTriangle (3);
+    F.points =    gmshGeneratePointsTriangle(3, false);
+    break;
+  case MSH_TRI_12 :
+    F.monomials = generatePascalSerendipityTriangle (4);
+    F.points =    gmshGeneratePointsTriangle(4, true);
+    break;
+  case MSH_TRI_15 :
+    F.monomials = generatePascalTriangle (4);
+    F.points =    gmshGeneratePointsTriangle(4, false);
+    break;
+  case MSH_TRI_15I :
+    F.monomials = generatePascalSerendipityTriangle (5);
+    F.points =    gmshGeneratePointsTriangle(5, true);
+    break;
+  case MSH_TRI_21 :
+    F.monomials = generatePascalTriangle (5);
+    F.points =    gmshGeneratePointsTriangle(5, false);
+    break;
+  default :
+    throw;
+  }  
+  F.coefficients = generateLagrangeMonomialCoefficients ( F.monomials, F.points );    
+  fs.insert(std::make_pair(tag,F));
+  return fs[tag];
+}
diff --git a/Numeric/FunctionSpace.h b/Numeric/FunctionSpace.h
new file mode 100644
index 0000000000..aebad28901
--- /dev/null
+++ b/Numeric/FunctionSpace.h
@@ -0,0 +1,109 @@
+#ifndef _GMSH_FCTSP_H_
+#define _GMSH_FCTSP_H_
+
+// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+#include <map>
+#include "GmshMatrix.h"
+struct gmshFunctionSpace 
+{
+  Double_Matrix points;
+  Double_Matrix monomials;
+  Double_Matrix coefficients;
+  inline void computePows ( double uu, double vv , double p[][2]) const{
+    for(int j = 0; j < coefficients.size2(); j++){
+      p[j][0] = pow(uu,monomials(j,0)); 
+      p[j][1] = pow(vv,monomials(j,1)); 
+    }
+  }
+
+  inline void f ( double u, double v, double w, double *sf) const{
+    for (int i = 0; i < coefficients.size1(); i++){
+      sf[i] = 0;
+      for(int j = 0; j < coefficients.size2(); j++){
+	sf[i] += coefficients(i,j) * 
+	  pow(u,monomials(j,0)) * 
+	  pow(v,monomials(j,1)) *
+	  pow(w,monomials(j,2));
+      }
+    }
+  }
+  inline void f ( double u, double v, double *sf) const{
+    double p[256][2];
+    computePows ( u, v , p);
+    for (int i = 0; i < coefficients.size1(); i++){
+      sf[i] = 0;
+      for(int j = 0; j < coefficients.size2(); j++){
+	sf[i] += coefficients(i,j) * p[j][0] * p[j][1] ;
+      }
+    }
+  }
+  inline void df ( double u, double v, double w, double grads[][3])  const{
+    for (int i = 0; i < coefficients.size1(); i++){
+      grads[i][0] = 0;
+      grads[i][1] = 0;
+      grads[i][2] = 0;
+      for(int j = 0; j < coefficients.size2(); j++){
+	if ((monomials)(j,0)  > 0)
+	  grads[i][0] += (coefficients)(i,j) * 
+	    pow(u,(monomials)(j,0)-1) * (monomials)(j,0) *
+	    pow(v,(monomials)(j,1)) *
+	    pow(w,(monomials)(j,2));
+	if ((monomials)(j,1)  > 0)
+	  grads[i][1] += (coefficients)(i,j) * 
+	    pow(u,(monomials)(j,0)) * 
+	    pow(v,(monomials)(j,1)-1) * (monomials)(j,1) *
+	    pow(w,(monomials)(j,2));
+	if ((monomials)(j,2)  > 0)
+	  grads[i][2] += (coefficients)(i,j) * 
+	    pow(u,(monomials)(j,0)) * 
+	    pow(v,(monomials)(j,1)) *
+	    pow(w,(monomials)(j,2)-1) * (monomials)(j,2) ;
+      }
+    }
+  }
+  inline void df ( double u, double v, double grads[][2])  const{
+
+    double p[256][2];
+    computePows ( u, v , p);
+    
+    for (int i = 0; i < coefficients.size1(); i++){
+      grads[i][0] = 0;
+      grads[i][1] = 0;
+      for(int j = 0; j < coefficients.size2(); j++){
+	if ((monomials)(j,0)  > 0)
+	  grads[i][0] += (coefficients)(i,j) * 
+	    pow(u,(monomials)(j,0)-1) * (monomials)(j,0) * p[j][1];
+	if ((monomials)(j,1)  > 0)
+	  grads[i][1] += (coefficients)(i,j) * p[j][0] *
+	    pow(v,(monomials)(j,1)-1) * (monomials)(j,1);
+      }
+    }
+  }
+};
+
+class gmshFunctionSpaces 
+{
+  static std::map<int,gmshFunctionSpace> fs;
+ public :
+  static const gmshFunctionSpace & find ( int ); 
+};
+
+
+#endif
diff --git a/Numeric/GaussLegendre1D.h b/Numeric/GaussLegendre1D.h
new file mode 100644
index 0000000000..3d1de52547
--- /dev/null
+++ b/Numeric/GaussLegendre1D.h
@@ -0,0 +1,101 @@
+#ifndef _GMSH_GL1D_
+#define _GMSH_GL1D_
+// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+ /* 1 point rule points */
+ static double _GL_pt1[1]={
+  0.000000000000000e+00};
+
+ /* 1 point rule weights */
+ static double _GL_wt1[1]={
+  2.000000000000000e+00};
+
+ /* 2 point rule points */
+ static double _GL_pt2[2]={
+ -5.773502691896257e-01, 5.773502691896257e-01};
+
+ /* 2 point rule weights */
+ static double _GL_wt2[2]={
+  1.000000000000000e+00, 1.000000000000000e+00};
+
+ /* 3 point rule points */
+ static double _GL_pt3[3]={
+ -7.745966692414834e-01, 0.000000000000000e+00, 7.745966692414834e-01};
+
+ /* 3 point rule weights */
+ static double _GL_wt3[3]={
+  5.555555555555552e-01, 8.888888888888888e-01, 5.555555555555552e-01};
+
+ /* 4 point rule points */
+ static double _GL_pt4[4]={
+ -8.611363115940526e-01,-3.399810435848563e-01, 3.399810435848563e-01, 8.611363115940526e-01};
+
+ /* 4 point rule weights */
+ static double _GL_wt4[4]={
+  3.478548451374537e-01, 6.521451548625464e-01, 6.521451548625464e-01, 3.478548451374537e-01};
+
+ /* 5 point rule points */
+ static double _GL_pt5[5]={
+ -9.061798459386640e-01,-5.384693101056831e-01, 0.000000000000000e+00, 5.384693101056831e-01, 9.061798459386640e-01};
+
+ /* 5 point rule weights */
+ static double _GL_wt5[5]={
+  2.369268850561890e-01, 4.786286704993665e-01, 5.688888888888889e-01, 4.786286704993665e-01, 2.369268850561890e-01};
+
+ /* 6 point rule points */
+ static double _GL_pt6[6]={
+ -9.324695142031521e-01,-6.612093864662646e-01,-2.386191860831969e-01, 2.386191860831969e-01, 6.612093864662646e-01, 9.324695142031521e-01};
+
+ /* 6 point rule weights */
+ static double _GL_wt6[6]={
+  1.713244923791705e-01, 3.607615730481386e-01, 4.679139345726913e-01, 4.679139345726913e-01, 3.607615730481386e-01, 1.713244923791705e-01};
+
+inline void gmshGaussLegendre1D (int nbQuadPoints , double **t, double **w){
+  switch (nbQuadPoints){
+  case 1:
+    *t = _GL_pt1;
+    *w = _GL_wt1;
+    break;
+  case 2:
+    *t = _GL_pt2;
+    *w = _GL_wt2;
+    break;
+  case 3:
+    *t = _GL_pt3;
+    *w = _GL_wt3;
+    break;
+  case 4:
+    *t = _GL_pt4;
+    *w = _GL_wt4;
+    break;
+  case 5:
+    *t = _GL_pt5;
+    *w = _GL_wt5;
+    break;
+  case 6:
+    *t = _GL_pt6;
+    *w = _GL_wt6;
+    break;
+  default :
+    throw;
+  }
+}
+
+#endif
diff --git a/Numeric/Makefile b/Numeric/Makefile
index 4d4b83c17e..ab2bc83a86 100644
--- a/Numeric/Makefile
+++ b/Numeric/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.47 2008-02-17 08:48:02 geuzaine Exp $
+# $Id: Makefile,v 1.48 2008-02-21 09:45:16 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -30,6 +30,7 @@ CFLAGS = ${OPTIM} ${FLAGS} ${INC} ${SYSINCLUDE}
 SRC = Numeric.cpp\
         NumericEmbedded.cpp\
       EigSolve.cpp\
+      FunctionSpace.cpp\
       predicates.cpp\
       gsl_newt.cpp\
       gsl_min.cpp\
diff --git a/benchmarks/2d/naca12_2d.geo b/benchmarks/2d/naca12_2d.geo
index dade16bbc5..b2bb3e960d 100644
--- a/benchmarks/2d/naca12_2d.geo
+++ b/benchmarks/2d/naca12_2d.geo
@@ -1,5 +1,5 @@
 lc = 0.2;
-lc2 = 1;
+lc2 = 1.5;
 lc3 = 0.2;
 Point(1) =  {1.000000e+00,0.000000e+00,0.000000e+00,lc}; 
 Point(2) =  {9.997533e-01,0.000000e+00,-3.498543e-05,lc}; 
-- 
GitLab