|
23 | 23 | from firedrake.bcs import DirichletBC, EquationBC, EquationBCSplit |
24 | 24 | from firedrake.functionspaceimpl import WithGeometry, FunctionSpace, FiredrakeDualSpace |
25 | 25 | from firedrake.functionspacedata import entity_dofs_key, entity_permutations_key |
| 26 | +from firedrake.interpolation import get_interpolator |
26 | 27 | from firedrake.petsc import PETSc |
27 | 28 | from firedrake.slate import slac, slate |
28 | 29 | from firedrake.slate.slac.kernel_builder import CellFacetKernelArg, LayerCountKernelArg |
@@ -613,17 +614,8 @@ def base_form_assembly_visitor(self, expr, tensor, bcs, *args): |
613 | 614 | rank = len(expr.arguments()) |
614 | 615 | if rank > 2: |
615 | 616 | raise ValueError("Cannot assemble an Interpolate with more than two arguments") |
616 | | - # Get the target space |
617 | | - V = v.function_space().dual() |
618 | | - |
619 | | - # Get the interpolator |
620 | | - interp_data = expr.interp_data.copy() |
621 | | - default_missing_val = interp_data.pop('default_missing_val', None) |
622 | | - if rank == 1 and isinstance(tensor, firedrake.Function): |
623 | | - V = tensor |
624 | | - interpolator = firedrake.Interpolator(expr, V, bcs=bcs, **interp_data) |
625 | | - # Assembly |
626 | | - return interpolator.assemble(tensor=tensor, default_missing_val=default_missing_val) |
| 617 | + interpolator = get_interpolator(expr) |
| 618 | + return interpolator.assemble(tensor=tensor, bcs=bcs) |
627 | 619 | elif tensor and isinstance(expr, (firedrake.Function, firedrake.Cofunction, firedrake.MatrixBase)): |
628 | 620 | return tensor.assign(expr) |
629 | 621 | elif tensor and isinstance(expr, ufl.ZeroBaseForm): |
|
0 commit comments