17 #define snprintf _snprintf_s
32 mfem_error (
"FiniteElementCollection::HasFaceDofs:"
33 " unknown geometry type.");
40 MFEM_ABORT(
"this method is not implemented in this derived class!");
48 if (!strcmp(name,
"Linear"))
52 else if (!strcmp(name,
"Quadratic"))
56 else if (!strcmp(name,
"QuadraticPos"))
60 else if (!strcmp(name,
"Cubic"))
64 else if (!strcmp(name,
"Const3D"))
68 else if (!strcmp(name,
"Const2D"))
72 else if (!strcmp(name,
"LinearDiscont2D"))
76 else if (!strcmp(name,
"GaussLinearDiscont2D"))
80 else if (!strcmp(name,
"P1OnQuad"))
84 else if (!strcmp(name,
"QuadraticDiscont2D"))
88 else if (!strcmp(name,
"QuadraticPosDiscont2D"))
92 else if (!strcmp(name,
"GaussQuadraticDiscont2D"))
96 else if (!strcmp(name,
"CubicDiscont2D"))
100 else if (!strcmp(name,
"LinearDiscont3D"))
104 else if (!strcmp(name,
"QuadraticDiscont3D"))
108 else if (!strcmp(name,
"LinearNonConf3D"))
112 else if (!strcmp(name,
"CrouzeixRaviart"))
116 else if (!strcmp(name,
"ND1_3D"))
120 else if (!strcmp(name,
"RT0_2D"))
124 else if (!strcmp(name,
"RT1_2D"))
128 else if (!strcmp(name,
"RT2_2D"))
132 else if (!strcmp(name,
"RT0_3D"))
136 else if (!strcmp(name,
"RT1_3D"))
140 else if (!strncmp(name,
"H1_Trace_", 9))
144 else if (!strncmp(name,
"H1_", 3))
148 else if (!strncmp(name,
"H1Pos_Trace_", 12))
152 else if (!strncmp(name,
"H1Pos_", 6))
156 else if (!strncmp(name,
"L2_T", 4))
159 else if (!strncmp(name,
"L2_", 3))
163 else if (!strncmp(name,
"RT_Trace_", 9))
167 else if (!strncmp(name,
"RT_ValTrace_", 12))
172 else if (!strncmp(name,
"DG_Iface_", 9))
176 else if (!strncmp(name,
"DG_IntIface_", 12))
181 else if (!strncmp(name,
"RT_", 3))
185 else if (!strncmp(name,
"ND_Trace_", 9))
189 else if (!strncmp(name,
"ND_", 3))
193 else if (!strncmp(name,
"Local_", 6))
197 else if (!strncmp(name,
"NURBS", 5))
203 "Unknown FiniteElementCollection!");
220 mfem_error (
"LinearFECollection: unknown geometry type.");
236 mfem_error (
"LinearFECollection: unknown geometry type.");
259 mfem_error (
"QuadraticFECollection: unknown geometry type.");
275 mfem_error (
"QuadraticFECollection: unknown geometry type.");
282 static int indexes[] = { 0 };
296 mfem_error (
"QuadraticPosFECollection: unknown geometry type.");
309 mfem_error (
"QuadraticPosFECollection: unknown geometry type.");
317 static int indexes[] = { 0 };
335 mfem_error (
"CubicFECollection: unknown geometry type.");
351 mfem_error (
"CubicFECollection: unknown geometry type.");
360 static int ind_pos[] = { 0, 1 };
361 static int ind_neg[] = { 1, 0 };
371 static int indexes[] = { 0 };
377 static int sq_ind[8][4] = {{0, 1, 2, 3}, {0, 2, 1, 3},
378 {2, 0, 3, 1}, {1, 0, 3, 2},
379 {3, 2, 1, 0}, {3, 1, 2, 0},
380 {1, 3, 0, 2}, {2, 3, 0, 1}
398 mfem_error (
"CrouzeixRaviartFECollection: unknown geometry type.");
412 mfem_error (
"CrouzeixRaviartFECollection: unknown geometry type.");
420 static int indexes[] = { 0 };
435 mfem_error (
"RT0_2DFECollection: unknown geometry type.");
449 mfem_error (
"RT0_2DFECollection: unknown geometry type.");
457 static int ind_pos[] = { 0 };
458 static int ind_neg[] = { -1 };
477 mfem_error (
"RT1_2DFECollection: unknown geometry type.");
491 mfem_error (
"RT1_2DFECollection: unknown geometry type.");
499 static int ind_pos[] = { 0, 1 };
500 static int ind_neg[] = { -2, -1 };
518 mfem_error (
"RT2_2DFECollection: unknown geometry type.");
532 mfem_error (
"RT2_2DFECollection: unknown geometry type.");
540 static int ind_pos[] = { 0, 1, 2 };
541 static int ind_neg[] = { -3, -2, -1 };
559 mfem_error (
"Const2DFECollection: unknown geometry type.");
573 mfem_error (
"Const2DFECollection: unknown geometry type.");
593 mfem_error (
"LinearDiscont2DFECollection: unknown geometry type.");
607 mfem_error (
"LinearDiscont2DFECollection: unknown geometry type.");
627 mfem_error (
"GaussLinearDiscont2DFECollection:"
628 " unknown geometry type.");
642 mfem_error (
"GaussLinearDiscont2DFECollection:"
643 " unknown geometry type.");
649 int GeomType,
int Or)
const
660 mfem_error (
"P1OnQuadFECollection: unknown geometry type.");
673 mfem_error (
"P1OnQuadFECollection: unknown geometry type.");
679 int GeomType,
int Or)
const
693 mfem_error (
"QuadraticDiscont2DFECollection: unknown geometry type.");
707 mfem_error (
"QuadraticDiscont2DFECollection: unknown geometry type.");
713 int GeomType,
int Or)
const
726 mfem_error (
"QuadraticPosDiscont2DFECollection: unknown geometry type.");
739 mfem_error (
"QuadraticPosDiscont2DFECollection: unknown geometry type.");
754 mfem_error (
"GaussQuadraticDiscont2DFECollection:"
755 " unknown geometry type.");
769 mfem_error (
"GaussQuadraticDiscont2DFECollection:"
770 " unknown geometry type.");
776 int GeomType,
int Or)
const
790 mfem_error (
"CubicDiscont2DFECollection: unknown geometry type.");
804 mfem_error (
"CubicDiscont2DFECollection: unknown geometry type.");
826 mfem_error (
"LinearNonConf3DFECollection: unknown geometry type.");
842 mfem_error (
"LinearNonConf3DFECollection: unknown geometry type.");
850 static int indexes[] = { 0 };
864 mfem_error (
"Const3DFECollection: unknown geometry type.");
880 mfem_error (
"Const3DFECollection: unknown geometry type.");
900 mfem_error (
"LinearDiscont3DFECollection: unknown geometry type.");
916 mfem_error (
"LinearDiscont3DFECollection: unknown geometry type.");
936 mfem_error (
"QuadraticDiscont3DFECollection: unknown geometry type.");
952 mfem_error (
"QuadraticDiscont3DFECollection: unknown geometry type.");
958 int GeomType,
int Or)
const
975 mfem_error (
"RefinedLinearFECollection: unknown geometry type.");
991 mfem_error (
"RefinedLinearFECollection: unknown geometry type.");
999 static int indexes[] = { 0 };
1013 mfem_error (
"ND1_3DFECollection: unknown geometry type.");
1029 mfem_error (
"ND1_3DFECollection: unknown geometry type.");
1037 static int ind_pos[] = { 0 };
1038 static int ind_neg[] = { -1 };
1058 mfem_error (
"RT0_3DFECollection: unknown geometry type.");
1074 mfem_error (
"RT0_3DFECollection: unknown geometry type.");
1082 static int ind_pos[] = { 0 };
1083 static int ind_neg[] = { -1 };
1105 mfem_error (
"RT1_3DFECollection: unknown geometry type.");
1120 mfem_error (
"RT1_3DFECollection: unknown geometry type.");
1130 static int sq_ind[8][4] =
1132 {0, 1, 2, 3}, {-1, -3, -2, -4},
1133 {2, 0, 3, 1}, {-2, -1, -4, -3},
1134 {3, 2, 1, 0}, {-4, -2, -3, -1},
1135 {1, 3, 0, 2}, {-3, -4, -1, -2}
1149 const int pm1 = p - 1, pm2 = pm1 - 1, pm3 = pm2 - 1;
1153 snprintf(h1_name, 32,
"H1_%dD_P%d", dim, p);
1157 snprintf(h1_name, 32,
"H1Pos_%dD_P%d", dim, p);
1163 H1_Elements[g] = NULL;
1165 for (
int i = 0; i < 2; i++)
1167 SegDofOrd[i] = NULL;
1169 for (
int i = 0; i < 6; i++)
1171 TriDofOrd[i] = NULL;
1173 for (
int i = 0; i < 8; i++)
1175 QuadDofOrd[i] = NULL;
1193 SegDofOrd[0] =
new int[2*pm1];
1194 SegDofOrd[1] = SegDofOrd[0] + pm1;
1195 for (
int i = 0; i < pm1; i++)
1197 SegDofOrd[0][i] = i;
1198 SegDofOrd[1][i] = pm2 - i;
1219 TriDofOrd[0] =
new int[6*TriDof];
1220 for (
int i = 1; i < 6; i++)
1222 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1225 for (
int j = 0; j < pm2; j++)
1226 for (
int i = 0; i + j < pm2; i++)
1228 int o = TriDof - ((pm1 - j)*(pm2 - j))/2 + i;
1229 int k = pm3 - j - i;
1230 TriDofOrd[0][o] = o;
1231 TriDofOrd[1][o] = TriDof - ((pm1-j)*(pm2-j))/2 + k;
1232 TriDofOrd[2][o] = TriDof - ((pm1-i)*(pm2-i))/2 + k;
1233 TriDofOrd[3][o] = TriDof - ((pm1-k)*(pm2-k))/2 + i;
1234 TriDofOrd[4][o] = TriDof - ((pm1-k)*(pm2-k))/2 + j;
1235 TriDofOrd[5][o] = TriDof - ((pm1-i)*(pm2-i))/2 + j;
1238 QuadDofOrd[0] =
new int[8*QuadDof];
1239 for (
int i = 1; i < 8; i++)
1241 QuadDofOrd[i] = QuadDofOrd[i-1] + QuadDof;
1244 for (
int j = 0; j < pm1; j++)
1245 for (
int i = 0; i < pm1; i++)
1248 QuadDofOrd[0][o] = i + j*pm1;
1249 QuadDofOrd[1][o] = j + i*pm1;
1250 QuadDofOrd[2][o] = j + (pm2 - i)*pm1;
1251 QuadDofOrd[3][o] = (pm2 - i) + j*pm1;
1252 QuadDofOrd[4][o] = (pm2 - i) + (pm2 - j)*pm1;
1253 QuadDofOrd[5][o] = (pm2 - j) + (pm2 - i)*pm1;
1254 QuadDofOrd[6][o] = (pm2 - j) + i*pm1;
1255 QuadDofOrd[7][o] = i + (pm2 - j)*pm1;
1282 return SegDofOrd[0];
1284 return SegDofOrd[1];
1288 return TriDofOrd[Or%6];
1292 return QuadDofOrd[Or%8];
1300 if (!strncmp(h1_name,
"H1_", 3))
1304 else if (!strncmp(h1_name,
"H1Pos_", 6))
1313 delete [] SegDofOrd[0];
1314 delete [] TriDofOrd[0];
1315 delete [] QuadDofOrd[0];
1318 delete H1_Elements[g];
1329 snprintf(
h1_name, 32,
"H1_Trace_%dD_P%d", dim, p);
1333 snprintf(
h1_name, 32,
"H1Pos_Trace_%dD_P%d", dim, p);
1342 snprintf(d_name, 32,
"L2_%dD_P%d", dim, p);
1346 snprintf(d_name, 32,
"L2_T%d_%dD_P%d", type, dim, p);
1351 L2_Elements[g] = NULL;
1352 Tr_Elements[g] = NULL;
1354 for (
int i = 0; i < 2; i++)
1356 SegDofOrd[i] = NULL;
1358 for (
int i = 0; i < 6; i++)
1360 TriDofOrd[i] = NULL;
1365 if (type == 0 || type == 1)
1376 const int pp1 = p + 1;
1377 SegDofOrd[0] =
new int[2*pp1];
1378 SegDofOrd[1] = SegDofOrd[0] + pp1;
1379 for (
int i = 0; i <= p; i++)
1381 SegDofOrd[0][i] = i;
1382 SegDofOrd[1][i] = p - i;
1387 if (type == 0 || type == 1)
1400 TriDofOrd[0] =
new int[6*TriDof];
1401 for (
int i = 1; i < 6; i++)
1403 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1405 const int pp1 = p + 1, pp2 = pp1 + 1;
1406 for (
int j = 0; j <= p; j++)
1407 for (
int i = 0; i + j <= p; i++)
1409 int o = TriDof - ((pp2 - j)*(pp1 - j))/2 + i;
1411 TriDofOrd[0][o] = o;
1412 TriDofOrd[1][o] = TriDof - ((pp2-j)*(pp1-j))/2 + k;
1413 TriDofOrd[2][o] = TriDof - ((pp2-i)*(pp1-i))/2 + k;
1414 TriDofOrd[3][o] = TriDof - ((pp2-k)*(pp1-k))/2 + i;
1415 TriDofOrd[4][o] = TriDof - ((pp2-k)*(pp1-k))/2 + j;
1416 TriDofOrd[5][o] = TriDof - ((pp2-i)*(pp1-i))/2 + j;
1421 if (type == 0 || type == 1)
1437 cerr <<
"L2_FECollection::L2_FECollection : dim = "
1449 return SegDofOrd[0];
1451 return SegDofOrd[1];
1455 return TriDofOrd[Or%6];
1462 delete [] SegDofOrd[0];
1463 delete [] TriDofOrd[0];
1466 delete L2_Elements[i];
1467 delete Tr_Elements[i];
1476 snprintf(
rt_name, 32,
"RT_%dD_P%d", dim, p);
1478 const int pp1 = p + 1;
1497 cerr <<
"RT_FECollection::RT_FECollection : dim = " << dim << endl;
1505 const int pp1 = p + 1, pp2 = p + 2;
1512 for (
int i = 0; i < 2; i++)
1516 for (
int i = 0; i < 6; i++)
1520 for (
int i = 0; i < 8; i++)
1528 l2_seg->SetMapType(map_type);
1534 for (
int i = 0; i <= p; i++)
1537 SegDofOrd[1][i] = signs ? (-1 - (p - i)) : (p - i);
1543 l2_tri->SetMapType(map_type);
1548 l2_quad->SetMapType(map_type);
1554 for (
int i = 1; i < 6; i++)
1560 for (
int j = 0; j <= p; j++)
1561 for (
int i = 0; i + j <= p; i++)
1563 int o = TriDof - ((pp2 - j)*(pp1 - j))/2 + i;
1566 TriDofOrd[1][o] = -1-(TriDof-((pp2-j)*(pp1-j))/2+k);
1567 TriDofOrd[2][o] = TriDof-((pp2-i)*(pp1-i))/2+k;
1568 TriDofOrd[3][o] = -1-(TriDof-((pp2-k)*(pp1-k))/2+i);
1569 TriDofOrd[4][o] = TriDof-((pp2-k)*(pp1-k))/2+j;
1570 TriDofOrd[5][o] = -1-(TriDof-((pp2-i)*(pp1-i))/2+j);
1573 for (
int k = 1; k < 6; k += 2)
1575 TriDofOrd[k][o] = -1 - TriDofOrd[k][o];
1582 for (
int i = 1; i < 8; i++)
1587 for (
int j = 0; j <= p; j++)
1588 for (
int i = 0; i <= p; i++)
1595 QuadDofOrd[4][o] = (p - i) + (p - j)*pp1;
1596 QuadDofOrd[5][o] = -1 - ((p - j) + (p - i)*pp1);
1597 QuadDofOrd[6][o] = (p - j) + i*pp1;
1598 QuadDofOrd[7][o] = -1 - (i + (p - j)*pp1);
1601 for (
int k = 1; k < 8; k += 2)
1603 QuadDofOrd[k][o] = -1 - QuadDofOrd[k][o];
1653 snprintf(
rt_name, 32,
"RT_Trace_%dD_P%d", dim, p);
1657 snprintf(
rt_name, 32,
"RT_ValTrace_%dD_P%d", dim, p);
1660 MFEM_VERIFY(dim == 2 || dim == 3,
"Wrong dimension, dim = " << dim);
1669 snprintf(
rt_name, 32,
"DG_Iface_%dD_P%d", dim, p);
1673 snprintf(
rt_name, 32,
"DG_IntIface_%dD_P%d", dim, p);
1676 MFEM_VERIFY(dim == 2 || dim == 3,
"Wrong dimension, dim = " << dim);
1681 const int pm1 = p - 1, pm2 = p - 2;
1683 snprintf(
nd_name, 32,
"ND_%dD_P%d", dim, p);
1690 for (
int i = 0; i < 2; i++)
1694 for (
int i = 0; i < 6; i++)
1698 for (
int i = 0; i < 8; i++)
1710 for (
int i = 0; i < p; i++)
1727 for (
int i = 1; i < 8; i++)
1732 for (
int j = 0; j < pm1; j++)
1734 for (
int i = 0; i < p; i++)
1737 int d2 = p*pm1 + j + i*pm1;
1747 QuadDofOrd[2][d1] = -1 - (p*pm1 + j + (pm1 - i)*pm1);
1751 QuadDofOrd[3][d2] = p*pm1 + (pm2 - j) + i*pm1;
1753 QuadDofOrd[4][d1] = -1 - ((pm1 - i) + (pm2 - j)*p);
1754 QuadDofOrd[4][d2] = -1 - (p*pm1 + (pm2 - j) + (pm1 - i)*pm1);
1756 QuadDofOrd[5][d1] = -1 - (p*pm1 + (pm2 - j) + (pm1 - i)*pm1);
1757 QuadDofOrd[5][d2] = -1 - ((pm1 - i) + (pm2 - j)*p);
1761 QuadDofOrd[6][d1] = p*pm1 + (pm2 - j) + i*pm1;
1762 QuadDofOrd[6][d2] = -1 - ((pm1 - i) + j*p);
1764 QuadDofOrd[7][d1] = i + (pm2 - j)*p;
1765 QuadDofOrd[7][d2] = -1 - (p*pm1 + j + (pm1 - i)*pm1);
1771 for (
int i = 1; i < 6; i++)
1777 for (
int j = 0; j <= pm2; j++)
1779 for (
int i = 0; i + j <= pm2; i++)
1781 int k1 = p*pm1 - (p - j)*(pm1 - j) + 2*i;
1782 int k2 = p*pm1 - (p - i)*(pm1 - i) + 2*j;
1819 if (Or != 0 && Or != 5)
1821 MFEM_ABORT(
"ND_FECollection::DofOrderForOrientation: "
1822 "triangle face orientation " << Or <<
" is not supported! "
1823 "Use Mesh::ReorientTetMesh to fix it.");
1855 snprintf(
nd_name, 32,
"ND_Trace_%dD_P%d", dim, p);
1861 snprintf(d_name, 32,
"Local_%s", fe_name);
1863 Local_Element = NULL;
1865 if (!strcmp(fe_name,
"BiCubic2DFiniteElement") ||
1866 !strcmp(fe_name,
"Quad_Q3"))
1871 else if (!strcmp(fe_name,
"Nedelec1HexFiniteElement") ||
1872 !strcmp(fe_name,
"Hex_ND1"))
1877 else if (!strncmp(fe_name,
"H1_", 3))
1882 else if (!strncmp(fe_name,
"L2_", 3))
1889 cerr <<
"Local_FECollection::Local_FECollection : fe_name = "
1896 void NURBSFECollection::Allocate(
int Order)
1902 snprintf(name, 16,
"NURBS%i", Order);
1905 void NURBSFECollection::Deallocate()
1907 delete ParallelepipedFE;
1908 delete QuadrilateralFE;
1912 const FiniteElement *
1921 mfem_error (
"NURBSFECollection: unknown geometry type.");
1928 mfem_error(
"NURBSFECollection::DofForGeometry");
1934 mfem_error(
"NURBSFECollection::DofOrderForOrientation");
1940 MFEM_ABORT(
"NURBS finite elements can not be statically condensed!");
Abstract class for Finite Elements.
Arbitrary order non-uniform rational B-splines (NURBS) finite elements.
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
Version of QuadraticDiscont2DFECollection with dofs in the Gaussian points.
int RT_dof[Geometry::NumGeom]
FiniteElement * ND_Elements[Geometry::NumGeom]
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual FiniteElementCollection * GetTraceCollection() const
virtual int DofForGeometry(int GeomType) const
FiniteElementCollection * GetTraceCollection() const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual ~L2_FECollection()
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
Piecewise-(bi)linear continuous finite elements.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
ND_FECollection(const int p, const int dim)
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
FiniteElementCollection * GetTraceCollection() const
L2_FECollection(const int p, const int dim, const int type=0)
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int DofForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
void InitFaces(const int p, const int dim, const int map_type, const bool signs)
FiniteElementCollection * GetTraceCollection() const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual ~RT_FECollection()
virtual int DofForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
Piecewise-(bi)cubic continuous finite elements.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
PointFiniteElement PointFE
virtual int DofForGeometry(int GeomType) const
FiniteElement * RT_Elements[Geometry::NumGeom]
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int DofForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int DofForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
ND_Trace_FECollection(const int p, const int dim)
TriLinear3DFiniteElement HexahedronFE
Discontinuous collection defined locally by a given finite element.
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
Version of QuadraticDiscont2DFECollection with positive basis functions.
virtual ~ND_FECollection()
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
RT_Trace_FECollection(const int p, const int dim, const int map_type=FiniteElement::INTEGRAL)
H1_FECollection(const int p, const int dim=3, const int type=0)
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
Version of QuadraticFECollection with positive basis functions.
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual ~H1_FECollection()
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
FiniteElementCollection * GetTraceCollection() const
Piecewise-linear nonconforming finite elements in 3D.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
DG_Interface_FECollection(const int p, const int dim, const int map_type=FiniteElement::VALUE)
Crouzeix-Raviart nonconforming elements in 2D.
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int DofForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
int GetDof() const
Returns the degrees of freedom in the FE space.
void mfem_error(const char *msg)
H1_Trace_FECollection(const int p, const int dim, const int type=0)
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
Linear3DFiniteElement TetrahedronFE
virtual int DofForGeometry(int GeomType) const
Linear2DFiniteElement TriangleFE
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
Version of LinearDiscont2DFECollection with dofs in the Gaussian points.
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
static FiniteElementCollection * New(const char *name)
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
RT_FECollection(const int p, const int dim, const int map_type, const bool signs)
Piecewise-(bi)quadratic continuous finite elements.
int HasFaceDofs(int GeomType) const
Arbitrary order H(curl)-conforming Nedelec finite elements.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int * DofOrderForOrientation(int GeomType, int Or) const
Arbitrary order H1-conforming (continuous) finite elements.
virtual int DofForGeometry(int GeomType) const
Local_FECollection(const char *fe_name)
BiLinear2DFiniteElement QuadrilateralFE
virtual int DofForGeometry(int GeomType) const
virtual int DofForGeometry(int GeomType) const
Linear (P1) finite elements on quadrilaterals.
virtual int DofForGeometry(int GeomType) const
Linear1DFiniteElement SegmentFE
int ND_dof[Geometry::NumGeom]
virtual int DofForGeometry(int GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const
Arbitrary order "L2-conforming" discontinuous finite elements.
virtual const FiniteElement * FiniteElementForGeometry(int GeomType) const