From 0d218e93475039361678938cff079439e04fb469 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Mon, 14 Jul 2008 19:02:22 +0000
Subject: [PATCH] cleanup

---
 Geo/MElement.cpp      | 262 ++++++++++---------------------
 Geo/MElement.h        | 357 ++++++++++++++++++------------------------
 Mesh/HighOrder.cpp    |  12 +-
 doc/VERSIONS.txt      |   7 +-
 doc/gmsh.html         |  14 +-
 doc/texinfo/gmsh.texi | 262 ++++++++++++++-----------------
 6 files changed, 374 insertions(+), 540 deletions(-)

diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index cebe124219..401bd52975 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -624,11 +624,10 @@ void MElement::writeBDF(FILE *fp, int format, int elementary)
   }
 }
 
-void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, double j[2][3])
+void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww,
+		    double j[2][3])
 {
-#if defined(HAVE_GMSH_EMBEDDED)
-  return;
-#else
+#if !defined(HAVE_GMSH_EMBEDDED)
   double grads[256][2];
   int nf = getNumFaceVertices();
 
@@ -644,11 +643,11 @@ void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, dou
   }
   else{
     switch(ord){
-    case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu, vv, ww,grads); break;
-    case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu, vv, ww,grads); break;
-    case 3: gmshFunctionSpaces::find(MSH_TRI_10).df(uu, vv, ww,grads); break;
-    case 4: gmshFunctionSpaces::find(MSH_TRI_15).df(uu, vv, ww,grads); break;
-    case 5: gmshFunctionSpaces::find(MSH_TRI_21).df(uu, vv, ww,grads); break;
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu, vv, ww, grads); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu, vv, ww, grads); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_10).df(uu, vv, ww, grads); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_15).df(uu, vv, ww, grads); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_21).df(uu, vv, ww, grads); break;
     default: Msg::Error("Order %d triangle jac not implemented", ord); break;
     }
   }
@@ -670,34 +669,33 @@ void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, dou
 #endif
 }
 
-void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, SPoint3 &p)
+void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww,
+		    SPoint3 &p)
 {
 #if !defined(HAVE_GMSH_EMBEDDED)
   double sf[256];
   int nf = getNumFaceVertices();
 
-  //  printf("%d %d\n",nf,ord);
   if (!nf){
     switch(ord){
-    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv,sf); break;
-    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv,sf); break;
-    case 3: gmshFunctionSpaces::find(MSH_TRI_9).f(uu, vv,sf); break;
-    case 4: gmshFunctionSpaces::find(MSH_TRI_12).f(uu, vv,sf); break;
-    case 5: gmshFunctionSpaces::find(MSH_TRI_15I).f(uu, vv,sf); break;
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv, sf); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv, sf); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_9).f(uu, vv, sf); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_12).f(uu, vv, sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_15I).f(uu, vv, sf); break;
     default: Msg::Error("Order %d triangle pnt not implemented", ord); break;
     }
   }
   else{
     switch(ord){
-    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv,sf); break;
-    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv,sf); break;
-    case 3: gmshFunctionSpaces::find(MSH_TRI_10).f(uu, vv,sf); break;
-    case 4: gmshFunctionSpaces::find(MSH_TRI_15).f(uu, vv,sf); break;
-    case 5: gmshFunctionSpaces::find(MSH_TRI_21).f(uu, vv,sf); break;
+    case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv, sf); break;
+    case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv, sf); break;
+    case 3: gmshFunctionSpaces::find(MSH_TRI_10).f(uu, vv, sf); break;
+    case 4: gmshFunctionSpaces::find(MSH_TRI_15).f(uu, vv, sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TRI_21).f(uu, vv, sf); break;
     default: Msg::Error("Order %d triangle pnt not implemented", ord); break;
     }
   }
-  //  printf("coucou\n");
 
   double x = 0 ; for(int i = 0; i < 3; i++) x += sf[i] * _v[i]->x();
   double y = 0 ; for(int i = 0; i < 3; i++) y += sf[i] * _v[i]->y();
@@ -711,85 +709,10 @@ void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, SPo
 #endif
 }
 
