xref: /petsc/include/petscvec.h (revision 08480c60afa5ef1d2e4e27b9ebdf48b02c6a2186)
1*08480c60SBarry Smith /* $Id: vec.h,v 1.35 1995/10/11 17:59:04 curfman Exp bsmith $ */
22eac72dbSBarry Smith /*
32eac72dbSBarry Smith    This defines the abstract vector component. These are patterned
42eac72dbSBarry Smith    after the Level-1 Blas, but with some additions that have proved
52eac72dbSBarry Smith    useful. These include routines to allocate and free vectors.
62eac72dbSBarry Smith 
72eac72dbSBarry Smith    Note that the routines that are normally thought of as returning a
82eac72dbSBarry Smith    value (e.g., dot, norm) return their value through an argument.
92eac72dbSBarry Smith    This allows these routines to be used with other datatype, such
102eac72dbSBarry Smith    as float and dcomplex.
112eac72dbSBarry Smith 
122eac72dbSBarry Smith    All vectors should be declared as a Vec. All vector routines begin
132eac72dbSBarry Smith    with Vec.
142eac72dbSBarry Smith 
152eac72dbSBarry Smith 
162eac72dbSBarry Smith  */
172eac72dbSBarry Smith 
182eac72dbSBarry Smith #ifndef __VEC_PACKAGE
192eac72dbSBarry Smith #define __VEC_PACKAGE
202eac72dbSBarry Smith #include "is.h"
212eac72dbSBarry Smith 
229e25ed09SBarry Smith #define VEC_COOKIE         PETSC_COOKIE+3
239e25ed09SBarry Smith #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
249e25ed09SBarry Smith 
25b56ba379SLois Curfman McInnes typedef enum { VECSAME=-1, VECSEQ, VECMPI } VecType;
26f0479e8cSBarry Smith 
272eac72dbSBarry Smith typedef struct _Vec*         Vec;
28*08480c60SBarry Smith typedef struct _VecScatter*  VecScatter;
292eac72dbSBarry Smith 
30de7da479SBarry Smith extern int VecCreateSeq(MPI_Comm,int,Vec *);
318ed539a5SBarry Smith extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
326469c4f9SBarry Smith extern int VecCreate(MPI_Comm,int,Vec *);
332eac72dbSBarry Smith 
348ed539a5SBarry Smith extern int VecDot(Vec, Vec, Scalar*);
358ed539a5SBarry Smith extern int VecTDot(Vec, Vec, Scalar*);
368ed539a5SBarry Smith extern int VecMDot(int,      Vec ,Vec*,Scalar*);
378ed539a5SBarry Smith extern int VecMTDot(int,      Vec ,Vec*,Scalar*);
388ed539a5SBarry Smith extern int VecNorm(Vec, double*);
3920563c6bSBarry Smith extern int VecASum(Vec, double*);
40ee50ffe9SBarry Smith extern int VecSum(Vec,Scalar*);
41fddd07d0SBarry Smith extern int VecAMax(Vec, int *,   double*);
427c16e1c9SBarry Smith extern int VecMax(Vec, int *,    double*);
437c16e1c9SBarry Smith extern int VecMin(Vec, int *,    double*);
448ed539a5SBarry Smith extern int VecScale(Scalar*, Vec);
458ed539a5SBarry Smith extern int VecCopy(Vec, Vec);
468ed539a5SBarry Smith extern int VecSet(Scalar*, Vec);
478ed539a5SBarry Smith extern int VecSwap(Vec, Vec);
488ed539a5SBarry Smith extern int VecAXPY(Scalar*, Vec, Vec);
498ed539a5SBarry Smith extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
508ed539a5SBarry Smith extern int VecAYPX(Scalar*, Vec, Vec);
518ed539a5SBarry Smith extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
528ed539a5SBarry Smith extern int VecPMult(Vec, Vec, Vec);
538ed539a5SBarry Smith extern int VecPDiv(Vec, Vec, Vec);
546469c4f9SBarry Smith extern int VecDuplicate(Vec,Vec *);
558ed539a5SBarry Smith extern int VecDestroy(Vec);
568ed539a5SBarry Smith extern int VecGetVecs(Vec, int,Vec **);
578ed539a5SBarry Smith extern int VecFreeVecs(Vec*,int);
582eac72dbSBarry Smith 
5964119d58SLois Curfman McInnes typedef enum {NOT_SET_VALUES, INSERT_VALUES, ADD_VALUES} InsertMode;
6020563c6bSBarry Smith 
6120563c6bSBarry Smith extern int VecSetValues(Vec, int, int *,Scalar*,InsertMode);
62ee50ffe9SBarry Smith extern int VecAssemblyBegin(Vec);
63ee50ffe9SBarry Smith extern int VecAssemblyEnd(Vec);
648ed539a5SBarry Smith 
6564119d58SLois Curfman McInnes typedef enum {SCATTER_REVERSE=1,SCATTER_DOWN=2,SCATTER_UP=4,SCATTER_ALL=8,
6664119d58SLois Curfman McInnes               SCATTER_ALL_REVERSE=9} ScatterMode;
67ee50ffe9SBarry Smith 
68*08480c60SBarry Smith extern int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter);
69*08480c60SBarry Smith extern int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter);
70*08480c60SBarry Smith extern int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
71*08480c60SBarry Smith extern int VecScatterDestroy(VecScatter);
72*08480c60SBarry Smith extern int VecScatterCopy(VecScatter,VecScatter *);
73*08480c60SBarry Smith extern int VecScatterView(VecScatter,Viewer);
74d6dfbf8fSBarry Smith 
7564119d58SLois Curfman McInnes typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineMode;
76ee50ffe9SBarry Smith 
77*08480c60SBarry Smith extern int VecPipelineBegin(Vec,Vec,InsertMode,PipelineMode,VecScatter);
78*08480c60SBarry Smith extern int VecPipelineEnd(Vec,Vec,InsertMode,PipelineMode,VecScatter);
798ed539a5SBarry Smith 
80c01c455dSBarry Smith extern int VecShift(Scalar *,Vec);
818ed539a5SBarry Smith extern int VecGetArray(Vec,Scalar**);
826b5873e3SBarry Smith extern int VecRestoreArray(Vec,Scalar**);
83707f76d8SBarry Smith extern int VecGetArrays(Vec*,int,Scalar***);
84707f76d8SBarry Smith extern int VecRestoreArrays(Vec*,int,Scalar***);
858ed539a5SBarry Smith extern int VecValidVector(Vec);
868ed539a5SBarry Smith extern int VecView(Vec,Viewer);
875f52d6abSBarry Smith extern int VecLoad(Viewer,Vec*);
888ed539a5SBarry Smith 
898ed539a5SBarry Smith extern int VecGetSize(Vec,int *);
908ed539a5SBarry Smith extern int VecGetLocalSize(Vec,int *);
91d6dfbf8fSBarry Smith extern int VecGetOwnershipRange(Vec,int*,int*);
928ed539a5SBarry Smith 
938ed539a5SBarry Smith /* utility routines */
948ed539a5SBarry Smith extern int VecReciprocal(Vec);
95bfe6c5c8SBarry Smith extern int VecAbs(Vec);
962eac72dbSBarry Smith 
9734233285SBarry Smith #if defined(__DRAW_PACKAGE)
9834233285SBarry Smith extern int DrawTensorContour(DrawCtx,int,int,double *,double *,Vec);
9934233285SBarry Smith #endif
10034233285SBarry Smith 
1012eac72dbSBarry Smith #endif
1022eac72dbSBarry Smith 
1032eac72dbSBarry Smith 
104