Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions firedrake/interpolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,10 +231,10 @@ def _interpolator(V, tensor, expr, subset, arguments, access):
if not isinstance(expr, firedrake.Expression):
if expr.ufl_domain() and expr.ufl_domain() != V.mesh():
raise NotImplementedError("Interpolation onto another mesh not supported.")
ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element, coords,
domain=V.mesh(),
parameters=parameters,
coffee=False)
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element,
domain=V.mesh(),
parameters=parameters,
coffee=False)
kernel = op2.Kernel(ast, ast.name, requires_zeroed_output_arguments=True)
elif hasattr(expr, "eval"):
to_pts = []
Expand All @@ -243,8 +243,8 @@ def _interpolator(V, tensor, expr, subset, arguments, access):
raise NotImplementedError("Can only interpolate Python kernels with Lagrange elements")
pts, = dual.pt_dict.keys()
to_pts.append(pts)

kernel, oriented, needs_cell_sizes, coefficients = compile_python_kernel(expr, to_pts, to_element, V, coords)
first_coeff_fake_coords = False
else:
raise RuntimeError("Attempting to evaluate an Expression which has no value.")

Expand All @@ -254,6 +254,10 @@ def _interpolator(V, tensor, expr, subset, arguments, access):
cell_set = subset
parloop_args = [kernel, cell_set]

if first_coeff_fake_coords:
# Replace with real coords coefficient
coefficients[0] = coords

if tensor in set((c.dat for c in coefficients)):
output = tensor
tensor = op2.Dat(tensor.dataset)
Expand Down
6 changes: 2 additions & 4 deletions firedrake/preconditioners/pmg.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,9 @@ def prolongation_transfer_kernel_aij(Pk, P1):
from firedrake import TestFunction

expr = TestFunction(P1)
coords = Pk.ufl_domain().coordinates
to_element = create_base_element(Pk.ufl_element())

ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element, coords, coffee=False)
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
kernel = op2.Kernel(ast, ast.name)
return kernel

Expand Down Expand Up @@ -377,9 +376,8 @@ def make_kernels(self, Vf, Vc):
def prolongation_transfer_kernel_action(Vf, expr):
from tsfc import compile_expression_dual_evaluation
from tsfc.finatinterface import create_base_element
coords = Vf.ufl_domain().coordinates
to_element = create_base_element(Vf.ufl_element())
ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element, coords, coffee=False)
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
return op2.Kernel(ast, ast.name)

def make_blas_kernels(self, Vf, Vc):
Expand Down