-void MTetrahedron::pnt(int ord, MVertex *vs[], double uu, double vv, double ww,SPoint3 &p)
-{
-#if !defined(HAVE_GMSH_EMBEDDED)
-  double sf[256];
-
-  int nv = getNumVolumeVertices();
-
-  if (!nv){
-    switch(ord){
-    case 1: gmshFunctionSpaces::find(MSH_TET_4).f(uu, vv, ww,sf); break;
-    case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww,sf); break;
-    case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww,sf); break;
-    case 4: gmshFunctionSpaces::find(MSH_TET_34).f(uu, vv, ww,sf); break;
-    case 5: gmshFunctionSpaces::find(MSH_TET_52).f(uu, vv, ww,sf); break;
-    default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break;
-    }
-  }
-  else{
-    switch(ord){
-    case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww,sf); break;
-    case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww,sf); break;
-    default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break;
-    }
-  }
-    
-  double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x();
-  double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y();
-  double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z();
-
-  const int N = (ord+1)*(ord+2)*(ord+3)/6;
-  
-  
-  for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x();
-  for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y();
-  for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z();
-
-  p = SPoint3(x,y,z);
-#endif
-}
-
-void MTetrahedron::pnt(int ord, std::vector<MVertex *> & vs, double uu, double vv, double ww,SPoint3 &p)
+void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww,
+		       double j[3][3])
 {
 #if !defined(HAVE_GMSH_EMBEDDED)
-  double sf[256];
-  switch(ord){
-  case 1: gmshFunctionSpaces::find(MSH_TET_4) .f(uu, vv, ww,sf); break;
-  case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww,sf); break;
-  case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww,sf); break;
-  case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww,sf); break;
-  case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww,sf); break;
-  default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break;
-  }
-    
-  double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x();
-  double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y();
-  double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z();
-
-  const int N = (ord+1)*(ord+2)*(ord+3)/6;
-  
-  
-  for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x();
-  for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y();
-  for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z();
-
-  p = SPoint3(x,y,z);
-#endif
-}
-
-void MTetrahedron::pnt(double uu, double vv ,double ww, SPoint3& p) {
-  return pnt(1,0,uu,vv,ww,p);
-}
-
-
-void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww, double j[3][3])
-{
-#if defined(HAVE_GMSH_EMBEDDED)
-  return;
-#else
-  
   double grads[256][3];
   switch(ord){
   case 1: gmshFunctionSpaces::find(MSH_TET_4) .df(uu, vv, ww, grads); break;
@@ -827,124 +750,113 @@ void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww,
   for(int i = 4; i < N; i++) j[0][2] += grads[i][0] * vs[i - 4]->z();
   for(int i = 4; i < N; i++) j[1][2] += grads[i][1] * vs[i - 4]->z();
   for(int i = 4; i < N; i++) j[2][2] += grads[i][2] * vs[i - 4]->z();
-  
 #endif
 }
 
-void MTetrahedron::jac(int ord, std::vector<MVertex *>& vs, double uu, double vv, double ww, double j[3][3])
+void MTetrahedron::pnt(int ord, MVertex *vs[], double uu, double vv, double ww,
+		       SPoint3 &p)
 {
-#if defined(HAVE_GMSH_EMBEDDED)
-  return;
-#else
-  
-  double grads[256][3];
-  switch(ord){
-  case 1: gmshFunctionSpaces::find(MSH_TET_4).df(uu, vv, ww,grads); break;
-  case 2: gmshFunctionSpaces::find(MSH_TET_10).df(uu, vv, ww, grads); break;
-  case 3: gmshFunctionSpaces::find(MSH_TET_20).df(uu, vv, ww, grads); break;
-  case 4: gmshFunctionSpaces::find(MSH_TET_35).df(uu, vv, ww, grads); break;
-  case 5: gmshFunctionSpaces::find(MSH_TET_56).df(uu, vv, ww, grads); break;
-  default: Msg::Error("Order %d tetrahedron jac not implemented", ord); break;
-  }
- 
-  j[0][0] = 0 ; for(int i = 0; i < 4; i++) j[0][0] += grads [i][0] * _v[i]->x();
-  j[1][0] = 0 ; for(int i = 0; i < 4; i++) j[1][0] += grads [i][1] * _v[i]->x();
-  j[2][0] = 0 ; for(int i = 0; i < 4; i++) j[2][0] += grads [i][2] * _v[i]->x();
-  j[0][1] = 0 ; for(int i = 0; i < 4; i++) j[0][1] += grads [i][0] * _v[i]->y();
-  j[1][1] = 0 ; for(int i = 0; i < 4; i++) j[1][1] += grads [i][1] * _v[i]->y();
-  j[2][1] = 0 ; for(int i = 0; i < 4; i++) j[2][1] += grads [i][2] * _v[i]->y();
-  j[0][2] = 0 ; for(int i = 0; i < 4; i++) j[0][2] += grads [i][0] * _v[i]->z();
-  j[1][2] = 0 ; for(int i = 0; i < 4; i++) j[1][2] += grads [i][1] * _v[i]->z();
-  j[2][2] = 0 ; for(int i = 0; i < 4; i++) j[2][2] += grads [i][2] * _v[i]->z();
-  
-  if (ord == 1) return;
-
-  const int N = (ord+1)*(ord+2)*(ord+3)/6;
+#if !defined(HAVE_GMSH_EMBEDDED)
+  double sf[256];
 
-  for(int i = 4; i < N; i++) j[0][0] += grads[i][0] * vs[i - 4]->x();
-  for(int i = 4; i < N; i++) j[1][0] += grads[i][1] * vs[i - 4]->x();
-  for(int i = 4; i < N; i++) j[2][0] += grads[i][2] * vs[i - 4]->x();
+  int nv = getNumVolumeVertices();
 
-  for(int i = 4; i < N; i++) j[0][1] += grads[i][0] * vs[i - 4]->y();
-  for(int i = 4; i < N; i++) j[1][1] += grads[i][1] * vs[i - 4]->y();
-  for(int i = 4; i < N; i++) j[2][1] += grads[i][2] * vs[i - 4]->y();
+  if (!nv){
+    switch(ord){
+    case 1: gmshFunctionSpaces::find(MSH_TET_4).f(uu, vv, ww, sf); break;
+    case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww, sf); break;
+    case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww, sf); break;
+    case 4: gmshFunctionSpaces::find(MSH_TET_34).f(uu, vv, ww, sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TET_52).f(uu, vv, ww, sf); break;
+    default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break;
+    }
+  }
+  else{
+    switch(ord){
+    case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww, sf); break;
+    case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww, sf); break;
+    default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break;
+    }
+  }
+    
+  double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x();
+  double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y();
+  double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z();
 
-  for(int i = 4; i < N; i++) j[0][2] += grads[i][0] * vs[i - 4]->z();
-  for(int i = 4; i < N; i++) j[1][2] += grads[i][1] * vs[i - 4]->z();
-  for(int i = 4; i < N; i++) j[2][2] += grads[i][2] * vs[i - 4]->z();
+  const int N = (ord+1)*(ord+2)*(ord+3)/6;
   
-#endif
-}
+  
+  for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x();
+  for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y();
+  for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z();
 
-void MTetrahedron::jac( double uu, double vv, double ww, double j[3][3]) {
-  return jac(1,0,uu,vv,ww,j);
+  p = SPoint3(x,y,z);
+#endif
 }
 
 const int numSubEdges = 6;
 
 int MTriangleN::getNumFacesRep(){ return numSubEdges * numSubEdges; }
 
