Getting the coefficient vector of the function to all the CPUs is shown in the following

```
from dolfin import *
mesh = UnitIntervalMesh(5)
V = FunctionSpace(mesh, 'CG', 1)
f = Expression('x[0]', degree=1)
u = interpolate(f, V)
u_vec = u.vector()
u_vec[:] = MPI.comm_world.rank + 1
v_vec = Vector(MPI.comm_self, u_vec.local_size())
u_vec.gather(v_vec, V.dofmap().dofs())
print("Original vs copied: ", u_vec.get_local(), v_vec.get_local()) # [1, 1], [0, 0, 0]
g_vec = Vector(MPI.comm_world, V.dim())
# Values from everywhere on 0
g_vec = u_vec.gather_on_zero()
# To everywhere from 0
mine = MPI.comm_world.bcast(g_vec)
# Reconstruct
if MPI.comm_world.rank == 0:
my_g = g_vec
else:
my_g = Vector(MPI.comm_self, V.dim())
my_g.set_local(mine)
```

I suppose you want next to rebuild from the coefficient vector the function locally on each CPU, so that something like this would return 0

```
mesh = UnitIntervalMesh(MPI.comm_self, 5)
V = FunctionSpace(mesh, 'CG', 1)
fh = Function(V, my_g)
a = inner(f-fh, f-fh)*dx
print(assemble(a))
```

Is that the case? Perhaps post the link to the old forum.