Hi all! I am doing the sensitivity analysis and I have several questions about FEniCSX.

**Question 1**

Take the classical demo Hyperelasticity — FEniCSx tutorial (jorgensd.github.io) as an example. Now we assume the elasticity parameter `mu`

is a cell-wise constant instead of a constant on the whole mesh.

```
S = dolfinx.FunctionSpace(mesh, ('DG', 0))
mu = dolfinx.Function(S)
```

And we can set some arbitrary values to `mu`

```
import numpy as np
NElem = mesh.topology.index_map(mesh.topology.dim).size_local # number of elements
with mu.vector.localForm() as mu_loc:
mu_loc.setValues(np.arange(NElem).tolist(), np.arange(NElem).tolist())
```

How can I output the values of `mu`

? In this case it should be `np.arange(NElem).tolist()`

.

**Question 2**

Now we want to compute the derivative of `F`

with respect to the parameter `mu`

of each element

```
F = ufl.inner(ufl.grad(v), P)*dx - ufl.inner(v, B)*dx - ufl.inner(v, T)*ds(2)
dFdmu1 = ufl.diff(F, mu1)
dFdmu2 = ufl.diff(F, mu2)
dFdmu3 = ufl.diff(F, mu3)
...
```

This process should be equivalent to compute cell-wise integrals as (since `mu1`

, `mu2`

, and `mu3`

are independent variables):

```
dFdmu1 = ufl.diff(F, mu) # take the integral on element 1
dFdmu2 = ufl.diff(F, mu) # take the integral on element 2
dFdmu3 = ufl.diff(F, mu) # take the integral on element 3
...
```

So is it possible to compute these derivatives conveniently in FEniCSX? I think it is doable with for-loops, but it will be very slow if we have a larger mesh.

**Question 3**

Finally, I want to assemble these vectors:

```
R1 = dolfinx.fem.assemble_vector(dFdmu1) # vector 1
R2 = dolfinx.fem.assemble_vector(dFdmu2) # vector 2
R3 = dolfinx.fem.assemble_vector(dFdmu2) # vector 3
```

Is there some way to assemble multiple vectors simultaneously to improve computational efficiency? It might be something like

```
dolfinx.fem.assemble_vector([dFdmu1, dFdmu2, dFdmu3])
```

and then we will obtain a matrix containing the assembled vectors.

Thanks!