From a1cc83d3229ee65f21536ea4f133947ea193e27a Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Mon, 17 Jun 2013 14:25:57 +0000
Subject: [PATCH] up serendiptity element tag

---
 Common/GmshDefines.h       |  42 ++++----
 Geo/MElement.cpp           | 202 ++++++++++++++++++-------------------
 Geo/MHexahedron.cpp        |  24 ++---
 Geo/MHexahedron.h          |  12 +--
 Geo/MPyramid.cpp           |  14 +--
 Geo/MPyramid.h             |  14 +--
 Numeric/pyramidalBasis.cpp |   4 +
 Post/PViewData.h           |   1 +
 8 files changed, 159 insertions(+), 154 deletions(-)

diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index a63733cce8..fd80245b71 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -159,13 +159,13 @@
 #define MSH_HEX_729  97
 #define MSH_HEX_1000 98
 // HEXES INCOMPLETE (3->9)
-#define MSH_HEX_56   99
-#define MSH_HEX_98  100
-#define MSH_HEX_152 101
-#define MSH_HEX_218 102
-#define MSH_HEX_296 103
-#define MSH_HEX_386 104
-#define MSH_HEX_488 105
+#define MSH_HEX_32   99
+#define MSH_HEX_44  100
+#define MSH_HEX_56 101
+#define MSH_HEX_68 102
+#define MSH_HEX_80 103
+#define MSH_HEX_92 104
+#define MSH_HEX_104 105
 // PRISMS COMPLETE (5->9)
 #define MSH_PRI_126 106
 #define MSH_PRI_196 107
@@ -173,13 +173,13 @@
 #define MSH_PRI_405 109
 #define MSH_PRI_550 110
 // PRISMS INCOMPLETE (3->9)
-#define MSH_PRI_38  111
-#define MSH_PRI_66  112
-#define MSH_PRI_102 113
-#define MSH_PRI_146 114
-#define MSH_PRI_198 115
-#define MSH_PRI_258 116
-#define MSH_PRI_326 117
+#define MSH_PRI_24  111
+#define MSH_PRI_33  112
+#define MSH_PRI_42 113
+#define MSH_PRI_51 114
+#define MSH_PRI_60 115
+#define MSH_PRI_69 116
+#define MSH_PRI_78 117
 // PYRAMIDS COMPLETE (3->9)
 #define MSH_PYR_30  118
 #define MSH_PYR_55  119
@@ -189,13 +189,13 @@
 #define MSH_PYR_285 123
 #define MSH_PYR_385 124
 // PYRAMIDS INCOMPLETE (3->9)
-#define MSH_PYR_29  125
-#define MSH_PYR_50  126
-#define MSH_PYR_77  127
-#define MSH_PYR_110 128
-#define MSH_PYR_149 129
-#define MSH_PYR_194 130
-#define MSH_PYR_245 131
+#define MSH_PYR_21  125
+#define MSH_PYR_29  126
+#define MSH_PYR_37  127
+#define MSH_PYR_45 128
+#define MSH_PYR_53 129
+#define MSH_PYR_61 130
+#define MSH_PYR_69 131
 // Additional types
 #define MSH_PYR_1   132
 #define MSH_PNT_SUB 133
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index 3eda847963..abee8693e7 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1251,13 +1251,13 @@ int MElement::getInfoMSH(const int typeMSH, const char **const name)
   case MSH_HEX_512 : if(name) *name = "Hexahedron 512";   return 512;
   case MSH_HEX_729 : if(name) *name = "Hexahedron 729";   return 729;
   case MSH_HEX_1000: if(name) *name = "Hexahedron 1000";  return 1000;
-  case MSH_HEX_56  : if(name) *name = "Hexahedron 56";    return 56;
-  case MSH_HEX_98  : if(name) *name = "Hexahedron 98";    return 98;
-  case MSH_HEX_152 : if(name) *name = "Hexahedron 152";   return 152;
-  case MSH_HEX_218 : if(name) *name = "Hexahedron 218";   return 218;
-  case MSH_HEX_296 : if(name) *name = "Hexahedron 296";   return 296;
-  case MSH_HEX_386 : if(name) *name = "Hexahedron 386";   return 386;
-  case MSH_HEX_488 : if(name) *name = "Hexahedron 488";   return 488;
+  case MSH_HEX_32  : if(name) *name = "Hexahedron 32";    return 8 + 12*2;
+  case MSH_HEX_44  : if(name) *name = "Hexahedron 44";    return 8 + 12*3;
+  case MSH_HEX_56  : if(name) *name = "Hexahedron 56";    return 8 + 12*4;
+  case MSH_HEX_68  : if(name) *name = "Hexahedron 68";    return 8 + 12*5;
+  case MSH_HEX_80  : if(name) *name = "Hexahedron 80";    return 8 + 12*6;
+  case MSH_HEX_92  : if(name) *name = "Hexahedron 92";    return 8 + 12*7;
+  case MSH_HEX_104 : if(name) *name = "Hexahedron 104";   return 8 + 12*8;
   case MSH_PRI_1   : if(name) *name = "Prism 1";          return 1;
   case MSH_PRI_6   : if(name) *name = "Prism 6";          return 6;
   case MSH_PRI_15  : if(name) *name = "Prism 15";         return 6 + 9;
