@@ -246,7 +246,7 @@ def allocate_matrix(self, Amat, V, J, bcs, fcp, pmat_type, use_static_condensati
246246 elif len (ifacet ) == 1 :
247247 Vfacet = V [ifacet [0 ]]
248248 ebig , = set (unrestrict_element (Vsub .ufl_element ()) for Vsub in V )
249- Vbig = FunctionSpace ( V . mesh (), ebig )
249+ Vbig = V . reconstruct ( element = ebig )
250250 if len (V ) > 1 :
251251 dims = [Vsub .finat_element .space_dimension () for Vsub in V ]
252252 assert sum (dims ) == Vbig .finat_element .space_dimension ()
@@ -436,17 +436,17 @@ def condense(self, A, J, bcs, fcp, pc_type="icc"):
436436 V0 = next ((Vi for Vi in V if is_restricted (Vi .finat_element )[0 ]), None )
437437 V1 = next ((Vi for Vi in V if is_restricted (Vi .finat_element )[1 ]), None )
438438 if V0 is None :
439- V0 = FunctionSpace ( V . mesh (), restrict_element (self .embedding_element , "interior" ))
439+ V0 = V . reconstruct ( element = restrict_element (self .embedding_element , "interior" ))
440440 if V1 is None :
441- V1 = FunctionSpace ( V . mesh (), restrict_element (self .embedding_element , "facet" ))
441+ V1 = V . reconstruct ( element = restrict_element (self .embedding_element , "facet" ))
442442 if len (V ) == 1 :
443443 J00 = J (* (t .reconstruct (function_space = V0 ) for t in J .arguments ()))
444444 elif len (V ) == 2 :
445445 J00 = ExtractSubBlock ().split (J , argument_indices = (V0 .index , V0 .index ))
446446 ises = V .dof_dset .field_ises
447447 Smats [V [0 ], V [1 ]] = A .createSubMatrix (ises [0 ], ises [1 ])
448448 Smats [V [1 ], V [0 ]] = A .createSubMatrix (ises [1 ], ises [0 ])
449- unindexed = {Vsub : FunctionSpace ( Vsub .mesh (), Vsub . ufl_element () ) for Vsub in V }
449+ unindexed = {Vsub : Vsub .collapse ( ) for Vsub in V }
450450 bcs = tuple (bc .reconstruct (V = unindexed [bc .function_space ()], g = 0 ) for bc in bcs )
451451 else :
452452 raise ValueError ("Expecting at most 2 components" )
@@ -708,7 +708,7 @@ def _element_kernels(self):
708708 element_kernel = TripleProductKernel (R1 , M , C1 )
709709 schur_kernel = self .schur_kernel .get (Vrow ) if Vrow == Vcol else None
710710 if schur_kernel is not None :
711- V0 = FunctionSpace ( Vrow .mesh (), restrict_element (self .embedding_element , "interior" ))
711+ V0 = Vrow .collapse (). reconstruct ( element = restrict_element (self .embedding_element , "interior" ))
712712 C0 = self .assemble_reference_tensor (V0 , sort_interior = True )
713713 R0 = self .assemble_reference_tensor (V0 , sort_interior = True , transpose = True )
714714 element_kernel = schur_kernel (element_kernel ,
@@ -826,7 +826,7 @@ def set_values(self, A, Vrow, Vcol, mat_type=None):
826826 element_kernel = TripleProductKernel (R1 , M , C1 )
827827 schur_kernel = self .schur_kernel .get (Vrow ) if on_diag else None
828828 if schur_kernel is not None :
829- V0 = FunctionSpace ( Vrow .mesh (), restrict_element (self .embedding_element , "interior" ))
829+ V0 = Vrow .collapse (). reconstruct ( element = restrict_element (self .embedding_element , "interior" ))
830830 C0 = self .assemble_reference_tensor (V0 , sort_interior = True )
831831 R0 = self .assemble_reference_tensor (V0 , sort_interior = True , transpose = True )
832832 element_kernel = schur_kernel (element_kernel ,
@@ -1462,9 +1462,9 @@ def __init__(self, kernel, name=None):
14621462 fcp = self .child .fcp
14631463 args = form .arguments ()
14641464 Q = args [0 ].function_space ()
1465- V = FunctionSpace ( Q . mesh (), unrestrict_element (Q .ufl_element ()))
1466- V0 = FunctionSpace ( Q . mesh (), restrict_element (V .ufl_element (), "interior" ))
1467- V1 = FunctionSpace ( Q . mesh (), restrict_element (V .ufl_element (), "facet" ))
1465+ V = Q . reconstruct ( element = unrestrict_element (Q .ufl_element ()))
1466+ V0 = Q . reconstruct ( element = restrict_element (V .ufl_element (), "interior" ))
1467+ V1 = Q . reconstruct ( element = restrict_element (V .ufl_element (), "facet" ))
14681468 idofs = PETSc .IS ().createBlock (V .block_size , restricted_dofs (V0 .finat_element , V .finat_element ), comm = comm )
14691469 fdofs = PETSc .IS ().createBlock (V .block_size , restricted_dofs (V1 .finat_element , V .finat_element ), comm = comm )
14701470 size = idofs .size + fdofs .size
0 commit comments