From 7cbd675d3dbd19408c193eff6a34de995bf17fb4 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Fri, 4 Aug 2006 14:28:03 +0000
Subject: [PATCH] *** empty log message ***

---
 Common/GmshDefines.h             |   19 +
 Common/Makefile                  |  300 +----
 DataStr/Makefile                 |    8 +-
 Fltk/Main.cpp                    |    7 +-
 Fltk/Makefile                    |  328 +----
 Geo/GEdge.cpp                    |   32 +-
 Geo/GEdge.h                      |    3 +
 Geo/GEntity.h                    |   18 +-
 Geo/GFace.cpp                    |   41 +-
 Geo/GFace.h                      |    7 +-
 Geo/GModel.h                     |    7 +
 Geo/GModelIO.cpp                 |  514 +++++++
 Geo/GRegion.cpp                  |   29 +-
 Geo/GRegion.h                    |    7 +-
 Geo/GVertex.h                    |   12 +-
 Geo/MElement.cpp                 |  107 ++
 Geo/MElement.h                   |  413 ++++++
 Geo/MVertex.cpp                  |    5 +
 Geo/MVertex.h                    |   79 +-
 Geo/Makefile                     |  112 +-
 Geo/gmshEdge.cpp                 |   40 +-
 Geo/gmshEdge.h                   |    3 +-
 Geo/gmshFace.cpp                 |  131 +-
 Geo/gmshFace.h                   |    4 +-
 Geo/gmshModel.cpp                |   87 +-
 Geo/gmshRegion.cpp               |   25 +-
 Geo/gmshRegion.h                 |    1 +
 Geo/gmshVertex.h                 |   23 +-
 Graphics/CreateFile.cpp          |   34 +-
 Graphics/Draw.cpp                |   13 +-
 Graphics/Draw.h                  |    2 +-
 Graphics/Geom.cpp                |  361 +----
 Graphics/Makefile                |  699 ++--------
 Graphics/Mesh.cpp                | 2131 +-----------------------------
 Graphics/Post.cpp                |    9 +-
 Graphics/gl2ps.cpp               |   53 +-
 Graphics/gl2ps.h                 |    4 +-
 Makefile                         |    4 +-
 Mesh/2D_Mesh_Aniso.cpp           |   11 +-
 Mesh/Makefile                    |  356 ++---
 Mesh/meshGEdge.cpp               |    7 +-
 Mesh/meshGFace.cpp               |  118 +-
 Numeric/Makefile                 |   53 +-
 Parallel/Makefile                |    3 +-
 Parser/Makefile                  |  117 +-
 Parser/OpenFile.cpp              |    8 +-
 Plugin/Makefile                  | 1273 ++----------------
 benchmarks/3d/sphere_in_cube.geo |   78 ++
 contrib/ANN/Makefile             |   16 +-
 contrib/MathEval/Makefile        |    8 +-
 contrib/Metis/Makefile           |   54 +-
 contrib/Netgen/Makefile          |  101 +-
 52 files changed, 2353 insertions(+), 5522 deletions(-)
 create mode 100644 Geo/GModelIO.cpp
 create mode 100644 Geo/MElement.cpp
 create mode 100644 Geo/MElement.h
 create mode 100644 Geo/MVertex.cpp
 create mode 100644 benchmarks/3d/sphere_in_cube.geo

diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index f09eacc03e..3622e57623 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -1,5 +1,7 @@
 #ifndef _GMSH_DEFINES_H_
 #define _GMSH_DEFINES_H_
+
+// IO file formats
 #define FORMAT_MSH           1
 #define FORMAT_UNV           2
 #define FORMAT_GREF          3
@@ -30,6 +32,23 @@
 #define FORMAT_P3D           28
 #define FORMAT_SVG           29
 
+// Element types in .msh file format
+#define LGN1 1
+#define TRI1 2
+#define QUA1 3
+#define TET1 4
+#define HEX1 5
+#define PRI1 6
+#define PYR1 7
+#define LGN2 8
+#define TRI2 9
+#define QUA2 10
+#define TET2 11
+#define HEX2 12
+#define PRI2 13
+#define PYR2 14
+#define PNT  15
+
 #define CONV_VALUE    0.8
 
 #define VIS_GEOM  (1<<0)
diff --git a/Common/Makefile b/Common/Makefile
index aa40a0cc88..5af303006a 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.95 2006-07-25 12:08:23 remacle Exp $
+# $Id: Makefile,v 1.96 2006-08-04 14:28:01 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -64,6 +64,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Context.o: Context.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Context.h \
@@ -75,247 +76,52 @@ Context.o: Context.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   Views.h ColorTable.h VertexArray.h SmoothNormals.h 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 AdaptiveViews.h Trackball.h
+  AdaptiveViews.h Trackball.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 AdaptiveViews.o: AdaptiveViews.cpp AdaptiveViews.h ../DataStr/List.h \
-  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 ../Plugin/Plugin.h ../Common/Options.h \
-  ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
-  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h OS.h
+  GmshMatrix.h ../Plugin/Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h OS.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Views.o: Views.cpp Gmsh.h Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Numeric/Numeric.h Views.h ColorTable.h \
-  VertexArray.h SmoothNormals.h 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 AdaptiveViews.h Context.h Options.h \
-  ../contrib/MathEval/matheval.h
+  VertexArray.h SmoothNormals.h GmshMatrix.h AdaptiveViews.h Context.h \
+  Options.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 ViewsIO.o: ViewsIO.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Views.h \
-  ColorTable.h VertexArray.h SmoothNormals.h 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 AdaptiveViews.h Context.h
+  ColorTable.h VertexArray.h SmoothNormals.h GmshMatrix.h AdaptiveViews.h \
+  Context.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Octree.o: Octree.cpp Octree.h OctreeInternals.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 OctreeInternals.o: OctreeInternals.cpp Message.h OctreeInternals.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 OctreePost.o: OctreePost.cpp Octree.h OctreeInternals.h OctreePost.h \
   ../DataStr/List.h Views.h ColorTable.h VertexArray.h SmoothNormals.h \
-  ../Numeric/Numeric.h 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 AdaptiveViews.h Message.h ShapeFunctions.h
+  ../Numeric/Numeric.h GmshMatrix.h AdaptiveViews.h Message.h \
+  ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Options.o: Options.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Gmsh.h Message.h ../DataStr/Malloc.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
-  ../DataStr/Tree.h GmshUI.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h \
-  ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Graphics/Draw.h Context.h Options.h ../Fltk/Solvers.h ../Fltk/GUI.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h Gmsh.h Message.h \
+  ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h GmshUI.h \
+  ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
+  ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h ../Graphics/Draw.h \
+  Context.h Options.h ../Fltk/Solvers.h ../Fltk/GUI.h \
   ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h ../Common/GmshUI.h \
   ../Fltk/Popup_Button.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 CommandLine.o: CommandLine.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h GmshUI.h GmshVersion.h \
@@ -327,47 +133,15 @@ CommandLine.o: CommandLine.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   Views.h ColorTable.h VertexArray.h SmoothNormals.h 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 AdaptiveViews.h ../Parser/OpenFile.h \
-  ../Parser/Parser.h OS.h
+  AdaptiveViews.h ../Parser/OpenFile.h ../Parser/Parser.h OS.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 OS.o: OS.cpp Message.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 ColorTable.o: ColorTable.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ColorTable.h Context.h \
   ../Numeric/Numeric.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Geo/Geo.h ../Geo/CAD.h \
@@ -378,15 +152,19 @@ Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h ../Geo/ExtrudeParams.h ../Parser/Parser.h Visibility.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 Trackball.o: Trackball.cpp Trackball.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 VertexArray.o: VertexArray.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h VertexArray.h Context.h \
   ../Numeric/Numeric.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 SmoothNormals.o: SmoothNormals.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h \
   SmoothNormals.h
+# 1 "/Users/geuzaine/.gmsh/Common//"
 License.o: License.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h
diff --git a/DataStr/Makefile b/DataStr/Makefile
index 72abab9115..5819f6a3e1 100644
--- a/DataStr/Makefile
+++ b/DataStr/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.33 2006-07-25 12:08:23 remacle Exp $
+# $Id: Makefile,v 1.34 2006-08-04 14:28:01 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -55,9 +55,15 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 List.o: List.cpp Malloc.h List.h ../Common/Message.h SafeIO.h
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 Malloc.o: Malloc.cpp Malloc.h ../Common/Message.h
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 SafeIO.o: SafeIO.cpp SafeIO.h ../Common/Message.h
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 Tree.o: Tree.cpp Malloc.h Tree.h avl.h ../Common/Message.h
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 avl.o: avl.cpp avl.h Malloc.h
+# 1 "/Users/geuzaine/.gmsh/DataStr//"
 Tools.o: Tools.cpp Tools.h List.h Tree.h avl.h
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index eb5c319112..58ea83801b 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.90 2006-07-12 07:24:13 geuzaine Exp $
+// $Id: Main.cpp,v 1.91 2006-08-04 14:28:01 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -29,6 +29,7 @@
 #include "Gmsh.h"
 #include "GmshUI.h"
 #include "Geo.h"
+#include "CreateFile.h"
 #include "Mesh.h"
 #include "Draw.h"
 #include "Context.h"
@@ -135,10 +136,10 @@ int main(int argc, char *argv[])
       }
       if(CTX.batch > 0) {
         mai3d(CTX.batch);
-        Print_Mesh(CTX.output_filename, CTX.mesh.format);
+        CreateOutputFile(CTX.output_filename, CTX.mesh.format);
       }
       else
-        Print_Geo(CTX.output_filename);
+        CreateOutputFile(CTX.output_filename, FORMAT_GEO);
       if(CTX.mesh.histogram) {
         Mesh_Quality(THEM);
         Print_Histogram(THEM->Histogram[0]);
diff --git a/Fltk/Makefile b/Fltk/Makefile
index c05666b1d6..70d4643740 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.92 2006-07-25 12:08:23 remacle Exp $
+# $Id: Makefile,v 1.93 2006-08-04 14:28:01 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -64,6 +64,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Main.o: Main.cpp GUI.h Opengl_Window.h ../Mesh/Mesh.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
@@ -76,52 +77,20 @@ Main.o: Main.cpp GUI.h Opengl_Window.h ../Mesh/Mesh.h ../DataStr/List.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Gmsh.h ../Common/Message.h \
-  ../DataStr/Malloc.h ../DataStr/Tools.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../Geo/Geo.h ../Graphics/Draw.h ../Common/Context.h \
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
+  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h ../Geo/Geo.h \
+  ../Graphics/CreateFile.h ../Graphics/Draw.h ../Common/Context.h \
   ../Parser/Parser.h ../Parser/OpenFile.h ../Common/CommandLine.h \
   Solvers.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Geo/MVertex.h ../Geo/MVertex.h ../Geo/GPoint.h \
   ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
-  ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h
+  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/MElement.h \
+  ../Geo/MVertex.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
+  ../Geo/MElement.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/MElement.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -134,48 +103,14 @@ Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h Colorbar_Window.h \
   ../Common/ColorTable.h Popup_Button.h GUI_Extras.h ../Common/OS.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 GUI.o: GUI.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Gmsh.h ../Common/Message.h \
-  ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Gmsh.h \
+  ../Common/Message.h ../DataStr/Malloc.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Common/GmshUI.h ../Common/Context.h ../Geo/Geo.h ../Geo/CAD.h \
   ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
@@ -186,6 +121,7 @@ GUI.o: GUI.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   Opengl_Window.h Colorbar_Window.h Popup_Button.h Callbacks.h Bitmaps.h \
   Win32Icon.h ../Parser/OpenFile.h ../Common/CommandLine.h Solvers.h \
   Shortcut_Window.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 GUI_Extras.o: GUI_Extras.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -200,83 +136,14 @@ GUI_Extras.o: GUI_Extras.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/Context.h ../Graphics/Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
-Callbacks.o: Callbacks.cpp ../Mesh/BDS.h ../contrib/ANN/include/ANN/ANN.h \
-  ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Gmsh.h ../Common/Message.h \
-  ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
+Callbacks.o: Callbacks.cpp ../Mesh/BDS.h ../Common/Views.h \
+  ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Gmsh.h \
+  ../Common/Message.h ../DataStr/Malloc.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Common/GmshUI.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
@@ -293,9 +160,11 @@ Callbacks.o: Callbacks.cpp ../Mesh/BDS.h ../contrib/ANN/include/ANN/ANN.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
   ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
   ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
-  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h
+  ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/GFace.h \
+  ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/MElement.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -303,48 +172,14 @@ Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/Geo.h ../Graphics/Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h GUI.h Opengl_Window.h ../Mesh/Mesh.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  Colorbar_Window.h Popup_Button.h ../Graphics/gl2ps.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h GUI.h Opengl_Window.h \
+  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h Colorbar_Window.h Popup_Button.h ../Graphics/gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Opengl_Window.o: Opengl_Window.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -352,48 +187,14 @@ Opengl_Window.o: Opengl_Window.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/Geo.h ../Graphics/Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h GUI.h Opengl_Window.h ../Mesh/Mesh.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  Colorbar_Window.h Popup_Button.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h GUI.h Opengl_Window.h \
+  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h Colorbar_Window.h Popup_Button.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Colorbar_Window.o: Colorbar_Window.cpp ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
@@ -406,10 +207,12 @@ Colorbar_Window.o: Colorbar_Window.cpp ../Common/Gmsh.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h Colorbar_Window.h ../Common/ColorTable.h \
   Popup_Button.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Popup_Button.o: Popup_Button.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Common/GmshUI.h Popup_Button.h
+# 1 "/Users/geuzaine/.gmsh/Fltk//"
 Solvers.o: Solvers.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -424,39 +227,4 @@ Solvers.o: Solvers.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/ColorTable.h Popup_Button.h ../Graphics/Draw.h \
   ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index 45b913a9e4..4e4df8703e 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -2,30 +2,38 @@
 #include "GmshDefines.h"
 #include <algorithm>
 
-void GEdge::addFace ( GFace *e )
+void GEdge::addFace(GFace *e)
 { 
-  l_faces.push_back (e);  
+  l_faces.push_back(e);  
 }
 
-void GEdge::delFace ( GFace *e )
+void GEdge::delFace(GFace *e)
 { 
-  l_faces.erase(std::find(l_faces.begin(),l_faces.end(),e));  
+  l_faces.erase(std::find(l_faces.begin(), l_faces.end(), e));
 }
 
 GEdge::GEdge(GModel *model, 
-      int tag, 
-      GVertex *_v0, 
-      GVertex *_v1)
-  : GEntity (model,tag),v0(_v0),v1(_v1)
+	     int tag, 
+	     GVertex *_v0, 
+	     GVertex *_v1)
+  : GEntity(model, tag), v0(_v0), v1(_v1)
 {
-  v0->addEdge (this);
-  v1->addEdge (this);
+  if(v0) v0->addEdge(this);
+  if(v1) v1->addEdge(this);
   meshAttributes.Method = LIBRE; 
 }
 
 GEdge::~GEdge() 
 {
-  v0->delEdge (this);
-  v1->delEdge (this);
+  if(v0) v0->delEdge(this);
+  if(v1) v1->delEdge(this);
+
+  for(unsigned int i = 0; i < mesh_vertices.size(); i++) 
+    delete mesh_vertices[i];
+  mesh_vertices.clear();
+
+  for(unsigned int i = 0; i < lines.size(); i++) 
+    delete lines[i];
+  lines.clear();
 }
 
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 4a772645f5..71a5fecbb1 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -6,6 +6,7 @@
 #include "SVector3.h"
 #include "SPoint3.h"
 #include "SPoint2.h"
+#include "MElement.h"
 
 // A model edge.
 
@@ -53,6 +54,8 @@ class GEdge : public GEntity {
     int    typeTransfinite;
   } meshAttributes ;
 
+  std::vector<MLine*> lines;
+
   virtual int minimumMeshSegments () const {return 1;}
   virtual int minimumDrawSegments () const {return 1;}
 
diff --git a/Geo/GEntity.h b/Geo/GEntity.h
index cc276ec031..07abdbb5e6 100644
--- a/Geo/GEntity.h
+++ b/Geo/GEntity.h
@@ -15,7 +15,7 @@ class GVertex;
 class GEdge;
 class GFace;
 class GRegion;