@@ -1268,14 +1268,14 @@ int MElement::getInfoMSH(const int typeMSH, const char **const name)
   case MSH_PRI_196 : if(name) *name = "Prism 196";        return 6 + 45 + 75+20 + 5*10;
   case MSH_PRI_288 : if(name) *name = "Prism 288";        return 6 + 54 + 108+30 + 6*15;
   case MSH_PRI_405 : if(name) *name = "Prism 405";        return 6 + 63 + 147+42 + 7*21;
-  case MSH_PRI_550 : if(name) *name = "Prism 550";        return 6 + 72 + 196+56 + 8*28;
-  case MSH_PRI_38  : if(name) *name = "Prism 38";         return 6 + 18 + 12+2;
-  case MSH_PRI_66  : if(name) *name = "Prism 66";         return 6 + 27 + 27+6;
-  case MSH_PRI_102 : if(name) *name = "Prism 102";        return 6 + 36 + 48+12;
-  case MSH_PRI_146 : if(name) *name = "Prism 146";        return 6 + 45 + 75+20;
-  case MSH_PRI_198 : if(name) *name = "Prism 198";        return 6 + 54 + 108+30;
-  case MSH_PRI_258 : if(name) *name = "Prism 258";        return 6 + 63 + 147+42;
-  case MSH_PRI_326 : if(name) *name = "Prism 326";        return 6 + 72 + 196+56;
+  case MSH_PRI_550 : if(name) *name = "Prism 550";        return 6 + 72 + 192+56 + 8*28;
+  case MSH_PRI_24  : if(name) *name = "Prism 24";         return 6 + 9*2;
+  case MSH_PRI_33  : if(name) *name = "Prism 33";         return 6 + 9*3;
+  case MSH_PRI_42  : if(name) *name = "Prism 42";         return 6 + 9*4;
+  case MSH_PRI_51  : if(name) *name = "Prism 51";         return 6 + 9*5;
+  case MSH_PRI_60  : if(name) *name = "Prism 60";         return 6 + 9*6;
+  case MSH_PRI_69  : if(name) *name = "Prism 69";         return 6 + 9*7;
+  case MSH_PRI_78  : if(name) *name = "Prism 78";         return 6 + 9*8;
   case MSH_PYR_1   : if(name) *name = "Pyramid 1";        return 1;
   case MSH_PYR_5   : if(name) *name = "Pyramid 5";        return 5;
   case MSH_PYR_13  : if(name) *name = "Pyramid 13";       return 5 + 8;
@@ -1287,13 +1287,13 @@ int MElement::getInfoMSH(const int typeMSH, const char **const name)
   case MSH_PYR_204 : if(name) *name = "Pyramid 204";      return 5 + 8*6 + 4*15 + 1*36 + 55;
   case MSH_PYR_285 : if(name) *name = "Pyramid 285";      return 5 + 8*7 + 4*21 + 1*49 + 91;
   case MSH_PYR_385 : if(name) *name = "Pyramid 385";      return 5 + 8*8 + 4*28 + 1*64 + 140;
