xref: /petsc/include/petscviennacl.h (revision efbe7e8a80d07327753dbe0b33efee01e046af3f)
1 #if !defined(PETSCVIENNACL_H)
2 #define PETSCVIENNACL_H
3 
4 #include <petscvec.h>
5 
6 #if defined(PETSC_HAVE_CUDA)
7 #define VIENNACL_WITH_CUDA
8 #endif
9 
10 #if defined(PETSC_HAVE_OPENCL)
11 #define VIENNACL_WITH_OPENCL
12 #endif
13 
14 #if defined(PETSC_HAVE_OPENMP)
15 #define VIENNACL_WITH_OPENMP
16 #endif
17 
18 #include <viennacl/forwards.h>
19 #include <viennacl/vector_proxy.hpp>
20 #include <viennacl/vector.hpp>
21 
22 PETSC_EXTERN PetscErrorCode VecViennaCLGetArray(Vec v, viennacl::vector<PetscScalar> **a);
23 PETSC_EXTERN PetscErrorCode VecViennaCLRestoreArray(Vec v, viennacl::vector<PetscScalar> **a);
24 
25 PETSC_EXTERN PetscErrorCode VecViennaCLGetArrayRead(Vec v, const viennacl::vector<PetscScalar> **a);
26 PETSC_EXTERN PetscErrorCode VecViennaCLRestoreArrayRead(Vec v, const viennacl::vector<PetscScalar> **a);
27 
28 PETSC_EXTERN PetscErrorCode VecViennaCLGetArrayWrite(Vec v, viennacl::vector<PetscScalar> **a);
29 PETSC_EXTERN PetscErrorCode VecViennaCLRestoreArrayWrite(Vec v, viennacl::vector<PetscScalar> **a);
30 
31 PETSC_EXTERN PetscErrorCode VecCreateSeqViennaCLWithArray(MPI_Comm,PetscInt,PetscInt,const viennacl::vector<PetscScalar> *,Vec *);
32 PETSC_EXTERN PetscErrorCode VecCreateSeqViennaCLWithArrays(MPI_Comm,PetscInt,PetscInt,const PetscScalar*,const viennacl::vector<PetscScalar> *,Vec *);
33 PETSC_EXTERN PetscErrorCode VecCreateMPIViennaCLWithArray(MPI_Comm,PetscInt,PetscInt,PetscInt,const viennacl::vector<PetscScalar> *,Vec *);
34 PETSC_EXTERN PetscErrorCode VecCreateMPIViennaCLWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscScalar *,const viennacl::vector<PetscScalar> *,Vec *);
35 
36 PETSC_EXTERN PetscErrorCode VecViennaCLPlaceArray(Vec,const viennacl::vector<PetscScalar> *);
37 PETSC_EXTERN PetscErrorCode VecViennaCLResetArray(Vec);
38 
39 
40 #endif
41