forked from mscroggs/symfem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
175 lines (173 loc) · 9.14 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
"""Utility functions for testing."""
import typing
test_elements: typing.Dict[str, typing.Dict[
str,
typing.List[typing.Tuple[typing.Dict[str, typing.Any], typing.Iterable]]
]] = {
"interval": {
"P": [({"variant": "equispaced"}, range(6)), ({"variant": "lobatto"}, range(4)),
({"variant": "legendre"}, range(5))],
"vP": [({"variant": "equispaced"}, range(6)), ({"variant": "lobatto"}, range(3)),
({"variant": "radau"}, range(3)), ({"variant": "legendre"}, range(3))],
"dPc": [({"variant": "equispaced"}, range(6)), ({"variant": "lobatto"}, range(4))],
"bubble": [({"variant": "equispaced"}, range(2, 6)),
({"variant": "lobatto"}, range(2, 3))],
"serendipity": [({"variant": "equispaced"}, range(1, 6)),
({"variant": "lobatto"}, range(1, 3))],
"Hermite": [({}, [3])],
"Bernstein": [({}, range(1, 4))],
"Taylor": [({}, range(0, 5))],
"Wu-Xu": [({}, [2])],
"MWX": [({}, [1])],
"EG": [({}, range(1, 5))],
"P1-iso-P2": [({}, [1])],
},
"triangle": {
"P": [({"variant": "equispaced"}, range(5))],
"vP": [({"variant": "equispaced"}, range(5))],
"matrix Lagrange": [({"variant": "equispaced"}, range(3))],
"symmetric matrix Lagrange": [
({"variant": "equispaced"}, range(3))],
"bubble": [({"variant": "equispaced"}, range(3, 5))],
"bubble enriched Lagrange": [({"variant": "equispaced"}, range(1, 3))],
"bubble enriched vector Lagrange":
[({"variant": "equispaced"}, range(1, 3))],
"CR": [({"variant": "equispaced"}, [1, 3, 5])],
"conforming CR": [({}, range(1, 6))],
"HHJ": [({"variant": "equispaced"}, range(3))],
"Bell": [({"variant": "equispaced"}, [5])],
"Morley": [({}, [2])],
"MWX": [({}, [1, 2])],
"Regge": [({"variant": "point"}, range(4)), ({"variant": "integral"}, range(3))],
"AW": [({"variant": "equispaced"}, range(3, 5))],
"nonconforming AW": [({"variant": "equispaced"}, [2])],
"Nedelec1": [({"variant": "equispaced"}, range(1, 4))],
"Nedelec2": [({"variant": "equispaced"}, range(1, 4))],
"RT": [({"variant": "equispaced"}, range(1, 4))],
"BDFM": [({"variant": "equispaced"}, range(1, 4))],
"Argyris": [({}, [5])],
"MTW": [({"variant": "equispaced"}, [3])],
"KMV": [({}, [1, 3])],
"Hermite": [({}, [3])],
"BDM": [({"variant": "equispaced"}, range(1, 4))],
"Bernstein": [({}, range(1, 4))],
"HCT": [({}, [3])],
"rHCT": [({}, [3])],
"FS": [({}, [2])],
"Taylor": [({}, range(0, 5))],
"Bernardi-Raugel": [({}, [1])],
"Guzman-Neilan": [({}, [1])],
"Wu-Xu": [({}, [3])],
"transition": [({"edge_orders": [1, 1, 1], "variant": "equispaced"}, range(1, 6)),
({"edge_orders": [2, 2, 1], "variant": "equispaced"}, range(1, 6)),
({"edge_orders": [3, 3, 1], "variant": "equispaced"}, range(1, 6)),
({"edge_orders": [3, 3, 2], "variant": "equispaced"}, range(1, 6))],
"P1-iso-P2": [({}, [1])],
"EG": [({}, range(1, 4))],
"LFEG": [({}, range(1, 4))],
"Alfeld-Sorokina": [({}, [2])],
"P1 macro": [({}, [1])],
},
"tetrahedron": {
"P": [({"variant": "equispaced"}, range(3))],
"vP": [({"variant": "equispaced"}, range(3))],
"matrix Lagrange": [({"variant": "equispaced"}, range(2))],
"symmetric matrix Lagrange": [({"variant": "equispaced"}, range(2))],
"bubble": [({"variant": "equispaced"}, [4])],
"CR": [({"variant": "equispaced"}, [1])],
"Regge": [({"variant": "point"}, range(3)), ({"variant": "integral"}, range(2))],
"HHJ": [({"variant": "equispaced"}, range(3))],
"Nedelec1": [({"variant": "equispaced"}, range(1, 3))],
"Nedelec2": [({"variant": "equispaced"}, range(1, 3))],
"RT": [({"variant": "equispaced"}, range(1, 3))],
"BDFM": [({"variant": "equispaced"}, range(1, 3))],
"MTW": [({"variant": "equispaced"}, [3])],
"MWX": [({}, [1, 2, 3])],
"KMV": [({}, [1])],
"Hermite": [({}, [3])],
"BDM": [({"variant": "equispaced"}, range(1, 3))],
"Bernstein": [({}, range(1, 3))],
"Taylor": [({}, range(0, 5))],
"Bernardi-Raugel": [({}, [1, 2])],
"Guzman-Neilan": [({}, [1, 2])],
"Wu-Xu": [({}, [4])],
"transition": [({"edge_orders": [1, 1, 1, 1, 1, 1], "face_orders": [1, 1, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [1, 1, 1, 1, 1, 1], "face_orders": [3, 3, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [1, 1, 1, 1, 1, 1], "face_orders": [3, 3, 4, 2],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [1, 1, 1, 1, 1, 1], "face_orders": [4, 4, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [2, 2, 2, 2, 2, 2], "face_orders": [1, 1, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [3, 2, 1, 2, 1, 1], "face_orders": [1, 1, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [1, 1, 3, 1, 3, 1], "face_orders": [1, 1, 1, 1],
"variant": "equispaced"}, range(1, 5)),
({"edge_orders": [1, 1, 2, 1, 2, 5], "face_orders": [3, 3, 2, 5],
"variant": "equispaced"}, range(1, 5))],
"EG": [({}, range(1, 3))],
"LFEG": [({}, range(1, 3))],
},
"quadrilateral": {
"bubble": [({"variant": "equispaced"}, range(2, 4)), ({"variant": "lobatto"}, range(2, 4))],
"Q": [({"variant": "equispaced"}, range(4)), ({"variant": "lobatto"}, range(3))],
"vQ": [({"variant": "equispaced"}, range(4)), ({"variant": "lobatto"}, range(3))],
"dPc": [({"variant": "equispaced"}, range(4)), ({"variant": "lobatto"}, range(3))],
"vector dPc": [({"variant": "equispaced"}, range(4)), ({"variant": "lobatto"}, range(3))],
"serendipity": [({"variant": "equispaced"}, range(1, 4)),
({"variant": "lobatto"}, range(1, 3))],
"direct serendipity": [({}, range(1, 7))],
"Scurl": [({"variant": "equispaced"}, range(1, 4)), ({"variant": "lobatto"}, range(1, 3))],
"Sdiv": [({"variant": "equispaced"}, range(1, 4)), ({"variant": "lobatto"}, range(1, 3))],
"Qcurl": [({"variant": "equispaced"}, range(1, 4))],
"Qdiv": [({"variant": "equispaced"}, range(1, 4))],
"BFS": [({}, [3])],
"BDFM": [({"variant": "equispaced"}, range(1, 4))],
"TScurl": [({"variant": "equispaced"}, range(1, 5))],
"TSdiv": [({"variant": "equispaced"}, range(1, 5))],
"TNT": [({"variant": "equispaced"}, range(1, 4))],
"TNTcurl": [({"variant": "equispaced"}, range(1, 4))],
"TNTdiv": [({"variant": "equispaced"}, range(1, 4))],
"Regge": [({"variant": "integral"}, range(3))],
"ABF": [({}, range(3))],
"AC": [({}, range(4))],
"Rannacher-Turek": [({}, [1])],
"P1-iso-P2": [({}, [1])],
"HZ": [({}, [2, 3, 4])],
"EG": [({}, range(1, 4))],
"LFEG": [({}, range(1, 4))],
},
"hexahedron": {
"bubble": [({"variant": "equispaced"}, range(2, 4)), ({"variant": "lobatto"}, range(2, 4))],
"Q": [({"variant": "equispaced"}, range(3)), ({"variant": "lobatto"}, range(3))],
"vQ": [({"variant": "equispaced"}, range(3)), ({"variant": "lobatto"}, range(3))],
"dPc": [({"variant": "equispaced"}, range(3)), ({"variant": "lobatto"}, range(3))],
"vector dPc": [({"variant": "equispaced"}, range(3)), ({"variant": "lobatto"}, range(3))],
"serendipity": [({"variant": "equispaced"}, range(1, 3)),
({"variant": "lobatto"}, range(1, 3))],
"Scurl": [({"variant": "equispaced"}, range(1, 3)), ({"variant": "lobatto"}, range(1, 3))],
"Sdiv": [({"variant": "equispaced"}, range(1, 3)), ({"variant": "lobatto"}, range(1, 3))],
"Qcurl": [({"variant": "equispaced"}, range(1, 3))],
"Qdiv": [({"variant": "equispaced"}, range(1, 3))],
"BDFM": [({"variant": "equispaced"}, range(1, 3))],
"BDDF": [({"variant": "equispaced"}, range(1, 3))],
"TScurl": [({"variant": "equispaced"}, range(1, 4))],
"TSdiv": [({"variant": "equispaced"}, range(1, 4))],
"TNT": [({"variant": "equispaced"}, range(1, 2))],
"TNTcurl": [({"variant": "equispaced"}, range(1, 2))],
"TNTdiv": [({"variant": "equispaced"}, range(1, 2))],
"Regge": [({"variant": "integral"}, range(2))],
"Rannacher-Turek": [({}, [1])],
"EG": [({}, range(1, 3))],
"LFEG": [({}, range(1, 3))],
},
"prism": {
"Lagrange": [({"variant": "equispaced"}, range(4))],
"Nedelec": [({"variant": "equispaced"}, range(1, 3))],
},
"pyramid": {
"Lagrange": [({"variant": "equispaced"}, range(4))],
}
}