-  case MSH_PYR_29  : if(name) *name = "Pyramid 29";       return 5 + 8*2 + 4*1  + 1*4;
-  case MSH_PYR_50  : if(name) *name = "Pyramid 50";       return 5 + 8*3 + 4*3  + 1*9;
-  case MSH_PYR_77  : if(name) *name = "Pyramid 77";       return 5 + 8*4 + 4*6  + 1*16;
-  case MSH_PYR_110 : if(name) *name = "Pyramid 110";      return 5 + 8*5 + 4*10 + 1*25;
-  case MSH_PYR_149 : if(name) *name = "Pyramid 149";      return 5 + 8*6 + 4*15 + 1*36;
-  case MSH_PYR_194 : if(name) *name = "Pyramid 194";      return 5 + 8*7 + 4*21 + 1*49;
-  case MSH_PYR_245 : if(name) *name = "Pyramid 245";      return 5 + 8*8 + 4*28 + 1*64;
+  case MSH_PYR_21  : if(name) *name = "Pyramid 21";       return 5 + 8*2;
+  case MSH_PYR_29  : if(name) *name = "Pyramid 29";       return 5 + 8*3;
+  case MSH_PYR_37  : if(name) *name = "Pyramid 37";       return 5 + 8*4;
+  case MSH_PYR_45  : if(name) *name = "Pyramid 45";       return 5 + 8*5;
+  case MSH_PYR_53  : if(name) *name = "Pyramid 53";       return 5 + 8*6;
+  case MSH_PYR_61  : if(name) *name = "Pyramid 61";       return 5 + 8*7;
+  case MSH_PYR_69  : if(name) *name = "Pyramid 69";       return 5 + 8*8;
   case MSH_POLYH_  : if(name) *name = "Polyhedron";       return 0;
   case MSH_PNT_SUB : if(name) *name = "Point Xfem";       return 1;
   case MSH_LIN_SUB : if(name) *name = "Line Xfem";        return 2;
@@ -1437,30 +1437,30 @@ int MElement::ParentTypeFromTag(int tag)
     case(MSH_PYR_55):   case(MSH_PYR_91):
     case(MSH_PYR_140):  case(MSH_PYR_204):
     case(MSH_PYR_285):  case(MSH_PYR_385):
-    case(MSH_PYR_29):   case(MSH_PYR_50):
-    case(MSH_PYR_77):   case(MSH_PYR_110):
-    case(MSH_PYR_149):  case(MSH_PYR_194):
-    case(MSH_PYR_245):  case(MSH_PYR_1):
+    case(MSH_PYR_21):   case(MSH_PYR_29):
+    case(MSH_PYR_37):   case(MSH_PYR_45):
+    case(MSH_PYR_53):  case(MSH_PYR_61):
+    case(MSH_PYR_69):  case(MSH_PYR_1):
       return TYPE_PYR;
     case(MSH_PRI_6):    case(MSH_PRI_18):
     case(MSH_PRI_15):   case(MSH_PRI_1):
     case(MSH_PRI_40):   case(MSH_PRI_75):
     case(MSH_PRI_126):  case(MSH_PRI_196):
     case(MSH_PRI_288):  case(MSH_PRI_405):
-    case(MSH_PRI_550):  case(MSH_PRI_38):
-    case(MSH_PRI_66):   case(MSH_PRI_102):
-    case(MSH_PRI_146):  case(MSH_PRI_198):
-    case(MSH_PRI_258):  case(MSH_PRI_326):
+    case(MSH_PRI_550):  case(MSH_PRI_24):
+    case(MSH_PRI_33):   case(MSH_PRI_42):
+    case(MSH_PRI_51):  case(MSH_PRI_60):
+    case(MSH_PRI_69):  case(MSH_PRI_78):
       return TYPE_PRI;
     case(MSH_HEX_8):    case(MSH_HEX_27):
     case(MSH_HEX_20):   case(MSH_HEX_1):
     case(MSH_HEX_64):   case(MSH_HEX_125):
     case(MSH_HEX_216):  case(MSH_HEX_343):
     case(MSH_HEX_512):  case(MSH_HEX_729):
-    case(MSH_HEX_1000): case(MSH_HEX_56):
-    case(MSH_HEX_98):   case(MSH_HEX_152):
-    case(MSH_HEX_218):  case(MSH_HEX_296):
-    case(MSH_HEX_386):  case(MSH_HEX_488):
+    case(MSH_HEX_1000): case(MSH_HEX_32):
+    case(MSH_HEX_44):   case(MSH_HEX_56):
+    case(MSH_HEX_68):  case(MSH_HEX_80):
+    case(MSH_HEX_92):  case(MSH_HEX_104):
       return TYPE_HEX;
     case(MSH_POLYG_):   case(MSH_POLYG_B):
       return TYPE_POLYG;
@@ -1560,13 +1560,13 @@ int MElement::OrderFromTag(int tag)
   case MSH_PRI_405 : return 8;
   case MSH_PRI_550 : return 9;
   case MSH_PRI_15  : return 2;
-  case MSH_PRI_38  : return 3;
-  case MSH_PRI_66  : return 4;
-  case MSH_PRI_102 : return 5;
-  case MSH_PRI_146 : return 6;
-  case MSH_PRI_198 : return 7;
-  case MSH_PRI_258 : return 8;
-  case MSH_PRI_326 : return 9;
+  case MSH_PRI_24  : return 3;
+  case MSH_PRI_33  : return 4;
+  case MSH_PRI_42 : return 5;
+  case MSH_PRI_51 : return 6;
+  case MSH_PRI_60 : return 7;
+  case MSH_PRI_69 : return 8;
+  case MSH_PRI_78 : return 9;
   case MSH_HEX_1   : return 0;
   case MSH_HEX_8   : return 1;
   case MSH_HEX_27  : return 2;
