xref: /petsc/include/petscvec.h (revision 4b0e389b2accb070e9f94a7c5aef9e462c8b7c96)
1*4b0e389bSBarry Smith /* $Id: vec.h,v 1.40 1995/11/19 00:50:19 bsmith 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 #ifndef __VEC_PACKAGE
172eac72dbSBarry Smith #define __VEC_PACKAGE
182eac72dbSBarry Smith #include "is.h"
192eac72dbSBarry Smith 
209e25ed09SBarry Smith #define VEC_COOKIE         PETSC_COOKIE+3
219e25ed09SBarry Smith #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
229e25ed09SBarry Smith 
23b56ba379SLois Curfman McInnes typedef enum { VECSAME=-1, VECSEQ, VECMPI } VecType;
24f0479e8cSBarry Smith 
252eac72dbSBarry Smith typedef struct _Vec*         Vec;
2608480c60SBarry Smith typedef struct _VecScatter*  VecScatter;
272eac72dbSBarry Smith 
28de7da479SBarry Smith extern int VecCreateSeq(MPI_Comm,int,Vec *);
298ed539a5SBarry Smith extern int VecCreateMPI(MPI_Comm,int,int,Vec *);
306469c4f9SBarry Smith extern int VecCreate(MPI_Comm,int,Vec *);
312eac72dbSBarry Smith 
32*4b0e389bSBarry Smith extern int VecDestroy(Vec);
33*4b0e389bSBarry 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*);
38cddf8d76SBarry Smith 
39cddf8d76SBarry Smith typedef enum {NORM_1=1,NORM_2=2,NORM_FROBENIUS=3,NORM_INFINITY=4} NormType;
40cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY
41cddf8d76SBarry Smith extern int VecNorm(Vec,NormType,double *);
42ee50ffe9SBarry Smith extern int VecSum(Vec,Scalar*);
437c16e1c9SBarry Smith extern int VecMax(Vec, int *,    double*);
447c16e1c9SBarry Smith extern int VecMin(Vec, int *,    double*);
458ed539a5SBarry Smith extern int VecScale(Scalar*, Vec);
468ed539a5SBarry Smith extern int VecCopy(Vec, Vec);
478ed539a5SBarry Smith extern int VecSet(Scalar*, Vec);
488ed539a5SBarry Smith extern int VecSwap(Vec, Vec);
498ed539a5SBarry Smith extern int VecAXPY(Scalar*, Vec, Vec);
508ed539a5SBarry Smith extern int VecMAXPY(int,      Scalar*, Vec ,Vec*);
518ed539a5SBarry Smith extern int VecAYPX(Scalar*, Vec, Vec);
528ed539a5SBarry Smith extern int VecWAXPY(Scalar*, Vec, Vec, Vec);
538ed539a5SBarry Smith extern int VecPMult(Vec, Vec, Vec);
548ed539a5SBarry Smith extern int VecPDiv(Vec, Vec, Vec);
55*4b0e389bSBarry Smith extern int VecShift(Scalar *,Vec);
56*4b0e389bSBarry Smith extern int VecReciprocal(Vec);
57*4b0e389bSBarry Smith extern int VecAbs(Vec);
586469c4f9SBarry Smith extern int VecDuplicate(Vec,Vec *);
59afc8d9b6SBarry Smith extern int VecDuplicateVecs(Vec, int,Vec **);
60*4b0e389bSBarry Smith extern int VecDestroyVecs(Vec*,int);
612eac72dbSBarry Smith 
6264119d58SLois Curfman McInnes typedef enum {NOT_SET_VALUES, INSERT_VALUES, ADD_VALUES} InsertMode;
6320563c6bSBarry Smith extern int VecSetValues(Vec, int, int *,Scalar*,InsertMode);
64ee50ffe9SBarry Smith extern int VecAssemblyBegin(Vec);
65ee50ffe9SBarry Smith extern int VecAssemblyEnd(Vec);
668ed539a5SBarry Smith 
6764119d58SLois Curfman McInnes typedef enum {SCATTER_REVERSE=1,SCATTER_DOWN=2,SCATTER_UP=4,SCATTER_ALL=8,
6864119d58SLois Curfman McInnes               SCATTER_ALL_REVERSE=9} ScatterMode;
6908480c60SBarry Smith extern int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter);
7008480c60SBarry Smith extern int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter);
7108480c60SBarry Smith extern int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
7208480c60SBarry Smith extern int VecScatterDestroy(VecScatter);
7308480c60SBarry Smith extern int VecScatterCopy(VecScatter,VecScatter *);
7408480c60SBarry Smith extern int VecScatterView(VecScatter,Viewer);
75d6dfbf8fSBarry Smith 
768ed539a5SBarry Smith extern int VecGetArray(Vec,Scalar**);
776b5873e3SBarry Smith extern int VecRestoreArray(Vec,Scalar**);
78afc8d9b6SBarry Smith extern int VecPlaceArray(Vec,Scalar*);
79707f76d8SBarry Smith extern int VecGetArrays(Vec*,int,Scalar***);
80707f76d8SBarry Smith extern int VecRestoreArrays(Vec*,int,Scalar***);
818ed539a5SBarry Smith extern int VecValidVector(Vec);
828ed539a5SBarry Smith extern int VecView(Vec,Viewer);
835f52d6abSBarry Smith extern int VecLoad(Viewer,Vec*);
848ed539a5SBarry Smith 
858ed539a5SBarry Smith extern int VecGetSize(Vec,int *);
868ed539a5SBarry Smith extern int VecGetLocalSize(Vec,int *);
87d6dfbf8fSBarry Smith extern int VecGetOwnershipRange(Vec,int*,int*);
888ed539a5SBarry Smith 
89*4b0e389bSBarry Smith typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineMode;
90*4b0e389bSBarry Smith extern int VecPipelineBegin(Vec,Vec,InsertMode,PipelineMode,VecScatter);
91*4b0e389bSBarry Smith extern int VecPipelineEnd(Vec,Vec,InsertMode,PipelineMode,VecScatter);
922eac72dbSBarry Smith 
9334233285SBarry Smith #if defined(__DRAW_PACKAGE)
94d7e8b826SBarry Smith extern int DrawTensorContour(Draw,int,int,double *,double *,Vec);
9534233285SBarry Smith #endif
9634233285SBarry Smith 
972eac72dbSBarry Smith #endif
982eac72dbSBarry Smith 
992eac72dbSBarry Smith 
100