why does user have to pass buffer? Is it difficult to hide the buffer inside PETScVector class?