@@ -1578,13 +1578,13 @@ int MElement::OrderFromTag(int tag)
   case MSH_HEX_729 : return 8;
   case MSH_HEX_1000: return 9;
   case MSH_HEX_20  : return 2;
-  case MSH_HEX_56  : return 3;
-  case MSH_HEX_98  : return 4;
-  case MSH_HEX_152 : return 5;
-  case MSH_HEX_218 : return 6;
-  case MSH_HEX_296 : return 7;
-  case MSH_HEX_386 : return 8;
-  case MSH_HEX_488 : return 9;
+  case MSH_HEX_32  : return 3;
+  case MSH_HEX_44  : return 4;
+  case MSH_HEX_56 : return 5;
+  case MSH_HEX_68 : return 6;
+  case MSH_HEX_80 : return 7;
+  case MSH_HEX_92 : return 8;
+  case MSH_HEX_104 : return 9;
   case MSH_PYR_1   : return 0;
   case MSH_PYR_5   : return 1;
   case MSH_PYR_14  : return 2;
@@ -1596,13 +1596,13 @@ int MElement::OrderFromTag(int tag)
   case MSH_PYR_285 : return 8;
   case MSH_PYR_385 : return 9;
   case MSH_PYR_13  : return 2;
-  case MSH_PYR_29  : return 3;
-  case MSH_PYR_50  : return 4;
-  case MSH_PYR_77  : return 5;
-  case MSH_PYR_110 : return 6;
-  case MSH_PYR_149 : return 7;
-  case MSH_PYR_194 : return 8;
-  case MSH_PYR_245 : return 9;
+  case MSH_PYR_21  : return 3;
+  case MSH_PYR_29  : return 4;
+  case MSH_PYR_37  : return 5;
+  case MSH_PYR_45 : return 6;
+  case MSH_PYR_53 : return 7;
+  case MSH_PYR_61 : return 8;
+  case MSH_PYR_69 : return 9;
   default :
     Msg::Error("Unknown element type %d: reverting to order 1",tag);
     return 1;
@@ -1689,20 +1689,20 @@ int MElement::SerendipityFromTag(int tag)
   case MSH_TET_130 : case MSH_TET_164 :
   case MSH_TET_202 :
 
-  case MSH_PRI_15  : case MSH_PRI_38  :
-  case MSH_PRI_66  : case MSH_PRI_102 :
-  case MSH_PRI_146 : case MSH_PRI_198 :
-  case MSH_PRI_258 : case MSH_PRI_326 :
+  case MSH_PRI_15  : case MSH_PRI_24  :
+  case MSH_PRI_33  : case MSH_PRI_42 :
+  case MSH_PRI_51 : case MSH_PRI_60 :
+  case MSH_PRI_69 : case MSH_PRI_78 :
 
-  case MSH_HEX_20  : case MSH_HEX_56  :
-  case MSH_HEX_98  : case MSH_HEX_152 :
-  case MSH_HEX_218 : case MSH_HEX_296 :
-  case MSH_HEX_386 : case MSH_HEX_488 :
+  case MSH_HEX_20  : case MSH_HEX_32  :
+  case MSH_HEX_44  : case MSH_HEX_56 :
+  case MSH_HEX_68 : case MSH_HEX_80 :
+  case MSH_HEX_92 : case MSH_HEX_104 :
 
-  case MSH_PYR_13  : case MSH_PYR_29  :
-  case MSH_PYR_50  : case MSH_PYR_77  :
-  case MSH_PYR_110 : case MSH_PYR_149 :
-  case MSH_PYR_194 : case MSH_PYR_245 :
+  case MSH_PYR_13  : case MSH_PYR_21  :
+  case MSH_PYR_29  : case MSH_PYR_37  :
+  case MSH_PYR_45 : case MSH_PYR_53 :
+  case MSH_PYR_61 : case MSH_PYR_69 :
 
     return 2; // Only Serendipity
 
@@ -1770,30 +1770,30 @@ int MElement::DimensionFromTag(int tag)
     case(MSH_PYR_55):   case(MSH_PYR_91):
     case(MSH_PYR_140):  case(MSH_PYR_204):
     case(MSH_PYR_285):  case(MSH_PYR_385):