-void MTriangleN::getFaceRep(int num, double *x, double *y, double *z, SVector3 *n){
-
+void MTriangleN::getFaceRep(int num, double *x, double *y, double *z, SVector3 *n)
+{
   //  on the first layer, we have (numSubEdges-1) * 2 + 1 triangles
   //  on the second layer, we have (numSubEdges-2) * 2 + 1 triangles
   //  on the ith layer, we have (numSubEdges-1-i) * 2 + 1 triangles
-
   int ix, iy;
   int nbt = 0;
-  for (int i=0;i<numSubEdges;i++){
-    int nbl = (numSubEdges-i-1)*2 + 1;
+  for (int i = 0; i < numSubEdges; i++){
+    int nbl = (numSubEdges - i - 1) * 2 + 1;
     nbt += nbl;
     if (nbt > num){
       iy = i;
-      ix = nbl-(nbt-num);
+      ix = nbl - (nbt - num);
       break;
     }
   }
 
-  const double d = 1./numSubEdges;
+  const double d = 1. / numSubEdges;
 
   SPoint3 pnt1, pnt2, pnt3;
-  double J1[2][3],J2[2][3],J3[2][3];
-  if (ix %2 == 0){
-    pnt(ix/2*d, iy*d, 0,pnt1);
-    pnt((ix/2+1)*d, iy*d, 0,pnt2);
-    pnt(ix/2*d, (iy+1)*d, 0,pnt3);
-    jac(ix/2*d, iy*d, 0,J1);
-    jac((ix/2+1)*d, iy*d, 0,J2);
-    jac(ix/2*d, (iy+1)*d, 0,J3);
+  double J1[2][3], J2[2][3], J3[2][3];
+  if (ix % 2 == 0){
+    pnt(ix / 2 * d, iy * d, 0, pnt1);
+    pnt((ix / 2 + 1) * d, iy * d, 0, pnt2);
+    pnt(ix / 2 * d, (iy + 1) * d, 0, pnt3);
+    jac(ix / 2 * d, iy * d, 0, J1);
+    jac((ix / 2 + 1) * d, iy * d, 0, J2);
+    jac(ix / 2 * d, (iy + 1) * d, 0, J3);
   }
   else{
-    pnt((ix/2+1)*d, iy*d, 0,pnt1);
-    pnt((ix/2+1)*d, (iy+1)*d, 0,pnt2);
-    pnt(ix/2*d, (iy+1)*d, 0,pnt3);
-    jac((ix/2+1)*d, iy*d, 0,J1);
-    jac((ix/2+1)*d, (iy+1)*d, 0,J2);
-    jac(ix/2*d, (iy+1)*d, 0,J3);
+    pnt((ix / 2 + 1) * d, iy * d, 0, pnt1);
+    pnt((ix / 2 + 1) * d, (iy + 1) * d, 0, pnt2);
+    pnt(ix / 2 * d, (iy + 1) * d, 0, pnt3);
+    jac((ix / 2 + 1) * d, iy * d, 0, J1);
+    jac((ix / 2 + 1) * d, (iy + 1) * d, 0, J2);
+    jac(ix / 2 * d, (iy + 1) * d, 0, J3);
   }
   {
-    SVector3 d1 (J1[0][0],J1[0][1],J1[0][2]);
-    SVector3 d2 (J1[1][0],J1[1][1],J1[1][2]);
-    n[0] = crossprod(d1,d2);
+    SVector3 d1(J1[0][0], J1[0][1], J1[0][2]);
+    SVector3 d2(J1[1][0], J1[1][1], J1[1][2]);
+    n[0] = crossprod(d1, d2);
     n[0].normalize();
   }
   {
-    SVector3 d1 (J2[0][0],J2[0][1],J2[0][2]);
-    SVector3 d2 (J2[1][0],J2[1][1],J2[1][2]);
-    n[1] = crossprod(d1,d2);
+    SVector3 d1(J2[0][0], J2[0][1], J2[0][2]);
+    SVector3 d2(J2[1][0], J2[1][1], J2[1][2]);
+    n[1] = crossprod(d1, d2);
     n[1].normalize();
   }
   {
-    SVector3 d1 (J3[0][0],J3[0][1],J3[0][2]);
-    SVector3 d2 (J3[1][0],J3[1][1],J3[1][2]);
-    n[2] = crossprod(d1,d2);
+    SVector3 d1(J3[0][0], J3[0][1], J3[0][2]);
+    SVector3 d2(J3[1][0], J3[1][1], J3[1][2]);
+    n[2] = crossprod(d1, d2);
     n[2].normalize();
   }
 
   x[0] = pnt1.x(); x[1] = pnt2.x(); x[2] = pnt3.x();
   y[0] = pnt1.y(); y[1] = pnt2.y(); y[2] = pnt3.y();
   z[0] = pnt1.z(); z[1] = pnt2.z(); z[2] = pnt3.z();
-  
 }
 
 int MTriangleN::getNumEdgesRep(){ return 3 * numSubEdges; }
@@ -956,7 +868,7 @@ void MTriangleN::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *
   if (num < N){
     SPoint3 pnt1, pnt2;
     pnt((double)num / N, 0., 0,pnt1);
-    pnt((double)(num + 1) / N, 0., 0,pnt2);
+    pnt((double)(num + 1) / N, 0., 0, pnt2);
     x[0] = pnt1.x(); x[1] = pnt2.x();
     y[0] = pnt1.y(); y[1] = pnt2.y();
     z[0] = pnt1.z(); z[1] = pnt2.z();
@@ -965,8 +877,8 @@ void MTriangleN::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *
   if (num < 2 * N){
     SPoint3 pnt1, pnt2;
     num -= N;
-    pnt(1. - (double)num / N, (double)num / N, 0,pnt1);
-    pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, 0,pnt2);
+    pnt(1. - (double)num / N, (double)num / N, 0, pnt1);
+    pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, 0, pnt2);
     x[0] = pnt1.x(); x[1] = pnt2.x();
     y[0] = pnt1.y(); y[1] = pnt2.y();
     z[0] = pnt1.z(); z[1] = pnt2.z();
diff --git a/Geo/MElement.h b/Geo/MElement.h
index 5ae3569fcc..ef855b77c2 100644
--- a/Geo/MElement.h
+++ b/Geo/MElement.h
@@ -234,10 +234,6 @@ class MElementFactory{
 /*
  * MLine
  *
- *   v
- *
- *   ^
- *   |
  *   0----------1 --> u
  *
  */
@@ -317,11 +313,7 @@ class MLine : public MElement {
 /*
  * MLine3
  *
- *   v
- *
- *   ^
- *   |
- *   0-----2----1 --> u
+ *   0-----2----1
  *
  */
 class MLine3 : public MLine {
@@ -373,11 +365,7 @@ class MLine3 : public MLine {
 /*
  * MLineN
  *
- *   v
- *
- *   ^
- *   |
- *   0---2---...-(N-1)-1 --> u
+ *   0---2---...-(N-1)-1
  *
  */
 class MLineN : public MLine {
@@ -424,10 +412,10 @@ class MLineN : public MLine {
   }
 };
 
-/* MTriangle
+/* 
+ * MTriangle
  *
  *   v
- *
  *   ^
  *   |
  *   2
@@ -521,16 +509,6 @@ class MTriangle : public MElement {
   {
     MVertex *tmp = _v[1]; _v[1] = _v[2]; _v[2] = tmp;
   }
-  virtual void jac(int order, MVertex *verts[], double u, double v, double w, double jac[2][3]);
-  virtual void jac(double u, double v, double w, double j[2][3])
-  {
-    jac(1, 0, u, v, w, j);
-  }
-  virtual void pnt(int order, MVertex *verts[], double u, double v, double w, SPoint3 &);
-  virtual void pnt(double u, double v, double w, SPoint3 &p)
-  {
-    pnt(1, 0, u, v, w, p);
-  }
   virtual void getShapeFunction(int num, double u, double v, double w, double &s) 
   {
     switch(num){
@@ -555,6 +533,18 @@ class MTriangle : public MElement {
       return false; 
     return true;
   }
+  virtual void jac(int order, MVertex *verts[], double u, double v, double w, 
+		   double j[2][3]);
+  virtual void jac(double u, double v, double w, double j[2][3])
+  {
+    jac(1, 0, u, v, w, j);
+  }
+  virtual void pnt(int order, MVertex *verts[], double u, double v, double w, 
+		   SPoint3 &p);
+  virtual void pnt(double u, double v, double w, SPoint3 &p)
+  {
+    pnt(1, 0, u, v, w, p);
+  }
   virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts) const;
  private:
   int edges_tri(const int edge, const int vert) const
@@ -571,17 +561,13 @@ class MTriangle : public MElement {
 /*
  * MTriangle6
  *
- *   v
- *
- *   ^
- *   |
  *   2
  *   |`\
  *   |  `\
  *   5    `4
  *   |      `\
  *   |        `\
- *   0-----3----1 --> u
+ *   0-----3----1
  *
  */
 class MTriangle6 : public MTriangle {
@@ -671,12 +657,8 @@ class MTriangle6 : public MTriangle {
 };
 
 /*
- * MTriangleN
- *
- *   v
+ * MTriangleN  FIXME: check the plot
  *
- *   ^
- *   |
  *   2
  *   |`\                E = order - 1;
  *   |  `\              N = total number of vertices
@@ -687,7 +669,7 @@ class MTriangle6 : public MTriangle {
  * 2+3E           3+E
  *   |  3+3E to N-1 `\
  *   |                `\
- *   0---3--...---2+E---1 --> u
+ *   0---3--...---2+E---1
  *
  */
 class MTriangleN : public MTriangle {
@@ -769,28 +751,27 @@ class MTriangleN : public MTriangle {
   }
   virtual void jac(double u, double v, double w, double j[2][3])
   {
-    MTriangle::jac(_order, &(*(_vs.begin())), u, v, w, j);
+    MTriangle::jac(_order, &_vs[0], u, v, w, j);
   }
   virtual void pnt(double u, double v, double w, SPoint3 &p)
   {
-    MTriangle::pnt(_order, &(*(_vs.begin())), u, v, w, p);
+    MTriangle::pnt(_order, &_vs[0], u, v, w, p);
   }
 };
 
 /*
  * MQuadrangle
  *
- *   v
- *
- *   ^
- *   |
- *   3----------2
- *   |          |
- *   |          |
- *   |          |
- *   |          |
- *   |          |
- *   0----------1 --> u
+ *         v
+ *         ^
+ *         |
+ *   3-----------2
+ *   |     |     |
+ *   |     |     |
+ *   |     +---- | --> u
+ *   |           |
+ *   |           |
+ *   0-----------1 
  *
  */
 class MQuadrangle : public MElement {
@@ -912,17 +893,13 @@ class MQuadrangle : public MElement {
 /*
  * MQuadrangle8
  *
- *   v
- *
- *   ^
- *   |
- *   3-----6----2
- *   |          |
- *   |          |
- *   7          5
- *   |          |
- *   |          |
- *   0-----4----1 --> u
+ *   3-----6-----2
+ *   |           |
+ *   |           |
+ *   7           5
+ *   |           |
+ *   |           |
+ *   0-----4-----1 
  *
  */
 class MQuadrangle8 : public MQuadrangle {
@@ -1008,17 +985,13 @@ class MQuadrangle8 : public MQuadrangle {
 /*
  * MQuadrangle9
  *
- *   v
- *
- *   ^
- *   |
- *   3-----6----2
- *   |          |
- *   |          |
- *   7     8    5
- *   |          |
- *   |          |
- *   0-----4----1 --> u
+ *   3-----6-----2
+ *   |           |
+ *   |           |
+ *   7     8     5
+ *   |           |
+ *   |           |
+ *   0-----4-----1 
  *
  */
 class MQuadrangle9 : public MQuadrangle {
@@ -1105,7 +1078,7 @@ class MQuadrangle9 : public MQuadrangle {
  *        ,/    '.   `\
  *      ,/       |     `\
  *    ,/         |       `\
- *   0-----------'+--------1 --> u
+ *   0-----------'.--------1 --> u
  *    `\.         |      ,/
  *       `\.      |    ,/
  *          `\.   '. ,/
@@ -1220,14 +1193,6 @@ class MTetrahedron : public MElement {
     default : s = 0.; break;
     }
   }
-  virtual void jac(int order, MVertex *verts[], double u, double v, double w, double jac[3][3]);
-  virtual void jac(int order,std::vector<MVertex*>& verts,double u, double v, double w , double jac[3][3]);
-  virtual void jac(double u,double v,double w,double [3][3]);
-  
-  virtual void pnt(int order, MVertex *verts[], double u, double v, double w, SPoint3 &);
-  virtual void pnt(int order, std::vector<MVertex *>& verts, double u, double v, double w, SPoint3 &);
-  virtual void pnt(double u, double v, double w, SPoint3 &);
-  
   virtual void getGradShapeFunction(int num, double u, double v, double w, double s[3]) 
   {
     switch(num) {
@@ -1244,6 +1209,28 @@ class MTetrahedron : public MElement {
       return false;
     return true;
   }
+  virtual void jac(int order, MVertex *verts[], double u, double v, double w,
+		   double j[3][3]);
+  virtual void jac(int order, std::vector<MVertex*>& verts, double u, double v, double w,
+		   double j[3][3])
+  {
+    jac(order, &verts[0], u, v, w, j);
+  }
+  virtual void jac(double u, double v, double w, double j[3][3])
+  {
+    jac(1, 0, u, v, w, j);
+  }
+  virtual void pnt(int order, MVertex *verts[], double u, double v, double w,
+		   SPoint3 &p);
+  virtual void pnt(int order, std::vector<MVertex*> &verts, double u, double v, double w,
+		   SPoint3 &p)
+  {
+    pnt(order, &verts[0], u, v, w, p);
+  }
+  virtual void pnt(double u, double v, double w, SPoint3 &p)
+  {
+    pnt(1, 0, u, v, w, p);
+  }
   virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts) const;
  private:
   int edges_tetra(const int edge, const int vert) const
@@ -1273,24 +1260,18 @@ class MTetrahedron : public MElement {
 /*
  * MTetrahedron10
  *
- *                      v
- *                    .
- *                  ,/
- *                 /
  *              2 
  *            ,/|`\
  *          ,/  |  `\
  *        ,6    '.   `5
  *      ,/       8     `\
  *    ,/         |       `\
- *   0--------4--'+--------1 --> u
+ *   0--------4--'.--------1
  *    `\.         |      ,/
  *       `\.      |    ,9
  *          `7.   '. ,/
  *             `\. |/
  *                `3
- *                   `\.
- *                      ` w
  *
  */
 class MTetrahedron10 : public MTetrahedron {
@@ -1389,38 +1370,31 @@ class MTetrahedron10 : public MTetrahedron {
     tmp = _vs[1]; _vs[1] = _vs[2]; _vs[2] = tmp;
     tmp = _vs[5]; _vs[5] = _vs[3]; _vs[3] = tmp;
   }
-
-  virtual void jac(double u,double v,double w, double jac[3][3]) {
+  virtual void jac(double u,double v,double w, double jac[3][3])
+  {
     MTetrahedron::jac(2,_vs,u,v,w,jac);
   }
-  
-  virtual void pnt(double u,double v,double w, SPoint3& p) {
+  virtual void pnt(double u,double v,double w, SPoint3& p)
+  {
     MTetrahedron::pnt(2, _vs, u, v, w, p);
   }
-  
 };
 
 /*
- * MTetrahedronN
+ * MTetrahedronN  FIXME: check the plot
  *
- *                      v           E = order - 1
- *                    .             C = 4 + 6*E
- *                  ,/              F = ((order - 1)*(order - 2))/2
- *                 /                N = total number of vertices
  *              2
- *            ,/|`\                 Interior vertex numbers
- *          ,/  |  `\                 for edge 0 <= i <= 5: 4+i*E to 3+(i+1)*E
- *        ,/    '.   `\               for face 0 <= j <= 3: C+j*F to C-1+(j+1)*F
- *      ,/       |     `\             in volume           : C+4*F to N-1
- *    ,/         |       `\
- *   0-----------'+--------1 --> u
- *    `\.         |      ,/
- *       `\.      |    ,/
- *          `\.   '. ,/
- *             `\. |/
+ *            ,/|`\ 
+ *          ,/  |  `\              E = order - 1
+ *        ,/    '.   `\            C = 4 + 6*E 
+ *      ,/       |     `\          F = ((order - 1)*(order - 2))/2
+ *    ,/         |       `\	   N = total number of vertices
+ *   0-----------'.--------1
+ *    `\.         |      ,/        Interior vertex numbers  
+ *       `\.      |    ,/            for edge 0 <= i <= 5: 4+i*E to 3+(i+1)*E
+ *          `\.   '. ,/		     for face 0 <= j <= 3: C+j*F to C-1+(j+1)*F
+ *             `\. |/		     in volume           : C+4*F to N-1
  *                `3
- *                   `\.
- *                      ` w
  *
  */
 class MTetrahedronN : public MTetrahedron {
@@ -1506,24 +1480,18 @@ class MTetrahedronN : public MTetrahedron {
 /*
  * MHexahedron
  *
- *   v
- *
- *   ^
- *   |
+ *          v
  *   3----------2
- *   |\         |\
- *   | \        | \
- *   |  \       |  \
+ *   |\     ^   |\
+ *   | \    |   | \
+ *   |  \   |   |  \
  *   |   7------+---6
- *   |   |      |   |
- *   0---+------1   | --> u
- *    \  |       \  |
- *     \ |        \ |
- *      \|         \|
+ *   |   |  +-- |-- | -> u
+ *   0---+---\--1   | 
+ *    \  |    \  \  |
+ *     \ |     \  \ |
+ *      \|      w  \|
  *       4----------5
- *        \
- *         \
- *          w
  *
  */
 class MHexahedron : public MElement {
@@ -1707,24 +1675,17 @@ class MHexahedron : public MElement {
 /*
  * MHexahedron20
  *
- *   v
- *
- *   ^
- *   |
  *   3----13----2
  *   |\         |\
- *   |15        | 14
+ *   | 15       | 14
  *   9  \       11 \
  *   |   7----19+---6
  *   |   |      |   |
- *   0---+-8----1   | --> u
- *    \ 17       \  18
+ *   0---+-8----1   | 
+ *    \  17      \  18
  *    10 |        12|
  *      \|         \|
  *       4----16----5
- *        \
- *         \
- *          w
  *
  */
 class MHexahedron20 : public MHexahedron {
@@ -1851,24 +1812,17 @@ class MHexahedron20 : public MHexahedron {
 /*
  * MHexahedron27
  *
- *   v
- *
- *   ^
- *   |
  *   3----13----2
  *   |\         |\
  *   |15    24  | 14
  *   9  \ 20    11 \
  *   |   7----19+---6
  *   |22 |  26  | 23|
- *   0---+-8----1   | --> u
+ *   0---+-8----1   |
  *    \ 17    25 \  18
  *    10 |  21    12|
  *      \|         \|
  *       4----16----5
- *        \
- *         \
- *          w
  *
  */
 class MHexahedron27 : public MHexahedron {
@@ -1991,7 +1945,6 @@ class MHexahedron27 : public MHexahedron {
  * MPrism
  *
  *               w
- *
  *               ^
  *               |
  *               3
@@ -2000,14 +1953,15 @@ class MHexahedron27 : public MHexahedron {
  *         ,/    |    `\
  *        4------+------5
  *        |      |      |
- *        |      0      |
- *        |    ,/ `\    |
+ *        |    ,/|`\    |
+ *        |  ,/  |  `\  |
+ *        |,/    |    `\|
+ *       ,|      |      `\
+ *     ,/ |      0      | `\
+ *    u   |    ,/ `\    |    v
  *        |  ,/     `\  |
  *        |,/         `\|
  *        1-------------2
- *     ,/                 `\
- *   ,/                     `\
- *  u                          v
  *
  */
 class MPrism : public MElement {
@@ -2182,24 +2136,21 @@ class MPrism : public MElement {
 /*
  * MPrism15
  *
- *               w
- *
- *               ^
- *               |
  *               3
  *             ,/|`\
  *           12  |  13
- *         ,/    8    `\
+ *         ,/    |    `\
  *        4------14-----5
+ *        |      8      |
+ *        |      |      |
  *        |      |      |
+ *        |      |      |
+ *        10     |      11
  *        |      0      |
- *       10    ,/ `\    11
+ *        |    ,/ `\    |
  *        |  ,6     `7  |
  *        |,/         `\|
  *        1------9------2
- *     ,/                 `\
- *   ,/                     `\
- *  u                          v
  *
  */
 class MPrism15 : public MPrism {
@@ -2312,24 +2263,21 @@ class MPrism15 : public MPrism {
 /*
  * MPrism18
  *
- *               w
- *
- *               ^
- *               |
  *               3
  *             ,/|`\
  *           12  |  13
- *         ,/    8    `\
+ *         ,/    |    `\
  *        4------14-----5
+ *        |      8      |
+ *        |    ,/|`\    |
  *        |  15  |  16  |
- *        |,/    0    `\|
- *       10------17-----11
+ *        |,/    |    `\|
+ *        10-----17-----11
+ *        |      0      |
+ *        |    ,/ `\    |
  *        |  ,6     `7  |
  *        |,/         `\|
  *        1------9------2
- *     ,/                 `\
- *   ,/                     `\
- *  u                          v
  *
  */
 class MPrism18 : public MPrism {
@@ -2441,19 +2389,18 @@ class MPrism18 : public MPrism {
  *               ,/|\
  *             ,/ .'|\
  *           ,/   | | \
- *  w      ,/    .' | `.
- *       ,/      |  '. \
- *  ^  ,/       .'   |  \
- *  |,/         |    |   \
- *  0----------.'----3    \ --> v
- *   `\        |      `\  `.
- *     `\     .'        `\ \
- *       `\   |           `\\
- *         `\.'             `\
- *           1----------------2
- *             `\
- *               `\
- *                  u
+ *         ,/    .' | `.
+ *       ,/      |  '.  \
+ *     ,/       .' w |   \
+ *   ,/         |  ^ |    \
+ *  0----------.'--|-3    `. 
+ *   `\        |   |  `\    \
+ *     `\     .'   +----`\ - \ -> v
+ *       `\   |    `\     `\  \
+ *         `\.'      `\     `\`
+ *            1----------------2
+ *                      `\
+ *                         u
  *
  */
 class MPyramid : public MElement {
@@ -2636,20 +2583,17 @@ class MPyramid : public MElement {
  *               ,/|\
  *             ,/ .'|\
  *           ,/   | | \
- *  w      ,7    .' | `.
- *       ,/      |  12 \
- *  ^  ,/       .'   |  \
- *  |,/         9    |   11
- *  0--------6-.'----3    \ --> v
- *   `\        |      `\  `.
- *     `5     .'        10 \
- *       `\   |           `\\
- *         `\.'             `\
- *           1--------8-------2
- *             `\
- *               `\
- *                  u
- *
+ *         ,/    .' | `.
+ *       ,7      |  12  \
+ *     ,/       .'   |   \
+ *   ,/         9    |    11
+ *  0--------6-.'----3    `. 
+ *   `\        |      `\    \
+ *     `5     .'        10   \ 
+ *       `\   |           `\  \
+ *         `\.'             `\`
+ *            1--------8-------2
+ *                        
  */
 class MPyramid13 : public MPyramid {
  protected:
@@ -2755,19 +2699,16 @@ class MPyramid13 : public MPyramid {
  *               ,/|\
  *             ,/ .'|\
  *           ,/   | | \
- *  w      ,7    .' | `.
- *       ,/      |  12 \
- *  ^  ,/       .'   |  \
- *  |,/         9    |   11
- *  0--------6-.'----3    \ --> v
- *   `\       `|      `\  `.
- *     `5-----.'13------10 \
- *       `\   |   `\      `\\
- *         `\.'     `\      `\
- *           1--------8-------2
- *             `\
- *               `\
- *                  u
+ *         ,/    .' | `.
+ *       ,7      |  12  \
+ *     ,/       .'   |   \
+ *   ,/         9    |    11
+ *  0--------6-.'----3    `. 
+ *   `\        |      `\    \
+ *     `5     .' 13     10   \ 
+ *       `\   |           `\  \
+ *         `\.'             `\`
+ *            1--------8-------2
  *
  */
 class MPyramid14 : public MPyramid {
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index 44546225c4..4e5a3c78da 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -945,7 +945,7 @@ static double mesh_functional_distorsion(MTriangle *t, double u, double v)
 {
   // compute uncurved element jacobian d_u x and d_v x
   double mat[2][3];  
-  t->jac(1, 0, 0, 0, 0,mat);
+  t->jac(1, 0, 0, 0, 0, mat);
   double v1[3] = {mat[0][0], mat[0][1], mat[0][2]};
   double v2[3] = {mat[1][0], mat[1][1], mat[1][2]};
   double normal1[3];
@@ -953,7 +953,7 @@ static double mesh_functional_distorsion(MTriangle *t, double u, double v)
   double nn = sqrt(SQU(normal1[0]) + SQU(normal1[1]) + SQU(normal1[2]));
   
   // compute uncurved element jacobian d_u x and d_v x
-  t->jac(u, v, 0,mat);
+  t->jac(u, v, 0, mat);
   double v1b[3] = {mat[0][0], mat[0][1], mat[0][2]};
   double v2b[3] = {mat[1][0], mat[1][1], mat[1][2]};
   double normal[3];
@@ -972,7 +972,7 @@ void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ)
 {
   double mat[2][3];  
   int n = 3;
-  t->jac(1, 0, 0, 0, 0,mat);
+  t->jac(1, 0, 0, 0, 0, mat);
   double v1[3] = {mat[0][0], mat[0][1], mat[0][2]};
   double v2[3] = {mat[1][0], mat[1][1], mat[1][2]};
   double normal1[3], normal[3];
@@ -980,7 +980,7 @@ void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ)
   double nn = sqrt(SQU(normal1[0]) + SQU(normal1[1]) + SQU(normal1[2]));
   for(int i = 0; i < n; i++){
     for(int k = 0; k < n - i; k++){
-      t->jac((double)i / (n - 1), (double)k / (n - 1), 0,mat);
+      t->jac((double)i / (n - 1), (double)k / (n - 1), 0, mat);
       double v1b[3] = {mat[0][0], mat[0][1], mat[0][2]};
       double v2b[3] = {mat[1][0], mat[1][1], mat[1][2]};
       prodve(v1b, v2b, normal);
@@ -1409,8 +1409,8 @@ void printJacobians(GModel *m, const char *nm)
           SPoint3 pt;
           double u = (double)i / (n - 1);
           double v = (double)k / (n - 1);         
-          t->pnt(u,v,0, pt);        
-          D[i][k] = mesh_functional_distorsion (t,u,v);
+          t->pnt(u, v, 0, pt);
+          D[i][k] = mesh_functional_distorsion(t, u, v);
           X[i][k] = pt.x();
           Y[i][k] = pt.y();
           Z[i][k] = pt.z();
diff --git a/doc/VERSIONS.txt b/doc/VERSIONS.txt
index 4f148c258d..0e621e2a31 100644
--- a/doc/VERSIONS.txt
+++ b/doc/VERSIONS.txt
@@ -1,7 +1,8 @@
-$Id: VERSIONS.txt,v 1.1 2008-07-11 15:55:53 geuzaine Exp $
+$Id: VERSIONS.txt,v 1.2 2008-07-14 19:02:22 geuzaine Exp $
 
-2.2.3 (): enhanced clipping interface; fixed small bugs (Integrate
-plugin).
+2.2.3 (Jul 14, 2008): enhanced clipping interface; API cleanup; fixed
+various bugs (Plugin(Integrate), high order meshes, surface info
+crash).
 
 2.2.2 (Jun 20, 2008): added geometrical transformations on volumes;
 fixed bug in high order mesh generation.
diff --git a/doc/gmsh.html b/doc/gmsh.html
index 292bb1cd55..a2df058084 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -25,7 +25,7 @@ generator with built-in pre- and post-processing facilities</h1>
 <p>
 <h3 align="center">Christophe Geuzaine and Jean-François Remacle</h3>
 <p>
-<h3 align=center>Version 2.2.2, June 20 2008</h3>
+<h3 align=center>Version 2.2.3, July 14 2008</h3>
 <p>
 <center>
   <a href="#Description">Description</a> |
@@ -66,10 +66,10 @@ binary). Tutorial and demos files are included in all the archives.
 <ul>
 <li>
 <strong>Current stable release</strong>:
-<a href="/gmsh/bin/Windows/gmsh-2.2.2-Windows.zip"><strong>Windows</strong></a>,
-<a href="/gmsh/bin/Linux/gmsh-2.2.2-Linux.tgz"><strong>Linux</strong></a>,
-<a href="/gmsh/bin/MacOSX/gmsh-2.2.2-MacOSX.tgz"><strong>Mac OS X</strong></a> and
-<a href="/gmsh/src/gmsh-2.2.2-source.tgz"><strong>source code</strong></a>
+<a href="/gmsh/bin/Windows/gmsh-2.2.3-Windows.zip"><strong>Windows</strong></a>,
+<a href="/gmsh/bin/Linux/gmsh-2.2.3-Linux.tgz"><strong>Linux</strong></a>,
+<a href="/gmsh/bin/MacOSX/gmsh-2.2.3-MacOSX.tgz"><strong>Mac OS X</strong></a> and
+<a href="/gmsh/src/gmsh-2.2.3-source.tgz"><strong>source code</strong></a>
 <a href="#build-footnote" name="build-footmark"><sup>2</sup></a>
 <p>
 <li>Experimental versions (these might be buggy, or might not even
@@ -115,8 +115,8 @@ questions or bug reports.
       <a href="/gmsh/doc/texinfo/gmsh-full.html">single html file</a>)
   <li>Screencasts:
     <ul>
-      <li><a href="/gmsh/screencasts/gmsh_3d.mov">creating a simple 3D model</a> (5'18, 14.7 Mb)
-      <li><a href="/gmsh/screencasts/gmsh_postpro.mov">post-processing basics</a> (5'07, 15.0 Mb)
+      <li><a href="/gmsh/screencasts/gmsh_3d.mov">creating a simple 3D model</a> (5m18s, 14.7Mb)
+      <li><a href="/gmsh/screencasts/gmsh_postpro.mov">post-processing basics</a> (5m07s, 15Mb)
     </ul>
   <li><a href="/gmsh/doc/FAQ.txt">Frequently asked questions (FAQ)</a>
   <li><a href="/gmsh/doc/VERSIONS.txt">Version history</a>
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 410f284267..f1720a9672 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -2481,12 +2481,7 @@ The coordinates are given `by node', i.e.,
 etc.
 @end itemize
 
-The ordering of the nodes is given in @ref{Node ordering}. For second
-order elements, the first order nodes are given first, followed by the nodes
-associated with the edges, followed by the nodes associated with the
-quadrangular faces (if any), followed by the nodes associated with the
-volume (if any). The ordering of these additional nodes follows the ordering
-of the edges and quadrangular faces given in @ref{Node ordering}.
+The ordering of the nodes is given in @ref{Node ordering}.
 
 The values are given by time step, by node and by component, i.e.:
 @example
@@ -3122,12 +3117,7 @@ must be postive integers, or zero. A zero tag is equivalent to no tag.
 
 @item @var{node-number-list}
 is the list of the node numbers of the @var{n}-th element. The ordering of
-the nodes is given in @ref{Node ordering}; for second order elements,
-the first order nodes are given first, followed by the nodes associated with
-the edges, followed by the nodes associated with the quadrangular faces (if
-any), followed by the nodes associated with the volume (if any). The
-ordering of these additional nodes follows the ordering of the edges and
-quadrangular faces given in @ref{Node ordering}.
+the nodes is given in @ref{Node ordering}.
 
 @item @var{number-of-string-tags}
 gives the number of string tags that follow. By default the first
@@ -3275,146 +3265,148 @@ for(i = 0; i < number_of_triangles; i++)@{
 @section Node ordering
 
 @cindex Nodes, ordering
-@cindex Edges, ordering
-@cindex Faces, ordering
 
 For all mesh and post-processing file formats, the reference elements
-are defined as follows. For high-order elements, the ordering of the
-edges/quad faces defines the ordering of high-order vertices associated
-with edges/faces.
+are defined as follows.
 
-@c FIXME: changer la doc des faces pour les definir de maniere sensee
-@c sans butterflies.
-
-@example
+@smallexample
 @group
-Point:
-        v
-        |
-        |
-   -----1-----u
-        |
-        |
-@end group
-@end example
+Line:                   Line3:
+                                                
+0----------1 --> u      0-----2----1
 
-@example
-@group
-Line:
-                  edge 1: nodes 1 2
-        v
-        |
-        |
-   --1-----2--u
-        |
-        |
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Triangle:
-                  edge 1: nodes 1 2
-   v                   2:       2 3
-   |                   3:       3 1
-   |
-   3
-   |\
-   | \
-   |__\___u
-   1   2
+Triangle:               Triangle6:
+
+v
+^
+|
+2                       2           
+|`\                     |`\         
+|  `\                   |  `\       
+|    `\                 5    `4     
+|      `\               |      `\   
+|        `\             |        `\ 
+0----------1 --> u      0-----3----1
+
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Quadrangle:
-                  edge 1: nodes 1 2   quad. face 1: nodes 1 2 3 4
-        v              2:       2 3
-        |              3:       3 4
-     4--|--3           4:       4 1
-     |  |  |
-   -----------u
-     |  |  |
-     1--|--2
-        |
+Quadrangle:            Quadrangle8:            Quadrangle9:
+
+      v
+      ^
+      |
+3-----------2          3-----6-----2           3-----6-----2 
+|     |     |          |           |           |           | 
+|     |     |          |           |           |           | 
+|     +---- | --> u    7           5           7     8     5 
+|           |          |           |           |           | 
+|           |          |           |           |           | 
+0-----------1          0-----4-----1           0-----4-----1 
+
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Tetrahedron:
-                  edge 1: nodes 1 2
-   v                   2:       2 3
-   |                   3:       3 1
-   |                   4:       4 1
-   |                   5:       4 3
-   3                   6:       4 2
-   |\                
-   | \
-   |__\2_____u
-   1\ /
-     \4
-      \
-       w
+Tetrahedron:                          Tetrahedron10:
+
+                   v
+                 .
+               ,/
+              /
+           2                                     2           
+         ,/|`\                                 ,/|`\         
+       ,/  |  `\                             ,/  |  `\       
+     ,/    '.   `\                         ,6    '.   `5     
+   ,/       |     `\                     ,/       8     `\   
+ ,/         |       `\                 ,/         |       `\ 
+0-----------'.--------1 --> u         0--------4--'.--------1
+ `\.         |      ,/                 `\.         |      ,/ 
+    `\.      |    ,/                      `\.      |    ,9   
+       `\.   '. ,/                           `7.   '. ,/     
+          `\. |/                                `\. |/       
+             `3                                    `3        
+                `\.
+                   ` w
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Hexahedron:
-                  edge 1: nodes 1 2   quad. face 1: nodes 1 4 3 2
-        v              2:       1 4              2:       1 2 6 5
-        |              3:       1 5              3:       1 5 8 4
-        |              4:       2 3              4:       2 3 7 6
-   4----|--3           5:       2 6              5:       3 4 8 7
-   |\   |  |\          6:       3 4              6:       5 6 7 8
-   | 8-------7         7:       3 7
-   | |   ----|---u     8:       4 8
-   1-|---\-2 |         9:       5 6
-    \|    \ \|        10:       5 8
-     5-----\-6        11:       6 7
-            \         12:       7 8
-             w
+Hexahedron:             Hexahedron20:          Hexahedron27:
+
+       v
+3----------2            3----13----2           3----13----2     
+|\     ^   |\           |\         |\          |\         |\    
+| \    |   | \          | 15       | 14        |15    24  | 14  
+|  \   |   |  \         9  \       11 \        9  \ 20    11 \  
+|   7------+---6        |   7----19+---6       |   7----19+---6 
+|   |  +-- |-- | -> u   |   |      |   |       |22 |  26  | 23| 
+0---+---\--1   |        0---+-8----1   |       0---+-8----1   | 
+ \  |    \  \  |         \  17      \  18       \ 17    25 \  18
+  \ |     \  \ |         10 |        12|        10 |  21    12| 
+   \|      w  \|           \|         \|          \|         \| 
+    4----------5            4----16----5           4----16----5 
+
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Prism:
-                  edge 1: nodes 1 2   quad. face 1: nodes 1 2 5 4
-      v                2:       1 3              2:       1 4 6 3
-    3 |                3:       1 4              3:       2 3 6 5
-    |\|                4:       2 3
-    | |                5:       2 5
-    1_|2               6:       3 6
-     \| 6              7:       4 5
-      |_|_\___u        8:       4 6
-       \|  \           9:       5 6
-        4 __5
-         \
-          \
+Prism:                      Prism15:               Prism18:
+
            w
+           ^
+           |
+           3                       3                      3        
+         ,/|`\                   ,/|`\                  ,/|`\      
+       ,/  |  `\               12  |  13              12  |  13    
+     ,/    |    `\           ,/    |    `\          ,/    |    `\  
+    4------+------5         4------14-----5        4------14-----5 
+    |      |      |         |      8      |        |      8      | 
+    |    ,/|`\    |         |      |      |        |    ,/|`\    | 
+    |  ,/  |  `\  |         |      |      |        |  15  |  16  | 
+    |,/    |    `\|         |      |      |        |,/    |    `\| 
+   ,|      |      `\        10     |      11       10-----17-----11
+ ,/ |      0      | `\      |      0      |        |      0      | 
+u   |    ,/ `\    |    v    |    ,/ `\    |        |    ,/ `\    | 
+    |  ,/     `\  |         |  ,6     `7  |        |  ,6     `7  | 
+    |,/         `\|         |,/         `\|        |,/         `\| 
+    1-------------2         1------9------2        1------9------2 
+
 @end group
-@end example
+@end smallexample
 
-@example
+@smallexample
 @group
-Pyramid:
-                  edge 1: nodes 1 2   quad. face 1: nodes 1 4 3 2
-        v              2        1 4
-        |              3        1 5
-        |              4        2 3
-    4---|---3          5        2 5
-    | \ |  /|          6        3 4
-    |  \ -/-|---u      7        3 5
-    |  / 5\ |          8        4 5
-    1/----\-2
-           \
-            \
-             w
+Pyramid:                     Pyramid13:                   Pyramid14:
+
+               4                            4                            4
+             ,/|\                         ,/|\                         ,/|\
+           ,/ .'|\                      ,/ .'|\                      ,/ .'|\
+         ,/   | | \                   ,/   | | \                   ,/   | | \
+       ,/    .' | `.                ,/    .' | `.                ,/    .' | `.
+     ,/      |  '.  \             ,7      |  12  \             ,7      |  12  \
+   ,/       .' w |   \          ,/       .'   |   \          ,/       .'   |   \
+ ,/         |  ^ |    \       ,/         9    |    11      ,/         9    |    11
+0----------.'--|-3    `.     0--------6-.'----3    `.     0--------6-.'----3    `.
+ `\        |   |  `\    \      `\        |      `\    \     `\        |      `\    \
+   `\     .'   +----`\ - \ -> v  `5     .'        10   \      `5     .' 13     10   \
+     `\   |    `\     `\  \        `\   |           `\  \       `\   |           `\  \ 
+       `\.'      `\     `\`          `\.'             `\`         `\.'             `\` 
+          1----------------2            1--------8-------2           1--------8-------2
+                    `\
+                       u
 @end group
-@end example
+@end smallexample
 
 @c -------------------------------------------------------------------------
 @c Legacy formats
@@ -3553,13 +3545,7 @@ kept for backward compatibility.
 
 @item @var{node-number-list}
 is the list of the @var{number-of-nodes} node numbers of the @var{n}-th
-element. The ordering of the nodes is given in @ref{Node ordering}; for
-second order elements, the first order nodes are given first, followed
-by the nodes associated with the edges, followed by the nodes associated
-with the quadrangular faces (if any), followed by the nodes associated
-with the volume (if any). The ordering of these additional nodes follows
-the ordering of the edges and quadrangular faces given in @ref{Node
-ordering}.
+element. The ordering of the nodes is given in @ref{Node ordering}.
 @end table
 
 @c .........................................................................
@@ -3688,13 +3674,7 @@ For example, @var{vector-triangle-value} is defined as:
 @dots{}
 @end example
 
-The ordering of the nodes is given in @ref{Node ordering}. For second
-order elements, the first order nodes are given first, followed by the
-nodes associated with the edges, followed by the nodes associated with
-the quadrangular faces (if any), followed by the nodes associated with
-the volume (if any). The ordering of these additional nodes follows the
-ordering of the edges and quadrangular faces given in @ref{Node
-ordering}.
+The ordering of the nodes is given in @ref{Node ordering}.
 
 @item @var{text2d}
 is a list of 4 double precision numbers:
-- 
GitLab