Hi,

I am trying to understand how shape optimization works but am getting confused about how the Reisz representation of the shape derivative is used. For some shape functional

`J = ...`

I understand UFL can compute the shape derivative as

```
import dolfin as dfn
import ufl
mesh = dfn.UnitSquareMesh(10, 10)
W = dfn.VectorFunctionSpace(mesh, 'CG1')
x = ufl.MeshCoordinate(mesh)
dJ = dfn.derivative(J, x)
gradJ = dfn.Function(W)
```

where `dJ`

is the shape derivative.

From reading some past papers (https://arxiv.org/pdf/2001.10058.pdf) my understanding is that `dJ`

is a linear functional that needs a Reisz representation (stored in `gradJ`

here) in the mesh’s CG1 space so that you can then use that representation to deform the mesh.

My understanding is that the straightforward one is simply using

`dfn.assemble(dJ, tensor=gradJ.vector())`

which I guess corresponds to the Reisz representation with respect to the L2 inner product.

In this paper they use the Reisz representation from the laplacian operator by

```
trial = dfn.TrialFunction(W)
test = dfn.TestFunction(W)
A_reisz = dfn.assemble(ufl.inner(ufl.grad(trial), ufl.grad(test))) * dx
dfn.solve(A_reisz, gradJ, dJ)
```

What I’m confused about is whether `gradJ.vector()`

is then the vector you would output to an optimization algorithm? Specifically in optimization algorithms for a given shape `x`

you would need a function like the below

```
def obj_and_grad(x):
dfn.ALE.move(mesh, x)
obj = dfn.assemble(J)
## use one of the above methods to compute `gradJ`
grad = gradJ.vector()
return (obj, grad)
```

which returns the objective function value and gradient. When using the laplacian type riesz representation, I’m confused because I think `gradJ`

in this case doesn’t correspond to the correct gradient of `obj_and_grad`

because of the different inner product in the Riesz representation, i.e:

```
# `obj_and_grad(x+dx)[0] - obj_and_grad(x)[0]`
# would not converge to
# `np.dot(grad, dx)`
# for small dx if `gradJ` is computed from a Laplacian type Riesz representation?
```

It seems like this is what was done in https://link.springer.com/content/pdf/10.1007/s00158-019-02281-z.pdf.

Am I missing something or misunderstanding how the shape derivative works?

Thanks very much for any help!