-    case(MSH_PYR_29):   case(MSH_PYR_50):
-    case(MSH_PYR_77):   case(MSH_PYR_110):
-    case(MSH_PYR_149):  case(MSH_PYR_194):
-    case(MSH_PYR_245):  case(MSH_PYR_1):
+    case(MSH_PYR_21):   case(MSH_PYR_29):
+    case(MSH_PYR_37):   case(MSH_PYR_45):
+    case(MSH_PYR_53):  case(MSH_PYR_61):
+    case(MSH_PYR_69):  case(MSH_PYR_1):
 
     case(MSH_PRI_6):    case(MSH_PRI_18):
     case(MSH_PRI_15):   case(MSH_PRI_1):
     case(MSH_PRI_40):   case(MSH_PRI_75):
     case(MSH_PRI_126):  case(MSH_PRI_196):
     case(MSH_PRI_288):  case(MSH_PRI_405):
-    case(MSH_PRI_550):  case(MSH_PRI_38):
-    case(MSH_PRI_66):   case(MSH_PRI_102):
-    case(MSH_PRI_146):  case(MSH_PRI_198):
-    case(MSH_PRI_258):  case(MSH_PRI_326):
+    case(MSH_PRI_550):  case(MSH_PRI_24):
+    case(MSH_PRI_33):   case(MSH_PRI_42):
+    case(MSH_PRI_51):  case(MSH_PRI_60):
+    case(MSH_PRI_69):  case(MSH_PRI_78):
 
     case(MSH_HEX_8):    case(MSH_HEX_27):
     case(MSH_HEX_20):   case(MSH_HEX_1):
     case(MSH_HEX_64):   case(MSH_HEX_125):
     case(MSH_HEX_216):  case(MSH_HEX_343):
     case(MSH_HEX_512):  case(MSH_HEX_729):
-    case(MSH_HEX_1000): case(MSH_HEX_56):
-    case(MSH_HEX_98):   case(MSH_HEX_152):
-    case(MSH_HEX_218):  case(MSH_HEX_296):
-    case(MSH_HEX_386):  case(MSH_HEX_488):
+    case(MSH_HEX_1000): case(MSH_HEX_32):
+    case(MSH_HEX_44):   case(MSH_HEX_56):
+    case(MSH_HEX_68):  case(MSH_HEX_80):
+    case(MSH_HEX_92):  case(MSH_HEX_104):
 
     case(MSH_POLYH_):
       return 3;
@@ -1878,13 +1878,13 @@ int MElement::getTag(int parentTag, int order, bool serendip)
     case 0 : return MSH_HEX_1;
     case 1 : return MSH_HEX_8;
     case 2 : return serendip ? MSH_HEX_20 : MSH_HEX_27;
-    case 3 : return serendip ? MSH_HEX_56 : MSH_HEX_64;
-    case 4 : return serendip ? MSH_HEX_98 : MSH_HEX_125;
-    case 5 : return serendip ? MSH_HEX_152: MSH_HEX_216;
-    case 6 : return serendip ? MSH_HEX_218: MSH_HEX_343;
-    case 7 : return serendip ? MSH_HEX_296: MSH_HEX_512;
-    case 8 : return serendip ? MSH_HEX_386: MSH_HEX_729;
-    case 9 : return serendip ? MSH_HEX_488: MSH_HEX_1000;
+    case 3 : return serendip ? MSH_HEX_32 : MSH_HEX_64;
+    case 4 : return serendip ? MSH_HEX_44 : MSH_HEX_125;
+    case 5 : return serendip ? MSH_HEX_56: MSH_HEX_216;
+    case 6 : return serendip ? MSH_HEX_68: MSH_HEX_343;
+    case 7 : return serendip ? MSH_HEX_80: MSH_HEX_512;
+    case 8 : return serendip ? MSH_HEX_92: MSH_HEX_729;
+    case 9 : return serendip ? MSH_HEX_104: MSH_HEX_1000;
     default : Msg::Error("hexahedron order %i unknown", order); return 0;
     }
     break;
@@ -1893,13 +1893,13 @@ int MElement::getTag(int parentTag, int order, bool serendip)
     case 0 : return MSH_PRI_1;
     case 1 : return MSH_PRI_6;
     case 2 : return serendip ? MSH_PRI_15 : MSH_PRI_18;
