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 typedef struct _Vec* Vec; 22 typedef struct _VecScatterCtx* VecScatterCtx; 23 typedef double* VecScalar; 24 25 extern int VecCreateSequential ANSI_ARGS((int,Vec *)); 26 extern int VecCreateSequentialBLAS ANSI_ARGS((int,Vec *)); 27 extern int VecCreateComplexSequential ANSI_ARGS((int,Vec *)); 28 29 extern int VecCreateInitialVector ANSI_ARGS((int,int,char **,Vec *)); 30 31 #if defined(MPI_PACKAGE) 32 extern int VecCreateMPI ANSI_ARGS((void *,int,int,Vec *)); 33 extern int VecCreateMPIBLAS ANSI_ARGS((void *,int,int,Vec *)); 34 extern int VecCreateComplexMPI ANSI_ARGS((void *,int,int,Vec *)); 35 #endif 36 37 extern int VecDot ANSI_ARGS((Vec, Vec, VecScalar)); 38 extern int VecTDot ANSI_ARGS((Vec, Vec, VecScalar)); 39 extern int VecMDot ANSI_ARGS((int, Vec ,Vec*,VecScalar)); 40 extern int VecMTDot ANSI_ARGS((int, Vec ,Vec*,VecScalar)); 41 extern int VecNorm ANSI_ARGS((Vec, VecScalar)); 42 extern int VecASum ANSI_ARGS((Vec, VecScalar)); 43 extern int VecMax ANSI_ARGS((Vec, int *, VecScalar)); 44 extern int VecScale ANSI_ARGS((VecScalar, Vec)); 45 extern int VecCopy ANSI_ARGS((Vec, Vec)); 46 extern int VecSet ANSI_ARGS((VecScalar, Vec)); 47 extern int VecSwap ANSI_ARGS((Vec, Vec)); 48 extern int VecAXPY ANSI_ARGS((VecScalar, Vec, Vec)); 49 extern int VecMAXPY ANSI_ARGS((int, VecScalar, Vec ,Vec*)); 50 extern int VecAYPX ANSI_ARGS((VecScalar, Vec, Vec)); 51 extern int VecWAXPY ANSI_ARGS((VecScalar, Vec, Vec, Vec)); 52 extern int VecPMult ANSI_ARGS((Vec, Vec, Vec)); 53 extern int VecPDiv ANSI_ARGS((Vec, Vec, Vec)); 54 extern int VecCreate ANSI_ARGS((Vec,Vec *)); 55 extern int VecDestroy ANSI_ARGS((Vec)); 56 extern int VecGetVecs ANSI_ARGS((Vec, int,Vec **)); 57 extern int VecFreeVecs ANSI_ARGS((Vec*,int)); 58 59 extern int VecAddValues ANSI_ARGS((Vec, int, int *,VecScalar)); 60 extern int VecInsertValues ANSI_ARGS((Vec, int, int *,VecScalar)); 61 extern int VecBeginAssembly ANSI_ARGS((Vec)); 62 extern int VecEndAssembly ANSI_ARGS((Vec)); 63 64 extern int VecScatterBegin ANSI_ARGS((Vec,IS,Vec,IS,VecScatterCtx *)); 65 extern int VecScatterEnd ANSI_ARGS((Vec,IS,Vec,IS,VecScatterCtx *)); 66 67 extern int VecScatterAddBegin ANSI_ARGS((Vec,IS,Vec,IS,VecScatterCtx *)); 68 extern int VecScatterAddEnd ANSI_ARGS((Vec,IS,Vec,IS,VecScatterCtx *)); 69 70 extern int VecGetArray ANSI_ARGS((Vec,VecScalar **)); 71 extern int VecValidVector ANSI_ARGS((Vec)); 72 extern int VecView ANSI_ARGS((Vec,void *)); 73 74 extern int VecGetSize ANSI_ARGS((Vec,int *)); 75 extern int VecGetLocalSize ANSI_ARGS((Vec,int *)); 76 77 #endif 78 79 80