-
Notifications
You must be signed in to change notification settings - Fork 25
Description
From slack, @wence- said
the interpolation tsfc<->firedrake interface needs to be cleaned up so that we don't have to send data-carrying objects in. Right now, we generate the list of parloop args from the coefficients that complex_expression_dual_evaluation sends back
So if we mimic the idea for form compilation, what happens is that the initial form provides form.coefficients() in a canonical order
and the kernel that tsfc sends back provides indices into that list of which coefficients are needed
so you iterate over the indices and get the coefficients
it also sends back some extra info like "do I need the cell orientations, etc..."
one could imagine doing the same thing for interpolation kernels
So the new return values for compile_expression_dual_evaluation would be
- the kernel,
- ast,
- and a bunch of switches and indices that somehow lets firedrake work out how to get the right arguments for the par loop from the expression, FInAT element and coordinates
Firedrake.Function.
Perhaps one wouldn't need to pass in the element and coordinates at all?
def compile_expression_dual_evaluation(expression, element, coordinates, *,
domain=None, interface=None,
parameters=None, coffee=False):
could become
def compile_expression_dual_evaluation(expression, *,
domain=None, interface=None,
parameters=None, coffee=False):