xref: /petsc/include/petscvec.h (revision 8368b2b9fc9b1b2a2468f5dd5b338216422cc8fc)
1 /*
2    This defines the abstract vector component. These are patterned
3    after the Level-1 Blas, but with some additions that have proved
4    useful. These include routines to allocate and free vectors.
5 
6    Note that the routines that are normally thought of as returning a
7    value (e.g., dot, norm) return their value through an argument.
8    This allows these routines to be used with other datatype, such
9    as float and dcomplex.
10 
11    All vectors should be declared as a Vec. All vector routines begin
12    with Vec.
13 
14 
15  */
16 
17 #ifndef __VEC_PACKAGE
18 #define __VEC_PACKAGE
19 #include "is.h"
20 
21 #define VEC_COOKIE         PETSC_COOKIE+3
22 #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
23 
24 
25 typedef struct _Vec*            Vec;
26 typedef struct _VecScatterCtx*  VecScatterCtx;
27 
28 extern int VecCreateSequential(MPI_Comm,int,Vec *);
29 extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
30 extern int VecCreateInitialVector(MPI_Comm,int,Vec *);
31 
32 extern int VecDot(Vec, Vec, Scalar*);
33 extern int VecTDot(Vec, Vec, Scalar*);
34 extern int VecMDot(int,      Vec ,Vec*,Scalar*);
35 extern int VecMTDot(int,      Vec ,Vec*,Scalar*);
36 extern int VecNorm(Vec, double*);
37 extern int VecASum(Vec, double*);
38 extern int VecMax(Vec, int *,    Scalar*);
39 extern int VecMin(Vec, int *,    Scalar*);
40 extern int VecScale(Scalar*, Vec);
41 extern int VecCopy(Vec, Vec);
42 extern int VecSet(Scalar*, Vec);
43 extern int VecSwap(Vec, Vec);
44 extern int VecAXPY(Scalar*, Vec, Vec);
45 extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
46 extern int VecAYPX(Scalar*, Vec, Vec);
47 extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
48 extern int VecPMult(Vec, Vec, Vec);
49 extern int VecPDiv(Vec, Vec, Vec);
50 extern int VecCreate(Vec,Vec *);
51 extern int VecDestroy(Vec);
52 extern int VecGetVecs(Vec, int,Vec **);
53 extern int VecFreeVecs(Vec*,int);
54 
55 typedef enum {NotSetValues, InsertValues, AddValues} InsertMode;
56 
57 extern int VecSetValues(Vec, int, int *,Scalar*,InsertMode);
58 extern int VecBeginAssembly(Vec);
59 extern int VecEndAssembly(Vec);
60 
61 #define ScatterReverse 1
62 #define ScatterDown    2
63 #define ScatterUp      4
64 #define ScatterAll     8
65 extern int VecScatterBegin(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
66 extern int VecScatterEnd(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
67 extern int VecScatterCtxCreate(Vec,IS,Vec,IS,VecScatterCtx *);
68 extern int VecScatterCtxDestroy(VecScatterCtx);
69 extern int VecScatterCtxCopy(VecScatterCtx,VecScatterCtx *);
70 
71 #define PipelineDown 0
72 #define PipelineUp   1
73 extern int VecPipelineBegin(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
74 extern int VecPipelineEnd(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
75 
76 extern int VecGetArray(Vec,Scalar**);
77 extern int VecRestoreArray(Vec,Scalar**);
78 extern int VecValidVector(Vec);
79 extern int VecView(Vec, Viewer);
80 
81 extern int VecGetSize(Vec,int *);
82 extern int VecGetLocalSize(Vec,int *);
83 extern int VecGetOwnershipRange(Vec,int*,int*);
84 
85 /* utility routines */
86 extern int VecReciprocal(Vec);
87 
88 #endif
89 
90 
91