-//class MeshRep;
+class MRep;
 
 // A geometric model entity. All enitites are owned by a GModel.
 class GEntity {
@@ -23,7 +23,7 @@ class GEntity {
  private:
   GModel *_model;
   int _tag;
-  // DiscreteRep *mesh, *modelMesh;
+  MRep *_geom, *_mesh;
 
  public:
 
@@ -89,12 +89,6 @@ class GEntity {
 
   virtual ~GEntity() {};
 
-  // Returns a renderable representation of the entity.
-  // virtual MeshRep * getGeometry();
-
-  // Returns a mesh of the entity
-  // virtual MeshRep * getMesh();
-
   // Spatial dimension of the entity 
   virtual int dim() const = 0;
 
@@ -149,11 +143,19 @@ class GEntity {
   // The mesh vertices uniquely owned by the entity
   std::vector<MVertex*> mesh_vertices;
 
+  // The physical entitites (if any) that contain this entity
+  std::vector<int> physicals;
+
   // The standard drawing attributes of the entity
   struct {
     char Visible, Frozen;
   } drawAttributes ;
 
+  // Returns a renderable representation of the geometry
+  virtual MRep *geomRep(){ return _geom; }
+
+  // Returns a renderable representation of the mesh
+  virtual MRep *meshRep(){ return _mesh; }
 };
 
 // A minimal, non-abstract entity that can be used for sorting
diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 981b329a32..f33fd87a0a 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -5,27 +5,36 @@ GFace::~GFace ()
 { 
   std::list<GEdge*>::iterator it = l_edges.begin();
 
-  while (it != l_edges.end())
-    {
-      (*it)->delFace(this);
-      ++it;
-    }
-}
+  while (it != l_edges.end()){
+    (*it)->delFace(this);
+    ++it;
+  }
+
+  for(unsigned int i = 0; i < mesh_vertices.size(); i++) 
+    delete mesh_vertices[i];
+  mesh_vertices.clear();
 
+  for(unsigned int i = 0; i < triangles.size(); i++) 
+    delete triangles[i];
+  triangles.clear();
+
+  for(unsigned int i = 0; i < quadrangles.size(); i++) 
+    delete quadrangles[i];
+  quadrangles.clear();
+}
 
 std::list<GVertex*> GFace::vertices() const
 {
   std::list<GEdge*>::const_iterator it = l_edges.begin();
   std::list<GVertex*>ret;
-  while (it != l_edges.end())
-    {
-      GVertex *v1 = (*it)->getBeginVertex ();
-      GVertex *v2 = (*it)->getEndVertex ();
-      if (std::find (ret.begin(),ret.end(),v1) == ret.end())
-	ret.push_back(v1);
-      if (std::find (ret.begin(),ret.end(),v2) == ret.end())
-	ret.push_back(v2);
-      ++it;
-    }
+  while (it != l_edges.end()){
+    GVertex *v1 = (*it)->getBeginVertex();
+    GVertex *v2 = (*it)->getEndVertex();
+    if(std::find (ret.begin(),ret.end(),v1) == ret.end())
+      ret.push_back(v1);
+    if(std::find (ret.begin(),ret.end(),v2) == ret.end())
+      ret.push_back(v2);
+    ++it;
+  }
   return ret;
 }
diff --git a/Geo/GFace.h b/Geo/GFace.h
index 5d124f4a6f..4de029734b 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -3,7 +3,7 @@
 
 #include "GPoint.h"
 #include "GEntity.h"
-//#include "GEdgeLoop.h"
+#include "MElement.h"
 #include "SPoint2.h"
 #include "SVector3.h"
 #include "Pair.h"
@@ -27,7 +27,7 @@ class GFace : public GEntity
   GRegion *r1, *r2;
 
  public:
-  GFace(GModel *model, int tag) : GEntity (model,tag),r1(0),r2(0){}
+  GFace(GModel *model, int tag) : GEntity(model,tag), r1(0), r2(0) {}
   virtual ~GFace();
 
   void addRegion(GRegion *r){ r1?r2=r:r1=r;  }
@@ -74,7 +74,8 @@ class GFace : public GEntity
   // to worry about that.
   virtual bool surfPeriodic(int dim) const = 0;
 
-  std::vector<MVertex*> triangles;
+  std::vector<MTriangle*> triangles;
+  std::vector<MQuadrangle*> quadrangles;
   mean_plane mp;
 };
 
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 87dbb101e0..77d30989b9 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -3,6 +3,7 @@
 
 #include <algorithm>
 #include <set>
+#include <map>
 #include "GVertex.h"
 #include "GEdge.h"
 #include "GFace.h"
@@ -55,6 +56,12 @@ public:
   void remove(GEdge *e){edges.erase(std::find(firstEdge(),lastEdge(),e));}
   void remove(GVertex *v){vertices.erase(std::find(firstVertex(),lastVertex(),v));}
 
+  // IO routines
+  int readMSH(const std::string &name);
+  int writeMSH(const std::string &name, double version=1.0, bool saveAll=false,
+	       double scalingFactor=1.0);
+  int writePOS(const std::string &name);
+
 protected:
   std::string modelName;
   GModel(const std::string &name):modelName(name){}
diff --git a/Geo/GModelIO.cpp b/Geo/GModelIO.cpp
new file mode 100644
index 0000000000..9dee137da7
--- /dev/null
+++ b/Geo/GModelIO.cpp
@@ -0,0 +1,514 @@
+#include <map>
+#include <string>
+
+#include "Message.h"
+#include "GmshDefines.h"
+#include "gmshRegion.h"
+#include "gmshFace.h"
+#include "gmshEdge.h"
+#include "MElement.h"
+
+static int getNumVerticesForElementType(int type)
+{
+  switch (type) {
+  case PNT : return 1;
+  case LGN1: return 2;
+  case LGN2: return 2 + 1;
+  case TRI1: return 3;
+  case TRI2: return 3 + 3;
+  case QUA1: return 4;
+  case QUA2: return 4 + 4 + 1;
+  case TET1: return 4;
+  case TET2: return 4 + 6;
+  case HEX1: return 8;
+  case HEX2: return 8 + 12 + 6 + 1;
+  case PRI1: return 6;
+  case PRI2: return 6 + 9 + 3;
+  case PYR1: return 5;
+  case PYR2: return 5 + 8 + 1;
+  default: return 0;
+  }
+}
+
+template<class T>
+static void associateEntityWithVertices(GEntity *ge, std::vector<T*> &elements)
+{
+  for(unsigned int i = 0; i < elements.size(); i++)
+    for(int j = 0; j < elements[i]->getNumVertices(); j++)
+      elements[i]->getVertex(j)->setEntity(ge);
+}
+
+template<class T>
+void copyElements(std::vector<T*> &dst, const std::vector<MElement*> &src)
+{
+  dst.resize(src.size());
+  for(unsigned int i = 0; i < src.size(); i++) dst[i] = (T*)src[i];
+}
+
+static void storeElementsInEntities(GModel *m, int type, 
+				    std::map<int, std::vector<MElement*> > &map)
+{
+  std::map<int, std::vector<MElement*> >::const_iterator it = map.begin();
+  std::map<int, std::vector<MElement*> >::const_iterator ite = map.end();
+  for(; it != ite; ++it){
+    switch(type){
+    case PNT:
+      {
+	GVertex *v = m->vertexByTag(it->first);
+	if(!v){
+	  v = new gmshVertex(m, it->first);
+	  m->add(v);
+	}
+	if(type == PNT) copyElements(v->mesh_vertices, it->second);
+      }
+      break;
+    case LGN1:     
+      {
+	GEdge *e = m->edgeByTag(it->first);
+	if(!e){
+	  e = new gmshEdge(m, it->first);
+	  m->add(e);
+	}
+	if(type == LGN1) copyElements(e->lines, it->second);
+      }
+      break;
+    case TRI1: case QUA1: 
+      {
+	GFace *f = m->faceByTag(it->first);
+	if(!f){
+	  f = new gmshFace(m, it->first);
+	  m->add(f);
+	}
+	if(type == TRI1) copyElements(f->triangles, it->second);
+	else if(type == QUA1) copyElements(f->quadrangles, it->second);
+      }
+      break;
+    case TET1: case HEX1: case PRI1: case PYR1:
+      {
+	GRegion *r = m->regionByTag(it->first);
+	if(!r){
+	  r = new gmshRegion(m, it->first);
+	  m->add(r);
+	}
+	if(type == TET1) copyElements(r->tetrahedra, it->second);
+	else if(type == HEX1) copyElements(r->hexahedra, it->second);
+	else if(type == PRI1) copyElements(r->prisms, it->second);
+	else if(type == PYR1) copyElements(r->pyramids, it->second);
+      }
+      break;
+    }
+  }
+}
+
+static void storePhysicalTagsInEntities(GModel *m, int dim,
+					std::map<int, std::map<int, std::string> > &map)
+{
+  std::map<int, std::map<int, std::string> >::const_iterator it = map.begin();
+  std::map<int, std::map<int, std::string> >::const_iterator ite = map.end();
+  for(; it != ite; ++it){
+    GEntity *ge = 0;
+    switch(dim){
+    case 0: ge = m->vertexByTag(it->first); break;
+    case 1: ge = m->edgeByTag(it->first); break;
+    case 2: ge = m->faceByTag(it->first); break;
+    case 3: ge = m->regionByTag(it->first); break;
+    }
+    if(ge){
+      std::map<int, std::string>::const_iterator it2 = it->second.begin();
+      std::map<int, std::string>::const_iterator ite2 = it->second.end();
+      for(; it2 != ite2; ++it2)
+	ge->physicals.push_back(it2->first);
+    }
+  }
+}
+
+int GModel::readMSH(const std::string &name)
+{
+  FILE *fp = fopen(name.c_str(), "r");
+  if(!fp){
+    Msg(GERROR, "Unable to open file '%s'", name.c_str());
+    return 0;
+  }
+
+  int elementTypes[7] = {LGN1, TRI1, QUA1, TET1, HEX1, PRI1, PYR1};
+  double version = 1.0;
+  char str[256];
+  std::map<int, MVertex*> vertices;
+  std::map<int, std::vector<MVertex*> > points;
+  std::map<int, std::vector<MElement*> > elements[7];
+  std::map<int, std::map<int, std::string> > physicals[4];
+
+  while(1) {
+
+    do {
+      if(!fgets(str, sizeof(str), fp) || feof(fp))
+        break;
+    } while(str[0] != '$');
+
+    if(feof(fp))
+      break;
+
+    if(!strncmp(&str[1], "MeshFormat", 10)) {
+
+      int format, size;
+      fscanf(fp, "%lf %d %d\n", &version, &format, &size);
+
+    }
+    else if(!strncmp(&str[1], "NO", 2) || !strncmp(&str[1], "Nodes", 5)) {
+
+      int numVertices;
+      fscanf(fp, "%d", &numVertices);
+      Msg(INFO, "%d vertices", numVertices);
+
+      int progress = (numVertices > 100000) ? numVertices / 50 : numVertices / 10;
+      for(int i = 0; i < numVertices; i++) {
+	int num;
+	double x, y, z;
+        fscanf(fp, "%d %lf %lf %lf", &num, &x, &y, &z);
+	if(vertices.count(num))
+	  Msg(WARNING, "Skipping duplicate vertex %d", num);
+	else
+	  vertices[num] = new MVertex(x, y, z);
+	if(progress && (i % progress == progress - 1))
+	  Msg(PROGRESS, "Read %d vertices", i + 1);
+      }
+      Msg(PROGRESS, "");
+
+    }
+    else if(!strncmp(&str[1], "ELM", 3) || !strncmp(&str[1], "Elements", 8)) {
+
+      int numElements;
+      fscanf(fp, "%d", &numElements);
+      Msg(INFO, "%d elements", numElements);
+
+      int progress = (numElements > 100000) ? numElements / 50 : numElements / 10;
+      for(int i = 0; i < numElements; i++) {
+	int num, type, physical = 1, elementary = 1, partition = 1, numVertices;
+	if(version <= 1.0){
+	  fscanf(fp, "%d %d %d %d %d", &num, &type, &physical, &elementary, &numVertices);
+	  int check = getNumVerticesForElementType(type);
+	  if(!check){
+	    Msg(GERROR, "Unknown type for element %d", num); 
+	    continue;
+	  }
+	  if(numVertices != check){
+	    Msg(GERROR, "Wrong number of vertices (%d) for element %d", numVertices, num);
+	    continue;
+	  }
+	}
+	else{
+	  int numTags;
+	  fscanf(fp, "%d %d %d", &num, &type, &numTags);
+	  for(int j = 0; j < numTags; j++){
+	    int tag;
+	    fscanf(fp, "%d", &tag);	    
+	    if(j == 0)      physical = tag;
+	    else if(j == 1) elementary = tag;
+	    else if(j == 2) partition = tag;
+	    // ignore any other tags for now
+	  }
+	  numVertices = getNumVerticesForElementType(type);
+	  if(!numVertices){
+	    Msg(GERROR, "Unknown type (%d) for element %d", type, num); 
+	    continue;
+	  }
+	}
+	int n[30];
+        for(int j = 0; j < numVertices; j++) fscanf(fp, "%d", &n[j]);
+	int dim = 0;
+        switch (type) {
+        case PNT:
+	  points[elementary].push_back(vertices[n[0]]);
+	  dim = 0;
+          break;
+        case LGN1:
+	  elements[0][elementary].push_back
+	    (new MLine(vertices[n[0]], vertices[n[1]], num, partition));
+	  dim = 1;
+          break;
+        case TRI1:
+	  elements[1][elementary].push_back
+	    (new MTriangle(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			   num, partition));
+	  dim = 2;
+          break;
+        case QUA1:
+	  elements[2][elementary].push_back
+	    (new MQuadrangle(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			     vertices[n[3]], num, partition));
+	  dim = 2;
+          break;
+	case TET1:
+	  elements[3][elementary].push_back
+	    (new MTetrahedron(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			      vertices[n[3]], num, partition));
+	  dim = 3; 
+	  break;
+	case HEX1:
+	  elements[4][elementary].push_back
+	    (new MHexahedron(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			     vertices[n[3]], vertices[n[4]], vertices[n[5]], 
+			     vertices[n[6]], vertices[n[7]], num, partition));
+	  dim = 3; 
+	  break;
+	case PRI1: 
+	  elements[5][elementary].push_back
+	    (new MPrism(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			vertices[n[3]], vertices[n[4]], vertices[n[5]], 
+			num, partition));
+	  dim = 3; 
+	  break;
+	case PYR1: 
+	  elements[6][elementary].push_back
+	    (new MPyramid(vertices[n[0]], vertices[n[1]], vertices[n[2]], 
+			  vertices[n[3]], vertices[n[4]], num, partition));
+	  dim = 3; 
+	  break;
+        default:
+	  Msg(GERROR, "Unknown type (%d) for element %d", type, num); 
+          break;
+        }
+
+	if(!physicals[dim].count(elementary) || !physicals[dim][elementary].count(physical))
+	  physicals[dim][elementary][physical] = "unnamed";
+	
+	if(progress && (i % progress == progress - 1))
+	  Msg(PROGRESS, "Read %d elements", i + 1);
+      }
+      Msg(PROGRESS, "");
+
+    }
+
+    do {
+      if(!fgets(str, sizeof(str), fp) || feof(fp))
+	Msg(GERROR, "Prematured end of mesh file");
+    } while(str[0] != '$');
+
+  }
+
+  // store the elements in their associated elementary entity. If the
+  // entity does not exist, create a new one.
+  for(int i = 0; i < 7; i++)
+    storeElementsInEntities(this, elementTypes[i], elements[i]);
+  
+  // loop on regions, then on faces, edges and vertices and store the
+  // entity pointer in the the elements' vertices (this way we
+  // associate the entity of lowest geometrical degree with each
+  // vertex)
+  for(riter it = firstRegion(); it != lastRegion(); ++it){
+    associateEntityWithVertices(*it, (*it)->tetrahedra);
+    associateEntityWithVertices(*it, (*it)->hexahedra);
+    associateEntityWithVertices(*it, (*it)->prisms);
+    associateEntityWithVertices(*it, (*it)->pyramids);
+  }
+  for(fiter it = firstFace(); it != lastFace(); ++it){
+    associateEntityWithVertices(*it, (*it)->triangles);
+    associateEntityWithVertices(*it, (*it)->quadrangles);
+  }
+  for(eiter it = firstEdge(); it != lastEdge(); ++it){
+    associateEntityWithVertices(*it, (*it)->lines);
+  }
+  for(viter it = firstVertex(); it != lastVertex(); ++it){
+    //FIXME: TODO 
+  }
+
+  // store the vertices in their associated geometrical entity
+  std::map<int, MVertex*>::const_iterator it = vertices.begin();
+  std::map<int, MVertex*>::const_iterator ite = vertices.end();
+  for(; it != ite; ++it){
+    MVertex *v = it->second;
+    GEntity *ge = v->onWhat();
+    if(ge) 
+      ge->mesh_vertices.push_back(v);
+    else
+      delete v; // delete unused vertex
+  }
+
+  // store the physical tags
+  for(int i = 0; i < 4; i++)  
+    storePhysicalTagsInEntities(this, i, physicals[i]);
+
+  fclose(fp);
+  return 1;
+}
+
+static void numVerticesAndElementsInModel(GModel *m, bool saveAll, 
+					  int &numVertices, int &numElements)
+{
+  // get the number of vertices and elements in the msh file and
+  // renumber the nodes in a continuous sequence
+  numVertices = numElements = 0;
+  for(GModel::viter it = m->firstVertex(); it != m->lastVertex(); ++it){
+    int n = (*it)->mesh_vertices.size();
+    numElements += (saveAll ? 1 : (*it)->physicals.size()) * n;
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->setNum(++numVertices);
+  }
+  for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it){
+    int n = (*it)->lines.size();
+    numElements += (saveAll ? 1 : (*it)->physicals.size()) * n;
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->setNum(++numVertices);
+  }
+  for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){
+    int n = (*it)->triangles.size() + (*it)->quadrangles.size();
+    numElements += (saveAll ? 1 : (*it)->physicals.size()) * n;
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->setNum(++numVertices);
+  }
+  for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){
+    int n = (*it)->tetrahedra.size() + (*it)->hexahedra.size() +
+      (*it)->prisms.size() + (*it)->pyramids.size();
+    numElements += (saveAll ? 1 : (*it)->physicals.size()) * n;
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->setNum(++numVertices);
+  }
+}
+
+template<class T>
+static void writeElementsMSH(FILE *fp, const std::vector<T*> &ele, int saveAll, 
+			     double version, int &num, int elementary, 
+			     std::vector<int> &physicals)
+{
+  for(unsigned int i = 0; i < ele.size(); i++)
+    if(saveAll)
+      ele[i]->writeMSH(fp, version, ++num, elementary, elementary);
+    else
+      for(unsigned int j = 0; j < physicals.size(); j++)
+	ele[i]->writeMSH(fp, version, ++num, elementary, physicals[j]);
+}
+
+int GModel::writeMSH(const std::string &name, double version, bool saveAll, 
+		     double scalingFactor)
+{
+  FILE *fp = fopen(name.c_str(), "w");
+  if(!fp){
+    Msg(GERROR, "Unable to open file '%s'", name.c_str());
+    return 0;
+  }
+
+  if(version > 2.0){
+    fprintf(fp, "$MeshFormat\n");
+    fprintf(fp, "%g %d %d\n", version, 0, (int)sizeof(double));
+    fprintf(fp, "$EndMeshFormat\n");
+    fprintf(fp, "$Nodes\n");
+  }
+  else
+    fprintf(fp, "$NOD\n");
+
+  int numVertices, numElements;
+  numVerticesAndElementsInModel(this, saveAll, numVertices, numElements);
+
+  fprintf(fp, "%d\n", numVertices);
+  for(viter it = firstVertex(); it != lastVertex(); ++it)
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->writeMSH(fp, scalingFactor);
+  for(eiter it = firstEdge(); it != lastEdge(); ++it)
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++)
+      (*it)->mesh_vertices[i]->writeMSH(fp, scalingFactor);
+  for(fiter it = firstFace(); it != lastFace(); ++it)
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->writeMSH(fp, scalingFactor);
+  for(riter it = firstRegion(); it != lastRegion(); ++it)
+    for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) 
+      (*it)->mesh_vertices[i]->writeMSH(fp, scalingFactor);
+
+  if(version > 2.0){
+    fprintf(fp, "$EndNodes\n");
+    fprintf(fp, "$Elements\n");
+  }
+  else{
+    fprintf(fp, "$ENDNOD\n");
+    fprintf(fp, "$ELM\n");
+  }
+
+  fprintf(fp, "%d\n", numElements);
+  int num = 0;
+
+  for(viter it = firstVertex(); it != lastVertex(); ++it){
+    writeElementsMSH(fp, (*it)->mesh_vertices, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+  }
+  for(eiter it = firstEdge(); it != lastEdge(); ++it){
+    writeElementsMSH(fp, (*it)->lines, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+  }
+  for(fiter it = firstFace(); it != lastFace(); ++it){
+    writeElementsMSH(fp, (*it)->triangles, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+    writeElementsMSH(fp, (*it)->quadrangles, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+  }
+  for(riter it = firstRegion(); it != lastRegion(); ++it){
+    writeElementsMSH(fp, (*it)->tetrahedra, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+    writeElementsMSH(fp, (*it)->hexahedra, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+    writeElementsMSH(fp, (*it)->prisms, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+    writeElementsMSH(fp, (*it)->pyramids, saveAll, version, num,
+		     (*it)->tag(), (*it)->physicals);
+  }
+  
+  if(version > 2.0){
+    fprintf(fp, "$EndElements\n");
+  }
+  else{
+    fprintf(fp, "$ENDELM\n");
+  }
+
+  return 1;
+}
+
+int GModel::writePOS(const std::string &name)
+{
+  FILE *fp = fopen(name.c_str(), "w");
+  if(!fp){
+    Msg(GERROR, "Unable to open file '%s'", name.c_str());
+    return 0;
+  }
+
+  if(numRegion()){
+    fprintf(fp, "View \"Volumes\" {\n");
+    fprintf(fp, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
+	    "\"Gamma\", \"Eta\", \"Rho\"};\n", (1<<16)|(4<<8));
+    for(riter it = firstRegion(); it != lastRegion(); ++it) {
+      for(unsigned int i = 0; i < (*it)->tetrahedra.size(); i++)
+	(*it)->tetrahedra[i]->writePOS(fp);
+      for(unsigned int i = 0; i < (*it)->hexahedra.size(); i++)
+	(*it)->hexahedra[i]->writePOS(fp);
+      for(unsigned int i = 0; i < (*it)->prisms.size(); i++)
+	(*it)->prisms[i]->writePOS(fp);
+      for(unsigned int i = 0; i < (*it)->pyramids.size(); i++)
+	(*it)->pyramids[i]->writePOS(fp);
+    }
+    fprintf(fp, "};\n");
+  }
+  
+  if(numFace()){
+    fprintf(fp, "View \"Surfaces\" {\n");
+    fprintf(fp, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
+	    "\"Gamma\", \"Eta\", \"Rho\"};\n", (1<<16)|(4<<8));
+    for(fiter it = firstFace(); it != lastFace(); ++it) {
+      for(unsigned int i = 0; i < (*it)->triangles.size(); i++)
+	(*it)->triangles[i]->writePOS(fp);
+      for(unsigned int i = 0; i < (*it)->quadrangles.size(); i++)
+	(*it)->quadrangles[i]->writePOS(fp);
+    }
+    fprintf(fp, "};\n");
+  }
+
+  if(numEdge()){
+    fprintf(fp, "View \"Lines\" {\n");
+    fprintf(fp, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
+	    "\"Gamma\", \"Eta\", \"Rho\"};\n", (1<<16)|(4<<8));
+    for(eiter it = firstEdge(); it != lastEdge(); ++it) {
+      for(unsigned int i = 0; i < (*it)->lines.size(); i++)
+ 	(*it)->lines[i]->writePOS(fp);
+    }
+    fprintf(fp, "};\n");
+  }
+
+  fclose(fp);
+  return 1;
+}
diff --git a/Geo/GRegion.cpp b/Geo/GRegion.cpp
index c478abd5a6..34430467e6 100644
--- a/Geo/GRegion.cpp
+++ b/Geo/GRegion.cpp
@@ -5,9 +5,28 @@ GRegion::~GRegion ()
 { 
   std::list<GFace*>::iterator it = l_faces.begin();
 
-  while (it != l_faces.end())
-    {
-      (*it)->delRegion(this);
-      ++it;
-    }
+  while(it != l_faces.end()){
+    (*it)->delRegion(this);
+    ++it;
+  }
+
+  for(unsigned int i = 0; i < mesh_vertices.size(); i++) 
+    delete mesh_vertices[i];
+  mesh_vertices.clear();
+
+  for(unsigned int i = 0; i < tetrahedra.size(); i++) 
+    delete tetrahedra[i];
+  tetrahedra.clear();
+
+  for(unsigned int i = 0; i < hexahedra.size(); i++) 
+    delete hexahedra[i];
+  hexahedra.clear();
+
+  for(unsigned int i = 0; i < prisms.size(); i++) 
+    delete prisms[i];
+  prisms.clear();
+
+  for(unsigned int i = 0; i < pyramids.size(); i++) 
+    delete pyramids[i];
+  pyramids.clear();
 }
diff --git a/Geo/GRegion.h b/Geo/GRegion.h
index 902bc73ffc..5e616f8885 100644
--- a/Geo/GRegion.h
+++ b/Geo/GRegion.h
@@ -2,6 +2,7 @@
 #define _GREGION_H_
 
 #include "GEntity.h"
+#include "MElement.h"
 
 // A model region.
 class GRegion : public GEntity {
@@ -9,10 +10,14 @@ class GRegion : public GEntity {
   std::list<GFace *> l_faces;
   std::list<int> l_dirs;
  public:
-  GRegion(GModel *model, int tag) : GEntity (model,tag) {}
+  GRegion(GModel *model, int tag) : GEntity (model, tag) {}
   virtual ~GRegion();
   virtual int dim() const {return 3;}
   virtual GeomType geomType() const {return Volume;}
+  std::vector<MTetrahedron*> tetrahedra;
+  std::vector<MHexahedron*> hexahedra;
+  std::vector<MPrism*> prisms;
+  std::vector<MPyramid*> pyramids;
 };
 
 #endif
diff --git a/Geo/GVertex.h b/Geo/GVertex.h
index 64a96d7106..123c95667c 100644
--- a/Geo/GVertex.h
+++ b/Geo/GVertex.h
@@ -10,13 +10,13 @@ class GVertex  : public GEntity
 {
 public:
   GVertex(GModel *m, int tag) : GEntity (m,tag) 
-    {
-    }
+  {
+  }
   virtual ~GVertex() 
-    {
-      if (mesh_vertices.size())
-	delete mesh_vertices[0];
-    }
+  {
+    if(mesh_vertices.size())
+      delete mesh_vertices[0];
+  }
   virtual GPoint point() const = 0;
   virtual double x() const = 0;
   virtual double y() const = 0;
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
new file mode 100644
index 0000000000..94e630fac9
--- /dev/null
+++ b/Geo/MElement.cpp
@@ -0,0 +1,107 @@
+#include <math.h>
+#include "MElement.h"
+#include "GEntity.h"
+
+int MElement::_globalNum = 0;
+
+static double dist(MVertex *v1, MVertex *v2)
+{
+  double dx = v1->x() - v2->x();
+  double dy = v1->y() - v2->y();
+  double dz = v1->z() - v2->z();
+  return sqrt(dx * dx + dy * dy + dz * dz);
+}
+
+double MElement::minEdge()
+{
+  double m = 1.e25;
+  MVertex *v[2];
+  for(int i = 0; i < getNumEdges(); i++){
+    getEdge(i, v);
+    m = std::min(m, dist(v[0], v[1]));
+  }
+  return m;
+}
+
+double MElement::maxEdge()
+{
+  double m = 0.;
+  MVertex *v[2];
+  for(int i = 0; i < getNumEdges(); i++){
+    getEdge(i, v);
+    m = std::max(m, dist(v[0], v[1]));
+  }
+  return m;
+}
+
+double MElement::rhoShapeMeasure()
+{
+  double min = minEdge();
+  double max = maxEdge();
+  if(max)
+    return min / max;
+  else
+    return 0.;
+}
+
+void MElement::cog(double &x, double &y, double &z)
+{
+  x = y = z = 0.;
+  int n = getNumVertices();
+  for(int i = 0; i < n; i++) {
+    MVertex *v = getVertex(i);
+    x += v->x();
+    y += v->y();
+    z += v->z();
+  }
+  x /= (double)n;
+  y /= (double)n;
+  z /= (double)n;
+}
+
+void MElement::writeMSH(FILE *fp, double version, int num, int elementary, 
+			int physical)
+{
+  int n = getNumVertices();
+
+  fprintf(fp, "%d %d", num ? num : _num, getTypeForMSH());
+  if(version < 2.0)
+    fprintf(fp, " %d %d %d", physical, elementary, n);
+  else
+    fprintf(fp, " 3 %d %d %d", physical, elementary, _partition);
+  for(int i = 0; i < n; i++){
+    fprintf(fp, " %d", getVertex(i)->getNum());
+  }
+  fprintf(fp, " \n");
+}
+
+void MElement::writePOS(FILE *fp)
+{
+  int n = getNumVertices();
+  double gamma = gammaShapeMeasure();
+  double eta = etaShapeMeasure();
+  double rho = rhoShapeMeasure();
+
+  fprintf(fp, "%s(", getStringForPOS());
+  for(int i = 0; i < n; i++){
+    if(i) fprintf(fp, ",");
+    fprintf(fp, "%g,%g,%g", getVertex(i)->x(), getVertex(i)->y(), getVertex(i)->z());
+  }
+  fprintf(fp, "){");
+  for(int i = 0; i < n; i++)
+    fprintf(fp, "%d,", getVertex(i)->onWhat()->tag());
+  for(int i = 0; i < n; i++)
+    fprintf(fp, "%d,", getNum());
+  for(int i = 0; i < n; i++)
+    fprintf(fp, "%g,", gamma);
+  for(int i = 0; i < n; i++)
+    fprintf(fp, "%g,", eta);
+  for(int i = 0; i < n; i++){
+    if(i == n - 1)
+      fprintf(fp, "%g", rho);
+    else
+      fprintf(fp, "%g,", rho);
+  }
+  fprintf(fp, "};\n");
+}
+
diff --git a/Geo/MElement.h b/Geo/MElement.h
new file mode 100644
index 0000000000..e287e6d9ba
--- /dev/null
+++ b/Geo/MElement.h
@@ -0,0 +1,413 @@
+#ifndef _MELEMENT_H_
+#define _MELEMENT_H_
+
+#include <stdio.h>
+#include <algorithm>
+#include "GmshDefines.h"
+#include "MVertex.h"
+
+// the reference topology is defined in Mesh/{Edge,Face}.cpp
+extern int edges_tetra[6][2];
+extern int edges_quad[4][2];
+extern int edges_hexa[12][2];
+extern int edges_prism[9][2];
+extern int edges_pyramid[8][2];
+extern int trifaces_tetra[4][3];
+extern int trifaces_prism[2][3];
+extern int trifaces_pyramid[4][3];
+extern int quadfaces_hexa[6][4];
+extern int quadfaces_prism[3][4];
+extern int quadfaces_pyramid[1][4];
+
+class MElement 
+{
+
+ private:
+
+  static int _globalNum;
+  int _num, _partition;
+  bool _visible;
+
+ public :
+
+  MElement(int num=0, int part=0) 
+    : _partition(part), _visible(true) 
+  {
+    if(num){
+      _num = num;
+      _globalNum = std::max(_globalNum, _num);
+    }
+    else{
+      _num = ++_globalNum;
+    }
+  }
+  virtual ~MElement(){}
+
+  // returns the tag of the element
+  virtual int getNum(){ return _num; }
+
+  // returns the partition to which the element belongs
+  virtual int getPartition(){ return _partition; }
+
+  // get/set the visibility flag
+  virtual bool isVisible(){ return _visible; }
+  virtual void setVisible(bool val){ _visible = val; }
+
+  // get the vertices
+  virtual int getNumVertices() = 0;
+  virtual MVertex *getVertex(int num) = 0;
+
+  // get the edges
+  virtual int getNumEdges() = 0;
+  virtual void getEdge(int num, MVertex *v[2]) = 0;
+
+  // get an edge representation for drawing
+  virtual int getNumEdgesRep(){ return getNumEdges(); }
+  virtual void getEdgeRep(int num, MVertex *v[2]){ getEdgeRep(num, v); }
+
+  // get the faces
+  virtual int getNumFaces() = 0;
+  virtual void getFace(int num, MVertex *v[4]) = 0;
+
+  // get a face representation for drawing
+  virtual int getNumFacesRep(){ return getNumFaces(); }
+  virtual void getFaceRep(int num, MVertex *v[4]){ getFace(num, v); }
+
+  // get the max/min edge length
+  virtual double maxEdge();
+  virtual double minEdge();
+
+  // get the quality measures
+  virtual double rhoShapeMeasure();
+  virtual double gammaShapeMeasure(){ return 0.; }
+  virtual double etaShapeMeasure(){ return 0.; }
+
+  // computes the barycenter
+  virtual void cog(double &x, double &y, double &z);
+
+  // IO routines
+  virtual void writeMSH(FILE *fp, double version=1.0, int num=0, 
+			int elementary=1, int physical=1);
+  virtual void writePOS(FILE *fp);
+  virtual char *getStringForPOS() = 0;
+  virtual int getTypeForMSH() = 0;
+};
+
+class MLine : public MElement {
+ protected:
+  MVertex *_v[2];
+ public :
+  MLine (MVertex *v0, MVertex *v1, int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1;
+  }
+  ~MLine(){}
+  inline int getNumVertices(){ return 2; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 1; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[0]; v[1] = _v[1];
+  }
+  virtual int getNumFaces(){ return 0; }
+  virtual void getFace(int num, MVertex *v[4]) 
+  { 
+    v[0] = v[1] = v[2] = v[3] = 0; 
+  }
+  int getTypeForMSH(){ return LGN1; }
+  char *getStringForPOS(){ return "SL"; }
+};
+
+class MLine2 : public MLine {
+ protected:
+  MVertex *_vs[1];
+ public :
+  MLine2 (MVertex *v0, MVertex *v1, MVertex *v2, int num=0, int part=0) 
+    : MLine(v0, v1, num, part)
+  {
+    _vs[0] = v2;
+  }
+  ~MLine2(){}
+  inline int getNumVertices(){ return 3; }
+  inline MVertex *getVertex(int num){ return num < 2 ? _v[num] : _vs[num - 2]; }
+  int getNumEdgesRep(){ return 2; }
+  void getEdgeRep(int num, MVertex *v[2])
+  { 
+    static int edges_lin2[2][2] = {
+      {0, 2}, {2, 1},
+    };
+    int i0 = edges_lin2[num][0];
+    int i1 = edges_lin2[num][1];
+    v[0] = i0 < 2? _v[i0] : _vs[i0 - 2];
+    v[1] = i1 < 2? _v[i1] : _vs[i1 - 2];
+  }
+  int getTypeForMSH(){ return LGN2; }
+  char *getStringForPOS(){ return "SL2"; }
+};
+
+class MTriangle : public MElement {
+ protected:
+  MVertex *_v[3];
+ public :
+  MTriangle (MVertex *v0, MVertex *v1, MVertex *v2, int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2;
+  }
+  ~MTriangle(){}
+  inline int getNumVertices(){ return 3; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 3; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_tetra[num][0]];
+    v[1] = _v[edges_tetra[num][1]];
+  }
+  virtual int getNumFaces(){ return 1; }
+  virtual void getFace(int num, MVertex *v[4])
+  {
+    v[0] = _v[0]; v[1] = _v[1]; v[2] = _v[2]; v[3] = 0;
+  }
+  int getTypeForMSH(){ return TRI1; }
+  char *getStringForPOS(){ return "ST"; }
+};
+
+class MTriangle2 : public MTriangle {
+ protected:
+  MVertex *_vs[3];
+ public :
+  MTriangle2 (MVertex *v0, MVertex *v1, MVertex *v2, 
+	      MVertex *v3, MVertex *v4, MVertex *v5, 
+	      int num=0, int part=0) 
+    : MTriangle(v0, v1, v2, num, part)
+  {
+    _vs[0] = v3; _vs[1] = v4; _vs[2] = v5;
+  }
+  ~MTriangle2(){}
+  inline int getNumVertices(){ return 6; }
+  inline MVertex *getVertex(int num){ return num < 3 ? _v[num] : _vs[num - 3]; }
+  int getNumEdgesRep(){ return 6; }
+  void getEdgeRep(int num, MVertex *v[2])
+  { 
+    static int edges_tri2[6][2] = {
+      {0, 3}, {3, 1},
+      {1, 4}, {4, 2},
+      {2, 5}, {5, 0},
+    };
+    int i0 = edges_tri2[num][0];
+    int i1 = edges_tri2[num][1];
+    v[0] = i0 < 3? _v[i0] : _vs[i0 - 3];
+    v[1] = i1 < 3? _v[i1] : _vs[i1 - 3];
+  }
+  int getNumFacesRep(){ return 4; }
+  void getFaceRep(int num, MVertex *v[4])
+  { 
+    static int trifaces_tri2[4][3] = {
+      {0, 3, 5},
+      {1, 4, 3},
+      {2, 5, 4},
+      {3, 4, 5},
+    };
+    int i0 = trifaces_tri2[num][0];
+    int i1 = trifaces_tri2[num][1];
+    int i2 = trifaces_tri2[num][2];
+    v[0] = i0 < 3? _v[i0] : _vs[i0 - 3];
+    v[1] = i1 < 3? _v[i1] : _vs[i1 - 3];
+    v[2] = i2 < 3? _v[i2] : _vs[i2 - 3];
+    v[3] = 0;
+  }
+  int getTypeForMSH(){ return TRI2; }
+  char *getStringForPOS(){ return "ST2"; }
+};
+
+class MQuadrangle : public MElement {
+ protected:
+  MVertex *_v[4];
+ public :
+  MQuadrangle(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	      int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2; _v[3] = v3;
+  }
+  ~MQuadrangle(){}
+  inline int getNumVertices(){ return 4; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 4; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_quad[num][0]];
+    v[1] = _v[edges_quad[num][1]];
+  }
+  int getNumFaces(){ return 1; }
+  void getFace(int num, MVertex *v[4])
+  {
+    v[0] = _v[0]; v[1] = _v[1]; v[2] = _v[2]; v[3] = _v[3];
+  }
+  int getTypeForMSH(){ return QUA1; }
+  char *getStringForPOS(){ return "SQ"; }
+};
+
+class MQuadrangle2 : public MQuadrangle {
+ protected:
+  MVertex *_vs[5];
+ public :
+  MQuadrangle2(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	       MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, 
+	       MVertex *v8, int num=0, int part=0) 
+    : MQuadrangle(v0, v1, v2, v3, num, part)
+  {
+    _vs[0] = v4; _v[1] = v5; _v[2] = v6; _v[3] = v7; _v[4] = v8;
+  }
+  ~MQuadrangle2(){}
+  inline int getNumVertices(){ return 9; }
+  inline MVertex *getVertex(int num){ return num < 4 ? _v[num] : _vs[num - 4]; }
+  int getTypeForMSH(){ return QUA2; }
+  char *getStringForPOS(){ return "SQ2"; }
+};
+
+class MTetrahedron : public MElement {
+ protected:
+  MVertex *_v[4];
+ public :
+  MTetrahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	       int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2; _v[3] = v3;
+  }
+  ~MTetrahedron(){}
+  inline int getNumVertices(){ return 4; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 4; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_tetra[num][0]];
+    v[1] = _v[edges_tetra[num][1]];
+  }
+  int getNumFaces(){ return 4; }
+  void getFace(int num, MVertex *v[4])
+  {
+    v[0] = _v[trifaces_tetra[num][0]];
+    v[1] = _v[trifaces_tetra[num][1]];
+    v[2] = _v[trifaces_tetra[num][2]];
+    v[3] = 0;
+  }
+  int getTypeForMSH(){ return TET1; }
+  char *getStringForPOS(){ return "SS"; }
+};
+
+class MHexahedron : public MElement {
+ protected:
+  MVertex *_v[8];
+ public :
+  MHexahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	      MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, 
+	      int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2; _v[3] = v3;
+    _v[4] = v4; _v[5] = v5; _v[6] = v6; _v[7] = v7;
+  }
+  ~MHexahedron(){}
+  inline int getNumVertices(){ return 8; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 12; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_hexa[num][0]];
+    v[1] = _v[edges_hexa[num][1]];
+  }
+  int getNumFaces(){ return 6; }
+  void getFace(int num, MVertex *v[4])
+  {
+    v[0] = _v[quadfaces_hexa[num][0]];
+    v[1] = _v[quadfaces_hexa[num][1]];
+    v[2] = _v[quadfaces_hexa[num][2]];
+    v[3] = _v[quadfaces_hexa[num][3]];
+  }
+  int getTypeForMSH(){ return HEX1; }
+  char *getStringForPOS(){ return "SH"; }
+};
+
+class MPrism : public MElement {
+ protected:
+  MVertex *_v[6];
+ public :
+  MPrism(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	 MVertex *v4, MVertex *v5, int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2; _v[3] = v3;
+    _v[4] = v4; _v[5] = v5; 
+  }
+  ~MPrism(){}
+  inline int getNumVertices(){ return 6; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 9; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_prism[num][0]];
+    v[1] = _v[edges_prism[num][1]];
+  }
+  int getNumFaces(){ return 5; }
+  void getFace(int num, MVertex *v[4])
+  {
+    if(num < 3){
+      v[0] = _v[trifaces_prism[num][0]];
+      v[1] = _v[trifaces_prism[num][1]];
+      v[2] = _v[trifaces_prism[num][2]];
+      v[3] = 0;
+    }
+    else{
+      v[0] = _v[quadfaces_prism[num - 3][0]];
+      v[1] = _v[quadfaces_prism[num - 3][1]];
+      v[2] = _v[quadfaces_prism[num - 3][2]];
+      v[3] = _v[quadfaces_prism[num - 3][3]];
+    }
+  }
+  int getTypeForMSH(){ return PRI1; }
+  char *getStringForPOS(){ return "SI"; }
+};
+
+class MPyramid : public MElement {
+ protected:
+  MVertex *_v[5];
+ public :
+  MPyramid(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, 
+	   MVertex *v4, int num=0, int part=0) 
+    : MElement (num, part)
+  {
+    _v[0] = v0; _v[1] = v1; _v[2] = v2; _v[3] = v3; _v[4] = v4;
+  }
+  ~MPyramid(){}
+  inline int getNumVertices(){ return 5; }
+  inline MVertex *getVertex(int num){ return _v[num]; }
+  virtual int getNumEdges(){ return 8; }
+  virtual void getEdge(int num, MVertex *v[2])
+  {
+    v[0] = _v[edges_pyramid[num][0]];
+    v[1] = _v[edges_pyramid[num][1]];
+  }
+  int getNumFaces(){ return 5; }
+  void getFace(int num, MVertex *v[4])
+  {
+    if(num < 4){
+      v[0] = _v[trifaces_pyramid[num][0]];
+      v[1] = _v[trifaces_pyramid[num][1]];
+      v[2] = _v[trifaces_pyramid[num][2]];
+      v[3] = 0;
+    }
+    else{
+      v[0] = _v[quadfaces_pyramid[num - 4][0]];
+      v[1] = _v[quadfaces_pyramid[num - 4][1]];
+      v[2] = _v[quadfaces_pyramid[num - 4][2]];
+      v[3] = _v[quadfaces_pyramid[num - 4][3]];
+    }
+  }
+  int getTypeForMSH(){ return PYR1; }
+  char *getStringForPOS(){ return "SY"; }
+};
+
+#endif
diff --git a/Geo/MVertex.cpp b/Geo/MVertex.cpp
new file mode 100644
index 0000000000..538ab681f1
--- /dev/null
+++ b/Geo/MVertex.cpp
@@ -0,0 +1,5 @@
+#include <math.h>
+#include "MVertex.h"
+
+int MVertex::_globalNum = 0;
+
diff --git a/Geo/MVertex.h b/Geo/MVertex.h
index 42965f7e7f..53ef43b0af 100644
--- a/Geo/MVertex.h
+++ b/Geo/MVertex.h
@@ -1,43 +1,76 @@
 #ifndef _MVERTEX_H_
 #define _MVERTEX_H_
 
+#include <stdio.h>
+#include <algorithm>
+
 class GEntity;
-class MVertex 
-{
-  double x_,y_,z_;
-  GEntity *ge;
+
+class MVertex{
+ private:
+  static int _globalNum;
+  int _num;
+  double _x, _y, _z;
+  GEntity *_ge;
  public :
-  MVertex ( double _x, double _y, double _z , GEntity * _ge ) :
-    x_(_x),y_(_y),z_(_z),ge(_ge)
+  MVertex(double x, double y, double z, GEntity *ge=0, int num=0) 
+    : _x(x), _y(y), _z(z), _ge(ge)
+  {
+    if(num){
+      _num = num;
+      _globalNum = std::max(_globalNum, _num);
+    }
+    else{
+      _num = ++_globalNum;
+    }
+  }
+  virtual ~MVertex(){}
+  inline double x() const {return _x;}
+  inline double y() const {return _y;}
+  inline double z() const {return _z;}
+  inline double & x() {return _x;}
+  inline double & y() {return _y;}
+  inline double & z() {return _z;}
+  inline GEntity* onWhat() const {return _ge;}
+  inline void setEntity(GEntity *ge) { _ge = ge; }
+  inline int getNum() const {return _num;}
+  inline void setNum(int num) { _num = num; }
+  void writeMSH(FILE *fp, double scalingFactor=1.0)
   {
+    fprintf(fp, "%d %.16g %.16g %.16g\n", getNum(), 
+	    x() * scalingFactor, y() * scalingFactor, z() * scalingFactor);
+  }
+  void writeMSH(FILE *fp, double version, int num, int elementary, int physical)
+  {
+    fprintf(fp, "%d 15", num);
+    if(version < 2.0)
+      fprintf(fp, " %d %d 1", physical, elementary);
+    else
+      fprintf(fp, " 2 %d %d", physical, elementary);
+    fprintf(fp, " %d\n", _num);
   }
-  inline double x() const {return x_;}
-  inline double y() const {return y_;}
-  inline double z() const {return z_;}
-  inline double & x()  {return x_;}
-  inline double & y()  {return y_;}
-  inline double & z()  {return z_;}
-  inline GEntity* onWhat() const {return ge;}
 };
 
-class MEdgeVertex : public MVertex {
+class MEdgeVertex : public MVertex{
  private:
-  double u;
+  double _u;
  public :
-  MEdgeVertex ( double _x, double _y, double _z , GEntity * _ge , double _u) :
-    MVertex (_x,_y,_z,_ge),u(_u)
+  MEdgeVertex(double x, double y, double z, GEntity *ge, double u) 
+    : MVertex(x, y, z, ge), _u(u)
   {
   }
+  ~MEdgeVertex(){}
 };
 
-class MFaceVertex : public MVertex
-{
-  double u,v;
-public :
-  MFaceVertex ( double _x, double _y, double _z , GEntity * _ge , double _u, double _v) :
-    MVertex (_x,_y,_z,_ge),u(_u),v(_v)
+class MFaceVertex : public MVertex{
+ private:
+  double _u, _v;
+ public :
+  MFaceVertex(double x, double y, double z, GEntity *ge, double u, double v) 
+    : MVertex(x, y, z, ge), _u(u), _v(v)
   {
   }
+  ~MFaceVertex(){}
 };
 
 #endif
diff --git a/Geo/Makefile b/Geo/Makefile
index b1db67e912..cb7f187959 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.80 2006-07-25 12:08:23 remacle Exp $
+# $Id: Makefile,v 1.81 2006-08-04 14:28:02 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -43,6 +43,9 @@ SRC = CAD.cpp \
       GFace.cpp\
       GRegion.cpp\
       GModel.cpp\
+      GModelIO.cpp\
+      MVertex.cpp \
+      MElement.cpp \
       gmshModel.cpp\
       gmshEdge.cpp\
       gmshFace.cpp\
@@ -75,6 +78,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Geo.h \
@@ -87,10 +91,12 @@ CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Interpolation.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
   ../Mesh/Create.h ../Mesh/Vertex.h ../Mesh/Mesh.h CAD.h ExtrudeParams.h \
   ../Common/Visibility.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Numeric/Numeric.h ../Mesh/Vertex.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 ExtrudeParams.o: ExtrudeParams.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -101,6 +107,7 @@ ExtrudeParams.o: ExtrudeParams.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
   ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h ExtrudeParams.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Geo.h CAD.h \
@@ -112,8 +119,9 @@ Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ExtrudeParams.h ../Parser/Parser.h ../Common/Context.h gmshModel.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  MVertex.h GPoint.h GEdge.h SVector3.h SPoint2.h GFace.h Pair.h \
-  GRegion.h
+  MVertex.h GPoint.h GEdge.h SVector3.h SPoint2.h MElement.h GFace.h \
+  Pair.h GRegion.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -124,62 +132,88 @@ GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
   ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h ExtrudeParams.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GVertex.o: GVertex.cpp GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GEdge.o: GEdge.cpp GEdge.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
   MVertex.h ../Common/GmshDefines.h GVertex.h GPoint.h SVector3.h \
-  SPoint2.h
+  SPoint2.h MElement.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GFace.o: GFace.cpp GFace.h GPoint.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h SPoint2.h SVector3.h \
-  Pair.h GEdge.h GVertex.h
+  SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h MElement.h SPoint2.h \
+  SVector3.h Pair.h GEdge.h GVertex.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GRegion.o: GRegion.cpp GRegion.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GFace.h GPoint.h \
-  SPoint2.h SVector3.h Pair.h
+  SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h MElement.h GFace.h \
+  GPoint.h SPoint2.h SVector3.h Pair.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 GModel.o: GModel.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h GEdge.h \
-  SVector3.h SPoint2.h GFace.h Pair.h GRegion.h
-gmshModel.o: gmshModel.cpp gmshModel.h GModel.h GVertex.h GEntity.h \
-  Range.h SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h \
-  GPoint.h GEdge.h SVector3.h SPoint2.h GFace.h Pair.h GRegion.h \
-  ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
-  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Parser/OpenFile.h ../DataStr/Tools.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../Common/Message.h gmshVertex.h gmshFace.h \
-  gmshEdge.h gmshRegion.h
-gmshEdge.o: gmshEdge.cpp gmshModel.h GModel.h GVertex.h GEntity.h Range.h \
-  SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h \
-  GEdge.h SVector3.h SPoint2.h GFace.h Pair.h GRegion.h gmshEdge.h \
-  gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
+  SVector3.h SPoint2.h MElement.h GFace.h Pair.h GRegion.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+GModelIO.o: GModelIO.cpp ../Common/Message.h ../Common/GmshDefines.h \
+  gmshRegion.h ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Mesh/Interpolation.h ../Mesh/Vertex.h ../Mesh/Mesh.h CAD.h \
-  ExtrudeParams.h Geo.h ../Common/Context.h
-gmshFace.o: gmshFace.cpp gmshModel.h GModel.h GVertex.h GEntity.h Range.h \
-  SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h \
-  GEdge.h SVector3.h SPoint2.h GFace.h Pair.h GRegion.h gmshEdge.h \
-  gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
+  gmshModel.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
+  SBoundingBox3d.h MVertex.h GPoint.h GEdge.h SVector3.h SPoint2.h \
+  MElement.h GFace.h Pair.h GRegion.h gmshFace.h gmshVertex.h gmshEdge.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+MVertex.o: MVertex.cpp MVertex.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+MElement.o: MElement.cpp MElement.h MVertex.h GEntity.h Range.h SPoint3.h \
+  SBoundingBox3d.h ../Common/GmshDefines.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+gmshModel.o: gmshModel.cpp gmshModel.h GModel.h GVertex.h GEntity.h \
+  Range.h SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h \
+  GPoint.h GEdge.h SVector3.h SPoint2.h MElement.h GFace.h Pair.h \
+  GRegion.h ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  gmshFace.h ../Mesh/Interpolation.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
-  CAD.h ExtrudeParams.h Geo.h ../Mesh/Utils.h ../Mesh/Vertex.h \
-  ../Mesh/Mesh.h
+  Geo.h ../Parser/OpenFile.h ../DataStr/Tools.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../Common/Message.h gmshVertex.h gmshFace.h \
+  gmshEdge.h gmshRegion.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+gmshEdge.o: gmshEdge.cpp gmshModel.h GModel.h GVertex.h GEntity.h Range.h \
+  SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h \
+  GEdge.h SVector3.h SPoint2.h MElement.h GFace.h Pair.h GRegion.h \
+  gmshEdge.h gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
+  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h ../Mesh/Interpolation.h ../Mesh/Vertex.h \
+  ../Mesh/Mesh.h CAD.h ExtrudeParams.h Geo.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
+gmshFace.o: gmshFace.cpp gmshModel.h GModel.h GVertex.h GEntity.h Range.h \
+  SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h GPoint.h \
+  GEdge.h SVector3.h SPoint2.h MElement.h GFace.h Pair.h GRegion.h \
+  gmshEdge.h gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
+  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h gmshFace.h ../Mesh/Interpolation.h ../Mesh/Vertex.h \
+  ../Mesh/Mesh.h CAD.h ExtrudeParams.h Geo.h ../Mesh/Utils.h \
+  ../Mesh/Vertex.h ../Mesh/Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 gmshRegion.o: gmshRegion.cpp gmshModel.h GModel.h GVertex.h GEntity.h \
   Range.h SPoint3.h SBoundingBox3d.h MVertex.h ../Common/GmshDefines.h \
-  GPoint.h GEdge.h SVector3.h SPoint2.h GFace.h Pair.h GRegion.h \
-  gmshEdge.h gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h \
+  GPoint.h GEdge.h SVector3.h SPoint2.h MElement.h GFace.h Pair.h \
+  GRegion.h gmshEdge.h gmshVertex.h ../Mesh/Mesh.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
   ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
@@ -188,8 +222,11 @@ gmshRegion.o: gmshRegion.cpp gmshModel.h GModel.h GVertex.h GEntity.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h gmshFace.h gmshRegion.h ../Mesh/Interpolation.h \
   ../Mesh/Vertex.h ../Mesh/Mesh.h CAD.h ExtrudeParams.h Geo.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 SVector3.o: SVector3.cpp SVector3.h SPoint3.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 SBoundingBox3d.o: SBoundingBox3d.cpp SBoundingBox3d.h SPoint3.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -200,6 +237,7 @@ ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
   ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h CAD.h ExtrudeParams.h
+# 1 "/Users/geuzaine/.gmsh/Geo//"
 Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp
index e5a954f34a..516b538e41 100644
--- a/Geo/gmshEdge.cpp
+++ b/Geo/gmshEdge.cpp
@@ -7,20 +7,30 @@
 
 extern Context_T CTX;
 
-gmshEdge::gmshEdge(GModel *model,Curve *edge,GVertex *v1,GVertex *v2)
-  : GEdge ( model, edge->Num, v1, v2 ), c(edge)
-{}
+gmshEdge::gmshEdge(GModel *model, Curve *edge, GVertex *v1, GVertex *v2)
+  : GEdge(model, edge->Num, v1, v2), c(edge)
+{
+}
+
+gmshEdge::gmshEdge(GModel *model, int num)
+  : GEdge(model, num, 0, 0), c(0)
+{
+}
 
 gmshEdge::~gmshEdge()
-{}
+{
+}
 
 Range<double> gmshEdge::parBounds(int i) const
 { 
-  return( Range<double>(  c->ubeg ,c->uend ));
+  if(!c) return(Range<double>(0., 1.));
+  return(Range<double>(c->ubeg, c->uend));
 }
 
 SBoundingBox3d gmshEdge::bounds() const
 {
+  if(!c) return SBoundingBox3d(SPoint3(0., 0., 0.));
+
   double xmin = 0., ymin = 0., zmin = 0.;
   double xmax = 0., ymax = 0., zmax = 0.;
   for (int i = 0; i < 20; i++){
@@ -40,29 +50,31 @@ SBoundingBox3d gmshEdge::bounds() const
       if(a.Pos.Z > zmax) zmax = a.Pos.Y;
     }
   }
-  SPoint3 bmin(xmin,ymin,zmin);
-  SPoint3 bmax(xmax,ymax,zmax);
+  SPoint3 bmin(xmin, ymin, zmin);
+  SPoint3 bmax(xmax, ymax, zmax);
   SBoundingBox3d bbox(bmin);
-  bbox+=bmax;
+  bbox += bmax;
   return bbox;
 }
 
 GPoint gmshEdge::point(double par) const
 {
+  if(!c) return GPoint(0., 0., 0., this, 0.);
   Vertex a = InterpolateCurve(c, par, 0);
   return GPoint(a.Pos.X,a.Pos.Y,a.Pos.Z,this,par);
 }
 
 GPoint gmshEdge::closestPoint(const SPoint3 & qp)
 {
+  if(!c) return GPoint(0., 0., 0., this, 0.);
   Vertex v;
   Vertex a;
   Vertex der;
   v.Pos.X = qp.x();
   v.Pos.Y = qp.y();
   v.Pos.Z = qp.z();
-  ProjectPointOnCurve (c,&v,&a,&der);
-  return GPoint(a.Pos.X,a.Pos.Y,a.Pos.Z,this,a.u);
+  ProjectPointOnCurve (c, &v, &a, &der);
+  return GPoint(a.Pos.X, a.Pos.Y, a.Pos.Z, this, a.u);
 }
 
 int gmshEdge::containsParam(double pt) const
@@ -73,19 +85,21 @@ int gmshEdge::containsParam(double pt) const
 
 SVector3 gmshEdge::firstDer(double par) const
 {
+  if(!c) return SVector3(0., 0., 0.);
   Vertex a = InterpolateCurve(c, par, 1);
-  return SVector3(a.Pos.X,a.Pos.Y,a.Pos.Z);
+  return SVector3(a.Pos.X, a.Pos.Y, a.Pos.Z);
 }
 
 double gmshEdge::parFromPoint(const SPoint3 &pt) const
 {
+  if(!c) return 0;
   Vertex v;
   Vertex a;
   Vertex der;
   v.Pos.X = pt.x();
   v.Pos.Y = pt.y();
   v.Pos.Z = pt.z();
-  ProjectPointOnCurve (c,&v,&a,&der);
+  ProjectPointOnCurve(c, &v, &a, &der);
   return a.u;
 }
 
@@ -107,6 +121,8 @@ bool gmshEdge::periodic(int dim) const
 
 GEntity::GeomType gmshEdge::geomType() const
 {
+  if(!c) return DiscreteCurve;
+
   switch (c->Typ){
   case MSH_SEGM_LINE : return Line;
   case MSH_SEGM_PARAMETRIC : return ParametricCurve;
diff --git a/Geo/gmshEdge.h b/Geo/gmshEdge.h
index 4110dbfbf5..4841145afa 100644
--- a/Geo/gmshEdge.h
+++ b/Geo/gmshEdge.h
@@ -9,7 +9,8 @@
 
 class gmshEdge : public GEdge {
  public:
-  gmshEdge(GModel *model,Curve *edge,GVertex *v1,GVertex *v2);
+  gmshEdge(GModel *model, Curve *edge, GVertex *v1, GVertex *v2);
+  gmshEdge(GModel *model, int num);
   virtual ~gmshEdge();
   double period() const{throw ;}
   Range<double> parBounds(int i) const;
diff --git a/Geo/gmshFace.cpp b/Geo/gmshFace.cpp
index d7210e7040..407fe058fc 100644
--- a/Geo/gmshFace.cpp
+++ b/Geo/gmshFace.cpp
@@ -6,40 +6,28 @@
 #include "Geo.h"
 #include "Utils.h"
 
-gmshFace::gmshFace(GModel *m,Surface * face):GFace (m,face->Num), s(face)
+gmshFace::gmshFace(GModel *m, Surface *face)
+  : GFace(m, face->Num), s(face)
 {
-  Curve *c;
-  for (int i=0 ; i< List_Nbr ( s->Generatrices ) ; i++)
-    {
-      List_Read ( s->Generatrices , i, & c );
-      GEdge *e = m->edgeByTag ( abs(c->Num) );
-      if ( ! e ) throw;
-      l_edges.push_back(e);
-      e->addFace (this);
-      if (c->Num>0) l_dirs.push_back(1);
-      else l_dirs.push_back(-1);
-    }
+  for (int i=0 ; i < List_Nbr(s->Generatrices) ; i++){
+    Curve *c;
+    List_Read(s->Generatrices, i, &c);
+    GEdge *e = m->edgeByTag(abs(c->Num));
+    if(!e) throw;
+    l_edges.push_back(e);
+    e->addFace(this);
+    if(c->Num > 0) l_dirs.push_back(1);
+    else l_dirs.push_back(-1);
+  }
 }
 
+gmshFace::gmshFace(GModel *m, int num)
+  : GFace(m, num), s(0)
+{
+}
 
 Range<double> gmshFace::parBounds(int i) const
 { 
-/*  SPAinterval range;
-  if(i ==0)
-    range = acisSurface()->equation().param_range_u();
-  if(i==1)
-    range = acisSurface()->equation().param_range_v();
-
-  if(range.finite() )
-    return( Range<double>(range.start_pt(),range.end_pt()) );
-  else{
-    //printf("*calcParBounds()* is called\n");
-    SBoundingBox2d b = calcParBounds();
-    SPoint2 min = b.min();
-    SPoint2 max = b.max();
-    return Range<double>(min[i],max[i]);
-  }
-*/
   return Range<double>(0, 1);
 }
 
@@ -50,7 +38,6 @@ int gmshFace::paramDegeneracies(int dir, double *par)
 
 SBoundingBox3d gmshFace::bounds() const
 {
-
   std::list<GEdge*>::const_iterator it = l_edges.begin();
   SBoundingBox3d res = (*it)->bounds();
   ++it;
@@ -60,30 +47,34 @@ SBoundingBox3d gmshFace::bounds() const
       ++it;
     }
   return res;
-
 }
 
 SVector3 gmshFace::normal(const SPoint2 &param) const
 {
-  Vertex vu = InterpolateSurface( s, param[0], param[1],1,1);
-  Vertex vv = InterpolateSurface( s, param[0], param[1],1,2);
+  if(!s) return SVector3(0., 0., 0.);
+
+  Vertex vu = InterpolateSurface(s, param[0], param[1], 1, 1);
+  Vertex vv = InterpolateSurface(s, param[0], param[1], 1, 2);
   Vertex n = vu % vv;
   n.norme();
-  return SVector3(n.Pos.X,n.Pos.Y,n.Pos.Z);
+  return SVector3(n.Pos.X, n.Pos.Y, n.Pos.Z);
 }
 
 Pair<SVector3,SVector3> gmshFace::firstDer(const SPoint2 &param) const
 {
-  Vertex vu = InterpolateSurface( s, param[0], param[1],1,1);
-  Vertex vv = InterpolateSurface( s, param[0], param[1],1,2);
-  return Pair<SVector3,SVector3>( SVector3(vu.Pos.X,vu.Pos.Y,vu.Pos.Z),
-				  SVector3(vv.Pos.X,vv.Pos.Y,vv.Pos.Z));
+  if(!s) return Pair<SVector3,SVector3>(SVector3(0., 0., 0.),
+					SVector3(0., 0., 0.));
+
+  Vertex vu = InterpolateSurface(s, param[0], param[1], 1, 1);
+  Vertex vv = InterpolateSurface(s, param[0], param[1], 1, 2);
+  return Pair<SVector3,SVector3>(SVector3(vu.Pos.X, vu.Pos.Y, vu.Pos.Z),
+				 SVector3(vv.Pos.X, vv.Pos.Y, vv.Pos.Z));
 }
 
 
 GPoint gmshFace::point(const SPoint2 &pt) const
 {   
-    return point(pt.x(),pt.y()); 
+  return point(pt.x(),pt.y()); 
 }
 
 
@@ -103,34 +94,34 @@ void computePlaneDatas (const GFace *gf, double VX[3],double VY[3],double &x, do
 
 GPoint gmshFace::point(double par1,double par2) const
 {
+  if(!s) return GPoint(0., 0., 0., this);
+
   double pp[2]={par1,par2};
-  if (s->Typ == MSH_SURF_PLAN)
-    {
-      double x,y,z,VX[3],VY[3];
-      computePlaneDatas (this,VX,VY,x,y,z);
-      return GPoint( x + VX[0] * par1 + VY[0] * par2,
-		     y + VX[1] * par1 + VY[1] * par2,
-		     z + VX[2] * par1 + VY[2] * par2, this,pp);
-    }
-  else
-    {
-      Vertex v = InterpolateSurface( s, par1, par2,0,0);
-      return GPoint(v.Pos.X,v.Pos.Y,v.Pos.Z,this,pp);
-    }
+  if(s->Typ == MSH_SURF_PLAN){
+    double x,y,z,VX[3],VY[3];
+    computePlaneDatas (this,VX,VY,x,y,z);
+    return GPoint( x + VX[0] * par1 + VY[0] * par2,
+		   y + VX[1] * par1 + VY[1] * par2,
+		   z + VX[2] * par1 + VY[2] * par2, this,pp);
+  }
+  else{
+    Vertex v = InterpolateSurface( s, par1, par2,0,0);
+    return GPoint(v.Pos.X,v.Pos.Y,v.Pos.Z,this,pp);
+  }
 }
 
 GPoint gmshFace::closestPoint(const SPoint3 & qp)
 {
-  Vertex v;
+  if(!s) return GPoint(0., 0., 0., this);
 
+  Vertex v;
   v.Pos.X = qp.x();
   v.Pos.Y = qp.y();
   v.Pos.Z = qp.z();
 
-  if ( s->Typ != MSH_SURF_PLAN )
+  if(s->Typ != MSH_SURF_PLAN)
     ProjectPointOnSurface(s, v);
-  return GPoint(v.Pos.X,v.Pos.Y,v.Pos.Z,
-		 this,v.us);
+  return GPoint(v.Pos.X, v.Pos.Y, v.Pos.Z, this, v.us);
 }
 
 int gmshFace::containsParam(const SPoint2 &pt) const
@@ -146,27 +137,23 @@ int gmshFace::containsParam(const SPoint2 &pt) const
 
 SPoint2 gmshFace::parFromPoint(const SPoint3 &qp) const
 {
+  if(!s) return SPoint2(0., 0.);
+
   double u,v;
-  if (s->Typ == MSH_SURF_PLAN)
-    {
-      double x,y,z,VX[3],VY[3];
-      computePlaneDatas (this,VX,VY,x,y,z);
-      double vec[3] = {qp.x()-x,qp.y()-y,qp.z()-z};
-      prosca(vec,VX,&u);
-      prosca(vec,VY,&v);
-    }
-  else
-    {
-      XYZtoUV(s, qp.x(), qp.y(), qp.z(), &u, &v, 1.0);
-    }
+  if (s->Typ == MSH_SURF_PLAN){
+    double x,y,z,VX[3],VY[3];
+    computePlaneDatas (this,VX,VY,x,y,z);
+    double vec[3] = {qp.x()-x,qp.y()-y,qp.z()-z};
+    prosca(vec,VX,&u);
+    prosca(vec,VY,&v);
+  }
+  else{
+    XYZtoUV(s, qp.x(), qp.y(), qp.z(), &u, &v, 1.0);
+  }
   SPoint2 pt2(u,v); 
   return pt2;
 }
-/*
 
-GeoRep * gmshFace::geometry()
-{ return new gmshGeoRep(this,2); }
-*/
 bool gmshFace::continuous(int dim) const
 { 
   return true;
@@ -184,6 +171,8 @@ bool gmshFace::degenerate(int dim) const
 
 GEntity::GeomType gmshFace::geomType() const
 {
+  if(!s) return DiscreteSurface;
+
   switch(s->Typ){
   case MSH_SURF_NURBS: return Nurb;
   case MSH_SURF_PLAN: return Plane;
diff --git a/Geo/gmshFace.h b/Geo/gmshFace.h
index 831e369c17..1cb06657fb 100644
--- a/Geo/gmshFace.h
+++ b/Geo/gmshFace.h
@@ -9,7 +9,8 @@
 
 class gmshFace : public GFace {
  public:
-  gmshFace(GModel *m,Surface * face);
+  gmshFace(GModel *m, Surface *face);
+  gmshFace(GModel *m, int num);
   virtual ~gmshFace(){}
   Range<double> parBounds(int i) const; 
   virtual int paramDegeneracies(int dir, double *par); 
@@ -34,7 +35,6 @@ class gmshFace : public GFace {
   virtual bool periodic(int dim) const; 
   virtual bool degenerate(int dim) const; 
   virtual double period(int dir) const {throw;}
-  //  virtual GeoRep * geometry() {return 0;}
   void * getNativePtr() const; 
   Surface *s;
   virtual bool surfPeriodic(int dim) const {throw;}
diff --git a/Geo/gmshModel.cpp b/Geo/gmshModel.cpp
index 58a6440961..2e1537f3c9 100644
--- a/Geo/gmshModel.cpp
+++ b/Geo/gmshModel.cpp
@@ -1,5 +1,6 @@
 #include "gmshModel.h"
 #include "Mesh.h"
+#include "Geo.h"
 #include "GPoint.h"
 #include "SPoint2.h"
 #include "SPoint3.h"
@@ -13,17 +14,18 @@
 #include "gmshRegion.h"
 
 extern Mesh *THEM;
+
 gmshModel::gmshModel()
-  : GModel ( "noname" )
+  : GModel("noname")
 {
   convertFromUglyOldDataStructuresgmshModel();
 }
 
 gmshModel::gmshModel(char *geofile)
-  : GModel ( geofile )
+  : GModel(geofile)
 {
-      OpenProblem ( geofile );
-      convertFromUglyOldDataStructuresgmshModel();
+  OpenProblem(geofile);
+  convertFromUglyOldDataStructuresgmshModel();
 }
 
 void gmshModel::convertFromUglyOldDataStructuresgmshModel()
@@ -35,28 +37,22 @@ void gmshModel::convertFromUglyOldDataStructuresgmshModel()
     for(int i = 0; i < List_Nbr(curves); i++){
       Curve *c;
       List_Read(curves, i, &c);
-      if (c->Num >=0)
-	{
-	  if (points.find(c->beg) == points.end())
-	    {
-	      points.insert(c->beg);
-	      gmshVertex *v = new gmshVertex ( this, c->beg );
-	      //vertices.push_back(v); 
-	      add(v);
-	    }
-	  if (points.find(c->end) == points.end())
-	    {
-	      points.insert(c->end);
-	      gmshVertex *v = new gmshVertex ( this , c->end );
-	      //vertices.push_back(v); 
-	      add(v);
-	    }
-	  gmshEdge *e = new gmshEdge ( this, c ,
-				       vertexByTag(c->beg->Num),
-				       vertexByTag(c->end->Num) );
-	  //	  edges.push_back(e);     	  
-	  add(e);
+      if(c->Num >= 0){
+	if(points.find(c->beg) == points.end()){
+	  points.insert(c->beg);
+	  gmshVertex *v = new gmshVertex(this, c->beg);
+	  add(v);
 	}
+	if(points.find(c->end) == points.end()){
+	  points.insert(c->end);
+	  gmshVertex *v = new gmshVertex(this, c->end);
+	  add(v);
+	}
+	gmshEdge *e = new gmshEdge (this, c,
+				    vertexByTag(c->beg->Num),
+				    vertexByTag(c->end->Num) );
+	add(e);
+      }
     }
     List_Delete(curves);
   }
@@ -66,8 +62,7 @@ void gmshModel::convertFromUglyOldDataStructuresgmshModel()
       Surface *s;
       List_Read(surfaces, i, &s);
       gmshFace *f = new gmshFace ( this, s );
-      //      faces.push_back(f); 
-      add ( f);
+      add(f);
     }
     List_Delete(surfaces);
   } 
@@ -76,22 +71,36 @@ void gmshModel::convertFromUglyOldDataStructuresgmshModel()
     for(int i = 0; i < List_Nbr(volumes); i++){
       Volume *v;
       List_Read(volumes, i, &v);
-      gmshRegion *r = new gmshRegion ( this, v );
-      //      regions.push_back(r); 
-      add ( r);
+      gmshRegion *r = new gmshRegion(this, v);
+      add(r);
     }
     List_Delete(volumes);
   }
-
-  Msg (INFO,"gmshModel Created\n");
-  Msg (INFO,"%d Vertices\n",vertices.size());
-  Msg (INFO,"%d Edges   \n",edges.size());
-  Msg (INFO,"%d Faces\n",faces.size());
-  Msg (INFO,"%d Regions\n" ,regions.size());
-
+  for(int i = 0; i < List_Nbr(THEM->PhysicalGroups); i++){
+    PhysicalGroup *p;
+    List_Read(THEM->PhysicalGroups, i, &p);
+    for(int j = 0; j < List_Nbr(p->Entities); j++){
+      int num;
+      List_Read(p->Entities, j, &num);
+      GEntity *ge = 0;
+      switch(p->Typ){
+      case MSH_PHYSICAL_POINT:   ge = vertexByTag(num); break;
+      case MSH_PHYSICAL_LINE:    ge = edgeByTag(num); break;
+      case MSH_PHYSICAL_SURFACE: ge = faceByTag(num); break;
+      case MSH_PHYSICAL_VOLUME:  ge = regionByTag(num); break;
+      }
+      if(ge) ge->physicals.push_back(p->Num);
+    }
+  }
+  
+  Msg(DEBUG, "gmshModel Created");
+  Msg(DEBUG, "%d Vertices", vertices.size());
+  Msg(DEBUG, "%d Edges", edges.size());
+  Msg(DEBUG, "%d Faces", faces.size());
+  Msg(DEBUG, "%d Regions", regions.size());
 }
 
-GModel *createGmshModel (char *f )
+GModel *createGmshModel(char *f)
 {
-  return new gmshModel (f);
+  return new gmshModel(f);
 }
diff --git a/Geo/gmshRegion.cpp b/Geo/gmshRegion.cpp
index 40623214a6..361ca56765 100644
--- a/Geo/gmshRegion.cpp
+++ b/Geo/gmshRegion.cpp
@@ -6,19 +6,22 @@
 #include "CAD.h"
 #include "Geo.h"
 
-gmshRegion::gmshRegion(GModel *m,::Volume * volume):GRegion (m,volume->Num), v(volume)
+gmshRegion::gmshRegion(GModel *m, ::Volume * volume)
+  : GRegion(m, volume->Num), v(volume)
 {
   Surface *s;
   int ori;
-  for (int i=0 ; i< List_Nbr ( v->Surfaces ) ; i++)
-    {
-      List_Read ( v->Surfaces , i, & s );
-      List_Read ( v->SurfacesOrientations , i, & ori );
-      GFace *f = m->faceByTag ( abs(s->Num) );
-      if ( ! f ) throw;
-      l_faces.push_back(f);
-      l_dirs.push_back(ori);
-    }
+  for(int i = 0; i < List_Nbr(v->Surfaces); i++){
+    List_Read(v->Surfaces, i, &s);
+    List_Read(v->SurfacesOrientations, i, &ori);
+    GFace *f = m->faceByTag(abs(s->Num));
+    if(!f) throw;
+    l_faces.push_back(f);
+    l_dirs.push_back(ori);
+  }
 }
 
-
+gmshRegion::gmshRegion(GModel *m, int num)
+  : GRegion(m, num), v(0)
+{
+}
diff --git a/Geo/gmshRegion.h b/Geo/gmshRegion.h
index 5b24fe9ff3..c19e780c02 100644
--- a/Geo/gmshRegion.h
+++ b/Geo/gmshRegion.h
@@ -8,6 +8,7 @@
 class gmshRegion : public GRegion {
 public:
   gmshRegion(GModel *m, ::Volume *_v);
+  gmshRegion(GModel *m, int num);
   virtual ~gmshRegion() {}
   void * getNativePtr() const {return v;}
   ::Volume *v;
diff --git a/Geo/gmshVertex.h b/Geo/gmshVertex.h
index 909284d949..b3057c3412 100644
--- a/Geo/gmshVertex.h
+++ b/Geo/gmshVertex.h
@@ -8,16 +8,23 @@
 class gmshVertex : public GVertex {
 public:
   gmshVertex(GModel *m, Vertex *_v) : GVertex(m, _v->Num), v(_v)
-    {
-      mesh_vertices.push_back (new MVertex (x(),y(),z(),this));
-    }
+  {
+    mesh_vertices.push_back(new MVertex(x(), y(), z(), this));
+  }
+  gmshVertex(GModel *m, int num) : GVertex(m, num), v(0)
+  {
+  }
   virtual ~gmshVertex() {}
-  virtual GPoint point() const{return GPoint ( v->Pos.X,v->Pos.Y,v->Pos.Z,this);}
-  virtual double x() const {return v->Pos.X;}
-  virtual double y() const {return v->Pos.Y;}
-  virtual double z() const {return v->Pos.Z;}
+  virtual GPoint point() const 
+  {
+    if(!v) return GPoint(0., 0., 0., this);
+    return GPoint(v->Pos.X, v->Pos.Y, v->Pos.Z, this);
+  }
+  virtual double x() const {return v ? v->Pos.X : 0.;}
+  virtual double y() const {return v ? v->Pos.Y : 0.;}
+  virtual double z() const {return v ? v->Pos.Z : 0.;}
   void * getNativePtr() const {return v;}
-  virtual double prescribedMeshSizeAtVertex () const {return v->lc;}
+  virtual double prescribedMeshSizeAtVertex () const {return v ? v->lc : 0.;}
  protected:
   Vertex *v;
 };
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index 4981a1ea8f..26adf8714f 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.83 2006-07-24 14:05:50 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.84 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -25,6 +25,7 @@
 #include "Context.h"
 #include "Options.h"
 #include "Mesh.h"
+#include "GModel.h"
 
 #include "gl2ps.h"
 #include "gl2gif.h"
@@ -34,6 +35,7 @@
 #include "gl2yuv.h"
 
 extern Context_T CTX;
+extern GModel *GMODEL;
 
 int GuessFileFormatFromFileName(char *name)
 {
@@ -97,10 +99,31 @@ char *GetStringForFileFormat(int format)
   }
 }
 
-void CreateOutputFile(char *name, int format)
+void GetDefaultFileName(int format, char *name)
 {
-  if(!name || !strlen(name))
-    return;
+  char ext[10] = "";
+  strcpy(name, CTX.base_filename);
+  switch(format){
+  case FORMAT_MSH:  strcpy(ext, ".msh"); break;
+  case FORMAT_VRML: strcpy(ext, ".wrl"); break;
+  case FORMAT_UNV:  strcpy(ext, ".unv"); break;
+  case FORMAT_GREF: strcpy(ext, ".Gref"); break;
+  case FORMAT_DMG:  strcpy(ext, ".dmg"); break;
+  case FORMAT_STL:  strcpy(ext, ".stl"); break;
+  case FORMAT_P3D:  strcpy(ext, ".p3d"); break;
+  default: break;
+  }
+  strcat(name, ext);
+}
+
+void CreateOutputFile(char *filename, int format)
+{
+  char name[256];
+
+  if(!filename || !strlen(filename))
+    GetDefaultFileName(format, name);
+  else
+    strcpy(name, filename);
 
   int oldformat = CTX.print.format;
   CTX.print.format = format;
@@ -125,6 +148,9 @@ void CreateOutputFile(char *name, int format)
     break;
 
   case FORMAT_MSH:
+    GMODEL->writeMSH(name);
+    break;
+
   case FORMAT_UNV:
   case FORMAT_P3D:
   case FORMAT_DMG:
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index 4ea06d3c83..a655a01acc 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.97 2006-07-14 12:17:06 geuzaine Exp $
+// $Id: Draw.cpp,v 1.98 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -79,8 +79,9 @@ void Draw3d(void)
   InitProjection();
   InitRenderModel();
   InitPosition();
-
-  Draw_Model();
+  Draw_Geom();
+  Draw_Mesh();
+  Draw_Post();
 }
 
 void Draw2d(void)
@@ -346,6 +347,9 @@ void InitPosition(void)
   // context has changed, i.e., even if we are out of Draw())
   glGetDoublev(GL_PROJECTION_MATRIX, CTX.proj);
   glGetDoublev(GL_MODELVIEW_MATRIX, CTX.model);
+
+  for(int i = 0; i < 6; i++)
+    glClipPlane((GLenum)(GL_CLIP_PLANE0 + i), CTX.clip_plane[i]);
 }
 
 // Entity selection
@@ -377,7 +381,8 @@ int Process_SelectionBuffer(int type, bool multi,
   glPushMatrix();
   InitProjection(x, y, w, h);
   InitPosition();
-  Draw_Model();
+  Draw_Geom();
+  Draw_Mesh();
   glPopMatrix();
 
   GLint numhits = glRenderMode(GL_RENDER);
diff --git a/Graphics/Draw.h b/Graphics/Draw.h
index 357270d79a..8ccbe83b20 100644
--- a/Graphics/Draw.h
+++ b/Graphics/Draw.h
@@ -76,6 +76,7 @@ void Draw_String(char *s, double style);
 void Draw_String_Center(char *s);
 void Draw_String_Right(char *s);
 void Draw_Geom(void);
+void Draw_Mesh(void);
 void Draw_Post(void);
 void Draw_Graph2D(void);
 void Draw_Text2D(void);
@@ -101,7 +102,6 @@ void Draw_SmallAxes(void);
 void Draw_Axes(int mode, int tics[3], char format[3][256], char label[3][256],
 	       double bbox[6]);
 
-void Draw_Model();
 void Draw_Mesh_Volume(void *a, void *b);
 void Draw_Mesh_Surface(void *a, void *b);
 void Draw_Mesh_Extruded_Surfaces(void *a, void *b);
diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp
index fc5c431287..1d633edc88 100644
--- a/Graphics/Geom.cpp
+++ b/Graphics/Geom.cpp
@@ -1,4 +1,4 @@
-// $Id: Geom.cpp,v 1.101 2006-07-24 14:05:50 geuzaine Exp $
+// $Id: Geom.cpp,v 1.102 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -21,14 +21,8 @@
 
 #include "Gmsh.h"
 #include "GmshUI.h"
-#include "Numeric.h"
-#include "Geo.h"
-#include "CAD.h"
-#include "Mesh.h"
-#include "Utils.h"
 #include "Draw.h"
 #include "Context.h"
-#include "Interpolation.h"
 #include "Plugin.h"
 #include "PluginManager.h"
 #include "gl2ps.h"
@@ -200,338 +194,6 @@ void drawGeoEdge(GEdge *c)
 
 // Surfaces
 
-void putZ(Vertex * v, Surface * s)
-{
-  Vertex V;
-  V.Pos.X = s->a;
-  V.Pos.Y = s->b;
-  V.Pos.Z = s->c;
-  Projette(&V, s->plan);
-  if(V.Pos.Z != 0.0)
-    v->Pos.Z = (s->d - V.Pos.X * v->Pos.X - V.Pos.Y * v->Pos.Y) / V.Pos.Z;
-  else
-    v->Pos.Z = 0.0;
-
-  Projette(v, s->invplan);
-}
-
-int isPointOnPlanarSurface(Surface * S, double X, double Y, double Z,
-                           double n[3])
-{
-  double Angle = 0.0;
-  Vertex V;
-  V.Pos.X = X;
-  V.Pos.Y = Y;
-  V.Pos.Z = Z;
-
-  for(int i = 0; i < List_Nbr(S->Generatrices); i++) {
-
-    Curve *C;
-    List_Read(S->Generatrices, i, &C);
-
-    int N = (C->Typ == MSH_SEGM_LINE) ? 1 : 10;
-
-    for(int j = 0; j < N; j++) {
-      double u1 = (double)j / (double)(N);
-      double u2 = (double)(j + 1) / (double)(N);
-      Vertex P1 = InterpolateCurve(C, u1, 0);
-      Vertex P2 = InterpolateCurve(C, u2, 0);
-      Angle += angle_plan(&V, &P1, &P2, n);
-    }
-
-  }
-
-  // if Angle == 2*pi, we're inside
-
-  if(fabs(Angle) > 2*M_PI-0.5 && fabs(Angle) < 2*M_PI+0.5) 
-    return 1;
-  return 0;
-}
-
-void getPlaneSurfaceNormal(Surface *s, double x, double y, double z, double n[3])
-{
-  double t1[3], t2[3];
-  Curve *c;
-
-  for(int i = 0; i < 3; i++)
-    n[i] = 0.0;
-
-  if(s->Typ != MSH_SURF_PLAN)
-    return;
-
-  // We cannot use s->plan or InterpolateSurface here (they both rely
-  // on the mean plane, which borks the orientation). So we need to
-  // use this trick:
-
-  if(List_Nbr(s->Generatrices) > 1){
-    List_Read(s->Generatrices, 0, &c);
-    if(c->beg){
-      t1[0] = x - c->beg->Pos.X;
-      t1[1] = y - c->beg->Pos.Y;
-      t1[2] = z - c->beg->Pos.Z;
-      // 1) try to get a point close to 'beg' on the same curve
-      // 2) if we are really unlucky and these two points are aligned 
-      // with (x,y,z), which we know is inside or on the boundary of
-      // the surface, then get a point from the next generatrice
-      // 3) repeat
-      for(int i = 0; i < List_Nbr(s->Generatrices); i++){
-	List_Read(s->Generatrices, i, &c);
-	Vertex v = InterpolateCurve(c, 0.1, 0);
-	t2[0] = x - v.Pos.X;
-	t2[1] = y - v.Pos.Y;
-	t2[2] = z - v.Pos.Z;
-	prodve(t1, t2, n);
-	if(norme(n))
-	  break;
-      }
-    }
-  }
-  if(List_Nbr(s->Generatrices) < 2 || !norme(n)){
-    Msg(WARNING, "Reverting to mean plane normal for surface %d", s->Num);
-    n[0] = s->a;
-    n[1] = s->b;
-    n[2] = s->c;
-    norme(n);
-  }
-}
-
-void Draw_Plane_Surface(Surface * s)
-{
-  Curve *c;
-  Vertex V[4], vv, vv1, vv2;
-  double n[3];
-
-  if(!CTX.threads_lock && List_Nbr(s->Orientations) < 1) {
-    CTX.threads_lock = 1;
-
-    List_T *points = List_Create(10, 10, sizeof(Vertex *));
-    for(int i = 0; i < List_Nbr(s->Generatrices); i++) {
-      List_Read(s->Generatrices, i, &c);
-      for(int j = 0; j < List_Nbr(c->Control_Points); j++) {
-	List_Add(points, List_Pointer(c->Control_Points, j));
-      }
-    }
-
-    if(!List_Nbr(points)){
-      List_Delete(points);      
-      CTX.threads_lock = 0;
-      return;
-    }
-    MeanPlane(points, s);
-    List_Delete(points);
-    
-    // compute (rough) bounding box of surface
-    double minx = 0., miny = 0., maxx = 0., maxy = 0.;
-    for(int i = 0; i < List_Nbr(s->Generatrices); i++) {
-      List_Read(s->Generatrices, i, &c);
-      Vertex P1 = InterpolateCurve(c, 0.0, 0);
-      Vertex P2 = InterpolateCurve(c, 0.5, 0);
-      Vertex P3 = InterpolateCurve(c, 1.0, 0);
-      Projette(&P1, s->plan);
-      Projette(&P2, s->plan);
-      Projette(&P3, s->plan);
-      if(!i) {
-	minx = maxx = P1.Pos.X;
-	miny = maxy = P1.Pos.Y;
-      }
-      minx = DMIN(DMIN(DMIN(minx, P1.Pos.X), P2.Pos.X), P3.Pos.X);
-      miny = DMIN(DMIN(DMIN(miny, P1.Pos.Y), P2.Pos.Y), P3.Pos.Y);
-      maxx = DMAX(DMAX(DMAX(maxx, P1.Pos.X), P2.Pos.X), P3.Pos.X);
-      maxy = DMAX(DMAX(DMAX(maxy, P1.Pos.Y), P2.Pos.Y), P3.Pos.Y);
-    }
-
-    V[0].Pos.X = minx;
-    V[0].Pos.Y = miny;
-    V[1].Pos.X = maxx;
-    V[1].Pos.Y = miny;
-    V[2].Pos.X = maxx;
-    V[2].Pos.Y = maxy;
-    V[3].Pos.X = minx;
-    V[3].Pos.Y = maxy;
-
-    for(int i = 0; i < 4; i++) {
-      V[i].Pos.Z = 0.0;
-      putZ(&V[i], s);
-    }
-
-    n[0] = s->plan[2][0];
-    n[1] = s->plan[2][1];
-    n[2] = s->plan[2][2];
-    norme(n);
-
-    // compute which parts of the "middle cross" lie inside the surface
-    const int numPoints = 200;
-    for(int cross = 0; cross < 2; cross++) {
-      int k = 0;
-      for(int i = 0; i < numPoints; i++) {
-	double t = (double)i / (double)(numPoints-1);
-	if(!cross){
-	  vv.Pos.X = t * 0.5 * (V[0].Pos.X + V[1].Pos.X) + 
-	    (1. - t) * 0.5 * (V[2].Pos.X + V[3].Pos.X);
-	  vv.Pos.Y = t * 0.5 * (V[0].Pos.Y + V[1].Pos.Y) + 
-	    (1. - t) * 0.5 * (V[2].Pos.Y + V[3].Pos.Y);
-	  vv.Pos.Z = t * 0.5 * (V[0].Pos.Z + V[1].Pos.Z) + 
-	    (1. - t) * 0.5 * (V[2].Pos.Z + V[3].Pos.Z);
-	}
-	else{
-	  vv.Pos.X = t * .5 * (V[0].Pos.X + V[3].Pos.X) + 
-	    (1. - t) * .5 * (V[2].Pos.X + V[1].Pos.X);
-	  vv.Pos.Y = t * .5 * (V[0].Pos.Y + V[3].Pos.Y) + 
-	    (1. - t) * .5 * (V[2].Pos.Y + V[1].Pos.Y);
-	  vv.Pos.Z = t * .5 * (V[0].Pos.Z + V[3].Pos.Z) + 
-	    (1. - t) * .5 * (V[2].Pos.Z + V[1].Pos.Z);
-	}
-	if(isPointOnPlanarSurface(s, vv.Pos.X, vv.Pos.Y, vv.Pos.Z, n)) {
-	  if(!k) {
-	    List_Add(s->Orientations, &vv);
-	    k = 1;
-	  }
-	}
-	else {
-	  if(k) {
-	    List_Add(s->Orientations, &vv);
-	    k = 0;
-	  }
-	}
-      }
-      if(k)
-	List_Add(s->Orientations, &vv);
-    }
-
-    Msg(STATUS2, "Plane Surface %d (%d cross points)", 
-	s->Num, List_Nbr(s->Orientations));
-    
-    if(!List_Nbr(s->Orientations)){ // add dummy
-      List_Add(s->Orientations, &vv);
-      //printf("surf %d: min=%g %g max=%g %g\n", s->Num, minx, miny, maxx, maxy);
-    }
-
-    CTX.threads_lock = 0;
-  }
-  
-  if(List_Nbr(s->Orientations) > 1) {
-
-    if(CTX.geom.surfaces) {
-      glEnable(GL_LINE_STIPPLE);
-      glLineStipple(1, 0x1F1F);
-      gl2psEnable(GL2PS_LINE_STIPPLE);
-      glBegin(GL_LINES);
-      for(int i = 0; i < List_Nbr(s->Orientations); i++) {
-	List_Read(s->Orientations, i, &vv);
-	glVertex3d(vv.Pos.X, vv.Pos.Y, vv.Pos.Z);
-      }
-      glEnd();
-      glDisable(GL_LINE_STIPPLE);
-      gl2psDisable(GL2PS_LINE_STIPPLE);
-    }
-
-    if(CTX.geom.surfaces_num) {
-      List_Read(s->Orientations, 0, &vv1);
-      List_Read(s->Orientations, 1, &vv2);
-      char Num[100];
-      sprintf(Num, "%d", s->Num);
-      double offset = 0.3 * CTX.gl_fontsize * CTX.pixel_equiv_x;
-      glRasterPos3d((vv2.Pos.X + vv1.Pos.X) / 2. + offset / CTX.s[0],
-		    (vv2.Pos.Y + vv1.Pos.Y) / 2. + offset / CTX.s[1],
-		    (vv2.Pos.Z + vv1.Pos.Z) / 2. + offset / CTX.s[2]);
-      Draw_String(Num);
-    }
-
-    if(CTX.geom.normals) {
-      List_Read(s->Orientations, 0, &vv1);
-      List_Read(s->Orientations, 1, &vv2);
-      double x = (vv1.Pos.X + vv2.Pos.X) / 2.;
-      double y = (vv1.Pos.Y + vv2.Pos.Y) / 2.;
-      double z = (vv1.Pos.Z + vv2.Pos.Z) / 2.;
-      getPlaneSurfaceNormal(s, x, y, z, n);
-      n[0] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[0];
-      n[1] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[1];
-      n[2] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[2];
-      glColor4ubv((GLubyte *) & CTX.color.geom.normals);
-      Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
-		  CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius, 
-		  x, y, z, n[0], n[1], n[2], CTX.geom.light);
-    }
-
-  }
-}
-
-void Draw_NonPlane_Surface(Surface * s)
-{
-  if(CTX.geom.surfaces) {
-    if(s->Typ == MSH_SURF_NURBS) {
-      if(CTX.geom.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      GLUnurbsObj *nurb;
-      nurb = gluNewNurbsRenderer();
-#if defined(GLU_VERSION_1_3)
-      gluNurbsProperty(nurb, (GLenum) GLU_SAMPLING_TOLERANCE, 50.0);
-      gluNurbsProperty(nurb, (GLenum) GLU_DISPLAY_MODE, GLU_FILL);
-#endif
-      gluBeginSurface(nurb);
-      gluNurbsSurface(nurb, s->Nu + s->OrderU + 1, s->ku,
-		      s->Nv + s->OrderV + 1, s->kv, 4, 4 * s->Nu, s->cp,
-		      s->OrderU + 1, s->OrderV + 1, GL_MAP2_VERTEX_4);
-      gluEndSurface(nurb);
-      gluDeleteNurbsRenderer(nurb);
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-    else{
-      glEnable(GL_LINE_STIPPLE);
-      glLineStipple(1, 0x1F1F);
-      gl2psEnable(GL2PS_LINE_STIPPLE);
-      int N = 50;
-      glBegin(GL_LINE_STRIP);
-      for(int i = 0; i < N + 1; i++) {
-	double u = (double)i / (double)N;
-	Vertex v = InterpolateSurface(s, u, 0.5, 0, 0);
-	glVertex3d(v.Pos.X, v.Pos.Y, v.Pos.Z);
-      }
-      glEnd();
-      glBegin(GL_LINE_STRIP);
-      for(int i = 0; i < N + 1; i++) {
-	double u = (double)i / (double)N;
-	Vertex v = InterpolateSurface(s, 0.5, u, 0, 0);
-	glVertex3d(v.Pos.X, v.Pos.Y, v.Pos.Z);
-      }
-      glEnd();
-      glDisable(GL_LINE_STIPPLE);
-      gl2psDisable(GL2PS_LINE_STIPPLE);
-    }
-  }
-
-  if(CTX.geom.surfaces_num) {
-    Vertex v = InterpolateSurface(s, 0.5, 0.5, 0, 0);
-    char Num[100];
-    sprintf(Num, "%d", s->Num);
-    double offset = 0.3 * CTX.gl_fontsize * CTX.pixel_equiv_x;
-    glRasterPos3d(v.Pos.X + offset / CTX.s[0],
-		  v.Pos.Y + offset / CTX.s[1],
-		  v.Pos.Z + offset / CTX.s[2]);
-    Draw_String(Num);
-  }
-
-  if(CTX.geom.normals) {
-    const double eps = 1.e-3;
-    Vertex v1 = InterpolateSurface(s, 0.5, 0.5, 0, 0);
-    Vertex v2 = InterpolateSurface(s, 0.5 + eps, 0.5, 0, 0);
-    Vertex v3 = InterpolateSurface(s, 0.5, 0.5 + eps, 0, 0);
-    double n[3];
-    normal3points(v1.Pos.X, v1.Pos.Y, v1.Pos.Z, 
-		  v2.Pos.X, v2.Pos.Y, v2.Pos.Z, 
-		  v3.Pos.X, v3.Pos.Y, v3.Pos.Z, n);
-    n[0] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[0];
-    n[1] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[1];
-    n[2] *= CTX.geom.normals * CTX.pixel_equiv_x / CTX.s[2];
-    glColor4ubv((GLubyte *) & CTX.color.geom.normals);
-    Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
-		CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius,
-		v1.Pos.X, v1.Pos.Y, v1.Pos.Z, n[0], n[1], n[2],
-		CTX.geom.light);
-  }
-}
-
 void drawGeoFace(GFace *s)
 {
   if(!(s->drawAttributes.Visible & VIS_GEOM))
@@ -582,6 +244,14 @@ void drawGeoRegion(GRegion *v)
 void Draw_Geom()
 {
   if(!GMODEL) return;
+
+  glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+  
+  for(int i = 0; i < 6; i++)
+    if(CTX.clip[i] & 1) 
+      glEnable((GLenum)(GL_CLIP_PLANE0 + i));
+    else
+      glDisable((GLenum)(GL_CLIP_PLANE0 + i));
   
   if(CTX.geom.points || CTX.geom.points_num)
     for(GModel::viter it = GMODEL->firstVertex(); it != GMODEL->lastVertex(); it++)
@@ -598,17 +268,12 @@ void Draw_Geom()
   if(CTX.geom.volumes || CTX.geom.volumes_num)
     for(GModel::riter it = GMODEL->firstRegion(); it != GMODEL->lastRegion(); it++)
       drawGeoRegion(*it);
+
+  for(int i = 0; i < 6; i++)
+    glDisable((GLenum)(GL_CLIP_PLANE0 + i));
 }
 
-// Highlight routines (Note: in Gmsh < 1.61, we used to draw permanent
-// highlights (the "red" selected lines, etc.) using incremental
-// drawing, i.e., by drawing "over" the current picture in-between
-// Draw() calls. This was fine for simple overlays on points and lines
-// (that we could draw with a slightly larger width so that they would
-// cover the old ones), but it does not work well when drawing
-// surfaces, post-pro views, etc. And since real cross-platform
-// overlays are unmanageable, the best solution is actually to redraw
-// the whole scene. This is the approach we follow now.
+// Highlight routines
 
 void HighlightEntity(GEntity *e, int permanent)
 {
diff --git a/Graphics/Makefile b/Graphics/Makefile
index 7c19764ee0..26a8c430c1 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.85 2006-07-25 12:08:23 remacle Exp $
+# $Id: Makefile,v 1.86 2006-08-04 14:28:02 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -69,6 +69,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Draw.o: Draw.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h ../Geo/Geo.h \
@@ -81,155 +82,49 @@ Draw.o: Draw.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Geo/GModel.h \
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  ../Common/Context.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SPoint3.h ../Geo/MVertex.h ../Geo/MVertex.h ../Geo/GPoint.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/MElement.h \
+  ../Geo/MVertex.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
+  ../Geo/MElement.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/MElement.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
+Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
-  ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h \
+  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h \
+  ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h \
   ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h
-Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h ../Geo/Geo.h \
-  ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
-  ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
-  ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Geo/ExtrudeParams.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Geo/MinMax.h gl2ps.h
+  ../Geo/GEntity.h ../Geo/MElement.h Draw.h ../Common/Views.h \
+  ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Geom.o: Geom.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h \
-  ../Numeric/Numeric.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
-  ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Geo/ExtrudeParams.h ../Mesh/Utils.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
-  Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
-  ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Mesh/Interpolation.h \
-  ../Mesh/Vertex.h ../Mesh/Mesh.h ../Plugin/Plugin.h ../Common/Options.h \
-  ../Plugin/PluginManager.h ../Plugin/Plugin.h gl2ps.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h Draw.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  ../Plugin/Plugin.h ../Common/Options.h ../Plugin/PluginManager.h \
+  ../Plugin/Plugin.h gl2ps.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
-  ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h \
+  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h \
+  ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h \
   ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h
+  ../Geo/GEntity.h ../Geo/MElement.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h \
@@ -242,42 +137,9 @@ Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h gl2ps.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 PostElement.o: PostElement.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -290,42 +152,9 @@ PostElement.o: PostElement.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Iso.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Iso.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Iso.o: Iso.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Common/GmshUI.h ../Geo/Geo.h \
@@ -337,42 +166,9 @@ Iso.o: Iso.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Entity.o: Entity.cpp ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
@@ -385,83 +181,16 @@ Entity.o: Entity.cpp ../Mesh/Mesh.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h gl2ps.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 ReadImg.o: ReadImg.cpp ReadImg.h ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Common/GmshUI.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Scale.o: Scale.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -474,42 +203,9 @@ Scale.o: Scale.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h gl2ps.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 Graph2D.o: Graph2D.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -522,42 +218,8 @@ Graph2D.o: Graph2D.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h gl2ps.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 CreateFile.o: CreateFile.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -568,257 +230,58 @@ CreateFile.o: CreateFile.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
   ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h gl2ps.h gl2gif.h \
-  PixelBuffer.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h gl2jpeg.h gl2png.h gl2ppm.h gl2yuv.h
+  ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h ../Geo/GModel.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
+  ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/GFace.h \
+  ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/MElement.h gl2ps.h gl2gif.h PixelBuffer.h Draw.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h gl2jpeg.h gl2png.h \
+  gl2ppm.h gl2yuv.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2ps.o: gl2ps.cpp gl2ps.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2gif.o: gl2gif.cpp gl2gif.h PixelBuffer.h ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2jpeg.o: gl2jpeg.cpp gl2jpeg.h PixelBuffer.h ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h /usr/local/include/FL/images/jpeglib.h \
-  /usr/local/include/FL/images/jconfig.h \
-  /usr/local/include/FL/images/jmorecfg.h \
-  /usr/local/include/FL/images/jerror.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2png.o: gl2png.cpp gl2png.h PixelBuffer.h ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h /usr/local/include/FL/images/png.h \
-  /usr/local/include/FL/images/pngconf.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2ppm.o: gl2ppm.cpp gl2ppm.h PixelBuffer.h ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Graphics//"
 gl2yuv.o: gl2yuv.cpp gl2yuv.h PixelBuffer.h ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../Common/GmshUI.h Draw.h ../Common/Views.h \
   ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index e6cb21e411..d0303b4182 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.154 2006-07-12 07:24:13 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.155 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -21,2090 +21,99 @@
 
 #include "Gmsh.h"
 #include "GmshUI.h"
-#include "Geo.h"
-#include "CAD.h"
-#include "Mesh.h"
+#include "GModel.h"
 #include "Draw.h"
 #include "Context.h"
-#include "MinMax.h"
+#include "VertexArray.h"
 #include "gl2ps.h"
-#include "Numeric.h"
 
-extern Mesh *THEM;
+extern GModel *GMODEL;
 extern Context_T CTX;
 
-extern int edges_tetra[6][2];
-extern int edges_hexa[12][2];
-extern int edges_prism[9][2];
-extern int edges_pyramid[8][2];
-
-extern int trifaces_tetra[4][3];
-extern int trifaces_prism[2][3];
-extern int trifaces_pyramid[4][3];
-extern int quadfaces_hexa[6][4];
-extern int quadfaces_prism[3][4];
-extern int quadfaces_pyramid[1][4];
-
-static DrawingColor theColor;
-static int thePhysical = 0;
-static Curve *theCurve = NULL;
-static Surface *theSurface = NULL;
-static Volume *theVolume = NULL;
-static int numLabelsDisplayed = 0;
-static int stepLabelsDisplayed = 1;
-
-void draw_triangle_overlay(double r, double g, double b,
-			   Vertex *v1, Vertex *v2, Vertex *v3)
-{
-  // this routine is only used to display the interactive construction
-  // of the 2D aniso mesh
-  SetOpenglContext();
-  InitProjection();
-  InitPosition();
-  glDisable(GL_DEPTH_TEST);
-  glDrawBuffer(GL_FRONT);
-  glColor3f(r, g, b);
-  glBegin(GL_LINE_LOOP);
-  glVertex3d(v1->Pos.X, v1->Pos.Y, v1->Pos.Z);
-  glVertex3d(v2->Pos.X, v2->Pos.Y, v2->Pos.Z);
-  glVertex3d(v3->Pos.X, v3->Pos.Y, v3->Pos.Z);
-  glEnd();
-  glFlush();
-  glDrawBuffer(GL_BACK);
-  glEnable(GL_DEPTH_TEST);
-}
-
-int getLastPhysical(int type, int num)
-{
-  // If we visualize the mesh by coloring the physical entities, or if
-  // we ask to display physical entity labels on elements, this
-  // routine returns the number of the last physical entity of type
-  // "type" that contains the elementary entity "num"
-  if(CTX.mesh.color_carousel == 2 || CTX.mesh.label_type == 2){
-    static int warn = 1;
-    if(List_Nbr(THEM->PhysicalGroups) > 100 && warn){
-      Msg(WARNING, "There are many physical entities in the mesh (%d)",
-	  List_Nbr(THEM->PhysicalGroups));
-      Msg(WARNING, "You might want to color and/or label the mesh by elementary entity instead");
-      warn = 0;
-    }
-    for(int i = List_Nbr(THEM->PhysicalGroups)-1; i >=0 ; i--){
-      PhysicalGroup *p = *(PhysicalGroup**)List_Pointer(THEM->PhysicalGroups, i);
-      if(p->Typ == type && List_Query(p->Entities, &num, fcmp_int))
-	return p->Num;
-    }
-  }
-  return 0;
-}
-
-double intersectCutPlane(int num, Vertex **v, int *edges, int *faces)
-{
-  if(!CTX.mesh.use_cut_plane)
-    return 0;
-
-  double val = CTX.mesh.evalCutPlane(v[0]->Pos.X, v[0]->Pos.Y, v[0]->Pos.Z);
-  for(int i = 1; i < num; i++){
-    if(val * CTX.mesh.evalCutPlane(v[i]->Pos.X, v[i]->Pos.Y, v[i]->Pos.Z) <= 0){
-      // the element intersects the cut plane
-      if(CTX.mesh.cut_plane_as_surface){
-	if(!*edges)
-	  *edges = CTX.mesh.surfaces_edges;
-	if(!*faces)
-	  *faces = CTX.mesh.surfaces_faces;
-      }
-      return 1.;
-    }
-  }
-  return val;
-}
-
-double intersectCutPlane(int num, Vertex **v)
-{
-  int dummy;
-  return intersectCutPlane(num, v, &dummy, &dummy);
-}
-
-int getPartition(int index)
-{
-  MeshPartition **part = (MeshPartition**)List_Pointer_Test(THEM->Partitions, index);
-  if(!part)
-    return 0; // OK, no partitions available
-  else if(!(*part)->Visible) 
-    return -1; // partition should be hidden
-  else
-    return (*part)->Num; // partition number
-}
-
-static int preproNormals = 0;
-
-void Draw_Model()
-{
-  for(int i = 0; i < 6; i++)
-    glClipPlane((GLenum)(GL_CLIP_PLANE0 + i), CTX.clip_plane[i]);
-
-  // draw the geometry
-
-  if(THEM->status >= 0){
-    glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
-
-    for(int i = 0; i < 6; i++)
-      if(CTX.clip[i] & 1) 
-	glEnable((GLenum)(GL_CLIP_PLANE0 + i));
-      else
-	glDisable((GLenum)(GL_CLIP_PLANE0 + i));
-
-    Draw_Geom();
-
-    for(int i = 0; i < 6; i++)
-      glDisable((GLenum)(GL_CLIP_PLANE0 + i));
-  }
-
-  // We used to be able to exit here when in SELECT mode. Since we
-  // also allow to select mesh entities now, we cannot anymore. Not
-  // sure what we should do eventually
-  //if(CTX.render_mode == GMSH_SELECT) return;
-  
-  // draw the bounding box if we asked for it and we have a geometry
-  // or a mesh, or if we are in fast redraw mode and there is no
-  // geometry but there is a mesh
-  
-  int somegeo = 
-    Tree_Nbr(THEM->Points) || Tree_Nbr(THEM->Curves) || Tree_Nbr(THEM->Surfaces);
-
-  if((CTX.draw_bbox && (somegeo || Tree_Nbr(THEM->Vertices))) ||
-     (!CTX.mesh.draw && !Tree_Nbr(THEM->Points) && Tree_Nbr(THEM->Vertices))) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glLineWidth(CTX.line_width);
-    gl2psLineWidth(CTX.line_width * CTX.print.eps_line_width_factor);
-
-    glBegin(GL_LINE_LOOP);
-    glVertex3d(CTX.min[0], CTX.min[1], CTX.min[2]);
-    glVertex3d(CTX.max[0], CTX.min[1], CTX.min[2]);
-    glVertex3d(CTX.max[0], CTX.max[1], CTX.min[2]);
-    glVertex3d(CTX.min[0], CTX.max[1], CTX.min[2]);
-    glEnd();
-    glBegin(GL_LINE_LOOP);
-    glVertex3d(CTX.min[0], CTX.min[1], CTX.max[2]);
-    glVertex3d(CTX.max[0], CTX.min[1], CTX.max[2]);
-    glVertex3d(CTX.max[0], CTX.max[1], CTX.max[2]);
-    glVertex3d(CTX.min[0], CTX.max[1], CTX.max[2]);
-    glEnd();
-    glBegin(GL_LINES);
-    glVertex3d(CTX.min[0], CTX.min[1], CTX.min[2]);
-    glVertex3d(CTX.min[0], CTX.min[1], CTX.max[2]);
-    glVertex3d(CTX.max[0], CTX.min[1], CTX.min[2]);
-    glVertex3d(CTX.max[0], CTX.min[1], CTX.max[2]);
-    glVertex3d(CTX.max[0], CTX.max[1], CTX.min[2]);
-    glVertex3d(CTX.max[0], CTX.max[1], CTX.max[2]);
-    glVertex3d(CTX.min[0], CTX.max[1], CTX.min[2]);
-    glVertex3d(CTX.min[0], CTX.max[1], CTX.max[2]);
-    glEnd();
-    char label[256];
-    double offset = 0.3 * CTX.gl_fontsize * CTX.pixel_equiv_x;
-    glRasterPos3d(CTX.min[0] + offset / CTX.s[0], 
-		  CTX.min[1] + offset / CTX.s[0], 
-		  CTX.min[2] + offset / CTX.s[0]);
-    sprintf(label, "(%g,%g,%g)", CTX.min[0], CTX.min[1], CTX.min[2]);
-    Draw_String(label);
-    glRasterPos3d(CTX.max[0] + offset / CTX.s[0], 
-		  CTX.max[1] + offset / CTX.s[0], 
-		  CTX.max[2] + offset / CTX.s[0]);
-    sprintf(label, "(%g,%g,%g)", CTX.max[0], CTX.max[1], CTX.max[2]);
-    Draw_String(label);
-
-    glColor3d(1.,0.,0.);
-    for(int i = 0; i < 6; i++)
-      if(CTX.clip[i] & 1 || CTX.clip[i] & 2)
-	Draw_PlaneInBoundingBox(CTX.min[0], CTX.min[1], CTX.min[2],
-				CTX.max[0], CTX.max[1], CTX.max[2],
-				CTX.clip_plane[i][0], CTX.clip_plane[i][1], 
-				CTX.clip_plane[i][2], CTX.clip_plane[i][3]);
-    if(CTX.mesh.use_cut_plane)
-      Draw_PlaneInBoundingBox(CTX.min[0], CTX.min[1], CTX.min[2],
-			      CTX.max[0], CTX.max[1], CTX.max[2],
-			      CTX.mesh.cut_planea, CTX.mesh.cut_planeb, 
-			      CTX.mesh.cut_planec, CTX.mesh.cut_planed);
-  }
-
-  // draw the axes
-
-  if(CTX.axes){
-    glColor4ubv((GLubyte *) & CTX.color.axes);
-    glLineWidth(CTX.line_width);
-    gl2psLineWidth(CTX.line_width * CTX.print.eps_line_width_factor);
-    if(!CTX.axes_auto_position){
-      Draw_Axes(CTX.axes, CTX.axes_tics, CTX.axes_format, CTX.axes_label, 
-		CTX.axes_position);
-    }
-    else if(somegeo || Tree_Nbr(THEM->Vertices)){
-      double bb[6] = { CTX.min[0], CTX.max[0],
-		       CTX.min[1], CTX.max[1],
-		       CTX.min[2], CTX.max[2] };
-      Draw_Axes(CTX.axes, CTX.axes_tics, CTX.axes_format, CTX.axes_label, bb);
-    }
-  }
-  
-  // draw the mesh
-
-  if(CTX.mesh.draw) {  
-    glPointSize(CTX.mesh.point_size);
-    gl2psPointSize(CTX.mesh.point_size * CTX.print.eps_point_size_factor);
-    glLineWidth(CTX.mesh.line_width);
-    gl2psLineWidth(CTX.mesh.line_width * CTX.print.eps_line_width_factor);
-
-    if(CTX.mesh.light_two_side)
-      glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
-    else
-      glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
-
-    for(int i = 0; i < 6; i++)
-      if(CTX.clip[i] & 2) 
-	glEnable((GLenum)(GL_CLIP_PLANE0 + i));
-      else
-	glDisable((GLenum)(GL_CLIP_PLANE0 + i));
-
-    if(CTX.mesh.changed){
-      if(THEM->normals) delete THEM->normals;
-      THEM->normals = new smooth_normals(CTX.mesh.angle_smooth_normals);
-    }
-
-    // Dimension 3
-
-    if(THEM->status >= 3 && (CTX.mesh.volumes_faces || CTX.mesh.volumes_edges ||
-			     CTX.mesh.volumes_num || CTX.mesh.points_per_element ||
-			     (CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface &&
-			      (CTX.mesh.surfaces_edges || CTX.mesh.surfaces_faces)))) {
-      Tree_Action(THEM->Volumes, Draw_Mesh_Volume);
-    }
-
-    // Dimension 2
-   
-    if(THEM->status >= 2 && (CTX.mesh.surfaces_faces || CTX.mesh.surfaces_edges ||
-			     CTX.mesh.surfaces_num || CTX.mesh.points_per_element ||
-			     CTX.mesh.normals)) {
-      if(CTX.mesh.changed && CTX.mesh.smooth_normals){
-	preproNormals = 1;
-	Tree_Action(THEM->Surfaces, Draw_Mesh_Surface);
-	preproNormals = 0;
-      }
-      Tree_Action(THEM->Surfaces, Draw_Mesh_Surface);
-      if(CTX.mesh.oldxtrude)  //old extrusion algo
-	Tree_Action(THEM->Volumes, Draw_Mesh_Extruded_Surfaces);
-    }
-    
-    // Dimension 1
-
-    if(THEM->status >= 1 && (CTX.mesh.lines || CTX.mesh.lines_num || 
-			     CTX.mesh.points_per_element || CTX.mesh.tangents)) {
-      Tree_Action(THEM->Curves, Draw_Mesh_Curve);
-    }
-
-    // Dimension 0
-    
-    if(THEM->status >= 0 && !CTX.mesh.points_per_element &&
-       (CTX.mesh.points || CTX.mesh.points_num)) {
-      Tree_Action(THEM->Vertices, Draw_Mesh_Point);
-    }
-
-    // Done!
-
-    CTX.mesh.changed = 0;
-
-    for(int i = 0; i < 6; i++)
-      glDisable((GLenum)(GL_CLIP_PLANE0 + i));
-  }
-
-  if(CTX.render_mode == GMSH_SELECT) return;
-  
-  // draw any plugin-specific stuff
-  
-  if(CTX.post.plugin_draw_function)
-    (*CTX.post.plugin_draw_function)();
-
-  // draw the post-processing views
-
-  Draw_Post();
-}
-
-void Draw_Mesh_Volume(void *a, void *b)
-{
-  Volume *v = *(Volume **) a;
-  if(!(v->Visible & VIS_MESH))
-    return;
-
-  if (CTX.mesh.volumes_num) {
-    int numLabels = Tree_Nbr(v->Simplexes) + Tree_Nbr(v->SimplexesBase) 
-      + Tree_Nbr(v->Hexahedra) + Tree_Nbr(v->Prisms) + Tree_Nbr(v->Pyramids);
-    numLabelsDisplayed = 0;
-    if (CTX.mesh.label_frequency == 0.0) stepLabelsDisplayed = numLabels;
-    else stepLabelsDisplayed = (int)(100.0 / CTX.mesh.label_frequency);
-    if (stepLabelsDisplayed > numLabels) stepLabelsDisplayed = numLabels;
-  }
-
-  theVolume = v;
-  theColor = v->Color;
-
-  // we don't use vertex arrays for every volume primitive: only for
-  // volume cuts drawn "as surfaces" (using vertex arrays for
-  // everything would require quite a bit of memory...)
-  if(CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface && 
-     CTX.mesh.vertex_arrays && (CTX.mesh.surfaces_faces || CTX.mesh.surfaces_edges)){
-    if(CTX.mesh.changed){
-      Msg(DEBUG, "regenerate volume mesh vertex arrays");
-      thePhysical = getLastPhysical(MSH_PHYSICAL_VOLUME, v->Num);
-      // triangles
-      if(v->TriVertexArray) delete v->TriVertexArray;
-      v->TriVertexArray = new VertexArray(3, 1000);
-      v->TriVertexArray->fill = 1;
-      // quadrangles
-      if(v->QuadVertexArray) delete v->QuadVertexArray;
-      v->QuadVertexArray = new VertexArray(4, 1000);
-      v->QuadVertexArray->fill = 1;
-      Tree_Action(v->Simplexes, Draw_Mesh_Tetrahedron);
-      Tree_Action(v->SimplexesBase, Draw_Mesh_Tetrahedron);
-      Tree_Action(v->Hexahedra, Draw_Mesh_Hexahedron);
-      Tree_Action(v->Prisms, Draw_Mesh_Prism);
-      Tree_Action(v->Pyramids, Draw_Mesh_Pyramid);
-      if(v->TriVertexArray){
-	Msg(DEBUG, "%d triangles in volume vertex array", v->TriVertexArray->num);
-	v->TriVertexArray->fill = 0;
-      }
-      if(v->QuadVertexArray){
-	Msg(DEBUG, "%d quads in volume vertex array", v->QuadVertexArray->num);
-	v->QuadVertexArray->fill = 0;
-      }
-    }
-    if(v->TriVertexArray)
-      Draw_Mesh_Array(v->TriVertexArray,
-		      CTX.mesh.surfaces_faces, CTX.mesh.surfaces_edges);
-    if(v->QuadVertexArray)
-      Draw_Mesh_Array(v->QuadVertexArray,
-		      CTX.mesh.surfaces_faces, CTX.mesh.surfaces_edges);
-  }
-
-  if(!CTX.mesh.use_cut_plane || !CTX.mesh.cut_plane_as_surface ||
-     !v->TriVertexArray || !v->QuadVertexArray ||
-     CTX.mesh.volumes_faces || CTX.mesh.volumes_edges ||
-     CTX.mesh.dual || CTX.mesh.volumes_num || CTX.mesh.points_per_element ||
-     CTX.mesh.normals){
-    Msg(DEBUG, "classic volume data path");
-    thePhysical = getLastPhysical(MSH_PHYSICAL_VOLUME, v->Num);
-    Tree_Action(v->Simplexes, Draw_Mesh_Tetrahedron);
-    Tree_Action(v->SimplexesBase, Draw_Mesh_Tetrahedron);
-    Tree_Action(v->Hexahedra, Draw_Mesh_Hexahedron);
-    Tree_Action(v->Prisms, Draw_Mesh_Prism);
-    Tree_Action(v->Pyramids, Draw_Mesh_Pyramid);
-  }
-}
-
-void Draw_Mesh_Surface(void *a, void *b)
-{
-  Surface *s = *(Surface **) a;
-  if(!(s->Visible & VIS_MESH))
-    return;
-
-  if(CTX.render_mode == GMSH_SELECT) {
-    glPushName(2);
-    glPushName(s->Num);
-  }
-
-  if(CTX.mesh.surfaces_num) {
-    int numLabels = Tree_Nbr(s->Simplexes) + Tree_Nbr(s->SimplexesBase) 
-      + Tree_Nbr(s->Quadrangles);
-    numLabelsDisplayed = 0;
-    if (CTX.mesh.label_frequency == 0.0) stepLabelsDisplayed = numLabels;
-    else stepLabelsDisplayed = (int)(100.0 / CTX.mesh.label_frequency);
-    if (stepLabelsDisplayed > numLabels) stepLabelsDisplayed = numLabels;
-  }
-
-  theSurface = s;
-  theColor = s->Color;
-
-  if(preproNormals){
-    Tree_Action(s->Simplexes, Draw_Mesh_Triangle);
-    Tree_Action(s->SimplexesBase, Draw_Mesh_Triangle);
-    Tree_Action(s->Quadrangles, Draw_Mesh_Quadrangle);
-    return;
-  }
-
-  if(CTX.mesh.vertex_arrays && (CTX.mesh.surfaces_faces || CTX.mesh.surfaces_edges)){
-    if(CTX.mesh.changed || s->ipar[4] == 2 || s->ipar[4] == -2){
-      if(s->ipar[4] == 2) s->ipar[4] = 1;
-      if(s->ipar[4] == -2) s->ipar[4] = -1;
-
-      Msg(DEBUG, "regenerate surface mesh vertex arrays");
-      thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num);
-      // triangles
-      if(s->TriVertexArray) delete s->TriVertexArray;
-      s->TriVertexArray = new VertexArray(3, Tree_Nbr(s->Simplexes) + 
-					  Tree_Nbr(s->SimplexesBase));
-      s->TriVertexArray->fill = 1;
-      Tree_Action(s->Simplexes, Draw_Mesh_Triangle);
-      Tree_Action(s->SimplexesBase, Draw_Mesh_Triangle);
-      if(s->TriVertexArray){
-	Msg(DEBUG, "%d triangles in surface vertex array", s->TriVertexArray->num);
-	s->TriVertexArray->fill = 0;
-      }
-      // quads
-      if(s->QuadVertexArray) delete s->QuadVertexArray;
-      s->QuadVertexArray = new VertexArray(4, Tree_Nbr(s->Quadrangles));
-      s->QuadVertexArray->fill = 1;
-      Tree_Action(s->Quadrangles, Draw_Mesh_Quadrangle);
-      if(s->QuadVertexArray){
-	Msg(DEBUG, "%d quads in surface vertex array", s->QuadVertexArray->num);
-	s->QuadVertexArray->fill = 0;
-      }
-    }
-    if(s->TriVertexArray)
-      Draw_Mesh_Array(s->TriVertexArray,
-		      CTX.mesh.surfaces_faces, CTX.mesh.surfaces_edges);
-    if(s->QuadVertexArray)
-      Draw_Mesh_Array(s->QuadVertexArray,
-		      CTX.mesh.surfaces_faces, CTX.mesh.surfaces_edges);
-  }
-    
-  if(!s->TriVertexArray || CTX.mesh.dual || CTX.mesh.surfaces_num ||
-     CTX.mesh.points_per_element || CTX.mesh.normals){
-    Msg(DEBUG, "classic triangle data path");
-    thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num);
-    Tree_Action(s->Simplexes, Draw_Mesh_Triangle);
-    Tree_Action(s->SimplexesBase, Draw_Mesh_Triangle);
-  }
-
-  if(!s->QuadVertexArray || CTX.mesh.dual || CTX.mesh.surfaces_num ||
-     CTX.mesh.points_per_element || CTX.mesh.normals){
-    Msg(DEBUG, "classic quadrangle data path");
-    thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num);
-    Tree_Action(s->Quadrangles, Draw_Mesh_Quadrangle);
-  }
-
-  if(CTX.render_mode == GMSH_SELECT) {
-    glPopName();
-    glPopName();
-  }
-
-  theSurface = NULL;
-}
-
-void Draw_Mesh_Extruded_Surfaces(void *a, void *b)
-{
-  Volume *v = *(Volume **) a;
-  if(!(v->Visible & VIS_MESH))
-    return;
-  Tree_Action(v->Lin_Surf, Draw_Mesh_Line);
-  Tree_Action(v->Simp_Surf, Draw_Mesh_Triangle);
-  Tree_Action(v->Quad_Surf, Draw_Mesh_Quadrangle);
-}
-
-void Draw_Mesh_Curve(void *a, void *b)
-{
-  Curve *c = *(Curve **) a;
-  if(c->Num < 0)
-    return;
-  if(!(c->Visible & VIS_MESH))
-    return;
-
-  if(CTX.render_mode == GMSH_SELECT) {
-    glPushName(1);
-    glPushName(c->Num);
-  }
-
-  if (CTX.mesh.lines_num) {
-    int numLabels = Tree_Nbr(c->Simplexes) + Tree_Nbr(c->SimplexesBase);
-    numLabelsDisplayed = 0;
-    if (CTX.mesh.label_frequency == 0.0) stepLabelsDisplayed = numLabels;
-    else stepLabelsDisplayed = (int)(100.0 / CTX.mesh.label_frequency);
-    if (stepLabelsDisplayed > numLabels) stepLabelsDisplayed = numLabels;
-  }
-
-  theCurve = c;
-  theColor = c->Color;
-
-  if(CTX.mesh.vertex_arrays && CTX.mesh.lines){
-    if(CTX.mesh.changed || c->ipar[3] == 2 || c->ipar[3] == -2){
-      if(c->ipar[3] == 2) c->ipar[3] = 1;
-      if(c->ipar[3] == -2) c->ipar[3] = -1;
-
-      Msg(DEBUG, "regenerate curve mesh vertex array");
-      thePhysical = getLastPhysical(MSH_PHYSICAL_LINE, c->Num);
-      if(c->LinVertexArray) delete c->LinVertexArray;
-      c->LinVertexArray = new VertexArray(2, Tree_Nbr(c->Simplexes) + 
-					  Tree_Nbr(c->SimplexesBase));
-      c->LinVertexArray->fill = 1;
-      Tree_Action(c->Simplexes, Draw_Mesh_Line);
-      Tree_Action(c->SimplexesBase, Draw_Mesh_Line);
-      if(c->LinVertexArray){
-	Msg(DEBUG, "%d segments in curve vertex array", c->LinVertexArray->num);
-	c->LinVertexArray->fill = 0;
-      }
-    }
-    if(c->LinVertexArray)
-      Draw_Mesh_Array(c->LinVertexArray);
-  }
-    
-  if(!c->LinVertexArray || CTX.mesh.lines_num ||
-     CTX.mesh.points_per_element || CTX.mesh.tangents){
-    Msg(DEBUG, "classic line data path");
-    thePhysical = getLastPhysical(MSH_PHYSICAL_LINE, c->Num);
-    Tree_Action(c->Simplexes, Draw_Mesh_Line);
-    Tree_Action(c->SimplexesBase, Draw_Mesh_Line);
-  }
-
-  if(CTX.render_mode == GMSH_SELECT) {
-    glPopName();
-    glPopName();
-  }
-
-  theCurve = NULL;
-}
-
-void Draw_Mesh_Point(int num, double x, double y, double z, int degree, int visible,
-		     int elementary=-1, int physical=-1, int partition=-1)
-{
-  if(!(visible & VIS_MESH))
-    return;
-
-  unsigned int col;
-  if(degree == 2)
-    col = CTX.color.mesh.vertex_deg2;
-  else
-    col = CTX.color.mesh.vertex;
-
-  glColor4ubv((GLubyte *) & col);
-
-  if(CTX.mesh.points) {
-    if(CTX.mesh.point_type) {
-      Draw_Sphere(CTX.mesh.point_size, x, y, z, CTX.mesh.light);
-    }
-    else {
-      glBegin(GL_POINTS);
-      glVertex3d(x, y, z);
-      glEnd();
-    }
-  }
-
-  if(CTX.mesh.points_num) {
-    char Num[100];
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", x, y, z);
-    else if(CTX.mesh.label_type == 3){
-      if(partition > 0)
-	sprintf(Num, "%d", partition);
-      else
-	strcpy(Num, "NA");
-    }
-    else if(CTX.mesh.label_type == 2){
-      if(physical > 0)
-	sprintf(Num, "%d", physical);
-      else
-	strcpy(Num, "NA");
-    }
-    else if(CTX.mesh.label_type == 1){
-      if(elementary > 0)
-	sprintf(Num, "%d", elementary);
-      else
-	strcpy(Num, "NA");
-    }
-    else
-      sprintf(Num, "%d", num);
-    double offset = 0.3 * (CTX.mesh.point_size + CTX.gl_fontsize) * CTX.pixel_equiv_x;
-    glRasterPos3d(x + offset / CTX.s[0],
-                  y + offset / CTX.s[1],
-                  z + offset / CTX.s[2]);
-    Draw_String(Num);
-  }
-}
-
-void Draw_Mesh_Point(void *a, void *b)
-{
-  Vertex *v = *(Vertex **) a;
-
-  if(!CTX.mesh.cut_plane_only_volume && intersectCutPlane(1, &v) < 0)
-    return;
-
-  Draw_Mesh_Point(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->Degree, v->Visible);
-}
-
-void Draw_Mesh_Line(void *a, void *b)
-{
-  double Xc = 0.0, Yc = 0.0, Zc = 0.0, m[3];
-  char Num[100];
-
-  SimplexBase *s = *(SimplexBase **) a;
-
-  if(!(s->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(s->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.radius_sup) {
-    double r = s->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  if(!CTX.mesh.cut_plane_only_volume && intersectCutPlane(2, s->V) < 0)
-    return;
-
-  Xc = 0.5 * (s->V[0]->Pos.X + s->V[1]->Pos.X);
-  Yc = 0.5 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y);
-  Zc = 0.5 * (s->V[0]->Pos.Z + s->V[1]->Pos.Z);
-
-  double X[3], Y[3], Z[3];
-  int N = s->VSUP ? 3 : 2;
-
-  for(int i = 0; i < 2; i++) {
-    X[i] = Xc + CTX.mesh.explode * (s->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (s->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (s->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(s->V[i]->Num, X[i], Y[i], Z[i], 
-		      s->V[i]->Degree, s->V[i]->Visible,
-		      s->iEnt, thePhysical, iPart);
-  }
-  
-  if(N == 3){
-    X[2] = X[1];
-    Y[2] = Y[1];
-    Z[2] = Z[1];
-    X[1] = Xc + CTX.mesh.explode * (s->VSUP[0]->Pos.X - Xc);
-    Y[1] = Yc + CTX.mesh.explode * (s->VSUP[0]->Pos.Y - Yc);
-    Z[1] = Zc + CTX.mesh.explode * (s->VSUP[0]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(s->VSUP[0]->Num, X[1], Y[1], Z[1], 
-		      s->VSUP[0]->Degree, s->VSUP[0]->Visible,
-		      s->iEnt, thePhysical, iPart);
-  }
-
-  unsigned int col;
-  if(theCurve && theCurve->ipar[3] > 0)
-    col = CTX.color.geom.line_sel;
-  else if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(s->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.line;
-
-  if(theCurve && theCurve->LinVertexArray && theCurve->LinVertexArray->fill){
-    theCurve->LinVertexArray->add(X[0], Y[0], Z[0], col);
-    theCurve->LinVertexArray->add(X[1], Y[1], Z[1], col);
-    theCurve->LinVertexArray->num++;
-    if(N == 3){
-      theCurve->LinVertexArray->add(X[1], Y[1], Z[1], col);
-      theCurve->LinVertexArray->add(X[2], Y[2], Z[2], col);
-      theCurve->LinVertexArray->num++;
-    }
-  }
-  else{
-    if(CTX.mesh.lines) {
-      glColor4ubv((GLubyte *) & col);
-      glBegin(GL_LINE_STRIP);
-      for(int i = 0; i < N; i++){
-	glVertex3d(X[i], Y[i], Z[i]);
-      }
-      glEnd();
-    }
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.lines_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", s->iEnt);
-    else
-      sprintf(Num, "%d", s->Num);
-    double offset = 0.3 * (CTX.mesh.line_width + CTX.gl_fontsize) * CTX.pixel_equiv_x;
-    glRasterPos3d(Xc + offset / CTX.s[0],
-                  Yc + offset / CTX.s[1],
-                  Zc + offset / CTX.s[2]);
-    Draw_String(Num);
-  }
-
-  if(CTX.mesh.tangents) {
-    glColor4ubv((GLubyte *) & CTX.color.mesh.tangents);
-    m[0] = X[1] - X[0];
-    m[1] = Y[1] - Y[0];
-    m[2] = Z[1] - Z[0];
-    norme(m);
-    m[0] *= CTX.mesh.tangents * CTX.pixel_equiv_x / CTX.s[0];
-    m[1] *= CTX.mesh.tangents * CTX.pixel_equiv_x / CTX.s[1];
-    m[2] *= CTX.mesh.tangents * CTX.pixel_equiv_x / CTX.s[2];
-    Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
-		CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius,
-		Xc, Yc, Zc, m[0], m[1], m[2], CTX.mesh.light);
-  }
-}
-
-void _triFace(double x0, double y0, double z0,
-	      double x1, double y1, double z1,
-	      double x2, double y2, double z2)
-{
-  double n[3], ns[3];
-
-  if(CTX.mesh.light || (theSurface && preproNormals)){
-    normal3points(x0, y0, z0, x1, y1, z1, x2, y2, z2, n);
-    if(preproNormals){
-      THEM->normals->add(x0, y0, z0, n[0], n[1], n[2]);
-      THEM->normals->add(x1, y1, z1, n[0], n[1], n[2]);
-      THEM->normals->add(x2, y2, z2, n[0], n[1], n[2]);
-      return;
-    }
-    glNormal3dv(n);
-  }
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x0, y0, z0, ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x0, y0, z0);
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x1, y1, z1, ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x1, y1, z1);
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x2, y2, z2, ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x2, y2, z2);
-}
-
-void _triFace2(double *x, double *y, double *z,
-	       double *x2, double *y2, double *z2,
-	       int i0, int i1, int i2, 
-	       int j0, int j1, int j2)
-{
-  _triFace(x[i0], y[i0], z[i0], x2[j0], y2[j0], z2[j0], x2[j2], y2[j2], z2[j2]);
-  _triFace(x[i1], y[i1], z[i1], x2[j1], y2[j1], z2[j1], x2[j0], y2[j0], z2[j0]);
-  _triFace(x[i2], y[i2], z[i2], x2[j2], y2[j2], z2[j2], x2[j1], y2[j1], z2[j1]);
-  _triFace(x2[j0], y2[j0], z2[j0], x2[j1], y2[j1], z2[j1], x2[j2], y2[j2], z2[j2]);
-}
-
-void _quadFace(double *x, double *y, double *z,
-	       int i0, int i1, int i2, int i3)
-{
-  double n[3], ns[3];
-
-  if(CTX.mesh.light || (theSurface && preproNormals)){
-    normal3points(x[i0], y[i0], z[i0],
-		  x[i1], y[i1], z[i1],
-		  x[i2], y[i2], z[i2], n);
-    if(preproNormals){
-      THEM->normals->add(x[i0], y[i0], z[i0], n[0], n[1], n[2]);
-      THEM->normals->add(x[i1], y[i1], z[i1], n[0], n[1], n[2]);
-      THEM->normals->add(x[i2], y[i2], z[i2], n[0], n[1], n[2]);
-      THEM->normals->add(x[i3], y[i3], z[i3], n[0], n[1], n[2]);
-      return;
-    }
-    glNormal3dv(n);
-  }
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x[i0], y[i0], z[i0], ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x[i0], y[i0], z[i0]);
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x[i1], y[i1], z[i1], ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x[i1], y[i1], z[i1]);
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x[i2], y[i2], z[i2], ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x[i2], y[i2], z[i2]);
-
-  if(CTX.mesh.light && theSurface && CTX.mesh.smooth_normals){
-    ns[0] = n[0]; ns[1] = n[1]; ns[2] = n[2];
-    THEM->normals->get(x[i3], y[i3], z[i3], ns[0], ns[1], ns[2]);
-    glNormal3dv(ns);    
-  }
-  glVertex3d(x[i3], y[i3], z[i3]);
-}
-
-void _quadFace2(double *x, double *y, double *z,
-		double *x2, double *y2, double *z2,
-		int i0, int i1, int i2, int i3,
-		int j0, int j1, int j2, int j3, int j4)
-{
-  _triFace(x[i0], y[i0], z[i0], x2[j0], y2[j0], z2[j0], x2[j4], y2[j4], z2[j4]);
-  _triFace(x2[j0], y2[j0], z2[j0], x[i1], y[i1], z[i1], x2[j4], y2[j4], z2[j4]);
-  _triFace(x[i1], y[i1], z[i1], x2[j1], y2[j1], z2[j1], x2[j4], y2[j4], z2[j4]);
-  _triFace(x2[j1], y2[j1], z2[j1], x[i2], y[i2], z[i2], x2[j4], y2[j4], z2[j4]);
-  _triFace(x[i2], y[i2], z[i2], x2[j2], y2[j2], z2[j2], x2[j4], y2[j4], z2[j4]);
-  _triFace(x2[j2], y2[j2], z2[j2], x[i3], y[i3], z[i3], x2[j4], y2[j4], z2[j4]);
-  _triFace(x[i3], y[i3], z[i3], x2[j3], y2[j3], z2[j3], x2[j4], y2[j4], z2[j4]);
-  _triFace(x2[j3], y2[j3], z2[j3], x[i0], y[i0], z[i0], x2[j4], y2[j4], z2[j4]);
-}
-
-// #include <GL/glext.h>
-
-void Draw_Mesh_Array(VertexArray *va, int faces, int edges)
-{
-  if(!va->num)
-    return;
-
-  glVertexPointer(3, GL_FLOAT, 0, va->vertices->array);
-  glColorPointer(4, GL_UNSIGNED_BYTE, 0, va->colors->array);
-  glNormalPointer(GL_FLOAT, 0, va->normals->array);
-
-  glEnableClientState(GL_VERTEX_ARRAY);
-  glEnableClientState(GL_COLOR_ARRAY);
-  glEnableClientState(GL_NORMAL_ARRAY);
-
-  // glLockArraysEXT(0, va->type * va->num); // extension GL_EXT_compiled_vertex_array
-
-  if(va->type == 1){
-    glDisableClientState(GL_NORMAL_ARRAY);
-    glDrawArrays(GL_POINTS, 0, va->type * va->num);
-  }
-  else if(va->type == 2){
-    glDisableClientState(GL_NORMAL_ARRAY);
-    glDrawArrays(GL_LINES, 0, va->type * va->num);
-  }
-  else{
-    if(faces){
-      if(CTX.mesh.light)
-	glEnable(GL_LIGHTING);
-      else
-	glDisableClientState(GL_NORMAL_ARRAY);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      glDrawArrays((va->type == 3) ? GL_TRIANGLES : GL_QUADS, 0, va->type * va->num);
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-    if(edges){
-      if(faces){
-	glDisableClientState(GL_COLOR_ARRAY);
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      }
-      if(CTX.mesh.light && CTX.mesh.light_lines)
-	glEnable(GL_LIGHTING);
-      else
-	glDisableClientState(GL_NORMAL_ARRAY);
-      glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-      glDrawArrays((va->type == 3) ? GL_TRIANGLES : GL_QUADS, 0, va->type * va->num);
-      glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }
-
-  // glUnlockArraysEXT(); // extension GL_EXT_compiled_vertex_array
-
-  glDisableClientState(GL_VERTEX_ARRAY);
-  glDisableClientState(GL_COLOR_ARRAY);
-  glDisableClientState(GL_NORMAL_ARRAY);
-}
-
-void Draw_Mesh_Triangle(void *a, void *b)
-{
-  double X[3], Y[3], Z[3], X2[3], Y2[3], Z2[3];
-  double n[3];
-  char Num[256];
-
-  SimplexBase *s = *(SimplexBase **) a;
-
-  if(!(s->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(s->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = s->RhoShapeMeasure();
-    else
-      tmp = 0.0;
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = s->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  if(!CTX.mesh.cut_plane_only_volume && intersectCutPlane(3, s->V) < 0)
-    return;
-
-  unsigned int col;
-  if(theSurface && theSurface->ipar[4] > 0)
-    col = CTX.color.geom.surface_sel;
-  else if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(s->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.triangle;
-
-  double Xc = (s->V[0]->Pos.X + s->V[1]->Pos.X + s->V[2]->Pos.X) / 3.;
-  double Yc = (s->V[0]->Pos.Y + s->V[1]->Pos.Y + s->V[2]->Pos.Y) / 3.;
-  double Zc = (s->V[0]->Pos.Z + s->V[1]->Pos.Z + s->V[2]->Pos.Z) / 3.;
-
-  for(int i = 0; i < 3; i++) {
-    X[i] = Xc + CTX.mesh.explode * (s->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (s->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (s->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(s->V[i]->Num, X[i], Y[i], Z[i], 
-		      s->V[i]->Degree, s->V[i]->Visible,
-		      s->iEnt, thePhysical, iPart);
-  }
-
-  if(s->VSUP){
-    if(theSurface && theSurface->TriVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theSurface->TriVertexArray;
-      theSurface->TriVertexArray = NULL;
-    }
-    for(int i = 0; i < 3; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (s->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (s->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (s->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(s->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			s->VSUP[i]->Degree, s->VSUP[i]->Visible,
-			s->iEnt, thePhysical, iPart);
-    }
-  }
-
-  if(theSurface && theSurface->TriVertexArray){
-    if(preproNormals || theSurface->TriVertexArray->fill)
-     normal3points(X[0], Y[0], Z[0], 
-		   X[1], Y[1], Z[1],
-		   X[2], Y[2], Z[2], n);
-    if(preproNormals){
-      for(int i = 0; i < 3; i++)
-	THEM->normals->add(X[i], Y[i], Z[i], n[0], n[1], n[2]);
-      return;
-    }
-    if(theSurface->TriVertexArray->fill){
-      for(int i = 0; i < 3; i++){
-	double ns[3] = {n[0], n[1], n[2]};
-	if(CTX.mesh.smooth_normals)
-	  THEM->normals->get(X[i], Y[i], Z[i], ns[0], ns[1], ns[2]);
-	theSurface->TriVertexArray->add(X[i], Y[i], Z[i], ns[0], ns[1], ns[2], col);
-      }
-      theSurface->TriVertexArray->num++;
-    }
-  }    
-  else{
-    if(CTX.mesh.surfaces_edges){
-      if(CTX.mesh.surfaces_faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light && CTX.mesh.light_lines){
-	// FIXME: very crude (not smooth, only 1st order)
-	glEnable(GL_LIGHTING);
-	normal3points(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[2], Y[2], Z[2], n);
-	glNormal3dv(n);
-      }
-      glBegin(GL_LINE_LOOP);
-      for(int i = 0; i < 3; i++){
-	glVertex3d(X[i], Y[i], Z[i]);
-	if(s->VSUP) glVertex3d(X2[i], Y2[i], Z2[i]);
-      }
-      glEnd();
-      glDisable(GL_LIGHTING);
-    }
-
-    if(CTX.mesh.surfaces_faces) {
-      glColor4ubv((GLubyte *) & col);      
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!s->VSUP) {
-	glBegin(GL_TRIANGLES);
-	_triFace(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[2], Y[2], Z[2]);
-	glEnd();
-      }
-      else {
-	glBegin(GL_TRIANGLES);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 2, 0, 1, 2);
-	glEnd();
-      }		    
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }
-
-  if(CTX.mesh.dual) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glEnable(GL_LINE_STIPPLE);
-    glLineStipple(1, 0x0F0F);
-    gl2psEnable(GL2PS_LINE_STIPPLE);
-    glBegin(GL_LINES);
-    for(int i = 0; i < 3; i++) {
-      int j = i ? (i - 1) : 2;
-      glVertex3d(Xc, Yc, Zc);
-      glVertex3d((X[i] + X[j]) / 2., (Y[i] + Y[j]) / 2., (Z[i] + Z[j]) / 2.);
-    }
-    glEnd();
-    glDisable(GL_LINE_STIPPLE);
-    gl2psDisable(GL2PS_LINE_STIPPLE);
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.surfaces_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", s->iEnt);
-    else
-      sprintf(Num, "%d", s->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
-
-  if(CTX.mesh.normals) {
-    normal3points(X[0], Y[0], Z[0], 
-		  X[1], Y[1], Z[1],
-		  X[2], Y[2], Z[2], n);
-    glColor4ubv((GLubyte *) & CTX.color.mesh.normals);
-    n[0] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[0];
-    n[1] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[1];
-    n[2] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[2];
-    Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
-		CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius,
-		Xc, Yc, Zc, n[0], n[1], n[2], CTX.mesh.light);
-  }
-}
-
-void Draw_Mesh_Quadrangle(void *a, void *b)
+class drawMeshGFace 
 {
-  double X[4], Y[4], Z[4], X2[5], Y2[5], Z2[5];
-  double n[3];
-  char Num[256];
-
-  Quadrangle *q = *(Quadrangle **) a;
-
-  if(!(q->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(q->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = q->RhoShapeMeasure();
-    else
-      tmp = 0.0;
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = q->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  if(!CTX.mesh.cut_plane_only_volume && intersectCutPlane(4, q->V) < 0)
-    return;
-
-  unsigned int col;
-  if(theSurface && theSurface->ipar[4] > 0)
-    col = CTX.color.geom.surface_sel;
-  else if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(q->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.quadrangle;
-
-  double Xc = 0.25 * (q->V[0]->Pos.X + q->V[1]->Pos.X + 
-		      q->V[2]->Pos.X + q->V[3]->Pos.X);
-  double Yc = 0.25 * (q->V[0]->Pos.Y + q->V[1]->Pos.Y + 
-		      q->V[2]->Pos.Y + q->V[3]->Pos.Y);
-  double Zc = 0.25 * (q->V[0]->Pos.Z + q->V[1]->Pos.Z + 
-		      q->V[2]->Pos.Z + q->V[3]->Pos.Z);
-
-  for(int i = 0; i < 4; i++) {
-    X[i] = Xc + CTX.mesh.explode * (q->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (q->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (q->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(q->V[i]->Num, X[i], Y[i], Z[i], 
-		      q->V[i]->Degree, q->V[i]->Visible,
-		      q->iEnt, thePhysical, iPart);
-  }
-
-  if(q->VSUP){
-    if(theSurface && theSurface->QuadVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theSurface->QuadVertexArray;
-      theSurface->QuadVertexArray = NULL;
-    }
-    for(int i = 0; i < 5; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (q->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (q->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (q->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(q->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			q->VSUP[i]->Degree, q->VSUP[i]->Visible,
-			q->iEnt, thePhysical, iPart);
-    }
-  }
-
-  if(theSurface && theSurface->QuadVertexArray){
-    if(preproNormals || theSurface->QuadVertexArray->fill)
-      normal3points(X[0], Y[0], Z[0], 
-		    X[1], Y[1], Z[1],
-		    X[2], Y[2], Z[2], n);
-    if(preproNormals){
-      for(int i = 0; i < 4; i++)
-	THEM->normals->add(X[i], Y[i], Z[i], n[0], n[1], n[2]);
+public :
+  void operator () (GFace *s)
+  {  
+    if(!(s->drawAttributes.Visible & VIS_MESH))
       return;
-    }
-    if(theSurface->QuadVertexArray->fill){
-      for(int i = 0; i < 4; i++){
-	double ns[3] = {n[0], n[1], n[2]};
-	if(CTX.mesh.smooth_normals)
-	  THEM->normals->get(X[i], Y[i], Z[i], ns[0], ns[1], ns[2]);
-	theSurface->QuadVertexArray->add(X[i], Y[i], Z[i], ns[0], ns[1], ns[2], col);
-      }
-      theSurface->QuadVertexArray->num++;
-    }
-  }    
-  else{
-    if(CTX.mesh.surfaces_edges){
-      if(CTX.mesh.surfaces_faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light && CTX.mesh.light_lines){
-	// FIXME: very crude (not smooth, only 1st order)
-	glEnable(GL_LIGHTING);
-	normal3points(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[2], Y[2], Z[2], n);
-	glNormal3dv(n);
-      }
-      glBegin(GL_LINE_LOOP);
-      for(int i = 0; i < 4; i++){
-	glVertex3d(X[i], Y[i], Z[i]);
-	if(q->VSUP) glVertex3d(X2[i], Y2[i], Z2[i]);
-      }
-      glEnd();
-      glDisable(GL_LIGHTING);
+    
+    if(CTX.render_mode == GMSH_SELECT) {
+      glPushName(2);
+      glPushName(s->tag());
     }
 
-    if(CTX.mesh.surfaces_faces) {
-      glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!q->VSUP) {
-	glBegin(GL_QUADS);
-	_quadFace(X, Y, Z, 0, 1, 2, 3);
-	glEnd();
-      }
-      else {
-	glBegin(GL_TRIANGLES);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 2, 3, 0, 1, 2, 3, 4);
-	glEnd();
+    glBegin(GL_TRIANGLES);
+    for(unsigned int i = 0; i < s->triangles.size(); i++){
+      MTriangle *t = s->triangles[i];
+      for(int j = 0; j < 3; j++){
+	MVertex *v = t->getVertex(j);
+	glVertex3d(v->x(), v->y(), v->z());
       }
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }
-
-  if(CTX.mesh.dual) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glEnable(GL_LINE_STIPPLE);
-    glLineStipple(1, 0x0F0F);
-    gl2psEnable(GL2PS_LINE_STIPPLE);
-    glBegin(GL_LINES);
-    for(int i = 0; i < 4; i++) {
-      int j = i ? (i - 1) : 3;
-      glVertex3d(Xc, Yc, Zc);
-      glVertex3d((X[i] + X[j]) / 2., (Y[i] + Y[j]) / 2., (Z[i] + Z[j]) / 2.);
     }
     glEnd();
-    glDisable(GL_LINE_STIPPLE);
-    gl2psDisable(GL2PS_LINE_STIPPLE);
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.surfaces_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", q->iEnt);
-    else
-      sprintf(Num, "%d", q->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
-
-  if(CTX.mesh.normals) {
-    glColor4ubv((GLubyte *) & CTX.color.mesh.normals);
-    normal3points(X[0], Y[0], Z[0], 
-		  X[1], Y[1], Z[1],
-		  X[2], Y[2], Z[2], n);
-    n[0] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[0];
-    n[1] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[1];
-    n[2] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[2];
-    Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
-		CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius,
-		Xc, Yc, Zc, n[0], n[1], n[2], CTX.mesh.light);
-  }
-}
-
-void Draw_Mesh_Tetrahedron(void *a, void *b)
-{
-  char Num[100];
-  double X[4], Y[4], Z[4], X2[6], Y2[6], Z2[6];
-
-  SimplexBase *s = *(SimplexBase **) a;
-
-  if(!s->V[3] || !(s->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(s->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = s->RhoShapeMeasure();
-    else if(CTX.mesh.quality_type == 1)
-      tmp = s->EtaShapeMeasure();
-    else
-      tmp = s->GammaShapeMeasure();
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = s->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-  
-  int edges = CTX.mesh.volumes_edges;
-  int faces = CTX.mesh.volumes_faces;
-
-  if(intersectCutPlane(4, s->V, &edges, &faces) < 0)
-    return;
-
-  unsigned int col;
-  if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(s->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.tetrahedron;
-
-  double Xc = .25 * (s->V[0]->Pos.X + s->V[1]->Pos.X +
-                     s->V[2]->Pos.X + s->V[3]->Pos.X);
-  double Yc = .25 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y +
-                     s->V[2]->Pos.Y + s->V[3]->Pos.Y);
-  double Zc = .25 * (s->V[0]->Pos.Z + s->V[1]->Pos.Z +
-                     s->V[2]->Pos.Z + s->V[3]->Pos.Z);
-
-  for(int i = 0; i < 4; i++) {
-    X[i] = Xc + CTX.mesh.explode * (s->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (s->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (s->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(s->V[i]->Num, X[i], Y[i], Z[i], 
-		      s->V[i]->Degree, s->V[i]->Visible,
-		      s->iEnt, thePhysical, iPart);
-  }
-
-  if(s->VSUP){
-    if(theVolume && theVolume->TriVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->TriVertexArray;
-      theVolume->TriVertexArray = NULL;
-    }
-    for(int i = 0; i < 6; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (s->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (s->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (s->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(s->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			s->VSUP[i]->Degree, s->VSUP[i]->Visible,
-			s->iEnt, thePhysical, iPart);
-    }
-  }
 
-  if(CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface && 
-     (edges || faces) && !(CTX.mesh.volumes_edges || CTX.mesh.volumes_faces) &&
-     theVolume && theVolume->TriVertexArray){
-    if(theVolume->TriVertexArray->fill){
-      for(int i = 0; i < 4; i++){
-	int a = trifaces_tetra[i][0];
-	int b = trifaces_tetra[i][1];
-	int c = trifaces_tetra[i][2];
-	double n[3];
-	normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-	theVolume->TriVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->num++;
-      }
-    }
-  }    
-  else{
-    if(edges) {
-      if(CTX.mesh.surfaces_faces || faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      glBegin(GL_LINES);
-      for(int i = 0; i < 6; i++){
-	int j = edges_tetra[i][0];
-	int k = edges_tetra[i][1];
-	glVertex3d(X[j], Y[j], Z[j]);
-	if(s->VSUP){
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	}
-	glVertex3d(X[k], Y[k], Z[k]);
-      }
-      glEnd();
-    }
-    
-    if(faces){
-      glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!s->VSUP){
-	glBegin(GL_TRIANGLES);
-	_triFace(X[0], Y[0], Z[0], X[2], Y[2], Z[2], X[1], Y[1], Z[1]);
-	_triFace(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[3], Y[3], Z[3]);
-	_triFace(X[0], Y[0], Z[0], X[3], Y[3], Z[3], X[2], Y[2], Z[2]);
-	_triFace(X[3], Y[3], Z[3], X[1], Y[1], Z[1], X[2], Y[2], Z[2]);
-	glEnd();
-      }
-      else{
-	glBegin(GL_TRIANGLES);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 2, 1, 2, 1, 0);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 3, 0, 5, 3);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 3, 2, 3, 4, 2);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 3, 1, 2, 5, 1, 4);
-	glEnd();
-      }
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
+    if(CTX.render_mode == GMSH_SELECT) {
+      glPopName();
+      glPopName();
     }
   }
+};
 
-  if(CTX.mesh.dual) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glEnable(GL_LINE_STIPPLE);
-    glLineStipple(1, 0x0F0F);
-    gl2psEnable(GL2PS_LINE_STIPPLE);
-    glBegin(GL_LINES);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[1] + X[2]) / 3., (Y[0] + Y[1] + Y[2]) / 3.,
-               (Z[0] + Z[1] + Z[2]) / 3.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[1] + X[3]) / 3., (Y[0] + Y[1] + Y[3]) / 3.,
-               (Z[0] + Z[1] + Z[3]) / 3.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[2] + X[3]) / 3., (Y[0] + Y[2] + Y[3]) / 3.,
-               (Z[0] + Z[2] + Z[3]) / 3.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[1] + X[2] + X[3]) / 3., (Y[1] + Y[2] + Y[3]) / 3.,
-               (Z[1] + Z[2] + Z[3]) / 3.);
-    glEnd();
-    glDisable(GL_LINE_STIPPLE);
-    gl2psDisable(GL2PS_LINE_STIPPLE);
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.volumes_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces || faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", s->iEnt);
-    else
-      sprintf(Num, "%d", s->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
-}
-
-void Draw_Mesh_Hexahedron(void *a, void *b)
+void Draw_Mesh()
 {
-  double Xc = 0.0, Yc = 0.0, Zc = 0.0;
-  double X[8], Y[8], Z[8], X2[18], Y2[18], Z2[18];
-  char Num[100];
-
-  Hexahedron *h = *(Hexahedron **) a;
-
-  if(!(h->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(h->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = h->RhoShapeMeasure();
-    else
-      tmp = 0.0;
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = h->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  int edges = CTX.mesh.volumes_edges;
-  int faces = CTX.mesh.volumes_faces;
-
-  if(intersectCutPlane(8, h->V, &edges, &faces) < 0)
-    return;
+  if(!GMODEL || !CTX.mesh.draw) return;
+  
+  glPointSize(CTX.mesh.point_size);
+  gl2psPointSize(CTX.mesh.point_size * CTX.print.eps_point_size_factor);
 
-  unsigned int col;
-  if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(h->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
+  glLineWidth(CTX.mesh.line_width);
+  gl2psLineWidth(CTX.mesh.line_width * CTX.print.eps_line_width_factor);
+  
+  if(CTX.mesh.light_two_side)
+    glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
   else
-    col = CTX.color.mesh.hexahedron;
-
-  for(int i = 0; i < 8; i++) {
-    Xc += h->V[i]->Pos.X;
-    Yc += h->V[i]->Pos.Y;
-    Zc += h->V[i]->Pos.Z;
-  }
-  Xc *= .125;
-  Zc *= .125;
-  Yc *= .125;
-
-  for(int i = 0; i < 8; i++) {
-    X[i] = Xc + CTX.mesh.explode * (h->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (h->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (h->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(h->V[i]->Num, X[i], Y[i], Z[i], 
-		      h->V[i]->Degree, h->V[i]->Visible,
-		      h->iEnt, thePhysical, iPart);
-  }
-
-  if(h->VSUP){
-    if(theVolume && theVolume->QuadVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->QuadVertexArray;
-      theVolume->QuadVertexArray = NULL;
-    }
-    for(int i = 0; i < 18; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (h->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (h->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (h->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(h->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			h->VSUP[i]->Degree, h->VSUP[i]->Visible,
-			h->iEnt, thePhysical, iPart);
-    }
-  }
-
-  if(CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface && 
-     (edges || faces) && !(CTX.mesh.volumes_edges || CTX.mesh.volumes_faces) &&
-     theVolume && theVolume->QuadVertexArray){
-    if(theVolume->QuadVertexArray->fill){
-      for(int i = 0; i < 6; i++){
-	int a = quadfaces_hexa[i][0];
-	int b = quadfaces_hexa[i][1];
-	int c = quadfaces_hexa[i][2];
-	int d = quadfaces_hexa[i][3];
-	double n[3];
-	normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-	theVolume->QuadVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[d], Y[d], Z[d], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->num++;
-      }
-    }
-  }    
-  else{
-    if(edges){
-      if(CTX.mesh.surfaces_faces || faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      glBegin(GL_LINES);
-      for(int i = 0; i < 12; i++){
-	int j = edges_hexa[i][0];
-	int k = edges_hexa[i][1];
-	glVertex3d(X[j], Y[j], Z[j]);
-	if(h->VSUP){
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	}
-	glVertex3d(X[k], Y[k], Z[k]);
-      }
-      glEnd();
-    }
-    
-    if(faces){
-      glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!h->VSUP){
-	glBegin(GL_QUADS);
-	_quadFace(X, Y, Z, 0, 3, 2, 1);
-	_quadFace(X, Y, Z, 0, 1, 5, 4);
-	_quadFace(X, Y, Z, 0, 4, 7, 3);
-	_quadFace(X, Y, Z, 1, 2, 6, 5);
-	_quadFace(X, Y, Z, 2, 3, 7, 6);
-	_quadFace(X, Y, Z, 4, 5, 6, 7);
-	glEnd();
-      }
-      else{
-	glBegin(GL_TRIANGLES);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 3, 2, 1, 1, 5, 3, 0, 12);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 5, 4, 0, 4, 8, 2, 13);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 4, 7, 3, 2, 9, 7, 1, 14);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 1, 2, 6, 5, 3, 6, 10, 4, 15);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 2, 3, 7, 6, 5, 7, 11, 6, 16);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 4, 5, 6, 7, 8, 10, 11, 9, 17);
-	glEnd();
-      }
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }    
-
-  if(CTX.mesh.dual) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glEnable(GL_LINE_STIPPLE);
-    glLineStipple(1, 0x0F0F);
-    gl2psEnable(GL2PS_LINE_STIPPLE);
-    glBegin(GL_LINES);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[1] + X[5] + X[4]) / 4., (Y[0] + Y[1] + Y[5] + Y[4]) / 4.,
-	       (Z[0] + Z[1] + Z[5] + Z[4]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[3] + X[2] + X[1]) / 4., (Y[0] + Y[3] + Y[2] + Y[1]) / 4.,
-	       (Z[0] + Z[3] + Z[2] + Z[1]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[4] + X[7] + X[3]) / 4., (Y[0] + Y[4] + Y[7] + Y[3]) / 4.,
-	       (Z[0] + Z[4] + Z[7] + Z[3]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[1] + X[2] + X[6] + X[5]) / 4., (Y[1] + Y[2] + Y[6] + Y[5]) / 4.,
-	       (Z[1] + Z[2] + Z[6] + Z[5]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[2] + X[3] + X[7] + X[6]) / 4., (Y[2] + Y[3] + Y[7] + Y[6]) / 4.,
-	       (Z[2] + Z[3] + Z[7] + Z[6]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[4] + X[5] + X[6] + X[7]) / 4., (Y[4] + Y[5] + Y[6] + Y[7]) / 4.,
-	       (Z[4] + Z[5] + Z[6] + Z[7]) / 4.);
-    glEnd();
-    glDisable(GL_LINE_STIPPLE);
-    gl2psDisable(GL2PS_LINE_STIPPLE);
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.volumes_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces || faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", h->iEnt);
-    else
-      sprintf(Num, "%d", h->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
-}
-
-void Draw_Mesh_Prism(void *a, void *b)
-{
-  double Xc = 0.0, Yc = 0.0, Zc = 0.0;
-  double X[6], Y[6], Z[6], X2[12], Y2[12], Z2[12];
-  char Num[100];
-
-  Prism *p = *(Prism **) a;
-
-  if(!(p->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(p->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = p->RhoShapeMeasure();
+    glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
+  
+  for(int i = 0; i < 6; i++)
+    if(CTX.clip[i] & 2) 
+      glEnable((GLenum)(GL_CLIP_PLANE0 + i));
     else
-      tmp = 0.0;
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = p->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  int edges = CTX.mesh.volumes_edges;
-  int faces = CTX.mesh.volumes_faces;
-
-  if(intersectCutPlane(6, p->V, &edges, &faces) < 0)
-    return;
-
-  unsigned int col;
-  if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(p->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.prism;
-
-  for(int i = 0; i < 6; i++) {
-    Xc += p->V[i]->Pos.X;
-    Yc += p->V[i]->Pos.Y;
-    Zc += p->V[i]->Pos.Z;
-  }
-  Xc /= 6.;
-  Zc /= 6.;
-  Yc /= 6.;
-
-  for(int i = 0; i < 6; i++) {
-    X[i] = Xc + CTX.mesh.explode * (p->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (p->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (p->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(p->V[i]->Num, X[i], Y[i], Z[i], 
-		      p->V[i]->Degree, p->V[i]->Visible,
-		      p->iEnt, thePhysical, iPart);
-  }
-
-  if(p->VSUP){
-    if(theVolume && theVolume->TriVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->TriVertexArray;
-      theVolume->TriVertexArray = NULL;
-    }
-    if(theVolume && theVolume->QuadVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->QuadVertexArray;
-      theVolume->QuadVertexArray = NULL;
-    }
-    for(int i = 0; i < 12; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (p->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (p->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (p->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(p->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			p->VSUP[i]->Degree, p->VSUP[i]->Visible,
-			p->iEnt, thePhysical, iPart);
-    }
-  }
-
-  if(CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface && 
-     (edges || faces) && !(CTX.mesh.volumes_edges || CTX.mesh.volumes_faces) &&
-     theVolume && theVolume->TriVertexArray && theVolume->QuadVertexArray){
-    if(theVolume->TriVertexArray->fill){
-      for(int i = 0; i < 2; i++){
-	int a = trifaces_prism[i][0];
-	int b = trifaces_prism[i][1];
-	int c = trifaces_prism[i][2];
-	double n[3];
-	normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-	theVolume->TriVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->num++;
-      }
-    }
-    if(theVolume->QuadVertexArray->fill){
-      for(int i = 0; i < 3; i++){
-	int a = quadfaces_prism[i][0];
-	int b = quadfaces_prism[i][1];
-	int c = quadfaces_prism[i][2];
-	int d = quadfaces_prism[i][3];
-	double n[3];
-	normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-	theVolume->QuadVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->add(X[d], Y[d], Z[d], n[0], n[1], n[2], col);
-	theVolume->QuadVertexArray->num++;
-      }
-    }
-  }    
-  else{
-    if(edges){
-      if(CTX.mesh.surfaces_faces || faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      glBegin(GL_LINES);
-      for(int i = 0; i < 9; i++){
-	int j = edges_prism[i][0];
-	int k = edges_prism[i][1];
-	glVertex3d(X[j], Y[j], Z[j]);
-	if(p->VSUP){
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	}
-	glVertex3d(X[k], Y[k], Z[k]);
-      }
-      glEnd();
-    }
-    
-    if(faces){
-      glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!p->VSUP){
-	glBegin(GL_TRIANGLES);
-	_triFace(X[0], Y[0], Z[0], X[2], Y[2], Z[2], X[1], Y[1], Z[1]);
-	_triFace(X[3], Y[3], Z[3], X[4], Y[4], Z[4], X[5], Y[5], Z[5]);
-	glEnd();
-	glBegin(GL_QUADS);
-	_quadFace(X, Y, Z, 0, 1, 4, 3);
-	_quadFace(X, Y, Z, 0, 3, 5, 2);
-	_quadFace(X, Y, Z, 1, 2, 5, 4);
-	glEnd();
-      }
-      else{
-	glBegin(GL_TRIANGLES);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 2, 1, 1, 3, 0);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 3, 4, 5, 6, 8, 7);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 4, 3, 0, 4, 6, 2, 9);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 3, 5, 2, 2, 7, 5, 1, 10);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 1, 2, 5, 4, 3, 5, 8, 4, 11);
-	glEnd();
-      }
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }
-
-  if(CTX.mesh.dual) {
-    glColor4ubv((GLubyte *) & CTX.color.fg);
-    glEnable(GL_LINE_STIPPLE);
-    glLineStipple(1, 0x0F0F);
-    gl2psEnable(GL2PS_LINE_STIPPLE);
-    glBegin(GL_LINES);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[2] + X[1]) / 3., (Y[0] + Y[2] + Y[1]) / 3.,
-	       (Z[0] + Z[2] + Z[1]) / 3.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[3] + X[4] + X[5]) / 3., (Y[3] + Y[4] + Y[5]) / 3.,
-	       (Z[3] + Z[4] + Z[5]) / 3.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[1] + X[4] + X[3]) / 4., (Y[0] + Y[1] + Y[4] + Y[3]) / 4.,
-	       (Z[0] + Z[1] + Z[4] + Z[3]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[0] + X[3] + X[5] + X[2]) / 4., (Y[0] + Y[3] + Y[5] + Y[2]) / 4.,
-	       (Z[0] + Z[3] + Z[5] + Z[2]) / 4.);
-    glVertex3d(Xc, Yc, Zc);
-    glVertex3d((X[1] + X[2] + X[5] + X[4]) / 4., (Y[1] + Y[2] + Y[5] + Y[4]) / 4.,
-	       (Z[1] + Z[2] + Z[5] + Z[4]) / 4.);
-    glEnd();
-    glDisable(GL_LINE_STIPPLE);
-    gl2psDisable(GL2PS_LINE_STIPPLE);
+      glDisable((GLenum)(GL_CLIP_PLANE0 + i));
+  
+  /*
+  if(CTX.mesh.changed){
+    if(THEM->normals) delete THEM->normals;
+    THEM->normals = new smooth_normals(CTX.mesh.angle_smooth_normals);
   }
+  */
+  
+  if(CTX.mesh.surfaces_faces || CTX.mesh.surfaces_edges)
+    std::for_each(GMODEL->firstFace(), GMODEL->lastFace(), drawMeshGFace());
 
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.volumes_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces || faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", p->iEnt);
-    else
-      sprintf(Num, "%d", p->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
+  CTX.mesh.changed = 0;
+  
+  for(int i = 0; i < 6; i++)
+    glDisable((GLenum)(GL_CLIP_PLANE0 + i));
 }
 
-void Draw_Mesh_Pyramid(void *a, void *b)
+// this routine is only used to display the interactive construction
+// of the 2D aniso mesh
+void draw_triangle_overlay(double r, double g, double b,
+			   double *v1, double *v2, double *v3)
 {
-  double Xc = 0.0, Yc = 0.0, Zc = 0.0;
-  double X[5], Y[5], Z[5], X2[9], Y2[9], Z2[9];
-  char Num[100];
-
-  Pyramid *p = *(Pyramid **) a;
-
-  if(!(p->Visible & VIS_MESH))
-    return;
-
-  int iPart = getPartition(p->iPart);
-  if(iPart < 0)
-    return;
-
-  if(CTX.mesh.quality_sup) {
-    double tmp;
-    if(CTX.mesh.quality_type == 2)
-      tmp = p->RhoShapeMeasure();
-    else
-      tmp = 0.0;
-    if(tmp < CTX.mesh.quality_inf || tmp > CTX.mesh.quality_sup)
-      return;
-  }
-
-  if(CTX.mesh.radius_sup) {
-    double r = p->maxEdge();
-    if(r < CTX.mesh.radius_inf || r > CTX.mesh.radius_sup)
-      return;
-  }
-
-  int edges = CTX.mesh.volumes_edges;
-  int faces = CTX.mesh.volumes_faces;
-
-  if(intersectCutPlane(5, p->V, &edges, &faces) < 0)
-    return;
-
-  unsigned int col;
-  if(theColor.type)
-    col = theColor.mesh;
-  else if(CTX.mesh.color_carousel == 1)
-    col = CTX.color.mesh.carousel[abs(p->iEnt % 20)];
-  else if(CTX.mesh.color_carousel == 2)
-    col = CTX.color.mesh.carousel[abs(thePhysical % 20)];
-  else if(CTX.mesh.color_carousel == 3)
-    col = CTX.color.mesh.carousel[abs(iPart % 20)];
-  else
-    col = CTX.color.mesh.pyramid;
-
-  for(int i = 0; i < 5; i++) {
-    Xc += p->V[i]->Pos.X;
-    Yc += p->V[i]->Pos.Y;
-    Zc += p->V[i]->Pos.Z;
-  }
-  Xc /= 5.;
-  Zc /= 5.;
-  Yc /= 5.;
-
-  for(int i = 0; i < 5; i++) {
-    X[i] = Xc + CTX.mesh.explode * (p->V[i]->Pos.X - Xc);
-    Y[i] = Yc + CTX.mesh.explode * (p->V[i]->Pos.Y - Yc);
-    Z[i] = Zc + CTX.mesh.explode * (p->V[i]->Pos.Z - Zc);
-    if(CTX.mesh.points_per_element)
-      Draw_Mesh_Point(p->V[i]->Num, X[i], Y[i], Z[i], 
-		      p->V[i]->Degree, p->V[i]->Visible,
-		      p->iEnt, thePhysical, iPart);
-  }
-
-  if(p->VSUP){
-    if(theVolume && theVolume->TriVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->TriVertexArray;
-      theVolume->TriVertexArray = NULL;
-    }
-    if(theVolume && theVolume->QuadVertexArray){
-      // vertex arrays not implemented for second order elements
-      delete theVolume->QuadVertexArray;
-      theVolume->QuadVertexArray = NULL;
-    }
-    for(int i = 0; i < 9; i++) {
-      X2[i] = Xc + CTX.mesh.explode * (p->VSUP[i]->Pos.X - Xc);
-      Y2[i] = Yc + CTX.mesh.explode * (p->VSUP[i]->Pos.Y - Yc);
-      Z2[i] = Zc + CTX.mesh.explode * (p->VSUP[i]->Pos.Z - Zc);
-      if(CTX.mesh.points_per_element)
-	Draw_Mesh_Point(p->VSUP[i]->Num, X2[i], Y2[i], Z2[i], 
-			p->VSUP[i]->Degree, p->VSUP[i]->Visible,
-			p->iEnt, thePhysical, iPart);
-    }
-  }
-
-  if(CTX.mesh.use_cut_plane && CTX.mesh.cut_plane_as_surface && 
-     (edges || faces) && !(CTX.mesh.volumes_edges || CTX.mesh.volumes_faces) &&
-     theVolume && theVolume->TriVertexArray && theVolume->QuadVertexArray){
-    if(theVolume->TriVertexArray->fill){
-      for(int i = 0; i < 4; i++){
-	int a = trifaces_pyramid[i][0];
-	int b = trifaces_pyramid[i][1];
-	int c = trifaces_pyramid[i][2];
-	double n[3];
-	normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-	theVolume->TriVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-	theVolume->TriVertexArray->num++;
-      }
-    }
-    if(theVolume->QuadVertexArray->fill){
-      int a = quadfaces_pyramid[0][0];
-      int b = quadfaces_pyramid[0][1];
-      int c = quadfaces_pyramid[0][2];
-      int d = quadfaces_pyramid[0][3];
-      double n[3];
-      normal3points(X[a], Y[a], Z[a], X[b], Y[b], Z[b], X[c], Y[c], Z[c], n);
-      theVolume->QuadVertexArray->add(X[a], Y[a], Z[a], n[0], n[1], n[2], col);
-      theVolume->QuadVertexArray->add(X[b], Y[b], Z[b], n[0], n[1], n[2], col);
-      theVolume->QuadVertexArray->add(X[c], Y[c], Z[c], n[0], n[1], n[2], col);
-      theVolume->QuadVertexArray->add(X[d], Y[d], Z[d], n[0], n[1], n[2], col);
-      theVolume->QuadVertexArray->num++;
-    }
-  }    
-  else{
-    if(edges){
-      if(CTX.mesh.surfaces_faces || faces)
-	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-      else
-	glColor4ubv((GLubyte *) & col);
-      glBegin(GL_LINES);
-      for(int i = 0; i < 8; i++){
-	int j = edges_pyramid[i][0];
-	int k = edges_pyramid[i][1];
-	glVertex3d(X[j], Y[j], Z[j]);
-	if(p->VSUP){
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	  glVertex3d(X2[i], Y2[i], Z2[i]);
-	}
-	glVertex3d(X[k], Y[k], Z[k]);
-      }
-      glEnd();
-    }
-
-    if(faces){
-      glColor4ubv((GLubyte *) & col);
-      if(CTX.mesh.light) glEnable(GL_LIGHTING);
-      if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
-      if(!p->VSUP){
-	glBegin(GL_QUADS);
-	_quadFace(X, Y, Z, 0, 3, 2, 1);
-	glEnd();
-	glBegin(GL_TRIANGLES);
-	_triFace(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[4], Y[4], Z[4]);
-	_triFace(X[3], Y[3], Z[3], X[0], Y[0], Z[0], X[4], Y[4], Z[4]);
-	_triFace(X[1], Y[1], Z[1], X[2], Y[2], Z[2], X[4], Y[4], Z[4]);
-	_triFace(X[2], Y[2], Z[2], X[3], Y[3], Z[3], X[4], Y[4], Z[4]);
-	glEnd();
-      }
-      else{
-	glBegin(GL_TRIANGLES);
-	_quadFace2(X, Y, Z, X2, Y2, Z2, 0, 3, 2, 1, 1, 5, 3, 0, 8);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 0, 1, 4, 0, 4, 2);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 3, 0, 4, 1, 2, 7);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 1, 2, 4, 3, 6, 4);
-	_triFace2(X, Y, Z, X2, Y2, Z2, 2, 3, 4, 5, 7, 6);
-	glEnd();
-      }
-      glDisable(GL_POLYGON_OFFSET_FILL);
-      glDisable(GL_LIGHTING);
-    }
-  }
-
-  ++numLabelsDisplayed;
-
-  if(CTX.mesh.volumes_num && (numLabelsDisplayed % stepLabelsDisplayed == 0)) {
-    if(CTX.mesh.surfaces_faces || faces)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.line);
-    else
-      glColor4ubv((GLubyte *) & col);
-    if(CTX.mesh.label_type == 4)
-      sprintf(Num, "(%g,%g,%g)", Xc, Yc, Zc);
-    else if(CTX.mesh.label_type == 3)
-      sprintf(Num, "%d", iPart);
-    else if(CTX.mesh.label_type == 2)
-      sprintf(Num, "%d", thePhysical);
-    else if(CTX.mesh.label_type == 1)
-      sprintf(Num, "%d", p->iEnt);
-    else
-      sprintf(Num, "%d", p->Num);
-    glRasterPos3d(Xc, Yc, Zc);
-    Draw_String(Num);
-  }
+  SetOpenglContext();
+  InitProjection();
+  InitPosition();
+  glDisable(GL_DEPTH_TEST);
+  glDrawBuffer(GL_FRONT);
+  glColor3f(r, g, b);
+  glBegin(GL_LINE_LOOP);
+  glVertex3dv(v1);
+  glVertex3dv(v2);
+  glVertex3dv(v3);
+  glEnd();
+  glFlush();
+  glDrawBuffer(GL_BACK);
+  glEnable(GL_DEPTH_TEST);
 }
diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index 9922d74e4e..2675e4bd31 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-// $Id: Post.cpp,v 1.105 2006-02-14 15:13:18 geuzaine Exp $
+// $Id: Post.cpp,v 1.106 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -470,6 +470,13 @@ void Draw_Post(void)
   double ValMin = 0., ValMax = 0.;
   Post_View *v;
 
+  // draw any plugin-specific stuff
+  if(CTX.post.plugin_draw_function)
+    (*CTX.post.plugin_draw_function)();
+
+  if(CTX.render_mode == GMSH_SELECT)
+    return;
+
   if(!CTX.post.list)
     return;
 
diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp
index 3a66db7ea3..30eeb6009f 100644
--- a/Graphics/gl2ps.cpp
+++ b/Graphics/gl2ps.cpp
@@ -1,4 +1,4 @@
-/* $Id: gl2ps.cpp,v 1.107 2006-07-25 16:42:09 geuzaine Exp $ */
+/* $Id: gl2ps.cpp,v 1.108 2006-08-04 14:28:02 geuzaine Exp $ */
 /*
  * GL2PS, an OpenGL to PostScript Printing Library
  * Copyright (C) 1999-2006 Christophe Geuzaine <geuz@geuz.org>
@@ -643,9 +643,8 @@ static void gl2psEncodeBase64Block(unsigned char in[3], unsigned char out[4], in
 
   out[0] = cb64[ in[0] >> 2 ];
   out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ];
-  out[2] = (unsigned char) (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | 
-                                            ((in[2] & 0xc0) >> 6) ] : '=');
-  out[3] = (unsigned char) (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
+  out[2] = (len > 1) ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '=';
+  out[3] = (len > 2) ? cb64[ in[2] & 0x3f ] : '=';
 }
 
 static void gl2psListEncodeBase64(GL2PSlist *list)
@@ -2657,14 +2656,15 @@ static void gl2psPrintPostScriptHeader(void)
   }
 
   gl2psPrintf("%%%%Title: %s\n"
-              "%%%%Creator: GL2PS %d.%d.%d%s, (C) 1999-2006 Christophe Geuzaine <geuz@geuz.org>\n"
+              "%%%%Creator: GL2PS %d.%d.%d%s, %s\n"
               "%%%%For: %s\n"
               "%%%%CreationDate: %s"
               "%%%%LanguageLevel: 3\n"
               "%%%%DocumentData: Clean7Bit\n"
               "%%%%Pages: 1\n",
-              gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION,
-              GL2PS_EXTRA_VERSION, gl2ps->producer, ctime(&now));
+              gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, 
+	      GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT,
+	      gl2ps->producer, ctime(&now));
 
   if(gl2ps->format == GL2PS_PS){
     gl2psPrintf("%%%%Orientation: %s\n"
@@ -3197,6 +3197,7 @@ static GL2PSbackend gl2psEPS = {
 static void gl2psPrintTeXHeader(void)
 {
   char name[256];
+  time_t now;
   int i;
 
   if(gl2ps->filename && strlen(gl2ps->filename) < 256){
@@ -3213,6 +3214,17 @@ static void gl2psPrintTeXHeader(void)
     strcpy(name, "untitled");
   }
 
+  time(&now);
+
+  fprintf(gl2ps->stream, 
+	  "%% Title: %s\n"
+	  "%% Creator: GL2PS %d.%d.%d%s, %s\n"
+	  "%% For: %s\n"
+	  "%% CreationDate: %s",
+	  gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION,
+	  GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT,
+	  gl2ps->producer, ctime(&now));
+
   fprintf(gl2ps->stream, 
           "\\setlength{\\unitlength}{1pt}\n"
           "\\begin{picture}(0,0)\n"
@@ -3896,11 +3908,11 @@ static int gl2psPrintPDFInfo(void)
                  "1 0 obj\n"
                  "<<\n"
                  "/Title (%s)\n"
-                 "/Creator (%s)\n"
-                 "/Producer (GL2PS %d.%d.%d%s, "
-                 "(C) 1999-2006 Christophe Geuzaine <geuz@geuz.org>)\n",
-                 gl2ps->title, gl2ps->producer, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION,
-                 GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION);
+                 "/Creator (GL2PS %d.%d.%d%s, %s)\n"
+                 "/Producer (%s)\n",
+                 gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION,
+                 GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT,
+                 gl2ps->producer);
   
   if(!newtime){
     offs += fprintf(gl2ps->stream, 
@@ -4850,11 +4862,11 @@ static void gl2psPrintSVGHeader(void)
   gl2psPrintf("%s\n", gl2ps->title);
   gl2psPrintf("</title>\n");
   gl2psPrintf("<desc>\n");
-  gl2psPrintf("Creator: GL2PS %d.%d.%d%s\n"
+  gl2psPrintf("Creator: GL2PS %d.%d.%d%s, %s\n"
               "For: %s\n"
               "CreationDate: %s",
               GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION,
-              GL2PS_EXTRA_VERSION, gl2ps->producer, ctime(&now));
+              GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now));
   gl2psPrintf("</desc>\n");
   gl2psPrintf("<defs>\n");
   gl2psPrintf("</defs>\n");
@@ -5182,6 +5194,19 @@ static void gl2psPrintPGFColor(GL2PSrgba rgba)
 
 static void gl2psPrintPGFHeader(void)
 {
+  time_t now;
+
+  time(&now);
+
+  fprintf(gl2ps->stream, 
+	  "%% Title: %s\n"
+	  "%% Creator: GL2PS %d.%d.%d%s, %s\n"
+	  "%% For: %s\n"
+	  "%% CreationDate: %s",
+	  gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION,
+	  GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT,
+	  gl2ps->producer, ctime(&now));
+
   fprintf(gl2ps->stream, "\\begin{pgfpicture}\n");
   if(gl2ps->options & GL2PS_DRAW_BACKGROUND){
     gl2psPrintPGFColor(gl2ps->bgcolor);
diff --git a/Graphics/gl2ps.h b/Graphics/gl2ps.h
index 0923c59d88..349c7d4024 100644
--- a/Graphics/gl2ps.h
+++ b/Graphics/gl2ps.h
@@ -1,4 +1,4 @@
-/* $Id: gl2ps.h,v 1.66 2006-07-25 11:10:10 geuzaine Exp $ */
+/* $Id: gl2ps.h,v 1.67 2006-08-04 14:28:02 geuzaine Exp $ */
 /*
  * GL2PS, an OpenGL to PostScript Printing Library
  * Copyright (C) 1999-2006 Christophe Geuzaine <geuz@geuz.org>
@@ -85,6 +85,8 @@
                        0.01 * GL2PS_MINOR_VERSION + \
                        0.0001 * GL2PS_PATCH_VERSION)
 
+#define GL2PS_COPYRIGHT "(C) 1999-2006 Christophe Geuzaine (geuz@geuz.org)"
+
 /* Output file formats (the values and the ordering are important!) */
 
 #define GL2PS_PS  0
diff --git a/Makefile b/Makefile
index f2665bc833..2d2ad2b232 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.420 2006-07-10 12:16:34 remacle Exp $
+# $Id: Makefile,v 1.421 2006-08-04 14:28:01 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -95,7 +95,7 @@ clean-most:
 
 depend: initialtag
 	for i in ${GMSH_DIRS};\
-        do (cd $$i && ${MAKE} depend); done
+        do (cd $$i && ${MAKE} depend "FLAGS=-DHAVE_GSL -DHAVE_FLTK"); done
 
 nodepend:
 	for i in ${GMSH_DIRS} ; do \
diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp
index ca2f427ef7..b75ebe4b16 100644
--- a/Mesh/2D_Mesh_Aniso.cpp
+++ b/Mesh/2D_Mesh_Aniso.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh_Aniso.cpp,v 1.52 2006-05-05 17:48:55 geuzaine Exp $
+// $Id: 2D_Mesh_Aniso.cpp,v 1.53 2006-08-04 14:28:02 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -546,11 +546,14 @@ bool draw_simplex2d(Surface * sur, Simplex * s, bool nouv)
   Calcule_Z_Plan(&pv3, &dum);
   Projette_Inverse(&pv3, &dum);
 
-  void draw_triangle_overlay(double, double, double, Vertex *, Vertex *, Vertex *);
+  void draw_triangle_overlay(double, double, double, double*, double*, double*);
+  double p1[3] = {pv1->Pos.X, pv1->Pos.Y, pv1->Pos.Z};
+  double p2[3] = {pv2->Pos.X, pv2->Pos.Y, pv2->Pos.Z};
+  double p3[3] = {pv3->Pos.X, pv3->Pos.Y, pv3->Pos.Z};
   if(nouv)
-    draw_triangle_overlay(1., 0., 0., pv1, pv2, pv3);
+    draw_triangle_overlay(1., 0., 0., p1, p2, p3);
   else
-    draw_triangle_overlay(0., 0., 0., pv1, pv2, pv3);
+    draw_triangle_overlay(0., 0., 0., p1, p2, p3);
 #endif
 
   return true;
diff --git a/Mesh/Makefile b/Mesh/Makefile
index 1229155b94..6db452b814 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.111 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.112 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -110,6 +110,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 1D_Mesh.o: 1D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -117,6 +118,7 @@ depend:
   Face.h Edge.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   Utils.h ../Common/Context.h Interpolation.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Mesh.o: 2D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -129,6 +131,7 @@ depend:
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Utils.h Vertex.h Create.h 2D_Mesh.h \
   ../Common/Context.h Interpolation.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Transfinite.o: 2D_Transfinite.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -136,6 +139,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h Interpolation.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Elliptic.o: 2D_Elliptic.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -147,6 +151,7 @@ depend:
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_BGMesh.o: 2D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -154,6 +159,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Recombine.o: 2D_Recombine.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -161,6 +167,7 @@ depend:
   Face.h Edge.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   Interpolation.h Utils.h 2D_Mesh.h Create.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_InitMesh.o: 2D_InitMesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -168,6 +175,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Bowyer.o: 2D_Bowyer.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -175,6 +183,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Bricks.o: 2D_Bricks.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -182,6 +191,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_DivAndConq.o: 2D_DivAndConq.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -189,6 +199,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Util.o: 2D_Util.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -196,6 +207,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Links.o: 2D_Links.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -203,6 +215,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   2D_Mesh.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Tree.o: 2D_Tree.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -210,6 +223,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h 2D_Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Cylindrical.o: 2D_Cylindrical.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -217,6 +231,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Parametric.o: 2D_Parametric.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -229,6 +244,7 @@ depend:
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Interpolation.h Vertex.h Mesh.h 2D_Mesh.h \
   Create.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Mesh_Aniso.o: 2D_Mesh_Aniso.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -241,13 +257,15 @@ depend:
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Interpolation.h Vertex.h Create.h \
   ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 2D_Mesh_Triangle.o: 2D_Mesh_Triangle.cpp ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
-  Metric.h Matrix.h ../Common/Context.h ../contrib/Triangle/triangle.h
+  Metric.h Matrix.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Mesh.o: 3D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -255,6 +273,7 @@ depend:
   Face.h Edge.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   3D_Mesh.h Create.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Transfinite.o: 3D_Transfinite.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -262,6 +281,7 @@ depend:
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h Interpolation.h Create.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_BGMesh.o: 3D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -270,43 +290,10 @@ depend:
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Common/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  ../Common/Context.h ../Common/OctreePost.h ../Common/Octree.h \
+  ../Common/OctreeInternals.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Extrude.o: 3D_Extrude.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -318,6 +305,7 @@ depend:
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h ../Common/Context.h Create.h Vertex.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Extrude_Old.o: 3D_Extrude_Old.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -329,6 +317,7 @@ depend:
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h ../Common/Context.h Create.h Vertex.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Coherence.o: 3D_Coherence.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -336,75 +325,43 @@ depend:
   Face.h Edge.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   3D_Mesh.h Create.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Divide.o: 3D_Divide.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Mesh_Netgen.o: 3D_Mesh_Netgen.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Geo/Geo.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
-  Metric.h Matrix.h Create.h ../Common/Context.h ../Common/OS.h \
-  ../contrib/Netgen/libsrc/interface/nglib.h \
-  ../contrib/Netgen/nglib_addon.h
+  Metric.h Matrix.h Create.h ../Common/Context.h ../Common/OS.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 3D_Mesh_Tetgen.o: 3D_Mesh_Tetgen.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
-  Metric.h Matrix.h Create.h ../Common/Context.h \
-  ../contrib/Tetgen/tetgen.h
-BDS.o: BDS.cpp ../Numeric/Numeric.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 BDS.h ../contrib/ANN/include/ANN/ANN.h \
+  Metric.h Matrix.h Create.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
+BDS.o: BDS.cpp ../Numeric/Numeric.h ../Common/GmshMatrix.h BDS.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h \
   ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
   ../Common/Message.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 MeshQuality.o: MeshQuality.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Create.o: Create.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -417,44 +374,10 @@ Create.o: Create.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Utils.h Vertex.h ../Common/Context.h \
   Create.h
-Generator.o: Generator.cpp BDS.h ../contrib/ANN/include/ANN/ANN.h \
-  ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
+Generator.o: Generator.cpp BDS.h ../Common/Views.h ../Common/ColorTable.h \
+  ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
   ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h Mesh.h Vertex.h \
@@ -466,9 +389,11 @@ Generator.o: Generator.cpp BDS.h ../contrib/ANN/include/ANN/ANN.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
   ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
   ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
-  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h
+  ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/GFace.h \
+  ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/MElement.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -480,6 +405,7 @@ Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Create.h Vertex.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -492,6 +418,7 @@ Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
   ../Mesh/Matrix.h ../Geo/ExtrudeParams.h Mesh.h 3D_Mesh.h Create.h \
   Vertex.h ../Common/Context.h PartitionMesh.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 DiscreteSurface.o: DiscreteSurface.cpp ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
@@ -500,45 +427,11 @@ DiscreteSurface.o: DiscreteSurface.cpp ../Common/Gmsh.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Geo/ExtrudeParams.h \
   ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h BDS.h \
-  ../contrib/ANN/include/ANN/ANN.h ../Common/Views.h \
-  ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h PartitionMesh.h ../Common/OS.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h PartitionMesh.h \
+  ../Common/OS.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 SwapEdge.o: SwapEdge.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -546,6 +439,7 @@ SwapEdge.o: SwapEdge.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   SwapPatterns.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Utils.o: Utils.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -557,39 +451,8 @@ Utils.o: Utils.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Interpolation.h Vertex.h \
-  ../Common/Context.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
+  ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -601,17 +464,20 @@ Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Mesh.h Matrix.h Interpolation.h Vertex.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 meshGEdge.o: meshGEdge.cpp meshGEdge.h ../Geo/GEdge.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Geo/MVertex.h ../Common/GmshDefines.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/MVertex.h ../Geo/GPoint.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  ../DataStr/List.h ../DataStr/Tree.h Utils.h Vertex.h Mesh.h Element.h \
-  Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Common/Gmsh.h ../Common/Message.h \
+  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
+  Utils.h Vertex.h Mesh.h Element.h Simplex.h Face.h Edge.h \
+  ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h Metric.h Matrix.h \
   ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 meshGFace.o: meshGFace.cpp meshGFace.h ../Geo/SPoint2.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/MVertex.h \
@@ -621,47 +487,13 @@ meshGFace.o: meshGFace.cpp meshGFace.h ../Geo/SPoint2.h ../Geo/GVertex.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.h \
   Metric.h Matrix.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Common/Context.h Utils.h \
-  ../Common/Message.h BDS.h ../contrib/ANN/include/ANN/ANN.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/GFace.h ../Geo/GPoint.h \
+  ../Geo/GEntity.h ../Geo/MElement.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Common/Context.h Utils.h ../Common/Message.h BDS.h \
   ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -670,6 +502,7 @@ Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h \
   Create.h ../Geo/CAD.h ../Mesh/Vertex.h ../Geo/ExtrudeParams.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -678,6 +511,7 @@ Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Geo/ExtrudeParams.h \
   Utils.h Interpolation.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -685,6 +519,7 @@ SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h Utils.h Interpolation.h ../Common/OS.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 PartitionMesh.o: PartitionMesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -693,54 +528,18 @@ PartitionMesh.o: PartitionMesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Geo/ExtrudeParams.h \
   ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h BDS.h \
-  ../contrib/ANN/include/ANN/ANN.h ../Common/Views.h \
-  ../Common/ColorTable.h ../Common/VertexArray.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h PartitionMesh.h ../Parser/OpenFile.h \
-  ../contrib/Metis/metis.h ../contrib/Metis/defs.h \
-  ../contrib/Metis/struct.h ../contrib/Metis/macros.h \
-  ../contrib/Metis/rename.h ../contrib/Metis/proto.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h PartitionMesh.h \
+  ../Parser/OpenFile.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Smoothing.o: Smoothing.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 CrossData.o: CrossData.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -748,6 +547,7 @@ CrossData.o: CrossData.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Vertex.o: Vertex.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -755,18 +555,21 @@ Vertex.o: Vertex.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h Metric.h Matrix.h \
   ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Edge.o: Edge.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Mesh.h \
   Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h \
   ../Common/GmshDefines.h Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Face.o: Face.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../Numeric/Numeric.h Mesh.h \
   Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h \
   ../Common/GmshDefines.h Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Element.o: Element.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -774,6 +577,7 @@ Element.o: Element.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Geo/ExtrudeParams.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshDefines.h \
   Metric.h Matrix.h
+# 1 "/Users/geuzaine/.gmsh/Mesh//"
 Simplex.o: Simplex.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp
index 59e4c5ac12..5d2a6f6ee4 100644
--- a/Mesh/meshGEdge.cpp
+++ b/Mesh/meshGEdge.cpp
@@ -97,13 +97,16 @@ double F_One_bis(double t)
 
 void deMeshGEdge :: operator() (GEdge *ge) 
 {
-  for (unsigned int i=0;i<ge->mesh_vertices.size();i++) 
-    delete ge->mesh_vertices[i];
+  for (unsigned int i=0;i<ge->mesh_vertices.size();i++) delete ge->mesh_vertices[i];
   ge->mesh_vertices.clear();
+  for (unsigned int i=0;i<ge->lines.size();i++) delete ge->lines[i];
+  ge->lines.clear();
 }
 
 void meshGEdge :: operator() (GEdge *ge) 
 {  
+  if(ge->geomType() == GEntity::DiscreteCurve) return;
+
   deMeshGEdge dem;
   dem(ge);
 
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 709f7252e6..f4c2a9fa89 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -4,6 +4,7 @@
 #include "GEdge.h"
 #include "GFace.h"
 #include "MVertex.h"
+#include "MElement.h"
 #include "Context.h"
 #include "Utils.h"
 #include "GPoint.h"
@@ -27,8 +28,6 @@ void dsvdcmp(double **a, int m, int n, double w[], double **v);
   cercle! En attendant mieux, il y a donc un test de coherence
   supplementaire pour les surfaces non-planes. */
 
-
-
 int Orientation (std::vector<MVertex*> &cu)
 {
   int N, i, a, b, c;
@@ -130,7 +129,7 @@ void computeEdgeLoops (const GFace *gf,
     GVertex *v_end = ((*ito) != 1) ? (*it)->getBeginVertex() : (*it)->getEndVertex();
     all_mvertices.push_back(start->mesh_vertices[0]);
     if (*ito == 1)
-      for (int i=0;i<(*it)->mesh_vertices.size();i++)
+      for (unsigned int i=0;i<(*it)->mesh_vertices.size();i++)
 	all_mvertices.push_back((*it)->mesh_vertices[i]);
     else
       for (int i=(*it)->mesh_vertices.size()-1;i>=0;i--)
@@ -158,7 +157,7 @@ void computeEdgeLoops (const GFace *gf,
 	  }
 	all_mvertices.push_back(v_start->mesh_vertices[0]);
 	if (*ito == 1)
-	  for (int i=0;i<(*it)->mesh_vertices.size();i++)
+	  for (unsigned int i=0;i<(*it)->mesh_vertices.size();i++)
 	    all_mvertices.push_back((*it)->mesh_vertices[i]);
 	else
 	  for (int i=(*it)->mesh_vertices.size()-1;i>=0;i--)
@@ -171,14 +170,13 @@ void computeEdgeLoops (const GFace *gf,
 void MeanPlane_bis(GFace *gf, const std::vector<MVertex*> &points)
 {
 
-  int i, j, min, ndata, na;
+  int min, ndata, na;
   double res[4], ex[3], t1[3], t2[3], svd[3];
-  Vertex *v;
   double xm = 0., ym = 0., zm = 0.;
 
   ndata = points.size();
   na = 3;
-  for(i = 0; i < ndata; i++) {
+  for(int i = 0; i < ndata; i++) {
     xm += points[i]->x();
     ym += points[i]->y();
     zm += points[i]->z();
@@ -192,7 +190,7 @@ void MeanPlane_bis(GFace *gf, const std::vector<MVertex*> &points)
   gsl_matrix *V = gsl_matrix_alloc(na, na);
   gsl_vector *W = gsl_vector_alloc(na);
   gsl_vector *TMPVEC = gsl_vector_alloc(na);
-  for(i = 0; i < ndata; i++) {
+  for(int i = 0; i < ndata; i++) {
     gsl_matrix_set(U, i, 0, points[i]->x() - xm);
     gsl_matrix_set(U, i, 1, points[i]->y() - ym);
     gsl_matrix_set(U, i, 2, points[i]->z() - zm);
@@ -219,7 +217,7 @@ void MeanPlane_bis(GFace *gf, const std::vector<MVertex*> &points)
   double **U = dmatrix(1, ndata, 1, na);
   double **V = dmatrix(1, na, 1, na);
   double *W = dvector(1, na);
-  for(i = 0; i < ndata; i++) {
+  for(int i = 0; i < ndata; i++) {
     U[i + 1][1] = points[i]->x() - xm;
     U[i + 1][2] = points[i]->y() - ym;
     U[i + 1][3] = points[i]->z() - zm;
@@ -293,11 +291,11 @@ void MeanPlane_bis(GFace *gf, const std::vector<MVertex*> &points)
 end:
   res[3] = (xm * res[0] + ym * res[1] + zm * res[2]);
 
-  for(i = 0; i < 3; i++)
+  for(int i = 0; i < 3; i++)
     gf->mp.plan[0][i] = t1[i];
-  for(i = 0; i < 3; i++)
+  for(int i = 0; i < 3; i++)
     gf->mp.plan[1][i] = t2[i];
-  for(i = 0; i < 3; i++)
+  for(int i = 0; i < 3; i++)
     gf->mp.plan[2][i] = res[i];
 
   gf->mp.a = res[0];
@@ -410,8 +408,7 @@ bool edgeSwapTest(BDS_Edge *e, GFace *gf, std::map<BDS_Point*,BDS_Pos> &realCoor
 
   e->oppositeof (op);
   
-  double coordMiddle, edgeLength1, edgeLength2;
-
+  double edgeLength1, edgeLength2;
 
   edgeLength1 = computeEdgeLinearLength ( e,e->p1,e->p2,realCoordinates);
   edgeLength2 = computeEdgeLinearLength ( 0,op[0],op[1],realCoordinates);
@@ -453,7 +450,6 @@ void NewMeshGenerator ( GFace *gf,
 
   int nbEdgeLoops = indices.size()-1;
   for(int i = 0; i < nbEdgeLoops; i++) {
-    int nbPtsOnEdgeLoop = indices[i+1] -indices[i];
     for(int j = indices[i]; j < indices[i+1]; j++) {
       MVertex *here     = points[j];
       MVertex *previous = (j == indices[i])?points[indices[i+1]-1] : points[j-1]; 
@@ -472,17 +468,17 @@ void NewMeshGenerator ( GFace *gf,
   }
   // will not work correctly if points are present initially inside
   // the domain.
-  for (int i=0;i<gf->mesh_vertices.size();++i)
+  for (unsigned int i=0;i<gf->mesh_vertices.size();++i)
     {
       MVertex *p = gf->mesh_vertices[i];
       m.add_point ( NUMP, p->x(), p->y(), p->z());
       numPoints[p]=NUMP++;
     }
-  for (int i=0;i<gf->triangles.size();i+=3)
+  for (unsigned int i=0;i<gf->triangles.size();i++)
     {
-      MVertex *p0 = gf->triangles[i];
-      MVertex *p1 = gf->triangles[i+1];
-      MVertex *p2 = gf->triangles[i+2];
+      MVertex *p0 = gf->triangles[i]->getVertex(0);
+      MVertex *p1 = gf->triangles[i]->getVertex(1);
+      MVertex *p2 = gf->triangles[i]->getVertex(2);
       m.add_triangle ( numPoints[p0], numPoints[p1], numPoints[p2] );
     }
 
@@ -546,9 +542,9 @@ void NewMeshGenerator ( GFace *gf,
 
 	  if ((*it)->numfaces() == 2 && linearLength < 0.7 * l_wanted && errGeom < errGeomTresh * 0.7)
 	    {
-	      if ( (*it)->p1->iD >= points.size() )
+	      if ( (*it)->p1->iD >= (int)points.size() )
 		m.collapse_edge ( *it, (*it)->p1, 0);
-	      else if ( (*it)->p2->iD >= points.size() )
+	      else if ( (*it)->p2->iD >= (int)points.size() )
 		m.collapse_edge ( *it, (*it)->p2, 0);
 	      if(linearLength < 0.35 * l_wanted) NB_MODIF++;	      
 	    }
@@ -582,7 +578,7 @@ void NewMeshGenerator ( GFace *gf,
       if (IT++ > 25 || (double)(NB_MODIF) < .003*(double)m.edges.size())break;
     }
   
-  for (int i=0;i<gf->mesh_vertices.size();++i)
+  for (unsigned int i=0;i<gf->mesh_vertices.size();++i)
     {
       MVertex *p = gf->mesh_vertices[i];
       delete p;
@@ -594,7 +590,7 @@ void NewMeshGenerator ( GFace *gf,
     std::set<BDS_Point*,PointLessThan>::iterator it = m.points.begin();
     while (it != m.points.end())
       {
-	if ( (*it)->iD >= points.size() )
+	if ( (*it)->iD >= (int)points.size() )
 	  {
 	    MFaceVertex *v = new MFaceVertex ( (*it)->X,(*it)->Y, 0.0, gf, 0,0);           
 	    gf->mesh_vertices.push_back(v);
@@ -604,6 +600,8 @@ void NewMeshGenerator ( GFace *gf,
       }
   }
   {
+    for (unsigned int i=0;i<gf->triangles.size();i++)
+      delete gf->triangles[i];
     gf->triangles.clear();
     std::list<BDS_Triangle*>::iterator it = m.triangles.begin();
     while (it != m.triangles.end())
@@ -612,17 +610,10 @@ void NewMeshGenerator ( GFace *gf,
 	  {
 	    BDS_Point *n[3];
 	    (*it)->getNodes (n);
+	    MVertex *v[3];
 	    for (int i=0;i<3;i++)
-	      {
-		if (n[i]->iD >= points.size())
-		  {
-		    gf->triangles.push_back(verts_[n[i]->iD]);
-		  }
-		else
-		  {
-		    gf->triangles.push_back(points[n[i]->iD]);
-		  }
-	      }
+	      v[i] = (n[i]->iD >= (int)points.size()) ? verts_[n[i]->iD] : points[n[i]->iD];
+	    gf->triangles.push_back(new MTriangle(v[0], v[1], v[2]));
 	  }
 	++it;
       }
@@ -736,9 +727,7 @@ void OldMeshGenerator ( GFace *gf,
       int b = M.listdel[i]->t.b;
       int c = M.listdel[i]->t.c;
       //      Msg(INFO, "tri[%d] = %d %d %d",i,a,b,c);
-      gf->triangles.push_back(verts_[a]);
-      gf->triangles.push_back(verts_[b]);
-      gf->triangles.push_back(verts_[c]);
+      gf->triangles.push_back(new MTriangle(verts_[a], verts_[b], verts_[c]));
     }
   
   delete [] verts_;
@@ -759,14 +748,16 @@ void OldMeshGenerator ( GFace *gf,
 
 void deMeshGFace :: operator() (GFace *gf) 
 {
-  for (int i=0;i<gf->mesh_vertices.size();i++) delete gf->mesh_vertices[i];
+  for (unsigned int i=0;i<gf->mesh_vertices.size();i++) delete gf->mesh_vertices[i];
   gf->mesh_vertices.clear();
+  for (unsigned int i=0;i<gf->triangles.size();i++) delete gf->triangles[i];
+  gf->triangles.clear();
 }
 
 
 void meshGFace :: operator() (GFace *gf) 
 {  
-
+  if(gf->geomType() == GEntity::DiscreteSurface) return;
 
   // destroy the mesh if it exists
   deMeshGFace dem;
@@ -785,7 +776,8 @@ void meshGFace :: operator() (GFace *gf)
   //compute the mean plane, this is sometimes useful 
   MeanPlane_bis(gf,points);
 
-  Msg(DEBUG1, "Face %d type %d with %d edge loops and %d points", gf->tag(),gf->geomType(),indices.size()-1,points.size());
+  Msg(DEBUG1, "Face %d type %d with %d edge loops and %d points", 
+      gf->tag(),gf->geomType(),indices.size()-1,points.size());
   fromCartesianToParametric c2p ( gf );
   std::for_each (points.begin(),points.end(),c2p);    
   Msg(DEBUG1, "points were put in parametric coords ...");
@@ -805,48 +797,10 @@ void meshGFace :: operator() (GFace *gf)
       NewMeshGenerator ( gf, points, indices );
     }
 
-  Msg(DEBUG1, "type %d %d triangles generated, %d internal vertices", gf->geomType(),gf->triangles.size()/3,gf->mesh_vertices.size());
-
-  if(0){
-    char name[256];
-    sprintf(name,"view%d-N.pos",gf->tag());
-    FILE *fff = fopen (name,"w");
-    fprintf(fff,"View \" \" {\n");
-    
-    std::vector<MVertex*> &triangles = gf->triangles;
-    for (int i=0;i<gf->triangles.size();i+=3)
-      {
-	fprintf(fff,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){1,1,1};\n",
-		triangles[i]->x(),triangles[i]->y(),triangles[i]->z(),
-		triangles[i+1]->x(),triangles[i+1]->y(),triangles[i+1]->z(),
-		triangles[i+2]->x(),triangles[i+2]->y(),triangles[i+2]->z());
-      }
-    
-    fprintf(fff,"};\n");
-    fclose(fff);
-  }
+  Msg(DEBUG1, "type %d %d triangles generated, %d internal vertices",
+      gf->geomType(),gf->triangles.size(),gf->mesh_vertices.size());
 
   fromParametricToCartesian p2c ( gf );
-  std::for_each (points.begin(),points.end(),p2c);    
-  std::for_each (gf->mesh_vertices.begin(),gf->mesh_vertices.end(),p2c);    
-
-  if(1){
-    char name[256];
-    sprintf(name,"view%d.pos",gf->tag());
-    FILE *fff = fopen (name,"w");
-    fprintf(fff,"View \" \" {\n");
-    
-    std::vector<MVertex*> &triangles = gf->triangles;
-    for (int i=0;i<gf->triangles.size();i+=3)
-      {
-	fprintf(fff,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){1,1,1};\n",
-		triangles[i]->x(),triangles[i]->y(),triangles[i]->z(),
-		triangles[i+1]->x(),triangles[i+1]->y(),triangles[i+1]->z(),
-		triangles[i+2]->x(),triangles[i+2]->y(),triangles[i+2]->z());
-      }
-    
-    fprintf(fff,"};\n");
-    fclose(fff);
-  }
-  
+  std::for_each(points.begin(),points.end(),p2c);    
+  std::for_each(gf->mesh_vertices.begin(),gf->mesh_vertices.end(),p2c);    
 }  
diff --git a/Numeric/Makefile b/Numeric/Makefile
index f8da95ec17..fe843580b5 100644
--- a/Numeric/Makefile
+++ b/Numeric/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.27 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.28 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -53,57 +53,20 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Numeric//"
 Numeric.o: Numeric.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
-  Numeric.h /sw/include/gsl/gsl_version.h /sw/include/gsl/gsl_types.h \
-  /sw/include/gsl/gsl_errno.h
+  Numeric.h
+# 1 "/Users/geuzaine/.gmsh/Numeric//"
 EigSolve.o: EigSolve.cpp
+# 1 "/Users/geuzaine/.gmsh/Numeric//"
 gsl_newt.o: gsl_newt.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
-  Numeric.h /sw/include/gsl/gsl_math.h /sw/include/gsl/gsl_sys.h \
-  /sw/include/gsl/gsl_machine.h /sw/include/gsl/gsl_precision.h \
-  /sw/include/gsl/gsl_types.h /sw/include/gsl/gsl_nan.h \
-  /sw/include/gsl/gsl_pow_int.h /sw/include/gsl/gsl_errno.h \
-  /sw/include/gsl/gsl_multiroots.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_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_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_linalg.h /sw/include/gsl/gsl_mode.h \
-  /sw/include/gsl/gsl_permutation.h
+  Numeric.h
+# 1 "/Users/geuzaine/.gmsh/Numeric//"
 gsl_brent.o: gsl_brent.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
-  Numeric.h /sw/include/gsl/gsl_errno.h /sw/include/gsl/gsl_types.h \
-  /sw/include/gsl/gsl_math.h /sw/include/gsl/gsl_sys.h \
-  /sw/include/gsl/gsl_machine.h /sw/include/gsl/gsl_precision.h \
-  /sw/include/gsl/gsl_nan.h /sw/include/gsl/gsl_pow_int.h \
-  /sw/include/gsl/gsl_min.h
+  Numeric.h
diff --git a/Parallel/Makefile b/Parallel/Makefile
index e23ceb4b08..a12a538a76 100644
--- a/Parallel/Makefile
+++ b/Parallel/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.30 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.31 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -50,6 +50,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Parallel//"
 ParUtil.o: ParUtil.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
diff --git a/Parser/Makefile b/Parser/Makefile
index cc7a0384dc..2fb5ebf13c 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.90 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.91 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -75,59 +75,26 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Parser//"
 Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Parallel/ParUtil.h ../Common/Gmsh.h \
-  ../Common/Message.h ../DataStr/Malloc.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../Common/Context.h ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
-  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Mesh/Nurbs.h ../Mesh/Vertex.h ../Mesh/Mesh.h ../Geo/CAD.h \
-  ../Geo/ExtrudeParams.h ../Graphics/Draw.h ../Mesh/Create.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Parallel/ParUtil.h \
+  ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../Common/Context.h ../Geo/Geo.h ../Geo/GeoUtils.h \
+  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h ../Mesh/Nurbs.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
+  ../Geo/CAD.h ../Geo/ExtrudeParams.h ../Graphics/Draw.h ../Mesh/Create.h \
   ../Mesh/Vertex.h ../Mesh/Mesh.h ../Common/Colors.h ../Common/Options.h \
   Parser.h OpenFile.h ../Common/CommandLine.h FunctionManager.h \
   ../Common/OS.h ../Graphics/CreateFile.h ../Common/Visibility.h
+# 1 "/Users/geuzaine/.gmsh/Parser//"
 Gmsh.yy.o: Gmsh.yy.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
@@ -139,55 +106,22 @@ Gmsh.yy.o: Gmsh.yy.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/SmoothNormals.h ../Common/GmshDefines.h ../Mesh/Metric.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
   ../Geo/ExtrudeParams.h Gmsh.tab.hpp
-OpenFile.o: OpenFile.cpp ../Mesh/BDS.h ../contrib/ANN/include/ANN/ANN.h \
-  ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
-  ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Gmsh.h ../Common/Message.h \
-  ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
+# 1 "/Users/geuzaine/.gmsh/Parser//"
+OpenFile.o: OpenFile.cpp ../Mesh/BDS.h ../Common/Views.h \
+  ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
+  ../Common/SmoothNormals.h ../Numeric/Numeric.h ../Common/GmshMatrix.h \
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Gmsh.h \
+  ../Common/Message.h ../DataStr/Malloc.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   ../Geo/gmshModel.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Geo/MVertex.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GEntity.h \
   ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GPoint.h ../Geo/GEntity.h \
-  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h ../Common/Context.h Parser.h OpenFile.h \
+  ../Geo/SPoint2.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/GFace.h \
+  ../Geo/GPoint.h ../Geo/GEntity.h ../Geo/MElement.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/MElement.h ../Common/Context.h Parser.h OpenFile.h \
   ../Common/CommandLine.h ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/Options.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
   ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h \
@@ -199,4 +133,5 @@ OpenFile.o: OpenFile.cpp ../Mesh/BDS.h ../contrib/ANN/include/ANN/ANN.h \
   ../Common/GmshUI.h ../Graphics/Draw.h ../Fltk/GUI.h \
   ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h \
   ../Fltk/Popup_Button.h
+# 1 "/Users/geuzaine/.gmsh/Parser//"
 FunctionManager.o: FunctionManager.cpp FunctionManager.h
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index 2a18509a7b..b81392b7ce 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.98 2006-07-14 12:17:06 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.99 2006-08-04 14:28:03 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -336,7 +336,11 @@ int MergeProblem(char *name, int warn_if_missing)
        !strncmp(tmp, "$MeshFormat", 4)) {
       if(THEM->status < 0)
 	mai3d(0);
-      Read_Mesh(THEM, fp, name, FORMAT_MSH);
+
+      if(!GMODEL) 
+	GMODEL = new gmshModel;
+      GMODEL->readMSH(name);
+
       SetBoundingBox();
       status = THEM->status;
     }
diff --git a/Plugin/Makefile b/Plugin/Makefile
index 266e824211..8fd973d0e7 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.102 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.103 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -70,637 +70,131 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Plugin.o: Plugin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h PluginManager.h CutMap.h Levelset.h CutGrid.h \
-  StreamLines.h CutPlane.h CutParametric.h CutSphere.h Skin.h \
-  ../DataStr/Tree.h ../DataStr/avl.h Extract.h ExtractElements.h \
-  ExtractEdges.h HarmonicToTime.h ModulusPhase.h Integrate.h Gradient.h \
-  Curl.h Divergence.h Annotate.h Remove.h DecomposeInSimplex.h Smooth.h \
-  Transform.h Triangulate.h Warp.h StructuralSolver.h ../Geo/Geo.h \
-  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
-  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
-  ../Mesh/Matrix.h ../Common/GmshUI.h Eigenvectors.h Eigenvalues.h \
-  Lambda2.h Evaluate.h ../Common/OctreePost.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h Probe.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  PluginManager.h CutMap.h Levelset.h CutGrid.h StreamLines.h CutPlane.h \
+  CutParametric.h CutSphere.h Skin.h ../DataStr/Tree.h ../DataStr/avl.h \
+  Extract.h ExtractElements.h ExtractEdges.h HarmonicToTime.h \
+  ModulusPhase.h Integrate.h Gradient.h Curl.h Divergence.h Annotate.h \
+  Remove.h DecomposeInSimplex.h Smooth.h Transform.h Triangulate.h Warp.h \
+  StructuralSolver.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
+  ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h \
+  ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h \
+  ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
+  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
+  ../Common/GmshUI.h Eigenvectors.h Eigenvalues.h Lambda2.h Evaluate.h \
+  ../Common/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
+  Probe.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Levelset.o: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h DecomposeInSimplex.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../Graphics/Iso.h \
   ../Common/Context.h ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 CutPlane.o: CutPlane.cpp CutPlane.h Levelset.h Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  ../Common/GmshUI.h ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 CutSphere.o: CutSphere.cpp CutSphere.h Levelset.h Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  ../Common/GmshUI.h ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 CutMap.o: CutMap.cpp CutMap.h Levelset.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Smooth.o: Smooth.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Smooth.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Smooth.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 CutParametric.o: CutParametric.cpp ../Common/OctreePost.h \
   ../Common/Octree.h ../Common/OctreeInternals.h CutParametric.h Plugin.h \
   ../Common/Options.h ../Common/Message.h ../Common/Views.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h ../contrib/MathEval/matheval.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/Context.h \
+  ../Common/GmshUI.h ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Lambda2.o: Lambda2.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Lambda2.h ../Common/Context.h \
-  ../Common/ShapeFunctions.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Lambda2.h ../Common/Context.h ../Common/ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Eigenvectors.o: Eigenvectors.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h Eigenvectors.h ../Common/Context.h \
   ../DataStr/Malloc.h ../Numeric/EigSolve.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Eigenvalues.o: Eigenvalues.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h Eigenvalues.h ../Common/Context.h \
   ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 StreamLines.o: StreamLines.cpp ../Common/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h StreamLines.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
   ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 CutGrid.o: CutGrid.cpp ../Common/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h CutGrid.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
   ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Transform.o: Transform.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h Transform.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Triangulate.o: Triangulate.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
   Plugin.h ../Common/Options.h ../Common/Views.h ../Common/ColorTable.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Triangulate.h ../Common/Context.h ../Geo/Geo.h \
-  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
-  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
-  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
-  ../Mesh/Matrix.h ../Mesh/Utils.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
-  ../Mesh/Create.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
-  ../contrib/Triangle/triangle.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Triangulate.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h ../Mesh/Vertex.h \
+  ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
+  ../Geo/ExtrudeParams.h ../Common/GmshDefines.h ../Mesh/Metric.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
+  ../Mesh/Utils.h ../Mesh/Vertex.h ../Mesh/Mesh.h ../Mesh/Create.h \
+  ../Mesh/Vertex.h ../Mesh/Mesh.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Warp.o: Warp.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Warp.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Warp.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 StructuralSolver.o: StructuralSolver.cpp StructuralSolver.h ../Geo/Geo.h \
   ../DataStr/List.h ../Mesh/Mesh.h ../DataStr/Tree.h ../DataStr/avl.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
@@ -712,657 +206,114 @@ StructuralSolver.o: StructuralSolver.cpp StructuralSolver.h ../Geo/Geo.h \
   ../Mesh/Matrix.h Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \
   ../Common/SmoothNormals.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/GmshUI.h ../Common/Context.h \
-  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../Graphics/Draw.h ../Mesh/Utils.h ../Mesh/Vertex.h ../Mesh/Mesh.h \
-  ../Fltk/Shortcut_Window.h
+  ../Common/AdaptiveViews.h ../Common/GmshMatrix.h ../Common/GmshUI.h \
+  ../Common/Context.h ../DataStr/Tools.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../Graphics/Draw.h ../Mesh/Utils.h ../Mesh/Vertex.h \
+  ../Mesh/Mesh.h ../Fltk/Shortcut_Window.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Skin.o: Skin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Skin.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../Common/Context.h ../DataStr/Malloc.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Skin.h ../DataStr/Tree.h ../DataStr/avl.h ../Common/Context.h \
+  ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Extract.o: Extract.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Extract.h ../Common/Context.h \
-  ../DataStr/Malloc.h ../contrib/MathEval/matheval.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Extract.h ../Common/Context.h ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 ExtractElements.o: ExtractElements.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ExtractElements.h ../Common/Context.h \
   ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 ExtractEdges.o: ExtractEdges.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ExtractEdges.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Common/Context.h ../DataStr/Malloc.h ../Mesh/BDS.h \
-  ../contrib/ANN/include/ANN/ANN.h
+  ../DataStr/avl.h ../Common/Context.h ../DataStr/Malloc.h ../Mesh/BDS.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 DecomposeInSimplex.o: DecomposeInSimplex.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h DecomposeInSimplex.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../Common/Context.h ../DataStr/Malloc.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Evaluate.o: Evaluate.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Evaluate.h ../Common/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h ../Common/Context.h \
-  ../contrib/MathEval/matheval.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Evaluate.h ../Common/OctreePost.h ../Common/Octree.h \
+  ../Common/OctreeInternals.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Integrate.o: Integrate.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h Integrate.h ../Common/Context.h \
   ../Common/ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Gradient.o: Gradient.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Gradient.h ../Common/Context.h \
-  ../Common/ShapeFunctions.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Gradient.h ../Common/Context.h ../Common/ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Curl.o: Curl.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Curl.h ../Common/Context.h \
-  ../Common/ShapeFunctions.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Curl.h ../Common/Context.h ../Common/ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Divergence.o: Divergence.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h Divergence.h ../Common/Context.h \
   ../Common/ShapeFunctions.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Annotate.o: Annotate.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Annotate.h ../Common/Context.h \
-  ../Common/GmshUI.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h ../Mesh/Mesh.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h \
-  ../Mesh/Face.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Geo/ExtrudeParams.h \
-  ../Common/GmshDefines.h ../Mesh/Metric.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Mesh.h ../Mesh/Matrix.h \
-  ../Fltk/Colorbar_Window.h ../Fltk/Popup_Button.h ../Graphics/Draw.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Annotate.h ../Common/Context.h ../Common/GmshUI.h ../Fltk/GUI.h \
+  ../Fltk/Opengl_Window.h ../Mesh/Mesh.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Face.h \
+  ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Edge.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Geo/ExtrudeParams.h ../Common/GmshDefines.h \
+  ../Mesh/Metric.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Mesh.h \
+  ../Mesh/Matrix.h ../Fltk/Colorbar_Window.h ../Fltk/Popup_Button.h \
+  ../Graphics/Draw.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Remove.o: Remove.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
-  ../Common/GmshMatrix.h Remove.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/GmshMatrix.h \
+  Remove.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 Probe.o: Probe.cpp Probe.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
   ../Graphics/Draw.h ../Common/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 HarmonicToTime.o: HarmonicToTime.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h HarmonicToTime.h ../Common/Context.h
+# 1 "/Users/geuzaine/.gmsh/Plugin//"
 ModulusPhase.o: ModulusPhase.cpp Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Numeric/Numeric.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 ../Common/AdaptiveViews.h \
+  ../Numeric/Numeric.h ../Common/GmshMatrix.h ../Common/AdaptiveViews.h \
   ../Common/GmshMatrix.h ModulusPhase.h ../Common/Context.h
diff --git a/benchmarks/3d/sphere_in_cube.geo b/benchmarks/3d/sphere_in_cube.geo
new file mode 100644
index 0000000000..ce9ae9a718
--- /dev/null
+++ b/benchmarks/3d/sphere_in_cube.geo
@@ -0,0 +1,78 @@
+lc = .2;
+Point(1) = {0.0,0.0,0.0,lc};
+Point(2) = {1,0.0,0.0,lc};
+Point(3) = {0,1,0.0,lc};
+Circle(1) = {2,1,3};
+Point(4) = {-1,0,0.0,lc};
+Point(5) = {0,-1,0.0,lc};
+Circle(2) = {3,1,4};
+Circle(3) = {4,1,5};
+Circle(4) = {5,1,2};
+Point(6) = {0,0,-1,lc};
+Point(7) = {0,0,1,lc};
+Circle(5) = {3,1,6};
+Circle(6) = {6,1,5};
+Circle(7) = {5,1,7};
+Circle(8) = {7,1,3};
+Circle(9) = {2,1,7};
+Circle(10) = {7,1,4};
+Circle(11) = {4,1,6};
+Circle(12) = {6,1,2};
+Line Loop(13) = {2,8,-10};
+Ruled Surface(14) = {13};
+Line Loop(15) = {10,3,7};
+Ruled Surface(16) = {15};
+Line Loop(17) = {-8,-9,1};
+Ruled Surface(18) = {17};
+Line Loop(19) = {-11,-2,5};
+Ruled Surface(20) = {19};
+Line Loop(21) = {-5,-12,-1};
+Ruled Surface(22) = {21};
+Line Loop(23) = {-3,11,6};
+Ruled Surface(24) = {23};
+Line Loop(25) = {-7,4,9};
+Ruled Surface(26) = {25};
+Line Loop(27) = {-4,12,-6};
+Ruled Surface(28) = {27};
+Surface Loop(29) = {28,26,16,14,20,24,22,18};
+Volume(30) = {29};
+
+// try also netgen:
+// Mesh.Algorithm3D = 4;
+
+lc2 = 2;
+w = 5;
+Point(10) = {-w,-w,-w,lc2};
+Point(11) = {w,-w,-w,lc2};
+Point(12) = {w,w,-w,lc2};
+Point(13) = {-w,w,-w,lc2};
+Point(14) = {-w,-w,w,lc2};
+Point(15) = {w,-w,w,lc2};
+Point(16) = {w,w,w,lc2};
+Point(17) = {-w,w,w,lc2};
+Line(31) = {14,15};
+Line(32) = {15,11};
+Line(33) = {11,10};
+Line(34) = {10,14};
+Line(35) = {14,17};
+Line(36) = {17,13};
+Line(37) = {13,10};
+Line(38) = {13,12};
+Line(39) = {12,16};
+Line(40) = {16,17};
+Line(41) = {16,15};
+Line(42) = {11,12};
+Line Loop(43) = {38,39,40,36};
+Plane Surface(44) = {43};
+Line Loop(45) = {36,37,34,35};
+Plane Surface(46) = {45};
+Line Loop(47) = {35,-40,41,-31};
+Plane Surface(48) = {47};
+Line Loop(49) = {32,42,39,41};
+Plane Surface(50) = {49};
+Line Loop(51) = {42,-38,37,-33};
+Plane Surface(52) = {51};
+Line Loop(53) = {33,34,31,32};
+Plane Surface(54) = {53};
+Surface Loop(55) = {44,52,-50,54,-46,48};
+Volume(56) = {55,29};
diff --git a/contrib/ANN/Makefile b/contrib/ANN/Makefile
index 202a894683..d6d9780877 100644
--- a/contrib/ANN/Makefile
+++ b/contrib/ANN/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.8 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.9 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -63,38 +63,52 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 ANN.o: src/ANN.cpp include/ANN/ANNx.h include/ANN/ANN.h \
   include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 bd_fix_rad_search.o: src/bd_fix_rad_search.cpp src/bd_tree.h \
   include/ANN/ANNx.h include/ANN/ANN.h src/kd_tree.h \
   src/kd_fix_rad_search.h src/kd_util.h src/pr_queue_k.h \
   include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 bd_pr_search.o: src/bd_pr_search.cpp src/bd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/kd_tree.h src/kd_pr_search.h src/kd_util.h \
   src/pr_queue.h include/ANN/ANNperf.h src/pr_queue_k.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 bd_search.o: src/bd_search.cpp src/bd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/kd_tree.h src/kd_search.h src/kd_util.h \
   src/pr_queue_k.h include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 bd_tree.o: src/bd_tree.cpp src/bd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/kd_tree.h src/kd_util.h src/kd_split.h \
   include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 brute.o: src/brute.cpp include/ANN/ANNx.h include/ANN/ANN.h \
   src/pr_queue_k.h include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_dump.o: src/kd_dump.cpp src/kd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/bd_tree.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_fix_rad_search.o: src/kd_fix_rad_search.cpp src/kd_fix_rad_search.h \
   src/kd_tree.h include/ANN/ANNx.h include/ANN/ANN.h src/kd_util.h \
   src/pr_queue_k.h include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_pr_search.o: src/kd_pr_search.cpp src/kd_pr_search.h src/kd_tree.h \
   include/ANN/ANNx.h include/ANN/ANN.h src/kd_util.h src/pr_queue.h \
   include/ANN/ANNperf.h src/pr_queue_k.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_search.o: src/kd_search.cpp src/kd_search.h src/kd_tree.h \
   include/ANN/ANNx.h include/ANN/ANN.h src/kd_util.h src/pr_queue_k.h \
   include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_split.o: src/kd_split.cpp src/kd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/kd_util.h src/kd_split.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_tree.o: src/kd_tree.cpp src/kd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h src/kd_split.h src/kd_util.h include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 kd_util.o: src/kd_util.cpp src/kd_util.h src/kd_tree.h include/ANN/ANNx.h \
   include/ANN/ANN.h include/ANN/ANNperf.h
+# 1 "/Users/geuzaine/.gmsh/contrib/ANN//"
 perf.o: src/perf.cpp include/ANN/ANN.h include/ANN/ANNperf.h
diff --git a/contrib/MathEval/Makefile b/contrib/MathEval/Makefile
index 2b8147eb2b..fac24664d6 100644
--- a/contrib/MathEval/Makefile
+++ b/contrib/MathEval/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.8 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.9 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -61,13 +61,19 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 matheval.o: matheval.cpp common.h ../../DataStr/Malloc.h matheval.h \
   node.h symbol_table.h
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 node.o: node.cpp common.h ../../DataStr/Malloc.h node.h symbol_table.h
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 scanner.yy.o: scanner.yy.cpp common.h ../../DataStr/Malloc.h node.h \
   symbol_table.h parser.tab.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 parser.tab.o: parser.tab.cpp common.h ../../DataStr/Malloc.h node.h \
   symbol_table.h
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 symbol_table.o: symbol_table.cpp common.h ../../DataStr/Malloc.h \
   symbol_table.h xmath.h
+# 1 "/Users/geuzaine/.gmsh/contrib/MathEval//"
 xmath.o: xmath.cpp xmath.h
diff --git a/contrib/Metis/Makefile b/contrib/Metis/Makefile
index 292bc7fb59..e44b11fa08 100644
--- a/contrib/Metis/Makefile
+++ b/contrib/Metis/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.8 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.9 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -101,65 +101,117 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 balance.o: balance.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 fm.o: fm.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kwayfm.o: kwayfm.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mcoarsen.o: mcoarsen.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 minitpart2.o: minitpart2.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mpmetis.o: mpmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 pmetis.o: pmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 subdomains.o: subdomains.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 bucketsort.o: bucketsort.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 fortran.o: fortran.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kwayrefine.o: kwayrefine.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 memory.o: memory.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 minitpart.o: minitpart.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mrefine2.o: mrefine2.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 pqueue.o: pqueue.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 timing.o: timing.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 ccgraph.o: ccgraph.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 frename.o: frename.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kwayvolfm.o: kwayvolfm.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mesh.o: mesh.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mkmetis.o: mkmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mrefine.o: mrefine.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 refine.o: refine.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 util.o: util.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 coarsen.o: coarsen.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 graph.o: graph.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kwayvolrefine.o: kwayvolrefine.c metis.h defs.h struct.h macros.h \
   rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 meshpart.o: meshpart.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mkwayfmh.o: mkwayfmh.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mutil.o: mutil.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 separator.o: separator.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 compress.o: compress.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 initpart.o: initpart.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 match.o: match.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mfm2.o: mfm2.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mkwayrefine.o: mkwayrefine.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 myqsort.o: myqsort.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 sfm.o: sfm.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 debug.o: debug.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kmetis.o: kmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mbalance2.o: mbalance2.c metis.h defs.h struct.h macros.h rename.h \
   proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mfm.o: mfm.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mmatch.o: mmatch.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 ometis.o: ometis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 srefine.o: srefine.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 estmem.o: estmem.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 kvmetis.o: kvmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mbalance.o: mbalance.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mincover.o: mincover.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 mmd.o: mmd.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 parmetis.o: parmetis.c metis.h defs.h struct.h macros.h rename.h proto.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Metis//"
 stat.o: stat.c metis.h defs.h struct.h macros.h rename.h proto.h
diff --git a/contrib/Netgen/Makefile b/contrib/Netgen/Makefile
index f8a6482232..dc5d461090 100644
--- a/contrib/Netgen/Makefile
+++ b/contrib/Netgen/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.9 2006-07-25 12:08:24 remacle Exp $
+# $Id: Makefile,v 1.10 2006-08-04 14:28:03 geuzaine Exp $
 #
 # Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 #
@@ -148,6 +148,7 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 linopt.o: libsrc/opti/linopt.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -168,6 +169,7 @@ linopt.o: libsrc/opti/linopt.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 bfgs.o: libsrc/opti/bfgs.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -188,6 +190,7 @@ bfgs.o: libsrc/opti/bfgs.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 linsearch.o: libsrc/opti/linsearch.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -208,6 +211,7 @@ linsearch.o: libsrc/opti/linsearch.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 global.o: libsrc/meshing/global.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -250,6 +254,7 @@ global.o: libsrc/meshing/global.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 bisect.o: libsrc/meshing/bisect.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -292,6 +297,7 @@ bisect.o: libsrc/meshing/bisect.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshtool.o: libsrc/meshing/meshtool.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -351,6 +357,7 @@ meshtool.o: libsrc/meshing/meshtool.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 refine.o: libsrc/meshing/refine.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -393,6 +400,7 @@ refine.o: libsrc/meshing/refine.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 ruler3.o: libsrc/meshing/ruler3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -435,6 +443,7 @@ ruler3.o: libsrc/meshing/ruler3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 improve3.o: libsrc/meshing/improve3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -477,6 +486,7 @@ improve3.o: libsrc/meshing/improve3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 smoothing3.o: libsrc/meshing/smoothing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -519,6 +529,7 @@ smoothing3.o: libsrc/meshing/smoothing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 adfront3.o: libsrc/meshing/adfront3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -561,10 +572,15 @@ adfront3.o: libsrc/meshing/adfront3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 tetrarls.o: libsrc/meshing/tetrarls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 prism2rls.o: libsrc/meshing/prism2rls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 pyramidrls.o: libsrc/meshing/pyramidrls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 pyramid2rls.o: libsrc/meshing/pyramid2rls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 netrule3.o: libsrc/meshing/netrule3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -607,6 +623,7 @@ netrule3.o: libsrc/meshing/netrule3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 ruler2.o: libsrc/meshing/ruler2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -649,6 +666,7 @@ ruler2.o: libsrc/meshing/ruler2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshclass.o: libsrc/meshing/meshclass.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -691,6 +709,7 @@ meshclass.o: libsrc/meshing/meshclass.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 improve2.o: libsrc/meshing/improve2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -733,6 +752,7 @@ improve2.o: libsrc/meshing/improve2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 smoothing2.o: libsrc/meshing/smoothing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -775,6 +795,7 @@ smoothing2.o: libsrc/meshing/smoothing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 adfront2.o: libsrc/meshing/adfront2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -817,6 +838,7 @@ adfront2.o: libsrc/meshing/adfront2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 netrule2.o: libsrc/meshing/netrule2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -859,7 +881,9 @@ netrule2.o: libsrc/meshing/netrule2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 triarls.o: libsrc/meshing/triarls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geomsearch.o: libsrc/meshing/geomsearch.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -902,6 +926,7 @@ geomsearch.o: libsrc/meshing/geomsearch.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 secondorder.o: libsrc/meshing/secondorder.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -944,6 +969,7 @@ secondorder.o: libsrc/meshing/secondorder.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshtype.o: libsrc/meshing/meshtype.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -986,6 +1012,7 @@ meshtype.o: libsrc/meshing/meshtype.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 parser3.o: libsrc/meshing/parser3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1028,6 +1055,7 @@ parser3.o: libsrc/meshing/parser3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshing2.o: libsrc/meshing/meshing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1070,7 +1098,9 @@ meshing2.o: libsrc/meshing/meshing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 quadrls.o: libsrc/meshing/quadrls.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 specials.o: libsrc/meshing/specials.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1113,6 +1143,7 @@ specials.o: libsrc/meshing/specials.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 parser2.o: libsrc/meshing/parser2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1155,6 +1186,7 @@ parser2.o: libsrc/meshing/parser2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshing3.o: libsrc/meshing/meshing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1197,6 +1229,7 @@ meshing3.o: libsrc/meshing/meshing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshfunc.o: libsrc/meshing/meshfunc.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1239,6 +1272,7 @@ meshfunc.o: libsrc/meshing/meshfunc.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 localh.o: libsrc/meshing/localh.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1281,6 +1315,7 @@ localh.o: libsrc/meshing/localh.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 improve2gen.o: libsrc/meshing/improve2gen.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1323,6 +1358,7 @@ improve2gen.o: libsrc/meshing/improve2gen.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 delaunay.o: libsrc/meshing/delaunay.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1365,6 +1401,7 @@ delaunay.o: libsrc/meshing/delaunay.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 boundarylayer.o: libsrc/meshing/boundarylayer.cpp \
   libsrc/include/mystdlib.h libsrc/meshing/meshing.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -1407,6 +1444,7 @@ boundarylayer.o: libsrc/meshing/boundarylayer.cpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 msghandler.o: libsrc/meshing/msghandler.cpp libsrc/include/meshing.hpp \
   libsrc/include/../meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
@@ -1461,6 +1499,7 @@ msghandler.o: libsrc/meshing/msghandler.cpp libsrc/include/meshing.hpp \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshfunc2d.o: libsrc/meshing/meshfunc2d.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1503,6 +1542,7 @@ meshfunc2d.o: libsrc/meshing/meshfunc2d.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 topology.o: libsrc/meshing/topology.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1545,6 +1585,7 @@ topology.o: libsrc/meshing/topology.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 clusters.o: libsrc/meshing/clusters.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1587,6 +1628,7 @@ clusters.o: libsrc/meshing/clusters.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 curvedelems.o: libsrc/meshing/curvedelems.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1629,6 +1671,7 @@ curvedelems.o: libsrc/meshing/curvedelems.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 curvedelems2.o: libsrc/meshing/curvedelems2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1671,6 +1714,7 @@ curvedelems2.o: libsrc/meshing/curvedelems2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 hprefinement.o: libsrc/meshing/hprefinement.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1715,6 +1759,7 @@ hprefinement.o: libsrc/meshing/hprefinement.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/specials.hpp libsrc/meshing/hpref_trig.hpp \
   libsrc/meshing/hpref_quad.hpp libsrc/meshing/hpref_tet.hpp \
   libsrc/meshing/hpref_prism.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 nglib.o: libsrc/interface/nglib.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1792,6 +1837,7 @@ nglib.o: libsrc/interface/nglib.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp libsrc/interface/nglib.h
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geomtest3d.o: libsrc/gprim/geomtest3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1820,6 +1866,7 @@ geomtest3d.o: libsrc/gprim/geomtest3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geom2d.o: libsrc/gprim/geom2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1845,6 +1892,7 @@ geom2d.o: libsrc/gprim/geom2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geom3d.o: libsrc/gprim/geom3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1870,6 +1918,7 @@ geom3d.o: libsrc/gprim/geom3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 adtree.o: libsrc/gprim/adtree.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1895,6 +1944,7 @@ adtree.o: libsrc/gprim/adtree.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 transform3d.o: libsrc/gprim/transform3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1923,6 +1973,7 @@ transform3d.o: libsrc/gprim/transform3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geomfuncs.o: libsrc/gprim/geomfuncs.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -1948,6 +1999,7 @@ geomfuncs.o: libsrc/gprim/geomfuncs.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 polynomial.o: libsrc/linalg/polynomial.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -1969,6 +2021,7 @@ polynomial.o: libsrc/linalg/polynomial.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 densemat.o: libsrc/linalg/densemat.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -1990,7 +2043,9 @@ densemat.o: libsrc/linalg/densemat.cpp libsrc/include/mystdlib.h \
   libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 vector.o: libsrc/linalg/vector.cpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 algprim.o: libsrc/csg/algprim.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2059,6 +2114,7 @@ algprim.o: libsrc/csg/algprim.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 brick.o: libsrc/csg/brick.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2127,6 +2183,7 @@ brick.o: libsrc/csg/brick.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 manifold.o: libsrc/csg/manifold.cpp libsrc/include/csg.hpp \
   libsrc/include/../csg/csg.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
@@ -2194,6 +2251,7 @@ manifold.o: libsrc/csg/manifold.cpp libsrc/include/csg.hpp \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 bspline2d.o: libsrc/csg/bspline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2261,6 +2319,7 @@ bspline2d.o: libsrc/csg/bspline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshsurf.o: libsrc/csg/meshsurf.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2328,6 +2387,7 @@ meshsurf.o: libsrc/csg/meshsurf.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 csgeom.o: libsrc/csg/csgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -2395,6 +2455,7 @@ csgeom.o: libsrc/csg/csgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 polyhedra.o: libsrc/csg/polyhedra.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2463,6 +2524,7 @@ polyhedra.o: libsrc/csg/polyhedra.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 curve2d.o: libsrc/csg/curve2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -2530,6 +2592,7 @@ curve2d.o: libsrc/csg/curve2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 singularref.o: libsrc/csg/singularref.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -2597,6 +2660,7 @@ singularref.o: libsrc/csg/singularref.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 edgeflw.o: libsrc/csg/edgeflw.cpp libsrc/include/mystdlib.h \
   libsrc/include/meshing.hpp libsrc/include/../meshing/meshing.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2663,6 +2727,7 @@ edgeflw.o: libsrc/csg/edgeflw.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 solid.o: libsrc/csg/solid.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2731,6 +2796,7 @@ solid.o: libsrc/csg/solid.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 explicitcurve2d.o: libsrc/csg/explicitcurve2d.cpp \
   libsrc/include/mystdlib.h libsrc/include/csg.hpp \
   libsrc/include/../csg/csg.hpp libsrc/include/myadt.hpp \
@@ -2799,6 +2865,7 @@ explicitcurve2d.o: libsrc/csg/explicitcurve2d.cpp \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 specpoin.o: libsrc/csg/specpoin.cpp libsrc/include/mystdlib.h \
   libsrc/include/meshing.hpp libsrc/include/../meshing/meshing.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -2865,6 +2932,7 @@ specpoin.o: libsrc/csg/specpoin.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 gencyl.o: libsrc/csg/gencyl.cpp libsrc/include/linalg.hpp \
   libsrc/include/../linalg/linalg.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
@@ -2933,6 +3001,7 @@ gencyl.o: libsrc/csg/gencyl.cpp libsrc/include/linalg.hpp \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 revolution.o: libsrc/csg/revolution.cpp libsrc/include/mystdlib.h \
   libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -3001,6 +3070,7 @@ revolution.o: libsrc/csg/revolution.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 genmesh.o: libsrc/csg/genmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3068,6 +3138,7 @@ genmesh.o: libsrc/csg/genmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 spline3d.o: libsrc/csg/spline3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3135,6 +3206,7 @@ spline3d.o: libsrc/csg/spline3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 surface.o: libsrc/csg/surface.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3203,6 +3275,7 @@ surface.o: libsrc/csg/surface.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/../linalg/linalg.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 identify.o: libsrc/csg/identify.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3270,6 +3343,7 @@ identify.o: libsrc/csg/identify.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 triapprox.o: libsrc/csg/triapprox.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3337,6 +3411,7 @@ triapprox.o: libsrc/csg/triapprox.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 geom2dmesh.o: libsrc/geom2d/geom2dmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -3408,6 +3483,7 @@ geom2dmesh.o: libsrc/geom2d/geom2dmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 spline2d.o: libsrc/geom2d/spline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -3476,6 +3552,7 @@ spline2d.o: libsrc/geom2d/spline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/../linalg/linalg.hpp libsrc/geom2d/spline2d.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 splinegeometry2.o: libsrc/geom2d/splinegeometry2.cpp \
   libsrc/include/mystdlib.h libsrc/include/csg.hpp \
   libsrc/include/../csg/csg.hpp libsrc/include/myadt.hpp \
@@ -3546,6 +3623,7 @@ splinegeometry2.o: libsrc/geom2d/splinegeometry2.cpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/../linalg/linalg.hpp libsrc/geom2d/spline2d.hpp \
   libsrc/geom2d/splinegeometry2.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 genmesh2d.o: libsrc/geom2d/genmesh2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -3617,6 +3695,7 @@ genmesh2d.o: libsrc/geom2d/genmesh2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 meshstlsurface.o: libsrc/stlgeom/meshstlsurface.cpp \
   libsrc/include/mystdlib.h libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -3676,6 +3755,7 @@ meshstlsurface.o: libsrc/stlgeom/meshstlsurface.cpp \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stlline.o: libsrc/stlgeom/stlline.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3734,6 +3814,7 @@ stlline.o: libsrc/stlgeom/stlline.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stltopology.o: libsrc/stlgeom/stltopology.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3792,6 +3873,7 @@ stltopology.o: libsrc/stlgeom/stltopology.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stltool.o: libsrc/stlgeom/stltool.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3850,6 +3932,7 @@ stltool.o: libsrc/stlgeom/stltool.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stlgeom.o: libsrc/stlgeom/stlgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3908,6 +3991,7 @@ stlgeom.o: libsrc/stlgeom/stlgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stlgeomchart.o: libsrc/stlgeom/stlgeomchart.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3966,6 +4050,7 @@ stlgeomchart.o: libsrc/stlgeom/stlgeomchart.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 stlgeommesh.o: libsrc/stlgeom/stlgeommesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4024,6 +4109,7 @@ stlgeommesh.o: libsrc/stlgeom/stlgeommesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
   libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
   libsrc/stlgeom/meshstlsurface.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 moveablemem.o: libsrc/general/moveablemem.cpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4041,6 +4127,7 @@ moveablemem.o: libsrc/general/moveablemem.cpp libsrc/include/myadt.hpp \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 ngexception.o: libsrc/general/ngexception.cpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4058,6 +4145,7 @@ ngexception.o: libsrc/general/ngexception.cpp libsrc/include/myadt.hpp \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 table.o: libsrc/general/table.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4075,6 +4163,7 @@ table.o: libsrc/general/table.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 optmem.o: libsrc/general/optmem.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4092,6 +4181,7 @@ optmem.o: libsrc/general/optmem.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 spbita2d.o: libsrc/general/spbita2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4109,6 +4199,7 @@ spbita2d.o: libsrc/general/spbita2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 hashtabl.o: libsrc/general/hashtabl.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4126,6 +4217,7 @@ hashtabl.o: libsrc/general/hashtabl.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 sort.o: libsrc/general/sort.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4143,6 +4235,7 @@ sort.o: libsrc/general/sort.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 flags.o: libsrc/general/flags.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4160,6 +4253,7 @@ flags.o: libsrc/general/flags.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 seti.o: libsrc/general/seti.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4177,6 +4271,7 @@ seti.o: libsrc/general/seti.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 bitarray.o: libsrc/general/bitarray.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4194,6 +4289,7 @@ bitarray.o: libsrc/general/bitarray.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 array.o: libsrc/general/array.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4211,6 +4307,7 @@ array.o: libsrc/general/array.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 symbolta.o: libsrc/general/symbolta.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4228,6 +4325,7 @@ symbolta.o: libsrc/general/symbolta.cpp libsrc/include/mystdlib.h \
   libsrc/include/../general/autoptr.hpp \
   libsrc/include/../general/sort.hpp libsrc/include/../general/stack.hpp \
   libsrc/include/../general/mystring.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 mystring.o: libsrc/general/mystring.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4256,6 +4354,7 @@ mystring.o: libsrc/general/mystring.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp
+# 1 "/Users/geuzaine/.gmsh/contrib/Netgen//"
 nglib_addon.o: nglib_addon.cpp libsrc/include/meshing.hpp \
   libsrc/include/../meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
-- 
GitLab