Skip to content
Snippets Groups Projects
Commit 2649f2ec authored by Amaury Johnen's avatar Amaury Johnen
Browse files

up tetrahedron serendipity

parent de5702cd
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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);
......
......@@ -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;
......
......@@ -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);
}
}
......
......@@ -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()
......
......@@ -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;
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment