@@ -60,7 +60,12 @@ def test_external_operator_codim_1(quadrature_degree):
60
60
"""Test assembly of codim 1 external operator"""
61
61
62
62
mesh = dolfinx .mesh .create_unit_square (MPI .COMM_WORLD , 5 , 5 )
63
- mesh .topology .create_connectivity (mesh .topology .dim - 1 , mesh .topology .dim )
63
+ tdim = mesh .topology .dim
64
+ mesh .topology .create_connectivity (tdim , tdim - 1 )
65
+ c_to_f = mesh .topology .connectivity (tdim , tdim - 1 )
66
+ mesh .topology .create_connectivity (tdim - 1 , tdim )
67
+ f_to_c = mesh .topology .connectivity (tdim - 1 , tdim )
68
+
64
69
ext_facets = dolfinx .mesh .exterior_facet_indices (mesh .topology )
65
70
66
71
V = dolfinx .fem .functionspace (mesh , ("Lagrange" , 1 ))
@@ -69,10 +74,19 @@ def test_external_operator_codim_1(quadrature_degree):
69
74
70
75
submesh , sub_to_parent , _ , _ = dolfinx .mesh .create_submesh (mesh , mesh .topology .dim - 1 , ext_facets )
71
76
num_entities = mesh .topology .index_map (mesh .topology .dim - 1 ).size_local
72
- parent_to_sub = np .full (num_entities , - 1 , dtype = np .int32 )
73
- parent_to_sub [sub_to_parent ] = np .arange (len (sub_to_parent ), dtype = np .int32 )
77
+ parent_to_sub = np .empty ((len (ext_facets ), 2 ), dtype = np .int32 )
78
+ # print(num_entities)
79
+
80
+ for i , facet in enumerate (ext_facets ):
81
+ cells = f_to_c .links (facet )
82
+ cell = cells [0 ]
83
+ local_facets = c_to_f .links (cell )
84
+ local_pos = np .flatnonzero (local_facets == facet )
85
+ parent_to_sub [i , 0 ] = cell
86
+ parent_to_sub [i , 1 ] = local_pos [0 ]
74
87
entity_maps = {submesh : parent_to_sub }
75
88
89
+ # print(parent_to_sub)
76
90
Qe = basix .ufl .quadrature_element (submesh .basix_cell (), degree = quadrature_degree , value_shape = ())
77
91
Q = dolfinx .fem .functionspace (submesh , Qe )
78
92
@@ -90,7 +104,10 @@ def test_external_operator_codim_1(quadrature_degree):
90
104
J = ufl .algorithms .expand_derivatives (ufl .derivative (g , u ) * ds )
91
105
92
106
J_replaced , J_external_operators = replace_external_operators (J )
93
- J_compiled = dolfinx .fem .form (J_replaced , entity_maps = entity_maps )
107
+ parent_to_sub2 = np .full (num_entities , - 1 , dtype = np .int32 )
108
+ parent_to_sub2 [sub_to_parent ] = np .arange (len (sub_to_parent ), dtype = np .int32 )
109
+ entity_maps2 = {submesh : parent_to_sub2 }
110
+ J_compiled = dolfinx .fem .form (J_replaced , entity_maps = entity_maps2 )
94
111
# Pack coefficients for g
95
112
evaluated_operands = evaluate_operands (J_external_operators , entity_maps = entity_maps )
96
113
_ = evaluate_external_operators (J_external_operators , evaluated_operands )
0 commit comments