# VecCUDAGetArray
Provides access to the CUDA buffer inside a vector. 
## Synopsis
```
#include "petscvec.h"   
PETSC_EXTERN PetscErrorCode VecCUDAGetArray(Vec v, PetscScalar **a)
```
Not Collective; No Fortran Support


## Input Parameter

- ***v -*** the vector



## Output Parameter

- ***a -*** the CUDA device pointer





## Notes
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.  `VecCUDAGetArray()` 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
`VecCUDARestoreArray()`.  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.


## See Also
 [](chapter_vectors), `Vec`, `VecCUDARestoreArray()`, `VecCUDAGetArrayRead()`, `VecCUDAGetArrayWrite()`, `VecGetArray()`, `VecGetArrayRead()`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/vec/interface/rvector.c.html#VecCUDAGetArray">src/vec/vec/interface/rvector.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/vec/vec/interface/rvector.c)


[Index of all Vec routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
