@@ -32,16 +32,18 @@ def local_project(v, V, dx, u=None):
32
32
33
33
34
34
def symmetric_tensor_to_vector (T , T22 = 0 ):
35
- """ Return symmetric tensor components in vector form notation following MFront conventions
36
- T22 can be specified when T is only (2,2)"""
35
+ """Return symmetric tensor components in vector form notation following MFront conventions
36
+ T22 can be specified when T is only (2,2)"""
37
37
if ufl .shape (T ) == (2 , 2 ):
38
38
return as_vector ([T [0 , 0 ], T [1 , 1 ], T22 , sqrt (2 ) * T [0 , 1 ]])
39
39
elif ufl .shape (T ) == (3 , 3 ):
40
40
return as_vector ([
41
- T [0 , 0 ], T [1 , 1 ], T [2 , 2 ],
41
+ T [0 , 0 ],
42
+ T [1 , 1 ],
43
+ T [2 , 2 ],
42
44
sqrt (2 ) * T [0 , 1 ],
43
45
sqrt (2 ) * T [0 , 2 ],
44
- sqrt (2 ) * T [1 , 2 ]
46
+ sqrt (2 ) * T [1 , 2 ],
45
47
])
46
48
elif len (ufl .shape (T )) == 1 :
47
49
return T
@@ -50,14 +52,21 @@ def symmetric_tensor_to_vector(T, T22=0):
50
52
51
53
52
54
def nonsymmetric_tensor_to_vector (T , T22 = 0 ):
53
- """ Return nonsymmetric tensor components in vector form notation following MFront conventions
54
- T22 can be specified when T is only (2,2) """
55
+ """Return nonsymmetric tensor components in vector form notation following MFront conventions
56
+ T22 can be specified when T is only (2,2)"""
55
57
if ufl .shape (T ) == (2 , 2 ):
56
58
return as_vector ([T [0 , 0 ], T [1 , 1 ], T22 , T [0 , 1 ], T [1 , 0 ]])
57
59
elif ufl .shape (T ) == (3 , 3 ):
58
60
return as_vector ([
59
- T [0 , 0 ], T [1 , 1 ], T [2 , 2 ], T [0 , 1 ], T [1 , 0 ], T [0 , 2 ], T [2 , 0 ],
60
- T [1 , 2 ], T [2 , 1 ]
61
+ T [0 , 0 ],
62
+ T [1 , 1 ],
63
+ T [2 , 2 ],
64
+ T [0 , 1 ],
65
+ T [1 , 0 ],
66
+ T [0 , 2 ],
67
+ T [2 , 0 ],
68
+ T [1 , 2 ],
69
+ T [2 , 1 ],
61
70
])
62
71
elif len (ufl .shape (T )) == 1 :
63
72
return T
@@ -70,9 +79,11 @@ def vector_to_tensor(T):
70
79
if ufl .shape (T ) == (4 , ):
71
80
return as_tensor ([[T [0 ], T [3 ] / sqrt (2 )], T [3 ] / sqrt (2 ), T [1 ]])
72
81
elif ufl .shape (T ) == (6 , ):
73
- return as_tensor ([[T [0 ], T [3 ] / sqrt (2 ), T [4 ] / sqrt (2 )],
74
- [T [3 ] / sqrt (2 ), T [1 ], T [5 ] / sqrt (2 )],
75
- [T [4 ] / sqrt (2 ), T [5 ] / sqrt (2 ), T [2 ]]])
82
+ return as_tensor ([
83
+ [T [0 ], T [3 ] / sqrt (2 ), T [4 ] / sqrt (2 )],
84
+ [T [3 ] / sqrt (2 ), T [1 ], T [5 ] / sqrt (2 )],
85
+ [T [4 ] / sqrt (2 ), T [5 ] / sqrt (2 ), T [2 ]],
86
+ ])
76
87
elif ufl .shape (T ) == (5 , ):
77
88
return as_tensor ([[T [0 ], T [3 ]], T [4 ], T [1 ]])
78
89
elif ufl .shape (T ) == (9 , ):
@@ -84,15 +95,17 @@ def vector_to_tensor(T):
84
95
85
96
def axi_grad (r , v ):
86
97
"""
87
- Axisymmetric gradient in cylindrical coordinate (er, etheta, ez) for:
88
- * a scalar v(r, z)
89
- * a 2d-vectorial (vr(r,z), vz(r, z))
90
- * a 3d-vectorial (vr(r,z), 0, vz(r, z))
98
+ Axisymmetric gradient in cylindrical coordinate (er, etheta, ez) for:
99
+ * a scalar v(r, z)
100
+ * a 2d-vectorial (vr(r,z), vz(r, z))
101
+ * a 3d-vectorial (vr(r,z), 0, vz(r, z))
91
102
"""
92
103
if ufl .shape (v ) == (3 , ):
93
- return as_matrix ([[v [0 ].dx (0 ), - v [1 ] / r , v [0 ].dx (1 )],
94
- [v [1 ].dx (0 ), v [0 ] / r , v [1 ].dx (1 )],
95
- [v [2 ].dx (0 ), 0 , v [2 ].dx (1 )]])
104
+ return as_matrix ([
105
+ [v [0 ].dx (0 ), - v [1 ] / r , v [0 ].dx (1 )],
106
+ [v [1 ].dx (0 ), v [0 ] / r , v [1 ].dx (1 )],
107
+ [v [2 ].dx (0 ), 0 , v [2 ].dx (1 )],
108
+ ])
96
109
elif ufl .shape (v ) == (2 , ):
97
110
return as_matrix ([[v [0 ].dx (0 ), v [0 ].dx (1 ), 0 ],
98
111
[v [1 ].dx (0 ), v [1 ].dx (1 ), 0 ], [0 , 0 , v [0 ] / r ]])
@@ -102,6 +115,11 @@ def axi_grad(r, v):
102
115
raise NotImplementedError
103
116
104
117
118
+ def grad_3d (u ):
119
+ return as_matrix ([[u [0 ].dx (0 ), u [0 ].dx (1 ), 0 ], [u [1 ].dx (0 ), u [1 ].dx (1 ), 0 ],
120
+ [0 , 0 , 0 ]])
121
+
122
+
105
123
def symmetric_gradient (g ):
106
124
""" Return symmetric gradient components in vector form"""
107
125
return symmetric_tensor_to_vector (sym (g ))
@@ -122,26 +140,26 @@ def get_quadrature_element(cell, degree, dim=0):
122
140
return FiniteElement ("Quadrature" ,
123
141
cell ,
124
142
degree = degree ,
125
- quad_scheme = ' default' )
143
+ quad_scheme = " default" )
126
144
elif type (dim ) == int :
127
145
return VectorElement ("Quadrature" ,
128
146
cell ,
129
147
degree = degree ,
130
148
dim = dim ,
131
- quad_scheme = ' default' )
149
+ quad_scheme = " default" )
132
150
elif len (dim ) == 1 or (len (dim ) == 2 and 0 in dim ):
133
151
d = [dd for dd in list (dim ) if dd != 0 ][0 ]
134
152
return VectorElement ("Quadrature" ,
135
153
cell ,
136
154
degree = degree ,
137
155
dim = d ,
138
- quad_scheme = ' default' )
156
+ quad_scheme = " default" )
139
157
elif type (dim ) == tuple :
140
158
return TensorElement ("Quadrature" ,
141
159
cell ,
142
160
degree = degree ,
143
161
shape = dim ,
144
- quad_scheme = ' default' )
162
+ quad_scheme = " default" )
145
163
else :
146
164
raise ValueError ("Wrong shape for dim=" , dim )
147
165
@@ -170,12 +188,14 @@ def project_on_quadrature(f, mesh, degree):
170
188
shape = f .ufl_shape
171
189
Vge = get_quadrature_element (mesh .ufl_cell (), degree , shape )
172
190
Vg = FunctionSpace (mesh , Vge )
173
- dx = Measure ("dx" ,
174
- domain = mesh ,
175
- metadata = {
176
- "quadrature_scheme" : "default" ,
177
- "quadrature_degree" : degree
178
- })
191
+ dx = Measure (
192
+ "dx" ,
193
+ domain = mesh ,
194
+ metadata = {
195
+ "quadrature_scheme" : "default" ,
196
+ "quadrature_degree" : degree
197
+ },
198
+ )
179
199
fg = Function (Vg )
180
200
fg .assign (local_project (f , Vg , dx ))
181
201
return fg
@@ -185,12 +205,14 @@ def compute_on_quadrature(f, mesh, degree):
185
205
shape = f .ufl_shape
186
206
Vge = get_quadrature_element (mesh .ufl_cell (), degree , shape )
187
207
Vg = FunctionSpace (mesh , Vge )
188
- dx = Measure ("dx" ,
189
- domain = mesh ,
190
- metadata = {
191
- "quadrature_scheme" : "default" ,
192
- "quadrature_degree" : degree
193
- })
208
+ dx = Measure (
209
+ "dx" ,
210
+ domain = mesh ,
211
+ metadata = {
212
+ "quadrature_scheme" : "default" ,
213
+ "quadrature_degree" : degree
214
+ },
215
+ )
194
216
fg = Function (Vg )
195
217
if (isinstance (f , function .function .Function )
196
218
or isinstance (f , function .function .Constant )
0 commit comments