PETSC_EXTERN PetscErrorCode VecCUDAGetArrayReadWrite(Vec v, PetscScalar **a)This function has semantics similar to VecGetArray(): the pointer returned by this function points to a consistent view of the vector data. This may involve a copy operation of data from the host to the device if the data on the device is out of date. If the device memory hasn't been allocated previously it will be allocated as part of this function call. VecCUDAGetArrayReadWrite() assumes that the user will modify the vector data. This is similar to intent(inout) in fortran.
The CUDA device pointer has to be released by calling VecCUDARestoreArrayReadWrite(). Upon restoring the vector data the data on the host will be marked as out of date. A subsequent access of the host data will thus incur a data transfer from the device to the host.