17 #define snprintf _snprintf_s
32 mfem_error (
"FiniteElementCollection::HasFaceDofs:"
33 " unknown geometry type.");
42 if (!strcmp(name,
"Linear"))
44 else if (!strcmp(name,
"Quadratic"))
46 else if (!strcmp(name,
"QuadraticPos"))
48 else if (!strcmp(name,
"Cubic"))
50 else if (!strcmp(name,
"Const3D"))
52 else if (!strcmp(name,
"Const2D"))
54 else if (!strcmp(name,
"LinearDiscont2D"))
56 else if (!strcmp(name,
"GaussLinearDiscont2D"))
58 else if (!strcmp(name,
"P1OnQuad"))
60 else if (!strcmp(name,
"QuadraticDiscont2D"))
62 else if (!strcmp(name,
"QuadraticPosDiscont2D"))
64 else if (!strcmp(name,
"GaussQuadraticDiscont2D"))
66 else if (!strcmp(name,
"CubicDiscont2D"))
68 else if (!strcmp(name,
"LinearDiscont3D"))
70 else if (!strcmp(name,
"QuadraticDiscont3D"))
72 else if (!strcmp(name,
"LinearNonConf3D"))
74 else if (!strcmp(name,
"CrouzeixRaviart"))
76 else if (!strcmp(name,
"ND1_3D"))
78 else if (!strcmp(name,
"RT0_2D"))
80 else if (!strcmp(name,
"RT1_2D"))
82 else if (!strcmp(name,
"RT2_2D"))
84 else if (!strcmp(name,
"RT0_3D"))
86 else if (!strcmp(name,
"RT1_3D"))
88 else if (!strncmp(name,
"H1_", 3))
90 else if (!strncmp(name,
"H1Pos_", 6))
92 else if (!strncmp(name,
"L2_T", 4))
95 else if (!strncmp(name,
"L2_", 3))
97 else if (!strncmp(name,
"RT_", 3))
99 else if (!strncmp(name,
"RT_Trace_", 9))
101 else if (!strncmp(name,
"RT_ValTrace_", 12))
104 else if (!strncmp(name,
"ND_", 3))
106 else if (!strncmp(name,
"Local_", 6))
108 else if (!strncmp(name,
"NURBS", 5))
112 "Unknown FiniteElementCollection!");
129 mfem_error (
"LinearFECollection: unknown geometry type.");
145 mfem_error (
"LinearFECollection: unknown geometry type.");
168 mfem_error (
"QuadraticFECollection: unknown geometry type.");
184 mfem_error (
"QuadraticFECollection: unknown geometry type.");
191 static int indexes[] = { 0 };
205 mfem_error (
"QuadraticPosFECollection: unknown geometry type.");
218 mfem_error (
"QuadraticPosFECollection: unknown geometry type.");
226 static int indexes[] = { 0 };
244 mfem_error (
"CubicFECollection: unknown geometry type.");
260 mfem_error (
"CubicFECollection: unknown geometry type.");
269 static int ind_pos[] = { 0, 1 };
270 static int ind_neg[] = { 1, 0 };
278 static int indexes[] = { 0 };
284 static int sq_ind[8][4] = {{0, 1, 2, 3}, {0, 2, 1, 3},
285 {2, 0, 3, 1}, {1, 0, 3, 2},
286 {3, 2, 1, 0}, {3, 1, 2, 0},
287 {1, 3, 0, 2}, {2, 3, 0, 1}};
304 mfem_error (
"CrouzeixRaviartFECollection: unknown geometry type.");
318 mfem_error (
"CrouzeixRaviartFECollection: unknown geometry type.");
326 static int indexes[] = { 0 };
341 mfem_error (
"RT0_2DFECollection: unknown geometry type.");
355 mfem_error (
"RT0_2DFECollection: unknown geometry type.");
363 static int ind_pos[] = { 0 };
364 static int ind_neg[] = { -1 };
381 mfem_error (
"RT1_2DFECollection: unknown geometry type.");
395 mfem_error (
"RT1_2DFECollection: unknown geometry type.");
403 static int ind_pos[] = { 0, 1 };
404 static int ind_neg[] = { -2, -1 };
420 mfem_error (
"RT2_2DFECollection: unknown geometry type.");
434 mfem_error (
"RT2_2DFECollection: unknown geometry type.");
442 static int ind_pos[] = { 0, 1, 2 };
443 static int ind_neg[] = { -3, -2, -1 };
459 mfem_error (
"Const2DFECollection: unknown geometry type.");
473 mfem_error (
"Const2DFECollection: unknown geometry type.");
493 mfem_error (
"LinearDiscont2DFECollection: unknown geometry type.");
507 mfem_error (
"LinearDiscont2DFECollection: unknown geometry type.");
527 mfem_error (
"GaussLinearDiscont2DFECollection:"
528 " unknown geometry type.");
542 mfem_error (
"GaussLinearDiscont2DFECollection:"
543 " unknown geometry type.");
549 int GeomType,
int Or)
const
560 mfem_error (
"P1OnQuadFECollection: unknown geometry type.");
573 mfem_error (
"P1OnQuadFECollection: unknown geometry type.");
579 int GeomType,
int Or)
const
593 mfem_error (
"QuadraticDiscont2DFECollection: unknown geometry type.");
607 mfem_error (
"QuadraticDiscont2DFECollection: unknown geometry type.");
613 int GeomType,
int Or)
const
626 mfem_error (
"QuadraticPosDiscont2DFECollection: unknown geometry type.");
639 mfem_error (
"QuadraticPosDiscont2DFECollection: unknown geometry type.");
654 mfem_error (
"GaussQuadraticDiscont2DFECollection:"
655 " unknown geometry type.");
669 mfem_error (
"GaussQuadraticDiscont2DFECollection:"
670 " unknown geometry type.");
676 int GeomType,
int Or)
const
690 mfem_error (
"CubicDiscont2DFECollection: unknown geometry type.");
704 mfem_error (
"CubicDiscont2DFECollection: unknown geometry type.");
726 mfem_error (
"LinearNonConf3DFECollection: unknown geometry type.");
742 mfem_error (
"LinearNonConf3DFECollection: unknown geometry type.");
750 static int indexes[] = { 0 };
764 mfem_error (
"Const3DFECollection: unknown geometry type.");
780 mfem_error (
"Const3DFECollection: unknown geometry type.");
800 mfem_error (
"LinearDiscont3DFECollection: unknown geometry type.");
816 mfem_error (
"LinearDiscont3DFECollection: unknown geometry type.");
836 mfem_error (
"QuadraticDiscont3DFECollection: unknown geometry type.");
852 mfem_error (
"QuadraticDiscont3DFECollection: unknown geometry type.");
858 int GeomType,
int Or)
const
875 mfem_error (
"RefinedLinearFECollection: unknown geometry type.");
891 mfem_error (
"RefinedLinearFECollection: unknown geometry type.");
898 static int indexes[] = { 0 };
912 mfem_error (
"ND1_3DFECollection: unknown geometry type.");
928 mfem_error (
"ND1_3DFECollection: unknown geometry type.");
936 static int ind_pos[] = { 0 };
937 static int ind_neg[] = { -1 };
955 mfem_error (
"RT0_3DFECollection: unknown geometry type.");
971 mfem_error (
"RT0_3DFECollection: unknown geometry type.");
979 static int ind_pos[] = { 0 };
980 static int ind_neg[] = { -1 };
1000 mfem_error (
"RT1_3DFECollection: unknown geometry type.");
1015 mfem_error (
"RT1_3DFECollection: unknown geometry type.");
1025 static int sq_ind[8][4] = {
1026 {0, 1, 2, 3}, {-1, -3, -2, -4},
1027 {2, 0, 3, 1}, {-2, -1, -4, -3},
1028 {3, 2, 1, 0}, {-4, -2, -3, -1},
1029 {1, 3, 0, 2}, {-3, -4, -1, -2}
1041 const int pm1 = p - 1, pm2 = pm1 - 1, pm3 = pm2 - 1;
1044 snprintf(h1_name, 32,
"H1_%dD_P%d", dim, p);
1046 snprintf(h1_name, 32,
"H1Pos_%dD_P%d", dim, p);
1051 H1_Elements[g] = NULL;
1053 for (
int i = 0; i < 2; i++)
1054 SegDofOrd[i] = NULL;
1055 for (
int i = 0; i < 6; i++)
1056 TriDofOrd[i] = NULL;
1057 for (
int i = 0; i < 8; i++)
1058 QuadDofOrd[i] = NULL;
1068 SegDofOrd[0] =
new int[2*pm1];
1069 SegDofOrd[1] = SegDofOrd[0] + pm1;
1070 for (
int i = 0; i < pm1; i++)
1072 SegDofOrd[0][i] = i;
1073 SegDofOrd[1][i] = pm2 - i;
1093 TriDofOrd[0] =
new int[6*TriDof];
1094 for (
int i = 1; i < 6; i++)
1095 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1097 for (
int j = 0; j < pm2; j++)
1098 for (
int i = 0; i + j < pm2; i++)
1100 int o = TriDof - ((pm1 - j)*(pm2 - j))/2 + i;
1101 int k = pm3 - j - i;
1102 TriDofOrd[0][o] = o;
1103 TriDofOrd[1][o] = TriDof - ((pm1-j)*(pm2-j))/2 + k;
1104 TriDofOrd[2][o] = TriDof - ((pm1-i)*(pm2-i))/2 + k;
1105 TriDofOrd[3][o] = TriDof - ((pm1-k)*(pm2-k))/2 + i;
1106 TriDofOrd[4][o] = TriDof - ((pm1-k)*(pm2-k))/2 + j;
1107 TriDofOrd[5][o] = TriDof - ((pm1-i)*(pm2-i))/2 + j;
1110 QuadDofOrd[0] =
new int[8*QuadDof];
1111 for (
int i = 1; i < 8; i++)
1112 QuadDofOrd[i] = QuadDofOrd[i-1] + QuadDof;
1114 for (
int j = 0; j < pm1; j++)
1115 for (
int i = 0; i < pm1; i++)
1118 QuadDofOrd[0][o] = i + j*pm1;
1119 QuadDofOrd[1][o] = j + i*pm1;
1120 QuadDofOrd[2][o] = j + (pm2 - i)*pm1;
1121 QuadDofOrd[3][o] = (pm2 - i) + j*pm1;
1122 QuadDofOrd[4][o] = (pm2 - i) + (pm2 - j)*pm1;
1123 QuadDofOrd[5][o] = (pm2 - j) + (pm2 - i)*pm1;
1124 QuadDofOrd[6][o] = (pm2 - j) + i*pm1;
1125 QuadDofOrd[7][o] = i + (pm2 - j)*pm1;
1151 return SegDofOrd[0];
1152 return SegDofOrd[1];
1156 return TriDofOrd[Or%6];
1160 return QuadDofOrd[Or%8];
1167 delete [] SegDofOrd[0];
1168 delete [] TriDofOrd[0];
1169 delete [] QuadDofOrd[0];
1171 delete H1_Elements[g];
1178 snprintf(d_name, 32,
"L2_%dD_P%d", dim, p);
1180 snprintf(d_name, 32,
"L2_T%d_%dD_P%d", type, dim, p);
1184 L2_Elements[g] = NULL;
1185 Tr_Elements[g] = NULL;
1187 for (
int i = 0; i < 2; i++)
1188 SegDofOrd[i] = NULL;
1189 for (
int i = 0; i < 6; i++)
1190 TriDofOrd[i] = NULL;
1194 if (type == 0 || type == 1)
1201 const int pp1 = p + 1;
1202 SegDofOrd[0] =
new int[2*pp1];
1203 SegDofOrd[1] = SegDofOrd[0] + pp1;
1204 for (
int i = 0; i <= p; i++)
1206 SegDofOrd[0][i] = i;
1207 SegDofOrd[1][i] = p - i;
1212 if (type == 0 || type == 1)
1225 TriDofOrd[0] =
new int[6*TriDof];
1226 for (
int i = 1; i < 6; i++)
1227 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1228 const int pp1 = p + 1, pp2 = pp1 + 1;
1229 for (
int j = 0; j <= p; j++)
1230 for (
int i = 0; i + j <= p; i++)
1232 int o = TriDof - ((pp2 - j)*(pp1 - j))/2 + i;
1234 TriDofOrd[0][o] = o;
1235 TriDofOrd[1][o] = TriDof - ((pp2-j)*(pp1-j))/2 + k;
1236 TriDofOrd[2][o] = TriDof - ((pp2-i)*(pp1-i))/2 + k;
1237 TriDofOrd[3][o] = TriDof - ((pp2-k)*(pp1-k))/2 + i;
1238 TriDofOrd[4][o] = TriDof - ((pp2-k)*(pp1-k))/2 + j;
1239 TriDofOrd[5][o] = TriDof - ((pp2-i)*(pp1-i))/2 + j;
1244 if (type == 0 || type == 1)
1260 cerr <<
"L2_FECollection::L2_FECollection : dim = "
1271 return SegDofOrd[0];
1272 return SegDofOrd[1];
1276 return TriDofOrd[Or%6];
1283 delete [] SegDofOrd[0];
1284 delete [] TriDofOrd[0];
1287 delete L2_Elements[i];
1288 delete Tr_Elements[i];
1297 snprintf(rt_name, 32,
"RT_%dD_P%d", dim, p);
1299 const int pp1 = p + 1;
1318 cerr <<
"RT_FECollection::RT_FECollection : dim = " << dim << endl;
1325 const int pp1 = p + 1, pp2 = p + 2;
1329 RT_Elements[g] = NULL;
1332 for (
int i = 0; i < 2; i++)
1333 SegDofOrd[i] = NULL;
1334 for (
int i = 0; i < 6; i++)
1335 TriDofOrd[i] = NULL;
1336 for (
int i = 0; i < 8; i++)
1337 QuadDofOrd[i] = NULL;
1342 l2_seg->SetMapType(map_type);
1346 SegDofOrd[0] =
new int[2*pp1];
1347 SegDofOrd[1] = SegDofOrd[0] + pp1;
1348 for (
int i = 0; i <= p; i++)
1350 SegDofOrd[0][i] = i;
1351 SegDofOrd[1][i] = -1 - (p - i);
1357 l2_tri->SetMapType(map_type);
1362 l2_quad->SetMapType(map_type);
1367 TriDofOrd[0] =
new int[6*TriDof];
1368 for (
int i = 1; i < 6; i++)
1369 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1372 for (
int j = 0; j <= p; j++)
1373 for (
int i = 0; i + j <= p; i++)
1375 int o = TriDof - ((pp2 - j)*(pp1 - j))/2 + i;
1377 TriDofOrd[0][o] = o;
1378 TriDofOrd[1][o] = -1-(TriDof-((pp2-j)*(pp1-j))/2+k);
1379 TriDofOrd[2][o] = TriDof-((pp2-i)*(pp1-i))/2+k;
1380 TriDofOrd[3][o] = -1-(TriDof-((pp2-k)*(pp1-k))/2+i);
1381 TriDofOrd[4][o] = TriDof-((pp2-k)*(pp1-k))/2+j;
1382 TriDofOrd[5][o] = -1-(TriDof-((pp2-i)*(pp1-i))/2+j);
1386 QuadDofOrd[0] =
new int[8*QuadDof];
1387 for (
int i = 1; i < 8; i++)
1388 QuadDofOrd[i] = QuadDofOrd[i-1] + QuadDof;
1390 for (
int j = 0; j <= p; j++)
1391 for (
int i = 0; i <= p; i++)
1394 QuadDofOrd[0][o] = i + j*pp1;
1395 QuadDofOrd[1][o] = -1 - (j + i*pp1);
1396 QuadDofOrd[2][o] = j + (p - i)*pp1;
1397 QuadDofOrd[3][o] = -1 - ((p - i) + j*pp1);
1398 QuadDofOrd[4][o] = (p - i) + (p - j)*pp1;
1399 QuadDofOrd[5][o] = -1 - ((p - j) + (p - i)*pp1);
1400 QuadDofOrd[6][o] = (p - j) + i*pp1;
1401 QuadDofOrd[7][o] = -1 - (i + (p - j)*pp1);
1411 return SegDofOrd[0];
1412 return SegDofOrd[1];
1416 return TriDofOrd[Or%6];
1420 return QuadDofOrd[Or%8];
1427 delete [] SegDofOrd[0];
1428 delete [] TriDofOrd[0];
1429 delete [] QuadDofOrd[0];
1431 delete RT_Elements[g];
1439 snprintf(
rt_name, 32,
"RT_Trace_%dD_P%d", dim, p);
1441 snprintf(
rt_name, 32,
"RT_ValTrace_%dD_P%d", dim, p);
1443 MFEM_VERIFY(dim == 2 || dim == 3,
"Wrong dimension, dim = " << dim);
1448 const int pm1 = p - 1, pm2 = p - 2;
1450 snprintf(nd_name, 32,
"ND_%dD_P%d", dim, p);
1454 ND_Elements[g] = NULL;
1457 for (
int i = 0; i < 2; i++)
1458 SegDofOrd[i] = NULL;
1459 for (
int i = 0; i < 6; i++)
1460 TriDofOrd[i] = NULL;
1461 for (
int i = 0; i < 8; i++)
1462 QuadDofOrd[i] = NULL;
1464 if (dim == 2 || dim == 3)
1477 SegDofOrd[0] =
new int[2*p];
1478 SegDofOrd[1] = SegDofOrd[0] + p;
1479 for (
int i = 0; i < p; i++)
1481 SegDofOrd[0][i] = i;
1482 SegDofOrd[1][i] = -1 - (pm1 - i);
1487 mfem_error(
"ND_FECollection::ND_FECollection : dim != 2 or 3");
1499 QuadDofOrd[0] =
new int[8*QuadDof];
1500 for (
int i = 1; i < 8; i++)
1501 QuadDofOrd[i] = QuadDofOrd[i-1] + QuadDof;
1503 for (
int j = 0; j < pm1; j++)
1504 for (
int i = 0; i < p; i++)
1507 int d2 = p*pm1 + j + i*pm1;
1509 QuadDofOrd[0][d1] = d1;
1510 QuadDofOrd[0][d2] = d2;
1512 QuadDofOrd[1][d1] = d2;
1513 QuadDofOrd[1][d2] = d1;
1517 QuadDofOrd[2][d1] = -1 - (p*pm1 + j + (pm1 - i)*pm1);
1518 QuadDofOrd[2][d2] = i + (pm2 - j)*p;
1520 QuadDofOrd[3][d1] = -1 - ((pm1 - i) + j*p);
1521 QuadDofOrd[3][d2] = p*pm1 + (pm2 - j) + i*pm1;
1523 QuadDofOrd[4][d1] = -1 - ((pm1 - i) + (pm2 - j)*p);
1524 QuadDofOrd[4][d2] = -1 - (p*pm1 + (pm2 - j) + (pm1 - i)*pm1);
1526 QuadDofOrd[5][d1] = -1 - (p*pm1 + (pm2 - j) + (pm1 - i)*pm1);
1527 QuadDofOrd[5][d2] = -1 - ((pm1 - i) + (pm2 - j)*p);
1531 QuadDofOrd[6][d1] = p*pm1 + (pm2 - j) + i*pm1;
1532 QuadDofOrd[6][d2] = -1 - ((pm1 - i) + j*p);
1534 QuadDofOrd[7][d1] = i + (pm2 - j)*p;
1535 QuadDofOrd[7][d2] = -1 - (p*pm1 + j + (pm1 - i)*pm1);
1539 TriDofOrd[0] =
new int[6*TriDof];
1540 for (
int i = 1; i < 6; i++)
1541 TriDofOrd[i] = TriDofOrd[i-1] + TriDof;
1544 for (
int j = 0; j <= pm2; j++)
1545 for (
int i = 0; i + j <= pm2; i++)
1547 int k1 = p*pm1 - (p - j)*(pm1 - j) + 2*i;
1548 int k2 = p*pm1 - (p - i)*(pm1 - i) + 2*j;
1550 TriDofOrd[0][k1 ] = k1;
1551 TriDofOrd[0][k1+1] = k1 + 1;
1553 TriDofOrd[5][k1 ] = k2 + 1;
1554 TriDofOrd[5][k1+1] = k2;
1568 return SegDofOrd[0];
1569 return SegDofOrd[1];
1573 if (Or != 0 && Or != 5)
1576 "ND_FECollection::DofOrderForOrientation :\n"
1577 " triangle face orientation " << Or <<
" is not supported!\n"
1578 " Use Mesh::ReorientTetMesh to fix it." << endl;
1581 return TriDofOrd[Or%6];
1585 return QuadDofOrd[Or%8];
1592 delete [] SegDofOrd[0];
1593 delete [] TriDofOrd[0];
1594 delete [] QuadDofOrd[0];
1596 delete ND_Elements[g];
1602 snprintf(d_name, 32,
"Local_%s", fe_name);
1604 Local_Element = NULL;
1606 if (!strcmp(fe_name,
"BiCubic2DFiniteElement") ||
1607 !strcmp(fe_name,
"Quad_Q3"))
1612 else if (!strcmp(fe_name,
"Nedelec1HexFiniteElement") ||
1613 !strcmp(fe_name,
"Hex_ND1"))
1618 else if (!strncmp(fe_name,
"H1_", 3))
1623 else if (!strncmp(fe_name,
"L2_", 3))
1630 cerr <<
"Local_FECollection::Local_FECollection : fe_name = "
1637 void NURBSFECollection::Allocate(
int Order)
1643 snprintf(name, 16,
"NURBS%i", Order);
1646 void NURBSFECollection::Deallocate()
1648 delete ParallelepipedFE;
1649 delete QuadrilateralFE;
1653 const FiniteElement *
1662 mfem_error (
"NURBSFECollection: unknown geometry type.");
1669 mfem_error(
"NURBSFECollection::DofForGeometry");
1675 mfem_error(
"NURBSFECollection::DofOrderForOrientation");
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.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
virtual int DofForGeometry(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
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
void InitFaces(const int p, const int dim, const int map_type)
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
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
virtual int * DofOrderForOrientation(int GeomType, int Or) const
RT_FECollection(const int p, const int dim, const int map_type)
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
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
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
Piecewise-linear nonconforming finite elements in 3D.
virtual int * DofOrderForOrientation(int GeomType, int Or) const
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
void mfem_error(const char *msg)
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
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
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