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