xref: /petsc/include/petscvec.h (revision ee0de897fec99be7c10c7637bbd068d61b2ce625)
1 /* $Id: vec.h,v 1.40 1995/11/19 00:50:19 bsmith Exp bsmith $ */
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 #ifndef __VEC_PACKAGE
17 #define __VEC_PACKAGE
18 #include "is.h"
19 
20 #define VEC_COOKIE         PETSC_COOKIE+3
21 #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
22 
23 typedef enum { VECSAME=-1, VECSEQ, VECMPI } VecType;
24 
25 typedef struct _Vec*         Vec;
26 typedef struct _VecScatter*  VecScatter;
27 
28 extern int VecCreateSeq(MPI_Comm,int,Vec *);
29 extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
30 extern int VecCreate(MPI_Comm,int,Vec *);
31 
32 extern int VecDestroy(Vec);
33 
34 extern int VecDot(Vec, Vec, Scalar*);
35 extern int VecTDot(Vec, Vec, Scalar*);
36 extern int VecMDot(int,  Vec ,Vec*,Scalar*);
37 extern int VecMTDot(int,  Vec ,Vec*,Scalar*);
38 
39 typedef enum {NORM_1=1,NORM_2=2,NORM_FROBENIUS=3,NORM_INFINITY=4} NormType;
40 #define NORM_MAX NORM_INFINITY
41 extern int VecNorm(Vec,NormType,double *);
42 extern int VecSum(Vec,Scalar*);
43 extern int VecMax(Vec, int *,    double*);
44 extern int VecMin(Vec, int *,    double*);
45 extern int VecScale(Scalar*, Vec);
46 extern int VecCopy(Vec, Vec);
47 extern int VecSet(Scalar*, Vec);
48 extern int VecSwap(Vec, Vec);
49 extern int VecAXPY(Scalar*, Vec, Vec);
50 extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
51 extern int VecAYPX(Scalar*, Vec, Vec);
52 extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
53 extern int VecPMult(Vec, Vec, Vec);
54 extern int VecPDiv(Vec, Vec, Vec);
55 extern int VecShift(Scalar *,Vec);
56 extern int VecReciprocal(Vec);
57 extern int VecAbs(Vec);
58 extern int VecDuplicate(Vec,Vec *);
59 extern int VecDuplicateVecs(Vec, int,Vec **);
60 extern int VecDestroyVecs(Vec*,int);
61 
62 typedef enum {NOT_SET_VALUES, INSERT_VALUES, ADD_VALUES} InsertMode;
63 extern int VecSetValues(Vec, int, int *,Scalar*,InsertMode);
64 extern int VecAssemblyBegin(Vec);
65 extern int VecAssemblyEnd(Vec);
66 
67 typedef enum {SCATTER_REVERSE=1,SCATTER_DOWN=2,SCATTER_UP=4,SCATTER_ALL=8,
68               SCATTER_ALL_REVERSE=9} ScatterMode;
69 extern int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter);
70 extern int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter);
71 extern int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
72 extern int VecScatterDestroy(VecScatter);
73 extern int VecScatterCopy(VecScatter,VecScatter *);
74 extern int VecScatterView(VecScatter,Viewer);
75 
76 extern int VecGetArray(Vec,Scalar**);
77 extern int VecRestoreArray(Vec,Scalar**);
78 extern int VecPlaceArray(Vec,Scalar*);
79 extern int VecGetArrays(Vec*,int,Scalar***);
80 extern int VecRestoreArrays(Vec*,int,Scalar***);
81 extern int VecValidVector(Vec);
82 extern int VecView(Vec,Viewer);
83 extern int VecLoad(Viewer,Vec*);
84 
85 extern int VecGetSize(Vec,int *);
86 extern int VecGetLocalSize(Vec,int *);
87 extern int VecGetOwnershipRange(Vec,int*,int*);
88 
89 typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineMode;
90 extern int VecPipelineBegin(Vec,Vec,InsertMode,PipelineMode,VecScatter);
91 extern int VecPipelineEnd(Vec,Vec,InsertMode,PipelineMode,VecScatter);
92 
93 #if defined(__DRAW_PACKAGE)
94 extern int DrawTensorContour(Draw,int,int,double *,double *,Vec);
95 #endif
96 
97 #endif
98 
99 
100