diff --git a/firedrake/assemble.py b/firedrake/assemble.py index dafe2a32ab..61909e9955 100644 --- a/firedrake/assemble.py +++ b/firedrake/assemble.py @@ -311,8 +311,7 @@ def __init__(self, zero_bc_nodes=False, diagonal=False, weight=1.0, - allocation_integral_types=None, - needs_zeroing=False): + allocation_integral_types=None): super().__init__(form, bcs=bcs, form_compiler_parameters=form_compiler_parameters) self._mat_type = mat_type self._sub_mat_type = sub_mat_type @@ -322,7 +321,6 @@ def __init__(self, self._diagonal = diagonal self._weight = weight self._allocation_integral_types = allocation_integral_types - assert not needs_zeroing def allocate(self): rank = len(self._form.arguments()) @@ -1129,8 +1127,7 @@ def _apply_bc(self, tensor, bc): pass def _check_tensor(self, tensor): - if not isinstance(tensor, op2.Global): - raise TypeError(f"Expecting a op2.Global, got {tensor!r}.") + pass @staticmethod def _as_pyop2_type(tensor, indices=None): @@ -1192,8 +1189,8 @@ def _apply_bc(self, tensor, bc): self._apply_dirichlet_bc(tensor, bc) elif isinstance(bc, EquationBCSplit): bc.zero(tensor) - get_assembler(bc.f, bcs=bc.bcs, form_compiler_parameters=self._form_compiler_params, needs_zeroing=False, - zero_bc_nodes=self._zero_bc_nodes, diagonal=self._diagonal).assemble(tensor=tensor) + type(self)(bc.f, bcs=bc.bcs, form_compiler_parameters=self._form_compiler_params, needs_zeroing=False, + zero_bc_nodes=self._zero_bc_nodes, diagonal=self._diagonal).assemble(tensor=tensor) else: raise AssertionError diff --git a/firedrake/bcs.py b/firedrake/bcs.py index f0d007ede4..7c6821b3e3 100644 --- a/firedrake/bcs.py +++ b/firedrake/bcs.py @@ -634,10 +634,10 @@ def reconstruct(self, field=None, V=None, subu=None, u=None, row_field=None, col return rank = len(self.f.arguments()) splitter = ExtractSubBlock() - if rank == 1: - form = splitter.split(self.f, argument_indices=(row_field, )) - elif rank == 2: - form = splitter.split(self.f, argument_indices=(row_field, col_field)) + form = splitter.split(self.f, argument_indices=(row_field, col_field)[:rank]) + if form == 0: + # form is empty, do nothing + return if u is not None: form = firedrake.replace(form, {self.u: u}) if action_x is not None: