@@ -53,11 +53,13 @@ def get_function_space(dm):
5353 :raises RuntimeError: if no function space was found.
5454 """
5555 info = dm .getAttr ("__fs_info__" )
56- meshref , element , indices , (name , names ) = info
56+ meshref , element , indices , (name , names ), boundary_sets = info
5757 mesh = meshref ()
5858 if mesh is None :
5959 raise RuntimeError ("Somehow your mesh was collected, this should never happen" )
6060 V = firedrake .FunctionSpace (mesh , element , name = name )
61+ if any (boundary_sets ):
62+ V = firedrake .bcs .restricted_function_space (V , boundary_sets )
6163 if len (V ) > 1 :
6264 for V_ , name in zip (V , names ):
6365 V_ .topological .name = name
@@ -93,8 +95,8 @@ def set_function_space(dm, V):
9395 if len (V ) > 1 :
9496 names = tuple (V_ .name for V_ in V )
9597 element = V .ufl_element ()
96-
97- info = (weakref .ref (mesh ), element , tuple (reversed (indices )), (V .name , names ))
98+ boundary_sets = tuple ( V_ . boundary_set for V_ in V )
99+ info = (weakref .ref (mesh ), element , tuple (reversed (indices )), (V .name , names ), boundary_sets )
98100 dm .setAttr ("__fs_info__" , info )
99101
100102
0 commit comments