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