xref: /petsc/include/petscvec.h (revision bf5bf444acd538ac2d7e8313ff97568e02de79c3)
1*bf5bf444SLois Curfman McInnes /* $Id: vec.h,v 1.41 1996/01/01 01:05:46 bsmith Exp curfman $ */
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"
19*bf5bf444SLois Curfman McInnes #include "sys.h"
202eac72dbSBarry Smith 
219e25ed09SBarry Smith #define VEC_COOKIE         PETSC_COOKIE+3
229e25ed09SBarry Smith #define VEC_SCATTER_COOKIE PETSC_COOKIE+4
239e25ed09SBarry Smith 
24b56ba379SLois Curfman McInnes typedef enum { VECSAME=-1, VECSEQ, VECMPI } VecType;
25f0479e8cSBarry Smith 
262eac72dbSBarry Smith typedef struct _Vec*         Vec;
2708480c60SBarry Smith typedef struct _VecScatter*  VecScatter;
282eac72dbSBarry Smith 
29de7da479SBarry Smith extern int VecCreateSeq(MPI_Comm,int,Vec*);
308ed539a5SBarry Smith extern int VecCreateMPI(MPI_Comm,int,int,Vec*);
316469c4f9SBarry Smith extern int VecCreate(MPI_Comm,int,Vec*);
322eac72dbSBarry Smith 
334b0e389bSBarry Smith extern int VecDestroy(Vec);
344b0e389bSBarry Smith 
358ed539a5SBarry Smith extern int VecDot(Vec,Vec,Scalar*);
368ed539a5SBarry Smith extern int VecTDot(Vec,Vec,Scalar*);
378ed539a5SBarry Smith extern int VecMDot(int,Vec,Vec*,Scalar*);
388ed539a5SBarry Smith extern int VecMTDot(int,Vec,Vec*,Scalar*);
39cddf8d76SBarry Smith 
40cddf8d76SBarry Smith typedef enum {NORM_1=1,NORM_2=2,NORM_FROBENIUS=3,NORM_INFINITY=4} NormType;
41cddf8d76SBarry Smith #define NORM_MAX NORM_INFINITY
42cddf8d76SBarry Smith extern int VecNorm(Vec,NormType,double *);
43ee50ffe9SBarry Smith extern int VecSum(Vec,Scalar*);
447c16e1c9SBarry Smith extern int VecMax(Vec,int*,double*);
457c16e1c9SBarry Smith extern int VecMin(Vec,int*,double*);
468ed539a5SBarry Smith extern int VecScale(Scalar*,Vec);
478ed539a5SBarry Smith extern int VecCopy(Vec,Vec);
48*bf5bf444SLois Curfman McInnes extern int VecSetRandom(SYRandomType,Vec);
498ed539a5SBarry Smith extern int VecSet(Scalar*,Vec);
508ed539a5SBarry Smith extern int VecSwap(Vec,Vec);
518ed539a5SBarry Smith extern int VecAXPY(Scalar*,Vec,Vec);
528ed539a5SBarry Smith extern int VecMAXPY(int,Scalar*,Vec,Vec*);
538ed539a5SBarry Smith extern int VecAYPX(Scalar*,Vec,Vec);
548ed539a5SBarry Smith extern int VecWAXPY(Scalar*,Vec,Vec,Vec);
558ed539a5SBarry Smith extern int VecPMult(Vec,Vec,Vec);
568ed539a5SBarry Smith extern int VecPDiv(Vec,Vec,Vec);
574b0e389bSBarry Smith extern int VecShift(Scalar*,Vec);
584b0e389bSBarry Smith extern int VecReciprocal(Vec);
594b0e389bSBarry Smith extern int VecAbs(Vec);
606469c4f9SBarry Smith extern int VecDuplicate(Vec,Vec*);
61afc8d9b6SBarry Smith extern int VecDuplicateVecs(Vec,int,Vec**);
624b0e389bSBarry Smith extern int VecDestroyVecs(Vec*,int);
632eac72dbSBarry Smith 
6464119d58SLois Curfman McInnes typedef enum {NOT_SET_VALUES, INSERT_VALUES, ADD_VALUES} InsertMode;
6520563c6bSBarry Smith extern int VecSetValues(Vec,int,int*,Scalar*,InsertMode);
66ee50ffe9SBarry Smith extern int VecAssemblyBegin(Vec);
67ee50ffe9SBarry Smith extern int VecAssemblyEnd(Vec);
688ed539a5SBarry Smith 
6964119d58SLois Curfman McInnes typedef enum {SCATTER_REVERSE=1,SCATTER_DOWN=2,SCATTER_UP=4,SCATTER_ALL=8,
7064119d58SLois Curfman McInnes               SCATTER_ALL_REVERSE=9} ScatterMode;
7108480c60SBarry Smith extern int VecScatterBegin(Vec,Vec,InsertMode,ScatterMode,VecScatter);
7208480c60SBarry Smith extern int VecScatterEnd(Vec,Vec,InsertMode,ScatterMode,VecScatter);
7308480c60SBarry Smith extern int VecScatterCreate(Vec,IS,Vec,IS,VecScatter *);
7408480c60SBarry Smith extern int VecScatterDestroy(VecScatter);
7508480c60SBarry Smith extern int VecScatterCopy(VecScatter,VecScatter *);
7608480c60SBarry Smith extern int VecScatterView(VecScatter,Viewer);
77d6dfbf8fSBarry Smith 
788ed539a5SBarry Smith extern int VecGetArray(Vec,Scalar**);
796b5873e3SBarry Smith extern int VecRestoreArray(Vec,Scalar**);
80afc8d9b6SBarry Smith extern int VecPlaceArray(Vec,Scalar*);
81707f76d8SBarry Smith extern int VecGetArrays(Vec*,int,Scalar***);
82707f76d8SBarry Smith extern int VecRestoreArrays(Vec*,int,Scalar***);
838ed539a5SBarry Smith extern int VecValidVector(Vec);
848ed539a5SBarry Smith extern int VecView(Vec,Viewer);
855f52d6abSBarry Smith extern int VecLoad(Viewer,Vec*);
868ed539a5SBarry Smith 
878ed539a5SBarry Smith extern int VecGetSize(Vec,int*);
888ed539a5SBarry Smith extern int VecGetLocalSize(Vec,int*);
89d6dfbf8fSBarry Smith extern int VecGetOwnershipRange(Vec,int*,int*);
908ed539a5SBarry Smith 
914b0e389bSBarry Smith typedef enum {PIPELINE_DOWN=0,PIPELINE_UP=1} PipelineMode;
924b0e389bSBarry Smith extern int VecPipelineBegin(Vec,Vec,InsertMode,PipelineMode,VecScatter);
934b0e389bSBarry Smith extern int VecPipelineEnd(Vec,Vec,InsertMode,PipelineMode,VecScatter);
942eac72dbSBarry Smith 
9534233285SBarry Smith #if defined(__DRAW_PACKAGE)
96d7e8b826SBarry Smith extern int DrawTensorContour(Draw,int,int,double *,double *,Vec);
9734233285SBarry Smith #endif
9834233285SBarry Smith 
992eac72dbSBarry Smith #endif
1002eac72dbSBarry Smith 
1012eac72dbSBarry Smith 
102