So v.gather() should return the whole (distributed) vector on every process.  Hence the local sum of v.gather() should be equal to the MPI_SUM of the local sum of v.array().  If it's not then there's a bug somewhere.