symfem.elements.dual

Dual elements.

These elements’ definitions appear in https://doi.org/10.1016/j.crma.2004.12.022 (Buffa, Christiansen, 2005)

Module Contents

Classes

DualCiarletElement

Abstract barycentric finite element.

Dual

Barycentric dual finite element.

BuffaChristiansen

Buffa-Christiansen barycentric dual finite element.

RotatedBuffaChristiansen

RotatedBuffa-Christiansen barycentric dual finite element.

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.FiniteElement

Abstract barycentric finite element.

abstract property maximum_degree: int

Get the maximum degree of this polynomial set for the element.

get_polynomial_basis(reshape: bool = True) List[symfem.functions.AnyFunction]

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.AnyFunction]

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

abstract map_to_cell(vertices_in: symfem.geometry.SetOfPointsInput, basis: List[symfem.functions.AnyFunction] | None = None, forward_map: symfem.geometry.PointType | None = None, inverse_map: symfem.geometry.PointType | None = None) List[symfem.functions.AnyFunction]

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: DualCiarletElement

Barycentric dual finite element.

names = ['dual polynomial', 'dual P', 'dual']
references = ['dual polygon']
min_order = 0
max_order = 1
continuity = 'C0'
last_updated = '2023.05'
class symfem.elements.dual.BuffaChristiansen(reference: symfem.references.DualPolygon, order: int)

Bases: DualCiarletElement

Buffa-Christiansen barycentric dual finite element.

names = ['Buffa-Christiansen', 'BC']
references = ['dual polygon']
min_order = 1
max_order = 1
continuity = 'H(div)'
last_updated = '2023.05'
class symfem.elements.dual.RotatedBuffaChristiansen(reference: symfem.references.DualPolygon, order: int)

Bases: DualCiarletElement

RotatedBuffa-Christiansen barycentric dual finite element.

names = ['rotated Buffa-Christiansen', 'RBC']
references = ['dual polygon']
min_order = 1
max_order = 1
continuity = 'H(div)'
last_updated = '2023.05'