Skip to content

Commit

Permalink
implement more degrees
Browse files Browse the repository at this point in the history
  • Loading branch information
mscroggs committed Sep 26, 2024
1 parent a2d6654 commit b5c5c87
Show file tree
Hide file tree
Showing 38 changed files with 310 additions and 286 deletions.
9 changes: 5 additions & 4 deletions symfem/elements/alfeld_sorokina.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,23 +127,24 @@ def __init__(self, reference: Reference, order: int):

@property
def lagrange_subdegree(self) -> int:
pass # TODO
raise NotImplementedError()

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
raise NotImplementedError()

@property
def polynomial_subdegree(self) -> int:
pass # TODO
raise NotImplementedError()

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
raise NotImplementedError()

names = ["Alfeld-Sorokina", "AS"]
references = ["triangle"]
min_order = 2
max_order = 2
continuity = "C0"
value_type = "scalar macro"
last_updated = "2023.05"
9 changes: 5 additions & 4 deletions symfem/elements/bddm.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,22 +80,23 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order // 3

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 1

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 1

names = ["Brezzi-Douglas-Duran-Fortin", "BDDF"]
references = ["hexahedron"]
min_order = 1
continuity = "H(div)"
value_type = "vector"
last_updated = "2023.06"
12 changes: 8 additions & 4 deletions symfem/elements/bdfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,22 +99,26 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
if self.reference.name in ["triangle", "tetrahedron"]:
return self.order - 1
else:
return self.order // self.reference.tdim

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order - 1

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

names = ["Brezzi-Douglas-Fortin-Marini", "BDFM"]
references = ["triangle", "quadrilateral", "hexahedron", "tetrahedron"]
min_order = 1
continuity = "H(div)"
value_type = "vector"
last_updated = "2023.06"
9 changes: 5 additions & 4 deletions symfem/elements/bdm.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,22 +54,23 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

names = ["Brezzi-Douglas-Marini", "BDM", "N2div"]
references = ["triangle", "tetrahedron"]
min_order = 1
continuity = "H(div)"
value_type = "vector"
last_updated = "2023.06"
9 changes: 5 additions & 4 deletions symfem/elements/bell.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,23 +56,24 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return 4

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return 5

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return 4

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return 5

names = ["Bell"]
references = ["triangle"]
min_order = 5
max_order = 5
continuity = "C1"
value_type = "scalar"
last_updated = "2023.05"
11 changes: 6 additions & 5 deletions symfem/elements/bernardi_raugel.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,28 +115,29 @@ def __init__(self, reference: Reference, order: int):
reference, x[i], p.dofs[0], entity=(3, 0), mapping="contravariant"
)
)

super().__init__(reference, order, poly, dofs, reference.tdim, reference.tdim)
print(poly, self.lagrange_superdegree)

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + self.reference.tdim - 1

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + self.reference.tdim - 1

names = ["Bernardi-Raugel"]
references = ["triangle", "tetrahedron"]
min_order = 1
max_order = {"triangle": 1, "tetrahedron": 2}
continuity = "H(div)"
value_type = "vector"
last_updated = "2023.06"
9 changes: 5 additions & 4 deletions symfem/elements/bernstein.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,22 +236,23 @@ def index(x: int, y: int = 0, z: int = 0) -> int:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

names = ["Bernstein", "Bernstein-Bezier"]
references = ["interval", "triangle", "tetrahedron"]
min_order = 0
continuity = "C0"
value_type = "scalar"
last_updated = "2023.05"
9 changes: 5 additions & 4 deletions symfem/elements/bfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,24 +52,25 @@ def __init__(self, reference: Reference, order: int):

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order * 2

names = ["Bogner-Fox-Schmit", "BFS"]
references = ["quadrilateral"]
min_order = 3
max_order = 3
continuity = "C0"
# continuity = "C1"
value_type = "scalar"
last_updated = "2023.05"
38 changes: 24 additions & 14 deletions symfem/elements/bubble.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from symfem.functionals import DotPointEvaluation, ListOfFunctionals, PointEvaluation
from symfem.functions import FunctionInput
from symfem.references import Reference
from symfem.symbols import x
from symfem.elements.lagrange import Lagrange

__all__ = ["Bubble", "BubbleEnrichedLagrange", "BubbleEnrichedVectorLagrange"]
Expand All @@ -33,8 +34,12 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"

p1 = create_element(reference.name, "Lagrange", 1, vertices=reference.vertices)
bubble = 1
for f in p1.get_basis_functions():
bubble *= f
if reference.name in ["interval", "quadrilateral", "hexahedron"]:
for v in x[:reference.tdim]:
bubble *= v * (1 - v)
else:
for f in p1.get_basis_functions():
bubble *= f

if reference.name in ["interval", "quadrilateral", "hexahedron"]:
o = order - 2
Expand Down Expand Up @@ -80,19 +85,21 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return -1

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return -1

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
if self.reference.name in ["quadrilateral", "hexahedron"]:
return self.order * self.reference.tdim
return self.order

names = ["bubble"]
references = ["interval", "triangle", "tetrahedron", "quadrilateral", "hexahedron"]
Expand All @@ -104,6 +111,7 @@ def polynomial_superdegree(self) -> typing.Optional[int]:
"hexahedron": 2,
}
continuity = "C0"
value_type = "scalar"
last_updated = "2023.09"


Expand Down Expand Up @@ -140,24 +148,25 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 2

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 2

names = ["bubble enriched Lagrange"]
references = ["triangle"]
min_order = 1
continuity = "C0"
value_type = "scalar"
last_updated = "2023.09"


Expand Down Expand Up @@ -201,22 +210,23 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 2

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
return self.order + 2

names = ["bubble enriched vector Lagrange"]
references = ["triangle"]
min_order = 1
continuity = "C0"
value_type = "vector"
last_updated = "2023.09"
13 changes: 9 additions & 4 deletions symfem/elements/conforming_crouzeix_raviart.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,27 @@ def __init__(self, reference: Reference, order: int):

@property
def lagrange_subdegree(self) -> int:
pass # TODO
return self.order

@property
def lagrange_superdegree(self) -> typing.Optional[int]:
pass # TODO
if self.order == 1:
return 1
return self.order + 1

@property
def polynomial_subdegree(self) -> int:
pass # TODO
return self.order

@property
def polynomial_superdegree(self) -> typing.Optional[int]:
pass # TODO
if self.order == 1:
return 1
return self.order + 1

names = ["conforming Crouzeix-Raviart", "conforming CR"]
references = ["triangle"]
min_order = 1
continuity = "L2"
value_type = "scalar"
last_updated = "2023.05"
Loading

0 comments on commit b5c5c87

Please sign in to comment.