xref: /petsc/include/petscvec.h (revision 8ed539a5e9028ff5f4219e37f66f1bef6cd978d1)
12eac72dbSBarry Smith /*
22eac72dbSBarry Smith    This defines the abstract vector component. These are patterned
32eac72dbSBarry Smith    after the Level-1 Blas, but with some additions that have proved
42eac72dbSBarry Smith    useful. These include routines to allocate and free vectors.
52eac72dbSBarry Smith 
62eac72dbSBarry Smith    Note that the routines that are normally thought of as returning a
72eac72dbSBarry Smith    value (e.g., dot, norm) return their value through an argument.
82eac72dbSBarry Smith    This allows these routines to be used with other datatype, such
92eac72dbSBarry Smith    as float and dcomplex.
102eac72dbSBarry Smith 
112eac72dbSBarry Smith    All vectors should be declared as a Vec. All vector routines begin
122eac72dbSBarry Smith    with Vec.
132eac72dbSBarry Smith 
142eac72dbSBarry Smith 
152eac72dbSBarry Smith  */
162eac72dbSBarry Smith 
172eac72dbSBarry Smith #ifndef __VEC_PACKAGE
182eac72dbSBarry Smith #define __VEC_PACKAGE
192eac72dbSBarry Smith #include "is.h"
202eac72dbSBarry Smith 
212eac72dbSBarry Smith typedef struct _Vec*           Vec;
222eac72dbSBarry Smith typedef struct _VecScatterCtx* VecScatterCtx;
232eac72dbSBarry Smith 
24*8ed539a5SBarry Smith extern int VecCreateSequential(int,Vec *);
25*8ed539a5SBarry Smith extern int VecCreateSequentialBLAS(int,Vec *);
262eac72dbSBarry Smith 
27*8ed539a5SBarry Smith #if defined(HAVE_MPI)
28*8ed539a5SBarry Smith #include "comm.h"
29*8ed539a5SBarry Smith extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
30*8ed539a5SBarry Smith extern int VecCreateMPIBLAS(MPI_Comm,int,int,Vec *);
312eac72dbSBarry Smith #endif
322eac72dbSBarry Smith 
33*8ed539a5SBarry Smith extern int VecCreateInitialVector(int,Vec *);
342eac72dbSBarry Smith 
352eac72dbSBarry Smith 
362eac72dbSBarry Smith 
372eac72dbSBarry Smith 
38*8ed539a5SBarry Smith extern int VecDot(Vec, Vec, Scalar*);
39*8ed539a5SBarry Smith extern int VecTDot(Vec, Vec, Scalar*);
40*8ed539a5SBarry Smith extern int VecMDot(int,      Vec ,Vec*,Scalar*);
41*8ed539a5SBarry Smith extern int VecMTDot(int,      Vec ,Vec*,Scalar*);
42*8ed539a5SBarry Smith extern int VecNorm(Vec, double*);
43*8ed539a5SBarry Smith extern int VecASum(Vec, Scalar*);
44*8ed539a5SBarry Smith extern int VecMax(Vec, int *,    Scalar*);
45*8ed539a5SBarry Smith extern int VecScale(Scalar*, Vec);
46*8ed539a5SBarry Smith extern int VecCopy(Vec, Vec);
47*8ed539a5SBarry Smith extern int VecSet(Scalar*, Vec);
48*8ed539a5SBarry Smith extern int VecSwap(Vec, Vec);
49*8ed539a5SBarry Smith extern int VecAXPY(Scalar*, Vec, Vec);
50*8ed539a5SBarry Smith extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
51*8ed539a5SBarry Smith extern int VecAYPX(Scalar*, Vec, Vec);
52*8ed539a5SBarry Smith extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
53*8ed539a5SBarry Smith extern int VecPMult(Vec, Vec, Vec);
54*8ed539a5SBarry Smith extern int VecPDiv(Vec, Vec, Vec);
55*8ed539a5SBarry Smith extern int VecCreate(Vec,Vec *);
56*8ed539a5SBarry Smith extern int VecDestroy(Vec);
57*8ed539a5SBarry Smith extern int VecGetVecs(Vec, int,Vec **);
58*8ed539a5SBarry Smith extern int VecFreeVecs(Vec*,int);
592eac72dbSBarry Smith 
60*8ed539a5SBarry Smith extern int VecAddValues(Vec, int, int *,Scalar*);
61*8ed539a5SBarry Smith extern int VecInsertValues(Vec, int, int *,Scalar*);
62*8ed539a5SBarry Smith extern int VecBeginAssembly(Vec);
63*8ed539a5SBarry Smith extern int VecEndAssembly(Vec);
64*8ed539a5SBarry Smith 
65*8ed539a5SBarry Smith extern int VecScatterBegin(Vec,IS,Vec,IS,VecScatterCtx *);
66*8ed539a5SBarry Smith extern int VecScatterEnd(Vec,IS,Vec,IS,VecScatterCtx *);
67*8ed539a5SBarry Smith 
68*8ed539a5SBarry Smith extern int VecScatterAddBegin(Vec,IS,Vec,IS,VecScatterCtx *);
69*8ed539a5SBarry Smith extern int VecScatterAddEnd(Vec,IS,Vec,IS,VecScatterCtx *);
70*8ed539a5SBarry Smith 
71*8ed539a5SBarry Smith extern int VecGetArray(Vec,Scalar**);
72*8ed539a5SBarry Smith extern int VecValidVector(Vec);
73*8ed539a5SBarry Smith extern int VecView(Vec, Viewer);
74*8ed539a5SBarry Smith 
75*8ed539a5SBarry Smith extern int VecGetSize(Vec,int *);
76*8ed539a5SBarry Smith extern int VecGetLocalSize(Vec,int *);
77*8ed539a5SBarry Smith 
78*8ed539a5SBarry Smith /* utility routines */
79*8ed539a5SBarry Smith extern int VecReciprocal(Vec);
802eac72dbSBarry Smith 
812eac72dbSBarry Smith #endif
822eac72dbSBarry Smith 
832eac72dbSBarry Smith 
84