Dear Firedrakers,

 

I’ve encountered an issue in my code where it won’t allow me to interpolate anything containing a reference to a defined FacetNormal onto a Function. Here is a snippet of code where I purposefully tried to put the bare minimum required to get the error:

 

H1 = VectorFunctionSpace(mesh,’CG’,1,5)

x0,x1,x2 = SpatialCoordinate(mesh)

 

nu = FacetNormal(mesh)

 

h = interpolate(as_vector([nu[0],0,0,0,0]),H1)

 

If I try to run this, I get the following traceback:

 

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/function.py", line 353, in interpolate

    return interpolation.interpolate(expression, self, subset=subset)

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/interpolation.py", line 36, in interpolate

    return Interpolator(expr, V, subset=subset, access=access).interpolate()

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/interpolation.py", line 58, in __init__

    self.callable, arguments = make_interpolator(expr, V, subset, access)

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/interpolation.py", line 163, in make_interpolator

    loops.extend(_interpolator(V, tensor, expr, subset, arguments, access))

  File "</home/andrewh/firedrake/firedrake/lib/python3.6/site-packages/decorator.py:decorator-gen-22>", line 2, in _interpolator

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/utils.py", line 64, in wrapper

    return f(*args, **kwargs)

  File "/home/andrewh/firedrake/firedrake/src/firedrake/firedrake/interpolation.py", line 214, in _interpolator

    ast, oriented, needs_cell_sizes, coefficients, _ = compile_ufl_kernel(expr, to_pts, coords, coffee=False)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/driver.py", line 338, in compile_expression_at_points

    ir, = fem.compile_ufl(expression, point_sum=False, **config)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/fem.py", line 645, in compile_ufl

    result = map_expr_dags(context.translator, expressions)

  File "/home/andrewh/firedrake/firedrake/src/ufl/ufl/corealg/map_dag.py", line 73, in map_expr_dags

    r = handlers[v._ufl_typecode_](v)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/ufl_utils.py", line 144, in _modified_terminal

    return self.modified_terminal(o)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/fem.py", line 303, in modified_terminal

    return translate(mt.terminal, mt, self.context)

  File "/usr/lib/python3.6/functools.py", line 807, in wrapper

    return dispatch(args[0].__class__)(*args, **kw)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/fem.py", line 379, in translate_reference_normal

    return ctx.entity_selector(callback, mt.restriction)

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/fem.py", line 98, in entity_selector

    return callback(self.entity_ids[0])

  File "/home/andrewh/firedrake/firedrake/src/tsfc/tsfc/fem.py", line 377, in callback

    n = ctx.fiat_cell.compute_reference_normal(ctx.integration_dim, facet_i)

  File "/home/andrewh/firedrake/firedrake/src/fiat/FIAT/reference_element.py", line 387, in compute_reference_normal

    assert facet_dim == self.get_spatial_dimension() - 1

AssertionError

 

Anyone know what could be the problem here? Any help would be much appreciated.

 

-AH