From b442d778b3b1548ec571aad64d92ebdec0a0b959 Mon Sep 17 00:00:00 2001 From: Connor Ward Date: Tue, 17 Mar 2026 13:34:17 +0000 Subject: [PATCH 1/3] Handle Real elements analogously to DG for tensor product cells --- finat/ufl/finiteelement.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/finat/ufl/finiteelement.py b/finat/ufl/finiteelement.py index f2794226..c85821d4 100644 --- a/finat/ufl/finiteelement.py +++ b/finat/ufl/finiteelement.py @@ -117,6 +117,12 @@ def dq_family_l2(cell): for c in cell.sub_cells], cell=cell) + elif family == "Real": + return TensorProductElement(*[FiniteElement("Real", c, degree, variant=variant) + for c in cell.sub_cells], + cell=cell) + + return super().__new__(cls) def __init__(self, From 94f69432e5eb1996bd5ec16a42d92667a319566d Mon Sep 17 00:00:00 2001 From: Connor Ward Date: Tue, 17 Mar 2026 13:37:19 +0000 Subject: [PATCH 2/3] fixup --- finat/ufl/finiteelement.py | 1 - 1 file changed, 1 deletion(-) diff --git a/finat/ufl/finiteelement.py b/finat/ufl/finiteelement.py index c85821d4..dade48b0 100644 --- a/finat/ufl/finiteelement.py +++ b/finat/ufl/finiteelement.py @@ -122,7 +122,6 @@ def dq_family_l2(cell): for c in cell.sub_cells], cell=cell) - return super().__new__(cls) def __init__(self, From 63baca86948f426b2577bc25414a98544ee033b2 Mon Sep 17 00:00:00 2001 From: Connor Ward Date: Thu, 19 Mar 2026 11:02:44 +0000 Subject: [PATCH 3/3] Use subelement family for family of tensor product elements if they match --- finat/ufl/tensorproductelement.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/finat/ufl/tensorproductelement.py b/finat/ufl/tensorproductelement.py index a580c8c7..a5e81a35 100644 --- a/finat/ufl/tensorproductelement.py +++ b/finat/ufl/tensorproductelement.py @@ -39,7 +39,10 @@ def __init__(self, *elements, **kwargs): raise ValueError("TensorProductElement got an unexpected keyword argument '%s'" % keywords[0]) cell = kwargs.get("cell") - family = "TensorProductElement" + try: + family, = {e.family() for e in elements} + except ValueError: + family = "TensorProductElement" if cell is None: # Define cell as the product of each elements cell