Hi all,

I’m slowly transitioning from FEniCS to FEniCSx (although I’m also rusty in FEniCS!) and I’m struggling on a seemingly idiotic thing: how to properly define expression vectors to impose a gradient ?

I’m working on this tutorial, with Neumann BCs where the normal derivative is imposed. I want to tweak it to have a given gradient, and compute myself the dot product of the gradient and the outward normal vector.

So, instead of a weak form with g a known scalar function (normal derivative):

```
inner(g, v) * ds
```

I want to have a vector-valued g (the chosen gradient) and a weak form like this:

```
inner(dot(g, n), v) * ds
```

I defined my normal vector as `n = ufl.CellNormal(x)`

(with x the SpatialCoordinate of the mesh) and I’m not sure how to define `g`

. My current approach is to have a scalar function space (V) and a vector function space (W) to define the gradient, and then I do

```
g = fem.Function(W)
g.interpolate(lambda x: (2*x[0], 4*x[1])) # f(x) = x² + 2y², so grad(f) = (2x, 4y)
```

Doing this leads to this error when the variational form is evaluated:

ERROR:UFL:What do you want cell normal in gdim=2, tdim=2 to be?

[long backtrace]

Any idea how to interpret this ?

Thanks a lot in advance!