From 8ccd0accecb190bd50d6a8ab23b2fb6bad13a3e7 Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Mon, 17 Jun 2013 12:20:38 +0000
Subject: [PATCH] move getTag(..) from nodalBasis to MElement

---
 FunctionSpace/LineLagrangeBasis.cpp           |   2 +-
 FunctionSpace/QuadLagrangeBasis.cpp           |   2 +-
 FunctionSpace/TetLagrangeBasis.cpp            |   2 +-
 FunctionSpace/TriLagrangeBasis.cpp            |   2 +-
 Geo/MElement.cpp                              | 118 +++++++++++++++++
 Geo/MElement.h                                |   1 +
 Numeric/JacobianBasis.cpp                     |   6 +-
 Numeric/nodalBasis.cpp                        |  10 +-
 Numeric/nodalBasis.h                          | 122 ------------------
 contrib/DiscreteIntegration/Integration3D.cpp |  10 +-
 10 files changed, 136 insertions(+), 139 deletions(-)

diff --git a/FunctionSpace/LineLagrangeBasis.cpp b/FunctionSpace/LineLagrangeBasis.cpp
index 26c0bb64ba..c9ab665b93 100644
--- a/FunctionSpace/LineLagrangeBasis.cpp
+++ b/FunctionSpace/LineLagrangeBasis.cpp
@@ -33,7 +33,7 @@ LineLagrangeBasis::~LineLagrangeBasis(void){
 }
 
 unsigned int LineLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = nodalBasis::getTag(TYPE_LIN, order, false);
+  unsigned int tag = MElement::getTag(TYPE_LIN, order, false);
 
   if(tag)
     return tag;
diff --git a/FunctionSpace/QuadLagrangeBasis.cpp b/FunctionSpace/QuadLagrangeBasis.cpp
index b8f78f2f76..78c5cfa220 100644
--- a/FunctionSpace/QuadLagrangeBasis.cpp
+++ b/FunctionSpace/QuadLagrangeBasis.cpp
@@ -33,7 +33,7 @@ QuadLagrangeBasis::~QuadLagrangeBasis(void){
 }
 
 unsigned int QuadLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = nodalBasis::getTag(TYPE_QUA, order, false);
+  unsigned int tag = MElement::getTag(TYPE_QUA, order, false);
 
   if(tag)
     return tag;
diff --git a/FunctionSpace/TetLagrangeBasis.cpp b/FunctionSpace/TetLagrangeBasis.cpp
index 6d4fcbc321..b4cae893d6 100644
--- a/FunctionSpace/TetLagrangeBasis.cpp
+++ b/FunctionSpace/TetLagrangeBasis.cpp
@@ -33,7 +33,7 @@ TetLagrangeBasis::~TetLagrangeBasis(void){
 }
 
 unsigned int TetLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = nodalBasis::getTag(TYPE_TET, order, false);
+  unsigned int tag = MElement::getTag(TYPE_TET, order, false);
 
   if(tag)
     return tag;
diff --git a/FunctionSpace/TriLagrangeBasis.cpp b/FunctionSpace/TriLagrangeBasis.cpp
index e99e07974c..bf41e9765a 100644
--- a/FunctionSpace/TriLagrangeBasis.cpp
+++ b/FunctionSpace/TriLagrangeBasis.cpp
@@ -41,7 +41,7 @@ TriLagrangeBasis::~TriLagrangeBasis(void){
 }
 
 unsigned int TriLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = nodalBasis::getTag(TYPE_TRI, order, false);
+  unsigned int tag = MElement::getTag(TYPE_TRI, order, false);
 
   if(tag)
     return tag;
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index b36035c023..3eda847963 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1804,6 +1804,124 @@ int MElement::DimensionFromTag(int tag)
   }
 }
 
