@@ -18,6 +18,31 @@ def coarse_to_fine_cell_map(coarse_mesh, fine_mesh, coarse_to_fine_data):
18
18
return op3 .Map (connectivity )
19
19
20
20
21
+ def create_node_map (iterset , toset , arity = 1 , values = None ):
22
+ axes = op3 .AxisTree .from_iterable ([iterset , arity ])
23
+ if values is None :
24
+ values = numpy .arange (iterset .size , dtype = IntType )
25
+ dat = op3 .HierarchicalArray (axes , data = values )
26
+ return op3 .Map ({
27
+ freeze ({"nodes" : iterset .owned .component .label }): [
28
+ op3 .TabulatedMapComponent ("nodes" , toset .component .label , dat )
29
+ ]
30
+ })
31
+
32
+
33
+ def owned_node_map (V ):
34
+ """ This should not be necessary
35
+ """
36
+ mesh = V .mesh ()
37
+ key = entity_dofs_key (V .finat_element .entity_dofs ())
38
+ cache = mesh ._shared_data_cache ["owned_node_map" ]
39
+ try :
40
+ return cache [key ]
41
+ except KeyError :
42
+ node_map = create_node_map (V .nodes .owned , V .nodes )
43
+ return cache .setdefault (key , node_map )
44
+
45
+
21
46
def fine_node_to_coarse_node_map (Vf , Vc ):
22
47
if len (Vf ) > 1 :
23
48
assert len (Vf ) == len (Vc )
@@ -51,15 +76,9 @@ def fine_node_to_coarse_node_map(Vf, Vc):
51
76
52
77
fine_to_coarse = hierarchy .fine_to_coarse_cells [levelf ]
53
78
fine_to_coarse_nodes = impl .fine_to_coarse_nodes (Vf , Vc , fine_to_coarse )
54
-
55
- axes = op3 .AxisTree .from_iterable ([Vf .nodes , fine_to_coarse_nodes .shape [1 ]])
56
- fine_to_coarse_node_dat = op3 .HierarchicalArray (axes , data = fine_to_coarse_nodes )
57
- fine_to_coarse_node_map = op3 .Map ({
58
- freeze ({"nodes" : "XXX" }): [
59
- op3 .TabulatedMapComponent ("nodes" , "XXX" , fine_to_coarse_node_dat )
60
- ]
61
- })
62
- return cache .setdefault (key , fine_to_coarse_node_map )
79
+ return cache .setdefault (key , create_node_map (Vf .nodes , Vc .nodes ,
80
+ arity = fine_to_coarse_nodes .shape [1 ],
81
+ values = fine_to_coarse_nodes ))
63
82
64
83
65
84
def coarse_node_to_fine_node_map (Vc , Vf ):
@@ -95,15 +114,9 @@ def coarse_node_to_fine_node_map(Vc, Vf):
95
114
96
115
coarse_to_fine = hierarchy .coarse_to_fine_cells [levelc ]
97
116
coarse_to_fine_nodes = impl .coarse_to_fine_nodes (Vc , Vf , coarse_to_fine )
98
-
99
- axes = op3 .AxisTree .from_iterable ([Vc .nodes , coarse_to_fine_nodes .shape [1 ]])
100
- coarse_to_fine_node_dat = op3 .HierarchicalArray (axes , data = coarse_to_fine_nodes )
101
- coarse_to_fine_node_map = op3 .Map ({
102
- freeze ({"nodes" : "XXX" }): [
103
- op3 .TabulatedMapComponent ("nodes" , "XXX" , coarse_to_fine_node_dat )
104
- ]
105
- })
106
- return cache .setdefault (key , coarse_to_fine_node_map )
117
+ return cache .setdefault (key , create_node_map (Vc .nodes , Vf .nodes ,
118
+ arity = coarse_to_fine_nodes .shape [1 ],
119
+ values = coarse_to_fine_nodes ))
107
120
108
121
109
122
def coarse_cell_to_fine_node_map (Vc , Vf ):
@@ -153,8 +166,8 @@ def coarse_cell_to_fine_node_map(Vc, Vf):
153
166
axes = op3 .AxisTree .from_iterable ([Vc .nodes , arity * level_ratio ])
154
167
coarse_cell_to_fine_node_dat = op3 .HierarchicalArray (axes , data = coarse_to_fine_nodes )
155
168
coarse_cell_to_fine_node_map = op3 .Map ({
156
- freeze ({Vc .mesh ().topology .name : Vc .mesh ().cell_label }): [
157
- op3 .TabulatedMapComponent ("nodes" , "XXX" , coarse_cell_to_fine_node_dat )
169
+ freeze ({Vc .mesh ().topology .name : Vc .mesh ().cells . owned . label }): [
170
+ op3 .TabulatedMapComponent ("nodes" , Vf . nodes . component . label , coarse_cell_to_fine_node_dat )
158
171
]
159
172
})
160
173
return cache .setdefault (key , coarse_cell_to_fine_node_map )
0 commit comments