symfem.elements.dual¶
Dual elements.
These elements’ definitions appear in https://doi.org/10.1016/j.crma.2004.12.022 (Buffa, Christiansen, 2005)
Classes¶
Abstract barycentric finite element. |
|
Barycentric dual finite element. |
|
Buffa-Christiansen barycentric dual finite element. |
|
RotatedBuffa-Christiansen barycentric dual finite element. |
Module Contents¶
- class symfem.elements.dual.DualCiarletElement(dual_coefficients: list[list[list[int | sympy.core.expr.Expr]]], fine_space: str, reference: symfem.references.DualPolygon, order: int, dof_entities: list[tuple[int, int]], domain_dim: int, range_dim: int, range_shape: tuple[int, Ellipsis] | None = None, dof_directions: symfem.geometry.SetOfPoints | None = None)¶
Bases:
symfem.finite_element.FiniteElementAbstract barycentric finite element.
- dual_coefficients¶
- fine_space¶
- _basis_functions: list[symfem.functions.Function] | None = None¶
- _dof_entities¶
- _dof_directions = None¶
- get_polynomial_basis(reshape: bool = True) list[symfem.functions.Function]¶
Get the symbolic polynomial basis for the element.
- Returns:
The polynomial basis
- get_dual_matrix() sympy.matrices.dense.MutableDenseMatrix¶
Get the dual matrix.
- Returns:
The dual matrix
- get_basis_functions(use_tensor_factorisation: bool = False) list[symfem.functions.Function]¶
Get the basis functions of the element.
- Parameters:
use_tensor_factorisation – Should a tensor factorisation be used?
- Returns:
The basis functions
- entity_dofs(entity_dim: int, entity_number: int) list[int]¶
Get the numbers of the DOFs associated with the given entity.
- Parameters:
entity_dim – The dimension of the entity
entity_number – The number of the entity
- Returns:
The numbers of the DOFs associated with the entity
- dof_plot_positions() list[symfem.geometry.PointType]¶
Get the points to plot each DOF at on a DOF diagram.
- Returns:
The DOF positions
- dof_directions() list[symfem.geometry.PointType | None]¶
Get the direction associated with each DOF.
- Returns:
The DOF directions
- dof_entities() list[tuple[int, int]]¶
Get the entities that each DOF is associated with.
- Returns:
The entities
- abstractmethod map_to_cell(vertices_in: symfem.geometry.SetOfPointsInput, basis: list[symfem.functions.Function] | None = None, forward_map: symfem.geometry.PointType | None = None, inverse_map: symfem.geometry.PointType | None = None) list[symfem.functions.Function]¶
Map the basis onto a cell using the appropriate mapping for the element.
- Parameters:
vertices_in – The vertices of the cell
basis – The basis functions
forward_map – The map from the reference to the cell
inverse_map – The map to the reference from the cell
- Returns:
The basis functions mapped to the cell
- class symfem.elements.dual.Dual(reference: symfem.references.DualPolygon, order: int)¶
Bases:
DualCiarletElementBarycentric dual finite element.
- property lagrange_subdegree: int¶
- Abstractmethod:
Get the Lagrange subdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a subspace of this element’s polynomial space.
- property lagrange_superdegree: int | None¶
- Abstractmethod:
Get the Lagrange superdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a superspace of this element’s polynomial space.
- property polynomial_subdegree: int¶
- Abstractmethod:
Get the polynomial subdegree of the element.
This is the degree of the highest degree complete polynomial space that is a subspace of this element’s polynomial space.
- property polynomial_superdegree: int | None¶
- Abstractmethod:
Get the polynomial superdegree of the element.
This is the degree of the highest degree complete polynomial space that is a superspace of this element’s polynomial space.
- names = ['dual polynomial', 'dual P', 'dual']¶
- references = ['dual polygon']¶
- min_order = 0¶
- max_order = 1¶
- continuity = 'C0'¶
- value_type = 'scalar dual'¶
- last_updated = '2025.12'¶
- class symfem.elements.dual.BuffaChristiansen(reference: symfem.references.DualPolygon, order: int)¶
Bases:
DualCiarletElementBuffa-Christiansen barycentric dual finite element.
- property lagrange_subdegree: int¶
- Abstractmethod:
Get the Lagrange subdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a subspace of this element’s polynomial space.
- property lagrange_superdegree: int | None¶
- Abstractmethod:
Get the Lagrange superdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a superspace of this element’s polynomial space.
- property polynomial_subdegree: int¶
- Abstractmethod:
Get the polynomial subdegree of the element.
This is the degree of the highest degree complete polynomial space that is a subspace of this element’s polynomial space.
- property polynomial_superdegree: int | None¶
- Abstractmethod:
Get the polynomial superdegree of the element.
This is the degree of the highest degree complete polynomial space that is a superspace of this element’s polynomial space.
- names = ['Buffa-Christiansen', 'BC']¶
- references = ['dual polygon']¶
- min_order = 0¶
- max_order = 0¶
- continuity = 'H(div)'¶
- value_type = 'vector dual'¶
- last_updated = '2025.12'¶
- class symfem.elements.dual.RotatedBuffaChristiansen(reference: symfem.references.DualPolygon, order: int)¶
Bases:
DualCiarletElementRotatedBuffa-Christiansen barycentric dual finite element.
- property lagrange_subdegree: int¶
- Abstractmethod:
Get the Lagrange subdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a subspace of this element’s polynomial space.
- property lagrange_superdegree: int | None¶
- Abstractmethod:
Get the Lagrange superdegree of the element.
This is the degree of the highest degree Lagrange space whose polynomial space is a superspace of this element’s polynomial space.
- property polynomial_subdegree: int¶
- Abstractmethod:
Get the polynomial subdegree of the element.
This is the degree of the highest degree complete polynomial space that is a subspace of this element’s polynomial space.
- property polynomial_superdegree: int | None¶
- Abstractmethod:
Get the polynomial superdegree of the element.
This is the degree of the highest degree complete polynomial space that is a superspace of this element’s polynomial space.
- names = ['rotated Buffa-Christiansen', 'RBC']¶
- references = ['dual polygon']¶
- min_order = 0¶
- max_order = 0¶
- continuity = 'H(div)'¶
- value_type = 'vector dual'¶
- last_updated = '2025.12'¶