+int MElement::getTag(int parentTag, int order, bool serendip)
+{
+  switch (parentTag) {
+  case TYPE_PNT :
+    return MSH_PNT;
+  case TYPE_LIN :
+    switch(order) {
+    case 0 : return MSH_LIN_1;
+    case 1 : return MSH_LIN_2;
+    case 2 : return MSH_LIN_3;
+    case 3 : return MSH_LIN_4;
+    case 4 : return MSH_LIN_5;
+    case 5 : return MSH_LIN_6;
+    case 6 : return MSH_LIN_7;
+    case 7 : return MSH_LIN_8;
+    case 8 : return MSH_LIN_9;
+    case 9 : return MSH_LIN_10;
+    case 10: return MSH_LIN_11;
+    default : Msg::Error("line order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_TRI :
+    switch(order) {
+    case 0 : return MSH_TRI_1;
+    case 1 : return MSH_TRI_3;
+    case 2 : return MSH_TRI_6;
+    case 3 : return serendip ? MSH_TRI_9  : MSH_TRI_10;
+    case 4 : return serendip ? MSH_TRI_12 : MSH_TRI_15;
+    case 5 : return serendip ? MSH_TRI_15I: MSH_TRI_21;
+    case 6 : return serendip ? MSH_TRI_18 : MSH_TRI_28;
+    case 7 : return serendip ? MSH_TRI_21I: MSH_TRI_36;
+    case 8 : return serendip ? MSH_TRI_24 : MSH_TRI_45;
+    case 9 : return serendip ? MSH_TRI_27 : MSH_TRI_55;
+    case 10: return serendip ? MSH_TRI_30 : MSH_TRI_66;
+    default : Msg::Error("triangle order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_QUA :
+    switch(order) {
+    case 0 : return MSH_QUA_1;
+    case 1 : return MSH_QUA_4;
+    case 2 : return serendip ? MSH_QUA_8  : MSH_QUA_9;
+    case 3 : return serendip ? MSH_QUA_12 : MSH_QUA_16;
+    case 4 : return serendip ? MSH_QUA_16I: MSH_QUA_25;
+    case 5 : return serendip ? MSH_QUA_20 : MSH_QUA_36;
+    case 6 : return serendip ? MSH_QUA_24 : MSH_QUA_49;
+    case 7 : return serendip ? MSH_QUA_28 : MSH_QUA_64;
+    case 8 : return serendip ? MSH_QUA_32 : MSH_QUA_81;
+    case 9 : return serendip ? MSH_QUA_36I: MSH_QUA_100;
+    case 10: return serendip ? MSH_QUA_40 : MSH_QUA_121;
+    default : Msg::Error("quad order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_TET :
+    switch(order) {
+    case 0 : return MSH_TET_1;
+    case 1 : return MSH_TET_4;
+    case 2 : return MSH_TET_10;
+    case 3 : return MSH_TET_20;
+    case 4 : return serendip ? MSH_TET_34 : MSH_TET_35;
+    case 5 : return serendip ? MSH_TET_52 : MSH_TET_56;
+    case 6 : return serendip ? MSH_TET_74 : MSH_TET_84;
+    case 7 : return serendip ? MSH_TET_100: MSH_TET_120;
+    case 8 : return serendip ? MSH_TET_130: MSH_TET_165;
+    case 9 : return serendip ? MSH_TET_164: MSH_TET_220;
+    case 10: return serendip ? MSH_TET_202: MSH_TET_286;
+    default : Msg::Error("terahedron order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_HEX :
+    switch(order) {
+    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;
+    default : Msg::Error("hexahedron order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_PRI :
+    switch(order) {
+    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;
+    default : Msg::Error("prism order %i unknown", order); return 0;
+    }
+    break;
+  case TYPE_PYR :
+    switch(order) {
+    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;
+    default : Msg::Error("pyramid order %i unknown", order); return 0;
+    }
+    break;
+  default : Msg::Error("unknown element type %i", parentTag); return 0;
+  }
+}
+
 MElement *MElementFactory::create(int type, std::vector<MVertex*> &v,
                                   int num, int part, bool owner, MElement *parent,
                                   MElement *d1, MElement *d2)
diff --git a/Geo/MElement.h b/Geo/MElement.h
index 06ed8d91df..910bab5210 100644
--- a/Geo/MElement.h
+++ b/Geo/MElement.h
@@ -369,6 +369,7 @@ class MElement
   static int OrderFromTag(int tag);
   static int SerendipityFromTag(int tag);
   static int DimensionFromTag(int tag);
+  static int getTag(int parentTag, int order, bool serendip = false);
 };
 
 class MElementFactory{
diff --git a/Numeric/JacobianBasis.cpp b/Numeric/JacobianBasis.cpp
index 4b4e661032..1acc387780 100644
--- a/Numeric/JacobianBasis.cpp
+++ b/Numeric/JacobianBasis.cpp
@@ -46,8 +46,8 @@ JacobianBasis::JacobianBasis(int tag)
         jacobianOrder = 0;
         break;
     }
-    jacType = polynomialBasis::getTag(parentType, jacobianOrder, false);
-    primJacType = polynomialBasis::getTag(parentType, primJacobianOrder, false);
+    jacType = MElement::getTag(parentType, jacobianOrder, false);
+    primJacType = MElement::getTag(parentType, primJacobianOrder, false);
   }
 
   // Store Bezier basis
@@ -77,7 +77,7 @@ JacobianBasis::JacobianBasis(int tag)
 
   // Compute shape function gradients of primary mapping at barycenter,
   // in order to compute normal to straight element
-  const int primMapType = polynomialBasis::getTag(parentType, 1, false);
+  const int primMapType = MElement::getTag(parentType, 1, false);
   const nodalBasis *primMapBasis = BasisFactory::getNodalBasis(primMapType);
   numPrimMapNodes = primMapBasis->getNumShapeFunctions();
   double xBar = 0., yBar = 0., zBar = 0.;
diff --git a/Numeric/nodalBasis.cpp b/Numeric/nodalBasis.cpp
index da3de9954c..f6375623b8 100644
--- a/Numeric/nodalBasis.cpp
+++ b/Numeric/nodalBasis.cpp
@@ -828,7 +828,7 @@ static void getFaceClosureTet(int iFace, int iSign, int iRotate,
 {
   closure.clear();
   closure.resize((order + 1) * (order + 2) / 2);
-  closure.type = nodalBasis::getTag(TYPE_TRI, order, false);
+  closure.type = MElement::getTag(TYPE_TRI, order, false);
 
   switch (order){
   case 0:
@@ -925,7 +925,7 @@ static void generate2dEdgeClosureFull(nodalBasis::clCont &closure,
     if (serendip) break;
   }
   for (int r = 0; r < nNod*2 ; r++) {
-    closure[r].type = nodalBasis::getTag(TYPE_LIN, order);
+    closure[r].type = MElement::getTag(TYPE_LIN, order);
     closureRef[r] = 0;
   }
 }
@@ -1141,7 +1141,7 @@ static void generateFaceClosureHex(nodalBasis::clCont &closure, int order,
                                    bool serendip, const fullMatrix<double> &points)
 {
   closure.clear();
-  const nodalBasis &fsFace = *BasisFactory::getNodalBasis(nodalBasis::getTag(TYPE_QUA, order, serendip));
+  const nodalBasis &fsFace = *BasisFactory::getNodalBasis(MElement::getTag(TYPE_QUA, order, serendip));
   for (int iRotate = 0; iRotate < 4; iRotate++){
     for (int iSign = 1; iSign >= -1; iSign -= 2){
       for (int iFace = 0; iFace < 6; iFace++) {
@@ -1230,7 +1230,7 @@ static void getFaceClosurePrism(int iFace, int iSign, int iRotate,
   // int order2node[5][4] = {{7, 9, 6, -1}, {12, 14, 13, -1}, {6, 10, 12, 8},
   //                         {8, 13, 11, 7}, {9, 11, 14, 10}};
   int nVertex = isTriangle ? 3 : 4;
-  closure.type = nodalBasis::getTag(isTriangle ? TYPE_TRI : TYPE_QUA, order);
+  closure.type = MElement::getTag(isTriangle ? TYPE_TRI : TYPE_QUA, order);
   for (int i = 0; i < nVertex; ++i){
     int k = (nVertex + (iSign * i) + iRotate) % nVertex;  //- iSign * iRotate
     closure[i] = order1node[iFace][k];
@@ -1354,7 +1354,7 @@ static void generate2dEdgeClosure(nodalBasis::clCont &closure, int order, int nN
       closure[j].push_back( nNod + (order-1)*j + i );
       closure[nNod+j].push_back(nNod + (order-1)*(j+1) -i -1);
     }
-    closure[j].type = closure[nNod+j].type = nodalBasis::getTag(TYPE_LIN, order);
+    closure[j].type = closure[nNod+j].type = MElement::getTag(TYPE_LIN, order);
   }
 }
 
diff --git a/Numeric/nodalBasis.h b/Numeric/nodalBasis.h
index ead6c1ef4f..789783f948 100644
--- a/Numeric/nodalBasis.h
+++ b/Numeric/nodalBasis.h
@@ -55,8 +55,6 @@ class nodalBasis {
   virtual const std::vector<int> &getFullClosure(int id) const { return fullClosures[id]; }
   inline int getClosureId(int iFace, int iSign=1, int iRot=0) const;
   inline void breakClosureId(int i, int &iFace, int &iSign, int &iRot) const;
-
-  static inline int getTag(int parentTag, int order, bool serendip = false);
 };
 
 
@@ -78,124 +76,4 @@ inline void nodalBasis::breakClosureId(int i, int &iFace, int &iSign, int &iRot)
 
 
 
-inline int nodalBasis::getTag(int parentTag, int order, bool serendip)
-{
-  switch (parentTag) {
-  case TYPE_PNT :
-    return MSH_PNT;
-  case TYPE_LIN :
-    switch(order) {
-    case 0 : return MSH_LIN_1;
-    case 1 : return MSH_LIN_2;
-    case 2 : return MSH_LIN_3;
-    case 3 : return MSH_LIN_4;
-    case 4 : return MSH_LIN_5;
-    case 5 : return MSH_LIN_6;
-    case 6 : return MSH_LIN_7;
-    case 7 : return MSH_LIN_8;
-    case 8 : return MSH_LIN_9;
-    case 9 : return MSH_LIN_10;
-    case 10: return MSH_LIN_11;
-    default : Msg::Error("line order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_TRI :
-    switch(order) {
-    case 0 : return MSH_TRI_1;
-    case 1 : return MSH_TRI_3;
-    case 2 : return MSH_TRI_6;
-    case 3 : return serendip ? MSH_TRI_9  : MSH_TRI_10;
-    case 4 : return serendip ? MSH_TRI_12 : MSH_TRI_15;
-    case 5 : return serendip ? MSH_TRI_15I: MSH_TRI_21;
-    case 6 : return serendip ? MSH_TRI_18 : MSH_TRI_28;
-    case 7 : return serendip ? MSH_TRI_21I: MSH_TRI_36;
-    case 8 : return serendip ? MSH_TRI_24 : MSH_TRI_45;
-    case 9 : return serendip ? MSH_TRI_27 : MSH_TRI_55;
-    case 10: return serendip ? MSH_TRI_30 : MSH_TRI_66;
-    default : Msg::Error("triangle order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_QUA :
-    switch(order) {
-    case 0 : return MSH_QUA_1;
-    case 1 : return MSH_QUA_4;
-    case 2 : return serendip ? MSH_QUA_8  : MSH_QUA_9;
-    case 3 : return serendip ? MSH_QUA_12 : MSH_QUA_16;
-    case 4 : return serendip ? MSH_QUA_16I: MSH_QUA_25;
-    case 5 : return serendip ? MSH_QUA_20 : MSH_QUA_36;
-    case 6 : return serendip ? MSH_QUA_24 : MSH_QUA_49;
-    case 7 : return serendip ? MSH_QUA_28 : MSH_QUA_64;
-    case 8 : return serendip ? MSH_QUA_32 : MSH_QUA_81;
-    case 9 : return serendip ? MSH_QUA_36I: MSH_QUA_100;
-    case 10: return serendip ? MSH_QUA_40 : MSH_QUA_121;
-    default : Msg::Error("quad order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_TET :
-    switch(order) {
-    case 0 : return MSH_TET_1;
-    case 1 : return MSH_TET_4;
-    case 2 : return MSH_TET_10;
-    case 3 : return MSH_TET_20;
-    case 4 : return serendip ? MSH_TET_34 : MSH_TET_35;
-    case 5 : return serendip ? MSH_TET_52 : MSH_TET_56;
-    case 6 : return serendip ? MSH_TET_74 : MSH_TET_84;
-    case 7 : return serendip ? MSH_TET_100: MSH_TET_120;
-    case 8 : return serendip ? MSH_TET_130: MSH_TET_165;
-    case 9 : return serendip ? MSH_TET_164: MSH_TET_220;
-    case 10: return serendip ? MSH_TET_202: MSH_TET_286;
-    default : Msg::Error("terahedron order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_HEX :
-    switch(order) {
-    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;
-    default : Msg::Error("hexahedron order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_PRI :
-    switch(order) {
-    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;
-    default : Msg::Error("prism order %i unknown", order); return 0;
-    }
-    break;
-  case TYPE_PYR :
-    switch(order) {
-    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;
-    default : Msg::Error("pyramid order %i unknown", order); return 0;
-    }
-    break;
-  default : Msg::Error("unknown element type %i", parentTag); return 0;
-  }
-}
-
-
-
 #endif
diff --git a/contrib/DiscreteIntegration/Integration3D.cpp b/contrib/DiscreteIntegration/Integration3D.cpp
index 3d2dbaba46..1716ca129f 100644
--- a/contrib/DiscreteIntegration/Integration3D.cpp
+++ b/contrib/DiscreteIntegration/Integration3D.cpp
@@ -1044,7 +1044,7 @@ bool DI_ElementLessThan::operator()(const DI_Element *e1, const DI_Element *e2)
 // DI_Line methods --------------------------------------------------------------------------------
 const nodalBasis* DI_Line::getFunctionSpace(int o) const{
   int order = (o == -1) ? getPolynomialOrder() : o;
-  int tag = polynomialBasis::getTag(TYPE_LIN, order);
+  int tag = MElement::getTag(TYPE_LIN, order);
   return BasisFactory::getNodalBasis(tag);
 }
 
@@ -1065,7 +1065,7 @@ void DI_Line::computeIntegral() {
 const nodalBasis* DI_Triangle::getFunctionSpace(int o) const
 {
   int order = (o == -1) ? getPolynomialOrder() : o;
-  int tag = polynomialBasis::getTag(TYPE_TRI, order);
+  int tag = MElement::getTag(TYPE_TRI, order);
   return BasisFactory::getNodalBasis(tag);
 }
 void DI_Triangle::computeIntegral() {
@@ -1089,7 +1089,7 @@ double DI_Triangle::quality() const {
 // DI_Quad methods --------------------------------------------------------------------------------
 const nodalBasis* DI_Quad::getFunctionSpace(int o) const{
  int order = (o == -1) ? getPolynomialOrder() : o;
-  int tag = polynomialBasis::getTag(TYPE_QUA, order);
+  int tag = MElement::getTag(TYPE_QUA, order);
   return BasisFactory::getNodalBasis(tag);
 }
 
@@ -1113,7 +1113,7 @@ void DI_Quad::computeIntegral() {
 // DI_Tetra methods -------------------------------------------------------------------------------
 const nodalBasis* DI_Tetra::getFunctionSpace(int o) const{
  int order = (o == -1) ? getPolynomialOrder() : o;
-  int tag = polynomialBasis::getTag(TYPE_TET, order);
+  int tag = MElement::getTag(TYPE_TET, order);
   return BasisFactory::getNodalBasis(tag);
 }
 
@@ -1128,7 +1128,7 @@ double DI_Tetra::quality() const {
 // Hexahedron methods -----------------------------------------------------------------------------
 const nodalBasis* DI_Hexa::getFunctionSpace(int o) const{
   int order = (o == -1) ? getPolynomialOrder() : o;
-  int tag = polynomialBasis::getTag(TYPE_HEX, order);
+  int tag = MElement::getTag(TYPE_HEX, order);
   return BasisFactory::getNodalBasis(tag);
 }
 void DI_Hexa::computeIntegral() {
-- 
GitLab