-    case 3 : return serendip ? MSH_PRI_38 : MSH_PRI_40;
-    case 4 : return serendip ? MSH_PRI_66 : MSH_PRI_75;
-    case 5 : return serendip ? MSH_PRI_102 : MSH_PRI_126;
-    case 6 : return serendip ? MSH_PRI_146 : MSH_PRI_196;
-    case 7 : return serendip ? MSH_PRI_198 : MSH_PRI_288;
-    case 8 : return serendip ? MSH_PRI_258 : MSH_PRI_405;
-    case 9 : return serendip ? MSH_PRI_326 : MSH_PRI_550;
+    case 3 : return serendip ? MSH_PRI_24 : MSH_PRI_40;
+    case 4 : return serendip ? MSH_PRI_33 : MSH_PRI_75;
+    case 5 : return serendip ? MSH_PRI_42 : MSH_PRI_126;
+    case 6 : return serendip ? MSH_PRI_51 : MSH_PRI_196;
+    case 7 : return serendip ? MSH_PRI_60 : MSH_PRI_288;
+    case 8 : return serendip ? MSH_PRI_69 : MSH_PRI_405;
+    case 9 : return serendip ? MSH_PRI_78 : MSH_PRI_550;
     default : Msg::Error("prism order %i unknown", order); return 0;
     }
     break;
@@ -1908,13 +1908,13 @@ int MElement::getTag(int parentTag, int order, bool serendip)
     case 0 : return MSH_PYR_1;
     case 1 : return MSH_PYR_5;
     case 2 : return serendip ? MSH_PYR_13 : MSH_PYR_14;
-    case 3: return serendip ? MSH_PYR_29 : MSH_PYR_30;
-    case 4: return serendip ? MSH_PYR_50 : MSH_PYR_55;
-    case 5: return serendip ? MSH_PYR_77 : MSH_PYR_91;
-    case 6: return serendip ? MSH_PYR_110 : MSH_PYR_140;
-    case 7: return serendip ? MSH_PYR_149 : MSH_PYR_204;
-    case 8: return serendip ? MSH_PYR_194 : MSH_PYR_285;
-    case 9: return serendip ? MSH_PYR_245 : MSH_PYR_385;
+    case 3: return serendip ? MSH_PYR_21 : MSH_PYR_30;
+    case 4: return serendip ? MSH_PYR_29 : MSH_PYR_55;
+    case 5: return serendip ? MSH_PYR_37 : MSH_PYR_91;
+    case 6: return serendip ? MSH_PYR_45 : MSH_PYR_140;
+    case 7: return serendip ? MSH_PYR_53 : MSH_PYR_204;
+    case 8: return serendip ? MSH_PYR_61 : MSH_PYR_285;
+    case 9: return serendip ? MSH_PYR_69 : MSH_PYR_385;
     default : Msg::Error("pyramid order %i unknown", order); return 0;
     }
     break;
@@ -1987,7 +1987,7 @@ MElement *MElementFactory::create(int type, std::vector<MVertex*> &v,
   case MSH_TET_220: return new MTetrahedronN(v, 9, num, part);
   case MSH_TET_286: return new MTetrahedronN(v, 10, num, part);
   case MSH_POLYH_:  return new MPolyhedron(v, num, part, owner, parent);
-  case MSH_HEX_56:  return new MHexahedronN(v, 3, num, part);
+  case MSH_HEX_32:  return new MHexahedronN(v, 3, num, part);
   case MSH_HEX_64:  return new MHexahedronN(v, 3, num, part);
   case MSH_HEX_125: return new MHexahedronN(v, 4, num, part);
   case MSH_HEX_216: return new MHexahedronN(v, 5, num, part);
diff --git a/Geo/MHexahedron.cpp b/Geo/MHexahedron.cpp
index 29cfc61496..93909ec0df 100644
--- a/Geo/MHexahedron.cpp
+++ b/Geo/MHexahedron.cpp
@@ -202,12 +202,12 @@ const nodalBasis* MHexahedron::getFunctionSpace(int o) const
     case 1: return BasisFactory::getNodalBasis(MSH_HEX_8);
     case 2: return BasisFactory::getNodalBasis(MSH_HEX_20);
     case 3: return BasisFactory::getNodalBasis(MSH_HEX_56);
-    case 4: return BasisFactory::getNodalBasis(MSH_HEX_98);
-    case 5: return BasisFactory::getNodalBasis(MSH_HEX_152);
-    case 6: return BasisFactory::getNodalBasis(MSH_HEX_218);
-    case 7: return BasisFactory::getNodalBasis(MSH_HEX_296);
-    case 8: return BasisFactory::getNodalBasis(MSH_HEX_386);
-    case 9: return BasisFactory::getNodalBasis(MSH_HEX_488);
+    case 4: return BasisFactory::getNodalBasis(MSH_HEX_44);
+    case 5: return BasisFactory::getNodalBasis(MSH_HEX_56);
+    case 6: return BasisFactory::getNodalBasis(MSH_HEX_68);
+    case 7: return BasisFactory::getNodalBasis(MSH_HEX_80);
+    case 8: return BasisFactory::getNodalBasis(MSH_HEX_92);
+    case 9: return BasisFactory::getNodalBasis(MSH_HEX_104);
     default: Msg::Error("Order %d hex function space not implemented", order); break;
     }
   }
