28
28
def test_mixed_function_space_with_mixed_mesh_cell ():
29
29
cell = triangle
30
30
elem0 = FiniteElement ("Lagrange" , cell , 1 , (), identity_pullback , H1 )
31
- elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 , ), contravariant_piola , HDiv )
31
+ elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 ,), contravariant_piola , HDiv )
32
32
elem2 = FiniteElement ("Discontinuous Lagrange" , cell , 0 , (), identity_pullback , L2 )
33
33
elem = MixedElement ([elem0 , elem1 , elem2 ])
34
34
mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 100 )
@@ -48,17 +48,19 @@ def test_mixed_function_space_with_mixed_mesh_cell():
48
48
x1 = SpatialCoordinate (mesh1 )
49
49
# Assemble (0, 1)-block.
50
50
form = x1 [1 ] * f0 * div (g1 ) * inner (u1 , grad (v0 )) * dx2 (999 )
51
- fd = compute_form_data (form ,
52
- do_apply_function_pullbacks = True ,
53
- do_apply_integral_scaling = True ,
54
- do_apply_geometry_lowering = True ,
55
- preserve_geometry_types = (CellVolume , FacetArea ),
56
- do_apply_restrictions = True ,
57
- do_estimate_degrees = True ,
58
- do_split_coefficients = (f , g ),
59
- do_assume_single_integral_type = False ,
60
- complex_mode = False )
61
- id0 , = fd .integral_data
51
+ fd = compute_form_data (
52
+ form ,
53
+ do_apply_function_pullbacks = True ,
54
+ do_apply_integral_scaling = True ,
55
+ do_apply_geometry_lowering = True ,
56
+ preserve_geometry_types = (CellVolume , FacetArea ),
57
+ do_apply_restrictions = True ,
58
+ do_estimate_degrees = True ,
59
+ do_split_coefficients = (f , g ),
60
+ do_assume_single_integral_type = False ,
61
+ complex_mode = False ,
62
+ )
63
+ (id0 ,) = fd .integral_data
62
64
assert fd .preprocessed_form .arguments () == (v0 , u1 )
63
65
assert fd .reduced_coefficients == [f , g ]
64
66
assert form .coefficients ()[fd .original_coefficient_positions [0 ]] is f
@@ -67,8 +69,8 @@ def test_mixed_function_space_with_mixed_mesh_cell():
67
69
assert id0 .domain_integral_type_map [mesh1 ] == "cell"
68
70
assert id0 .domain_integral_type_map [mesh2 ] == "cell"
69
71
assert id0 .domain is mesh2
70
- assert id0 .integral_type == ' cell'
71
- assert id0 .subdomain_id == (999 , )
72
+ assert id0 .integral_type == " cell"
73
+ assert id0 .subdomain_id == (999 ,)
72
74
assert fd .original_form .domain_numbering ()[id0 .domain ] == 0
73
75
assert id0 .integral_coefficients == set ([f , g ])
74
76
assert id0 .enabled_coefficients == [True , True ]
@@ -77,12 +79,12 @@ def test_mixed_function_space_with_mixed_mesh_cell():
77
79
def test_mixed_function_space_with_mixed_mesh_facet ():
78
80
cell = triangle
79
81
elem0 = FiniteElement ("Lagrange" , cell , 1 , (), identity_pullback , H1 )
80
- elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 , ), contravariant_piola , HDiv )
82
+ elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 ,), contravariant_piola , HDiv )
81
83
elem2 = FiniteElement ("Discontinuous Lagrange" , cell , 0 , (), identity_pullback , L2 )
82
84
elem = MixedElement ([elem0 , elem1 , elem2 ])
83
- mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 100 )
84
- mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 101 )
85
- mesh2 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 102 )
85
+ mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 100 )
86
+ mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 101 )
87
+ mesh2 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 102 )
86
88
domain = MeshSequence ([mesh0 , mesh1 , mesh2 ])
87
89
V = FunctionSpace (domain , elem )
88
90
V1 = FunctionSpace (mesh1 , elem1 )
@@ -97,37 +99,43 @@ def test_mixed_function_space_with_mixed_mesh_facet():
97
99
ds2 = Measure ("ds" , mesh2 )
98
100
x2 = SpatialCoordinate (mesh2 )
99
101
# Assemble (2, 1)-block.
100
- form = inner (x2 , g1 ('+' )) * g2 * inner (u1 ('-' ), grad (v2 )) * dS1 (999 ) + \
101
- f0 ('-' ) * div (f1 ) * inner (div (u1 ), v2 ) * ds2 (777 )
102
- fd = compute_form_data (form ,
103
- do_apply_function_pullbacks = True ,
104
- do_apply_integral_scaling = True ,
105
- do_apply_geometry_lowering = True ,
106
- preserve_geometry_types = (CellVolume , FacetArea ),
107
- do_apply_restrictions = True ,
108
- do_estimate_degrees = True ,
109
- do_split_coefficients = (f , g ),
110
- do_assume_single_integral_type = False ,
111
- complex_mode = False )
112
- id0 , id1 , = fd .integral_data
102
+ form = inner (x2 , g1 ("+" )) * g2 * inner (u1 ("-" ), grad (v2 )) * dS1 (999 ) + f0 ("-" ) * div (
103
+ f1
104
+ ) * inner (div (u1 ), v2 ) * ds2 (777 )
105
+ fd = compute_form_data (
106
+ form ,
107
+ do_apply_function_pullbacks = True ,
108
+ do_apply_integral_scaling = True ,
109
+ do_apply_geometry_lowering = True ,
110
+ preserve_geometry_types = (CellVolume , FacetArea ),
111
+ do_apply_restrictions = True ,
112
+ do_estimate_degrees = True ,
113
+ do_split_coefficients = (f , g ),
114
+ do_assume_single_integral_type = False ,
115
+ complex_mode = False ,
116
+ )
117
+ (
118
+ id0 ,
119
+ id1 ,
120
+ ) = fd .integral_data
113
121
assert fd .preprocessed_form .arguments () == (v2 , u1 )
114
122
assert fd .reduced_coefficients == [f , g ]
115
123
assert form .coefficients ()[fd .original_coefficient_positions [0 ]] is f
116
124
assert form .coefficients ()[fd .original_coefficient_positions [1 ]] is g
117
125
assert id0 .domain_integral_type_map [mesh1 ] == "interior_facet"
118
126
assert id0 .domain_integral_type_map [mesh2 ] == "exterior_facet"
119
127
assert id0 .domain is mesh1
120
- assert id0 .integral_type == ' interior_facet'
121
- assert id0 .subdomain_id == (999 , )
128
+ assert id0 .integral_type == " interior_facet"
129
+ assert id0 .subdomain_id == (999 ,)
122
130
assert fd .original_form .domain_numbering ()[id0 .domain ] == 0
123
131
assert id0 .integral_coefficients == set ([g ])
124
132
assert id0 .enabled_coefficients == [False , True ]
125
133
assert id1 .domain_integral_type_map [mesh0 ] == "interior_facet"
126
134
assert id1 .domain_integral_type_map [mesh1 ] == "exterior_facet"
127
135
assert id1 .domain_integral_type_map [mesh2 ] == "exterior_facet"
128
136
assert id1 .domain is mesh2
129
- assert id1 .integral_type == ' exterior_facet'
130
- assert id1 .subdomain_id == (777 , )
137
+ assert id1 .integral_type == " exterior_facet"
138
+ assert id1 .subdomain_id == (777 ,)
131
139
assert fd .original_form .domain_numbering ()[id1 .domain ] == 1
132
140
assert id1 .integral_coefficients == set ([f ])
133
141
assert id1 .enabled_coefficients == [True , False ]
@@ -136,12 +144,12 @@ def test_mixed_function_space_with_mixed_mesh_facet():
136
144
def test_mixed_function_space_with_mixed_mesh_raise ():
137
145
cell = triangle
138
146
elem0 = FiniteElement ("Lagrange" , cell , 1 , (), identity_pullback , H1 )
139
- elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 , ), contravariant_piola , HDiv )
147
+ elem1 = FiniteElement ("Brezzi-Douglas-Marini" , cell , 1 , (2 ,), contravariant_piola , HDiv )
140
148
elem2 = FiniteElement ("Discontinuous Lagrange" , cell , 0 , (), identity_pullback , L2 )
141
149
elem = MixedElement ([elem0 , elem1 , elem2 ])
142
- mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 100 )
143
- mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 101 )
144
- mesh2 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 102 )
150
+ mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 100 )
151
+ mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 101 )
152
+ mesh2 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 102 )
145
153
domain = MeshSequence ([mesh0 , mesh1 , mesh2 ])
146
154
V = FunctionSpace (domain , elem )
147
155
f = Coefficient (V , count = 1000 )
@@ -150,39 +158,43 @@ def test_mixed_function_space_with_mixed_mesh_raise():
150
158
_ , g1 , _ = split (g )
151
159
dS1 = Measure ("dS" , mesh1 )
152
160
# Make sure that all mixed functions are split when applying default restrictions.
153
- form = div (g1 ('+' )) * div (f1 ('-' )) * dS1
161
+ form = div (g1 ("+" )) * div (f1 ("-" )) * dS1
154
162
with pytest .raises (RuntimeError ) as e_info :
155
- _ = compute_form_data (form ,
156
- do_apply_function_pullbacks = True ,
157
- do_apply_integral_scaling = True ,
158
- do_apply_geometry_lowering = True ,
159
- preserve_geometry_types = (CellVolume , FacetArea ),
160
- do_apply_restrictions = True ,
161
- do_estimate_degrees = True ,
162
- do_split_coefficients = (f ,),
163
- do_assume_single_integral_type = False ,
164
- complex_mode = False )
163
+ _ = compute_form_data (
164
+ form ,
165
+ do_apply_function_pullbacks = True ,
166
+ do_apply_integral_scaling = True ,
167
+ do_apply_geometry_lowering = True ,
168
+ preserve_geometry_types = (CellVolume , FacetArea ),
169
+ do_apply_restrictions = True ,
170
+ do_estimate_degrees = True ,
171
+ do_split_coefficients = (f ,),
172
+ do_assume_single_integral_type = False ,
173
+ complex_mode = False ,
174
+ )
165
175
assert e_info .match ("Not expecting a terminal object on a mixed mesh at this stage" )
166
176
# Make sure that g1 is restricted as f1.
167
- form = div (g1 ) * div (f1 ('-' )) * dS1
177
+ form = div (g1 ) * div (f1 ("-" )) * dS1
168
178
with pytest .raises (ValueError ) as e_info :
169
- _ = compute_form_data (form ,
170
- do_apply_function_pullbacks = True ,
171
- do_apply_integral_scaling = True ,
172
- do_apply_geometry_lowering = True ,
173
- preserve_geometry_types = (CellVolume , FacetArea ),
174
- do_apply_restrictions = True ,
175
- do_estimate_degrees = True ,
176
- do_split_coefficients = (f , g ),
177
- do_assume_single_integral_type = False ,
178
- complex_mode = False )
179
+ _ = compute_form_data (
180
+ form ,
181
+ do_apply_function_pullbacks = True ,
182
+ do_apply_integral_scaling = True ,
183
+ do_apply_geometry_lowering = True ,
184
+ preserve_geometry_types = (CellVolume , FacetArea ),
185
+ do_apply_restrictions = True ,
186
+ do_estimate_degrees = True ,
187
+ do_split_coefficients = (f , g ),
188
+ do_assume_single_integral_type = False ,
189
+ complex_mode = False ,
190
+ )
179
191
assert e_info .match ("Discontinuous type Coefficient must be restricted." )
180
192
181
193
182
194
def test_mixed_function_space_with_mixed_mesh_signature ():
183
195
cell = triangle
184
- mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 100 )
185
- mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 , ), identity_pullback , H1 ), ufl_id = 101 )
196
+ mesh0 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 100 )
197
+ mesh1 = Mesh (FiniteElement ("Lagrange" , cell , 1 , (2 ,), identity_pullback , H1 ), ufl_id = 101 )
186
198
dx0 = Measure ("dx" , mesh0 )
187
199
dx1 = Measure ("dx" , mesh1 )
188
200
n0 = FacetNormal (mesh0 )
0 commit comments