From 494e1439fb6b4d1081084b708e8f879d0f584c0c Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Wed, 4 Sep 2013 11:49:12 +0000
Subject: [PATCH] simplification tags -> getFunctionSpace & getJacobianSpace

---
 Geo/MElement.h       |  2 +-
 Geo/MHexahedron.cpp  | 34 ++++--------------------------
 Geo/MLine.cpp        | 49 +++++++++++---------------------------------
 Geo/MPrism.cpp       | 32 ++++-------------------------
 Geo/MPyramid.cpp     | 16 ++-------------
 Geo/MQuadrangle.cpp  | 34 +++++-------------------------
 Geo/MTetrahedron.cpp | 33 ++++-------------------------
 Geo/MTriangle.cpp    | 33 ++++-------------------------
 8 files changed, 36 insertions(+), 197 deletions(-)

diff --git a/Geo/MElement.h b/Geo/MElement.h
index 9cef0e28a7..8955f835f4 100644
--- a/Geo/MElement.h
+++ b/Geo/MElement.h
@@ -238,7 +238,7 @@ class MElement
   virtual void getShapeFunctions(double u, double v, double w, double s[],
                                  int order=-1) const;
 
-  // return the gradient of of the nodal shape functions evaluated at
+  // return the gradient of the nodal shape functions evaluated at
   // point (u,v,w) in parametric coordinates (if order == -1, use the
   // polynomial order of the element)
   virtual void getGradShapeFunctions(double u, double v, double w, double s[][3],
diff --git a/Geo/MHexahedron.cpp b/Geo/MHexahedron.cpp
index 3458b4ce7a..413efd7720 100644
--- a/Geo/MHexahedron.cpp
+++ b/Geo/MHexahedron.cpp
@@ -194,44 +194,18 @@ const nodalBasis* MHexahedron::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_HEX_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_HEX_8);
-    case 2: return BasisFactory::getNodalBasis(MSH_HEX_27);
-    case 3: return BasisFactory::getNodalBasis(MSH_HEX_64);
-    case 4: return BasisFactory::getNodalBasis(MSH_HEX_125);
-    case 5: return BasisFactory::getNodalBasis(MSH_HEX_216);
-    case 6: return BasisFactory::getNodalBasis(MSH_HEX_343);
-    case 7: return BasisFactory::getNodalBasis(MSH_HEX_512);
-    case 8: return BasisFactory::getNodalBasis(MSH_HEX_729);
-    case 9: return BasisFactory::getNodalBasis(MSH_HEX_1000);
-    default: Msg::Error("Order %d hex function space not implemented", order); break;
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_HEX, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MHexahedron::getJacobianFuncSpace(int order) const
 {
   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getJacobianBasis(MSH_HEX_1);
-    case 1: return BasisFactory::getJacobianBasis(MSH_HEX_8);
-    case 2: return BasisFactory::getJacobianBasis(MSH_HEX_27);
-    case 3: return BasisFactory::getJacobianBasis(MSH_HEX_64);
-    case 4: return BasisFactory::getJacobianBasis(MSH_HEX_125);
-    case 5: return BasisFactory::getJacobianBasis(MSH_HEX_216);
-    case 6: return BasisFactory::getJacobianBasis(MSH_HEX_343);
-    case 7: return BasisFactory::getJacobianBasis(MSH_HEX_512);
-    case 8: return BasisFactory::getJacobianBasis(MSH_HEX_729);
-    case 9: return BasisFactory::getJacobianBasis(MSH_HEX_1000);
-    default: Msg::Error("Order %d hex Jacobian function space not implemented", order); break;
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_HEX, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
-
-
 void _myGetFaceRep(MHexahedron *hex, int num, double *x, double *y, double *z,
                           SVector3 *n, int numSubEdges)
 {
diff --git a/Geo/MLine.cpp b/Geo/MLine.cpp
index 42766c6031..4fd16e3f44 100644
--- a/Geo/MLine.cpp
+++ b/Geo/MLine.cpp
@@ -11,45 +11,20 @@
 #include "Context.h"
 #include "qualityMeasures.h"
 
-const nodalBasis* MLine::getFunctionSpace(int o) const
+const nodalBasis* MLine::getFunctionSpace(int order) const
 {
-  int order = (o == -1) ? getPolynomialOrder() : o;
-  
-  switch (order) {
-  case 0: return BasisFactory::getNodalBasis(MSH_LIN_1);
-  case 1: return BasisFactory::getNodalBasis(MSH_LIN_2);
-  case 2: return BasisFactory::getNodalBasis(MSH_LIN_3);
-  case 3: return BasisFactory::getNodalBasis(MSH_LIN_4);
-  case 4: return BasisFactory::getNodalBasis(MSH_LIN_5);
-  case 5: return BasisFactory::getNodalBasis(MSH_LIN_6);
-  case 6: return BasisFactory::getNodalBasis(MSH_LIN_7);
-  case 7: return BasisFactory::getNodalBasis(MSH_LIN_8);
-  case 8: return BasisFactory::getNodalBasis(MSH_LIN_9);
-  case 9: return BasisFactory::getNodalBasis(MSH_LIN_10);
-  case 10: return BasisFactory::getNodalBasis(MSH_LIN_11);
-  default: Msg::Error("Order %d line function space not implemented", order);
-  }
-  return 0;
+  if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
+
+  int tag = ElementType::getTag(TYPE_LIN, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
-const JacobianBasis* MLine::getJacobianFuncSpace(int o) const
+const JacobianBasis* MLine::getJacobianFuncSpace(int order) const
 {
-  int order = (o == -1) ? getPolynomialOrder() : o;
-  
-  switch (order) {
-  case 1: return BasisFactory::getJacobianBasis(MSH_LIN_2);
-  case 2: return BasisFactory::getJacobianBasis(MSH_LIN_3);
-  case 3: return BasisFactory::getJacobianBasis(MSH_LIN_4);
-  case 4: return BasisFactory::getJacobianBasis(MSH_LIN_5);
-  case 5: return BasisFactory::getJacobianBasis(MSH_LIN_6);
-  case 6: return BasisFactory::getJacobianBasis(MSH_LIN_7);
-  case 7: return BasisFactory::getJacobianBasis(MSH_LIN_8);
-  case 8: return BasisFactory::getJacobianBasis(MSH_LIN_9);
-  case 9: return BasisFactory::getJacobianBasis(MSH_LIN_10);
-  case 10: return BasisFactory::getJacobianBasis(MSH_LIN_11);
-  default: Msg::Error("Order %d line function space not implemented", order);
-  }
-  return 0;
+  if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
+
+  int tag = ElementType::getTag(TYPE_LIN, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
 void MLine::getIntegrationPoints(int pOrder, int *npts, IntPt **pts)
@@ -73,7 +48,7 @@ double MLine::getVolume()
   return getLength();
 }
 
-int MLine3::getNumEdgesRep() 
+int MLine3::getNumEdgesRep()
 {
   return  CTX::instance()->mesh.numSubEdges;
 }
@@ -90,7 +65,7 @@ void MLine3::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n)
   n[0] = n[1] = MEdge(_v[0], _v[1]).normal();
 }
 
-int MLineN::getNumEdgesRep() 
+int MLineN::getNumEdgesRep()
 {
   return  CTX::instance()->mesh.numSubEdges;
 }
diff --git a/Geo/MPrism.cpp b/Geo/MPrism.cpp
index 49456e2a6a..beda50e53c 100644
--- a/Geo/MPrism.cpp
+++ b/Geo/MPrism.cpp
@@ -36,40 +36,16 @@ const nodalBasis* MPrism::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_PRI_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_PRI_6);
-    case 2: return BasisFactory::getNodalBasis(MSH_PRI_18);
-    case 3: return BasisFactory::getNodalBasis(MSH_PRI_40);
-    case 4: return BasisFactory::getNodalBasis(MSH_PRI_75);
-    case 5: return BasisFactory::getNodalBasis(MSH_PRI_126);
-    case 6: return BasisFactory::getNodalBasis(MSH_PRI_196);
-    case 7: return BasisFactory::getNodalBasis(MSH_PRI_288);
-    case 8: return BasisFactory::getNodalBasis(MSH_PRI_405);
-    case 9: return BasisFactory::getNodalBasis(MSH_PRI_550);
-    default: Msg::Error("Order %d prism function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_PRI, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MPrism::getJacobianFuncSpace(int order) const
 {
   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getJacobianBasis(MSH_PRI_1);
-    case 1: return BasisFactory::getJacobianBasis(MSH_PRI_6);
-    case 2: return BasisFactory::getJacobianBasis(MSH_PRI_18);
-    case 3: return BasisFactory::getJacobianBasis(MSH_PRI_40);
-    case 4: return BasisFactory::getJacobianBasis(MSH_PRI_75);
-    case 5: return BasisFactory::getJacobianBasis(MSH_PRI_126);
-    case 6: return BasisFactory::getJacobianBasis(MSH_PRI_196);
-    case 7: return BasisFactory::getJacobianBasis(MSH_PRI_288);
-    case 8: return BasisFactory::getJacobianBasis(MSH_PRI_405);
-    case 9: return BasisFactory::getJacobianBasis(MSH_PRI_550);
-    default: Msg::Error("Order %d prism function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_PRI, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
 double MPrism::getInnerRadius()
diff --git a/Geo/MPyramid.cpp b/Geo/MPyramid.cpp
index fb41b100d7..6dc0d132b6 100644
--- a/Geo/MPyramid.cpp
+++ b/Geo/MPyramid.cpp
@@ -37,20 +37,8 @@ const nodalBasis* MPyramid::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_PYR_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_PYR_5);
-    case 2: return BasisFactory::getNodalBasis(MSH_PYR_14);
-    case 3: return BasisFactory::getNodalBasis(MSH_PYR_30);
-    case 4: return BasisFactory::getNodalBasis(MSH_PYR_55);
-    case 5: return BasisFactory::getNodalBasis(MSH_PYR_91);
-    case 6: return BasisFactory::getNodalBasis(MSH_PYR_140);
-    case 7: return BasisFactory::getNodalBasis(MSH_PYR_204);
-    case 8: return BasisFactory::getNodalBasis(MSH_PYR_285);
-    case 9: return BasisFactory::getNodalBasis(MSH_PYR_385);
-    default: Msg::Error("Order %d pyramid function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_PYR, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MPyramid::getJacobianFuncSpace(int o) const
diff --git a/Geo/MQuadrangle.cpp b/Geo/MQuadrangle.cpp
index 221208c787..8f968870e5 100644
--- a/Geo/MQuadrangle.cpp
+++ b/Geo/MQuadrangle.cpp
@@ -21,40 +21,16 @@ const nodalBasis* MQuadrangle::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_QUA_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_QUA_4);
-    case 2: return BasisFactory::getNodalBasis(MSH_QUA_9);
-    case 3: return BasisFactory::getNodalBasis(MSH_QUA_16);
-    case 4: return BasisFactory::getNodalBasis(MSH_QUA_25);
-    case 5: return BasisFactory::getNodalBasis(MSH_QUA_36);
-    case 6: return BasisFactory::getNodalBasis(MSH_QUA_49);
-    case 7: return BasisFactory::getNodalBasis(MSH_QUA_64);
-    case 8: return BasisFactory::getNodalBasis(MSH_QUA_81);
-    case 9: return BasisFactory::getNodalBasis(MSH_QUA_100);
-    case 10: return BasisFactory::getNodalBasis(MSH_QUA_121);
-    default: Msg::Error("Order %d quadrangle function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_QUA, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MQuadrangle::getJacobianFuncSpace(int order) const
 {
   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
-  switch (order) {
-    case 1: return BasisFactory::getJacobianBasis(MSH_QUA_4);
-    case 2: return BasisFactory::getJacobianBasis(MSH_QUA_9);
-    case 3: return BasisFactory::getJacobianBasis(MSH_QUA_16);
-    case 4: return BasisFactory::getJacobianBasis(MSH_QUA_25);
-    case 5: return BasisFactory::getJacobianBasis(MSH_QUA_36);
-    case 6: return BasisFactory::getJacobianBasis(MSH_QUA_49);
-    case 7: return BasisFactory::getJacobianBasis(MSH_QUA_64);
-    case 8: return BasisFactory::getJacobianBasis(MSH_QUA_81);
-    case 9: return BasisFactory::getJacobianBasis(MSH_QUA_100);
-    case 10: return BasisFactory::getJacobianBasis(MSH_QUA_121);
-    default: Msg::Error("Order %d quadrangle function space not implemented", order);
-  }
-  return 0;
+
+  int tag = ElementType::getTag(TYPE_QUA, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
 int MQuadrangleN::getNumEdgesRep(){ return 4 * CTX::instance()->mesh.numSubEdges; }
diff --git a/Geo/MTetrahedron.cpp b/Geo/MTetrahedron.cpp
index 6b4e3c7b16..4a542fad8c 100644
--- a/Geo/MTetrahedron.cpp
+++ b/Geo/MTetrahedron.cpp
@@ -104,41 +104,16 @@ const nodalBasis* MTetrahedron::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_TET_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_TET_4);
-    case 2: return BasisFactory::getNodalBasis(MSH_TET_10);
-    case 3: return BasisFactory::getNodalBasis(MSH_TET_20);
-    case 4: return BasisFactory::getNodalBasis(MSH_TET_35);
-    case 5: return BasisFactory::getNodalBasis(MSH_TET_56);
-    case 6: return BasisFactory::getNodalBasis(MSH_TET_84);
-    case 7: return BasisFactory::getNodalBasis(MSH_TET_120);
-    case 8: return BasisFactory::getNodalBasis(MSH_TET_165);
-    case 9: return BasisFactory::getNodalBasis(MSH_TET_220);
-    case 10: return BasisFactory::getNodalBasis(MSH_TET_286);
-    default: Msg::Error("Order %d tetrahedron function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_TET, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MTetrahedron::getJacobianFuncSpace(int order) const
 {
   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
 
-  switch (order) {
-    case 1: return BasisFactory::getJacobianBasis(MSH_TET_4);
-    case 2: return BasisFactory::getJacobianBasis(MSH_TET_10);
-    case 3: return BasisFactory::getJacobianBasis(MSH_TET_20);
-    case 4: return BasisFactory::getJacobianBasis(MSH_TET_35);
-    case 5: return BasisFactory::getJacobianBasis(MSH_TET_56);
-    case 6: return BasisFactory::getJacobianBasis(MSH_TET_84);
-    case 7: return BasisFactory::getJacobianBasis(MSH_TET_120);
-    case 8: return BasisFactory::getJacobianBasis(MSH_TET_165);
-    case 9: return BasisFactory::getJacobianBasis(MSH_TET_220);
-    case 10: return BasisFactory::getJacobianBasis(MSH_TET_286);
-    default: Msg::Error("Order %d tetrahedron function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_TET, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
 int MTetrahedron10::getNumEdgesRep(){ return 6 * CTX::instance()->mesh.numSubEdges; }
diff --git a/Geo/MTriangle.cpp b/Geo/MTriangle.cpp
index c857933197..4c26f5cd09 100644
--- a/Geo/MTriangle.cpp
+++ b/Geo/MTriangle.cpp
@@ -123,41 +123,16 @@ const nodalBasis* MTriangle::getFunctionSpace(int order) const
 {
   if (order == -1) return BasisFactory::getNodalBasis(getTypeForMSH());
 
-  switch (order) {
-    case 0: return BasisFactory::getNodalBasis(MSH_TRI_1);
-    case 1: return BasisFactory::getNodalBasis(MSH_TRI_3);
-    case 2: return BasisFactory::getNodalBasis(MSH_TRI_6);
-    case 3: return BasisFactory::getNodalBasis(MSH_TRI_10);
-    case 4: return BasisFactory::getNodalBasis(MSH_TRI_15);
-    case 5: return BasisFactory::getNodalBasis(MSH_TRI_21);
-    case 6: return BasisFactory::getNodalBasis(MSH_TRI_28);
-    case 7: return BasisFactory::getNodalBasis(MSH_TRI_36);
-    case 8: return BasisFactory::getNodalBasis(MSH_TRI_45);
-    case 9: return BasisFactory::getNodalBasis(MSH_TRI_55);
-    case 10: return BasisFactory::getNodalBasis(MSH_TRI_66);
-    default: Msg::Error("Order %d triangle function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_TRI, order);
+  return tag ? BasisFactory::getNodalBasis(tag) : NULL;
 }
 
 const JacobianBasis* MTriangle::getJacobianFuncSpace(int order) const
 {
   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
 
-  switch (order) {
-    case 1: return BasisFactory::getJacobianBasis(MSH_TRI_3);
-    case 2: return BasisFactory::getJacobianBasis(MSH_TRI_6);
-    case 3: return BasisFactory::getJacobianBasis(MSH_TRI_10);
-    case 4: return BasisFactory::getJacobianBasis(MSH_TRI_15);
-    case 5: return BasisFactory::getJacobianBasis(MSH_TRI_21);
-    case 6: return BasisFactory::getJacobianBasis(MSH_TRI_28);
-    case 7: return BasisFactory::getJacobianBasis(MSH_TRI_36);
-    case 8: return BasisFactory::getJacobianBasis(MSH_TRI_45);
-    case 9: return BasisFactory::getJacobianBasis(MSH_TRI_55);
-    case 10: return BasisFactory::getJacobianBasis(MSH_TRI_66);
-    default: Msg::Error("Order %d triangle function space not implemented", order);
-  }
-  return NULL;
+  int tag = ElementType::getTag(TYPE_TRI, order);
+  return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
 }
 
 int MTriangleN::getNumEdgesRep(){ return 3 * CTX::instance()->mesh.numSubEdges; }
-- 
GitLab