@@ -241,12 +241,12 @@ const JacobianBasis* MHexahedron::getJacobianFuncSpace(int o) const
     case 1: return BasisFactory::getJacobianBasis(MSH_HEX_8);
     case 2: return BasisFactory::getJacobianBasis(MSH_HEX_20);
     case 3: return BasisFactory::getJacobianBasis(MSH_HEX_56);
-    case 4: return BasisFactory::getJacobianBasis(MSH_HEX_98);
-    case 5: return BasisFactory::getJacobianBasis(MSH_HEX_152);
-    case 6: return BasisFactory::getJacobianBasis(MSH_HEX_218);
-    case 7: return BasisFactory::getJacobianBasis(MSH_HEX_296);
-    case 8: return BasisFactory::getJacobianBasis(MSH_HEX_386);
-    case 9: return BasisFactory::getJacobianBasis(MSH_HEX_488);
+    case 4: return BasisFactory::getJacobianBasis(MSH_HEX_44);
+    case 5: return BasisFactory::getJacobianBasis(MSH_HEX_56);
+    case 6: return BasisFactory::getJacobianBasis(MSH_HEX_68);
+    case 7: return BasisFactory::getJacobianBasis(MSH_HEX_80);
+    case 8: return BasisFactory::getJacobianBasis(MSH_HEX_92);
+    case 9: return BasisFactory::getJacobianBasis(MSH_HEX_104);
     default: Msg::Error("Order %d hex incomplete Jacobian function space not implemented", order); break;
     }
   }
diff --git a/Geo/MHexahedron.h b/Geo/MHexahedron.h
index ccadb418bd..e4596d809e 100644
--- a/Geo/MHexahedron.h
+++ b/Geo/MHexahedron.h
@@ -526,12 +526,12 @@ class MHexahedronN : public MHexahedron {
     if(_order == 8 && _vs.size() + 8 == 729) return MSH_HEX_729;
     if(_order == 9 && _vs.size() + 8 == 1000) return MSH_HEX_1000;
     if(_order == 3 && _vs.size() + 8 == 56 ) return MSH_HEX_56;
-    if(_order == 4 && _vs.size() + 8 == 98) return MSH_HEX_98;
-    if(_order == 5 && _vs.size() + 8 == 152) return MSH_HEX_152;
-    if(_order == 6 && _vs.size() + 8 == 222) return MSH_HEX_218;
-    if(_order == 7 && _vs.size() + 8 == 296) return MSH_HEX_296;
-    if(_order == 8 && _vs.size() + 8 == 386) return MSH_HEX_386;
-    if(_order == 9 && _vs.size() + 8 == 488) return MSH_HEX_488;
+    if(_order == 4 && _vs.size() + 8 == 98) return MSH_HEX_44;
+    if(_order == 5 && _vs.size() + 8 == 152) return MSH_HEX_56;
+    if(_order == 6 && _vs.size() + 8 == 222) return MSH_HEX_68;
+    if(_order == 7 && _vs.size() + 8 == 296) return MSH_HEX_80;
+    if(_order == 8 && _vs.size() + 8 == 386) return MSH_HEX_92;
+    if(_order == 9 && _vs.size() + 8 == 488) return MSH_HEX_104;
     return 0;
   }
   virtual int getNumFacesRep();
diff --git a/Geo/MPyramid.cpp b/Geo/MPyramid.cpp
index 1a44f7c4b6..650cb5115b 100644
--- a/Geo/MPyramid.cpp
+++ b/Geo/MPyramid.cpp
@@ -38,13 +38,13 @@ const nodalBasis* MPyramid::getFunctionSpace(int o) const
     case 1: return BasisFactory::getNodalBasis(MSH_PYR_5);
     case 2: return BasisFactory::getNodalBasis(MSH_PYR_14);
     case 0: return BasisFactory::getNodalBasis(MSH_PYR_1);
