diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h index 0eb368dd1af5c98eb5f555a61ada02aa1d175769..09cf319b196834c5129c9d0f9c0e5dcfa3c770c4 100644 --- a/Common/GmshDefines.h +++ b/Common/GmshDefines.h @@ -94,8 +94,8 @@ #define MSH_TET_20 29 #define MSH_TET_35 30 #define MSH_TET_56 31 -#define MSH_TET_34 32 -#define MSH_TET_52 33 +#define MSH_TET_22 32 +#define MSH_TET_28 33 #define MSH_POLYG_ 34 #define MSH_POLYH_ 35 #define MSH_QUA_16 36 @@ -133,16 +133,19 @@ #define MSH_TRI_B 68 #define MSH_POLYG_B 69 #define MSH_LIN_C 70 +// TETS COMPLETE (6->10) #define MSH_TET_84 71 #define MSH_TET_120 72 #define MSH_TET_165 73 #define MSH_TET_220 74 #define MSH_TET_286 75 -#define MSH_TET_74 79 -#define MSH_TET_100 80 -#define MSH_TET_130 81 -#define MSH_TET_164 82 -#define MSH_TET_202 83 +// TETS INCOMPLETE (6->10) +#define MSH_TET_34 79 +#define MSH_TET_40 80 +#define MSH_TET_46 81 +#define MSH_TET_52 82 +#define MSH_TET_58 83 +// #define MSH_LIN_1 84 #define MSH_TRI_1 85 #define MSH_QUA_1 86 @@ -203,8 +206,9 @@ #define MSH_LIN_SUB 134 #define MSH_TRI_SUB 135 #define MSH_TET_SUB 136 +#define MSH_TET_16 137 -#define MSH_NUM_TYPE 136 +#define MSH_NUM_TYPE 137 // Geometric entities #define ENT_NONE 0 diff --git a/Geo/GModelIO_CGNS.cpp b/Geo/GModelIO_CGNS.cpp index 71a677f1949212518df9bb4d5e2fe7e38ffea940..243622768e75a2712f1df731b00931168967d514 100644 --- a/Geo/GModelIO_CGNS.cpp +++ b/Geo/GModelIO_CGNS.cpp @@ -186,8 +186,8 @@ static const int msh2cgns[MSH_NUM_TYPE][2] = { {-1, MSH_NUM_TYPE+1}, // MSH_TET_20 {-1, MSH_NUM_TYPE+1}, // MSH_TET_35 {-1, MSH_NUM_TYPE+1}, // MSH_TET_56 - {-1, MSH_NUM_TYPE+1}, // MSH_TET_34 - {-1, MSH_NUM_TYPE+1} // MSH_TET_52 + {-1, MSH_NUM_TYPE+1}, // MSH_TET_22 + {-1, MSH_NUM_TYPE+1} // MSH_TET_28 }; //--This functor allows for sorting of the element types according to the diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index b8b2c78b793a28e4aa8742777fb799b839eeb2ca..88ef313a568b584dbfb162e7d180335d887f7a40 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -1232,20 +1232,21 @@ int MElement::getInfoMSH(const int typeMSH, const char **const name) case MSH_TET_4 : if(name) *name = "Tetrahedron 4"; return 4; case MSH_TET_10 : if(name) *name = "Tetrahedron 10"; return 4 + 6; case MSH_TET_20 : if(name) *name = "Tetrahedron 20"; return 4 + 12 + 4; - case MSH_TET_34 : if(name) *name = "Tetrahedron 34"; return 4 + 18 + 12 + 0; case MSH_TET_35 : if(name) *name = "Tetrahedron 35"; return 4 + 18 + 12 + 1; - case MSH_TET_52 : if(name) *name = "Tetrahedron 52"; return 4 + 24 + 24 + 0; case MSH_TET_56 : if(name) *name = "Tetrahedron 56"; return 4 + 24 + 24 + 4; case MSH_TET_84 : if(name) *name = "Tetrahedron 84"; return (7*8*9)/6; case MSH_TET_120 : if(name) *name = "Tetrahedron 120"; return (8*9*10)/6; case MSH_TET_165 : if(name) *name = "Tetrahedron 165"; return (9*10*11)/6; case MSH_TET_220 : if(name) *name = "Tetrahedron 220"; return (10*11*12)/6; case MSH_TET_286 : if(name) *name = "Tetrahedron 286"; return (11*12*13)/6; - case MSH_TET_74 : if(name) *name = "Tetrahedron 74"; return 74; - case MSH_TET_100 : if(name) *name = "Tetrahedron 100"; return 100; - case MSH_TET_130 : if(name) *name = "Tetrahedron 130"; return 130; - case MSH_TET_164 : if(name) *name = "Tetrahedron 164"; return 164; - case MSH_TET_202 : if(name) *name = "Tetrahedron 202"; return 202; + case MSH_TET_16 : if(name) *name = "Tetrahedron 16"; return 4 + 6*2; + case MSH_TET_22 : if(name) *name = "Tetrahedron 22"; return 4 + 6*3; + case MSH_TET_28 : if(name) *name = "Tetrahedron 28"; return 4 + 6*4; + case MSH_TET_34 : if(name) *name = "Tetrahedron 34"; return 4 + 6*5; + case MSH_TET_40 : if(name) *name = "Tetrahedron 40"; return 4 + 6*6; + case MSH_TET_46 : if(name) *name = "Tetrahedron 46"; return 4 + 6*7; + case MSH_TET_52 : if(name) *name = "Tetrahedron 52"; return 4 + 6*8; + case MSH_TET_58 : if(name) *name = "Tetrahedron 58"; return 4 + 6*9; case MSH_HEX_1 : if(name) *name = "Hexahedron 1"; return 1; case MSH_HEX_8 : if(name) *name = "Hexahedron 8"; return 8; case MSH_HEX_20 : if(name) *name = "Hexahedron 20"; return 8 + 12; @@ -1445,15 +1446,22 @@ MElement *MElementFactory::create(int type, std::vector<MVertex*> &v, case MSH_PRI_15: return new MPrism15(v, num, part); case MSH_PRI_18: return new MPrism18(v, num, part); case MSH_TET_20: return new MTetrahedronN(v, 3, num, part); - case MSH_TET_34: return new MTetrahedronN(v, 3, num, part); case MSH_TET_35: return new MTetrahedronN(v, 4, num, part); - case MSH_TET_52: return new MTetrahedronN(v, 5, num, part); + case MSH_TET_28: return new MTetrahedronN(v, 5, num, part); case MSH_TET_56: return new MTetrahedronN(v, 5, num, part); case MSH_TET_84: return new MTetrahedronN(v, 6, num, part); case MSH_TET_120: return new MTetrahedronN(v, 7, num, part); case MSH_TET_165: return new MTetrahedronN(v, 8, num, part); case MSH_TET_220: return new MTetrahedronN(v, 9, num, part); case MSH_TET_286: return new MTetrahedronN(v, 10, num, part); + case MSH_TET_16: return new MTetrahedronN(v, 3, num, part); + case MSH_TET_22: return new MTetrahedronN(v, 4, num, part); + case MSH_TET_28: return new MTetrahedronN(v, 5, num, part); + case MSH_TET_34: return new MTetrahedronN(v, 6, num, part); + case MSH_TET_40: return new MTetrahedronN(v, 7, num, part); + case MSH_TET_46: return new MTetrahedronN(v, 8, num, part); + case MSH_TET_52: return new MTetrahedronN(v, 9, num, part); + case MSH_TET_58: return new MTetrahedronN(v, 10, num, part); case MSH_POLYH_: return new MPolyhedron(v, num, part, owner, parent); case MSH_HEX_32: return new MHexahedronN(v, 3, num, part); case MSH_HEX_64: return new MHexahedronN(v, 3, num, part); diff --git a/Geo/MHexahedron.h b/Geo/MHexahedron.h index e532e1fcaf2e65c38683b475cb1ddccd098dc91f..42d4255956363c90599bcaf4f055d6c7fcf7804f 100644 --- a/Geo/MHexahedron.h +++ b/Geo/MHexahedron.h @@ -531,7 +531,7 @@ class MHexahedronN : public MHexahedron { if(_order == 9 && _vs.size() + 8 == 1000) return MSH_HEX_1000; if(_order == 2 && _vs.size() + 8 == 20) return MSH_HEX_20; - if(_order == 3 && _vs.size() + 8 == 56 ) return MSH_HEX_32; + if(_order == 3 && _vs.size() + 8 == 32) return MSH_HEX_32; if(_order == 4 && _vs.size() + 8 == 44) return MSH_HEX_44; if(_order == 5 && _vs.size() + 8 == 56) return MSH_HEX_56; if(_order == 6 && _vs.size() + 8 == 68) return MSH_HEX_68; diff --git a/Geo/MTetrahedron.cpp b/Geo/MTetrahedron.cpp index af351888636a1c2b6c943304b476c8e647994dc5..2fd31d1f447b1ccd500ff782316494301ec1e9e7 100644 --- a/Geo/MTetrahedron.cpp +++ b/Geo/MTetrahedron.cpp @@ -111,14 +111,14 @@ const nodalBasis* MTetrahedron::getFunctionSpace(int o) const 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_34); - case 5: return BasisFactory::getNodalBasis(MSH_TET_52); - case 6: return BasisFactory::getNodalBasis(MSH_TET_74); - case 7: return BasisFactory::getNodalBasis(MSH_TET_100); - case 8: return BasisFactory::getNodalBasis(MSH_TET_130); - case 9: return BasisFactory::getNodalBasis(MSH_TET_164); - case 10: return BasisFactory::getNodalBasis(MSH_TET_202); + case 3: return BasisFactory::getNodalBasis(MSH_TET_16); // not just nv==0 + case 4: return BasisFactory::getNodalBasis(MSH_TET_22); + case 5: return BasisFactory::getNodalBasis(MSH_TET_28); + case 6: return BasisFactory::getNodalBasis(MSH_TET_34); + case 7: return BasisFactory::getNodalBasis(MSH_TET_40); + case 8: return BasisFactory::getNodalBasis(MSH_TET_46); + case 9: return BasisFactory::getNodalBasis(MSH_TET_52); + case 10: return BasisFactory::getNodalBasis(MSH_TET_58); default: Msg::Error("Order %d tetrahedron function space not implemented", order); } } @@ -151,9 +151,14 @@ const JacobianBasis* MTetrahedron::getJacobianFuncSpace(int o) const 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_34); - case 5: return BasisFactory::getJacobianBasis(MSH_TET_52); + case 3: return BasisFactory::getJacobianBasis(MSH_TET_16); // not just nv==0 + case 4: return BasisFactory::getJacobianBasis(MSH_TET_22); + case 5: return BasisFactory::getJacobianBasis(MSH_TET_28); + case 6: return BasisFactory::getJacobianBasis(MSH_TET_34); + case 7: return BasisFactory::getJacobianBasis(MSH_TET_40); + case 8: return BasisFactory::getJacobianBasis(MSH_TET_46); + case 9: return BasisFactory::getJacobianBasis(MSH_TET_52); + case 10: return BasisFactory::getJacobianBasis(MSH_TET_58); default: Msg::Error("Order %d tetrahedron function space not implemented", order); } } diff --git a/Geo/MTetrahedron.h b/Geo/MTetrahedron.h index 920a88bc2fcb1851e908e3a3417a3a3b9fc70a6f..1d85eb99caa708b2ac1eca5789bac033ea5e4be2 100644 --- a/Geo/MTetrahedron.h +++ b/Geo/MTetrahedron.h @@ -356,15 +356,21 @@ class MTetrahedronN : public MTetrahedron { if(_order == 1 && _vs.size() + 4 == 4) return MSH_TET_4; if(_order == 2 && _vs.size() + 4 == 10) return MSH_TET_10; if(_order == 3 && _vs.size() + 4 == 20) return MSH_TET_20; - if(_order == 4 && _vs.size() + 4 == 34) return MSH_TET_34; if(_order == 4 && _vs.size() + 4 == 35) return MSH_TET_35; if(_order == 5 && _vs.size() + 4 == 56) return MSH_TET_56; - if(_order == 5 && _vs.size() + 4 == 52) return MSH_TET_52; if(_order == 6 && _vs.size() + 4 == 84) return MSH_TET_84; if(_order == 7 && _vs.size() + 4 == 120) return MSH_TET_120; if(_order == 8 && _vs.size() + 4 == 165) return MSH_TET_165; if(_order == 9 && _vs.size() + 4 == 220) return MSH_TET_220; if(_order == 10 && _vs.size() + 4 == 286) return MSH_TET_286; + if(_order == 3 && _vs.size() + 4 == 16) return MSH_TET_16; + if(_order == 4 && _vs.size() + 4 == 22) return MSH_TET_22; + if(_order == 5 && _vs.size() + 4 == 28) return MSH_TET_28; + if(_order == 6 && _vs.size() + 4 == 34) return MSH_TET_34; + if(_order == 7 && _vs.size() + 4 == 40) return MSH_TET_40; + if(_order == 8 && _vs.size() + 4 == 46) return MSH_TET_46; + if(_order == 9 && _vs.size() + 4 == 52) return MSH_TET_52; + if(_order == 10 && _vs.size() + 4 == 58) return MSH_TET_58; return 0; } virtual void reverse() diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index aeac6a0b00cebcd1b0d15c8991bacc09461f32ad..07fb5566ea3dd8c4a61e2d6ce83495c0a79ebdba 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -594,7 +594,7 @@ static void getRegionVertices(GRegion *gr, MElement *incomplete, MElement *ele, case 0: return; case 1: return; case 2: - BasisFactory::getNodalBasis(MSH_TET_20)->points.print(); + //BasisFactory::getNodalBasis(MSH_TET_20)->points.print(); points = BasisFactory::getNodalBasis(MSH_TET_20)->points; break; case 3: points = BasisFactory::getNodalBasis(MSH_TET_35)->points; break; case 4: points = BasisFactory::getNodalBasis(MSH_TET_56)->points; break; diff --git a/Numeric/ElementType.cpp b/Numeric/ElementType.cpp index 588995930f0b191a0390411801268bdd780365d1..f222cb6311c5d47941e76304132006139f276505 100644 --- a/Numeric/ElementType.cpp +++ b/Numeric/ElementType.cpp @@ -44,13 +44,14 @@ int ElementType::ParentTypeFromTag(int tag) return TYPE_QUA; case(MSH_TET_4): case(MSH_TET_10): case(MSH_TET_20): case(MSH_TET_35): - case(MSH_TET_56): case(MSH_TET_34): - case(MSH_TET_52): case(MSH_TET_84): + case(MSH_TET_56): case(MSH_TET_22): + case(MSH_TET_28): case(MSH_TET_84): case(MSH_TET_120): case(MSH_TET_165): case(MSH_TET_220): case(MSH_TET_286): - case(MSH_TET_74): case(MSH_TET_100): - case(MSH_TET_130): case(MSH_TET_164): - case(MSH_TET_202): case(MSH_TET_1): + case(MSH_TET_34): case(MSH_TET_40): + case(MSH_TET_46): case(MSH_TET_52): + case(MSH_TET_58): case(MSH_TET_1): + case(MSH_TET_16): return TYPE_TET; case(MSH_PYR_5): case(MSH_PYR_14): case(MSH_PYR_13): case(MSH_PYR_30): @@ -59,8 +60,8 @@ int ElementType::ParentTypeFromTag(int tag) case(MSH_PYR_285): case(MSH_PYR_385): 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_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): @@ -69,8 +70,8 @@ int ElementType::ParentTypeFromTag(int tag) case(MSH_PRI_288): case(MSH_PRI_405): 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_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): @@ -79,8 +80,8 @@ int ElementType::ParentTypeFromTag(int tag) case(MSH_HEX_512): case(MSH_HEX_729): 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_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; @@ -141,13 +142,14 @@ int ElementType::OrderFromTag(int tag) case MSH_TET_165 : return 8; case MSH_TET_220 : return 9; case MSH_TET_286 : return 10; - case MSH_TET_34 : return 4; - case MSH_TET_52 : return 5; - case MSH_TET_74 : return 6; - case MSH_TET_100 : return 7; - case MSH_TET_130 : return 8; - case MSH_TET_164 : return 9; - case MSH_TET_202 : return 10; + case MSH_TET_16 : return 3; + case MSH_TET_22 : return 4; + case MSH_TET_28 : return 5; + case MSH_TET_34 : return 6; + case MSH_TET_40 : return 7; + case MSH_TET_46 : return 8; + case MSH_TET_52 : return 9; + case MSH_TET_58 : return 10; case MSH_QUA_1 : return 0; case MSH_QUA_4 : return 1; case MSH_QUA_9 : return 2; @@ -272,14 +274,14 @@ int ElementType::DimensionFromTag(int tag) case(MSH_TET_4): case(MSH_TET_10): case(MSH_TET_20): case(MSH_TET_35): - case(MSH_TET_56): case(MSH_TET_34): - case(MSH_TET_52): case(MSH_TET_84): + case(MSH_TET_56): case(MSH_TET_22): + case(MSH_TET_28): case(MSH_TET_84): case(MSH_TET_120): case(MSH_TET_165): case(MSH_TET_220): case(MSH_TET_286): - case(MSH_TET_74): case(MSH_TET_100): - case(MSH_TET_130): case(MSH_TET_164): - case(MSH_TET_202): case(MSH_TET_1): - case(MSH_TET_SUB): + case(MSH_TET_34): case(MSH_TET_40): + case(MSH_TET_46): case(MSH_TET_52): + case(MSH_TET_58): case(MSH_TET_1): + case(MSH_TET_16): case(MSH_TET_SUB): case(MSH_PYR_5): case(MSH_PYR_14): case(MSH_PYR_13): case(MSH_PYR_30): @@ -288,8 +290,8 @@ int ElementType::DimensionFromTag(int tag) case(MSH_PYR_285): case(MSH_PYR_385): 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_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): @@ -298,8 +300,8 @@ int ElementType::DimensionFromTag(int tag) case(MSH_PRI_288): case(MSH_PRI_405): 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_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): @@ -308,8 +310,8 @@ int ElementType::DimensionFromTag(int tag) case(MSH_HEX_512): case(MSH_HEX_729): 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_HEX_68): case(MSH_HEX_80): + case(MSH_HEX_92): case(MSH_HEX_104): case(MSH_POLYH_): return 3; @@ -392,25 +394,25 @@ int ElementType::SerendipityFromTag(int tag) case MSH_QUA_32 : case MSH_QUA_36I : case MSH_QUA_40 : - case MSH_TET_34 : case MSH_TET_52 : - case MSH_TET_74 : case MSH_TET_100 : - case MSH_TET_130 : case MSH_TET_164 : - case MSH_TET_202 : + case MSH_TET_22 : case MSH_TET_28 : + case MSH_TET_34 : case MSH_TET_40 : + case MSH_TET_46 : case MSH_TET_52 : + case MSH_TET_58 : case MSH_TET_16 : 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_PRI_51 : case MSH_PRI_60 : + case MSH_PRI_69 : case MSH_PRI_78 : 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_HEX_68 : case MSH_HEX_80 : + case MSH_HEX_92 : case MSH_HEX_104 : 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 : + case MSH_PYR_45 : case MSH_PYR_53 : + case MSH_PYR_61 : case MSH_PYR_69 : return 2; // Only Serendipity @@ -478,14 +480,14 @@ int ElementType::getTag(int parentTag, int order, bool serendip) 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; + case 3 : return serendip ? MSH_TET_20 : MSH_TET_16; + case 4 : return serendip ? MSH_TET_22 : MSH_TET_35; + case 5 : return serendip ? MSH_TET_28 : MSH_TET_56; + case 6 : return serendip ? MSH_TET_34 : MSH_TET_84; + case 7 : return serendip ? MSH_TET_40: MSH_TET_120; + case 8 : return serendip ? MSH_TET_46: MSH_TET_165; + case 9 : return serendip ? MSH_TET_52: MSH_TET_220; + case 10: return serendip ? MSH_TET_58: MSH_TET_286; default : Msg::Error("terahedron order %i unknown", order); return 0; } break;