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