Alternative names | Polynomial, Galerkin, DGT (facets), Hdiv trace (facets), Q (quadrilateral and hexahedron) |
Exterior calculus names | \(\mathcal{P}^-_{k}\Lambda^{0}(\Delta_d)\), \(\mathcal{P}_{k}\Lambda^{0}(\Delta_d)\), \(\mathcal{Q}^-_{k}\Lambda^{0}(\square_d)\), \(\mathcal{P}^-_{k}\Lambda^{d}(\Delta_d)\), \(\mathcal{P}_{k}\Lambda^{d}(\Delta_d)\), \(\mathcal{Q}^-_{k}\Lambda^{d}(\square_d)\) |
Cockburn–fu names | \(\left[S_{2,k}^\unicode{0x25FA}\right]_{0}\), \(\left[S_{1,k}^\unicode{0x25FA}\right]_{0}\), \(\left[S_{4,k}^\square\right]_{0}\), \(\left[S_{2,k}^\unicode{0x25FA}\right]_{d}\), \(\left[S_{1,k}^\unicode{0x25FA}\right]_{d}\), \(\left[S_{4,k}^\square\right]_{d}\), \(\left[S_{3,k}^\square\right]_{d}\) |
Abbreviated names | P, CG, DG |
Orders | \(1\leqslant k\) |
Reference elements | interval, triangle, tetrahedron, quadrilateral, hexahedron, prism, pyramid |
Polynomial set | \(\mathcal{P}_{k}\) (interval, triangle, tetrahedron)
\(\mathcal{Q}_{k}\) (quadrilateral, hexahedron)
\(\mathcal{Z}^{(14)}_{k}\) (prism)
\(\mathcal{Z}^{(15)}_{k} \oplus \mathcal{Z}^{(16)}_{k}\) (pyramid)
↓ Show polynomial set definitions ↓↑ Hide polynomial set definitions ↑\(\mathcal{P}_k=\operatorname{span}\left\{\prod_{i=1}^dx_i^{p_i}\middle|\sum_{i=1}^dp_i\leqslant k\right\}\)
\(\mathcal{Q}_k=\operatorname{span}\left\{\prod_{i=1}^dx_i^{p_i}\middle|\max_i(p_i)\leqslant k\right\}\)
\(\mathcal{Z}^{(14)}_k=\operatorname{span}\left\{x_1^{p_1}x_2^{p_2}x_3^{p_3}\middle|\max(p_1+p_2,p_3)\leqslant k\right\}\)
\(\mathcal{Z}^{(15)}_k=\operatorname{span}\left\{x_1^{p_1}x_2^{p_2}x_3^{p_3}\middle|p_3\leqslant k-1,p_1+p_3\leqslant k,p_2+p_3\leqslant k\right\}\)
\(\mathcal{Z}^{(16)}_k=\operatorname{span}\left\{x_3^k\right\}\) |
DOFs | On each vertex: point evaluations
On each edge: point evaluations
On each face: point evaluations
On each volume: point evaluations |
Number of DOFs | interval: \(k+1\) (A000027) triangle: \((k+1)(k+2)/2\) (A000217) tetrahedron: \((k+1)(k+2)(k+3)/6\) (A000292) quadrilateral: \((k+1)^2\) (A000290) hexahedron: \((k+1)^3\) (A000578) prism: \((k+1)^2(k+2)/2\) (A002411) pyramid: \((k+1)(k+2)(2k+3)/6\) (A000330) |
Number of DOFs on subentities | vertices: \(1\) (A000012) edges: \(k-1\) (A000027) faces: \((k-1)(k-2)/2\) (A000217) (triangle), \((k-1)^2\) (A000290) (quadrilateral) volumes: \((k-1)(k-2)(k-3)/6\) (A000292) (tetrahedron), \((k-1)^3\) (A000578) (hexahedron), \((k-1)^2(k-2)/2\) (A002411) (prism), \((k-1)(k-2)(2k-3)/6\) (A000330) (pyramid) |
Mapping | identity |
continuity | Function values are continuous. |
Notes | DGT and Hdiv trace are names given to this element when it is defined on the facets of a mesh. |
Categories | Scalar-valued elements |
Basix | basix.ElementFamily.P, ..., basix.LagrangeVariant.equispaced ↓ Show Basix examples ↓↑ Hide Basix examples ↑Before trying this example, you must install Basix: pip3 install git+https://github.com/fenics/basix.git This element can then be created with the following lines of Python: import basix
# Create Lagrange order 1 on a interval element = basix.create_element(basix.ElementFamily.P, basix.CellType.interval, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a interval element = basix.create_element(basix.ElementFamily.P, basix.CellType.interval, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 3 on a interval element = basix.create_element(basix.ElementFamily.P, basix.CellType.interval, 3, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a triangle element = basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a triangle element = basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 3 on a triangle element = basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 3, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a quadrilateral element = basix.create_element(basix.ElementFamily.P, basix.CellType.quadrilateral, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a quadrilateral element = basix.create_element(basix.ElementFamily.P, basix.CellType.quadrilateral, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 3 on a quadrilateral element = basix.create_element(basix.ElementFamily.P, basix.CellType.quadrilateral, 3, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a tetrahedron element = basix.create_element(basix.ElementFamily.P, basix.CellType.tetrahedron, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a tetrahedron element = basix.create_element(basix.ElementFamily.P, basix.CellType.tetrahedron, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a hexahedron element = basix.create_element(basix.ElementFamily.P, basix.CellType.hexahedron, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a hexahedron element = basix.create_element(basix.ElementFamily.P, basix.CellType.hexahedron, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a prism element = basix.create_element(basix.ElementFamily.P, basix.CellType.prism, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a prism element = basix.create_element(basix.ElementFamily.P, basix.CellType.prism, 2, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 1 on a pyramid element = basix.create_element(basix.ElementFamily.P, basix.CellType.pyramid, 1, lagrange_variant=basix.LagrangeVariant.equispaced)
# Create Lagrange order 2 on a pyramid element = basix.create_element(basix.ElementFamily.P, basix.CellType.pyramid, 2, lagrange_variant=basix.LagrangeVariant.equispaced) |
Bempp | "P" (triangle) ↓ Show Bempp examples ↓↑ Hide Bempp examples ↑Before trying this example, you must install Bempp: pip3 install bempp-cl This element can then be created with the following lines of Python: import bempp.api grid = bempp.api.shapes.regular_sphere(1)
# Create Lagrange order 1 element = bempp.api.function_space(grid, "P", 1) |
Symfem | "Lagrange" (interval, triangle, tetrahedron, prism, pyramid)
"Q" (quadrilateral, hexahedron) ↓ Show Symfem examples ↓↑ Hide Symfem examples ↑Before trying this example, you must install Symfem: pip3 install symfem This element can then be created with the following lines of Python: import symfem
# Create Lagrange order 1 on a interval element = symfem.create_element("interval", "Lagrange", 1)
# Create Lagrange order 2 on a interval element = symfem.create_element("interval", "Lagrange", 2)
# Create Lagrange order 3 on a interval element = symfem.create_element("interval", "Lagrange", 3)
# Create Lagrange order 1 on a triangle element = symfem.create_element("triangle", "Lagrange", 1)
# Create Lagrange order 2 on a triangle element = symfem.create_element("triangle", "Lagrange", 2)
# Create Lagrange order 3 on a triangle element = symfem.create_element("triangle", "Lagrange", 3)
# Create Lagrange order 1 on a quadrilateral element = symfem.create_element("quadrilateral", "Q", 1)
# Create Lagrange order 2 on a quadrilateral element = symfem.create_element("quadrilateral", "Q", 2)
# Create Lagrange order 3 on a quadrilateral element = symfem.create_element("quadrilateral", "Q", 3)
# Create Lagrange order 1 on a tetrahedron element = symfem.create_element("tetrahedron", "Lagrange", 1)
# Create Lagrange order 2 on a tetrahedron element = symfem.create_element("tetrahedron", "Lagrange", 2)
# Create Lagrange order 1 on a hexahedron element = symfem.create_element("hexahedron", "Q", 1)
# Create Lagrange order 2 on a hexahedron element = symfem.create_element("hexahedron", "Q", 2)
# Create Lagrange order 1 on a prism element = symfem.create_element("prism", "Lagrange", 1)
# Create Lagrange order 2 on a prism element = symfem.create_element("prism", "Lagrange", 2)
# Create Lagrange order 1 on a pyramid element = symfem.create_element("pyramid", "Lagrange", 1)
# Create Lagrange order 2 on a pyramid element = symfem.create_element("pyramid", "Lagrange", 2) |
UFL | "Lagrange" (interval, triangle, tetrahedron)
"Q" (quadrilateral, hexahedron) ↓ Show UFL examples ↓↑ Hide UFL examples ↑Before trying this example, you must install UFL: pip3 install UFL This element can then be created with the following lines of Python: import ufl
# Create Lagrange order 1 on a interval element = ufl.FiniteElement("Lagrange", "interval", 1)
# Create Lagrange order 2 on a interval element = ufl.FiniteElement("Lagrange", "interval", 2)
# Create Lagrange order 3 on a interval element = ufl.FiniteElement("Lagrange", "interval", 3)
# Create Lagrange order 1 on a triangle element = ufl.FiniteElement("Lagrange", "triangle", 1)
# Create Lagrange order 2 on a triangle element = ufl.FiniteElement("Lagrange", "triangle", 2)
# Create Lagrange order 3 on a triangle element = ufl.FiniteElement("Lagrange", "triangle", 3)
# Create Lagrange order 1 on a quadrilateral element = ufl.FiniteElement("Q", "quadrilateral", 1)
# Create Lagrange order 2 on a quadrilateral element = ufl.FiniteElement("Q", "quadrilateral", 2)
# Create Lagrange order 3 on a quadrilateral element = ufl.FiniteElement("Q", "quadrilateral", 3)
# Create Lagrange order 1 on a tetrahedron element = ufl.FiniteElement("Lagrange", "tetrahedron", 1)
# Create Lagrange order 2 on a tetrahedron element = ufl.FiniteElement("Lagrange", "tetrahedron", 2)
# Create Lagrange order 1 on a hexahedron element = ufl.FiniteElement("Q", "hexahedron", 1)
# Create Lagrange order 2 on a hexahedron element = ufl.FiniteElement("Q", "hexahedron", 2) |