xref: /petsc/include/petscvec.h (revision 6b5873e37b549cc139dbd34cfb32e6aff4f310b3)
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 
219e25ed09SBarry Smith #define VEC_COOKIE         PETSC_COOKIE+3
229e25ed09SBarry Smith #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
239e25ed09SBarry Smith 
24f0479e8cSBarry Smith 
252eac72dbSBarry Smith typedef struct _Vec*            Vec;
2620563c6bSBarry Smith typedef struct _VecScatterCtx*  VecScatterCtx;
272eac72dbSBarry Smith 
28*6b5873e3SBarry Smith extern int VecCreateSequential(MPI_Comm,int,Vec *);
29*6b5873e3SBarry Smith extern int VecCreateSequentialNonBLAS(MPI_Comm,int,Vec *);
302eac72dbSBarry Smith 
318ed539a5SBarry Smith extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
32*6b5873e3SBarry Smith extern int VecCreateMPINonBLAS(MPI_Comm,int,int,Vec *);
332eac72dbSBarry Smith 
34*6b5873e3SBarry Smith extern int VecCreateInitialVector(MPI_Comm,int,Vec *);
352eac72dbSBarry Smith 
368ed539a5SBarry Smith extern int VecDot(Vec, Vec, Scalar*);
378ed539a5SBarry Smith extern int VecTDot(Vec, Vec, Scalar*);
388ed539a5SBarry Smith extern int VecMDot(int,      Vec ,Vec*,Scalar*);
398ed539a5SBarry Smith extern int VecMTDot(int,      Vec ,Vec*,Scalar*);
408ed539a5SBarry Smith extern int VecNorm(Vec, double*);
4120563c6bSBarry Smith extern int VecASum(Vec, double*);
428ed539a5SBarry Smith extern int VecMax(Vec, int *,    Scalar*);
438ed539a5SBarry Smith extern int VecScale(Scalar*, Vec);
448ed539a5SBarry Smith extern int VecCopy(Vec, Vec);
458ed539a5SBarry Smith extern int VecSet(Scalar*, Vec);
468ed539a5SBarry Smith extern int VecSwap(Vec, Vec);
478ed539a5SBarry Smith extern int VecAXPY(Scalar*, Vec, Vec);
488ed539a5SBarry Smith extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
498ed539a5SBarry Smith extern int VecAYPX(Scalar*, Vec, Vec);
508ed539a5SBarry Smith extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
518ed539a5SBarry Smith extern int VecPMult(Vec, Vec, Vec);
528ed539a5SBarry Smith extern int VecPDiv(Vec, Vec, Vec);
538ed539a5SBarry Smith extern int VecCreate(Vec,Vec *);
548ed539a5SBarry Smith extern int VecDestroy(Vec);
558ed539a5SBarry Smith extern int VecGetVecs(Vec, int,Vec **);
568ed539a5SBarry Smith extern int VecFreeVecs(Vec*,int);
572eac72dbSBarry Smith 
5820563c6bSBarry Smith typedef enum {NotSetValues, InsertValues, AddValues} InsertMode;
5920563c6bSBarry Smith 
6020563c6bSBarry Smith extern int VecSetValues(Vec, int, int *,Scalar*,InsertMode);
618ed539a5SBarry Smith extern int VecBeginAssembly(Vec);
628ed539a5SBarry Smith extern int VecEndAssembly(Vec);
638ed539a5SBarry Smith 
64da3a660dSBarry Smith #define ScatterReverse 1
65da3a660dSBarry Smith #define ScatterDown    2
66da3a660dSBarry Smith #define ScatterUp      4
67da3a660dSBarry Smith #define ScatterAll     8
68d6dfbf8fSBarry Smith extern int VecScatterBegin(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
69d6dfbf8fSBarry Smith extern int VecScatterEnd(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
7020563c6bSBarry Smith extern int VecScatterCtxCreate(Vec,IS,Vec,IS,VecScatterCtx *);
7120563c6bSBarry Smith extern int VecScatterCtxDestroy(VecScatterCtx);
72d6dfbf8fSBarry Smith extern int VecScatterCtxCopy(VecScatterCtx,VecScatterCtx *);
73d6dfbf8fSBarry Smith 
74d6dfbf8fSBarry Smith #define PipelineDown 0
75d6dfbf8fSBarry Smith #define PipelineUp   1
76d6dfbf8fSBarry Smith extern int VecPipelineBegin(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
77d6dfbf8fSBarry Smith extern int VecPipelineEnd(Vec,IS,Vec,IS,InsertMode,int,VecScatterCtx);
788ed539a5SBarry Smith 
798ed539a5SBarry Smith extern int VecGetArray(Vec,Scalar**);
80*6b5873e3SBarry Smith extern int VecRestoreArray(Vec,Scalar**);
818ed539a5SBarry Smith extern int VecValidVector(Vec);
828ed539a5SBarry Smith extern int VecView(Vec, Viewer);
838ed539a5SBarry Smith 
848ed539a5SBarry Smith extern int VecGetSize(Vec,int *);
858ed539a5SBarry Smith extern int VecGetLocalSize(Vec,int *);
86d6dfbf8fSBarry Smith extern int VecGetOwnershipRange(Vec,int*,int*);
878ed539a5SBarry Smith 
888ed539a5SBarry Smith /* utility routines */
898ed539a5SBarry Smith extern int VecReciprocal(Vec);
902eac72dbSBarry Smith 
912eac72dbSBarry Smith #endif
922eac72dbSBarry Smith 
932eac72dbSBarry Smith 
94