Skip to content

Commit 40f235c

Browse files
committed
Replace manufactured coordinates coefficient
Use new interface that informs if a manufactured coordinates coefficient is the first coefficient
1 parent 66aedbb commit 40f235c

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

firedrake/interpolation.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ def _interpolator(V, tensor, expr, subset, arguments, access):
231231
if not isinstance(expr, firedrake.Expression):
232232
if expr.ufl_domain() and expr.ufl_domain() != V.mesh():
233233
raise NotImplementedError("Interpolation onto another mesh not supported.")
234-
ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element,
235-
domain=V.mesh(),
236-
parameters=parameters,
237-
coffee=False)
234+
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element,
235+
domain=V.mesh(),
236+
parameters=parameters,
237+
coffee=False)
238238
kernel = op2.Kernel(ast, ast.name, requires_zeroed_output_arguments=True)
239239
elif hasattr(expr, "eval"):
240240
to_pts = []
@@ -243,8 +243,8 @@ def _interpolator(V, tensor, expr, subset, arguments, access):
243243
raise NotImplementedError("Can only interpolate Python kernels with Lagrange elements")
244244
pts, = dual.pt_dict.keys()
245245
to_pts.append(pts)
246-
247246
kernel, oriented, needs_cell_sizes, coefficients = compile_python_kernel(expr, to_pts, to_element, V, coords)
247+
first_coeff_fake_coords = False
248248
else:
249249
raise RuntimeError("Attempting to evaluate an Expression which has no value.")
250250

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

257+
if first_coeff_fake_coords:
258+
# Replace with real coords coefficient
259+
coefficients[0] = coords
260+
257261
if tensor in set((c.dat for c in coefficients)):
258262
output = tensor
259263
tensor = op2.Dat(tensor.dataset)

firedrake/preconditioners/pmg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ def prolongation_transfer_kernel_aij(Pk, P1):
266266
expr = TestFunction(P1)
267267
to_element = create_base_element(Pk.ufl_element())
268268

269-
ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
269+
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
270270
kernel = op2.Kernel(ast, ast.name)
271271
return kernel
272272

@@ -377,7 +377,7 @@ def prolongation_transfer_kernel_action(Vf, expr):
377377
from tsfc import compile_expression_dual_evaluation
378378
from tsfc.finatinterface import create_base_element
379379
to_element = create_base_element(Vf.ufl_element())
380-
ast, oriented, needs_cell_sizes, coefficients, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
380+
ast, oriented, needs_cell_sizes, coefficients, first_coeff_fake_coords, _ = compile_expression_dual_evaluation(expr, to_element, coffee=False)
381381
return op2.Kernel(ast, ast.name)
382382

383383
def make_blas_kernels(self, Vf, Vc):

0 commit comments

Comments
 (0)