-    case 3: return BasisFactory::getNodalBasis(MSH_PYR_29);
-    case 4: return BasisFactory::getNodalBasis(MSH_PYR_50);
-    case 5: return BasisFactory::getNodalBasis(MSH_PYR_77);
-    case 6: return BasisFactory::getNodalBasis(MSH_PYR_110);
-    case 7: return BasisFactory::getNodalBasis(MSH_PYR_149);
-    case 8: return BasisFactory::getNodalBasis(MSH_PYR_194);
-    case 9: return BasisFactory::getNodalBasis(MSH_PYR_245);
+    case 3: return BasisFactory::getNodalBasis(MSH_PYR_21);
+    case 4: return BasisFactory::getNodalBasis(MSH_PYR_29);
+    case 5: return BasisFactory::getNodalBasis(MSH_PYR_37);
+    case 6: return BasisFactory::getNodalBasis(MSH_PYR_45);
+    case 7: return BasisFactory::getNodalBasis(MSH_PYR_53);
+    case 8: return BasisFactory::getNodalBasis(MSH_PYR_61);
+    case 9: return BasisFactory::getNodalBasis(MSH_PYR_69);
     default: Msg::Error("Order %d pyramid function space not implemented", order);
     }
   }
diff --git a/Geo/MPyramid.h b/Geo/MPyramid.h
index 19fdbc628d..ce640721f5 100644
--- a/Geo/MPyramid.h
+++ b/Geo/MPyramid.h
@@ -293,19 +293,19 @@ class MPyramidN : public MPyramid {
   {
     if(_order == 2 && _vs.size() + 5 == 13) return MSH_PYR_13;
     if(_order == 2 && _vs.size() + 5 == 14) return MSH_PYR_14;
-    if(_order == 3 && _vs.size() + 5 == 29) return MSH_PYR_29;
+    if(_order == 3 && _vs.size() + 5 == 29) return MSH_PYR_21;
     if(_order == 3 && _vs.size() + 5 == 30) return MSH_PYR_30;
-    if(_order == 4 && _vs.size() + 5 == 50) return MSH_PYR_50;
+    if(_order == 4 && _vs.size() + 5 == 50) return MSH_PYR_29;
     if(_order == 4 && _vs.size() + 5 == 55) return MSH_PYR_55;
-    if(_order == 5 && _vs.size() + 5 == 77) return MSH_PYR_77;
+    if(_order == 5 && _vs.size() + 5 == 77) return MSH_PYR_37;
     if(_order == 5 && _vs.size() + 5 == 91) return MSH_PYR_91;
-    if(_order == 6 && _vs.size() + 5 == 110) return MSH_PYR_110;
+    if(_order == 6 && _vs.size() + 5 == 110) return MSH_PYR_45;
     if(_order == 6 && _vs.size() + 5 == 140) return MSH_PYR_140;
-    if(_order == 7 && _vs.size() + 5 == 149) return MSH_PYR_149;
+    if(_order == 7 && _vs.size() + 5 == 149) return MSH_PYR_53;
     if(_order == 7 && _vs.size() + 5 == 204) return MSH_PYR_204;
-    if(_order == 8 && _vs.size() + 5 == 194) return MSH_PYR_194;
+    if(_order == 8 && _vs.size() + 5 == 194) return MSH_PYR_61;
     if(_order == 8 && _vs.size() + 5 == 285) return MSH_PYR_285;
-    if(_order == 9 && _vs.size() + 5 == 245) return MSH_PYR_245;
+    if(_order == 9 && _vs.size() + 5 == 245) return MSH_PYR_69;
     if(_order == 9 && _vs.size() + 5 == 385) return MSH_PYR_385;
     return 0;
   }
diff --git a/Numeric/pyramidalBasis.cpp b/Numeric/pyramidalBasis.cpp
index 069d027599..a16e1ffd30 100644
--- a/Numeric/pyramidalBasis.cpp
+++ b/Numeric/pyramidalBasis.cpp
@@ -9,6 +9,10 @@
 
 pyramidalBasis::pyramidalBasis(int tag) : nodalBasis(tag)
 {
+  if (serendip) {
+    Msg::Error("Serendipity Pyramid not implemented");
+    return;
+  }
 
   bergot = new BergotBasis(order);
 
diff --git a/Post/PViewData.h b/Post/PViewData.h
index 998863cd89..73c3ae5a55 100644
--- a/Post/PViewData.h
+++ b/Post/PViewData.h
@@ -201,6 +201,7 @@ class PViewData {
   adaptiveData *getAdaptiveData(){ return _adaptive; }
 
   // set/get the interpolation matrices for elements with type "type"
+  // FIXME : too much overload :(
   void setInterpolationMatrices(int type,
                                 const fullMatrix<double> &coefVal,
                                 const fullMatrix<double> &expVal);
-- 
GitLab