Skip to content

Commit 38260c0

Browse files
mscroggsjhale
authored andcommitted
add symmetric to finite element (#684)
1 parent be5736a commit 38260c0

File tree

4 files changed

+9
-0
lines changed

4 files changed

+9
-0
lines changed

ffcx/codegeneration/C/finite_element.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def generator(ir, options):
4141
d["num_sub_elements"] = ir.num_sub_elements
4242
d["block_size"] = ir.block_size
4343
d["discontinuous"] = "true" if ir.discontinuous else "false"
44+
d["symmetric"] = "true" if ir.symmetric else "false"
4445

4546
if ir.lagrange_variant is None:
4647
d["lagrange_variant"] = -1

ffcx/codegeneration/C/finite_element_template.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
.reference_value_shape = {reference_value_shape},
2828
.reference_value_size = {reference_value_size},
2929
.degree = {degree},
30+
.symmetric = {symmetric},
3031
.block_size = {block_size},
3132
.basix_family = {basix_family},
3233
.basix_cell = {basix_cell},

ffcx/codegeneration/ufcx.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ extern "C"
107107
/// Maximum polynomial degree of the finite element function space
108108
int degree;
109109

110+
/// Is the value a symmetric 2-tensor
111+
bool symmetric;
112+
110113
/// Block size for a VectorElement. For a TensorElement, this is the
111114
/// product of the tensor's dimensions
112115
int block_size;

ffcx/ir/representation.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ class ElementIR(typing.NamedTuple):
9797
space_dimension: int
9898
reference_value_shape: tuple[int, ...]
9999
degree: int
100+
symmetric: bool
100101
num_sub_elements: int
101102
block_size: int
102103
sub_elements: list[str]
@@ -296,6 +297,9 @@ def _compute_element_ir(element, element_numbers, finite_element_names):
296297
ir["basix_cell"] = element.cell_type
297298
ir["discontinuous"] = element.discontinuous
298299
ir["degree"] = element.degree
300+
ir["symmetric"] = isinstance(element, basix.ufl._BlockedElement) and isinstance(
301+
element._pullback, ufl.pullback.SymmetricPullback
302+
)
299303
ir["reference_value_shape"] = element.reference_value_shape
300304

301305
ir["num_sub_elements"] = element.num_sub_elements

0 commit comments

Comments
 (0)